From b2dd89793fec315d0f78e0b4ed14660a1d06f84d Mon Sep 17 00:00:00 2001 From: stv Date: Wed, 14 Feb 2007 18:38:07 +0000 Subject: [PATCH] no message --- GUI_version.h.in | 34 - INSTALL | 1 - LICENCE | 504 -- Makefile.in | 194 - adm_local/Makefile.in | 61 - adm_local/unix/config_files/README | 3 - adm_local/unix/config_files/check_GLViewer.m4 | 25 - adm_local/unix/config_files/check_GUI.m4 | 63 - .../unix/config_files/check_OCCViewer.m4 | 25 - .../unix/config_files/check_Plot2dViewer.m4 | 25 - .../unix/config_files/check_PyConsole.m4 | 25 - .../unix/config_files/check_SalomeObject.m4 | 25 - .../config_files/check_SupervGraphViewer.m4 | 25 - .../unix/config_files/check_VTKViewer.m4 | 25 - .../unix/config_files/check_corba_in_GUI.m4 | 12 - .../unix/config_files/check_disable_Corba.m4 | 27 - adm_local/unix/config_files/check_msg2qm.m4 | 57 - adm_local/unix/config_files/check_opengl.m4 | 195 - adm_local/unix/config_files/check_pyqt.m4 | 308 -- adm_local/unix/config_files/check_qt.m4 | 182 - adm_local/unix/config_files/check_qwt.m4 | 152 - adm_local/unix/config_files/check_sip.m4 | 169 - adm_local/unix/config_files/check_vtk.m4 | 145 - adm_local/unix/make_commence.in | 277 -- adm_local/unix/make_conclude.in | 426 -- adm_local/unix/make_omniorb.in | 50 - bin/VERSION.in | 1 - bin/runLightSalome.csh | 7 - bin/runLightSalome.sh | 29 - build_configure | 215 - configure.in.base | 595 --- doc/Makefile.in | 69 - doc/salome/Makefile.in | 77 - doc/salome/gui/GUI/closestudy.png | Bin 9421 -> 0 bytes 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/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 | 144 - doc/salome/gui/GUI/i_blue.jpg | Bin 1337 -> 0 bytes doc/salome/gui/GUI/image54.jpg | Bin 82626 -> 0 bytes doc/salome/gui/GUI/image65.gif | Bin 17930 -> 0 bytes doc/salome/gui/GUI/image67.gif | Bin 7952 -> 0 bytes doc/salome/gui/GUI/image68.gif | Bin 919 -> 0 bytes doc/salome/gui/GUI/image69.gif | Bin 919 -> 0 bytes doc/salome/gui/GUI/image70.gif | Bin 882 -> 0 bytes doc/salome/gui/GUI/image71.gif | Bin 899 -> 0 bytes doc/salome/gui/GUI/image72.gif | Bin 879 -> 0 bytes doc/salome/gui/GUI/image73.gif | Bin 856 -> 0 bytes doc/salome/gui/GUI/image75.gif | Bin 857 -> 0 bytes doc/salome/gui/GUI/image94.gif | Bin 910 -> 0 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/introduction_to_gui.htm | 192 - doc/salome/gui/GUI/kernel.log | 270 -- .../kernel/about_salome_pro_architecture.htm | 243 - .../kernel/about_salome_pro_help_system.htm | 116 - .../gui/GUI/kernel/creating_a_new_study.htm | 183 - .../gui/GUI/kernel/displaying_studies.htm | 152 - doc/salome/gui/GUI/kernel/editing_studies.htm | 139 - .../getting_properties_of_the_study.htm | 190 - .../gui/GUI/kernel/getting_started2.htm | 135 - doc/salome/gui/GUI/kernel/introduction.htm | 235 - .../GUI/kernel/introduction_to_salome_pro.htm | 214 - .../gui/GUI/kernel/navigating_topics.htm | 172 - doc/salome/gui/GUI/kernel/opening_studies.htm | 195 - doc/salome/gui/GUI/kernel/readme.html | 1358 ------ .../gui/GUI/kernel/running_salome_pro.htm | 344 -- .../gui/GUI/kernel/salome_pro_desktop.htm | 231 - doc/salome/gui/GUI/kernel/saving_a_study.htm | 273 -- .../gui/GUI/kernel/setting_preferences.htm | 378 -- .../GUI/kernel/using_catalog_generator.htm | 233 - .../gui/GUI/kernel/using_left-hand_tabs.htm | 149 - .../gui/GUI/kernel/using_object_browser.htm | 203 - doc/salome/gui/GUI/kernel/using_registry.htm | 207 - doc/salome/gui/GUI/mesh_preferences.htm | 309 -- doc/salome/gui/GUI/note1.gif | Bin 1505 -> 0 bytes doc/salome/gui/GUI/pics/cataloggenerator.png | Bin 15404 -> 0 bytes doc/salome/gui/GUI/pics/choicepage.png | Bin 21317 -> 0 bytes doc/salome/gui/GUI/pics/copy-paste.jpg | Bin 1199 -> 0 bytes doc/salome/gui/GUI/pics/dumpstudy.png | Bin 22049 -> 0 bytes doc/salome/gui/GUI/pics/exemple.gif | Bin 1340 -> 0 bytes doc/salome/gui/GUI/pics/geomview-alt.png | Bin 73865 -> 0 bytes doc/salome/gui/GUI/pics/icon_about.png | Bin 79458 -> 0 bytes doc/salome/gui/GUI/pics/import.png | Bin 40393 -> 0 bytes doc/salome/gui/GUI/pics/intropage.png | Bin 45062 -> 0 bytes doc/salome/gui/GUI/pics/launch1.png | Bin 91068 -> 0 bytes doc/salome/gui/GUI/pics/loadscript.png | Bin 19952 -> 0 bytes doc/salome/gui/GUI/pics/loadstudy2.png | Bin 8181 -> 0 bytes doc/salome/gui/GUI/pics/lockedstudy.png | Bin 6140 -> 0 bytes doc/salome/gui/GUI/pics/neo-view2.png | Bin 64097 -> 0 bytes doc/salome/gui/GUI/pics/newsticn.jpg | Bin 851 -> 0 bytes doc/salome/gui/GUI/pics/objectbrowser1.png | Bin 10900 -> 0 bytes doc/salome/gui/GUI/pics/objectbrowser2.png | Bin 16560 -> 0 bytes doc/salome/gui/GUI/pics/open.jpg | Bin 928 -> 0 bytes doc/salome/gui/GUI/pics/pref11.png | Bin 28667 -> 0 bytes doc/salome/gui/GUI/pics/pref12.png | Bin 39991 -> 0 bytes doc/salome/gui/GUI/pics/pref13.png | Bin 19006 -> 0 bytes doc/salome/gui/GUI/pics/pref14.png | Bin 22374 -> 0 bytes doc/salome/gui/GUI/pics/pref15.png | Bin 27974 -> 0 bytes doc/salome/gui/GUI/pics/pref21.png | Bin 28831 -> 0 bytes doc/salome/gui/GUI/pics/pref22.png | Bin 21249 -> 0 bytes doc/salome/gui/GUI/pics/pref23.png | Bin 22674 -> 0 bytes doc/salome/gui/GUI/pics/pref24.png | Bin 32727 -> 0 bytes doc/salome/gui/GUI/pics/pref31.png | Bin 45306 -> 0 bytes doc/salome/gui/GUI/pics/pref32.png | Bin 31670 -> 0 bytes doc/salome/gui/GUI/pics/pref33.png | Bin 37500 -> 0 bytes doc/salome/gui/GUI/pics/pref34.png | Bin 51344 -> 0 bytes doc/salome/gui/GUI/pics/pref37.png | Bin 35733 -> 0 bytes doc/salome/gui/GUI/pics/pref38.png | Bin 34467 -> 0 bytes doc/salome/gui/GUI/pics/pref39.png | Bin 22668 -> 0 bytes doc/salome/gui/GUI/pics/productpage.png | Bin 23373 -> 0 bytes doc/salome/gui/GUI/pics/progresspage.png | Bin 18903 -> 0 bytes doc/salome/gui/GUI/pics/readmepage.png | Bin 20256 -> 0 bytes doc/salome/gui/GUI/pics/registry1.png | Bin 16943 -> 0 bytes doc/salome/gui/GUI/pics/registry3.png | Bin 7440 -> 0 bytes doc/salome/gui/GUI/pics/registry4.png | Bin 17550 -> 0 bytes doc/salome/gui/GUI/pics/save.jpg | Bin 966 -> 0 bytes doc/salome/gui/GUI/pics/selectcolor.png | Bin 26899 -> 0 bytes doc/salome/gui/GUI/pics/selectfont.png | Bin 23157 -> 0 bytes doc/salome/gui/GUI/pics/studyproperties.png | Bin 10469 -> 0 bytes doc/salome/gui/GUI/pics/view2.png | Bin 15859 -> 0 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 .../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/whftdata.js | 25 - doc/salome/gui/GUI/whdata/whftdata0.htm | 45 - doc/salome/gui/GUI/whdata/whfts.htm | 18 - doc/salome/gui/GUI/whdata/whfts.js | 40 - doc/salome/gui/GUI/whdata/whfwdata.js | 37 - doc/salome/gui/GUI/whdata/whfwdata0.htm | 1340 ------ doc/salome/gui/GUI/whdata/whgdata.js | 26 - doc/salome/gui/GUI/whdata/whgdata0.htm | 33 - doc/salome/gui/GUI/whdata/whglo.htm | 16 - doc/salome/gui/GUI/whdata/whglo.js | 34 - doc/salome/gui/GUI/whdata/whidata.js | 89 - doc/salome/gui/GUI/whdata/whidx.htm | 15 - doc/salome/gui/GUI/whdata/whidx.js | 34 - doc/salome/gui/GUI/whdata/whtdata.js | 64 - doc/salome/gui/GUI/whdata/whtdata0.htm | 47 - doc/salome/gui/GUI/whdata/whtoc.htm | 16 - doc/salome/gui/GUI/whdata/whtoc.js | 31 - 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/whgdata/whexpbar.gif | Bin 67 -> 0 bytes doc/salome/gui/GUI/whgdata/whlstf0.htm | 46 - doc/salome/gui/GUI/whgdata/whlstf1.htm | 43 - doc/salome/gui/GUI/whgdata/whlstf10.htm | 45 - doc/salome/gui/GUI/whgdata/whlstf11.htm | 50 - doc/salome/gui/GUI/whgdata/whlstf2.htm | 45 - doc/salome/gui/GUI/whgdata/whlstf3.htm | 45 - doc/salome/gui/GUI/whgdata/whlstf4.htm | 45 - doc/salome/gui/GUI/whgdata/whlstf5.htm | 49 - doc/salome/gui/GUI/whgdata/whlstf6.htm | 45 - doc/salome/gui/GUI/whgdata/whlstf7.htm | 43 - doc/salome/gui/GUI/whgdata/whlstf8.htm | 47 - doc/salome/gui/GUI/whgdata/whlstf9.htm | 41 - doc/salome/gui/GUI/whgdata/whlstfl0.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl1.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl10.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl11.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl12.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl13.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl14.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl15.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl16.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl17.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl18.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl19.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl2.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl20.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl21.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl22.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl23.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl24.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl25.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl26.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl3.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl4.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl5.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl6.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl7.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl8.htm | 45 - doc/salome/gui/GUI/whgdata/whlstfl9.htm | 45 - doc/salome/gui/GUI/whgdata/whlstg0.htm | 75 - doc/salome/gui/GUI/whgdata/whlsti0.htm | 39 - doc/salome/gui/GUI/whgdata/whlstt0.htm | 54 - doc/salome/gui/GUI/whgdata/whlstt1.htm | 57 - doc/salome/gui/GUI/whgdata/whlstt2.htm | 58 - doc/salome/gui/GUI/whgdata/whlstt3.htm | 62 - doc/salome/gui/GUI/whgdata/whlstt4.htm | 69 - doc/salome/gui/GUI/whgdata/whlstt5.htm | 68 - doc/salome/gui/GUI/whgdata/whnvf30.htm | 13 - doc/salome/gui/GUI/whgdata/whnvf31.htm | 15 - doc/salome/gui/GUI/whgdata/whnvf32.htm | 15 - doc/salome/gui/GUI/whgdata/whnvf33.htm | 15 - doc/salome/gui/GUI/whgdata/whnvl31.htm | 43 - doc/salome/gui/GUI/whgdata/whnvl32.htm | 72 - doc/salome/gui/GUI/whgdata/whnvl33.htm | 72 - doc/salome/gui/GUI/whgdata/whnvp30.htm | 16 - doc/salome/gui/GUI/whgdata/whnvp31.htm | 16 - doc/salome/gui/GUI/whgdata/whnvp32.htm | 16 - doc/salome/gui/GUI/whgdata/whnvp33.htm | 16 - doc/salome/gui/GUI/whgdata/whnvt30.htm | 47 - doc/salome/gui/GUI/whgdata/whnvt31.htm | 45 - doc/salome/gui/GUI/whgdata/whnvt32.htm | 45 - doc/salome/gui/GUI/whgdata/whnvt33.htm | 45 - 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 | 31 - doc/salome/gui/GUI/whxdata/whfts.xml | 7 - doc/salome/gui/GUI/whxdata/whfwdata0.xml | 1326 ------ doc/salome/gui/GUI/whxdata/whgdata0.xml | 22 - doc/salome/gui/GUI/whxdata/whglo.xml | 5 - doc/salome/gui/GUI/whxdata/whidx.xml | 4 - doc/salome/gui/GUI/whxdata/whtdata0.xml | 41 - doc/salome/gui/GUI/whxdata/whtoc.xml | 4 - .../gui/KERNEL/pics/cataloggenerator.png | Bin 15404 -> 0 bytes doc/salome/gui/KERNEL/pics/copy-paste.jpg | Bin 1199 -> 0 bytes doc/salome/gui/KERNEL/pics/exemple.gif | Bin 1340 -> 0 bytes doc/salome/gui/KERNEL/pics/geomview-alt.png | Bin 73865 -> 0 bytes doc/salome/gui/KERNEL/pics/loadstudy2.png | Bin 8181 -> 0 bytes doc/salome/gui/KERNEL/pics/lockedstudy.png | Bin 6140 -> 0 bytes .../gui/KERNEL/pics/meshpreferences.png | Bin 23138 -> 0 bytes doc/salome/gui/KERNEL/pics/multidesktop.png | Bin 38343 -> 0 bytes doc/salome/gui/KERNEL/pics/neo-view1.png | Bin 71628 -> 0 bytes doc/salome/gui/KERNEL/pics/neo-view2.png | Bin 64097 -> 0 bytes doc/salome/gui/KERNEL/pics/newsticn.jpg | Bin 851 -> 0 bytes doc/salome/gui/KERNEL/pics/objectbrowser1.png | Bin 10900 -> 0 bytes doc/salome/gui/KERNEL/pics/objectbrowser2.png | Bin 16560 -> 0 bytes doc/salome/gui/KERNEL/pics/open.jpg | Bin 928 -> 0 bytes doc/salome/gui/KERNEL/pics/plot1.png | Bin 22170 -> 0 bytes doc/salome/gui/KERNEL/pics/pref1.png | Bin 22045 -> 0 bytes doc/salome/gui/KERNEL/pics/pref2.png | Bin 18125 -> 0 bytes doc/salome/gui/KERNEL/pics/pref4.png | Bin 15601 -> 0 bytes doc/salome/gui/KERNEL/pics/preferencies10.png | Bin 29048 -> 0 bytes doc/salome/gui/KERNEL/pics/preferencies11.png | Bin 27272 -> 0 bytes doc/salome/gui/KERNEL/pics/preferencies5.png | Bin 16850 -> 0 bytes doc/salome/gui/KERNEL/pics/preferencies7.png | Bin 18007 -> 0 bytes doc/salome/gui/KERNEL/pics/preferencies8.png | Bin 19542 -> 0 bytes doc/salome/gui/KERNEL/pics/preferencies9.png | Bin 28689 -> 0 bytes doc/salome/gui/KERNEL/pics/registry1.png | Bin 16943 -> 0 bytes doc/salome/gui/KERNEL/pics/registry3.png | Bin 7440 -> 0 bytes doc/salome/gui/KERNEL/pics/registry4.png | Bin 17550 -> 0 bytes doc/salome/gui/KERNEL/pics/save.jpg | Bin 966 -> 0 bytes doc/salome/gui/KERNEL/pics/selectcolor.png | Bin 26899 -> 0 bytes doc/salome/gui/KERNEL/pics/selectfont.png | Bin 23157 -> 0 bytes .../gui/KERNEL/pics/studyproperties.png | Bin 10469 -> 0 bytes doc/salome/gui/KERNEL/pics/undo-redo.jpg | Bin 939 -> 0 bytes doc/salome/gui/KERNEL/pics/view2.png | Bin 15859 -> 0 bytes .../gui/KERNEL/pics/viewerspreferences.png | Bin 32191 -> 0 bytes doc/salome/gui/KERNEL/whgdata/whexpbar.gif | Bin 67 -> 0 bytes doc/salome/gui/KERNEL/whgdata/whlstf0.htm | 48 - doc/salome/gui/KERNEL/whgdata/whlstf1.htm | 41 - doc/salome/gui/KERNEL/whgdata/whlstf10.htm | 46 - doc/salome/gui/KERNEL/whgdata/whlstf2.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstf3.htm | 49 - doc/salome/gui/KERNEL/whgdata/whlstf4.htm | 47 - doc/salome/gui/KERNEL/whgdata/whlstf5.htm | 47 - doc/salome/gui/KERNEL/whgdata/whlstf6.htm | 43 - doc/salome/gui/KERNEL/whgdata/whlstf7.htm | 47 - doc/salome/gui/KERNEL/whgdata/whlstf8.htm | 43 - doc/salome/gui/KERNEL/whgdata/whlstf9.htm | 47 - doc/salome/gui/KERNEL/whgdata/whlstfl0.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl1.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl10.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl11.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl12.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl13.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl14.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl15.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl16.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl17.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl18.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl19.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl2.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl20.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl21.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl22.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl23.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl24.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl25.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl3.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl4.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl5.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl6.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl7.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl8.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstfl9.htm | 45 - doc/salome/gui/KERNEL/whgdata/whlstg0.htm | 75 - doc/salome/gui/KERNEL/whgdata/whlsti0.htm | 39 - doc/salome/gui/KERNEL/whgdata/whlstt0.htm | 54 - doc/salome/gui/KERNEL/whgdata/whlstt1.htm | 57 - doc/salome/gui/KERNEL/whgdata/whlstt2.htm | 58 - doc/salome/gui/KERNEL/whgdata/whlstt3.htm | 64 - doc/salome/gui/KERNEL/whgdata/whlstt4.htm | 70 - doc/salome/gui/KERNEL/whgdata/whlstt5.htm | 69 - doc/salome/gui/KERNEL/whgdata/whnvf30.htm | 13 - doc/salome/gui/KERNEL/whgdata/whnvf31.htm | 15 - doc/salome/gui/KERNEL/whgdata/whnvf32.htm | 15 - doc/salome/gui/KERNEL/whgdata/whnvf33.htm | 15 - doc/salome/gui/KERNEL/whgdata/whnvl31.htm | 43 - doc/salome/gui/KERNEL/whgdata/whnvl32.htm | 72 - doc/salome/gui/KERNEL/whgdata/whnvl33.htm | 72 - doc/salome/gui/KERNEL/whgdata/whnvp30.htm | 16 - doc/salome/gui/KERNEL/whgdata/whnvp31.htm | 16 - doc/salome/gui/KERNEL/whgdata/whnvp32.htm | 16 - doc/salome/gui/KERNEL/whgdata/whnvp33.htm | 16 - doc/salome/gui/KERNEL/whgdata/whnvt30.htm | 47 - doc/salome/gui/KERNEL/whgdata/whnvt31.htm | 45 - doc/salome/gui/KERNEL/whgdata/whnvt32.htm | 45 - doc/salome/gui/KERNEL/whgdata/whnvt33.htm | 45 - doc/salome/tui/GUI/doxyfile.in | 243 - .../tui/GUI/sources/Application-About.png | Bin 19226 -> 0 bytes doc/salome/tui/GUI/sources/application.gif | Bin 2602 -> 0 bytes doc/salome/tui/GUI/sources/doxygen.css | 152 - doc/salome/tui/GUI/sources/footer.html | 5 - doc/salome/tui/GUI/sources/html_comments.gif | Bin 156 -> 0 bytes doc/salome/tui/GUI/sources/logocorp.gif | Bin 1792 -> 0 bytes doc/salome/tui/GUI/sources/myheader.html | 13 - doc/salome/tui/Makefile.in | 71 - idl/Makefile.in | 67 - idl/SalomeApp_Engine.idl | 41 - resources/Tools_en.xml | 21 - resources/Tools_fr.xml | 21 - resources/back.xpm | 27 - resources/cascade.png | Bin 225 -> 0 bytes resources/channel.cfg | 278 -- resources/close.png | Bin 212 -> 0 bytes resources/copy.png | Bin 245 -> 0 bytes resources/cursor_rotate.png | Bin 291 -> 0 bytes resources/cursor_sketch.png | Bin 278 -> 0 bytes resources/cursor_zoom.png | Bin 245 -> 0 bytes resources/cut.png | Bin 211 -> 0 bytes resources/default.png | Bin 684 -> 0 bytes resources/dl_delete.png | Bin 174 -> 0 bytes resources/dl_insert.png | Bin 193 -> 0 bytes resources/dl_movedown.png | Bin 149 -> 0 bytes resources/dl_moveup.png | Bin 151 -> 0 bytes resources/forward.xpm | 28 - resources/help.png | Bin 910 -> 0 bytes resources/home.xpm | 27 - resources/htile.png | Bin 871 -> 0 bytes resources/icon_about.png | Bin 79549 -> 0 bytes resources/icon_applogo.png | Bin 2383 -> 0 bytes resources/icon_default.png | Bin 684 -> 0 bytes resources/icon_module.png | Bin 1385 -> 0 bytes resources/icon_module_big.png | Bin 3630 -> 0 bytes resources/icon_select.png | Bin 976 -> 0 bytes resources/new.png | Bin 177 -> 0 bytes resources/open.png | Bin 231 -> 0 bytes resources/paste.png | Bin 280 -> 0 bytes resources/plot2d_camera_dump.png | Bin 518 -> 0 bytes resources/plot2d_clone.png | Bin 255 -> 0 bytes resources/plot2d_dump.png | Bin 610 -> 0 bytes resources/plot2d_fitall.png | Bin 523 -> 0 bytes resources/plot2d_fitarea.png | Bin 511 -> 0 bytes resources/plot2d_glpan.png | Bin 540 -> 0 bytes resources/plot2d_legend.png | Bin 308 -> 0 bytes resources/plot2d_linear.png | Bin 281 -> 0 bytes resources/plot2d_linear_y.png | Bin 289 -> 0 bytes resources/plot2d_lines.png | Bin 299 -> 0 bytes resources/plot2d_log.png | Bin 288 -> 0 bytes resources/plot2d_log_y.png | Bin 280 -> 0 bytes resources/plot2d_pan.png | Bin 545 -> 0 bytes resources/plot2d_points.png | Bin 272 -> 0 bytes resources/plot2d_rotate.png | Bin 511 -> 0 bytes resources/plot2d_settings.png | Bin 313 -> 0 bytes resources/plot2d_splines.png | Bin 289 -> 0 bytes resources/plot2d_zoom.png | Bin 488 -> 0 bytes resources/print.png | Bin 233 -> 0 bytes resources/redo.png | Bin 211 -> 0 bytes resources/reset.png | Bin 232 -> 0 bytes resources/save.png | Bin 215 -> 0 bytes resources/select1.png | Bin 975 -> 0 bytes resources/tile.png | Bin 199 -> 0 bytes resources/uc_add.png | Bin 298 -> 0 bytes resources/uc_clear.png | Bin 372 -> 0 bytes resources/uc_current.png | Bin 298 -> 0 bytes resources/uc_del.png | Bin 300 -> 0 bytes resources/uc_new.png | Bin 306 -> 0 bytes resources/undo.png | Bin 210 -> 0 bytes resources/undo_arrow.png | Bin 895 -> 0 bytes resources/view_back.png | Bin 391 -> 0 bytes resources/view_bottom.png | Bin 399 -> 0 bytes resources/view_camera_dump.png | Bin 518 -> 0 bytes resources/view_clipping.png | Bin 533 -> 0 bytes resources/view_clipping_pressed.png | Bin 283 -> 0 bytes resources/view_clone.png | Bin 255 -> 0 bytes resources/view_dump.png | Bin 518 -> 0 bytes resources/view_fitall.png | Bin 523 -> 0 bytes resources/view_fitarea.png | Bin 511 -> 0 bytes resources/view_fitselect.png | Bin 808 -> 0 bytes resources/view_front.png | Bin 374 -> 0 bytes resources/view_glpan.png | Bin 540 -> 0 bytes resources/view_graduated_axes.png | Bin 351 -> 0 bytes resources/view_left.png | Bin 391 -> 0 bytes resources/view_pan.png | Bin 545 -> 0 bytes resources/view_presets.png | Bin 545 -> 0 bytes resources/view_reset.png | Bin 477 -> 0 bytes resources/view_right.png | Bin 390 -> 0 bytes resources/view_rotate.png | Bin 511 -> 0 bytes resources/view_scaling.png | Bin 453 -> 0 bytes resources/view_shoot.png | Bin 578 -> 0 bytes resources/view_top.png | Bin 392 -> 0 bytes resources/view_triedre.png | Bin 442 -> 0 bytes resources/view_update_rate.png | Bin 972 -> 0 bytes resources/view_zoom.png | Bin 488 -> 0 bytes resources/vtile.png | Bin 876 -> 0 bytes src/Makefile.in | 83 - src/OBJECT/Handle_SALOME_AISObject.hxx | 108 - src/OBJECT/Handle_SALOME_AISShape.hxx | 108 - ...E_DataMapNodeOfDataMapOfIOMapOfInteger.hxx | 100 - src/OBJECT/Handle_SALOME_Filter.hxx | 108 - .../Handle_SALOME_InteractiveObject.hxx | 104 - src/OBJECT/Handle_SALOME_ListNodeOfListIO.hxx | 104 - src/OBJECT/Handle_SALOME_TypeFilter.hxx | 108 - src/OBJECT/Makefile.in | 73 - src/OBJECT/SALOME_AISObject.cxx | 30 - src/OBJECT/SALOME_AISObject.hxx | 119 - src/OBJECT/SALOME_AISObject.ixx | 87 - src/OBJECT/SALOME_AISObject.jxx | 32 - src/OBJECT/SALOME_AISShape.cxx | 40 - src/OBJECT/SALOME_AISShape.hxx | 122 - src/OBJECT/SALOME_AISShape.ixx | 89 - src/OBJECT/SALOME_AISShape.jxx | 35 - ...taMapIteratorOfDataMapOfIOMapOfInteger.hxx | 116 - ...MapIteratorOfDataMapOfIOMapOfInteger_0.cxx | 65 - ...E_DataMapNodeOfDataMapOfIOMapOfInteger.hxx | 153 - ...DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx | 133 - src/OBJECT/SALOME_DataMapOfIOMapOfInteger.hxx | 148 - .../SALOME_DataMapOfIOMapOfInteger_0.cxx | 68 - src/OBJECT/SALOME_Filter.cxx | 31 - src/OBJECT/SALOME_Filter.hxx | 111 - src/OBJECT/SALOME_Filter.ixx | 81 - src/OBJECT/SALOME_Filter.jxx | 29 - src/OBJECT/SALOME_InteractiveObject.cxx | 162 - src/OBJECT/SALOME_InteractiveObject.hxx | 136 - src/OBJECT/SALOME_InteractiveObject.ixx | 81 - src/OBJECT/SALOME_InteractiveObject.jxx | 29 - src/OBJECT/SALOME_ListIO.hxx | 169 - src/OBJECT/SALOME_ListIO_0.cxx | 55 - src/OBJECT/SALOME_ListIteratorOfListIO.hxx | 139 - src/OBJECT/SALOME_ListIteratorOfListIO_0.cxx | 58 - src/OBJECT/SALOME_ListNodeOfListIO.hxx | 137 - src/OBJECT/SALOME_ListNodeOfListIO_0.cxx | 122 - src/OBJECT/SALOME_Selection.h | 42 - src/OBJECT/SALOME_TypeFilter.cxx | 47 - src/OBJECT/SALOME_TypeFilter.hxx | 116 - src/OBJECT/SALOME_TypeFilter.ixx | 83 - src/OBJECT/SALOME_TypeFilter.jxx | 29 - src/OCCViewer/Makefile.in | 96 - src/OCCViewer/OCCViewer.h | 31 - src/OCCViewer/OCCViewer_AISSelector.cxx | 223 - src/OCCViewer/OCCViewer_AISSelector.h | 82 - src/OCCViewer/OCCViewer_ClippingDlg.cxx | 561 --- src/OCCViewer/OCCViewer_ClippingDlg.h | 110 - .../OCCViewer_CreateRestoreViewDlg.cxx | 274 -- .../OCCViewer_CreateRestoreViewDlg.h | 77 - src/OCCViewer/OCCViewer_VService.cxx | 302 -- src/OCCViewer/OCCViewer_VService.h | 132 - src/OCCViewer/OCCViewer_ViewManager.cxx | 48 - src/OCCViewer/OCCViewer_ViewManager.h | 41 - src/OCCViewer/OCCViewer_ViewModel.cxx | 621 --- src/OCCViewer/OCCViewer_ViewModel.h | 175 - src/OCCViewer/OCCViewer_ViewPort.cxx | 481 -- src/OCCViewer/OCCViewer_ViewPort.h | 122 - src/OCCViewer/OCCViewer_ViewPort3d.cxx | 462 -- src/OCCViewer/OCCViewer_ViewPort3d.h | 100 - src/OCCViewer/OCCViewer_ViewWindow.cxx | 1090 ----- src/OCCViewer/OCCViewer_ViewWindow.h | 164 - src/OCCViewer/resources/OCCViewer_images.po | 96 - src/OCCViewer/resources/OCCViewer_msg_en.po | 184 - src/OCCViewer/resources/view_back.png | Bin 391 -> 0 bytes src/OCCViewer/resources/view_bottom.png | Bin 399 -> 0 bytes src/OCCViewer/resources/view_camera_dump.png | Bin 518 -> 0 bytes src/OCCViewer/resources/view_clipping.png | Bin 533 -> 0 bytes .../resources/view_clipping_pressed.png | Bin 283 -> 0 bytes src/OCCViewer/resources/view_clone.png | Bin 255 -> 0 bytes src/OCCViewer/resources/view_fitall.png | Bin 523 -> 0 bytes src/OCCViewer/resources/view_fitarea.png | Bin 511 -> 0 bytes src/OCCViewer/resources/view_front.png | Bin 374 -> 0 bytes src/OCCViewer/resources/view_glpan.png | Bin 540 -> 0 bytes src/OCCViewer/resources/view_left.png | Bin 391 -> 0 bytes src/OCCViewer/resources/view_pan.png | Bin 545 -> 0 bytes src/OCCViewer/resources/view_presets.png | Bin 545 -> 0 bytes src/OCCViewer/resources/view_reset.png | Bin 477 -> 0 bytes src/OCCViewer/resources/view_right.png | Bin 390 -> 0 bytes src/OCCViewer/resources/view_rotate.png | Bin 511 -> 0 bytes src/OCCViewer/resources/view_shoot.png | Bin 578 -> 0 bytes src/OCCViewer/resources/view_top.png | Bin 392 -> 0 bytes src/OCCViewer/resources/view_triedre.png | Bin 442 -> 0 bytes src/OCCViewer/resources/view_zoom.png | Bin 488 -> 0 bytes src/ObjBrowser/OB.h | 46 - src/ObjBrowser/OB_Browser.cxx | 1629 ------- src/ObjBrowser/OB_Browser.h | 204 - src/ObjBrowser/OB_Filter.cxx | 33 - src/ObjBrowser/OB_Filter.h | 40 - src/ObjBrowser/OB_ListItem.cxx | 391 -- src/ObjBrowser/OB_ListItem.h | 115 - src/ObjBrowser/OB_ListView.cxx | 275 -- src/ObjBrowser/OB_ListView.h | 90 - src/ObjBrowser/resources/OB_msg_en.po | 32 - src/Plot2d/Makefile.in | 96 - src/Plot2d/Plot2d.h | 31 - src/Plot2d/Plot2d_Curve.cxx | 417 -- src/Plot2d/Plot2d_Curve.h | 112 - src/Plot2d/Plot2d_FitDataDlg.cxx | 288 -- src/Plot2d/Plot2d_FitDataDlg.h | 75 - src/Plot2d/Plot2d_Prs.cxx | 99 - src/Plot2d/Plot2d_Prs.h | 46 - src/Plot2d/Plot2d_SetupCurveDlg.cxx | 217 - src/Plot2d/Plot2d_SetupCurveDlg.h | 72 - src/Plot2d/Plot2d_SetupViewDlg.cxx | 683 --- src/Plot2d/Plot2d_SetupViewDlg.h | 124 - src/Plot2d/Plot2d_ToolTip.cxx | 93 - src/Plot2d/Plot2d_ToolTip.h | 50 - src/Plot2d/Plot2d_ViewFrame.cxx | 2050 -------- src/Plot2d/Plot2d_ViewFrame.h | 209 - src/Plot2d/Plot2d_ViewManager.cxx | 85 - src/Plot2d/Plot2d_ViewManager.h | 52 - src/Plot2d/Plot2d_ViewModel.cxx | 191 - src/Plot2d/Plot2d_ViewModel.h | 64 - src/Plot2d/Plot2d_ViewWindow.cxx | 549 --- src/Plot2d/Plot2d_ViewWindow.h | 109 - src/Plot2d/resources/Plot2d_images.po | 76 - src/Plot2d/resources/Plot2d_msg_en.po | 411 -- src/Plot2d/resources/plot2d_camera_dump.png | Bin 518 -> 0 bytes src/Plot2d/resources/plot2d_clone.png | Bin 255 -> 0 bytes src/Plot2d/resources/plot2d_fitall.png | Bin 523 -> 0 bytes src/Plot2d/resources/plot2d_fitarea.png | Bin 511 -> 0 bytes src/Plot2d/resources/plot2d_glpan.png | Bin 540 -> 0 bytes src/Plot2d/resources/plot2d_legend.png | Bin 308 -> 0 bytes src/Plot2d/resources/plot2d_linear.png | Bin 281 -> 0 bytes src/Plot2d/resources/plot2d_linear_y.png | Bin 289 -> 0 bytes src/Plot2d/resources/plot2d_lines.png | Bin 299 -> 0 bytes src/Plot2d/resources/plot2d_log.png | Bin 288 -> 0 bytes src/Plot2d/resources/plot2d_log_y.png | Bin 280 -> 0 bytes src/Plot2d/resources/plot2d_pan.png | Bin 545 -> 0 bytes src/Plot2d/resources/plot2d_points.png | Bin 272 -> 0 bytes src/Plot2d/resources/plot2d_rotate.png | Bin 511 -> 0 bytes src/Plot2d/resources/plot2d_settings.png | Bin 313 -> 0 bytes src/Plot2d/resources/plot2d_splines.png | Bin 289 -> 0 bytes src/Plot2d/resources/plot2d_zoom.png | Bin 488 -> 0 bytes src/Prs/Makefile.in | 45 - src/Prs/SALOME_Prs.cxx | 274 -- src/Prs/SALOME_Prs.h | 240 - src/PythonConsole/Makefile.in | 55 - src/PythonConsole/PythonConsole.h | 61 - src/PythonConsole/PythonConsole_PyConsole.cxx | 85 - src/PythonConsole/PythonConsole_PyConsole.h | 49 - src/PythonConsole/PythonConsole_PyEditor.cxx | 738 --- src/PythonConsole/PythonConsole_PyEditor.h | 77 - src/PythonConsole/PythonConsole_PyInterp.cxx | 134 - src/PythonConsole/PythonConsole_PyInterp.h | 47 - src/QDS/Makefile.in | 69 - src/QDS/QDS.cxx | 252 - src/QDS/QDS.h | 93 - src/QDS/QDS_CheckBox.cxx | 150 - src/QDS/QDS_CheckBox.h | 54 - src/QDS/QDS_ComboBox.cxx | 612 --- src/QDS/QDS_ComboBox.h | 110 - src/QDS/QDS_Datum.cxx | 1626 ------- src/QDS/QDS_Datum.h | 207 - src/QDS/QDS_LineEdit.cxx | 237 - src/QDS/QDS_LineEdit.h | 65 - src/QDS/QDS_RadioBox.cxx | 425 -- src/QDS/QDS_RadioBox.h | 93 - src/QDS/QDS_SpinBox.cxx | 151 - src/QDS/QDS_SpinBox.h | 51 - src/QDS/QDS_SpinBoxDbl.cxx | 171 - src/QDS/QDS_SpinBoxDbl.h | 50 - src/QDS/QDS_Table.cxx | 348 -- src/QDS/QDS_Table.h | 99 - src/QDS/QDS_TextEdit.cxx | 98 - src/QDS/QDS_TextEdit.h | 48 - src/QDS/QDS_Validator.cxx | 225 - src/QDS/QDS_Validator.h | 80 - src/QDS/resources/QDS_msg_en.po | 65 - src/RegistryDisplay/HelpWindow.cxx | 105 - src/RegistryDisplay/HelpWindow.hxx | 52 - src/RegistryDisplay/IntervalWindow.cxx | 129 - src/RegistryDisplay/IntervalWindow.hxx | 57 - src/RegistryDisplay/Makefile.in | 59 - src/RegistryDisplay/RegWidget.cxx | 820 ---- src/RegistryDisplay/RegWidget.h | 116 - src/RegistryDisplay/RegWidgetFactory.cxx | 48 - src/ResExporter/Makefile.in | 48 - src/ResExporter/ResourceExporter.cxx | 173 - src/SALOME_PY/Makefile.in | 52 - src/SALOME_PY/SalomePy.cxx | 198 - src/SALOME_PYQT/Makefile.in | 37 - src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in | 100 - .../SALOME_PYQT_GUI/SALOME_PYQT_GUI.h | 45 - .../SALOME_PYQT_GUI/SALOME_PYQT_GUI.sip | 4 - .../SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx | 1875 -------- .../SALOME_PYQT_GUI/SALOME_PYQT_Module.h | 208 - .../SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.cxx | 97 - .../SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.h | 40 - .../SALOME_PYQT_GUI/SALOME_PYQT_SipDefs.h.in | 1 - src/SALOME_PYQT/SalomePyQt/Makefile.in | 132 - src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx | 1366 ------ src/SALOME_PYQT/SalomePyQt/SalomePyQt.h | 148 - src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip | 134 - src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip | 133 - src/SALOME_SWIG/Help.py | 141 - src/SALOME_SWIG/Makefile.in | 57 - src/SALOME_SWIG/PyInterp.py | 102 - src/SALOME_SWIG/SALOMEGUI_Swig.cxx | 571 --- src/SALOME_SWIG/SALOMEGUI_Swig.hxx | 69 - src/SALOME_SWIG/SALOMEGUI_Swig.i | 87 - src/SALOME_SWIG/SALOMEGUI_shared_modules.py | 34 - src/SALOME_SWIG/examplevtk1.py | 40 - src/SALOME_SWIG/libSALOME_Swig.i | 31 - src/SALOME_SWIG/salome.py | 157 - src/SALOME_SWIG/supervisionexample.py | 103 - src/SALOME_SWIG/supervisionexample.py.in | 85 - src/SALOME_SWIG/supervisiongeomexample.py | 121 - src/SALOME_SWIG/supervisiongeomexample.py.in | 103 - src/SALOME_SWIG/test_big_table.py | 68 - src/SALOME_SWIG/test_many_objects.py | 88 - src/SALOME_SWIG/test_remove_ref.py | 49 - src/SALOME_SWIG/test_table.py | 114 - src/SALOME_SWIG/testattr.py | 109 - src/SOCC/Makefile.in | 53 - src/SOCC/SOCC.h | 31 - src/SOCC/SOCC_Prs.cxx | 92 - src/SOCC/SOCC_Prs.h | 71 - src/SOCC/SOCC_ViewModel.cxx | 701 --- src/SOCC/SOCC_ViewModel.h | 72 - src/SOCC/SOCC_ViewWindow.cxx | 103 - src/SOCC/SOCC_ViewWindow.h | 46 - src/SPlot2d/Makefile.in | 60 - src/SPlot2d/SPlot2d.h | 31 - src/SPlot2d/SPlot2d_Curve.cxx | 139 - src/SPlot2d/SPlot2d_Curve.h | 64 - src/SPlot2d/SPlot2d_Prs.cxx | 60 - src/SPlot2d/SPlot2d_Prs.h | 57 - src/SPlot2d/SPlot2d_ViewModel.cxx | 394 -- src/SPlot2d/SPlot2d_ViewModel.h | 88 - src/SPlot2d/SPlot2d_ViewWindow.cxx | 75 - src/SPlot2d/SPlot2d_ViewWindow.h | 46 - src/SPlot2d/SPlot2d_msg_en.po | 30 - src/SUPERVGraph/Makefile.in | 59 - src/SUPERVGraph/SUPERVGraph.cxx | 51 - src/SUPERVGraph/SUPERVGraph.h | 59 - src/SUPERVGraph/SUPERVGraph_ViewFrame.cxx | 362 -- src/SUPERVGraph/SUPERVGraph_ViewFrame.h | 140 - src/SUPERVGraph/SUPERVGraph_ViewManager.cxx | 59 - src/SUPERVGraph/SUPERVGraph_ViewManager.h | 48 - src/SUPERVGraph/SUPERVGraph_ViewModel.cxx | 47 - src/SUPERVGraph/SUPERVGraph_ViewModel.h | 41 - .../resources/SUPERVGraph_images.po | 29 - .../resources/SUPERVGraph_msg_en.po | 37 - src/SUPERVGraph/resources/view_pan.png | Bin 544 -> 0 bytes src/SUPERVGraph/resources/view_reset.png | Bin 476 -> 0 bytes src/SVTK/Makefile.in | 128 - src/SVTK/SALOME_Actor.cxx | 818 ---- src/SVTK/SALOME_Actor.h | 238 - src/SVTK/SVTK.cxx | 60 - src/SVTK/SVTK.h | 39 - src/SVTK/SVTK_Actor.cxx | 199 - src/SVTK/SVTK_Actor.h | 93 - src/SVTK/SVTK_CubeAxesActor2D.cxx | 673 --- src/SVTK/SVTK_CubeAxesActor2D.h | 117 - src/SVTK/SVTK_CubeAxesDlg.cxx | 512 -- src/SVTK/SVTK_CubeAxesDlg.h | 140 - src/SVTK/SVTK_DeviceActor.cxx | 499 -- src/SVTK/SVTK_DeviceActor.h | 218 - src/SVTK/SVTK_DialogBase.cxx | 84 - src/SVTK/SVTK_DialogBase.h | 60 - src/SVTK/SVTK_Event.h | 68 - src/SVTK/SVTK_Extension.cxx | 44 - src/SVTK/SVTK_Extension.h | 35 - src/SVTK/SVTK_FontWidget.cxx | 127 - src/SVTK/SVTK_FontWidget.h | 70 - src/SVTK/SVTK_Functor.h | 109 - .../SVTK_GenericRenderWindowInteractor.cxx | 168 - src/SVTK/SVTK_GenericRenderWindowInteractor.h | 133 - src/SVTK/SVTK_InteractorStyle.cxx | 1496 ------ src/SVTK/SVTK_InteractorStyle.h | 334 -- src/SVTK/SVTK_MainWindow.cxx | 837 ---- src/SVTK/SVTK_MainWindow.h | 265 -- src/SVTK/SVTK_NonIsometricDlg.cxx | 192 - src/SVTK/SVTK_NonIsometricDlg.h | 70 - src/SVTK/SVTK_Prs.cxx | 79 - src/SVTK/SVTK_Prs.h | 59 - src/SVTK/SVTK_RectPicker.cxx | 492 -- src/SVTK/SVTK_RectPicker.h | 130 - src/SVTK/SVTK_RenderWindowInteractor.cxx | 783 --- src/SVTK/SVTK_RenderWindowInteractor.h | 264 - src/SVTK/SVTK_Renderer.cxx | 751 --- src/SVTK/SVTK_Renderer.h | 258 - src/SVTK/SVTK_Selection.h | 45 - src/SVTK/SVTK_SelectionEvent.h | 55 - src/SVTK/SVTK_Selector.cxx | 517 -- src/SVTK/SVTK_Selector.h | 211 - src/SVTK/SVTK_SelectorDef.h | 211 - src/SVTK/SVTK_SpaceMouse.cxx | 213 - src/SVTK/SVTK_SpaceMouse.h | 81 - src/SVTK/SVTK_Trihedron.cxx | 54 - src/SVTK/SVTK_Trihedron.h | 41 - src/SVTK/SVTK_UpdateRateDlg.cxx | 380 -- src/SVTK/SVTK_UpdateRateDlg.h | 93 - src/SVTK/SVTK_View.cxx | 675 --- src/SVTK/SVTK_View.h | 264 - src/SVTK/SVTK_ViewManager.cxx | 46 - src/SVTK/SVTK_ViewManager.h | 42 - src/SVTK/SVTK_ViewModel.cxx | 510 -- src/SVTK/SVTK_ViewModel.h | 126 - src/SVTK/SVTK_ViewModelBase.h | 45 - src/SVTK/SVTK_ViewWindow.cxx | 1035 ---- src/SVTK/SVTK_ViewWindow.h | 373 -- src/SVTK/resources/SVTK_images.po | 43 - src/SVTK/resources/SVTK_msg_en.po | 277 -- src/SalomeApp/Makefile.in | 98 - src/SalomeApp/SalomeApp.h | 48 - src/SalomeApp/SalomeApp_Application.cxx | 1145 ----- src/SalomeApp/SalomeApp_Application.h | 140 - src/SalomeApp/SalomeApp_CheckFileDlg.cxx | 58 - src/SalomeApp/SalomeApp_CheckFileDlg.h | 44 - src/SalomeApp/SalomeApp_DataModel.cxx | 409 -- src/SalomeApp/SalomeApp_DataModel.h | 65 - src/SalomeApp/SalomeApp_DataObject.cxx | 417 -- src/SalomeApp/SalomeApp_DataObject.h | 126 - src/SalomeApp/SalomeApp_Displayer.cxx | 210 - src/SalomeApp/SalomeApp_Displayer.h | 46 - src/SalomeApp/SalomeApp_EventFilter.cxx | 81 - src/SalomeApp/SalomeApp_EventFilter.h | 57 - src/SalomeApp/SalomeApp_ExceptionHandler.cxx | 117 - src/SalomeApp/SalomeApp_ExceptionHandler.h | 36 - src/SalomeApp/SalomeApp_Filter.cxx | 36 - src/SalomeApp/SalomeApp_Filter.h | 40 - src/SalomeApp/SalomeApp_ImportOperation.cxx | 40 - src/SalomeApp/SalomeApp_ImportOperation.h | 46 - src/SalomeApp/SalomeApp_ListView.cxx | 1398 ------ src/SalomeApp/SalomeApp_ListView.h | 354 -- src/SalomeApp/SalomeApp_Module.cxx | 155 - src/SalomeApp/SalomeApp_Module.h | 69 - src/SalomeApp/SalomeApp_PyInterp.cxx | 123 - src/SalomeApp/SalomeApp_PyInterp.h | 46 - src/SalomeApp/SalomeApp_Study.cxx | 740 --- src/SalomeApp/SalomeApp_Study.h | 106 - .../SalomeApp_StudyPropertiesDlg.cxx | 368 -- src/SalomeApp/SalomeApp_StudyPropertiesDlg.h | 80 - src/SalomeApp/SalomeApp_Tools.cxx | 120 - src/SalomeApp/SalomeApp_Tools.h | 47 - src/SalomeApp/SalomeApp_TypeFilter.cxx | 63 - src/SalomeApp/SalomeApp_TypeFilter.h | 41 - src/SalomeApp/SalomeApp_VisualState.cxx | 305 -- src/SalomeApp/SalomeApp_VisualState.h | 47 - src/SalomeApp/Test/Makefile.in | 65 - src/SalomeApp/Test/SalomeAppTest.cxx | 56 - src/SalomeApp/Test/SalomeAppTest.hxx | 39 - src/SalomeApp/Test/TestSalomeApp.cxx | 31 - src/SalomeApp/Test/TestSalomeApp.py | 47 - src/SalomeApp/resources/SalomeApp.ini | 31 - src/SalomeApp/resources/SalomeApp.xml | 123 - src/SalomeApp/resources/SalomeApp_images.po | 31 - src/SalomeApp/resources/SalomeApp_msg_en.po | 249 - src/Session/InquireServersQThread.cxx | 626 --- src/Session/InquireServersQThread.h | 129 - src/Session/Makefile.in | 82 - src/Session/SALOME_Session.hxx | 47 - src/Session/SALOME_Session_Server.cxx | 565 --- src/Session/SalomeApp_Engine_i.cxx | 178 - src/Session/SalomeApp_Engine_i.hxx | 95 - src/Session/Session_ServerCheck.cxx | 509 -- src/Session/Session_ServerCheck.hxx | 58 - src/Session/Session_ServerLauncher.cxx | 231 - src/Session/Session_ServerLauncher.hxx | 93 - src/Session/Session_ServerThread.cxx | 515 -- src/Session/Session_ServerThread.hxx | 96 - src/Session/Session_Session_i.cxx | 223 - src/Session/Session_Session_i.hxx | 91 - src/Session/runSession | 27 - src/Style/Makefile.in | 86 - src/Style/SalomeStyle.cxx | 1344 ------ src/Style/SalomeStyle.h | 111 - src/TOOLSGUI/Makefile.in | 70 - src/TOOLSGUI/ToolsGUI.cxx | 81 - src/TOOLSGUI/ToolsGUI.h | 52 - src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx | 412 -- src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.h | 81 - src/TOOLSGUI/ToolsGUI_HelpWindow.cxx | 105 - src/TOOLSGUI/ToolsGUI_HelpWindow.h | 53 - src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx | 127 - src/TOOLSGUI/ToolsGUI_IntervalWindow.h | 55 - src/TOOLSGUI/ToolsGUI_RegWidget.cxx | 822 ---- src/TOOLSGUI/ToolsGUI_RegWidget.h | 119 - src/TOOLSGUI/resources/ToolsGUI_icons.po | 41 - src/TOOLSGUI/resources/ToolsGUI_msg_en.po | 130 - src/VTKViewer/Makefile.in | 102 - src/VTKViewer/VTKViewer.cxx | 57 - src/VTKViewer/VTKViewer.h | 40 - src/VTKViewer/VTKViewer_Actor.cxx | 677 --- src/VTKViewer/VTKViewer_Actor.h | 341 -- src/VTKViewer/VTKViewer_Algorithm.h | 91 - src/VTKViewer/VTKViewer_AppendFilter.cxx | 304 -- src/VTKViewer/VTKViewer_AppendFilter.h | 112 - .../VTKViewer_CellLocationsArray.cxx | 33 - src/VTKViewer/VTKViewer_CellLocationsArray.h | 42 - src/VTKViewer/VTKViewer_CellRectPicker.cxx | 443 -- src/VTKViewer/VTKViewer_CellRectPicker.h | 107 - src/VTKViewer/VTKViewer_ConvexTool.cxx | 601 --- src/VTKViewer/VTKViewer_ConvexTool.h | 203 - .../VTKViewer_ExtractUnstructuredGrid.cxx | 351 -- .../VTKViewer_ExtractUnstructuredGrid.h | 131 - src/VTKViewer/VTKViewer_Filter.cxx | 69 - src/VTKViewer/VTKViewer_Filter.h | 67 - src/VTKViewer/VTKViewer_Functor.h | 59 - src/VTKViewer/VTKViewer_GeometryFilter.cxx | 825 ---- src/VTKViewer/VTKViewer_GeometryFilter.h | 118 - src/VTKViewer/VTKViewer_InteractorStyle.cxx | 1523 ------ src/VTKViewer/VTKViewer_InteractorStyle.h | 196 - src/VTKViewer/VTKViewer_PassThroughFilter.cxx | 69 - src/VTKViewer/VTKViewer_PassThroughFilter.h | 46 - src/VTKViewer/VTKViewer_RectPicker.cxx | 893 ---- src/VTKViewer/VTKViewer_RectPicker.h | 78 - src/VTKViewer/VTKViewer_RenderWindow.cxx | 162 - src/VTKViewer/VTKViewer_RenderWindow.h | 97 - .../VTKViewer_RenderWindowInteractor.cxx | 685 --- .../VTKViewer_RenderWindowInteractor.h | 234 - src/VTKViewer/VTKViewer_ShrinkFilter.cxx | 174 - src/VTKViewer/VTKViewer_ShrinkFilter.h | 68 - src/VTKViewer/VTKViewer_Transform.cxx | 68 - src/VTKViewer/VTKViewer_Transform.h | 53 - src/VTKViewer/VTKViewer_TransformFilter.cxx | 70 - src/VTKViewer/VTKViewer_TransformFilter.h | 48 - src/VTKViewer/VTKViewer_Trihedron.cxx | 435 -- src/VTKViewer/VTKViewer_Trihedron.h | 282 -- src/VTKViewer/VTKViewer_Utilities.cxx | 216 - src/VTKViewer/VTKViewer_Utilities.h | 50 - src/VTKViewer/VTKViewer_VectorText.cxx | 1754 ------- src/VTKViewer/VTKViewer_VectorText.h | 68 - src/VTKViewer/VTKViewer_ViewManager.cxx | 35 - src/VTKViewer/VTKViewer_ViewManager.h | 38 - src/VTKViewer/VTKViewer_ViewModel.cxx | 202 - src/VTKViewer/VTKViewer_ViewModel.h | 80 - src/VTKViewer/VTKViewer_ViewWindow.cxx | 612 --- src/VTKViewer/VTKViewer_ViewWindow.h | 137 - src/VTKViewer/resources/VTKViewer_images.po | 79 - src/VTKViewer/resources/VTKViewer_msg_en.po | 150 - src/VTKViewer/resources/view_back.png | Bin 391 -> 0 bytes src/VTKViewer/resources/view_bottom.png | Bin 399 -> 0 bytes src/VTKViewer/resources/view_camera_dump.png | Bin 518 -> 0 bytes src/VTKViewer/resources/view_fitall.png | Bin 523 -> 0 bytes src/VTKViewer/resources/view_fitarea.png | Bin 511 -> 0 bytes src/VTKViewer/resources/view_front.png | Bin 374 -> 0 bytes src/VTKViewer/resources/view_glpan.png | Bin 540 -> 0 bytes .../resources/view_graduated_axes.png | 1 - src/VTKViewer/resources/view_left.png | Bin 391 -> 0 bytes src/VTKViewer/resources/view_pan.png | Bin 545 -> 0 bytes src/VTKViewer/resources/view_reset.png | Bin 477 -> 0 bytes src/VTKViewer/resources/view_right.png | Bin 390 -> 0 bytes src/VTKViewer/resources/view_rotate.png | Bin 511 -> 0 bytes src/VTKViewer/resources/view_scaling.png | Bin 453 -> 0 bytes src/VTKViewer/resources/view_top.png | Bin 392 -> 0 bytes src/VTKViewer/resources/view_triedre.png | Bin 442 -> 0 bytes src/VTKViewer/resources/view_update_rate.png | Bin 974 -> 0 bytes src/VTKViewer/resources/view_zoom.png | Bin 488 -> 0 bytes 942 files changed, 119610 deletions(-) delete mode 100644 GUI_version.h.in delete mode 100644 INSTALL delete mode 100644 LICENCE delete mode 100644 Makefile.in delete mode 100644 adm_local/Makefile.in delete mode 100644 adm_local/unix/config_files/README delete mode 100644 adm_local/unix/config_files/check_GLViewer.m4 delete mode 100755 adm_local/unix/config_files/check_GUI.m4 delete mode 100644 adm_local/unix/config_files/check_OCCViewer.m4 delete mode 100644 adm_local/unix/config_files/check_Plot2dViewer.m4 delete mode 100644 adm_local/unix/config_files/check_PyConsole.m4 delete mode 100644 adm_local/unix/config_files/check_SalomeObject.m4 delete mode 100644 adm_local/unix/config_files/check_SupervGraphViewer.m4 delete mode 100644 adm_local/unix/config_files/check_VTKViewer.m4 delete mode 100755 adm_local/unix/config_files/check_corba_in_GUI.m4 delete mode 100644 adm_local/unix/config_files/check_disable_Corba.m4 delete mode 100755 adm_local/unix/config_files/check_msg2qm.m4 delete mode 100644 adm_local/unix/config_files/check_opengl.m4 delete mode 100644 adm_local/unix/config_files/check_pyqt.m4 delete mode 100644 adm_local/unix/config_files/check_qt.m4 delete mode 100644 adm_local/unix/config_files/check_qwt.m4 delete mode 100644 adm_local/unix/config_files/check_sip.m4 delete mode 100644 adm_local/unix/config_files/check_vtk.m4 delete mode 100644 adm_local/unix/make_commence.in delete mode 100644 adm_local/unix/make_conclude.in delete mode 100644 adm_local/unix/make_omniorb.in delete mode 100755 bin/VERSION.in delete mode 100755 bin/runLightSalome.csh delete mode 100755 bin/runLightSalome.sh delete mode 100755 build_configure delete mode 100644 configure.in.base delete mode 100644 doc/Makefile.in delete mode 100644 doc/salome/Makefile.in delete mode 100755 doc/salome/gui/GUI/closestudy.png 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 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 delete mode 100755 doc/salome/gui/GUI/image54.jpg delete mode 100755 doc/salome/gui/GUI/image65.gif delete mode 100755 doc/salome/gui/GUI/image67.gif delete mode 100755 doc/salome/gui/GUI/image68.gif delete mode 100755 doc/salome/gui/GUI/image69.gif delete mode 100755 doc/salome/gui/GUI/image70.gif delete mode 100755 doc/salome/gui/GUI/image71.gif delete mode 100755 doc/salome/gui/GUI/image72.gif delete mode 100755 doc/salome/gui/GUI/image73.gif delete mode 100755 doc/salome/gui/GUI/image75.gif delete mode 100755 doc/salome/gui/GUI/image94.gif 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 delete mode 100755 doc/salome/gui/GUI/introduction_to_gui.htm delete mode 100755 doc/salome/gui/GUI/kernel.log delete mode 100755 doc/salome/gui/GUI/kernel/about_salome_pro_architecture.htm delete mode 100755 doc/salome/gui/GUI/kernel/about_salome_pro_help_system.htm delete mode 100755 doc/salome/gui/GUI/kernel/creating_a_new_study.htm delete mode 100755 doc/salome/gui/GUI/kernel/displaying_studies.htm delete mode 100755 doc/salome/gui/GUI/kernel/editing_studies.htm delete mode 100755 doc/salome/gui/GUI/kernel/getting_properties_of_the_study.htm delete mode 100755 doc/salome/gui/GUI/kernel/getting_started2.htm delete mode 100755 doc/salome/gui/GUI/kernel/introduction.htm delete mode 100755 doc/salome/gui/GUI/kernel/introduction_to_salome_pro.htm delete mode 100755 doc/salome/gui/GUI/kernel/navigating_topics.htm delete mode 100755 doc/salome/gui/GUI/kernel/opening_studies.htm delete mode 100755 doc/salome/gui/GUI/kernel/readme.html delete mode 100755 doc/salome/gui/GUI/kernel/running_salome_pro.htm delete mode 100755 doc/salome/gui/GUI/kernel/salome_pro_desktop.htm delete mode 100755 doc/salome/gui/GUI/kernel/saving_a_study.htm delete mode 100755 doc/salome/gui/GUI/kernel/setting_preferences.htm delete mode 100755 doc/salome/gui/GUI/kernel/using_catalog_generator.htm delete mode 100755 doc/salome/gui/GUI/kernel/using_left-hand_tabs.htm delete mode 100755 doc/salome/gui/GUI/kernel/using_object_browser.htm delete mode 100755 doc/salome/gui/GUI/kernel/using_registry.htm delete mode 100755 doc/salome/gui/GUI/mesh_preferences.htm delete mode 100755 doc/salome/gui/GUI/note1.gif delete mode 100755 doc/salome/gui/GUI/pics/cataloggenerator.png delete mode 100755 doc/salome/gui/GUI/pics/choicepage.png delete mode 100755 doc/salome/gui/GUI/pics/copy-paste.jpg delete mode 100755 doc/salome/gui/GUI/pics/dumpstudy.png delete mode 100755 doc/salome/gui/GUI/pics/exemple.gif delete mode 100755 doc/salome/gui/GUI/pics/geomview-alt.png delete mode 100755 doc/salome/gui/GUI/pics/icon_about.png delete mode 100755 doc/salome/gui/GUI/pics/import.png delete mode 100755 doc/salome/gui/GUI/pics/intropage.png delete mode 100755 doc/salome/gui/GUI/pics/launch1.png delete mode 100755 doc/salome/gui/GUI/pics/loadscript.png delete mode 100755 doc/salome/gui/GUI/pics/loadstudy2.png delete mode 100755 doc/salome/gui/GUI/pics/lockedstudy.png delete mode 100755 doc/salome/gui/GUI/pics/neo-view2.png delete mode 100755 doc/salome/gui/GUI/pics/newsticn.jpg delete mode 100755 doc/salome/gui/GUI/pics/objectbrowser1.png delete mode 100755 doc/salome/gui/GUI/pics/objectbrowser2.png delete mode 100755 doc/salome/gui/GUI/pics/open.jpg delete mode 100755 doc/salome/gui/GUI/pics/pref11.png delete mode 100755 doc/salome/gui/GUI/pics/pref12.png delete mode 100755 doc/salome/gui/GUI/pics/pref13.png delete mode 100755 doc/salome/gui/GUI/pics/pref14.png delete mode 100755 doc/salome/gui/GUI/pics/pref15.png delete mode 100755 doc/salome/gui/GUI/pics/pref21.png delete mode 100755 doc/salome/gui/GUI/pics/pref22.png delete mode 100755 doc/salome/gui/GUI/pics/pref23.png delete mode 100755 doc/salome/gui/GUI/pics/pref24.png delete mode 100755 doc/salome/gui/GUI/pics/pref31.png delete mode 100755 doc/salome/gui/GUI/pics/pref32.png delete mode 100755 doc/salome/gui/GUI/pics/pref33.png delete mode 100755 doc/salome/gui/GUI/pics/pref34.png delete mode 100755 doc/salome/gui/GUI/pics/pref37.png delete mode 100755 doc/salome/gui/GUI/pics/pref38.png delete mode 100755 doc/salome/gui/GUI/pics/pref39.png delete mode 100755 doc/salome/gui/GUI/pics/productpage.png delete mode 100755 doc/salome/gui/GUI/pics/progresspage.png delete mode 100755 doc/salome/gui/GUI/pics/readmepage.png delete mode 100755 doc/salome/gui/GUI/pics/registry1.png delete mode 100755 doc/salome/gui/GUI/pics/registry3.png delete mode 100755 doc/salome/gui/GUI/pics/registry4.png delete mode 100755 doc/salome/gui/GUI/pics/save.jpg delete mode 100755 doc/salome/gui/GUI/pics/selectcolor.png delete mode 100755 doc/salome/gui/GUI/pics/selectfont.png delete mode 100755 doc/salome/gui/GUI/pics/studyproperties.png delete mode 100755 doc/salome/gui/GUI/pics/view2.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 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/whdata/whftdata.js delete mode 100755 doc/salome/gui/GUI/whdata/whftdata0.htm delete mode 100755 doc/salome/gui/GUI/whdata/whfts.htm delete mode 100755 doc/salome/gui/GUI/whdata/whfts.js delete mode 100755 doc/salome/gui/GUI/whdata/whfwdata.js delete mode 100755 doc/salome/gui/GUI/whdata/whfwdata0.htm delete mode 100755 doc/salome/gui/GUI/whdata/whgdata.js delete mode 100755 doc/salome/gui/GUI/whdata/whgdata0.htm delete mode 100755 doc/salome/gui/GUI/whdata/whglo.htm delete mode 100755 doc/salome/gui/GUI/whdata/whglo.js delete mode 100755 doc/salome/gui/GUI/whdata/whidata.js delete mode 100755 doc/salome/gui/GUI/whdata/whidx.htm delete mode 100755 doc/salome/gui/GUI/whdata/whidx.js delete mode 100755 doc/salome/gui/GUI/whdata/whtdata.js delete mode 100755 doc/salome/gui/GUI/whdata/whtdata0.htm delete mode 100755 doc/salome/gui/GUI/whdata/whtoc.htm delete mode 100755 doc/salome/gui/GUI/whdata/whtoc.js 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/whgdata/whexpbar.gif delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf0.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf1.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf10.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf11.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf2.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf3.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf4.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf5.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf6.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf7.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf8.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstf9.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl0.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl1.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl10.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl11.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl12.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl13.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl14.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl15.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl16.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl17.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl18.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl19.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl2.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl20.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl21.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl22.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl23.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl24.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl25.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl26.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl3.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl4.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl5.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl6.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl7.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl8.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstfl9.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstg0.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlsti0.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstt0.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstt1.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstt2.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstt3.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstt4.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whlstt5.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvf30.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvf31.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvf32.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvf33.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvl31.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvl32.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvl33.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvp30.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvp31.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvp32.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvp33.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvt30.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvt31.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvt32.htm delete mode 100755 doc/salome/gui/GUI/whgdata/whnvt33.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 delete mode 100755 doc/salome/gui/GUI/whxdata/whftdata0.xml delete mode 100755 doc/salome/gui/GUI/whxdata/whfts.xml delete mode 100755 doc/salome/gui/GUI/whxdata/whfwdata0.xml delete mode 100755 doc/salome/gui/GUI/whxdata/whgdata0.xml delete mode 100755 doc/salome/gui/GUI/whxdata/whglo.xml delete mode 100755 doc/salome/gui/GUI/whxdata/whidx.xml delete mode 100755 doc/salome/gui/GUI/whxdata/whtdata0.xml delete mode 100755 doc/salome/gui/GUI/whxdata/whtoc.xml delete mode 100755 doc/salome/gui/KERNEL/pics/cataloggenerator.png delete mode 100755 doc/salome/gui/KERNEL/pics/copy-paste.jpg delete mode 100755 doc/salome/gui/KERNEL/pics/exemple.gif delete mode 100755 doc/salome/gui/KERNEL/pics/geomview-alt.png delete mode 100755 doc/salome/gui/KERNEL/pics/loadstudy2.png delete mode 100755 doc/salome/gui/KERNEL/pics/lockedstudy.png delete mode 100755 doc/salome/gui/KERNEL/pics/meshpreferences.png delete mode 100755 doc/salome/gui/KERNEL/pics/multidesktop.png delete mode 100755 doc/salome/gui/KERNEL/pics/neo-view1.png delete mode 100755 doc/salome/gui/KERNEL/pics/neo-view2.png delete mode 100755 doc/salome/gui/KERNEL/pics/newsticn.jpg delete mode 100755 doc/salome/gui/KERNEL/pics/objectbrowser1.png delete mode 100755 doc/salome/gui/KERNEL/pics/objectbrowser2.png delete mode 100755 doc/salome/gui/KERNEL/pics/open.jpg delete mode 100755 doc/salome/gui/KERNEL/pics/plot1.png delete mode 100755 doc/salome/gui/KERNEL/pics/pref1.png delete mode 100755 doc/salome/gui/KERNEL/pics/pref2.png delete mode 100755 doc/salome/gui/KERNEL/pics/pref4.png delete mode 100755 doc/salome/gui/KERNEL/pics/preferencies10.png delete mode 100755 doc/salome/gui/KERNEL/pics/preferencies11.png delete mode 100755 doc/salome/gui/KERNEL/pics/preferencies5.png delete mode 100755 doc/salome/gui/KERNEL/pics/preferencies7.png delete mode 100755 doc/salome/gui/KERNEL/pics/preferencies8.png delete mode 100755 doc/salome/gui/KERNEL/pics/preferencies9.png delete mode 100755 doc/salome/gui/KERNEL/pics/registry1.png delete mode 100755 doc/salome/gui/KERNEL/pics/registry3.png delete mode 100755 doc/salome/gui/KERNEL/pics/registry4.png delete mode 100755 doc/salome/gui/KERNEL/pics/save.jpg delete mode 100755 doc/salome/gui/KERNEL/pics/selectcolor.png delete mode 100755 doc/salome/gui/KERNEL/pics/selectfont.png delete mode 100755 doc/salome/gui/KERNEL/pics/studyproperties.png delete mode 100755 doc/salome/gui/KERNEL/pics/undo-redo.jpg delete mode 100755 doc/salome/gui/KERNEL/pics/view2.png delete mode 100755 doc/salome/gui/KERNEL/pics/viewerspreferences.png delete mode 100755 doc/salome/gui/KERNEL/whgdata/whexpbar.gif delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf0.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf1.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf10.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf2.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf3.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf4.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf5.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf6.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf7.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf8.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstf9.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl0.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl1.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl10.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl11.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl12.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl13.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl14.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl15.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl16.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl17.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl18.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl19.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl2.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl20.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl21.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl22.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl23.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl24.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl25.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl3.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl4.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl5.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl6.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl7.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl8.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstfl9.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstg0.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlsti0.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstt0.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstt1.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstt2.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstt3.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstt4.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whlstt5.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvf30.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvf31.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvf32.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvf33.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvl31.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvl32.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvl33.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvp30.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvp31.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvp32.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvp33.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvt30.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvt31.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvt32.htm delete mode 100755 doc/salome/gui/KERNEL/whgdata/whnvt33.htm delete mode 100755 doc/salome/tui/GUI/doxyfile.in delete mode 100755 doc/salome/tui/GUI/sources/Application-About.png delete mode 100755 doc/salome/tui/GUI/sources/application.gif delete mode 100755 doc/salome/tui/GUI/sources/doxygen.css delete mode 100755 doc/salome/tui/GUI/sources/footer.html delete mode 100755 doc/salome/tui/GUI/sources/html_comments.gif delete mode 100755 doc/salome/tui/GUI/sources/logocorp.gif delete mode 100755 doc/salome/tui/GUI/sources/myheader.html delete mode 100644 doc/salome/tui/Makefile.in delete mode 100644 idl/Makefile.in delete mode 100644 idl/SalomeApp_Engine.idl delete mode 100644 resources/Tools_en.xml delete mode 100644 resources/Tools_fr.xml delete mode 100644 resources/back.xpm delete mode 100644 resources/cascade.png delete mode 100755 resources/channel.cfg delete mode 100644 resources/close.png delete mode 100644 resources/copy.png delete mode 100755 resources/cursor_rotate.png delete mode 100755 resources/cursor_sketch.png delete mode 100755 resources/cursor_zoom.png delete mode 100755 resources/cut.png delete mode 100644 resources/default.png delete mode 100644 resources/dl_delete.png delete mode 100644 resources/dl_insert.png delete mode 100644 resources/dl_movedown.png delete mode 100644 resources/dl_moveup.png delete mode 100644 resources/forward.xpm delete mode 100644 resources/help.png delete mode 100644 resources/home.xpm delete mode 100755 resources/htile.png delete mode 100755 resources/icon_about.png delete mode 100755 resources/icon_applogo.png delete mode 100755 resources/icon_default.png delete mode 100755 resources/icon_module.png delete mode 100755 resources/icon_module_big.png delete mode 100755 resources/icon_select.png delete mode 100644 resources/new.png delete mode 100644 resources/open.png delete mode 100644 resources/paste.png delete mode 100755 resources/plot2d_camera_dump.png delete mode 100755 resources/plot2d_clone.png delete mode 100644 resources/plot2d_dump.png delete mode 100644 resources/plot2d_fitall.png delete mode 100644 resources/plot2d_fitarea.png delete mode 100755 resources/plot2d_glpan.png delete mode 100644 resources/plot2d_legend.png delete mode 100644 resources/plot2d_linear.png delete mode 100644 resources/plot2d_linear_y.png delete mode 100644 resources/plot2d_lines.png delete mode 100644 resources/plot2d_log.png delete mode 100644 resources/plot2d_log_y.png delete mode 100644 resources/plot2d_pan.png delete mode 100644 resources/plot2d_points.png delete mode 100755 resources/plot2d_rotate.png delete mode 100644 resources/plot2d_settings.png delete mode 100644 resources/plot2d_splines.png delete mode 100644 resources/plot2d_zoom.png delete mode 100644 resources/print.png delete mode 100644 resources/redo.png delete mode 100644 resources/reset.png delete mode 100644 resources/save.png delete mode 100644 resources/select1.png delete mode 100644 resources/tile.png delete mode 100644 resources/uc_add.png delete mode 100644 resources/uc_clear.png delete mode 100644 resources/uc_current.png delete mode 100644 resources/uc_del.png delete mode 100644 resources/uc_new.png delete mode 100644 resources/undo.png delete mode 100755 resources/undo_arrow.png delete mode 100644 resources/view_back.png delete mode 100644 resources/view_bottom.png delete mode 100644 resources/view_camera_dump.png delete mode 100755 resources/view_clipping.png delete mode 100755 resources/view_clipping_pressed.png delete mode 100755 resources/view_clone.png delete mode 100755 resources/view_dump.png delete mode 100644 resources/view_fitall.png delete mode 100644 resources/view_fitarea.png delete mode 100755 resources/view_fitselect.png delete mode 100644 resources/view_front.png delete mode 100644 resources/view_glpan.png delete mode 100755 resources/view_graduated_axes.png delete mode 100644 resources/view_left.png delete mode 100644 resources/view_pan.png delete mode 100755 resources/view_presets.png delete mode 100644 resources/view_reset.png delete mode 100644 resources/view_right.png delete mode 100644 resources/view_rotate.png delete mode 100755 resources/view_scaling.png delete mode 100755 resources/view_shoot.png delete mode 100644 resources/view_top.png delete mode 100644 resources/view_triedre.png delete mode 100755 resources/view_update_rate.png delete mode 100644 resources/view_zoom.png delete mode 100755 resources/vtile.png delete mode 100755 src/Makefile.in delete mode 100755 src/OBJECT/Handle_SALOME_AISObject.hxx delete mode 100755 src/OBJECT/Handle_SALOME_AISShape.hxx delete mode 100644 src/OBJECT/Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx delete mode 100644 src/OBJECT/Handle_SALOME_Filter.hxx delete mode 100755 src/OBJECT/Handle_SALOME_InteractiveObject.hxx delete mode 100644 src/OBJECT/Handle_SALOME_ListNodeOfListIO.hxx delete mode 100644 src/OBJECT/Handle_SALOME_TypeFilter.hxx delete mode 100755 src/OBJECT/Makefile.in delete mode 100755 src/OBJECT/SALOME_AISObject.cxx delete mode 100755 src/OBJECT/SALOME_AISObject.hxx delete mode 100755 src/OBJECT/SALOME_AISObject.ixx delete mode 100755 src/OBJECT/SALOME_AISObject.jxx delete mode 100755 src/OBJECT/SALOME_AISShape.cxx delete mode 100755 src/OBJECT/SALOME_AISShape.hxx delete mode 100755 src/OBJECT/SALOME_AISShape.ixx delete mode 100755 src/OBJECT/SALOME_AISShape.jxx delete mode 100644 src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx delete mode 100644 src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_0.cxx delete mode 100644 src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx delete mode 100644 src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx delete mode 100644 src/OBJECT/SALOME_DataMapOfIOMapOfInteger.hxx delete mode 100644 src/OBJECT/SALOME_DataMapOfIOMapOfInteger_0.cxx delete mode 100644 src/OBJECT/SALOME_Filter.cxx delete mode 100644 src/OBJECT/SALOME_Filter.hxx delete mode 100644 src/OBJECT/SALOME_Filter.ixx delete mode 100644 src/OBJECT/SALOME_Filter.jxx delete mode 100755 src/OBJECT/SALOME_InteractiveObject.cxx delete mode 100755 src/OBJECT/SALOME_InteractiveObject.hxx delete mode 100755 src/OBJECT/SALOME_InteractiveObject.ixx delete mode 100755 src/OBJECT/SALOME_InteractiveObject.jxx delete mode 100644 src/OBJECT/SALOME_ListIO.hxx delete mode 100644 src/OBJECT/SALOME_ListIO_0.cxx delete mode 100644 src/OBJECT/SALOME_ListIteratorOfListIO.hxx delete mode 100644 src/OBJECT/SALOME_ListIteratorOfListIO_0.cxx delete mode 100644 src/OBJECT/SALOME_ListNodeOfListIO.hxx delete mode 100644 src/OBJECT/SALOME_ListNodeOfListIO_0.cxx delete mode 100644 src/OBJECT/SALOME_Selection.h delete mode 100644 src/OBJECT/SALOME_TypeFilter.cxx delete mode 100644 src/OBJECT/SALOME_TypeFilter.hxx delete mode 100644 src/OBJECT/SALOME_TypeFilter.ixx delete mode 100644 src/OBJECT/SALOME_TypeFilter.jxx delete mode 100755 src/OCCViewer/Makefile.in delete mode 100755 src/OCCViewer/OCCViewer.h delete mode 100755 src/OCCViewer/OCCViewer_AISSelector.cxx delete mode 100755 src/OCCViewer/OCCViewer_AISSelector.h delete mode 100644 src/OCCViewer/OCCViewer_ClippingDlg.cxx delete mode 100644 src/OCCViewer/OCCViewer_ClippingDlg.h delete mode 100755 src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx delete mode 100755 src/OCCViewer/OCCViewer_CreateRestoreViewDlg.h delete mode 100755 src/OCCViewer/OCCViewer_VService.cxx delete mode 100755 src/OCCViewer/OCCViewer_VService.h delete mode 100755 src/OCCViewer/OCCViewer_ViewManager.cxx delete mode 100755 src/OCCViewer/OCCViewer_ViewManager.h delete mode 100755 src/OCCViewer/OCCViewer_ViewModel.cxx delete mode 100755 src/OCCViewer/OCCViewer_ViewModel.h delete mode 100755 src/OCCViewer/OCCViewer_ViewPort.cxx delete mode 100755 src/OCCViewer/OCCViewer_ViewPort.h delete mode 100755 src/OCCViewer/OCCViewer_ViewPort3d.cxx delete mode 100755 src/OCCViewer/OCCViewer_ViewPort3d.h delete mode 100755 src/OCCViewer/OCCViewer_ViewWindow.cxx delete mode 100755 src/OCCViewer/OCCViewer_ViewWindow.h delete mode 100755 src/OCCViewer/resources/OCCViewer_images.po delete mode 100755 src/OCCViewer/resources/OCCViewer_msg_en.po delete mode 100755 src/OCCViewer/resources/view_back.png delete mode 100755 src/OCCViewer/resources/view_bottom.png delete mode 100755 src/OCCViewer/resources/view_camera_dump.png delete mode 100644 src/OCCViewer/resources/view_clipping.png delete mode 100644 src/OCCViewer/resources/view_clipping_pressed.png delete mode 100755 src/OCCViewer/resources/view_clone.png delete mode 100755 src/OCCViewer/resources/view_fitall.png delete mode 100755 src/OCCViewer/resources/view_fitarea.png delete mode 100755 src/OCCViewer/resources/view_front.png delete mode 100755 src/OCCViewer/resources/view_glpan.png delete mode 100755 src/OCCViewer/resources/view_left.png delete mode 100755 src/OCCViewer/resources/view_pan.png delete mode 100755 src/OCCViewer/resources/view_presets.png delete mode 100755 src/OCCViewer/resources/view_reset.png delete mode 100755 src/OCCViewer/resources/view_right.png delete mode 100755 src/OCCViewer/resources/view_rotate.png delete mode 100755 src/OCCViewer/resources/view_shoot.png delete mode 100755 src/OCCViewer/resources/view_top.png delete mode 100755 src/OCCViewer/resources/view_triedre.png delete mode 100755 src/OCCViewer/resources/view_zoom.png delete mode 100755 src/ObjBrowser/OB.h delete mode 100755 src/ObjBrowser/OB_Browser.cxx delete mode 100755 src/ObjBrowser/OB_Browser.h delete mode 100644 src/ObjBrowser/OB_Filter.cxx delete mode 100644 src/ObjBrowser/OB_Filter.h delete mode 100755 src/ObjBrowser/OB_ListItem.cxx delete mode 100755 src/ObjBrowser/OB_ListItem.h delete mode 100755 src/ObjBrowser/OB_ListView.cxx delete mode 100755 src/ObjBrowser/OB_ListView.h delete mode 100755 src/ObjBrowser/resources/OB_msg_en.po delete mode 100755 src/Plot2d/Makefile.in delete mode 100755 src/Plot2d/Plot2d.h delete mode 100755 src/Plot2d/Plot2d_Curve.cxx delete mode 100755 src/Plot2d/Plot2d_Curve.h delete mode 100755 src/Plot2d/Plot2d_FitDataDlg.cxx delete mode 100755 src/Plot2d/Plot2d_FitDataDlg.h delete mode 100755 src/Plot2d/Plot2d_Prs.cxx delete mode 100755 src/Plot2d/Plot2d_Prs.h delete mode 100644 src/Plot2d/Plot2d_SetupCurveDlg.cxx delete mode 100644 src/Plot2d/Plot2d_SetupCurveDlg.h delete mode 100755 src/Plot2d/Plot2d_SetupViewDlg.cxx delete mode 100755 src/Plot2d/Plot2d_SetupViewDlg.h delete mode 100644 src/Plot2d/Plot2d_ToolTip.cxx delete mode 100644 src/Plot2d/Plot2d_ToolTip.h delete mode 100755 src/Plot2d/Plot2d_ViewFrame.cxx delete mode 100755 src/Plot2d/Plot2d_ViewFrame.h delete mode 100755 src/Plot2d/Plot2d_ViewManager.cxx delete mode 100755 src/Plot2d/Plot2d_ViewManager.h delete mode 100755 src/Plot2d/Plot2d_ViewModel.cxx delete mode 100755 src/Plot2d/Plot2d_ViewModel.h delete mode 100755 src/Plot2d/Plot2d_ViewWindow.cxx delete mode 100755 src/Plot2d/Plot2d_ViewWindow.h delete mode 100755 src/Plot2d/resources/Plot2d_images.po delete mode 100755 src/Plot2d/resources/Plot2d_msg_en.po delete mode 100755 src/Plot2d/resources/plot2d_camera_dump.png delete mode 100755 src/Plot2d/resources/plot2d_clone.png delete mode 100755 src/Plot2d/resources/plot2d_fitall.png delete mode 100755 src/Plot2d/resources/plot2d_fitarea.png delete mode 100755 src/Plot2d/resources/plot2d_glpan.png delete mode 100755 src/Plot2d/resources/plot2d_legend.png delete mode 100755 src/Plot2d/resources/plot2d_linear.png delete mode 100755 src/Plot2d/resources/plot2d_linear_y.png delete mode 100755 src/Plot2d/resources/plot2d_lines.png delete mode 100755 src/Plot2d/resources/plot2d_log.png delete mode 100755 src/Plot2d/resources/plot2d_log_y.png delete mode 100755 src/Plot2d/resources/plot2d_pan.png delete mode 100755 src/Plot2d/resources/plot2d_points.png delete mode 100755 src/Plot2d/resources/plot2d_rotate.png delete mode 100755 src/Plot2d/resources/plot2d_settings.png delete mode 100755 src/Plot2d/resources/plot2d_splines.png delete mode 100755 src/Plot2d/resources/plot2d_zoom.png delete mode 100755 src/Prs/Makefile.in delete mode 100755 src/Prs/SALOME_Prs.cxx delete mode 100755 src/Prs/SALOME_Prs.h delete mode 100755 src/PythonConsole/Makefile.in delete mode 100755 src/PythonConsole/PythonConsole.h delete mode 100755 src/PythonConsole/PythonConsole_PyConsole.cxx delete mode 100755 src/PythonConsole/PythonConsole_PyConsole.h delete mode 100755 src/PythonConsole/PythonConsole_PyEditor.cxx delete mode 100755 src/PythonConsole/PythonConsole_PyEditor.h delete mode 100755 src/PythonConsole/PythonConsole_PyInterp.cxx delete mode 100755 src/PythonConsole/PythonConsole_PyInterp.h delete mode 100755 src/QDS/Makefile.in delete mode 100644 src/QDS/QDS.cxx delete mode 100644 src/QDS/QDS.h delete mode 100644 src/QDS/QDS_CheckBox.cxx delete mode 100644 src/QDS/QDS_CheckBox.h delete mode 100644 src/QDS/QDS_ComboBox.cxx delete mode 100644 src/QDS/QDS_ComboBox.h delete mode 100644 src/QDS/QDS_Datum.cxx delete mode 100644 src/QDS/QDS_Datum.h delete mode 100644 src/QDS/QDS_LineEdit.cxx delete mode 100644 src/QDS/QDS_LineEdit.h delete mode 100644 src/QDS/QDS_RadioBox.cxx delete mode 100644 src/QDS/QDS_RadioBox.h delete mode 100644 src/QDS/QDS_SpinBox.cxx delete mode 100644 src/QDS/QDS_SpinBox.h delete mode 100644 src/QDS/QDS_SpinBoxDbl.cxx delete mode 100644 src/QDS/QDS_SpinBoxDbl.h delete mode 100644 src/QDS/QDS_Table.cxx delete mode 100644 src/QDS/QDS_Table.h delete mode 100644 src/QDS/QDS_TextEdit.cxx delete mode 100644 src/QDS/QDS_TextEdit.h delete mode 100644 src/QDS/QDS_Validator.cxx delete mode 100644 src/QDS/QDS_Validator.h delete mode 100644 src/QDS/resources/QDS_msg_en.po delete mode 100755 src/RegistryDisplay/HelpWindow.cxx delete mode 100755 src/RegistryDisplay/HelpWindow.hxx delete mode 100755 src/RegistryDisplay/IntervalWindow.cxx delete mode 100755 src/RegistryDisplay/IntervalWindow.hxx delete mode 100755 src/RegistryDisplay/Makefile.in delete mode 100755 src/RegistryDisplay/RegWidget.cxx delete mode 100755 src/RegistryDisplay/RegWidget.h delete mode 100755 src/RegistryDisplay/RegWidgetFactory.cxx delete mode 100755 src/ResExporter/Makefile.in delete mode 100644 src/ResExporter/ResourceExporter.cxx delete mode 100755 src/SALOME_PY/Makefile.in delete mode 100755 src/SALOME_PY/SalomePy.cxx delete mode 100755 src/SALOME_PYQT/Makefile.in delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_GUI.h delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_GUI.sip delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.cxx delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.h delete mode 100644 src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_SipDefs.h.in delete mode 100644 src/SALOME_PYQT/SalomePyQt/Makefile.in delete mode 100644 src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx delete mode 100644 src/SALOME_PYQT/SalomePyQt/SalomePyQt.h delete mode 100644 src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip delete mode 100644 src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip delete mode 100755 src/SALOME_SWIG/Help.py delete mode 100755 src/SALOME_SWIG/Makefile.in delete mode 100755 src/SALOME_SWIG/PyInterp.py delete mode 100644 src/SALOME_SWIG/SALOMEGUI_Swig.cxx delete mode 100644 src/SALOME_SWIG/SALOMEGUI_Swig.hxx delete mode 100644 src/SALOME_SWIG/SALOMEGUI_Swig.i delete mode 100755 src/SALOME_SWIG/SALOMEGUI_shared_modules.py delete mode 100755 src/SALOME_SWIG/examplevtk1.py delete mode 100755 src/SALOME_SWIG/libSALOME_Swig.i delete mode 100755 src/SALOME_SWIG/salome.py delete mode 100755 src/SALOME_SWIG/supervisionexample.py delete mode 100755 src/SALOME_SWIG/supervisionexample.py.in delete mode 100755 src/SALOME_SWIG/supervisiongeomexample.py delete mode 100755 src/SALOME_SWIG/supervisiongeomexample.py.in delete mode 100755 src/SALOME_SWIG/test_big_table.py delete mode 100755 src/SALOME_SWIG/test_many_objects.py delete mode 100755 src/SALOME_SWIG/test_remove_ref.py delete mode 100755 src/SALOME_SWIG/test_table.py delete mode 100755 src/SALOME_SWIG/testattr.py delete mode 100755 src/SOCC/Makefile.in delete mode 100755 src/SOCC/SOCC.h delete mode 100644 src/SOCC/SOCC_Prs.cxx delete mode 100644 src/SOCC/SOCC_Prs.h delete mode 100755 src/SOCC/SOCC_ViewModel.cxx delete mode 100755 src/SOCC/SOCC_ViewModel.h delete mode 100644 src/SOCC/SOCC_ViewWindow.cxx delete mode 100644 src/SOCC/SOCC_ViewWindow.h delete mode 100644 src/SPlot2d/Makefile.in delete mode 100644 src/SPlot2d/SPlot2d.h delete mode 100644 src/SPlot2d/SPlot2d_Curve.cxx delete mode 100644 src/SPlot2d/SPlot2d_Curve.h delete mode 100644 src/SPlot2d/SPlot2d_Prs.cxx delete mode 100644 src/SPlot2d/SPlot2d_Prs.h delete mode 100644 src/SPlot2d/SPlot2d_ViewModel.cxx delete mode 100644 src/SPlot2d/SPlot2d_ViewModel.h delete mode 100644 src/SPlot2d/SPlot2d_ViewWindow.cxx delete mode 100644 src/SPlot2d/SPlot2d_ViewWindow.h delete mode 100644 src/SPlot2d/SPlot2d_msg_en.po delete mode 100755 src/SUPERVGraph/Makefile.in delete mode 100755 src/SUPERVGraph/SUPERVGraph.cxx delete mode 100755 src/SUPERVGraph/SUPERVGraph.h delete mode 100755 src/SUPERVGraph/SUPERVGraph_ViewFrame.cxx delete mode 100755 src/SUPERVGraph/SUPERVGraph_ViewFrame.h delete mode 100644 src/SUPERVGraph/SUPERVGraph_ViewManager.cxx delete mode 100644 src/SUPERVGraph/SUPERVGraph_ViewManager.h delete mode 100644 src/SUPERVGraph/SUPERVGraph_ViewModel.cxx delete mode 100644 src/SUPERVGraph/SUPERVGraph_ViewModel.h delete mode 100644 src/SUPERVGraph/resources/SUPERVGraph_images.po delete mode 100644 src/SUPERVGraph/resources/SUPERVGraph_msg_en.po delete mode 100644 src/SUPERVGraph/resources/view_pan.png delete mode 100644 src/SUPERVGraph/resources/view_reset.png delete mode 100755 src/SVTK/Makefile.in delete mode 100644 src/SVTK/SALOME_Actor.cxx delete mode 100644 src/SVTK/SALOME_Actor.h delete mode 100644 src/SVTK/SVTK.cxx delete mode 100755 src/SVTK/SVTK.h delete mode 100644 src/SVTK/SVTK_Actor.cxx delete mode 100644 src/SVTK/SVTK_Actor.h delete mode 100644 src/SVTK/SVTK_CubeAxesActor2D.cxx delete mode 100644 src/SVTK/SVTK_CubeAxesActor2D.h delete mode 100644 src/SVTK/SVTK_CubeAxesDlg.cxx delete mode 100644 src/SVTK/SVTK_CubeAxesDlg.h delete mode 100644 src/SVTK/SVTK_DeviceActor.cxx delete mode 100644 src/SVTK/SVTK_DeviceActor.h delete mode 100644 src/SVTK/SVTK_DialogBase.cxx delete mode 100644 src/SVTK/SVTK_DialogBase.h delete mode 100644 src/SVTK/SVTK_Event.h delete mode 100755 src/SVTK/SVTK_Extension.cxx delete mode 100755 src/SVTK/SVTK_Extension.h delete mode 100644 src/SVTK/SVTK_FontWidget.cxx delete mode 100644 src/SVTK/SVTK_FontWidget.h delete mode 100644 src/SVTK/SVTK_Functor.h delete mode 100644 src/SVTK/SVTK_GenericRenderWindowInteractor.cxx delete mode 100644 src/SVTK/SVTK_GenericRenderWindowInteractor.h delete mode 100644 src/SVTK/SVTK_InteractorStyle.cxx delete mode 100644 src/SVTK/SVTK_InteractorStyle.h delete mode 100644 src/SVTK/SVTK_MainWindow.cxx delete mode 100644 src/SVTK/SVTK_MainWindow.h delete mode 100644 src/SVTK/SVTK_NonIsometricDlg.cxx delete mode 100644 src/SVTK/SVTK_NonIsometricDlg.h delete mode 100644 src/SVTK/SVTK_Prs.cxx delete mode 100644 src/SVTK/SVTK_Prs.h delete mode 100644 src/SVTK/SVTK_RectPicker.cxx delete mode 100644 src/SVTK/SVTK_RectPicker.h delete mode 100644 src/SVTK/SVTK_RenderWindowInteractor.cxx delete mode 100644 src/SVTK/SVTK_RenderWindowInteractor.h delete mode 100644 src/SVTK/SVTK_Renderer.cxx delete mode 100644 src/SVTK/SVTK_Renderer.h delete mode 100644 src/SVTK/SVTK_Selection.h delete mode 100644 src/SVTK/SVTK_SelectionEvent.h delete mode 100644 src/SVTK/SVTK_Selector.cxx delete mode 100644 src/SVTK/SVTK_Selector.h delete mode 100644 src/SVTK/SVTK_SelectorDef.h delete mode 100644 src/SVTK/SVTK_SpaceMouse.cxx delete mode 100644 src/SVTK/SVTK_SpaceMouse.h delete mode 100644 src/SVTK/SVTK_Trihedron.cxx delete mode 100644 src/SVTK/SVTK_Trihedron.h delete mode 100644 src/SVTK/SVTK_UpdateRateDlg.cxx delete mode 100644 src/SVTK/SVTK_UpdateRateDlg.h delete mode 100644 src/SVTK/SVTK_View.cxx delete mode 100644 src/SVTK/SVTK_View.h delete mode 100644 src/SVTK/SVTK_ViewManager.cxx delete mode 100644 src/SVTK/SVTK_ViewManager.h delete mode 100644 src/SVTK/SVTK_ViewModel.cxx delete mode 100644 src/SVTK/SVTK_ViewModel.h delete mode 100644 src/SVTK/SVTK_ViewModelBase.h delete mode 100755 src/SVTK/SVTK_ViewWindow.cxx delete mode 100755 src/SVTK/SVTK_ViewWindow.h delete mode 100644 src/SVTK/resources/SVTK_images.po delete mode 100755 src/SVTK/resources/SVTK_msg_en.po delete mode 100755 src/SalomeApp/Makefile.in delete mode 100644 src/SalomeApp/SalomeApp.h delete mode 100644 src/SalomeApp/SalomeApp_Application.cxx delete mode 100644 src/SalomeApp/SalomeApp_Application.h delete mode 100644 src/SalomeApp/SalomeApp_CheckFileDlg.cxx delete mode 100644 src/SalomeApp/SalomeApp_CheckFileDlg.h delete mode 100644 src/SalomeApp/SalomeApp_DataModel.cxx delete mode 100644 src/SalomeApp/SalomeApp_DataModel.h delete mode 100644 src/SalomeApp/SalomeApp_DataObject.cxx delete mode 100644 src/SalomeApp/SalomeApp_DataObject.h delete mode 100644 src/SalomeApp/SalomeApp_Displayer.cxx delete mode 100644 src/SalomeApp/SalomeApp_Displayer.h delete mode 100755 src/SalomeApp/SalomeApp_EventFilter.cxx delete mode 100755 src/SalomeApp/SalomeApp_EventFilter.h delete mode 100644 src/SalomeApp/SalomeApp_ExceptionHandler.cxx delete mode 100644 src/SalomeApp/SalomeApp_ExceptionHandler.h delete mode 100644 src/SalomeApp/SalomeApp_Filter.cxx delete mode 100644 src/SalomeApp/SalomeApp_Filter.h delete mode 100644 src/SalomeApp/SalomeApp_ImportOperation.cxx delete mode 100644 src/SalomeApp/SalomeApp_ImportOperation.h delete mode 100644 src/SalomeApp/SalomeApp_ListView.cxx delete mode 100644 src/SalomeApp/SalomeApp_ListView.h delete mode 100644 src/SalomeApp/SalomeApp_Module.cxx delete mode 100644 src/SalomeApp/SalomeApp_Module.h delete mode 100755 src/SalomeApp/SalomeApp_PyInterp.cxx delete mode 100755 src/SalomeApp/SalomeApp_PyInterp.h delete mode 100644 src/SalomeApp/SalomeApp_Study.cxx delete mode 100644 src/SalomeApp/SalomeApp_Study.h delete mode 100644 src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx delete mode 100644 src/SalomeApp/SalomeApp_StudyPropertiesDlg.h delete mode 100644 src/SalomeApp/SalomeApp_Tools.cxx delete mode 100644 src/SalomeApp/SalomeApp_Tools.h delete mode 100644 src/SalomeApp/SalomeApp_TypeFilter.cxx delete mode 100644 src/SalomeApp/SalomeApp_TypeFilter.h delete mode 100644 src/SalomeApp/SalomeApp_VisualState.cxx delete mode 100644 src/SalomeApp/SalomeApp_VisualState.h delete mode 100644 src/SalomeApp/Test/Makefile.in delete mode 100644 src/SalomeApp/Test/SalomeAppTest.cxx delete mode 100644 src/SalomeApp/Test/SalomeAppTest.hxx delete mode 100644 src/SalomeApp/Test/TestSalomeApp.cxx delete mode 100644 src/SalomeApp/Test/TestSalomeApp.py delete mode 100644 src/SalomeApp/resources/SalomeApp.ini delete mode 100644 src/SalomeApp/resources/SalomeApp.xml delete mode 100644 src/SalomeApp/resources/SalomeApp_images.po delete mode 100644 src/SalomeApp/resources/SalomeApp_msg_en.po delete mode 100755 src/Session/InquireServersQThread.cxx delete mode 100755 src/Session/InquireServersQThread.h delete mode 100755 src/Session/Makefile.in delete mode 100755 src/Session/SALOME_Session.hxx delete mode 100755 src/Session/SALOME_Session_Server.cxx delete mode 100644 src/Session/SalomeApp_Engine_i.cxx delete mode 100755 src/Session/SalomeApp_Engine_i.hxx delete mode 100644 src/Session/Session_ServerCheck.cxx delete mode 100644 src/Session/Session_ServerCheck.hxx delete mode 100755 src/Session/Session_ServerLauncher.cxx delete mode 100755 src/Session/Session_ServerLauncher.hxx delete mode 100755 src/Session/Session_ServerThread.cxx delete mode 100755 src/Session/Session_ServerThread.hxx delete mode 100755 src/Session/Session_Session_i.cxx delete mode 100755 src/Session/Session_Session_i.hxx delete mode 100755 src/Session/runSession delete mode 100644 src/Style/Makefile.in delete mode 100644 src/Style/SalomeStyle.cxx delete mode 100644 src/Style/SalomeStyle.h delete mode 100755 src/TOOLSGUI/Makefile.in delete mode 100755 src/TOOLSGUI/ToolsGUI.cxx delete mode 100755 src/TOOLSGUI/ToolsGUI.h delete mode 100755 src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx delete mode 100755 src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.h delete mode 100755 src/TOOLSGUI/ToolsGUI_HelpWindow.cxx delete mode 100755 src/TOOLSGUI/ToolsGUI_HelpWindow.h delete mode 100755 src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx delete mode 100755 src/TOOLSGUI/ToolsGUI_IntervalWindow.h delete mode 100755 src/TOOLSGUI/ToolsGUI_RegWidget.cxx delete mode 100755 src/TOOLSGUI/ToolsGUI_RegWidget.h delete mode 100755 src/TOOLSGUI/resources/ToolsGUI_icons.po delete mode 100755 src/TOOLSGUI/resources/ToolsGUI_msg_en.po delete mode 100755 src/VTKViewer/Makefile.in delete mode 100644 src/VTKViewer/VTKViewer.cxx delete mode 100755 src/VTKViewer/VTKViewer.h delete mode 100755 src/VTKViewer/VTKViewer_Actor.cxx delete mode 100755 src/VTKViewer/VTKViewer_Actor.h delete mode 100644 src/VTKViewer/VTKViewer_Algorithm.h delete mode 100644 src/VTKViewer/VTKViewer_AppendFilter.cxx delete mode 100644 src/VTKViewer/VTKViewer_AppendFilter.h delete mode 100644 src/VTKViewer/VTKViewer_CellLocationsArray.cxx delete mode 100644 src/VTKViewer/VTKViewer_CellLocationsArray.h delete mode 100755 src/VTKViewer/VTKViewer_CellRectPicker.cxx delete mode 100755 src/VTKViewer/VTKViewer_CellRectPicker.h delete mode 100644 src/VTKViewer/VTKViewer_ConvexTool.cxx delete mode 100644 src/VTKViewer/VTKViewer_ConvexTool.h delete mode 100755 src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx delete mode 100755 src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.h delete mode 100755 src/VTKViewer/VTKViewer_Filter.cxx delete mode 100755 src/VTKViewer/VTKViewer_Filter.h delete mode 100644 src/VTKViewer/VTKViewer_Functor.h delete mode 100755 src/VTKViewer/VTKViewer_GeometryFilter.cxx delete mode 100755 src/VTKViewer/VTKViewer_GeometryFilter.h delete mode 100644 src/VTKViewer/VTKViewer_InteractorStyle.cxx delete mode 100644 src/VTKViewer/VTKViewer_InteractorStyle.h delete mode 100755 src/VTKViewer/VTKViewer_PassThroughFilter.cxx delete mode 100755 src/VTKViewer/VTKViewer_PassThroughFilter.h delete mode 100755 src/VTKViewer/VTKViewer_RectPicker.cxx delete mode 100755 src/VTKViewer/VTKViewer_RectPicker.h delete mode 100755 src/VTKViewer/VTKViewer_RenderWindow.cxx delete mode 100755 src/VTKViewer/VTKViewer_RenderWindow.h delete mode 100755 src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx delete mode 100755 src/VTKViewer/VTKViewer_RenderWindowInteractor.h delete mode 100755 src/VTKViewer/VTKViewer_ShrinkFilter.cxx delete mode 100755 src/VTKViewer/VTKViewer_ShrinkFilter.h delete mode 100755 src/VTKViewer/VTKViewer_Transform.cxx delete mode 100755 src/VTKViewer/VTKViewer_Transform.h delete mode 100755 src/VTKViewer/VTKViewer_TransformFilter.cxx delete mode 100755 src/VTKViewer/VTKViewer_TransformFilter.h delete mode 100755 src/VTKViewer/VTKViewer_Trihedron.cxx delete mode 100755 src/VTKViewer/VTKViewer_Trihedron.h delete mode 100755 src/VTKViewer/VTKViewer_Utilities.cxx delete mode 100755 src/VTKViewer/VTKViewer_Utilities.h delete mode 100755 src/VTKViewer/VTKViewer_VectorText.cxx delete mode 100755 src/VTKViewer/VTKViewer_VectorText.h delete mode 100755 src/VTKViewer/VTKViewer_ViewManager.cxx delete mode 100755 src/VTKViewer/VTKViewer_ViewManager.h delete mode 100755 src/VTKViewer/VTKViewer_ViewModel.cxx delete mode 100755 src/VTKViewer/VTKViewer_ViewModel.h delete mode 100755 src/VTKViewer/VTKViewer_ViewWindow.cxx delete mode 100755 src/VTKViewer/VTKViewer_ViewWindow.h delete mode 100755 src/VTKViewer/resources/VTKViewer_images.po delete mode 100755 src/VTKViewer/resources/VTKViewer_msg_en.po delete mode 100755 src/VTKViewer/resources/view_back.png delete mode 100755 src/VTKViewer/resources/view_bottom.png delete mode 100755 src/VTKViewer/resources/view_camera_dump.png delete mode 100755 src/VTKViewer/resources/view_fitall.png delete mode 100755 src/VTKViewer/resources/view_fitarea.png delete mode 100755 src/VTKViewer/resources/view_front.png delete mode 100755 src/VTKViewer/resources/view_glpan.png delete mode 100755 src/VTKViewer/resources/view_graduated_axes.png delete mode 100755 src/VTKViewer/resources/view_left.png delete mode 100755 src/VTKViewer/resources/view_pan.png delete mode 100755 src/VTKViewer/resources/view_reset.png delete mode 100755 src/VTKViewer/resources/view_right.png delete mode 100755 src/VTKViewer/resources/view_rotate.png delete mode 100644 src/VTKViewer/resources/view_scaling.png delete mode 100755 src/VTKViewer/resources/view_top.png delete mode 100755 src/VTKViewer/resources/view_triedre.png delete mode 100755 src/VTKViewer/resources/view_update_rate.png delete mode 100755 src/VTKViewer/resources/view_zoom.png diff --git a/GUI_version.h.in b/GUI_version.h.in deleted file mode 100644 index 9a5df78eb..000000000 --- a/GUI_version.h.in +++ /dev/null @@ -1,34 +0,0 @@ -// 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/ -// -// File : GUI_version.h -// Author : Vadim SANDLER -// Module : SALOME - -#if !defined(__GUI_VERSION_H__) -#define __GUI_VERSION_H__ - -/* - GUI_VERSION is (major << 16) + (minor << 8) + patch. -*/ - -#define GUI_VERSION_STR "@VERSION@" -#define GUI_VERSION @XVERSION@ - -#endif // __GUI_VERSION_H__ diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 31600814e..000000000 --- a/INSTALL +++ /dev/null @@ -1 +0,0 @@ -SALOME2 : GUI module diff --git a/LICENCE b/LICENCE deleted file mode 100644 index b1e3f5a26..000000000 --- a/LICENCE +++ /dev/null @@ -1,504 +0,0 @@ - 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/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/adm_local/Makefile.in b/adm_local/Makefile.in deleted file mode 100644 index 23b57e707..000000000 --- a/adm_local/Makefile.in +++ /dev/null @@ -1,61 +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)/adm_local - - -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: - -tests: - -distclean-other: - diff --git a/adm_local/unix/config_files/README b/adm_local/unix/config_files/README deleted file mode 100644 index feb997b16..000000000 --- a/adm_local/unix/config_files/README +++ /dev/null @@ -1,3 +0,0 @@ -This file is only here for CVS: -CVS does not always create empty directory, and adm_local/unix/config_file -is needed by build_configure. diff --git a/adm_local/unix/config_files/check_GLViewer.m4 b/adm_local/unix/config_files/check_GLViewer.m4 deleted file mode 100644 index 90a304173..000000000 --- a/adm_local/unix/config_files/check_GLViewer.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# -# Check configure option --disable-glViewer=[yes|no|DIR] taking into account that -# DISABLE_GLVIEWER may be already set during build_configure, -# Set DISABLE_GLVIEWER to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_GLVIEWER],[ - -AC_ARG_WITH(glViewer, - [ --disable-glViewer default=no ], - disable_glViewer="$withval",disable_glViewer="${DISABLE_GLVIEWER}") - -case $disable_glViewer in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(******* DISABLE GLViewer configuration *****) -# AC_MSG_RESULT(************************************************) - DISABLE_GLVIEWER="yes" - AC_SUBST(DISABLE_GLVIEWER) -esac - - -])dnl diff --git a/adm_local/unix/config_files/check_GUI.m4 b/adm_local/unix/config_files/check_GUI.m4 deleted file mode 100755 index ff090e7b9..000000000 --- a/adm_local/unix/config_files/check_GUI.m4 +++ /dev/null @@ -1,63 +0,0 @@ -# Check availability of Salome binary distribution -# -# Author : Marc Tajchman (CEA, 2002) -#------------------------------------------------------------ - -AC_DEFUN([CHECK_GUI],[ -AC_REQUIRE([AC_LINKER_OPTIONS])dnl - -AC_CHECKING(for $2 $1 ) - -SalomeGUI_ok=no - -GUI_LDFLAGS="" -GUI_CXXFLAGS="" - -AC_ARG_WITH(gui, - --with-salome_gui=DIR root directory path of SALOME GUI installation, - SALOME_GUI_DIR="$withval",SALOME_GUI_DIR="") - -if test "x${SALOME_GUI_DIR}" = "x" ; then - # no --with-gui-dir option used - AC_MSG_RESULT(try \${GUI_ROOT_DIR}: ${GUI_ROOT_DIR}) - if test "x${GUI_ROOT_DIR}" != "x" ; then - # SALOME_ROOT_DIR environment variable defined - SALOME_GUI_DIR=${GUI_ROOT_DIR} - else - # 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}) - 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 - SalomeGUI_ok=yes - AC_MSG_RESULT(Using SALOME GUI distribution in ${SALOME_GUI_DIR}) - - if test "x${GUI_ROOT_DIR}" == "x" ; then - GUI_ROOT_DIR=${SALOME_GUI_DIR} - fi - - AC_SUBST(GUI_ROOT_DIR) - - GUI_LDFLAGS=-L${SALOME_GUI_DIR}/lib${LIB_LOCATION_SUFFIX}/salome - GUI_CXXFLAGS=-I${SALOME_GUI_DIR}/include/salome - - AC_SUBST(GUI_LDFLAGS) - AC_SUBST(GUI_CXXFLAGS) -else - AC_MSG_WARN("Cannot find compiled SALOME GUI distribution") -fi - -AC_MSG_RESULT(for $2: ${SalomeGUI_ok}) - -])dnl - -AC_DEFUN([CHECK_SALOME_GUI],[ - CHECK_GUI([libLightApp.so], - [SALOME GUI]) -])dnl \ No newline at end of file diff --git a/adm_local/unix/config_files/check_OCCViewer.m4 b/adm_local/unix/config_files/check_OCCViewer.m4 deleted file mode 100644 index cae33b971..000000000 --- a/adm_local/unix/config_files/check_OCCViewer.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# -# Check configure option --disable-occViewer=[yes|no|DIR] taking into account that -# DISABLE_OCCVIEWER may be already set during build_configure, -# Set DISABLE_OCCVIEWER to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_OCCVIEWER],[ - -AC_ARG_WITH(occViewer, - [ --disable-occViewer default=no ], - disable_occViewer="$withval",disable_occViewer="${DISABLE_OCCVIEWER}") - -case $disable_occViewer in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(***** DISABLE OCCViewer configuration ******) -# AC_MSG_RESULT(************************************************) - DISABLE_OCCVIEWER="yes" - AC_SUBST(DISABLE_OCCVIEWER) -esac - - -])dnl diff --git a/adm_local/unix/config_files/check_Plot2dViewer.m4 b/adm_local/unix/config_files/check_Plot2dViewer.m4 deleted file mode 100644 index a8fb1ad85..000000000 --- a/adm_local/unix/config_files/check_Plot2dViewer.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# -# Check configure option --disable-plot2dViewer=[yes|no|DIR] taking into account that -# DISABLE_PLOT2DVIEWER may be already set during build_configure, -# Set DISABLE_PLOT2DVIEWER to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_PLOT2DVIEWER],[ - -AC_ARG_WITH(plot2dViewer, - [ --disable-plot2dViewer default=no ], - disable_plot2dViewer="$withval",disable_plot2dViewer="${DISABLE_PLOT2DVIEWER}") - -case $disable_plot2dViewer in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(*** DISABLE Plot2dViewer configuration *****) -# AC_MSG_RESULT(************************************************) - DISABLE_PLOT2DVIEWER="yes" - AC_SUBST(DISABLE_PLOT2DVIEWER) -esac - - -])dnl diff --git a/adm_local/unix/config_files/check_PyConsole.m4 b/adm_local/unix/config_files/check_PyConsole.m4 deleted file mode 100644 index 503646f84..000000000 --- a/adm_local/unix/config_files/check_PyConsole.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# -# Check configure option --disable-pyConsole=[yes|no|DIR] taking into account that -# DISABLE_PYCONSOLE may be already set during build_configure, -# Set DISABLE_PYCONSOLE to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_PYCONSOLE],[ - -AC_ARG_WITH(pyConsole, - [ --disable-pyConsole default=no ], - disable_pyConsole="$withval",disable_pyConsole="${DISABLE_PYCONSOLE}") - -case $disable_pyConsole in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(***** DISABLE PyConsole configuration ******) -# AC_MSG_RESULT(************************************************) - DISABLE_PYCONSOLE="yes" - AC_SUBST(DISABLE_PYCONSOLE) -esac - - -])dnl diff --git a/adm_local/unix/config_files/check_SalomeObject.m4 b/adm_local/unix/config_files/check_SalomeObject.m4 deleted file mode 100644 index 453dbd7ab..000000000 --- a/adm_local/unix/config_files/check_SalomeObject.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# -# Check configure option --disable-salomeObject=[yes|no|DIR] taking into account that -# DISABLE_SALOMEOBJECT may be already set during build_configure, -# Set DISABLE_SALOMEOBJECT to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_SALOMEOBJECT],[ - -AC_ARG_WITH(salomeObject, - [ --disable-salomeObject default=no ], - disable_salomeObject="$withval",disable_salomeObject="${DISABLE_SALOMEOBJECT}") - -case $disable_salomeObject in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(*** DISABLE Salome object configuration ****) -# AC_MSG_RESULT(************************************************) - DISABLE_SALOMEOBJECT="yes" - AC_SUBST(DISABLE_SALOMEOBJECT) -esac - - -])dnl diff --git a/adm_local/unix/config_files/check_SupervGraphViewer.m4 b/adm_local/unix/config_files/check_SupervGraphViewer.m4 deleted file mode 100644 index 455f02136..000000000 --- a/adm_local/unix/config_files/check_SupervGraphViewer.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# -# Check configure option --disable-supervGraphViewer=[yes|no|DIR] taking into account that -# DISABLE_SUPERVGRAPHVIEWER may be already set during build_configure, -# Set DISABLE_SUPERVGRAPHVIEWER to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_SUPERVGRAPHVIEWER],[ - -AC_ARG_WITH(supervGraphViewer, - [ --disable-supervGraphViewer default=no ], - disable_supervGraphViewer="$withval",disable_supervGraphViewer="${DISABLE_SUPERVGRAPHVIEWER}") - -case $disable_supervGraphViewer in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(******* DISABLE SupervGraphViewer configuration ********) -# AC_MSG_RESULT(************************************************) - DISABLE_SUPERVGRAPHVIEWER="yes" - AC_SUBST(DISABLE_SUPERVGRAPHVIEWER) -esac - - -])dnl diff --git a/adm_local/unix/config_files/check_VTKViewer.m4 b/adm_local/unix/config_files/check_VTKViewer.m4 deleted file mode 100644 index c2adb23b9..000000000 --- a/adm_local/unix/config_files/check_VTKViewer.m4 +++ /dev/null @@ -1,25 +0,0 @@ -# -# Check configure option --disable-vtkViewer=[yes|no|DIR] taking into account that -# DISABLE_VTKVIEWER may be already set during build_configure, -# Set DISABLE_VTKVIEWER to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_VTKVIEWER],[ - -AC_ARG_WITH(vtkViewer, - [ --disable-vtkViewer default=no ], - disable_vtkViewer="$withval",disable_vtkViewer="${DISABLE_VTKVIEWER}") - -case $disable_vtkViewer in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(***** DISABLE VTK Viewer configuration *****) -# AC_MSG_RESULT(************************************************) - DISABLE_VTKVIEWER="yes" - AC_SUBST(DISABLE_VTKVIEWER) -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 deleted file mode 100755 index 20be4514f..000000000 --- a/adm_local/unix/config_files/check_corba_in_GUI.m4 +++ /dev/null @@ -1,12 +0,0 @@ -# Check availability of full Salome binary distribution -# -# Author : Marc Tajchman (CEA, 2002) -#------------------------------------------------------------ - -AC_DEFUN([CHECK_CORBA_IN_GUI],[ - CHECK_GUI([libSalomeApp.so], - [CORBA SALOME GUI]) - CORBA_IN_GUI=${SalomeGUI_ok} - AC_SUBST(CORBA_IN_GUI) -])dnl - diff --git a/adm_local/unix/config_files/check_disable_Corba.m4 b/adm_local/unix/config_files/check_disable_Corba.m4 deleted file mode 100644 index 5c777c3c1..000000000 --- a/adm_local/unix/config_files/check_disable_Corba.m4 +++ /dev/null @@ -1,27 +0,0 @@ -# -# Check configure option --disable-corba=[yes|no|DIR] taking into account that -# GUI_DISABLE_CORBA may be already set during build_configure, -# Set GUI_DISABLE_CORBA to yes|no -# -# Author : Edawrd AGAPOV (OCC, 2005) -# - -AC_DEFUN([CHECK_DISABLE_CORBA],[ - -AC_ARG_WITH(corba, - [ --disable-corba-gen default=no ], - disable_corba="$withval",disable_corba="${GUI_DISABLE_CORBA}") - -case $disable_corba in - yes) -# AC_MSG_RESULT(************************************************) -# AC_MSG_RESULT(******* DISABLE CORBA configuration ********) -# AC_MSG_RESULT(************************************************) - GUI_DISABLE_CORBA="yes";; - *) - GUI_DISABLE_CORBA="no" -esac - -AC_SUBST(GUI_DISABLE_CORBA) - -])dnl diff --git a/adm_local/unix/config_files/check_msg2qm.m4 b/adm_local/unix/config_files/check_msg2qm.m4 deleted file mode 100755 index 8d0c5474f..000000000 --- a/adm_local/unix/config_files/check_msg2qm.m4 +++ /dev/null @@ -1,57 +0,0 @@ -# Check availability of Qt's msg2qm tool binary distribution -# -# Author : Jerome Roy (CEA, 2003) -# - -AC_DEFUN([CHECK_MSG2QM],[ - -AC_CHECKING(for msg2qm) - -msg2qm_ok=no - -AC_ARG_WITH(msg2qm, - [ --with-msg2qm=DIR root directory path of MSG2QM installation], - MSG2QM_DIR="$withval",MSG2QM_DIR="") - -if test "x$MSG2QM_DIR" == "x" ; then - -# no --with-MSG2QM-dir option used - - if test "x$MSG2QM_ROOT" != "x" ; then - - # MSG2QM_ROOT environment variable defined - MSG2QM_DIR=$MSG2QM_ROOT - - else - - # search MSG2QM binaries in PATH variable - AC_PATH_PROG(TEMP, msg2qm) - if test "x$TEMP" != "x" ; then - MSG2QM_DIR=`dirname $TEMP` - fi - - fi -# -fi - -# look for msg2qm in ${MSG2QM_DIR} directory -if test -f ${MSG2QM_DIR}/msg2qm ; then - msg2qm_ok=yes - MSG2QM="${MSG2QM_DIR}/msg2qm" - AC_MSG_RESULT(Using MSG2QM executable in ${MSG2QM_DIR}) -else - # if not found, look for msg2qm in ${MSG2QM_DIR}/bin directory - if test -f ${MSG2QM_DIR}/bin/msg2qm ; then - msg2qm_ok=yes - MSG2QM="${MSG2QM_DIR}/bin/msg2qm" - AC_MSG_RESULT(Using MSG2QM executable in ${MSG2QM_DIR}/bin) - else - AC_MSG_WARN("Cannot find MSG2QM executable") - fi -fi - -AC_SUBST(MSG2QM) -AC_MSG_RESULT(for MSG2QM: $msg2qm_ok) - -])dnl - diff --git a/adm_local/unix/config_files/check_opengl.m4 b/adm_local/unix/config_files/check_opengl.m4 deleted file mode 100644 index 8a56e0f54..000000000 --- a/adm_local/unix/config_files/check_opengl.m4 +++ /dev/null @@ -1,195 +0,0 @@ -dnl Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License. -dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -dnl -dnl See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -dnl -dnl -dnl -AC_DEFUN([CHECK_OPENGL],[ -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_CPP])dnl -AC_REQUIRE([AC_LINKER_OPTIONS])dnl - -AC_LANG_SAVE -AC_LANG_CPLUSPLUS - -AC_ARG_WITH(opengl, - [AC_HELP_STRING([--with-opengl=DIR],[root directory path of OpenGL installation])], - [opengl_dir="$withval"], - [dirs="/usr/lib${LIB_LOCATION_SUFFIX} /usr/local/lib${LIB_LOCATION_SUFFIX} /opt/graphics/OpenGL/lib${LIB_LOCATION_SUFFIX} /usr/openwin/lib${LIB_LOCATION_SUFFIX} /usr/X11R6/lib${LIB_LOCATION_SUFFIX}"])dnl - -AC_CHECKING(for OpenGL) -AC_CHECKING(for OpenGL headers) - -OGL_INCLUDES="" -OGL_LIBS="" - -GL_LIB_PATH="" -GLU_LIB_PATH="" - -OpenGL_ok=no -OpenGL_libs_ok=no -OpenGL_headers_ok=no - -dnl openGL headers -# by default -if test "x${opengl_dir}" != "x" ; then - AC_MSG_RESULT(for opengl_dir: $opengl_dir) - AC_CHECK_HEADER([${opengl_dir}/include/GL/gl.h], - [OpenGL_headers_ok=yes; OGL_INCLUDES="-I${opengl_dir}/include"], - [OpenGL_headers_ok=no]) - if test "x${OpenGL_headers_ok}" = "xyes" ; then - AC_CHECKING(for default OpenGL library) - if test "x${opengl_dir}" = "x/usr" ; then - OGL_LIBS="" - else - OGL_LIBS="-L${opengl_dir}/lib" - fi - LDFLAGS_old="$LDFLAGS" - LDFLAGS="$LDFLAGS $OGL_LIBS" - AC_CHECK_LIB([GL], - [glBegin], - [OpenGL_libs_ok=yes], - [OpenGL_libs_ok=no]) - if test "x${OpenGL_libs_ok}" = "xyes" ; then - AC_TRY_LINK([], - [], - [OpenGL_libs_ok=yes ; OpenGL_ok=yes; OGL_LIBS="$OGL_LIBS -lGL"], - [OpenGL_libs_ok=no]) - fi - LDFLAGS="$LDFLAGS_old" - fi -fi - -if test "x${OpenGL_headers_ok}" = "xno" ; then - AC_CHECK_HEADER(GL/gl.h, - [OpenGL_headers_ok=yes], - [OpenGL_headers_ok=no]) -fi - -# under SunOS ? -if test "x${OpenGL_headers_ok}" = "xno" ; then - AC_CHECK_HEADERS(/usr/openwin/share/include/GL/glxmd.h, - [OpenGL_headers_ok=yes; OGL_INCLUDES="-I/usr/openwin/share/include/"], - [OpenGL_headers_ok=no]) -fi - -# under IRIX ? -if test "x${OpenGL_headers_ok}" = "xno" ; then - AC_CHECK_HEADERS(/opt/graphics/OpenGL/include/GL/glxmd.h, - [OpenGL_headers_ok=yes; OGL_INCLUDES="-I/opt/graphics/OpenGL/include"], - [OpenGL_headers_ok=no]) -fi - -# some linux OpenGL servers hide the includes in /usr/X11R6/include/GL -if test "x${OpenGL_headers_ok}" = "xno" ; then - AC_CHECK_HEADERS(/usr/X11R6/include/GL/gl.h, - [OpenGL_headers_ok=yes; OGL_INCLUDES="-I/usr/X11R6/include"], - [OpenGL_headers_ok=no]) -fi - -if test "x${OpenGL_headers_ok}" = "xyes" ; then - AC_CHECKING(for OpenGL library) - for idir in $dirs; do - if test -r "${idir}/libGL.so"; then - AC_MSG_RESULT(in ${idir}) - if test "x${idir}" = "x/usr/lib${LIB_LOCATION_SUFFIX}" ; then - GL_LIB_PATH="" - else - GL_LIB_PATH="-L${idir}" - fi - break - fi - # under IRIX ? - if test -r "${idir}/libGL.sl"; then - AC_MSG_RESULT(in ${idir}) - if test "x${idir}" = "x/usr/lib${LIB_LOCATION_SUFFIX}" ; then - GL_LIB_PATH="" - else - GL_LIB_PATH="-L${idir}" - fi - break - fi - done - LDFLAGS_old="${LDFLAGS}" - LDFLAGS="${LDFLAGS} ${GL_LIB_PATH}" - AC_CHECK_LIB([GL], - [glBegin], - [OpenGL_libs_ok=yes], - [OpenGL_libs_ok=no]) - if test "x${OpenGL_libs_ok}" = "xyes" ; then - AC_TRY_LINK([], - [], - [OpenGL_libs_ok=yes ; OGL_LIBS="${OGL_LIBS} ${GL_LIB_PATH} -lGL"], - [OpenGL_libs_ok=no]) - fi - LDFLAGS="$LDFLAGS_old" -fi - -if test "x${OpenGL_libs_ok}" = "xyes" ; then - for idir in $dirs; do - if test -r "${idir}/libGLU.so"; then - AC_MSG_RESULT(in ${idir}) - if test "x${idir}" = "x/usr/lib${LIB_LOCATION_SUFFIX}" ; then - GLU_LIB_PATH="" - else - GLU_LIB_PATH="-L${idir}" - fi - break - fi - # under IRIX ? - if test -r "${idir}/libGLU.sl"; then - AC_MSG_RESULT(in ${idir}) - if test "x${idir}" = "x/usr/lib${LIB_LOCATION_SUFFIX}" ; then - GLU_LIB_PATH="" - else - GLU_LIB_PATH="-L${idir}" - fi - break - fi - done - LDFLAGS_old="${LDFLAGS}" - LDFLAGS="${LDFLAGS} ${OGL_LIBS} ${GLU_LIB_PATH}" - AC_CHECK_LIB([GLU], - [gluBeginSurface], - [OpenGL_libs_ok=yes], - [OpenGL_libs_ok=no]) - if test "x${OpenGL_libs_ok}" = "xyes" ; then - AC_TRY_LINK([], - [], - [OpenGL_libs_ok=yes ; OGL_LIBS="${OGL_LIBS} ${GLU_LIB_PATH} -lGLU"], - [OpenGL_libs_ok=no]) - fi - LDFLAGS="$LDFLAGS_old" -fi - -if test "x${OpenGL_headers_ok}" = "xyes" ; then - if test "x${OpenGL_libs_ok}" = "xyes" ; then - OpenGL_ok=yes - fi -fi - -AC_MSG_RESULT(for OpenGL_headers_ok: $OpenGL_headers_ok) -AC_MSG_RESULT(for OpenGL_libs_ok: $OpenGL_libs_ok) -AC_MSG_RESULT(for OpenGL_ok: $OpenGL_ok) - -AC_SUBST(OGL_INCLUDES) -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 deleted file mode 100644 index 7be124e24..000000000 --- a/adm_local/unix/config_files/check_pyqt.m4 +++ /dev/null @@ -1,308 +0,0 @@ -dnl Copyright (C) 2003 CEA/DEN, EDF R&D - -AC_DEFUN([CHECK_PYQT],[ -AC_REQUIRE([CHECK_PYTHON])dnl -AC_REQUIRE([CHECK_QT])dnl -AC_REQUIRE([CHECK_SIP])dnl -AC_REQUIRE([AC_LINKER_OPTIONS])dnl - -AC_LANG_SAVE -AC_LANG_CPLUSPLUS - -AC_ARG_WITH(pyqt, - [ --with-pyqt=DIR root directory path to PyQt installation ], - [PYQTDIR="$withval" - AC_MSG_RESULT("select $withval as path to PyQt") - ]) - -AC_ARG_WITH(pyqt_sips, - [ --with-pyqt_sips=DIR a directory path to PyQt sips installation ], - [PYQT_SIPS="$withval" - AC_MSG_RESULT("select $withval as path to PyQt sips") - ]) - - -AC_ARG_WITH(pyuic, - [ --with-pyuic=EXEC pyuic executable ], - [PYUIC="$withval" - AC_MSG_RESULT("select $withval as pyqt executable") - ]) - -AC_CHECKING(for pyqt) - -pyqt_ok=yes - -dnl look for pyuic -pyqt_uic_ok=no -if test "x$PYUIC" != x; then - dnl try withval value - AC_CHECK_FILE($PYUIC,pyqt_uic_ok=yes,pyqt_uic_ok=no) -fi -if test "x$pyqt_uic_ok" == "xno"; then - dnl try ${PYQTDIR} - if test "x${PYQTDIR}" != "x"; then - if test -d ${PYQTDIR} ; then - AC_CHECK_FILE(${PYQTDIR}/pyuic,pyqt_uic_ok=yes,pyqt_uic_ok=no) - if test "x$pyqt_uic_ok" == "xyes"; then - PYUIC="${PYQTDIR}/pyuic" - fi - fi - fi -fi -if test "x$pyqt_uic_ok" == "xno"; then - dnl try ${SIPDIR} - if test "x${SIPDIR}" != "x"; then - if test -d ${SIPDIR} ; then - AC_CHECK_FILE(${SIPDIR}/pyuic,pyqt_uic_ok=yes,pyqt_uic_ok=no) - if test "x$pyqt_uic_ok" == "xyes"; then - PYUIC="${SIPDIR}/pyuic" - fi - fi - fi -fi -if test "x$pyqt_uic_ok" == "xno"; then - dnl try ${PYTHONHOME}/bin - if test "x${PYTHONHOME}" != "x"; then - if test -d ${PYTHONHOME}/bin ; then - AC_CHECK_FILE(${PYTHONHOME}/bin/pyuic,pyqt_uic_ok=yes,pyqt_uic_ok=no) - if test "x$pyqt_uic_ok" == "xyes"; then - PYUIC="${PYTHONHOME}/bin/pyuic" - fi - fi - fi -fi -if test "x$pyqt_uic_ok" == "xno"; then - dnl try /usr/bin - AC_CHECK_FILE(/usr/bin/pyuic,pyqt_uic_ok=yes,pyqt_uic_ok=no) - if test "x$pyqt_uic_ok" == "xyes"; then - PYUIC="/usr/bin/pyuic" - fi -fi -if test "x$pyqt_uic_ok" == "xno"; then - pyqt_ok=no -fi - -dnl look for PyQt libs -pyqt_lib_ok=no -if test "x${PYQTDIR}" != "x"; then - dnl try {PYQTDIR} - AC_CHECK_FILE(${PYQTDIR}/libqtcmodule.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) - if test "x$pyqt_lib_ok" == "xyes"; then - if test "x${PYQTDIR}" = "x/usr/lib" - then - PYQT_LIBS="-lqtcmodule" - else - PYQT_LIBS="-L${PYQTDIR} -lqtcmodule" - fi - else - AC_CHECK_FILE(${PYQTDIR}/qt.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) - if test "x$pyqt_lib_ok" == "xyes"; then - if test "x${PYQTDIR}" = "x/usr/lib" - then - PYQT_LIBS="" - else - PYQT_LIBS="-L${PYQTDIR}" - fi - fi - fi - if test "x$pyqt_lib_ok" == "xno"; 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" - else - AC_CHECK_FILE(${PYQTDIR}/lib/qt.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) - if test "x$pyqt_lib_ok" == "xyes"; then - PYQT_LIBS="-L${PYQTDIR}/lib" - fi - fi - 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 - 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" - else - AC_CHECK_FILE(${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/qt.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" - fi - fi - fi - fi -fi -if test "x$pyqt_lib_ok" == "xno"; then - dnl try ${SIPDIR} - if test "x${SIPDIR}" != "x"; then - if test -d ${SIPDIR} ; then - AC_CHECK_FILE(${SIPDIR}/libqtcmodule.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) - if test "x$pyqt_lib_ok" == "xyes"; then - if test "x${SIPDIR}" = "x/usr/lib" - then - PYQT_LIBS="-lqtcmodule" - else - PYQT_LIBS="-L${SIPDIR} -lqtcmodule" - fi - else - AC_CHECK_FILE(${SIPDIR}/qt.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) - if test "x$pyqt_lib_ok" == "xyes"; then - if test "x${SIPDIR}" = "x/usr/lib" - then - PYQT_LIBS="" - else - PYQT_LIBS="-L${SIPDIR}" - fi - fi - fi - fi - fi -fi -if test "x$pyqt_lib_ok" == "xno"; then - dnl try ${PYTHONHOME}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages - if test "x${PYTHONHOME}" != "x"; then - if test -d ${PYTHONHOME}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages ; then - AC_CHECK_FILE(${PYTHONHOME}/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${PYTHONHOME}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages -lqtcmodule" - else - AC_CHECK_FILE(${PYTHONHOME}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/qt.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) - if test "x$pyqt_lib_ok" == "xyes"; then - PYQT_LIBS="-L${PYTHONHOME}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages" - fi - fi - fi - fi -fi -if test "x$pyqt_lib_ok" == "xno"; then - dnl try /usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages - AC_CHECK_FILE(/usr/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/usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages -lqtcmodule" - else - AC_CHECK_FILE(/usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/qt.so,pyqt_lib_ok=yes,pyqt_lib_ok=no) - if test "x$pyqt_lib_ok" == "xyes"; then - PYQT_LIBS="-L/usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages" - fi - fi -fi -if test "x$pyqt_lib_ok" == "xno"; then - pyqt_ok=no -fi - -dnl look for PyQt sips -pyqt_sips_ok=no -dnl try ${PYQT_SIPS} or ${PYQT_SIPS}/qt -if test "x${PYQT_SIPS}" != "x"; then - AC_CHECK_FILE(${PYQT_SIPS}/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xno"; then - AC_CHECK_FILE(${PYQT_SIPS}/qt/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xyes"; then - PYQT_SIPS="${PYQT_SIPS}/qt" - fi - fi -fi -if test "x$pyqt_sips_ok" == "xno"; then - dnl try ${PYQTDIR}/sip - if test "x${PYQTDIR}" != "x"; then - if test -d ${PYQTDIR}/sip ; then - AC_CHECK_FILE(${PYQTDIR}/sip/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xyes"; then - PYQT_SIPS="${PYQTDIR}/sip" - else - AC_CHECK_FILE(${PYQTDIR}/sip/qt/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xyes"; then - PYQT_SIPS="${PYQTDIR}/sip/qt" - fi - fi - fi - fi -fi -if test "x$pyqt_sips_ok" == "xno"; then - dnl try ${SIPDIR}/sip - if test "x${SIPDIR}" != "x"; then - if test -d ${SIPDIR}/sip ; then - AC_CHECK_FILE(${SIPDIR}/sip/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xyes"; then - PYQT_SIPS="${SIPDIR}/sip" - else - AC_CHECK_FILE(${SIPDIR}/sip/qt/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xyes"; then - PYQT_SIPS="${SIPDIR}/sip/qt" - fi - fi - fi - fi -fi -if test "x$pyqt_sips_ok" == "xno"; then - dnl try /usr/share/sip - if test -d /usr/share/sip ; then - AC_CHECK_FILE(/usr/share/sip/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xyes"; then - PYQT_SIPS="/usr/share/sip" - else - AC_CHECK_FILE(/usr/share/sip/qt/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no) - if test "x$pyqt_sips_ok" == "xyes"; then - PYQT_SIPS="/usr/share/sip/qt" - fi - fi - fi -fi -if test "x$pyqt_sips_ok" == "xno"; then - pyqt_ok=no -else - PYQT_INCLUDES="-I$PYQT_SIPS" - - dnl Additional sip flags required for correct wrappers compilation - AC_MSG_CHECKING(which qt classes should be excluded) - - PYQT_SIPFLAGS="" - - CXXFLAGS_old=$CXXFLAGS - CXXFLAGS="$CXXFLAGS $QT_INCLUDES" - LIBS_old=$LIBS - LIBS="$LIBS $QT_LIBS" - - AC_TRY_COMPILE([#include ], - [new QCDEStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_CDE") - AC_TRY_COMPILE([#include ], - [new QInterlaceStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_INTERLACE") - AC_TRY_COMPILE([#include ], - [new QMotifStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_MOTIF") - AC_TRY_COMPILE([#include ], - [new QMotifPlusStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_MOTIFPLUS") - AC_TRY_COMPILE([#include ], - [new QPlatinumStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_PLATINUM") - AC_TRY_COMPILE([#include ], - [new QSGIStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_SGI") - AC_TRY_COMPILE([#include ], - [new QWindowsStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_WINDOWS") - AC_TRY_COMPILE([#include ], - [new QWindowsXPStyle();],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_STYLE_WINDOWSXP") - - LIBS="$LIBS -lqassistantclient" - AC_TRY_LINK([#include ], - [new QAssistantClient("foo");],,PYQT_SIPFLAGS="$PYQT_SIPFLAGS -x Qt_ASSISTANTCLIENT") - - AC_MSG_RESULT(done) - - CXXFLAGS=$CXXFLAGS_old - LIBS=$LIBS_old -fi - -AC_SUBST(PYQT_INCLUDES) -AC_SUBST(PYQT_LIBS) -AC_SUBST(PYQT_SIPS) -AC_SUBST(PYUIC) -AC_SUBST(PYQT_SIPFLAGS) - -AC_LANG_RESTORE - -AC_MSG_RESULT(for pyqt: $pyqt_ok) - -])dnl -dnl - - diff --git a/adm_local/unix/config_files/check_qt.m4 b/adm_local/unix/config_files/check_qt.m4 deleted file mode 100644 index ab5348319..000000000 --- a/adm_local/unix/config_files/check_qt.m4 +++ /dev/null @@ -1,182 +0,0 @@ -dnl Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License. -dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -dnl -dnl See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -dnl -dnl -dnl - -AC_DEFUN([CHECK_QT],[ -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([CHECK_OPENGL])dnl -AC_REQUIRE([AC_LINKER_OPTIONS])dnl - -AC_CHECKING(for Qt) - -if test "x$OpenGL_ok" != "xyes" ; then - AC_MSG_WARN(Qt needs OpenGL correct configuration, check configure output) -fi - -qt_ok=yes - -AC_LANG_SAVE -AC_LANG_CPLUSPLUS - -if test "x$QTDIR" = "x" -then - AC_MSG_RESULT(please define QTDIR variable) - qt_ok=no -else - AC_MSG_RESULT(QTDIR is $QTDIR) - 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'` -fi - -if test "x$qt_ok" = "xyes" -then - if test -f ${QTDIR}/bin/moc - then - MOC=${QTDIR}/bin/moc - else - AC_PATH_PROG(MOC, moc) - fi - if test "x$MOC" = "x" - then - qt_ok=no - AC_MSG_RESULT(moc qt-compiler not in PATH variable) - else - qt_ok=yes - AC_MSG_RESULT(moc found) - fi -fi - -if test "x$qt_ok" = "xyes" -then - if test -f ${QTDIR}/bin/uic - then - UIC=${QTDIR}/bin/uic - else - AC_PATH_PROG(UIC, uic) - fi - if test "x$UIC" = "x" - then - qt_ok=no - AC_MSG_RESULT(uic qt-interface compiler not in PATH variable) - else - qt_ok=yes - AC_MSG_RESULT(uic found) - fi -fi - -AC_SUBST(QTDIR) -QT_ROOT=$QTDIR - -if test "x$qt_ok" = "xyes" -then - CPPFLAGS_old=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$QTDIR/include${QTINC}" - - AC_LANG_CPLUSPLUS - AC_CHECK_HEADER(qaction.h,qt_ok=yes ,qt_ok=no) - - CPPFLAGS=$CPPFLAGS_old - - AC_MSG_CHECKING(include of qt headers) - - if test "x$qt_ok" = "xno" - then - AC_MSG_RESULT(qt headers not found, or too old qt version, in $QTDIR/include) - AC_MSG_RESULT(QTDIR environment variable may be wrong) - else - AC_MSG_RESULT(yes) - QT_INCLUDES="-I${QT_ROOT}/include${QTINC} -DQT_THREAD_SUPPORT -DQT_CLEAN_NAMESPACE" - QT_MT_INCLUDES="-I${QT_ROOT}/include${QTINC} -DQT_THREAD_SUPPORT -DQT_CLEAN_NAMESPACE" - fi -fi - -if test "x$qt_ok" = "xyes" -then - AC_MSG_CHECKING(linking qt library) - LIBS_old=$LIBS - if test "x$QTDIR" = "x/usr" - then - LIBS="$LIBS -lqt-mt $OGL_LIBS" - else - LIBS="$LIBS -L$QTDIR/lib${LIB_LOCATION_SUFFIX} -lqt-mt $OGL_LIBS" - fi - - CXXFLAGS_old=$CXXFLAGS - CXXFLAGS="$CXXFLAGS $QT_INCLUDES" - - AC_CACHE_VAL(salome_cv_lib_qt,[ - AC_TRY_LINK( -#include -, int n; - char **s; - QApplication a(n, s); - a.exec();, - eval "salome_cv_lib_qt=yes",eval "salome_cv_lib_qt=no") - ]) - qt_ok="$salome_cv_lib_qt" - - if test "x$qt_ok" = "xno" - then - AC_MSG_RESULT(unable to link with qt library) - AC_MSG_RESULT(QTDIR environment variable may be wrong) - else - AC_MSG_RESULT(yes) - if test "x$QTDIR" = "x/usr" - then - QT_LIBS=" -lqt-mt" - QT_MT_LIBS=" -lqt-mt" - else - QT_LIBS="-L$QTDIR/lib${LIB_LOCATION_SUFFIX} -lqt-mt" - QT_MT_LIBS="-L$QTDIR/lib${LIB_LOCATION_SUFFIX} -lqt-mt" - fi - fi - - LIBS=$LIBS_old - CXXFLAGS=$CXXFLAGS_old - -fi - -AC_SUBST(MOC) -AC_SUBST(UIC) - -AC_SUBST(QT_ROOT) -AC_SUBST(QT_INCLUDES) -AC_SUBST(QT_MT_INCLUDES) -AC_SUBST(QT_LIBS) -AC_SUBST(QT_MT_LIBS) -AC_SUBST(QT_VERS) - -AC_LANG_RESTORE - -AC_MSG_RESULT(for Qt: $qt_ok) - -# Save cache -AC_CACHE_SAVE - -])dnl -dnl diff --git a/adm_local/unix/config_files/check_qwt.m4 b/adm_local/unix/config_files/check_qwt.m4 deleted file mode 100644 index d9bc23fbf..000000000 --- a/adm_local/unix/config_files/check_qwt.m4 +++ /dev/null @@ -1,152 +0,0 @@ -dnl Copyright (C) 2003 CEA/DEN, EDF R&D - -AC_DEFUN([CHECK_QWT],[ -AC_REQUIRE([CHECK_QT])dnl -AC_REQUIRE([AC_LINKER_OPTIONS])dnl - -AC_CHECKING(for qwt) - -qwt_ok=yes - -dnl were is qwt ? - -AC_ARG_WITH(qwt, - [ --with-qwt=DIR directory path to QWT installation ], - [QWTHOME="$withval" - AC_MSG_RESULT("select $withval as path to QWT") - ]) - -AC_ARG_WITH(qwt_inc, - [ --with-qwt_inc=DIR directory path to QWT includes ], - [QWT_INCLUDES="$withval" - AC_MSG_RESULT("select $withval as path to QWT includes") - ]) - -if test -z $QWTHOME; then - AC_MSG_RESULT(QWTHOME not defined) - exits_ok=no - if test "x$exits_ok" = "xno"; then - for d in /usr/local /usr ; do - AC_CHECK_FILE(${d}/lib${LIB_LOCATION_SUFFIX}/libqwt.so,exits_ok=yes,exits_ok=no) - if test "x$exits_ok" = "xyes"; then - QWTHOME=$d - AC_MSG_RESULT(libqwt.so detected in $d/lib) - fi - done - fi - if test "x$exits_ok" = "xno"; then - for d in `echo $LD_LIBRARY_PATH | sed -e "s/:/ /g"` ; do - if test -f $d/libqwt.so ; then - AC_MSG_RESULT(libqwt.so detected in $d) - QWTHOME=$d - QWTHOME=`echo ${QWTHOME} | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` - exits_ok=yes - break - fi - done - fi - if test "x$exits_ok" = "xyes"; then - if test -z $QWT_INCLUDES; then - QWT_INCLUDES=$QWTHOME"/include/qwt" - if test ! -f $QWT_INCLUDES/qwt.h ; then - QWT_INCLUDES=$QWTHOME"/include" - fi - if test ! -f $QWT_INCLUDES/qwt.h ; then - QWT_INCLUDES=/usr/lib/qt3/include/qwt - fi - fi - fi -else - if test -z $QWT_INCLUDES; then - QWT_INCLUDES="$QWTHOME/include" - fi -fi - -if test "x$qwt_ok" = xno -o ! -d "$QWTHOME" ; then - AC_MSG_RESULT(no) - AC_MSG_WARN(qwt not found) - qwt_ok=no -else - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - CPPFLAGS_old=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$QWT_INCLUDES" - CPPFLAGS="$CPPFLAGS $QT_INCLUDES" - - AC_CHECK_HEADER(qwt.h,qwt_ok=yes,qwt_ok=no) - - CPPFLAGS=$CPPFLAGS_old - - if test "x$qwt_ok" = xno ; then - AC_MSG_RESULT(no) - AC_MSG_WARN(qwt not found) - else - qwt_ok=yes - fi - -if test "x$qwt_ok" = "xyes" -then - AC_MSG_CHECKING(linking qwt library) - LIBS_old=$LIBS - if test "x$QTDIR" = "x/usr" - then - LIBS="$LIBS -lqt-mt" - else - LIBS="$LIBS -L$QTDIR/lib${LIB_LOCATION_SUFFIX} -lqt-mt" - fi - if test "x$QWTHOME" = "x/usr" - then - LIBS="$LIBS -lqwt" - else - LIBS="$LIBS -L$QWTHOME/lib -lqwt" - fi - - CXXFLAGS_old=$CXXFLAGS - CXXFLAGS="$CXXFLAGS $QT_INCLUDES -I$QWT_INCLUDES" - - AC_CACHE_VAL(salome_cv_lib_qwt,[ - AC_TRY_LINK( -#include -#include -, int n; - char **s; - QApplication a(n, s); - QwtPlot* p; - a.setMainWidget(p); - a.exec();, - eval "salome_cv_lib_qwt=yes",eval "salome_cv_lib_qwt=no") - ]) - qwt_ok="$salome_cv_lib_qwt" - - if test "x$qwt_ok" = "xno" - then - AC_MSG_RESULT(unable to link with qwt library) - AC_MSG_RESULT(QWTHOME environment variable may be wrong) - else - QWT_INCLUDES="-I$QWT_INCLUDES" - if test "x$QWTHOME" = "x/usr" - then - QWT_LIBS=" -lqwt" - else - QWT_LIBS="-L$QWTHOME/lib -lqwt" - fi - - AC_SUBST(QWT_INCLUDES) - AC_SUBST(QWT_LIBS) - - AC_MSG_RESULT(yes) - fi - - LIBS=$LIBS_old - CXXFLAGS=$CXXFLAGS_old - -fi - - - AC_LANG_RESTORE - -fi - - -])dnl -dnl diff --git a/adm_local/unix/config_files/check_sip.m4 b/adm_local/unix/config_files/check_sip.m4 deleted file mode 100644 index 83af9a907..000000000 --- a/adm_local/unix/config_files/check_sip.m4 +++ /dev/null @@ -1,169 +0,0 @@ -dnl Copyright (C) 2003 CEA/DEN, EDF R&D - -AC_DEFUN([CHECK_SIP],[ -AC_REQUIRE([CHECK_PYTHON])dnl -AC_REQUIRE([CHECK_QT])dnl -AC_REQUIRE([AC_LINKER_OPTIONS])dnl - -sip_ok=yes - -AC_ARG_WITH(sip, - [ --with-sip=EXEC sip executable ], - [SIP="$withval" - AC_MSG_RESULT("select $withval as sip executable") - ], [ - AC_PATH_PROG(SIP, sip) - ]) - -if test "x$SIP" = "x" ; then - sip_ok=no - AC_MSG_RESULT(sip not in PATH variable) -else - version=`$SIP -V` - AC_MSG_RESULT(sip version is $version) - case "$version" in - 3.2*) - SIP_VERS=v3_old ;; - 3.3*) - SIP_VERS=v3_old ;; - 3.4*) - SIP_VERS=v3_old ;; - 3.5*) - SIP_VERS=v3_old ;; - 3.6*) - SIP_VERS=v3_old ;; - 3.7*) - SIP_VERS=v3_old ;; - 3.8*) - SIP_VERS=v3_old ;; - 3.9*) - SIP_VERS=v3_old ;; - 3.10*) - SIP_VERS=v3_new ;; - 4.1*) - SIP_VERS=v4_old ;; - 4.2*) - SIP_VERS=v4_new ;; - *) - AC_MSG_RESULT(sip version $version not supported) - SIP_VERS=unsupported ;; - esac - - sip_ok=no - dnl Search sip.h file - if test "x$SIPDIR" != "x" ; then - dnl look for sip.h in ${SIPDIR} - AC_CHECK_FILE(${SIPDIR}/sip.h,sip_ok=yes,sip_ok=no) - if test "x$sip_ok" == "xyes" ; then - SIP_INCLUDES="-I${SIPDIR}" - fi - if test "x$sip_ok" == "xno" ; then - dnl look for sip.h in ${SIPDIR}/include/python${PYTHON_VERSION} - if test -d ${SIPDIR}/include/python${PYTHON_VERSION} ; then - AC_CHECK_FILE(${SIPDIR}/include/python${PYTHON_VERSION}/sip.h,sip_ok=yes,sip_ok=no) - if test "x$sip_ok" == "xyes" ; then - SIP_INCLUDES="-I${SIPDIR}/include/python${PYTHON_VERSION}" - fi - fi - fi - fi - if test "x$sip_ok" == "xno" ; then - dnl look for sip.h in ${PYTHON_PREFIX}/include/python${PYTHON_VERSION} - if test -d ${PYTHON_PREFIX}/include/python${PYTHON_VERSION} ; then - AC_CHECK_FILE(${PYTHON_PREFIX}/include/python${PYTHON_VERSION}/sip.h,sip_ok=yes,sip_ok=no) - if test "x$sip_ok" == "xyes" ; then - SIP_INCLUDES="${PYTHON_INCLUDES}" - fi - fi - fi - if test "x$sip_ok" == "xno" ; then - dnl look for sip.h in /usr/include/python${PYTHON_VERSION} - if test -d /usr/include/python${PYTHON_VERSION} ; then - AC_CHECK_FILE(/usr/include/python${PYTHON_VERSION}/sip.h,sip_ok=yes,sip_ok=no) - if test "x$sip_ok" == "xyes" ; then - SIP_INCLUDES="/usr/include/python${PYTHON_VERSION}" - fi - fi - fi - - dnl Search (lib)sip.so file - sip_lib_ok=no - if test "x$SIPDIR" != "x" ; then - dnl look for (lib)sip.so in ${SIPDIR} - AC_CHECK_FILE(${SIPDIR}/libsip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - if test "x${SIPDIR}" = "x/usr/lib" - then - SIP_LIBS="-lsip" - else - SIP_LIBS="-L${SIPDIR} -lsip" - fi - else - AC_CHECK_FILE(${SIPDIR}/sip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - if test "x${SIPDIR}" = "x/usr/lib" - then - SIP_LIBS="" - else - SIP_LIBS="-L${SIPDIR}" - fi - fi - fi - - if test "x$sip_lib_ok" == "xno" ; then - dnl look for (lib)sip.so in ${SIPDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages - if test -d ${SIPDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages ; then - AC_CHECK_FILE(${SIPDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/libsip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - SIP_LIBS="-L${SIPDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages -lsip" - else - AC_CHECK_FILE(${SIPDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/sip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - SIP_LIBS="-L${SIPDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages" - fi - fi - fi - fi - fi - if test "x$sip_lib_ok" == "xno" ; then - dnl look for (lib)sip.so in ${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages - if test -d ${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages ; then - AC_CHECK_FILE(${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/libsip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - SIP_LIBS="-L${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages -lsip" - else - AC_CHECK_FILE(${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/sip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - SIP_LIBS="-L${PYTHON_PREFIX}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages" - fi - fi - fi - fi - if test "x$sip_lib_ok" == "xno" ; then - dnl look for (lib)sip.so in /usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages - if test -d /usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages ; then - AC_CHECK_FILE(/usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/libsip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - SIP_LIBS="-L$/usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages -lsip" - else - AC_CHECK_FILE(/usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/sip.so,sip_lib_ok=yes,sip_lib_ok=no) - if test "x$sip_lib_ok" == "xyes" ; then - SIP_LIBS="-L/usr/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages" - fi - fi - fi - fi - if test "x$sip_lib_ok" == "xno" ; then - sip_ok=no - fi -fi - -AC_SUBST(SIP) -AC_SUBST(SIP_INCLUDES) -AC_SUBST(SIP_LIBS) -AC_SUBST(SIP_VERS) - -AC_MSG_RESULT(for sip: $sip_ok) - -])dnl -dnl diff --git a/adm_local/unix/config_files/check_vtk.m4 b/adm_local/unix/config_files/check_vtk.m4 deleted file mode 100644 index a0733ebc3..000000000 --- a/adm_local/unix/config_files/check_vtk.m4 +++ /dev/null @@ -1,145 +0,0 @@ -dnl Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License. -dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -dnl -dnl See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org -dnl -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_CHECKING(for VTK) - -AC_LANG_SAVE -AC_LANG_CPLUSPLUS - -AC_SUBST(VTK_INCLUDES) -AC_SUBST(VTK_LIBS) -AC_SUBST(VTKPY_MODULES) - -VTK_INCLUDES="" -VTK_LIBS="" -VTKPY_MODULES="" - -vtk_ok=no - -if test "x$OpenGL_ok" != "xyes" ; then - AC_MSG_WARN(VTK needs OpenGL correct configuration, check configure output) -fi - -AC_PATH_X -if test "x$x_libraries" != "x" -then - LXLIB="-L$x_libraries" -else - LXLIB="" -fi - -if test "x$x_libraries" = "x/usr/lib" -then - LXLIB="" -fi - -if test "x$x_libraries" = "x/usr/lib" -then - LXLIB="" -fi - -if test "x$x_libraries" = "x/usr/lib" -then - LXLIB="" -fi - -LOCAL_INCLUDES="$OGL_INCLUDES" -LOCAL_LIBS="-lvtkCommon -lvtkGraphics -lvtkImaging -lvtkFiltering -lvtkIO -lvtkRendering -lvtkHybrid $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 -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" -fi - -dnl vtk headers -CPPFLAGS_old="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $LOCAL_INCLUDES" - -AC_CHECK_HEADER(vtkPlane.h,vtk_ok="yes",vtk_ok="no") - - CPPFLAGS="$CPPFLAGS_old" - - if test "x$vtk_ok" = "xyes" - then - VTK_INCLUDES="$LOCAL_INCLUDES" - - dnl vtk libraries - - AC_MSG_CHECKING(linking VTK library) - - LIBS_old="$LIBS" -# LIBS="$LIBS $TRY_LINK_LIBS" - LIBS="$LIBS $LOCAL_LIBS" - CPPFLAGS_old="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $VTK_INCLUDES" - - dnl VTKPY_MODULES="$VTKHOME/python" - - AC_CACHE_VAL(salome_cv_lib_vtk,[ - AC_TRY_LINK([#include "vtkPlane.h"], - [vtkPlane::New()], - [salome_cv_lib_vtk=yes], - [salome_cv_lib_vtk=no]) - ]) - vtk_ok="$salome_cv_lib_vtk" - LIBS="$LIBS_old" - CPPFLAGS="$CPPFLAGS_old" - -fi - -if test "x$vtk_ok" = "xno" -then - AC_MSG_RESULT(no) - AC_MSG_WARN(unable to link with vtk library) -else - AC_MSG_RESULT(yes) - VTK_LIBS="$LOCAL_LIBS" - VTK_MT_LIBS="$LOCAL_LIBS" -fi - -AC_MSG_RESULT(for VTK: $vtk_ok) - -AC_LANG_RESTORE - -# Save cache -AC_CACHE_SAVE - -])dnl \ No newline at end of file diff --git a/adm_local/unix/make_commence.in b/adm_local/unix/make_commence.in deleted file mode 100644 index b3af3f710..000000000 --- a/adm_local/unix/make_commence.in +++ /dev/null @@ -1,277 +0,0 @@ -# common directories to put headerfiles -inc_builddir=$(top_builddir)/include/salome - -MODULE_NAME=@MODULE_NAME@ - -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_conclude.in b/adm_local/unix/make_conclude.in deleted file mode 100644 index da7a678e1..000000000 --- a/adm_local/unix/make_conclude.in +++ /dev/null @@ -1,426 +0,0 @@ -#======================================================================= -# This section of this makefile comes from the file -# 'adm/unix/make_conclude' which was generated with config.status -# from file adm/unix/make_conclude.in -#======================================================================= -# -* Makefile *- -# -# Authors : Patrick GOLDBRONN (CEA) - Marc Tajchman (CEA) -# Date : 6/07/2001 -# $Header$ -# - -ifneq ($(GUI_DISABLE_CORBA),yes) -# ORB Specifics rules - -@CORBA@ - -# transform idl reference in appropriate obj file -LIB_CLIENT_SRC = $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_CXX)) -LIB_SERVER_SRC = $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_CXX)) -LIB_SWIG_SRC = $(SWIG_DEF:%.i=%_wrap.cxx) -else -LIB_CLIENT_SRC = -LIB_SERVER_SRC = -LIB_SWIG_SRC = -endif - -LIB_MOC_SRC = $(LIB_MOC:%.h=%_moc.cxx) -LIB_SRC+=$(LIB_MOC_SRC) -LIB_DEP= $(LIB_SRC) $(LIB_CLIENT_SRC) $(LIB_SERVER_SRC) $(LIB_SWIG_SRC) - -ifneq ($(GUI_DISABLE_CORBA),yes) -LIB_CLIENT_OBJ = $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_OBJ)) -LIB_SERVER_OBJ = $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_OBJ)) -LIB_SWIG_OBJ = $(LIB_SWIG_SRC:%.cxx=%.lo) -else -LIB_CLIENT_OBJ = -LIB_SERVER_OBJ = -LIB_SWIG_OBJ = -endif - -# transform c file in appropriate libtool obj file (.c, .cc and .cxx) -LIB_OBJ_C = $(patsubst %.c, %.lo, $(filter %.c, $(LIB_SRC))) -LIB_OBJ_CC = $(patsubst %.cc, %.lo, $(filter %.cc, $(LIB_SRC))) -LIB_OBJ_CXX = $(patsubst %.cxx, %.lo, $(filter %.cxx, $(LIB_SRC))) -LIB_OBJ_F = $(patsubst %.f, %.lo, $(filter %.f, $(LIB_SRC))) - -# all libtool obj file in library -LIB_OBJ = $(LIB_OBJ_CXX) $(LIB_OBJ_CC) $(LIB_OBJ_C) $(LIB_CLIENT_OBJ:%.o=%.lo) $(LIB_SERVER_OBJ:%.o=%.lo) $(LIB_SWIG_OBJ) $(LIB_OBJ_F) - -# LIB_BUILD = $(LIB:%.la=$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.la) -LIB_BUILD = $(patsubst %.la, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.la, $(filter %.la, $(LIB))) -LIB_BUILD_A = $(patsubst %.a, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.a, $(filter %.a, $(LIB))) -LIB_BUILD_SO = $(patsubst %.so, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.so, $(filter %.so, $(LIB))) - -ifneq ($(findstring cmodule.la,$(filter %.la, $(LIB))),) -ifneq ($(GUI_DISABLE_CORBA),yes) -LIB_SWIG = $(patsubst %cmodule.la,%.so, $(filter %.la, $(LIB))) -else -LIB_SWIG = -endif -else -LIB_SWIG = -endif - -lib: $(LIB_BUILD) $(LIB_BUILD_SO) $(LIB_CLIENT_PY) -# we don't build static library ! - -$(LIB_BUILD): $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.la: %.la - -$(RM) $@ - -$(RM) $(patsubst %.la, %.so, $@) - -$(RM) $(patsubst %.la, %.a, $@) - ln -sf $(CURDIR)/$< $@ || true - ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<) \ - $(patsubst %.la, %.so, $@) || true - ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<).0 \ - $(patsubst %.la, %.so, $@).0 || true - - if ! test -z $(LIB_SWIG) ; then \ - ln -sf $(patsubst %.la,%.so, $(CURDIR)/.libs/$<) $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/_$(LIB_SWIG) || true;\ - fi; - -$(LIB_BUILD_A): $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.a: %.a - -$(RM) $@ - ln -sf $(CURDIR)/$< $@ || true - -$(LIB_BUILD_SO): $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/%.so: %.so - -$(RM) $@ - ln -sf $(CURDIR)/$< $@ || true - -$(LIB): $(LIB_OBJ) - @$(LT) --mode=link $(CXX) -shared -rpath $(libdir) -o $@ $(CXXFLAGS) $(LIB_OBJ) $(LDFLAGS) $(LIBS) - -# transform idl reference in appropriate obj file -ifneq ($(GUI_DISABLE_CORBA),yes) -BIN_CLIENT_SRC = $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_CXX)) -BIN_SERVER_SRC = $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_CXX)) -else -BIN_CLIENT_SRC = -BIN_SERVER_SRC = -endif -BIN_MOC_SRC = $(BIN_MOC:%.h=%_moc.cxx) -BIN_SRC+=$(BIN_MOC_SRC) -BIN_DEP=$(BIN:%=%.cxx) $(BIN_SRC) $(BIN_CLIENT_SRC) $(BIN_SERVER_SRC) - -ifneq ($(GUI_DISABLE_CORBA),yes) -BIN_CLIENT_OBJ = $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_OBJ)) -BIN_SERVER_OBJ = $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_OBJ)) -else -BIN_CLIENT_OBJ = -BIN_SERVER_OBJ = -endif -# transform c file in appropriate libtool obj file (.c) -BIN_OBJ_C = $(patsubst %.c, %.o, $(filter %.c, $(BIN_SRC))) -# transform c++ file in appropriate libtool obj file (.cc and .cxx) -BIN_OBJ_CC = $(patsubst %.cc, %.o, $(filter %.cc, $(BIN_SRC))) -BIN_OBJ_CXX = $(patsubst %.cxx, %.o, $(filter %.cxx, $(BIN_SRC))) -# all obj file in bin target -BIN_OBJ = $(BIN_OBJ_CC) $(BIN_OBJ_CXX) $(BIN_OBJ_C) $(BIN_CLIENT_OBJ) $(BIN_SERVER_OBJ) - -bin: $(BIN:%=$(top_builddir)/bin/salome/%) $(BIN) $(LIB) pyscripts sharedpyscripts - -BIN_LIB=$(LIB:lib%.la=-l%) - -$(BIN:%=$(top_builddir)/bin/salome/%) $(TEST_PROGS:%=$(top_builddir)/bin/salome/%): $(top_builddir)/bin/salome/%: % - -$(RM) $@ - ln -sf $(CURDIR)/$< $@ - -$(BIN) $(TEST_PROGS): %: %.lo $(BIN_OBJ) - $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(BIN_LIB) $(LDFLAGSFORBIN) $(LIBSFORBIN) - -# copy python scripts in $(top_builddir)/bin/salome -# - -UI_FILES = $(notdir $(wildcard $(srcdir)/*.ui)) -UI_PY_FILES_PY = $(patsubst %.ui, %.py, $(UI_FILES)) -UI_PY_FILES = $(filter-out $(EXPORT_PYSCRIPTS) ,$(UI_PY_FILES_PY)) - -DEST_PYSCRIPTS = $(EXPORT_PYSCRIPTS:%=$(top_builddir)/bin/salome/%) -DEST_UI_PY_FILES = $(UI_PY_FILES:%=$(top_builddir)/bin/salome/%) -pyscripts: $(DEST_PYSCRIPTS) $(UI_PY_FILES) $(DEST_UI_PY_FILES) -$(DEST_PYSCRIPTS): $(top_builddir)/bin/salome/%: % - cp -f $< $@ - -# generate generic python scripts from *.ui files -# -$(UI_PY_FILES): %.py: %.ui - $(PYUIC) $< -o $@ - -# copy ui-generated python scripts in $(top_builddir)/bin -# -$(DEST_UI_PY_FILES): $(top_builddir)/bin/salome/%: % - cp -f $< $@ - -# copy pyqt files in $(PYTHON_SHARED_SITE) -# -PYTHON_SHARED_SITE=$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome/shared_modules - -$(PYTHON_SHARED_SITE): - $(INSTALL) -d $@ - -DEST_SHAREDPYSCRIPTS = $(EXPORT_SHAREDPYSCRIPTS:%=$(PYTHON_SHARED_SITE)/%) -sharedpyscripts: $(PYTHON_SHARED_SITE) $(DEST_SHAREDPYSCRIPTS) -$(DEST_SHAREDPYSCRIPTS): $(PYTHON_SHARED_SITE)/%: % - cp -f $< $@ - -check: test - -tests: unittest - -test: $(LIB) $(TEST_PROGS:%=$(top_builddir)/bin/salome/%) - -unittest: - @if test "x$(UNIT_TEST_PROG)" != "x"; then \ - $(top_builddir)/bin/salome/$(UNIT_TEST_PROG); \ - fi; - -# copy header file in $(inc_builddir) -# -DEST_HEADERS = $(EXPORT_HEADERS:%=$(inc_builddir)/%) -inc: $(DEST_HEADERS) -$(DEST_HEADERS): $(inc_builddir)/%: % - cp -f $< $@ - -# build resources file (icons and messages) : .qm file from .po file -RESOURCES_FILES_ALL := $(notdir $(wildcard $(srcdir)/resources/*)) -RESOURCES_FILES_ALL := $(filter-out CVS, $(RESOURCES_FILES_ALL)) -RESOURCES_FILES_ALL := $(filter-out %.po, $(RESOURCES_FILES_ALL)) -RESOURCES_FILES_ALL := $(filter-out %.in, $(RESOURCES_FILES_ALL)) -RESOURCES_FILES ?= $(RESOURCES_FILES_ALL) - -resources: resources-po resources-cp - -resources-po: $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm) - -resources-cp: $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%) - -$(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. -$(libdir) $(includedir) $(bindir) $(datadir) $(idldir) $(sharedpydir): - $(INSTALL) -d $@ && chmod 755 $@ - -# Install the library, the public header files, and programs. -install: $(LIB) $(BIN) $(TEST_PROGS) $(libdir) $(includedir) $(bindir) $(datadir) $(idldir) install-python install-sharedpyqt install-qm install-res - @for f in X $(LIB); do \ - if test $$f != X; then \ - ($(LT_INSTALL_LIB) $$f $(libdir)/. || exit 1); \ - fi; \ - done - @if ! test -z $(LIB_SWIG) ; then \ - (cd $(libdir); ln -sf $(patsubst %.so, %cmodule.so, $(LIB_SWIG)) _$(LIB_SWIG) || true); \ - fi; - @for f in X $(BIN); do \ - if test $$f != X; then \ - ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1); \ - fi; \ - done -# Install tests programmes in bindir - @for f in X $(TEST_PROGS); do \ - if test $$f != X; then \ - ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1); \ - fi; \ - done -# Install exported includes in includedir - @for f in X $(EXPORT_HEADERS:%=$(srcdir)/%); do \ - if test $$f != X; then \ - (cp -p -f $$f $(includedir) || exit 1); \ - fi; \ - done - -# Install python script in $(bindir) -install-python: $(bindir) $(EXPORT_PYSCRIPTS:%=install-%) $(UI_PY_FILES:%=install-%) - -$(UI_PY_FILES:%=install-%): install-%: % - $(INSTALL_PROGRAM) $< $(bindir)/. - -$(EXPORT_PYSCRIPTS:%=install-%): install-%: % - $(INSTALL_PROGRAM) $< $(bindir)/. - -#install-python: $(bindir) $(EXPORT_PYSCRIPTS) -# @for f in X $(EXPORT_PYSCRIPTS); do \ -# if test $$f != X; then \ -# ($(INSTALL_PROGRAM) $$f $(bindir)/. || exit 1); \ -# fi; \ -# done - -# Install pyqt script in $(install-sharedpyqt) -install-sharedpyqt: $(sharedpydir) $(EXPORT_SHAREDPYSCRIPTS:%=install-%) - -$(EXPORT_SHAREDPYSCRIPTS:%=install-%): install-%: % - $(INSTALL_PROGRAM) $< $(sharedpydir)/. - - -# generic rule to install .qm files : -install-qm: resources - $(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/$(MODULE_NAME)/. || exit 1); \ - fi; \ - done - -# generic rule to install resources files (png, ini ...): -install-res: resources - $(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/$(MODULE_NAME)/. || exit 1); \ - fi; \ - done - -# Removes those things that `make install' (would have) installed. -uninstall: - @if test "X$(LIB)" != X; then \ - for f in $(LIB); do \ - $(LT_UNINSTALL) $(libdir)/$$f; \ - done; \ - fi - @if test "X$(BIN)" != X; then \ - for f in $(BIN); do \ - $(LT_UNINSTALL) $(bindir)/$$f; \ - done; \ - fi - @for f in X $(TEST_PROGS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(bindir)/$$f; \ - fi; \ - done -# Uninstall exported includes in includedir - @for f in X $(EXPORT_HEADERS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(includedir)/$$f; \ - fi; \ - done -# Uninstall python script in $(bindir) - @for f in X $(EXPORT_PYSCRIPTS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(bindir)/$$f ; \ - fi; \ - done - -# Uninstall python script in $(bindir) - @for f in X $(UI_PY_FILES); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(bindir)/$$f ; \ - fi; \ - done - -# Uninstall pyqt script in $(sharedpydir) - @for f in X $(EXPORT_SHAREDPYSCRIPTS); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(sharedpydir)/$$f ; \ - fi; \ - done - -# Uninstall qm files - @for f in X $(PO_FILES:%.po=%.qm); do \ - if test $$f != X; then \ - $(LT_UNINSTALL) $(datadir)/resources/$(MODULE_NAME)/$$f ; \ - fi; \ - done - -# remove all dependencies files -# -cleandep: - -$(RM) .dep* - -# Removes temporary files without removing the final target files. That is, -# remove things like object files but not libraries or executables. -# -mostlyclean: cleandep - -$(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o) - -$(RM) $(BIN_OBJ) $(BIN:%=%.o) - -$(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o) - -$(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN) - -# Like `mostlyclean' except it also removes the final targets: things like -# libraries and executables. This target doesn't remove any file that -# is part of the SALOME distribution. -# -clean: mostlyclean - -$(RM) $(LIB) $(TEST_PROGS) $(BIN) $(CLEAN) - -$(RM) TAGS *~ *# core *.core - -$(RM) -r .libs - -$(RM) $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/$(LIB) - -$(RM) $(patsubst %,$(top_builddir)/bin/salome/%, $(BIN)) - -$(RM) $(patsubst %.la, %.so, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/$(LIB)) - -$(RM) $(patsubst %.la, %.a, $(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome/$(LIB)) -# remove idl generated files (sources) - -$(RM) $(LIB_CLIENT_SRC) $(LIB_SERVER_SRC) $(BIN_CLIENT_SRC) $(BIN_SERVER_SRC) -# remove idl generated files (headers) - -$(RM) $(LIB_CLIENT_IDL:%.idl=%$(IDL_CLN_H)) $(LIB_SERVER_IDL:%.idl=%$(IDL_SRV_H)) - -$(RM) $(BIN_CLIENT_IDL:%.idl=%$(IDL_CLN_H)) $(BIN_SERVER_IDL:%.idl=%$(IDL_SRV_H)) - -$(RM) $(LIB_MOC_SRC) $(BIN_MOC_SRC) - -$(RM) $(LIB_SWIG_SRC) - -# Like `clean' except it also removes files that were created by running -# configure. If you've unpacked the source and built without creating -# any other files, then `make distclean' will leave only the files that were -# in the distribution. -# -distclean: clean - #remove qm file ! - -$(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* - @if test -f $(srcdir)/Makefile.in; then \ - (@SETX@; $(RM) Makefile); \ - fi - - -#implicits rules -.cc.o: - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.cc.lo: - $(LT) --mode=compile $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.cxx.o: - $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.cxx.lo: - $(LT) --mode=compile $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< - -.c.o: - $(CC) $(CFLAGS) $(CPPFLAGS) -c $< - -.c.lo: - $(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c $< - -.f.o: - $(FC) $(FFLAGS) -c $< -o $@ - -.f.lo: - $(LT) --mode=compile $(FC) $(FFLAGS) -c $< - -.ui.h: - $(UIC) -o $@ $< - -.ui.cxx: - $(UIC) -o $@ -i $*.h $< - -#pattern rules -%_moc.cxx : %.h - $(MOC) $< -o $@ - -%_wrap.cxx : %.i - $(SWIG) $(SWIG_FLAGS) -o $@ $< - -$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm: %.po - $(MSG2QM) $< $@ ; \ - -#------------------------------------------------------------------------------ -# The following section of this makefile contains dependencies between the -# source files and the header files. If GNU make and GCC are being used then -# the dependencies are in the form of rules that cause the information to -# be kept updated automatically. Otherwise the dependencies are listed -# explicitly and come from the `.distdep' files in the various directories. -# These files are part of the distribution and are generated automatically on -# GNU/GCC systems. -#------------------------------------------------------------------------------ - -@DEPEND@ 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/VERSION.in b/bin/VERSION.in deleted file mode 100755 index 1582d527a..000000000 --- a/bin/VERSION.in +++ /dev/null @@ -1 +0,0 @@ -THIS IS SALOME - SALOMEGUI VERSION: @VERSION@ diff --git a/bin/runLightSalome.csh b/bin/runLightSalome.csh deleted file mode 100755 index 3a751e993..000000000 --- a/bin/runLightSalome.csh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/csh -f - -# this variable necessary for loading .ini or .xml file -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 deleted file mode 100755 index df19ca7ba..000000000 --- a/bin/runLightSalome.sh +++ /dev/null @@ -1,29 +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 -# -#!/bin/bash -f - -# this variable necessary for loading .ini or .xml file -if [ -z "$LightAppConfig" ] ; then - export LightAppConfig=${GUI_ROOT_DIR}/share/salome/resources/gui -fi -if [ -z "$LightAppResources" ] ; then - export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources/gui -fi - -SUITApp LightApp -style salome $* & diff --git a/build_configure b/build_configure deleted file mode 100755 index b36fde32a..000000000 --- a/build_configure +++ /dev/null @@ -1,215 +0,0 @@ -#!/bin/bash - -# -# Tool for updating list of .in file for the SALOME project -# and regenerating configure script -# -# Author : Marc Tajchman - CEA -# Date : 10/10/2002 -# $Header$ -# - -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 diff --git a/configure.in.base b/configure.in.base deleted file mode 100644 index b9e3aa93a..000000000 --- a/configure.in.base +++ /dev/null @@ -1,595 +0,0 @@ -# -# 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) -# -# Created from configure.in.base -# - - -AC_INIT(src) -AC_CONFIG_AUX_DIR(${KERNEL_ROOT_DIR}/salome_adm/unix/config_files) -AC_CANONICAL_HOST - -PACKAGE=salome -AC_SUBST(PACKAGE) - -VERSION=3.2.2 -XVERSION=0x030202 -AC_SUBST(VERSION) -AC_SUBST(XVERSION) - -# set up MODULE_NAME variable for dynamic construction of directories (resources, etc.) -MODULE_NAME=gui -AC_SUBST(MODULE_NAME) - -######################################################################## -# 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" - -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 -dnl - -ROOT_BUILDDIR=`pwd` -ROOT_SRCDIR=`echo $0 | sed -e "s,[[^/]]*$,,;s,/$,,;s,^$,.,"` -cd $ROOT_SRCDIR -ROOT_SRCDIR=`pwd` -cd $ROOT_BUILDDIR - -AC_SUBST(ROOT_SRCDIR) -AC_SUBST(ROOT_BUILDDIR) - -echo -echo Source root directory : $ROOT_SRCDIR -echo Build root directory : $ROOT_BUILDDIR -echo -echo - -if test -z "$AR"; then - AC_CHECK_PROGS(AR,ar xar,:,$PATH) -fi -AC_SUBST(AR) - -dnl Export the AR macro so that it will be placed in the libtool file -dnl correctly. -export AR - -echo -echo --------------------------------------------- -echo testing make -echo --------------------------------------------- -echo - -AC_PROG_MAKE_SET -AC_PROG_INSTALL -dnl -dnl libtool macro check for CC, LD, NM, LN_S, RANLIB, STRIP + pour les librairies dynamiques ! - -AC_ENABLE_DEBUG(yes) -AC_DISABLE_PRODUCTION - -echo --------------------------------------------- -echo testing libtool -echo --------------------------------------------- - -dnl first, we set static to no! -dnl if we want it, use --enable-static -AC_ENABLE_STATIC(no) - -AC_LIBTOOL_DLOPEN -AC_PROG_LIBTOOL - -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 - ;; -esac - -echo -echo --------------------------------------------- -echo testing C/C++ -echo --------------------------------------------- -echo - -cc_ok=no -dnl inutil car libtool -dnl AC_PROG_CC -AC_PROG_CXX -AC_CXX_WARNINGS -AC_CXX_TEMPLATE_OPTIONS -AC_DEPEND_FLAG -# AC_CC_WARNINGS([ansi]) -cc_ok=yes - -dnl Library libdl : -AC_CHECK_LIB(dl,dlopen) - -dnl add library libm : -AC_CHECK_LIB(m,ceil) - -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 - -AC_CXX_HAVE_SSTREAM - -dnl -dnl --------------------------------------------- -dnl testing MPICH -dnl --------------------------------------------- -dnl - -CHECK_MPICH - -echo -echo --------------------------------------------- -echo testing LEX \& YACC -echo --------------------------------------------- -echo - -lex_yacc_ok=no -AC_PROG_YACC -AC_PROG_LEX -lex_yacc_ok=yes - -echo -echo --------------------------------------------- -echo testing python -echo --------------------------------------------- -echo - -CHECK_PYTHON - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing java -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_JAVA - -echo -echo --------------------------------------------- -echo Testing Disable Corba -echo --------------------------------------------- -echo - -CHECK_DISABLE_CORBA -echo "GUI_DISABLE_CORBA = "$GUI_DISABLE_CORBA - -if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then - -echo -echo --------------------------------------------- -echo testing swig -echo --------------------------------------------- -echo - -CHECK_SWIG -fi - -echo -echo --------------------------------------------- -echo testing threads -echo --------------------------------------------- -echo - -ENABLE_PTHREADS - -if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then -echo -echo --------------------------------------------- -echo testing omniORB -echo --------------------------------------------- -echo - -CHECK_OMNIORB - -dnl echo -dnl echo --------------------------------------------- -dnl echo testing mico -dnl echo --------------------------------------------- -dnl echo - -dnl CHECK_MICO - -echo -echo --------------------------------------------- -echo default ORB : omniORB -echo --------------------------------------------- -echo - -DEFAULT_ORB=omniORB - -echo -echo --------------------------------------------- -echo testing Corba -echo --------------------------------------------- -echo - -CHECK_CORBA - -AC_SUBST_FILE(CORBA) -corba=make_$ORB -CORBA=adm_local/unix/$corba - -fi -echo -echo --------------------------------------------- -echo testing openGL -echo --------------------------------------------- -echo - -CHECK_OPENGL - -echo -echo --------------------------------------------- -echo testing QT -echo --------------------------------------------- -echo - -CHECK_QT - -echo -echo --------------------------------------------- -echo testing msg2qm -echo --------------------------------------------- -echo - -CHECK_MSG2QM - -echo -echo --------------------------------------------- -echo testing VTK -echo --------------------------------------------- -echo - -CHECK_VTK - -echo -echo --------------------------------------------- -echo testing HDF5 -echo --------------------------------------------- -echo - -CHECK_HDF5 - -echo -echo --------------------------------------------- -echo BOOST Library -echo --------------------------------------------- -echo - -CHECK_BOOST - -echo -echo --------------------------------------------- -echo Testing OpenCascade -echo --------------------------------------------- -echo - -CHECK_CAS - -echo -echo --------------------------------------------- -echo Testing sip -echo --------------------------------------------- -echo - -CHECK_SIP - -echo -echo --------------------------------------------- -echo Testing pyqt -echo --------------------------------------------- -echo - -CHECK_PYQT - -echo -echo --------------------------------------------- -echo Testing qwt -echo --------------------------------------------- -echo - -CHECK_QWT - -echo -echo --------------------------------------------- -echo Testing PyConsole -echo --------------------------------------------- -echo - -CHECK_PYCONSOLE -echo "DISABLE_PYCONSOLE = "$DISABLE_PYCONSOLE - -echo -echo --------------------------------------------- -echo Testing GlViewer -echo --------------------------------------------- -echo - -CHECK_GLVIEWER -echo "DISABLE_GLVIEWER = "$DISABLE_GLVIEWER - -echo -echo --------------------------------------------- -echo Testing Plot2dViewer -echo --------------------------------------------- -echo - -CHECK_PLOT2DVIEWER -echo "DISABLE_PLOT2DVIEWER = "$DISABLE_PLOT2DVIEWER - -echo -echo --------------------------------------------- -echo Testing SupervGraphViewer -echo --------------------------------------------- -echo - -CHECK_SUPERVGRAPHVIEWER -echo "DISABLE_SUPERVGRAPHVIEWER = "$DISABLE_SUPERVGRAPHVIEWER - -echo -echo --------------------------------------------- -echo Testing OCCViewer -echo --------------------------------------------- -echo - -CHECK_OCCVIEWER -echo "DISABLE_OCCVIEWER = "$DISABLE_OCCVIEWER - -echo -echo --------------------------------------------- -echo Testing VTKViewer -echo --------------------------------------------- -echo - -CHECK_VTKVIEWER -echo "DISABLE_VTKVIEWER = "$DISABLE_VTKVIEWER - -echo -echo --------------------------------------------- -echo Testing SalomeObject -echo --------------------------------------------- -echo - -CHECK_SALOMEOBJECT -echo "DISABLE_SALOMEOBJECT = "$DISABLE_SALOMEOBJECT - -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 !" - exit - fi - if test "x${DISABLE_GLVIEWER}" == "xyes" ; then - echo "failed : for full configuration of GUI module necessary enable GlViewer !" - exit - fi - if test "x${DISABLE_PLOT2DVIEWER}" == "xyes" ; then - echo "failed : for full configuration of GUI module necessary enable Plot2dViewer !" - exit - fi - if test "x${DISABLE_SUPERVGRAPHVIEWER}" == "xyes" ; then - echo "failed : for full configuration of GUI module necessary enable SupervGraphViewer !" - exit - fi - if test "x${DISABLE_OCCVIEWER}" == "xyes" ; then - echo "failed : for full configuration of GUI module necessary enable OCCViewer !" - exit - fi - if test "x${DISABLE_VTKVIEWER}" == "xyes" ; then - echo "failed : for full configuration of GUI module necessary enable VTKViewer !" - exit - fi - if test "x${DISABLE_SALOMEOBJECT}" == "xyes" ; then - echo "failed : for full configuration of GUI module necessary enable SalomeObject !" - exit - fi -fi - -echo -echo --------------------------------------------- -echo Testing html generators -echo --------------------------------------------- -echo - -CHECK_HTML_GENERATORS - -echo -echo --------------------------------------------- -echo Testing Kernel -echo --------------------------------------------- -echo -CHECK_KERNEL - -echo -echo --------------------------------------------- -echo Testing CPPUNIT only required for unit testing -echo --------------------------------------------- -echo - -CHECK_CPPUNIT - -echo -echo --------------------------------------------- -echo Summary -echo --------------------------------------------- -echo - -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" -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" -fi - -for var in $variables -do - printf " %10s : " `echo \$var | sed -e "s,_ok,,"` - eval echo \$$var -done - -echo "---Optional:" -variables="cppunit_ok" - -for var in $variables -do - eval toto=\$$var - if test x$toto != "x"; then - printf " %10s : " `echo \$var | sed -e "s,_ok,,"` - eval echo \$$var - fi -done - -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. -if test "X$GMAKE" = "Xyes"; then - AC_SUBST(SETX) SETX=":" -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/${MODULE_NAME} idl" -else - dir_variables="salome_adm adm_local doc bin/salome include/salome lib${LIB_LOCATION_SUFFIX}/salome share/salome/resources/${MODULE_NAME}" -fi - -for rep in $dir_variables -do -# if test ! -d $rep ; then -# eval mkdir $rep -# fi - $INSTALL -d $rep -done - -echo -echo --------------------------------------------- -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 directory - -mkdir -p bin/salome -cd bin/salome - -for i in $ROOT_SRCDIR/bin/* -do - local_bin=`echo $i | sed -e "s,$ROOT_SRCDIR,.,"` - case "$local_bin" in - *.in | *~) ;; - ./bin/CVS | ./bin/salome) ;; - *) $INSTALL $i . ; echo $local_bin ;; - esac -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 -echo --------------------------------------------- -echo - -AC_OUTPUT_COMMANDS([ \ - chmod +x ./bin/* \ -]) - -## do not delete this line 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/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/closestudy.png b/doc/salome/gui/GUI/closestudy.png deleted file mode 100755 index fb7abe1dcbe79d11305275e5b4e8a2ca2a1a8745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9421 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 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/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.

- -

 

- -

- -

 

- -
- -

 

- -
    - -
  • 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.  

  • -
- -

 

- - - - 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/image54.jpg b/doc/salome/gui/GUI/image54.jpg deleted file mode 100755 index a67ac4c7a4915ab988c722e3e93425406a3662fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82626 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�lvE{Q63$}K2=*9lG>|Omw3CTnzSKQ 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 diff --git a/doc/salome/gui/GUI/image68.gif b/doc/salome/gui/GUI/image68.gif deleted file mode 100755 index f8ea563bb4033d5c88d61bca670488df6099a52c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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~Og?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~Og{|x_ucod9=z(@)K9gt^1d4Yi=oPm`?#$&^R zgUuYmS}`X!Brr5Ga&T}MEO_YLCBn#YVTIsBhAtMSjv9>(i=8Jjv4!N!C`$60#Oy1? lvtXjq>6sjNVkHC^tN|IoEWrQ( diff --git a/doc/salome/gui/GUI/image71.gif b/doc/salome/gui/GUI/image71.gif deleted file mode 100755 index 26fcc670f54ef92a0098486dc07f8442a1d5df69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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+H3#D;~3+Xa-pLO2*27+OU2gVtnhOgPpiW6kyF$ArhO69t_Y`FI8`^6C}vWy|2) gq=>9iWIQ%3IM~b~tQB)& z!@|Su0@6$~Bmy6}Fo-h8oLMn3=~%D4t<@fnNlT7QQt+SFvtv_|*L0cWQ*%6xlN=bV E0ctiMN&o-= diff --git a/doc/salome/gui/GUI/image94.gif b/doc/salome/gui/GUI/image94.gif deleted file mode 100755 index e2d310c5e262013a16aeb4bbb690bc48c613227b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmZ?wbh9u|6k`x)_|5=`lv8y_9(XRyl>ahQ~He3Gi>qL|1}DPBxE z$y^01gVN6QndaU*v$9y#Z-#AP5DOQB!-bh5z1u=|88uvHu$XVRRAXya!;-M&X;*h` RU44Ch!r?C2-=+!-)&PklJ}CeI 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 - - - - - - - - - - -

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/introduction_to_gui.htm b/doc/salome/gui/GUI/introduction_to_gui.htm deleted file mode 100755 index 4c0851e39..000000000 --- a/doc/salome/gui/GUI/introduction_to_gui.htm +++ /dev/null @@ -1,192 +0,0 @@ - - - - - -Introduction to GUI - - - - - - - - - - - - - -

Introduction to GUI

- -

GUI (Graphical User Interface) provides - a common shell for all components, which can be integrated into the SALOME - platform.

- -

 

- -

GUI - component in SALOME platform provides:

- -

 

- -
    - -
  • Common - desktop environment (SALOME desktop) - for all components

  • - -
  • Component - integration and management: uploading, switching, component menus/toolbars - handling

  • - -
  • Study - management (creation, saving, loading, editing studies)

  • - -
  • Multi-window - management in the framework of one study

  • - -
  • Management - of objects created or imported into the SALOME application (Object - Browser)

  • - -
  • Integrated - Python interpreter

  • - -
  • Output - messages window

  • - -
  • Additional - tools : Catalogue Generator, - Registry tool

  • - -
  • Standard - viewers for data visualization:

  • -
- -

- - VTK 3d viewer,

- -

- - OCC 3d viewer,

- -

- - Gauss Points viewer

- -

- - Plot 2d viewer,

- -

- - Supervision viewer.

- -

 

- -

Since version 3.0.0 SALOME GUI is based on - SUIT (Salome User Interface Toolkit) that proposes very flexible, powerful - and safe mechanisms of interaction with SALOME tool components (both CORBA - and standalone), resources management, viewers and selection handling, - exception/signals processing, bringing to top multi-desktop dockable-windowed - user interface which improves the usability of SALOME GUI.

- -

All Graphical User Interfaces of standard - modules have plug-in structure, i.e. each module is placed in a dynamic - library which is loaded on demand. All modules can create their own menu - items, buttons in toolbar, windows etc

- -

 

- - - -Related Topics - - - - - - - diff --git a/doc/salome/gui/GUI/kernel.log b/doc/salome/gui/GUI/kernel.log deleted file mode 100755 index a22dc0334..000000000 --- a/doc/salome/gui/GUI/kernel.log +++ /dev/null @@ -1,270 +0,0 @@ -|SourceProjectName:KERNEL.hpr -|DestinationProjectName:index.htm -whhost.js -whmsg.js -whmozemu.js -whproxy.js -whstub.js -whutils.js -whver.js -whform.js -whphost.js -whstart.js -whtopic.js -whframes.js -whlang.js -whskin_info.htm -whskin_blank.htm -whskin_pickup.htm -whskin_homepage.htm -whskin_tw.htm -whnjs.htm -whthost.js -whtdhtml.htm -whihost.js -whibody.htm -whiform.htm -whfhost.js -whfbody.htm -whfform.htm -whghost.js -whgbody.htm -whgdhtml.htm -whgdef.htm -whproj.js -whproj.xml -whproj.htm -whxdata\whtoc.xml -whxdata\whidx.xml -whxdata\whfts.xml -whxdata\whglo.xml -whdata\whtoc.js -whdata\whtoc.htm -whdata\whtdata.js -whdata\whidx.js -whdata\whidx.htm -whdata\whidata.js -whdata\whfts.js -whdata\whfts.htm -whdata\whglo.js -whdata\whglo.htm -whdata\whgdata.js -whdata\whftdata.js -whdata\whfwdata.js -whres.xml -webhelp.jar -webhelp.cab -whgdata\whnvp30.htm -whgdata\whnvp31.htm -whgdata\whnvp32.htm -whgdata\whnvp33.htm -whgdata\whnvt30.htm -whgdata\whnvt31.htm -whgdata\whnvt32.htm -whgdata\whnvt33.htm -whgdata\whnvf30.htm -whgdata\whnvf31.htm -whgdata\whnvf32.htm -whgdata\whnvf33.htm -whgdata\whnvl31.htm -whgdata\whnvl32.htm -whgdata\whnvl33.htm -whgdata\whexpbar.gif -cshdat_webhelp.htm -whcsh_home.htm -whcshdata.htm -cshdat_robohelp.htm -whd_topic.xml -whd_nvp10.htm -whd_nvp20.htm -whd_tabs.htm -whd_dpns.htm -whd_tab0.gif -whd_tab1.gif -whd_tab2.gif -whd_tab3.gif -whd_tab4.gif -whd_tab5.gif -whd_tab6.gif -whd_tab7.gif -whd_tab8.gif -whd_toc1.gif -whd_toc2.gif -whd_toc3.gif -whd_toc4.gif -whd_show0.gif -whd_show1.gif -whd_show2.gif -whd_hide0.gif -whd_hide1.gif -whd_hide2.gif -whd_sync0.gif -whd_sync1.gif -whd_sync2.gif -whd_prev0.gif -whd_prev1.gif -whd_prev2.gif -whd_next0.gif -whd_next1.gif -whd_next2.gif -whd_wbsh0.gif -whd_wbsh1.gif -whd_wbsh2.gif -whidhtml.htm -whfdhtml.htm -index_hha.hhk -index.hhc -index.hhk -dump_study.htm -geom_preferences.htm -introduction_to_gui.htm -kernel\about_salome_pro_architecture.htm -kernel\about_salome_pro_help_system.htm -kernel\creating_a_new_study.htm -kernel\displaying_studies.htm -kernel\editing_studies.htm -kernel\getting_properties_of_the_study.htm -kernel\getting_started2.htm -kernel\introduction.htm -kernel\introduction_to_salome_pro.htm -kernel\navigating_topics.htm -kernel\opening_studies.htm -kernel\readme.html -kernel\running_salome_pro.htm -kernel\salome_pro_desktop.htm -kernel\saving_a_study.htm -kernel\setting_preferences.htm -kernel\using_catalog_generator.htm -kernel\using_left-hand_tabs.htm -kernel\using_object_browser.htm -kernel\using_registry.htm -mesh_preferences.htm -post-pro_preferences.htm -select_color_and_font.htm -setting_preferences.htm -ehelp.xml -robohhre.lng -texture_horiz_ltbluebubbles.jpg -index.glo -default.css -pics\registry1.png -pics\open.jpg -pics\icon_about.png -pics\registry3.png -pics\studyproperties.png -pics\readmepage.png -pics\registry4.png -pics\cataloggenerator.png -tip1.gif -pics\pref31.png -pics\save.jpg -pics\pref32.png -pics\pref21.png -image70.gif -pics\newsticn.jpg -pics\pref33.png -pics\pref22.png -pics\pref11.png -image71.gif -pics\pref34.png -pics\pref23.png -pics\pref12.png -image94.gif -closestudy.png -image72.gif -pics\copy-paste.jpg -pics\pref24.png -pics\pref13.png -pics\selectfont.png -pics\view2.png -image54.jpg -image73.gif -pics\selectcolor.png -pics\exemple.gif -pics\pref14.png -pics\dumpstudy.png -pics\neo-view2.png -pics\pref37.png -pics\pref15.png -image75.gif -i_blue.jpg -pics\productpage.png -pics\pref38.png -image65.gif -note1.gif -pics\intropage.png -pics\pref39.png -pics\import.png -pics\objectbrowser1.png -pics\progresspage.png -pics\objectbrowser2.png -image67.gif -pics\loadscript.png -pics\geomview-alt.png -pics\lockedstudy.png -pics\loadstudy2.png -image68.gif -pics\choicepage.png -image69.gif -index.ppf -ehlpdhtm.js -ss_btn_related_topics.gif -default_ns.css -whxdata\whtdata0.xml -whxdata\whftdata0.xml -whxdata\whfwdata0.xml -whxdata\whgdata0.xml -whdata\whtdata0.htm -whdata\whftdata0.htm -whdata\whfwdata0.htm -whdata\whgdata0.htm -whgdata\whlstt0.htm -whgdata\whlstt1.htm -whgdata\whlstt2.htm -whgdata\whlstt3.htm -whgdata\whlstt4.htm -whgdata\whlstt5.htm -whgdata\whlsti0.htm -whgdata\whlstfl0.htm -whgdata\whlstfl1.htm -whgdata\whlstfl2.htm -whgdata\whlstfl3.htm -whgdata\whlstfl4.htm -whgdata\whlstfl5.htm -whgdata\whlstfl6.htm -whgdata\whlstfl7.htm -whgdata\whlstfl8.htm -whgdata\whlstfl9.htm -whgdata\whlstfl10.htm -whgdata\whlstfl11.htm -whgdata\whlstfl12.htm -whgdata\whlstfl13.htm -whgdata\whlstfl14.htm -whgdata\whlstfl15.htm -whgdata\whlstfl16.htm -whgdata\whlstfl17.htm -whgdata\whlstfl18.htm -whgdata\whlstfl19.htm -whgdata\whlstfl20.htm -whgdata\whlstfl21.htm -whgdata\whlstfl22.htm -whgdata\whlstfl23.htm -whgdata\whlstfl24.htm -whgdata\whlstfl25.htm -whgdata\whlstfl26.htm -whgdata\whlstf0.htm -whgdata\whlstf1.htm -whgdata\whlstf2.htm -whgdata\whlstf3.htm -whgdata\whlstf4.htm -whgdata\whlstf5.htm -whgdata\whlstf6.htm -whgdata\whlstf7.htm -whgdata\whlstf8.htm -whgdata\whlstf9.htm -whgdata\whlstf10.htm -whgdata\whlstf11.htm -whgdata\whlstg0.htm -index.htm -index_csh.htm -index_rhc.htm diff --git a/doc/salome/gui/GUI/kernel/about_salome_pro_architecture.htm b/doc/salome/gui/GUI/kernel/about_salome_pro_architecture.htm deleted file mode 100755 index fea72b8b1..000000000 --- a/doc/salome/gui/GUI/kernel/about_salome_pro_architecture.htm +++ /dev/null @@ -1,243 +0,0 @@ - - - - - -About SALOME architecture - - - - - - - - - - - - -

 SALOME - architecture

- -

SALOME - architecture is based on CORBA - technology using distributed system model of applications. This architecture - takes the concept of multitier client/server to its natural conclusion. - The distributed system model exposes all functionality of the application - as objects, each of which can use any of the services provided by other - objects in the system, or even objects in other systems. The architecture - can also blur the distinction between "client" and "server" - because the client components can also create objects that behave in server-like - roles. This architecture provides the ultimate in flexibility.

- -

The - distributed system architecture achieves its flexibility by encouraging - (or enforcing) the definition of specific component interfaces. The interface - of a component specifies to other components what services are offered - by that component and how they are used. As long as the interface of a - component remains constant, that component's implementation can change - dramatically without affecting other components.

- -

All - software components (Post-Pro, Geometry, Mesh...) integrated into SALOME - platform  implement - predefined interfaces. Each component provides data for the SALOME study in a form of links (stored in the - Study) to the specific data created and stored in the component. All components - represent CORBA servers and - it allows to run them on different host stations.

- -

 

- -

- -

 

- -

It is equally possible to create engine-independent - modules. These modules may not use CORBA at all, and can have internal - data structure which can be written in pure C++ (or python). Such modules - are located inside SALOME GUI process and from the point of view of the - end user have no difference with standard components. Such modules not - using the standard tools of SALOME platform are defined on a special separated - level named CAM. CAM component is the basis for new SALOME GUI and contains - all basic functionality for working with modules (loading; saving, closing, - customization of toolbar and menu).

- -

Another fundamental piece of the SALOME architecture is the use of the - Interface Definition Language (IDL). IDL, which specifies interfaces between - CORBA components, is instrumental in ensuring CORBA's language independence. - Because interfaces described in IDL can be mapped to any programming language, - CORBA applications and components are thus independent of the language(s) - used to implement them.

- -

Additional - information about CORBA technology is available at www.omg.org -  

- -

 

- -

 In SALOME there - is a possibility to run definite components in the so-called batch mode - without GUI provided by GUI component. In this case you can work with - these components with the help of Python commands and scripts.  

- -

 

- -

The - architecture of this all-inclusive platform for numerical components  responds - to the following objectives:

- -

 

- -
    - -
  • Flexibility :  the - creation and modification of computation schemes must be easy. The developer - must have easy access to all modeling parameters to create domain-specific - tools adapted to new situations or to test new numerical algorithms. SALOME - allows integration and implementation of numerical and physical components - derived from existing code.

  • -
- -

 

- -
    - -
  • Productivity :  the - implementation of code is simple for the user and the reuse of components - (within other environments for macro-components) is noticeably facilitated.

  • -
- -

 

- -
    - -
  • Performance :  SALOME - is able to more finely simulate phenomena that is more complex in scale - and in physical coupling requirements. SALOME - economically exploits the performance of used machines (massively - parallel processors, PC clusters, etc).

  • -
- -

 

- -
    - -
  • Expandability:  on - the one hand, software technologies and physical architectures evolve - rapidly compared to the development time, validation and use of a scientific - application while on the other hand, the development of a database model - adapted to the totality of exchanges between components can be achieved - incrementally. SALOME  is - able to easily follow these developments.

  • -
- -

 

- -

 

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/about_salome_pro_help_system.htm b/doc/salome/gui/GUI/kernel/about_salome_pro_help_system.htm deleted file mode 100755 index 0159d82c3..000000000 --- a/doc/salome/gui/GUI/kernel/about_salome_pro_help_system.htm +++ /dev/null @@ -1,116 +0,0 @@ - - - - - -About SALOME help system - - - - - - - - - - - - -

About SALOME help system

- -

Welcome - to SALOME help system. This on-line help has been created in the HTML - format with the help of Java applets. It can be launched in any WEB browser - (Internet Explorer, Netscape Navigator and others) and on any platform - (Windows, Macintosh, Linux and UNIX).

- -

 

- -

The SALOME reference - manual contains a set of topics which are divided into different chapters - describing the functionality of different modules of the SALOME platform. - This help system contains a wide variety of navigation - components and search - utilities which will help you to get acquainted with all features - of SALOME.

- -

 

- -

  -Related Topics - - -

- - - - diff --git a/doc/salome/gui/GUI/kernel/creating_a_new_study.htm b/doc/salome/gui/GUI/kernel/creating_a_new_study.htm deleted file mode 100755 index e8655a80a..000000000 --- a/doc/salome/gui/GUI/kernel/creating_a_new_study.htm +++ /dev/null @@ -1,183 +0,0 @@ - - - - - -Creating a new study - - - - - - - - - - - - - -

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:

- -

From - the main menu select File > - New or in the - standard toolbar click icon.

- -

 

- -

Your study will be created - with default name 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 active: maximize it - (if it minimized) or  click - on the top control zone of the study window.

- -

 

- -

2.  From - the main menu select Window > New - Window and from the submenu choose the viewer, which will be activated - in a new window.

- -

 

- -

The window for your study - will be created with a default name Study1.

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/displaying_studies.htm b/doc/salome/gui/GUI/kernel/displaying_studies.htm deleted file mode 100755 index ce1e0b792..000000000 --- a/doc/salome/gui/GUI/kernel/displaying_studies.htm +++ /dev/null @@ -1,152 +0,0 @@ - - - - - -Displaying studies - - - - - - - - - - - - - -

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.

- -

Such windows as Object Browser and Python Console are dockable and also - can be placed at any part of the desktop.

- -

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.

- -

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. -

- -

 

- -

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/editing_studies.htm b/doc/salome/gui/GUI/kernel/editing_studies.htm deleted file mode 100755 index 68d849757..000000000 --- a/doc/salome/gui/GUI/kernel/editing_studies.htm +++ /dev/null @@ -1,139 +0,0 @@ - - - - - -Editing studies - - - - - - - - - - - - - -

Editing studies

- -

SALOME - has Copy/Paste functionality - allowing to edit your study within a definite component:

- -

 

- -

To copy/paste a definite - object:

- -

In the main toolbar - click one of the icons or from the main menu choose Edit > Copy/Paste option.

- -

The availability of 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.

- -

 

- -

-Related Topics - - -

- - - - diff --git a/doc/salome/gui/GUI/kernel/getting_properties_of_the_study.htm b/doc/salome/gui/GUI/kernel/getting_properties_of_the_study.htm deleted file mode 100755 index 5f56db430..000000000 --- a/doc/salome/gui/GUI/kernel/getting_properties_of_the_study.htm +++ /dev/null @@ -1,190 +0,0 @@ - - - - - -Getting properties of the study - - - - - - - - - - - - - -

Setting study properties

- -

To view the properties - of the current study:

- -

 

- -

From the main menu select - File > Properties option. The - following dialog box will appear:

- -

 

- -

- -

 

- -

This dialog box gives - complete information about your study.

- -

 

- -

To change the name of the study author:

- -

 

- -

In this dialog box click - on the Author field and enter - a new name.

- -

 

- -

To view the list of changes made with your study:

- -

 

- -

In this dialog box click - on the Modifications field and - scroll it down. Each record contains the following information: date and - time of modification of the study, name of the user, who has made these - changes.    

- -

 

- -

To lock your study for modifications:

- -

 

- -

In the dialog box shown - on the picture above click on the Locked - field and choose Yes item. -

- -

 

- -

In this case your study - will be locked for any kind of modifications for all users. Next time - you try to edit it, you will see the following warning message:

- -

 

- -

- -

 

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/getting_started2.htm b/doc/salome/gui/GUI/kernel/getting_started2.htm deleted file mode 100755 index b355d9e35..000000000 --- a/doc/salome/gui/GUI/kernel/getting_started2.htm +++ /dev/null @@ -1,135 +0,0 @@ - - - - - -Getting started2 - - - - - - - - - - - - -

Getting started

- -

When you start the SALOME Platform, the - following initial desktop window appears:

- -

 

- -

- -

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  - - 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.      

- -

 

- -

To proceed working in SALOME you should create or open a new - study.  

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/introduction.htm b/doc/salome/gui/GUI/kernel/introduction.htm deleted file mode 100755 index 019cc7f42..000000000 --- a/doc/salome/gui/GUI/kernel/introduction.htm +++ /dev/null @@ -1,235 +0,0 @@ - - - - - -Introduction - - - - - - - - - - - - -

- -

Introduction

- -

Welcome to SALOME Platform! Modern technological - products (cars, structures, electrical or electronic equipment) are getting - more and more complex every year and must meet increasingly severe requirements - in terms of quality and performance. For example, for structures and their - environment the demands to reduce risks and optimize costs are extremely - high. It requires particularly refined simulations concerning structural - behavior and robustness to ensure high reliability.

- -

The - numeric modeling of a physical problem, the development of solutions and - their integration into the design process are often handled in very specific - environments. SALOME represents a generic CAD-based application for digital - simulation with "high reactivity to market evolutions and customer - expectations".

- -

 

- -

SALOME - is a free software that provides a generic platform for Pre and Post-Processing - for numerical simulation. It is based on an open and flexible architecture - made of reusable components available as free software.

- -

 

- -

SALOME - is a CAD/CAE integration platform. It provides reusable components for: -

- -
    - -
  • 3D - modeling (bottom-up construction, import, healing);

  • - -
  • Visualization;

  • - -
  • Computational - schemas management;

  • - -
  • Post-processing.

  • -
- -

SALOME - is tailored for integration of custom components:

- -
    - -
  • CAD - interfaces;

  • - -
  • Mesh - generators;

  • - -
  • Finite - Element solvers with specific pre-processors.

  • -
- -

The - SALOME platform is available in Open Source.

- -

 

- -

Salome Platform:

- -
    - -
  • Supports - interoperability between CAD modeling and computation software (CAD-CAE - link)

  • - -
  • Makes - easier the integration of new components on heterogeneous systems for - numerical computation

  • - -
  • Sets - the priority to multi-physics coupling between computation software

  • - -
  • Provides - a generic user interface, user-friendly and efficient, which helps to - reduce the costs and delays of carrying out the studies

  • - -
  • Reduces - training time to the specific time for learning the software solution - which has been based on this platform

  • - -
  • All - functionalities are accessible through the programmatic integrated Python - console

  • -
- -

 

- - --- - - - -
-

-

What - can you do in SALOME? (Some of SALOME main functions)

-
    - -
  • Define geometrical models - (create/modify geometrical items), import and export them using the BREP, - IGES and STEP formats;

  • - -
  • Define - meshing of these geometrical items, import and export them;

  • - -
  • Handle - physical properties and quantities attached to geometrical items, import - and export them to a reusable format;

  • - -
  • Perform - computations using a solver (optionally provided): read input data, configure - the solver, and write calculation results);

  • - -
  • Visualize - result fields in 3D, 2D and export images of their visualization to an - appropriate format;

  • - -
  • Manage - study schemes: definition, save/restore;

  • - -
  • Manage - computation schemes: definition, execution.

  • -
- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/introduction_to_salome_pro.htm b/doc/salome/gui/GUI/kernel/introduction_to_salome_pro.htm deleted file mode 100755 index 5355481c4..000000000 --- a/doc/salome/gui/GUI/kernel/introduction_to_salome_pro.htm +++ /dev/null @@ -1,214 +0,0 @@ - - - - - -Introduction to SALOME - - - - - - - - - - - - - -

Introduction - to SALOME

- -

 SALOME - platform represents a generic open source platform for pre- and post-processing - in numeric simulations. SALOME - combines several software components, which are built in such a way that - it allows to integrate solvers and existing meshing algorithms along with - the specification of physical properties for a given domain. The originality - of this approach is that the various components must cooperate dynamically - and be configurable.

- -

 

- -

- -

 

- -

 

- -

SALOME - platform integrates a number of modules each having its own function:

- -

 

- -
    - -
  • KERNEL :  provides a common - shell for all components, which can be integrated into the SALOME platform.

  • -
- -

 

- -
    - -
  • GUI - : provides visual representation: - basic widgets, viewers etc. - Third party modules optionally can have GUI, but in any case they always - connected with KERNEL.

  • -
- -

 

- -
    - -
  • Geometry :  facilitates - construction and optimization of geometrical models using a wide range - of  CAD - functions.

  • -
- -

 

- -
    - -
  • Mesh :  generates - meshes on geometrical models previously created or imported by the GEOM - component.

  • -
- -

 

- -
    - -
  • Supervisor :  provides - tools for construction of graphs and execution of calculations.

  • -
- -

 

- -
    - -
  • Post-Pro :  performs - data visualization.

  • -
- -

 

- -
    - -
  • MED :  allows - to work with MED files.

  • -
- -

 

- -

-Related Topics - - -

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/navigating_topics.htm b/doc/salome/gui/GUI/kernel/navigating_topics.htm deleted file mode 100755 index c98791e2a..000000000 --- a/doc/salome/gui/GUI/kernel/navigating_topics.htm +++ /dev/null @@ -1,172 +0,0 @@ - - - - - -Navigating topics - - - - - - - - - - - - -

Navigating topics

- -

Topics in the SALOME - Help system include - a variety of navigation components including:

- -

 

- -
    - -
  • Related Topics buttons: When you click - a Related Topics button, a pop-up menu opens that displays a list of topics - you can go to. The topics are relevant to what you are currently reading - in the right-hand pane or they cross-reference related information that - you can go to. Click a topic from the pop-up and it opens in the right-hand - pane.

  • -
- -

 

- -
    - -
  • Drop-down hotspots: Many topics include - drop-down hotspots. This is clickable text (text links) that displays - more information below the hotspot. You only need to click the hotspots - you want to read. To close the text, click the hotspot again.

  • -
- -

 

- -
    - -
  • Expanding hotspots: Some topics include - expanding hotspots. This kind of hotspot is a text link that displays - information immediately following the text. You only have to click the - hotspots you want more information about. To close the text, click the - hotspot again.

  • -
- -

 

- -
    - -
  • Text-only popups: This kind of link - is text that displays a pop-up window when clicked. The popup window displays - brief information about a term or concept relevant to the topic you're - currently reading. When you finish viewing the information, you click - inside the pop-up window to close it.

  • -
- -

 

- -
    - -
  • Popups: When you click some links, the - destination topic opens in a popup inside the same window that's open. - It's like having two windows in one, only the focus is on the information - in the popup. When you finish reading the information in the popup, you - can close it from view or navigate to any of its links.

  • -
- -

      

- -

-Related Topics - - -

- - - - diff --git a/doc/salome/gui/GUI/kernel/opening_studies.htm b/doc/salome/gui/GUI/kernel/opening_studies.htm deleted file mode 100755 index 454f55f61..000000000 --- a/doc/salome/gui/GUI/kernel/opening_studies.htm +++ /dev/null @@ -1,195 +0,0 @@ - - - - - -Opening studies - - - - - - - - - - - - - -

Opening studies

- -

In SALOME all studies are stored in a special - format *.hdf.

- -

 

- -

To open an existing - study:

- -

 

- -

In - the main toolbar click or - from the main menu select File - > Open option. - From a standard Search File dialog box choose the required *.hdf file - and click Open - button.

- -

 

- -

 

- -

To - load an unloaded study (see also): -

- -

 

- -

From the main menu select - File > Connect option. In the - following dialog box select one of the studies, which has been previously - created and unloaded and click Ok - button:

- -

 

- -

- -

 

- -

After opening an existing study, you will see its structure - in the Object Browser. It will - contain the objects created with the help of different components during - the previous study session. If you right-click on one of the objects and - from the associated pop-up menu choose Open - With option, which will automatically - launch the component corresponding to this object.

- -

 

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/readme.html b/doc/salome/gui/GUI/kernel/readme.html deleted file mode 100755 index 2f9ad432d..000000000 --- a/doc/salome/gui/GUI/kernel/readme.html +++ /dev/null @@ -1,1358 +0,0 @@ - - - - - -Installation Wizard - - - - - - - - - - - - -

Installing SALOME

- - -
- - - - - -
- - -

Installing products with the Installation Wizard

- -

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

- -

[ python ] runInstall [<options>]. -  Each - option has short and long notation:

- -

 

- - - --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

-g  / -  --gui

-

Runs the Installation Wizard in the GUI mode (default option). In this - case only <xml-file> key - is taken into account. Other parameters are ignored.  

-

-b  / -  --batch -

-

Runs the Installation Wizard in command-line mode.

-

-f  <FILE> /  --file=<FILE> -

-

The configuration file to be used by the Installation Wizard.  - If this parameter is not used then the installation script tries to define - the Linux version and - use the corresponding xml file. For example, config_Mandrake10_1.xml  - file is to be used for  Linux - Mandrake 10.1. If the appropriate file is not 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 higher. If config.xml file is - also not found, the 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> -

-

The target directory for SALOME platform to be installed to. If used, -  this option - overrides the default target directory, defined in the configuration XML - file (usually ${HOME}/salome_<version>).

-

 -t <DIR> / --tmp=<DIR> -

-

The directory, which is used for temporary files. If used, this option - overrides the default temporary directory, given in the configuration - xml file (usually /tmp, see here).

-

-h /  --help -

-

Prints help information about available options.

-

-v / --version

-

Prints version information (Note: this is the Installation Wizard's - version number, not of SALOME platform).  

- -

    -    
-T
o run the Installation Wizard in the GUI mode, just type runInstall. -

- -

 

- -

The installation procedure can support some different Linux platforms - and various number of products. As it was mentioned above the basic target - platform for SALOME 3.0.0 and higher is Linux Mandrake 10.1.
 

- -

The using of configuration xml files gives flexible way to modify the - list of products to be installed by the Installation Wizard without changing - program's source code. Just create your own configuration file and implement - installation scripts for products you want to be provided by Wizard. See - modifying XML configuration file and implementing - installation scripts for the new products for more information.

- -

 

- -

The Installation Wizard was built with using - of the Trolltech's Qt  - 3.0.5 library. The program contains several pages. To navigate - between pages use "Next" and "Back" - buttons in the lower part of the wizard window. "Cancel" - button closes dialog window and quits the installation procedure. To invoke - this help information click "Help" button.

- -

 

- -

Skip the first "Introduction" page by pressing "Next" - button:

- -

 

- -

- -

 

- -

Figure 1: "Introduction" - page

- -

 

- -

In the second page you are proposed to enter the target directory where - all selected products should be installed to. You can also press the "Browse..." - button and choose the folder for installation using standard Qt's - browse directory dialog box.
-If the directory you want to install products to does not exist you will - be prompted to confirm the directory creation. If you type a wrong directory - path, or if you have no permission for the directory you use, the corresponding - message box will appear.

- -

The Installation Wizard has two modes of the installation: basic (default) - and advanced. In the basic mode it is necessary just to enter the target - directory. If you want to use the advanced mode, click the "More..." - button.

- -

 

- -

In the advanced mode you have the possibility to select products to - be installed (see Fig.2 ). Each product can - have several options of installation: you have a possibility to use native - products, install already precompiled binaries, build product from the - sources or not install it at all. Possible options and default choice - are provided by the 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. Note that some products can be installed - only together with other products (or these prerequisite products should - be already installed 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 PyQt it is necessary to - have gcc, Python, Qt and Sip - installed. Therefore all these products will be marked when you check - PyQt. This feature can be switched off by clicking the "Auto - set prerequisites products" checkbox.
 

- -

Special button in the right part of the page - "Unselect All" - - allows to quickly reset all products to the "not install" - state.
-If you want to use native products (like gcc, - tcl, etc.), select the "use - native" option.

- -

 

- -

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

- -

 

- -

The box in the right part of the page displays the information about - currently highlighted product: name, version, short description (if provided - in XML file), required disk space, disk space required for temporary files, - list of prerequisites and current user choice.  

- - - -

- -

 

- -

Figure 2: "Installation - settings" page in the advanced mode

- -

 

- -

The "Total disk space required:" field displays how - much disk space on the hard drive is required for installation of selected - products.

- -

 

- -  - -

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 of the selected products. You can change the default directory - - just type path to the folder you want to use or click on the corresponding - "Browse..." button.

- -

 

- -

In fact, temporary files - are not stored in the directory entered by user. The Installation Wizard - creates in this directory an additional folder 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 in the - selected directories according to the products selected. If there is not - enough disk space on your hard drive you will see the corresponding error - message box.

- -

 

- -

Unfortunately, the configure - procedure has a very annoying bug under Linux platform. The directory - should be obligatory entered without spaces. For example, the configure - procedure for gcc won't work if you pass the following parameter: - --prefix="/New Folder 1". Therefore you are strongly - recommended not to use directory names containing spaces.

- -

 

- -

To proceed further click the "Next" button. At this - moment the program will make some tests to check installation settings: - whether there is enough disk space on the hard drive, whether native products - are preinstalled, and the 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 follow to - the next page:

- -  - -

- -

 

- -

Figure 3: "Check - your choice" page

- -

 

- -

This page summarizes the installation settings you've made on the previous - pages. You can check again your choice to change it if necessary.

- -  - -

When you are sure that everything is OK, press the "Next" - button to follow to the next page.

- -

 

- -

 

- -

 

- -

Figure 4: "Installation - progress" page

- -

 

- -

To start installation of the selected products click "Start" - button. It launches the shell installation script and you will be able - to see the output of the script in the dialog's topmost  frame. - In case of any installation problems (for example, you have accidentally - removed the temporary directory) the script will ask you: "Would - you like to continue : (Y,N) ?". You can answer this question - by typing [Y] or [N] in the middle text edit control frame.

- -

 

- -

press [Enter] when you finish - typing data.

- -

 

- -

The "Installation Status" frame window shows you the - progress of installation. It contains a list of all selected products - with brief descriptions. "Waiting" - description means that installation of this product have not started yet. - Currently the product being installed is marked as "Processing". All installed products have - "Completed" description.

- -

You can abort installation and close the installation procedure using - the "Cancel" button. It sends the signal "SIGTERM" - to the shell script. The script has a signal handler and will try 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 (when all selected products have been installed - successfully) you can go back to the previous pages to start a new installation - or click the "Next" button to go the Readme page:

- -  - -

- -

 

- -

Figure 5: "Finish - installation" page

- -

 

- -

In this page you can read some important information about the Instalation - Wizard itself and some hints: how to run and test SALOME or how to build - SALOME from the sources. This is the content 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 by clicking the "Launch - SALOME" button.

- -

 

- -

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 collect - the environment, see  here.

- -

 

- -

These files are: salome.csh + salome.sh in the KERNEL - module sources and KERNEL - module binaries root directories and env_products.csh - + env_products.sh in the target directory.

- -  - -

salome.(c)sh and env_products.(c)sh - files are slightly different: env_products.* files are optimized to - be used for the building of SALOME modules from the sources (see README file provided with the installation - procedure on the CD). The salome.* files are optimized for the SALOME - launching. This difference is defined by the environment variable ENV_FOR_LAUNCH which is set - to 0 in env_products.* files and to 1 in salome.* files.

- - -
- - -

Notes on check products - version procedure

- -

Unfortunately under Linux platform there is no exact algorithm to identify - the product's version. The table below gives an idea how the version is - checked for the preinstalled products for the Linux Mandrake 10.1 platform. -

- -

 

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Product

-

Algorithm of checking

-

Preliminary steps before launching
-the installation procedure

-

Notes

gcc 3.4.1ver=`gcc - -dumpversion` -

-

It is recommended to use the native - gcc for Mandrake 10.1.
tcl 8.4.51) - check if TCLHOME variable is set
-2)
existence of tclsh8.4
-3)
existence of wish8.4
-4)
existence of libtcl8.4.so
-5)
existence of libtk8.4.so
set TCLHOME - if you have a preinstalled version of tcl.
-add a directory where libraries can be found to the LD_LIBRARY_PATH
Unfortunately there is no strict - way to check the tcl version number.
-It is recommended to use the native tcl/tk for Mandrake 10.1.
boost 1.31.01) check if BOOSTDIR variable is set.
-2)
ver=`egrep 'BOOST_VERSION - [0-9]+' ${BOOSTDIR}/boost/version.hpp | sed 's/.*BOOST_VERSION \([0-9]\+\)/\1/g'`
set BOOSTDIR if - you have a preinstalled version of boostwe use file version.hpp in the boost distribution to get - the version information.
-ver
should be equal to 103100.
Open CASCADE -

Technology 6.1

1) - check if CASROOT variable is set
-2)
ver_major=`grep "!define OCC_VERSION_MAJOR" ${CASROOT}/inc/Standard_Version.hxx - | awk '{print $3}'`
-3)
ver_minor=`grep "!define OCC_VERSION_MINOR" ${CASROOT}/inc/Standard_Version.hxx - | awk '{print $3}'`
-4)
ver="$ver_major.$ver_minor"
-5)
Check the existence of libStdPlugin.so in OpenCASCADE distribution,
set CASROOT - if you have a preinstalled version of Open CASCADEOpen CASCADE's Standard_Version.hxx - file provides the version information.
-ver
should be equal to 6.1.
Python 2.3.41) - PYTHONHOME variable should be - set
-2)
isPython=`which python`
-3)
ver=`python -V`
set PYTHONHOME - to root Python distribution folder;
-add the directory where python can be found to the PATH - variable
Python should exist and ver - should be equal to 2.3.4
-It is recommended to use the native Python for Mandrake 10.1.
Swig 1.3.24ver=`swig - -version 2>&1 | grep -i version | awk '{ print $3 }' | sed -e 's/^\([0-9.]*\)\(.*\)/\1/'`add the directory where swig binary - can be found to the PATH variableSwig should exist and ver - should be equal to 1.3.24.
Qt 3.3.31) - QTDIR variable should be set.
-2) ver
=`grep "QT_VERSION_STR" ${QTDIR}/include/qglobal.h - | sed -e 's%^#define QT_VERSION_STR\([[:space:]]*\)%%g' -e 's%\"%%g'`
set QTDIR - if you have a preinstalled version of qtQt's qglobal.h file provides version - information: ver should be equal - to 3.3.3.
-It is recommended to use the native Qt for Mandrake 10.1.
msg2qm (Qt 3.3.3 compatible)MSG2QM_ROOT - variable should be set.set  MSG2QM_ROOT - if you have preinstalled version of msg2qm toolmsg2qm is a Qt tool used to convert - text *.po files to *.qm resource files. Unfortunately this tool is not - included in the Qt distribution and is provided only in its sources package. - We distribute this tool with the Installation Wizard.
-In addition there is no way to check the version number of msg2qm tool.
Qwt 4.2.0/0.2.41) - QWTHOME variable should be set.
-2)
check if libqwt.so.4.2.0 exists
set  QWTHOME - if you have a preinstalled version of qwtUnfortunately there is no strict - way to check the qwt version number.
-We try to find libqwt.so.4.2.0 in the ${QWTHOME}/lib - folder. 
Hdf 51.6.31) - HDF5HOME variable should be set.
-2)
existence of libhdf5.so.0.0.0
-3)
existence of libhdf5.settings
-4)
ver=`grep "HDF5 - Version:" ${HDF5HOME}/lib/libhdf5.settings | awk '{print $3}'`
set HDF5HOME - if you have a preinstalled version of hdfWe try to find libhdf5.so.0.0.0 and - libhdf5.settings in ${HDF5HOME}/lib - folder.
-File libhdf5.settings contains the following version information:
-HDF5 Version: 1.6.3
Med 2.2.31) - MED2HOME variable should be set.
-2)
existence of libmed.so.1.0.1
set MED2HOME - if you have a preinstalled version of medUnfortunately there is no strict - way to check the med version number.
-We try to find libmed.so.1.0.1 in ${MED2HOME}/lib - folder.
-If you have a problem with the preinstalled version of med, please, reinstall - it.
Vtk 4.2.61) - VTKHOME variable should be set.
-2)
existence of libvtkCommon.so
set VTKHOME - if you have a preinstalled version of vtkUnfortunately there is no strict - way to check the VTK version number.
-We try to find libvtkCommon.so in ${VTKHOME}/lib/vtk - folder.
-If you have a problem with the preinstalled version of vtk, please, reinstall - it.
Netgen 4.5NETGENROOT variable - should be set. set NETGENROOT if - you have a preinstalled version of Netgen.Unfortunately we can't find anything about NETGEN version.
-We just check if the NETGENROOT - environment variable is set. The NETGEN version should be patched.
OmniORB 4.0.5,
-OmniORBpy 2.5,
-OmniNotify 2.1
1) - OMNIORBDIR variable should be set.
-2)
existence of libomniORB4.so.0.5
-3)
existence of _omnipymodule.so.2.5
-4)
existence of libCOSNotify4.so.0.1
-5)
existence of notifd
set OMNIORBDIR - if you have a preinstalled version of omniWe try to find several omni libraries - and binaries in the ${OMNIORBDIR}/lib - and ${OMNIORBDIR}/bin directories.
Numeric 23.7ver=`python - -c 'import Numeric; print Numeric.__version__' 2>/dev/null`add the directory where you - have the preinstalled version of Numeric package to your PYTHONHOME - variableIf you have problem with the preinstalled - version of Numeric 23.7, please, reinstall it.
Sip 4.11) - SIPDIR variable should be set.
-2) ver
=`${SIPDIR}/sip -V | awk '{print $1}'`
set SIPDIR - to the directory where you have sip preinstalledver - should be equal to 4.1.
PyQt 3.131) - PYQTDIR variable should be set.
-2)
existence of qt.so library
set PYQTDIR - to the directory where you have PyQt preinstalledUnfortunately we can't exactly check - the PyQt version number.
-We just try to find qt.so in ${PYQTDIR}. - -

Note that PyQt officially doesn't support Qt 3.3.3, but nevertheless - it can be used.

Doxygen 1.4.61) - existence of doxygen
-2)
existence of doxytag
-3)
existence of doxywizard
-4)
ver=`doxygen --version`
add the directory where you have - doxygen binaries preinstalled to the  PATH - variable.doxygen, doxytag, doxywizard binaries - should exist; ver should be equal - to 1.4.6.
-If you have problems with the preinstalled version of doxygen, reinstall - it.
-It is recommended to use the native doxygen for Mandrake 10.1.
Graphviz 2.2.11) - existence of dot binary.
-2)
ver=`dot -V 2>&1 - | awk '{print $3}'`
add the graphviz bin directory to - the PATH environment variableWe try to find dot program in the - ${PATH}.
-ver
should be equal to 2.2.1.
MODULE - binaries
-(where MODULE = KERNEL, GUI, GEOM, - ...)
1) - MODULE_ROOT_DIR variable should be set
-2)
existence of VERSION file
-3) ver
=`cat ${MODULE_ROOT_DIR}/bin/salome/VERSION - | awk -F: '{print $NF}' | tr -d '[:space:]'`
set MODULE_ROOT_DIR - if you have preinstalled binaries of MODULE - version 3.2.0.MODULE - binaries should exist and ver - should be equal to 3.2.0.
MODULE - sources
-(where MODULE = KERNEL, GUI, GEOM, - ...)
1) - existence of MODULE_SRC_DIR
-2)
existence of VERSION file
-3) ver
=`cat ${MODULE_SRC_DIR}/bin/VERSION - | awk -F: '{print $NF}' | tr -d '[:space:]'`
set MODULE_SRC_DIR - if you have preinstalled sources of MODULE - version 3.2.0.MODULE - sources should exist and ver should be equal to 3.2.0.
-
-

 

- -

 

- -

For native products the installation - procedure sets proper environment variables itself, and you do not need - to set such variables like, e.g. TCLHOME or PYTHONHOME. -
-If you have native products installed to directories different from default - ones (not /usr/bin, /usr/lib...), it is recommended to follow - the above description. Or you should properly set PATH - and LD_LIBRARY_PATH variables - before starting the Installation Wizard. - Otherwise the installation script will fail to find the preinstalled products.

- -

 

- -

 

- -

For some native products (e.g. gcc, Python) the - rules of version checking are not so strict as described in the table. - Only major and minor version numbers should coincide with the prerequisite. - Release number can be larger. This is done to give a possibility to use - native products for newer versions of Linux. If some native product has - a version number larger than the one required by the installation procedure, - the user will be prompted by the warning message like this: "You - have a newer version of gcc installed on your computer than that is required - (3.4.1). Continue?". You can press the "Yes" - button 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 only - helpful if you intend to build all products from the sources.

- -

 

- - -
- - -

Pick up the environment

- -

Please, read carefully the following information. This section describes - how the installation procedure collects the environment.

- -

After installing each product the shell script creates a special environment - file for each product in its target folder . The name of the file is generated - from the name of the product according to the following scheme: env_<product_name>.sh. - This file includes all necessary product settings. For example for Vtk - the file is env_Vtk.sh. Environment files allow to pick up all - environment settings which are necessary to build and launch SALOME. When - installing SALOME sources and/or binaries, the installation procedure - picks up all the settings files and generates two scripts: salome.sh - and salome.csh for sh and csh correspondingly. Such approach helps - to save time when reinstalling products and you may not care about setting - all environment variables manually to build/launch SALOME. What you need - is just to use one of these scripts.

- -

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

- -

In any case you may edit salome.* files after the installation - procedure finishes, as you want.

- -

Note: as it was mentioned - above there are two more environment - files which are generated by the installation procedure: env_products.csh - and env_products.sh. These files can be found in the target installation - root directory.

- -

 

- - -
- - -

Modifying XML configuration - file

- -

You can create your own 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 the Installation Wizard looks for if no command line arguments are - given, is config.xml. This section describes the structure of the - configuration file.
-XML tags are in bold blue, optional sections/tags are in brackets.

- -

<document> -
-   
[
<config [ version=<install_wizard_version> ]
-              [ - caption=<install_wizard_caption> ]

-              [ - copyright=<install_wizard_copyright>  ]

-              [ - license=<install_wizard_license_info> ]

-              [ - os=<target_platform> ]

-      />

-    ]

-   
[
<path   [ targetdir=<target_directory> ] -
-              [ - tempdir=<temp_directory>     ]

-      />

-    ]

-    [
<product  name=<product_name>
-                - version=<product_version>

-              [ context=<product_context>         - ]
-              [ description=<product_description> - ]
-                - install=<installation_mode>

-                - supported=<supported_installation_modes>

-                - disable=<disable_flag>
-              [ pickupenv=<pickup_env_flag>       - ]

-                - dependancies=<list_of_prerequisites>
 
-                - installdiskspace=<install_disk_space>

-                - temporarydiskspace=<tmp_disk_space>

-                - script=<installation_script_name>

-      />
-
-    ]

-    [
<product ...
-      />
-
-    ]

-    .
.. -
-</document>

- -

<config> section

- -This is an optional section - it contains general - information the Installation Wizard itself. - -
    - -
  • version: - Installation Wizard version number;
  • - -
  • 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);
  • - -
  • copyright: - Installation Wizard copyright information (appears on the first page of - the program);
  • - -
  • license: - Installation Wizard license information (appears on the first page of - the program);
  • - -
  • 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.
  • -
- -

<path> section

- -This is an optional section - it contains default directories. - -
    - -
  • targetdir: - Starting target directory - path to the directory where products should - be installed;
  • - -
  • tempdir: - Starting temp directory - path to the directory for the temporary files.
  • -
- -

<product> section

- -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. - - -
    - -
  • name: - Name of the product;
  • - -
  • version: - Version of the product;
  • - -
  • description: - Description of the product (optional);
  • - -
  • context: - Context of the product (optional); the possible values are 'salome - sources', 'salome binaries' and 'prerequisite';
  • - -
  • 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;
  • - -
  • install: - Default (starting) installation mode;
  • - -
  • disable: - If this flag has 'true' value, the corresponding product will not appear - in the list of products tree and will not be installed;
  • - -
  • 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.
  • - -
  • dependancies: - list of prerequisite products, which are necessary to build this product, - separated by a comma;
  • - -
  • installdiskspace: - Total amount of space (integer, in Kbytes), which the product occupies - on the hard drive after the installation;
  • - -
  • temporarydiskspace: - Disk space (integer, in Kbytes) for the temporary files, which are necessary - to build the product from the sources;
  • - -
  • 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.
  • -
- -  - -

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.

- - -
- - -

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. -

- -
    - -
  • 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
  • - -
  • 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.
  • - -
  • 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
  • - -
  • 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.
  • - -
  • 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.
  • - -
  • 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.
  • - -
  • 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.
  • -
- -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 -

- -

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.

- - -
- - -  - -
  - - - - - diff --git a/doc/salome/gui/GUI/kernel/running_salome_pro.htm b/doc/salome/gui/GUI/kernel/running_salome_pro.htm deleted file mode 100755 index 1bcad1704..000000000 --- a/doc/salome/gui/GUI/kernel/running_salome_pro.htm +++ /dev/null @@ -1,344 +0,0 @@ - - - - - -Running SALOME - - - - - - - - - - - - - -

Running SALOME

- -

To launch SALOME:

- -

 

- -

1. Install the SALOME package into a definite - directory (ex. SALOME) on your - hard disk. It is preferable if you use the special installation procedure - allowing to install the  SALOME - platform and all corresponding applications.

- -

 

- -

2. - The installation shell script will create a special file: salome.csh - (CShell file) in your SALOME/KERNEL directory. - This file contains all environment variables necessary for launching SALOME - platform with other application products provided with SALOME installation - package. You have a possibility to add one of them into your profile if - you enter in the command console the following:

- -

 

- -

source - salome.csh

- -

 

- -

During - the installation procedure you have a possibility to set your profile - automatically.  

- -

 

- -

 

- -

3. Launch SALOME platform, using the following - Python script located in the SALOME/KERNEL/bin/salome - directory:

- -

 

- -
    - -
  • runSalome.py - [command line options]

  • -
- -

 

- - - --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

Options

-

Description

-

--help or - -h   

-

print this help

-

 

-

--gui or - -g   

-

launch with GUI

-

 --terminal or - -t      

-

launch without GUI in batch mode

-

--logger or - -l   

-

redirects  log - messages into a file defined by the command --file or -f

-

--file=<FILE> or - -f=<FILE>

-

allows to define a file for log messages

-

--xterm or - -x

-

the servers open an xterm window and log messages are displayed in this - window

-

--modules=module1,module2,... - or -m=module1,module2,...

-

list of SALOME modules which will be loaded into the module catalogue

-

--embedded=registry,study,moduleCatalog,cppContainer,

-

or  -e=registry,study,moduleCatalog,cppContainer -

-

embedded CORBA servers (default: registry,study,moduleCatalog,cppContainer)

-

note that logger,pyContainer,supervContainer can't be embedded

-

--standalone=registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer, - or

-

-s=registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer -

-

standalone CORBA servers (default: pyContainer,supervContainer)

-

--containers=cpp,python,superv

-

or -c=cpp,python,superv

-

launch of cpp, python and supervision containers

-

--portkill or - -p

-

kill SALOME launched with the current port

-

--killall or - -k    

-

 

-

kill SALOME

-

 

-

--interp=n or - -i=n    

-

number of additional xterm to open, with session environment

-

-z

-

display splash screen

-

-r

-

disable centralized exception handling mechanism

- -

 

- -

- If the runSalome.py - script - is launched without prompting any options, they will be taken by default - from the file SalomeApp.xml - (SALOME/GUI/share/salome/resources/SalomeApp.xml). - If you are constantly launching SALOME with some specific options which - are different from the defaults, you can edit this file according to your - requirements. So the next time you run SALOME, you won't have to enter - these numerous command console options.    

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/salome_pro_desktop.htm b/doc/salome/gui/GUI/kernel/salome_pro_desktop.htm deleted file mode 100755 index 8548692f1..000000000 --- a/doc/salome/gui/GUI/kernel/salome_pro_desktop.htm +++ /dev/null @@ -1,231 +0,0 @@ - - - - - -SALOME desktop - - - - - - - - - - - - - -

SALOME Desktop

- -

The main SALOME Desktop - consists of the following sections and toolbars:

- -

 

- -

- -

 

- -

Basic parts of the SALOME Desktop:

- -

 

- -
    - -
  • Main menu - This is a set of context-sensitive - menus, which will be updated according the functionality of the loaded - component. In general,  these - menus contain all functional options of SALOME platform.

  • - -
  • Standard Toolbar - This toolbar contains - icons allowing creating/saving studies, correcting mistakes, copying/pasting - objects

  • - -
  • Components Toolbar - This toolbar is - destined for uploading components in SALOME platform

  • - -
  • Module Toolbar - This toolbar contains - icons specific to the loaded module.

  • - -
  • Viewer Toolbar - This is a set of tools - destined for visualization of the presentations in the viewer.

  • -
- -

 

- -

All toolbars in the SALOME - Platform are context-sensitive. Loading of a definite component (Geometry, - Post-Pro, Mesh etc.) will automatically add some additional toolbars specific - to this component. To display/hide a definite toolbar, in the main menu - choose View > Toolbars, and - from this submenu check or uncheck the toolbar, you would like to display/hide. -

- -

By default all toolbars are located on - the top of the SALOME desktop. But you can relocate toolbars by dragging - with the mouse and dropping it in any place of the window.

- -

 

- -

Parts of  the - study window:

- -

 

- -
    - -
  • Object - Browser - Management of objects created or imported into SALOME - application

  • - -
  • Viewer - - This window is destined for visualization of presentations.

  • - -
  • Python - console - Window for Python interpreter. This window functions - like a standard document: the pop-up menu invoked by right-click in this - window gives access to Copy/Paste/SelectAll/ClearAll - options.

  • -
- -

 

- -

Object Browser, Python Console, MenuBar, - etc are, in fact, separate dockable windows.  Dockable - windows can be placed in special areas, on the borders of desktop like - toolbars. You can change the size and the position of dockable windows, - hide them or even place outside desktop. SALOME saves in the same file - all positions and sizes of dockable windows. It means that the difference - in settings of the same windows (for example Python console) is possible - between different modules (the same window can have different size and - position when other module is activated). Also each module can indicate - which common windows are necessary for working, and only they will be - displayed when this module is active.

- -

 

- -

Starting - from the version 3.0.0 Salome uses a Multi-Desktop Approach. Multi-desktop Approach means that now there - is separate Desktop for each document (Study)  and - all windows connected to a Study (viewers, dockable windows etc) are placed - in one container. It is very comfortable, because you can't mix up windows - from different studies. This approach positively differs from the classic - multi document interface in case if many windows are used, i.e. when one - document contains a lot of viewers, dialogs, etc. Each desktop also has - its own menu and toolbar.

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/saving_a_study.htm b/doc/salome/gui/GUI/kernel/saving_a_study.htm deleted file mode 100755 index 2c5d449f0..000000000 --- a/doc/salome/gui/GUI/kernel/saving_a_study.htm +++ /dev/null @@ -1,273 +0,0 @@ - - - - - -Saving a study - - - - - - - - - - - - - -

Saving and closing studies

- -

In SALOME - a study can be saved in HDF - binary (by default) or ASCII files - (see also: Setting ASCII save - option).

- -

 

- -

You can also specify  two - options of saving your study:

- -

 

- -
    - -
  • In one HDF file: - in this case all components used during - this study session will write their data into one common HDF file.

  • - -
  • In multiple files (see - also: Setting Multifile save option) - : in this case SALOME will create one base HDF file which will - store the main information about the saved study and several other special - files with particular extensions storing the data written by each component - which has been used during this study session. Opening of this study requires - that ALL saved files should be - stored in the SAME directory. -  If you - would like to copy your saved study in another directory or machine, you - should copy all stored files. Otherwise, if you try to open this study, - some data will be lost and it will lead to invalid functioning of the - SALOME platform.    

  • -
- -

 

- -

Saving a study you also - save its layout, i.e. all positions and sizes of dockable windows. It - means that the difference in settings of the same windows (for example - Python console) is possible between different modules (the same window - can have different size and position when other module is activated). - Also each module can indicate which common windows are necessary for working, - and only they will be displayed when this module is active.

- -

 

- -

To save an existing - study :

- -

 

- -

In - the main toolbar click or - from the main menu select File - > Save option. - Your study will be automatically updated.

- -

 

- -

If your study hasn't been - previously saved, this option will call the standard Search File dialog - box where you can enter the name for your study and save it.

- -

 

- -

To save a study with - a new name:

- -

 

- -

From the main menu select - File > Save as option. In the - standard Search File dialog box enter a new name for your study and click - Save button.

- -

 

- -

To save the current - layout of the GUI:

- -

 

- -

From the main menu select File - > Save GUI State. The GUI state is published in Object Browser - in the folder GUI states and can be at any time Restored, - Renamed or Deleted. -  This operation - saves and allows to restore almost all GUI settings: names, position, - zooming and panning of viewers  and - all displayed objects (in Post-Pro module only).  

- -

 

- -

To close a study:

- -

 

- -

In - the main toolbar click or  from - the main menu select File > - Close option - or click on the cross in the upper right corner of the study window.

- -

 

- -

If your study hasn't been - previously saved, this option will call the following dialog box with - several options:

- -

 

- -

- -

 

- -

Unload - option allows to unload your current study from the SALOME Desktop. - In the same working session you can  reload - it again (see: Opening studies). But - if you quit the SALOME application, all changes in the unloaded study - will be lost.

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/setting_preferences.htm b/doc/salome/gui/GUI/kernel/setting_preferences.htm deleted file mode 100755 index 94213495a..000000000 --- a/doc/salome/gui/GUI/kernel/setting_preferences.htm +++ /dev/null @@ -1,378 +0,0 @@ - - - - - -Setting preferences - - - - - - - - - - - - - -

SALOME preferences

- -

To begin setting preferences - for your study, select Preferences in - the main menu, the following dialog box will appear:

- -

 

- -

 

- -

If you've just started - your study and haven't yet loaded other modules, you'll be able to change - only those settings, which refer to the whole GUI SALOME session. These - settings will be valid for the whole study session.

- -

 

- -

General - Preferences

- -

 

- -
    - -
  • Study Properties

  • -
- -
    - -
      - -
    • MultiFile Save - if checked in, your study will be saved - in several HDF files (one file for the data created by each component - used during the study session).

    • - -
    • ASCII Save - if checked in, your study will be saved in - ASCII format file (or files).

    • - -
    • Store positions - of windows -  if checked in, - positions of windows will be saved in a special file at the end of the - current session and then restored for a new session.

    • - -
    • Store/restore last - GUI state - if checked in, all GUI - settings are saved with the rest of the data whenever you save the study. - When the study is reopened, the GUI state is restored.

    • -
    - -
  • External browser

  • - -
      - -
    • Application this option allows you to set an external - browser (IE, Netscape) which will be used for viewing SALOME reference - manuals. By default, Mozilla is used. Press the button to browse for the application you - need in the data tree of your computer.

    • - -
    • Parameters

    • -
    -
- -
    - -
  • Python console properties - - here you can quickly set the parameters - (style, size, face) of the font used in your Python console. For detailed - settings in Select Font dialog box press the button.

  • -
- -

 

- -

Viewers - Preferences

- -

 

- -

- -

 

- -
    - -
  • OCC - and VTK 3D Viewers

  • -
- -
    - -
      - -
    • Trihedron size - - this submenu allows to set the size - of coordinate axes displayed in the viewer.

    • - -
    • Background - Color - this submenu allows to select - background color. Click on the colored line to access to the Select Color - dialog box.

    • -
    -
- -
    - -
      - -
    •  Number - of isolines along U (or V) - this submenu allows to specify the number - of isolines along the axes of coordinates.

    • - -
    • Relative - size - if checked in, trihedron axes - scale to fit the size of the area displayed in 3D Viewer.  

    • -
    -
- -

 

- -
    - -
  • Plot2d - Viewer

  • - -
      - -
    • Legend - Position - this submenu allows to set - the default position of the legend, it can be located to the left, to - the right, on top or on bottom of the graph.  

    • - -
    • Curve - Type - this allows to set the representation - of graphs in your presentations. You can see only Points, - points connected with Lines or - points connected with smooth Splines.   

    • - -
    • Marker - Size - this submenu allows you to set - the size of markers in your graphs

    • - -
    • Horizontal - & Vertical Axis Scale - - this submenu allows you to set the - scale for vertical and horizontal axes. It can be either Linear - or Logarithmic

    • - -
    • Background - Color - this submenu allows to select - the background color. Click on the colored line to access to the Select Color - dialog box.

    • -
    -
- -

 

- -
    - -
  • Graph - Supervisor

  • - -
  • Background - Color - this submenu allows to select - background color. Click on the colored line to access to the Select Color - dialog box.

  • - -
  • Title - Color - this submenu allows to select - title color. Click on the colored line to access to the Select - Color dialog box.

  • -
- -

 

- -

Directories Preferences

- -

 

- -

- -

 

- -
    - -
  • Quick Directory List - - this section allows to create and - manage a custom quick directory list. To add a directory in the list, - press the button, - then the button and browse the data tree for the - directory you need.
    - The and buttons help you to sort the - directories in the list.
    - To remove the selected directory from the list, press the button.

  • -
- -

 

- -

Object - Browser Preferences

- -

 

- -

- -

 

- -
    - -
  • Object - browser settings

  • - -
      - -
    • Auto - size for the first column - this checkbox - enables automatic resizing for the first column.  

    • - -
    • Auto - size for other columns - this checkbox - enables automatic resizing for the other columns.

    • -
    -
- -

 

- -
    - -
  • Default - columns - these checkboxes allow to - display or hide Value, Entry, - IOR and Reference entry columns in the Object Browser.

  • -
- -

 

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/using_catalog_generator.htm b/doc/salome/gui/GUI/kernel/using_catalog_generator.htm deleted file mode 100755 index 41e50d318..000000000 --- a/doc/salome/gui/GUI/kernel/using_catalog_generator.htm +++ /dev/null @@ -1,233 +0,0 @@ - - - - - -Using Catalog Generator - - - - - - - - - - - - - -

Using Catalog Generator - (for advanced users)

- -

   SALOME - platform is an open platform for integration of your custom components, - which can used in the same way as typical modules provided in the standard - installed package. The Catalog Generator - tool serves for implementation of the interface of your custom - component. It allows to generate from IDL description of your component - interface its xml description.  The - component xml description allows SALOME application to know about the - component and its services and provides the possibility to call the component - services, for example, inside Supervisor module.

- -

If you have a look at runSalome, runSalomeWithPort - scripts running SALOME application, which are stored in build/bin directory - you will see that SALOME_ModuleCatalog_Server is started with two xml - files as its input parameters: CatalogModuleGeneral.xml - and CatalogModulePersonnel.xml. - These two files store the descriptions of interfaces and services of all - components, provided with typical SALOME package. To add a new component - into SALOME platform you should either update one of these existing xml - files with generated xml description of your component or create a new - one.

- -

 

- -

To open the Catalog Generator:

- -

 

- -

From the main menu choose Tools - > Catalog Generator, the following dialog box will appear:

- -

 

- -

- -

 

- -

 

- -

In - this dialog box you can specify:

- -

 

- -
    - -
  • Name - and location of the IDL file describing the interface of your component - (Click the Browse button to find - it using the data tree).

  • - -
  • Name - and location of an existing XML file, which will be updated with the interface - of you component or name and desired location of a new XML file, which - will be generated (Click the Browse - button to find it using the data tree).

  • - -
  • Name - of the author,

  • - -
  • Name - of the component,

  • - -
  • Name - of the user

  • - -
  • Version,

  • - -
  • Capability - of multi study support

  • - -
  • Type - of the component,

  • - -
  • Icon - of your component (Click the Browse - button to find it using the data tree).

  • -
- -

 

- -

If you have chosen to create a new xml file containing the - description of your component, don't forget to specify it as input parameter - for SALOME_ModuleCatalog_Server in the file, you are using as a running - script of SALOME platform (in runSalomeWithPort, for example).

- -

 

- -

 When - launching SALOME next time you will see your module alongside other components.

- -

 

- -

You can use the Catalog - Generator tool, if you would like to test - the functionality of your new component. After implementation of your - component interface, launch SUPERVISION module where you can try using - the services of your new component. (see also: Adding factory nodes)

- -

 

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/using_left-hand_tabs.htm b/doc/salome/gui/GUI/kernel/using_left-hand_tabs.htm deleted file mode 100755 index cb43d0047..000000000 --- a/doc/salome/gui/GUI/kernel/using_left-hand_tabs.htm +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -Using left-hand tabs - - - - - - - - - - - - -

Using left-hand tabs

- -

SALOME Help system includes - the following left-hand tabs:

- -

 

- -
    - -
  • Contents: The Contents tab displays - books and pages that represent the categories of information in the online - Help system. When you click a closed book, it opens to display its content - (sub-books and pages). When you click an open book, it closes. When you - click pages, you select topics to view in the right-hand pane of the HTML - Help viewer.

  • -
- -

 

- -
    - -
  • Search: The Search tab enables you to - search for words in the Help system and locate topics containing those - words. Full-text searching looks through every word in the online Help - to find matches. When the search is completed, a list of topics is displayed - so you can select a specific topic to view.

  • -
- -

 

- -
    - -
  • Glossary: The Glossary tab displays - a glossary providing a list of words, short phrases, and their definitions - related to SALOME. When you select a term from the list, its corresponding - definition is displayed in the lower pane.

  • -
- -

     

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/using_object_browser.htm b/doc/salome/gui/GUI/kernel/using_object_browser.htm deleted file mode 100755 index 24f4e911b..000000000 --- a/doc/salome/gui/GUI/kernel/using_object_browser.htm +++ /dev/null @@ -1,203 +0,0 @@ - - - - - -Using Object Browser - - - - - - - - - - - - - -

Using Object Browser

- -

The Object - Browser in SALOME is destined for displaying the structure of the - current study in a tree-like form. It contains:

- -

 

- -
    - -
  • components, loaded - during the current session

  • - -
  • objects created with - the help of different components  (The - objects created with the help of a definite component are located in the - folder having the name of this component.)

  • - -
  • references to different - objects (they are highlighted in red).

  • -
- -

 

- -

- -

 

- -

The Object Browser is - destined to getting quick access to different objects created during SALOME - session. All pop-up menus associated with the objects displayed in the - Object Browser are context-sensitive. So it depends on a definite currently - loaded SALOME component what options you will see in the pop-up menu, - if you right-click on a definite object in the Object Browser.

- -

 

- -

The Object Browser may contain supplementary - attributes of the objects displayed in additional columns. By default, - these columns are not displayed -  displaying/hiding - these columns is possible through setting - study preferences or right-clicking on the attributes bar and toggling - the necessary attributes.

- -

 

- -

- -

 

- -
    - -
  • Entry -  - Identification - index of the object in the structure of the study

  • - -
  • IOR - -  Interoperable - Object Reference

  • - -
  • Reference - entry  - -  Identification - index of the references to the objects

  • -
- -
    - -
  • Value -  -  Displays - the value of the first object attribute

  • -
- -

 

- -

Entry, IOR and Reference - entry  attributes - are displayed for debugging purposes only.

- -

              

- -

-Related Topics - - -

- -

 

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/kernel/using_registry.htm b/doc/salome/gui/GUI/kernel/using_registry.htm deleted file mode 100755 index ab5ec1fd3..000000000 --- a/doc/salome/gui/GUI/kernel/using_registry.htm +++ /dev/null @@ -1,207 +0,0 @@ - - - - - -Using Registry tool - - - - - - - - - - - - - -

Using Registry tool

- -

Registry - tool is in the SALOME platform is destined for providing information about - the processes (components), which have ever been launched in the current - study session.  

- -

 

- -

To view the Registry:

- -

 

- -

From the main menu choose - Tools > Registry display, the - following dialog box will appear:

- -

 

- -

- -

 

- -

Running - tab of this dialog box displays a list of the currently started processes - (components) with supplementary information on each of them divided into - columns:

- -

 

- -

- Component: - name of the started component

- -

- PID: - process identification number

- -

- User - Name: name of the user launching the component

- -

- Machine: - name of the machine, on which the process has been started

- -

- begins: - date and time of the starting of the component

- -

- hello: - date and time of the last call to the component

- -

 

- -

History - tab displays a list of all processes, which have ever been launched within - this study session. It contains the same supplementary information on - each of the processes (components).

- -

 

- -

Refresh - button allows to refresh the current list of processes (components).

- -

 

- -

Interval - button allows to set an interval for refreshment of the current list of - processes (components).

- -

 

- -

- -

 

- -

To display complete information on a definite process (component):

- -

 

- -

Double-click on this - process (component). The following window will appear:

- -

 

- -

- -

 

- -

 

- -

-Related Topics - - -

- -

 

- -

 

- - - - diff --git a/doc/salome/gui/GUI/mesh_preferences.htm b/doc/salome/gui/GUI/mesh_preferences.htm deleted file mode 100755 index 024d1a50f..000000000 --- a/doc/salome/gui/GUI/mesh_preferences.htm +++ /dev/null @@ -1,309 +0,0 @@ - - - - - -MESH preferences - - - - - - - - - - - - - -

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/note1.gif b/doc/salome/gui/GUI/note1.gif deleted file mode 100755 index b53e21d0ac50a45e36c9a7a97049d81d7017abfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1505 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 H@a_KtedGHD diff --git a/doc/salome/gui/GUI/pics/choicepage.png b/doc/salome/gui/GUI/pics/choicepage.png deleted file mode 100755 index fefd66e3e3c76af9ed88bcb1162a8cfecbd6dd2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21317 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 diff --git a/doc/salome/gui/GUI/pics/copy-paste.jpg b/doc/salome/gui/GUI/pics/copy-paste.jpg deleted file mode 100755 index e243122b36da3b8d46fdda1d06fac4c3919a85a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1199 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=x!!h1+3etpY^huOZda>b-NaJRbpMPN z_w6MyGa61#-I2yJ!BbS?vo+(3`WwIe|1z1}|HIt>pP_Tbv&&n&GomuT+||;U{@(i5 zkp;D$qRk6_bUn&VeY0f7{YbyZZ?4y+?lwt3#g{z6nC8}>a>mDYJ@AtP9Z0R{VgH@Yb z=w^`Txyp6B4}BK?@Hu+hW98|@k+jS_pbZxXg$rjU|YZuBO}oh2M_X9$t?(<@}D99wfz^d{r?#b zO#jayWxxIF{9oL_;C$fypP@G>*Ls0%u>XfE+rqDX7s?9qnXucUcWPh6%D6ShWei_N zNuBG>To=h5z4u}0k&chsuDLPvG=EX4Gksit``7uutn2?Xd{F(*aIF9B-}HY?*Z(v8 z5c<#X*k#Gn9diBrjn_^t7mHeZ$=&SGYrTl4tvcZo(RrbpQ#t;*R=8fO#qwJ B^Rxf} diff --git a/doc/salome/gui/GUI/pics/dumpstudy.png b/doc/salome/gui/GUI/pics/dumpstudy.png deleted file mode 100755 index f899e778ce5d3dd07f61b18942fc1e956a2e70ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22049 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 diff --git a/doc/salome/gui/GUI/pics/exemple.gif b/doc/salome/gui/GUI/pics/exemple.gif deleted file mode 100755 index 6350d1737bcb792d83d8db55e36d9e44185c77a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 zcmV-C1;hGBNk%w1VI%-10QUd@|Nj86rmiI-C1PD@!M(>(PF8qwhOMZ*Gb&d!F+w34 zMlvl;my)repR6w_SAuuNURrk5)8RERSt%W*cyQB0K66=EY6k$<3INv%0LBRby9ofP z3R&fRZ{sRF00|4>|0ObS#-UI;I0szVa z0ImfA;spV;1_7-E0jLB5`UV2`1p>tcVuyTH*a=BYjzbyNG&};D6O%K)!<$Z4*;>Y zTzh{+tFUf0HYNA}321Bu_Wl+3{~2a#7O1T>={Q&v=0Q>y` z`Tqj^{{xDR0{#C4`~L*Hzyy?-1^WFA{Qe!-+A8_}I(d2?+}}OH!#qq)B4=nt;Nh~> z*02Bl0Q~#_`S}3<{{jF10{{F2|NjL4{005}1^@pB|NRF4{|fv13V3)1|Nae&iwXbz z6#Dun;^QT!s2sbxFaG{Y(b7YrqCmvMZSnAzI5;-{`vCv>1&W0O;M@tAl_~l4a?Z?% zk&6IqYgk)W3u0XwE-V#;e^R5HQZz0AeS2>vAOK!nSS20-QcXD#4FCrP01pTNVqRLp zzP(96KL7v!A^8LW00930EC2ui03-k=000R80RIUbNU)&6g9sBEB-4qWLjnpTB4nh` z-LPTv@-33cQQ(16>1@%$#cH0tjvN`e+op}0GHdAypp-Zu8!Z6LrU3vaYG%X%x&X`q zKrL6WP(Bq}&?Su)G;`&MAx()=djUgMvE5DuLs3kiw5ACGHl-P zp*1*Wm9V?tguUX2vH*!chzJc5Bw^1V2@4eDAV=;{0&<3O01~vIaF{TJ5I6|Kr;b24 z%|cUYmH~*JW;|Gg=JBJM5G7NZEeS1K_LAA5zX%~O?>uj-@lJYfg=zP z>Jz?E_ntnyx^(2tcKq-n@Xc!M;HyXf|4kfwvmb8+dU-y6I&Io_rCQ!3rql_{}86#<#OKHQ4Gv@39 yPAU#zDeSNT0RTJoi#Lw| diff --git a/doc/salome/gui/GUI/pics/geomview-alt.png b/doc/salome/gui/GUI/pics/geomview-alt.png deleted file mode 100755 index e797b085d3a214c0f6f26413c7e19326e0e7138f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73865 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 diff --git a/doc/salome/gui/GUI/pics/icon_about.png b/doc/salome/gui/GUI/pics/icon_about.png deleted file mode 100755 index 5ecbe66245ada30ce5437905e0322ee48aae34dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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/import.png b/doc/salome/gui/GUI/pics/import.png deleted file mode 100755 index 5624f0570b5a149f4ea056fd46e5d0051f181d2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40393 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 diff --git a/doc/salome/gui/GUI/pics/intropage.png b/doc/salome/gui/GUI/pics/intropage.png deleted file mode 100755 index 143d8d0b09eea8711a3a907cc131fb09bc8a4c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45062 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 diff --git a/doc/salome/gui/GUI/pics/launch1.png b/doc/salome/gui/GUI/pics/launch1.png deleted file mode 100755 index e181247f9b5a45c21e357f0ac9b07054df8b9d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91068 zcmYJaV|ZoD^ERB!#F>~APHawW+qP}nwlT47?O2nEolNZP*mkntoO6E9`@gRBX?1s1 zukPxqyYH$MsURng0EYty1_p*8DIuZ+2KGe{3=BLL2I})opRs=?7}yUmNfAL6i@>uD z_iP>2e$e$aXRA!!d6vmMJZyo;k2zS0)XE>==!&!fFqjaY^)yHtiiC;8a}bu)y3dNm zuo8*_RsqOL67p3)4Y#UIT@GP-WR$|=U3Jh zRwq4b#@JzopN|dGxKbX*!mHc8obqGKOP9V*{62Yv&tv6sJ~C zjYNpL;<+y*DvAYB`;UOse+6KJz$-IOMwI>k@T&VtGf4ZYMfg6fi2Gl6(aZ|0BLNX(iX)sT!7-L5Z&rLuoX1Z0hCddRqK5|wpTFp8G z{W7TS{0mfmyV+#r8qGX*!TwJOT5XBtSo$ahuMW+{#I;X+A5ugi3>8`JX_5q~gDsLc zR5_)fH&dVzE+W(Ac!&2-RaP}lKS?QAhN-z+9VHRgWb z`gC+~DQYE;n$*)qGk&wQw};MeC`eSH9+em;fngozrX_CK>Bzc4No$4;N{D-KBQ61G zY-ks4EXb%%YSaP^;E5qBV0wwIITu~!eDgz4385;%QGG@q_hUPzQfqqm0P>vf^N;u zAV-EQBtkqKLkj%pq$w+{3(*M?SYT~{v|X^>13ukC%a0PUPsfhb$@h;!#!dYbr=-Xt z)Z!#I-a!H{I7qj3M<_IMnLbCn=0%GdK^T+n{ECWp2S|WUr0j*rjPcyBteHe4vCz3T`_>ez>$=|Tgf-8Uw;gY;2OGb10fhZb(6aqV#Hh7{c^BTv z>4$&^UjM%z$($E66+X|u#g9%jy*C`P8t5vI9FGEfM zS^Mr=aQohn|MeVh&F8wO`y7JFfj)$F9+QRHtvTOqt+Lpg>k!R55yQzK`JZ2UvR|8q z**rIIbXylA;XBy3mDdVSp>Y8bTDOAdon9;O)jlVvPSd3jVtrk(Uy|l5vV>k|fyv-4~ z{QQgGu3onH^@AmiR#(W^_r3n~V(S7wt}D^pp4Uy_c|g81-2ct;p?($N&XjtiPIw%O zG7V@zifmDU;-BJF0E|6=N zzHn*iG4`X63+_PCOe)}MIWCi{0Jk~*ElKfywL34L_gP%_b8J-`C{CZrb4=yKYkG3s z>og}OyG>g^qX;SUH^08l#ADAjWT_m%IH7$<(29Or{6PcvV=5=`kLCJfE9cu)r~Y0t zA%A8t;&S}>M{|%$t!0iWq8@06<2>a1+e4)_cI$Z{F0J|oCa%_}MZ|$tdDma6irCtD zRT;WArQ$>|Hu4B^@HXQ0olrktun#1;fo(fqfO*fCm?L@jysexn-->fvI?vGdS?wI?MWa zvpzR@=!#{&V!Hx-8S8(kT=~JT5F!56sX=X`J|OrM}Gw* z)a`R!`ba~Qd!;gN<@V`&3-uf4HR_Gb_F9zx^?GA`=Ccek;->QR_s8AhbG5Gp?Lo%m z_)&tz^Sw~6$ySt=X&9!Ti(l6*sWG_U8$4m1GbXDhN|BR*q-7&+bxioCm z8ZR4WiB0vMSzdJPK%cqoff^qP2!G5WPV?VbKX6~W`?~Txo=_8Xf}pI#rVQ36fFmZ> z9v=nz|IGFwHG`=paoYa_T});*-E@cGjN6()?s@LeFS{U z*&ZGzq-mZmEIY4j;A;)SE6Q$8tqHd0#R>c58Ti9Tjrph0rn`h>Z&~c#@5S34UXt;; z9!bFfc}mmMb-uZZvKjZa)BjBS+&^a+kbELZW*b!!uwMl)d?Ae6*yDRYcS?A}%^O^q48 zGgr2614nfwRKmm=KfaM9jiM__NtK`m%P*k`A%}pcN`*?b2VK5WmRx;}_o1IWGHaPS zoKbL1A2&^^9qd-ei%_bpyO0n~kv8RfStvU`I`R;ARbPAWONDkCsX%&!q$k>*(m(G{ zB9jhVxH#d_dhE10{B#^maTg-(X@2PN6BR#ZbU((f&@zzEtM<*0a?x zxoM6KG==Yy6yzO_42{cwmm2Q>;5?7?E~rY_IjZ8yh{90 zy0`}4l<#3bkeB$8zbC*J7xVh8$@Z*wjo|HU7uWNGFuw6UeCptuKNq%--QS5uspISF z;~xAtWjQ$_hY9<~VRLueQwK$)kiS5N%$RBaslWLlNqj*|kpy3Qf$wwGY4zjweeV(X zaFKH-uXvvuZl2raa}#G)p9|%t_G5-Rhq1FPj!&y>KReNWo?8O_ zDSFhCpO0vu&3r{a^aWBjM)ZiR(iFg639_*Sl`rgKc!WUe53{7AQmf;)B0bHs`l$`unfs>1g2t zd%p)!J?)eF=}$=cn5Dl{?EE2D>zD;TJ`%HRnzIDxZQ}o#oTu}W?h3d@@JHl0f5Lx0 zQSX%+Zx+tD>rV#%^z)8`mlp@CTOTpXa=DY=^PXw*o>r6haLT?}=O7F)zF3z_1G(sH zPfiG9J#xd5zYIIp<3kTeGAzt!)Ga>8oa(p!W5rQ~ij*n! zwoLgK3+E+0p6n$T1*^W(rmqf9-{rv^1|Yd-0HwCe=TI-qs(6GDL7UsE*KF?!1`A|| zliQhu0(W)t+xG52?ppKu29n#igIc*M(BR>+@32^H`w6Pqq+fO>iYMZ#G0!j|SFFCT zKO5LE;VX)rj|J7}dU?}$`-Tgee;cq3{Je>76msi@cJkhG>g5B0$74)2h24>MJ`Ldl2* z<_2W^3(ee8giHcWObXOx6LbGPe5y1A47*d4i`}4vFm(%?M5$m$8XmsMc6Ixk<|b< zgO}!t3E!7i8~2&`FdN`JN6 z>i+KCYuE;V5h?B`y&nhQE%e`rS%HWLk)mt2MHR{( zx5rzJ8~yy6mrkE%xJVK4i4ahi9FHnfsMM)Nc2;c)Qi#6|Yzl|q3`d3^X{3eD;EXpq zpuxV``R7cxeYm<~c~PoUmv1^WchrRY4B;rav*m#0tITGpJSv>$zTY1vd`StD_kC2Y z<@fJ2Z1tw3@(NBr9EP9mwzO$my6!mXjEIJFUb{pkKGSsdk^&7jpld) z7yR?lC{WoB1vw`C4~*oV5AeH~>r#Ww&LxgqnT&_NU38q%e_UoZS!R04Y`tOlpF_3n zOxHPI*D>s8=kbdhuqMfJ`<(CTK5f)YZx^4uj#f_Sv-DKE8~;wSl|x-|oW2@tj!X>TV1OddqKDV5J$fXMmfAS*0)HB;u{G z`}XP%JA5z@m{0z;{=TL(Jdd>XoA;4#`SDGDI%BXp{ypKjj%VbE$(VEJN_$aLK0w>P zJM}&8^%-hh^|JSR2zMfzDN*&9%7(op@L9T}+=W5g9v7P7bQCM?_S`;a_}<^^i%C!~ zZ);GM-xa5xk0<@$lxf5rHW<0gufFy?(2ufgZ~SPzXLz6+e|TPQ(k`cNFl({73y zkg@zH+tXIXOU=fi{qyF3+GNu*{KSOd8xHQfrH^aSEOzXXl5DGO9nJzfV?kUZL8=pC z+T>ztnloMS;riOcpMTL@b@gr`un~vmo@6qYq$-stLmsC3xb2qrRFj_grMA}q8p2`D zU2p&AmVfM)e%rw3-Q~Rw1BIf>uU}eq+DW927wA~TciVj!APs~DdQ(7Y9|XU4>GMn> zO>v>yE*NxDO}(ys4cLx&CwIEFjZYYfH=mnmDhJzV90br2&;)xJ^WIMUB((+(Xt?w9 zM}Et-DUX?G>AR3Wj-UdA<-oxLvB^@4tZd2~&A@`?~tK zS1-UGbRu~`hvRV_$4#i$SJ(TjSUSa%sWYzUbD31uc0@COCCVF@wS7jo8I7FuBccsd z8Si*h;a>kZMHf?!cJ{h`uVIIXjOY211LkY$=d;hx0cvKr(NrpKyw85-$4aiv z)mrUW@43Oa@OR#JqVIjXxlhw>uFk5e?TCuDi$8o`Kja%ONe87V>`9tC`JBJ9Z<~qN zw8jQ69gq6c0nPRE2Ju^Ugenca4;U`~AVEHEd2>g;LHuUiEb#xh%}aKG*aGd!ByDk| z^}d~-8`ey_`@fU+KJ5?Qsn{IQ*H*XUBdpur0cnkrf9o(!JV=D zdF+x2>O621J3|K5)g{YuMV`B_#%Hc-O+EJ`aAYK&`s#*TVSPfLXLmoZSqApT*rm#>1(+P@#tGi`?=v?Y6B{p}s7?u<9%c$nx)U z)+c`f%DW#ZZ+Rw~5OY?$4fM&V;@6Nqte6va(>`Yy+AO;3ml)IA+JAr((KavsmF3HH z0me1=c#$0+WSC@{KcwnD#NS#jKaeJ|CTl*;P?1_KLKUBl@Q%j6BX2|#mYNSHJNi=f`ZFHQsOb zV>TYsC1?a47n)q?JFqOtX1NOOZf1Q8?2eVU3@7xk8h4+gVQ9`J+8@4+&U$}b1~40z zwH6+3oL8&aGut=KI*)L!~6tsyDs+{+i|h=pP_7CjL2yZNW_-P!d5=AmeEegQKGDkeb^Hsq118S2s^; z$!Arsli=9I!5Mg@cXO3+u95c{A{X4qPfL? zjaaBDPMLp{$mAYTdQ;E&*KJn@yhXNJxX<;weYq5*5t!$ApXbO(GpuVe#1>nq)olmX_^NWgd{y8dbwf_(_FZ3c>s=Uq)7r4%eX$GLLh(DANvEB{{*Pmy!K}@bl zrY`$j)sDcS_x#~aOJE7Y!18Ww=P7FxO)feAMgC(4)u;5!UrL!6)>1Ox)yJDhNy_W$ z%3NJ(s?_VqzX^vRhZss!s2D9&s?usTN9gbk>v^Ax@~IElB6W=tUgSs*;+{CPsc8Hv##-`_&gPU60+BN zKMTegV?Yr28w9uME=+DFaTUp8jAj!S#VIcC?#lG(6)MyzQe?E_MsvlIK3Bnne;Re| zK&L$P-N&MfF4f-qkAbf4j|&^jTm+c28ym7EsQO6NN)_82h-egYCh59v{f)X8K1X!) z?bo4(f4f~*c{TWaX7Q|8{^fATGgts&Xoy)u4dFJzzOs#V>~OmSuE#DoRAlh!Zr9=7 zhfZtyhqJS+T~{}LHJxKI*Z*<9(a!kMx&Ujl#fjO8UyFbC99#bG>1eHuceR%XW9jKn zl1$T@Z5GP?75mVg+V+Q5sqqGF3^l&9A;{o#?sSCT5_$r}I>U{E(*I+`J54@!XwQ2C z=3o9b282oO@%?j8!VJ5l&-&3Y`CP`lXA%F`#t~dMZ}C-QLA*P?MZd@BxpSHHe=R(8 zMOura8je?uZ0C8#xc>^k#%1R)UI7D`hI#!b(Z(|Pr<(m0s)fKWdWQc7(wR97MFpp) zSg;g&fzAEH0Dl`;w)yPFGc=BwFMIUwCl4$qL77*#7&UP!D_ zn{te3J^v141f+a?msaHcODXE(3+voA`>!SnNtnnX$JK6%8{x9>O z82mF0;fLs@NOJH0#Qf_2PJ^hYbcfi+9(?+rIzUSQ_wiaj6lmu8{eK4z9pJJ$q1S9+ z{MO88`j*+#R;@XG~rq!${qtOmz0vUub{ zF&NMc2wE0w>>iWcKpBr+SdMoW0OxJYWaaq3>+x7uc2K*!4S!jrq#^1oo0Np4ELQCC z0h0T=ov5zva0U6uRH}CKGDwjmOGfEQMELZQ=k9y!(Yy#l1VcO++53Up%FCMG zeAe%D6Juku&2WhSr#X!a@qOoOS9fXOG#_7%Gd}>U*V6zIOf)o+*p7m|pVn?@4mbJrBBY0Fas9uyhy~%vwY(=~HKO5QXjaxG&PT$}U zXLz$iY~|nTFMG)NEp8Uq|LCjc^16Pz?(=bYHM;($6T0|#mz#}`HsE_HYkAcTLWE|3RftQD}rtvo|VH`GJwJ7LWBNg)^mdIC1A4hExk2% z=T}|aPToM~7s}Nqzr>yC#$ZqnhtL)VE`w1GI_Yqu{Vj(-PJN>SfBUziZ zgSl6|!n0Ixn1P6?IJpk*j^m>%C9me$BmG*Ivv@JaGYM+(F1O) z(P?33R_Darve@7AuFF`rxUHy-8%0;Wz1ptIQD`mCA>c#|BNn5S+B5X?+DQEU{J`aV z+M`C>1L6r;GgrK)eq8zZdEAL~barwWt!cS&TngYgeb;e^w5Lb3wACF96_4Ai!LS}N zLnWQ3YF7HYP&~Tt6rvdNP9I9Y9Myk%Gk)MWh~e;Z>@bwEW;4e^VkY$KbF$Zd3v&s; zq@Qu*QN+~yaG^rrb-O4b;AQw6Xa!Xu9voESy@_CcurF?zjBwH#Fhp0rNW+c^X%Gla z?s;Pko$_Q+Ld{UajpZuTXG{fw5(~S}7@4=4#VL688yXK;n?V8&Z@FuV+S<`TuD06f zW|PY{rp<*JNNpyM$&A~nvKo1iUct%x3GidOuI_C6HFz8`m+x;Q`(iDEtoBx8*!)H8 zLPNnbd-J~;+6Gn?=*l&KEL%ER*7&X}4_qk0?;k>1sB4XiT8gyjutmrv7>Q9Zs@U=E zLPg-xs~P}N?2vNG-vIpPMHOm{=0yqVBnLE&v_GzBZLnBt07pFNwT1@Tsybe+)1H}o zJr8{XE1T~N%s(_#2<<7WRmN-VwOlu?baAPhIL`^Jc-a;&WNqz19nkh9|AZ@#I?^Oq z)X_fymV(F$5~MH#$QTtIKB6dKX(Y(dU!=9#5kq$(uG_bK6>pSjeRvPnz*g zD@<_;=GBp+8rw(J8t7i~O>F4Q9*gbRC~`?8g_;oh66V!B_tYbg{N&LS zj{c=aup)vnMnMrmD8CS9*fp_oq|v-5)b=rsyNQ-|oD9xuM1xPwjhS%MpMlFecmJ4Q zZ#1a&u&HwW53W7E*-J#~ng3heGBBXX^QE6A190k?)xxFC;&JZZx7YL9y1|BIAh6B# z?$Wj!~^2s4g z0?C0au|Z)u5=&UeI_&|&d3uvg&U!+kh_@t?lk@)MSG+i4GAn0*UYc+m^U0v|*189) z3fEHGnwgdcgP$HTe-(iBi|S^=`l9>!-Vv(o$C@M%9|<0paw`P>`M5%Bu$==Ppntw~=mC1!qY%VS1_FXg_Mw zYFrIT@ASc9a;>sk2bX)zUU*{yU+))&H-O%_d#<(WuOt@G$fc z)E_;~_ZtYhR6AS6U%C8cf0LTgWMR3&MNw+ovhBLEFRcIVeqTMzKk@H<&S!djo()qj z40i_bhnXF-65xW5OY^TY2Gta&Osu=glgqA#b*8A z{m1$Nk?8P?cV0ncn+4Nueukib+$8o;Z%Yln0b4q9kkJxc6g)_v_7wAzkp-ACI6h$U zkBP@~$G#(R!Ik_C@U-#1HBSCtnTCy{_3C2Rk}Nh9F4F-ioUvS?op;+^U(0m0oo=^k zngt^3Kj-Bih%9sUA42s=|F!)eqP(VO`d`ok>i!?d{sZwp!0SG0rZ2ZEZSH3&-Td!1 zeFJW7mZa-;Xx`epU3I)atg*Mk{fAT^Lm%JrOziEx{)bCHw0|-ES4Dz-iHg?s-^)$1 z|AXuQHy4|S?HBFKHiP6bYu)!M@Yu!ccSJ%I*=g0eChbm|l}i;~#@fgd3P5`igS z#*-wd8jAZIZBrJX^aQZQju?s40i)(<%T7NVO9CVU(SJbIiC>N#opc1)mld94OCiS&PSmvi6D+uf(s!{97~uya7;!K63JTsK@_1M+>dKa z(j4{!h6;lhE|hsNNd5@2%`Pg&I=KZ8mHI~lq7n@)K8gf19mFaWyyy>7Ow+N{09Hsr zjSKRaA2VO{+cnfe$cRzhM9OtjTqHP9(#Yy*;b}5Rk{61V;4ESLh$C$3eUYv8yJn=5 z9(+2KlaO((na_pu}4>qWx+q^aY#0qnRn``-6%{wl><_GOh`76F>jx%`$W{(KC|8ra|j zrO~pcCV}=n6tO55EZfK`m8)QmYZxMS&XnqSdrkDN zp6SIjiNtznC9aq0(mHOgSQbdtn*rsKUyCk7@6f+c2a;ygl3{S6!&gN%50}~|KSgiK zF8^IL8#PPTPzfq@w_rG&@h9@OZ~BA}4xI}$sIXiPP-+h7q( zKO~8=rKMgGY0QdpvYgN$#cgCU7hX4s8mSl@qZlcZh9Np4il@+FmgDXroLNDr(G8NC zk&LHsOoA0*j?RKZwnQ4IBQ~)|rrR@=M9?kbDnCLm<|cAc^b4q4rEF2V;=b7~MhOg- zfN}&woD=YUD^%H1CF}c2D?sDoO~HjK;d7!yUvOBUnkXUK%`egiplxhNueBzD5J@~i z_=`$JS8Qr19h!nl<+_E0T!LQGD6VdvNE!8rMAf?f0dpNsXbH=lfzI0U-9}r9R?Wix zwEuCSZ30SYdQlCbJ^mrf~b)sU%q5=l?3ce@0r zke?zX8dd&?DTY$ndMH}K;eZiMaDL94B1I4xA}s71_tJrvp_AsqCHmXdkuH)B0-&_4 zWlR-I7BP@+T0k59Behf|xvaY(@ZsXihA!_@iCmJKgsf7si_0a&W!fueEo=4horOK! z_9|wPcD;C!j zTZxfGfypdSWhhFKSds)Rtuzr`yByMH7$rg=p%QJ{bvF#n<#rpJBKiYlSZqURUo6Y0 zO2lP&xrFdG+A&0-Mk$+8aWEXK9;|#v$~vjrtJOj3R~z}+1i13=+)-g2q$EGVt2Qi~ zNmnTqrPbV(=PZ?AMf34-l5w=tz@Sr|C>Qr;lhJvZ!wFp*tYY(vnu0rAD43H=XmMsU zF2bMyh!WKY=&L+s$onKRf zZ3w`@V9@Hrj1kd&72CtVffcN<{_cm2{F#)*Ql$1qhlk5?O_&>mwgz!z$SHJ)Baoa1I`Q&|8Y7p6}A<7QJmxj|U<8WNj%mjTG7>C?%xB$Mm$ zX!-x>&xcZ{DDax942naeqJ=dUQh=r*{>rynHSx6^A;j5$;@OL{D zHY6mw>IyH~t_(b<347rOHd6xu1A0m~LFTP#$hp!t+@lyBu5+&6Az)>=g)Ao2A^QnZ z>H_D*UN|_z3i^2R%9u$)MxEfq4tXJWxEePf#bBw0A=g0m4xc{SH*22cz8j#HjE)63om z`KdRyHmr>xbo<1QVl2 zO%p$YqklQzu65SE7AkfKiKN3zs`~gygi?}te;ZoQr)`7rGvfD|K{G6PFEgAW==5N1 zzdF{5p@-$O0wN?vU@*K~T3tz0Mjp_dV{FC}CCD7JNj;Z{RF8;k&Wo29W!tMn6mA@7 zz}=7&RT5OTt>ED!(J>_g$skmQhnLv~Q)E?6w_~Q0@f5|WZjdX5hG3DYO_aTQsy7GF zgZ;b16ASl5Sr*7f%+Nj)8de+MKBDNm7IG~3&ra`V1pa!@2YhV{wo|*T@%qIm@>!t9 z>er{lU=X`#@)KxjDN$GmRw5J<5J&8S*?*y{Q4DO*1tbs2EdgDyED2U(&c#&5Otq8{ zX|?2LW@F)8^*dEAV>j7GHXoL|*()#vk>`|QHPFOFTs_6&2xiki!f`D^k;^F&^?C?V zMUl$`5&}X;wZuf>T8*h}tI`SsZHHpbJ5j!iP>Z@xl`hh4yLhCiyDHhxD4kIejq#Gc zC5Yr-RpZRHBO=4Wjxa_VLrbueqQVy6Bzh9^R~<|3Ndk&T*cMP#(G}5m$?v zV^jD%zDwNYFR~a)OB`l8ypggRCLS0el?+zRgfgp<#TxI|gOA5~|1hPx@Jt~xuoNi> zfq~Z$N~%xRNRuUpyDEy1!dAFrv6jj-O(dUKVlwMwg6NU`EWAXmp_@T1$R}ml4=F6w zHcX|tYpx~D!;Qp<`Ez4M`DE@H{SKS!<(5X3}NyOO!UR3~<&J5f6 zjT&1`q5Odo!F5E$`pQ?7?HpM&C^ssfismYMp3qqb#Dgndb*s(jR>myUQW@ zyUj`lk(TP}2VyD7l+SNA;Di;bigXaunY1@gM$7*jAXJRWQ7JSky&Wdn#R#EDOsT1Y`X%*>(p9sWVWJ>Q%Rzjp z=$J@Kg82f6hd=(|1RQ*nnX4U#Mt`XGGz8i@WjQZoVFy4=Yen5nA zHVA|SZNyc1qVw5LmQ6_acLnLyR;7aGqA)gwVqCZz`Z6)1!Ml+hs|9B_d*{{%^8H0C zfx=v7;hcz)0JR|XPQs*Fees{$G18xs*{b;EkTeNob@rPA);xXcnG&ZSF@=i~_`Sol zyUC`sRQ1Ioa19SoF!vNs>5mv^r<) z>53W~@f9ga-jSt;4adWuW+Ec|QKVTgail5H;RGS#WcM^w#&CW|h+rFH(OBq`Q>z}G zQO(V2j6WUIaZurEr_Cg8J%ab}Dg6;NE8i|*`2hjDL_CK&>+PZ9o{FqXCW8F%{<|*9 zyK$F+F}#Hr{F@^A4?TBz0R!!)G|>`t1I_Qn%`;p^D>$-)@!tDyFe#WC09j^b@ty)m zibT;S3FZ7B!B# z&`T{1w(z#0M^b@>TcT@Gt>3fc6#30idDG(aoGWT-%kX*(*+T0&uY4pkQ4`ae zlYb8dhlGk|6z26yrBQlmHbxSBp(#dhcOfd*Aiyx4UCAJUQ!=sclrZJ(a$+A8O8Z+p z`Ztbl_9U*aLRF6XQJ*j1bue(m)+E=7q zb}m7RMAav)?oyS~B`k%Dg)2#9jyQ#A4Aub+Zd}Wo+~l71g0QO+ybGt}_a?Js{_g5> zZ7iLs&s;QFg3|7nipF?am8&RI>TYvWFDb=H7E_j<1d+H{DGm)-=wW~)DPGbj#42E> z8#qw;YUH|wCMAqq*bSx<0z(2LltPFkEKtGW0V`;reH0Rm{7KH$(~ie%Fnwv|xsE_mr13iI_l~oK-@0FMPQ&1T73bI3l#~FTS{P zR@z8?K-}WiEg2X;#M1Ydm~shNo3-DLHY})X02IG~Z@@&3H06qmSATA`=yl2|TIr~rU$l-VBc z){iqzmixRoMtY0{5F&f>aVhzB=lj{u&;Kcy_)0CLgn7M^q9k#4qE96GkZS-8h2vMc z6Nw5!R?!J(JSJ|W$~Fno5k`0p7&VtXY+Q~*14$q=`^6u5zy!t#g)EBf!|ACb zam6TL5Y~0$(tL}AGj$mhPNjBatkQE6mMCuCMbm@I%dq)mvj#Ld$J~g znec?zjP#EfmOI)+o@zX4?Jgr0;t`RA&TPZXvWu1CbQNyKo;Lvo3jL2N{ZQ1Gn!M(5 z@M+ELa30X**)E%h6RXo3M(3E#5Vc|CwwpK zR+3H+CT9bphxm_>HFT_W#2T(ia)_FUJShygwzf(k3u^`<`ZlcW$~A0GK#DF=Xdfc# zo-N_@Cwa{aAu0j2(X5@MT1Sb^l$n`NV9S}}sF-0_j6f_y;-c%L2~FpiDmo+|h`9UH zjx5F12P5)?TYBcT@Zmzb(cMV@YHs_q&3%5}(ZG53NMZ-W%fU*kepgv|7dYR&kyu+N z=@FzNsBD7-1D{aoTu+rOX5>j!K)6FSqlIdP%MD=&84@UuO|_mPTU!vO!i5pPL#V5l|kOP6`fiwj~(5#jY)lWvbH5=gP zx_rsQ`y*yb&6s$Z)+gBQh4`HQ-z#glKSHD87<@+h0yjSE!4XIn2yvzsHT49jDbIAW!UO$M^g)|~g?^yxlpE5wWQldVoHWWvhEmOiqJ>nMf;t68;})&O$E2#d&^ ziNrcv;+)CgYJ-()kMIBF0ir2Yjy7j7q$1P2asSJcMBhgtE!EL=ch(&f3 zsz^FoM1NCl6Gw<7h2SeC8m#c?3c@8)8$iO&tqvjT-T>s)sGZyb2u&nLBVwqH(`kA3 z>+^4IozTP+32_T*Aad^#B8eO40`_CYv^HSq93e>2*tlSJ1uCCGXWc8#q?&1)kKFFp zWNbgsMoJn1dS%+YyzpdkW|VW3O+;Jw{3n|JV6k4s8775dI7-_UaF{B$Wl}) z@*V&*TDa;uUcm|OXv*(#@7s91bbjn4biUgWHz>=l@$z%-FzntSw&CRYb+Z%vWzF_V zUhc|P{E}A}rWs}-M|ff{A-d)8%}ClXG6Svh7xAmHJNF7SA@FvK(MFA^_b%nFz@@pQ?nv+Y}-p6dpt(vk5Jm0cQ zaUTCrw+^azx^Hir)WCUZ&k*_&j7W&|%{Hn>tO42R6tMdpohhj!w_c6sb?|2#A??%E zW=aYVQw+~)6$)`g_eZuj7L%Ci5L7{9*o?POOuEcc30o-5c^ZB$Zanw-n>Q?RyHO`{ zxsn`v*k+=_-DtfHhQtKo{g+i08BFmB#0w)hQHjqAszT_ik|qPrNaQd=5j|WAHv)ZY z_X4Lu!3%=?Fj3jwcHw>Gp}j%Ip+C>hnV)MgprtYEeCQ$AjS!OOFXZ7lr6!ev>P4l% zVH1%(jAIH2G07+oTTHhxmQ+wsK_qot#8apofikQmE;(1MEtL^MK?`A4Uwt53v0u@H{_u0FR(=am0%$ z<`t&n1>!w{jaIoZHg~4AdRpJ%sU|J>dkE>DUod>gMtvLdckqKybUzbU1XTlgdY9EX;j zqw&97d`YLZrF;&4{`OqQU*zj2XoF9+fAfIi5zF5R+n31dq@%jlUuC+Fg1uI9Rtn_~ zo)8;Z=xn2|?RVRR)#VP-UM?JVKW?e)!Y-hx!`VY=%c4)4k%wJLMr zBRm}0j>RzUtX}ei+~a@>>&jh&&^?V%Jj(8e_N9t}Dk#UKMZ8dyFO9Hbw3OJdpbc1} zj^0IyC~Pe0(_83sH8^b{L=kb)V{g)hx((ygQ_n+d7|KsATygsY;~sw~LdMvzo+GFE zK3Vp6S|8Oreks#b6=mjc!*u=v1;8sPEjK~|$Z=}+q$zYq9&bMDJV#JZiDTsaEBf0@ z)EI}=g5oKGkRWYqNHI|w`YMxSV1=^|kGIrg7F9HV=Il7;!n*hg5#$CgDV0HzU^(Vl z`8kdqSYeoKh+P6!MPQJuaEVQnIu0MjbD4rBVTn&)YoM8PSQ=}zWb6>Kkjc+_!O>u@ zzfZ;memlR=Ax$@wHRM@mDa)t`2e8%$PF&t17$3YQv6SmHcxt2YBT$70&-bzxA32Lg0BL zKp7kyE#m>*nUCBFH={-s7Se_m6@A_8o%3kUTvBhV64aZT@-jAN#z&`QNbq+DKVSYZ=?Y)~&V0 zu00L?;dZQ5S2T?My}CYB>>eqfYv&322w7>~TTyZ}ck4TQ{=PP?hnh*BRXcWSGd=Qj zroPIlCmS6b&+t7f$9{1mN~pU@7lpXinKm!y`fZPhkU!fj(YMRV01F(eV1`{oGJyu> zl-OEAN$D5qT~1N-N@2e=lqT>nzRw!H^0LXvSc~O`n(`;rtJ6x#ax*VekhB@{kHaJ{ zQ|Z!Z;{#}SO1SR=#e!K0gO@|!w#WA$sDgW}ANSmEzjft4-fY!95K(Jv6b+slCf{|`2 z9o0j4@&Y<7QK(7=N6lwm~1M$z33`iWm z7_Q{5NA3N7_r5jp?>%k$5`chPjNCkhYi@7%{%=S=cSZbr-Iu=6^TTvx3($~EtO(k=~ubg&&5t^0`Mf4cP_-hD!$=zRlGBE>}l z_KrsxmLH@$YK_;LtEUzzjX8W=CR#s+`GpDIe@y~}+tH@--ct&xIengpe0c_s;7Txt z#o)6_EF|6vd^3RXy*=U9LcK5z)J>aeDE2u?kvX<$7WKIrJtiNu9^Bt}C z995T4UR=HNzr)i{aOKO})=_`%b*xN6OB8j>jsQm?L zU*ok4$`}|gQF57PH0dohULm55rfYj*Ox(S@01wr)WTG`^PtJ%NhoT@A79~O?i>U>V zN)SwqH6C5HDDiA#L1kKeFieULi3VcgsM<|@AcV0(gMD9~{9UTFFW z^cL;5te>>3f8H_s@Be_Je2i9tQ~^m9LQO~xAB5Ovk)hHVU|FE_;7#rnyL3P zQ-Yu%NS^Bku(@=U5`{?-*LF19C7(U{jKXY5sps%O^X$cEltg~;Xi9Qttd`HP;&}Mz zKBAB5yK^p1Tb3_AqwAJT4iEX@zx$ZQqXX8P=UkkALXeh^{_J1y^l$z%FJJr;QJOpN zKVbge$3)$+U49DIarcAok>mq5o2Piyu{`?}+b=1PAF?>Si$CvBTH*RY>pb(S;PAcs zEWYz&mQGPuQ%)ZLHD@m`IDYg#i}@j&gGf=-XstLrm{F9TM)GV^l1-6QN*GaS$th1# zLWwY)Ofg<4RLf@F;zQtloj5+ai#1yk3GX#UeUC$NxVXhy%d6iWw{aV{aT~w8cqdJ= zB?{K$DmNr@a^7>eC|S%(UTzeVdP=d}vN>JS^*#fQp{i~K8vCr*_;_T4cGHIYij7E4 z;W(~Rjk{^ST`|515#v4Q&(GQRA2PEgKDt*#_Jz%cr25*5#()orx-uXdr41!Q@BvBL z8o-TW|DEF)kJ;=T*G&TZ@qK2{2HBL)+x3Bv24A9>5K+{V1E$kCMX56zH9$L~v$n

NF_sL1hSAC!NjFo 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 V?#}S`6jJycKA@tQxKIDD{{nm~h#LR^ diff --git a/doc/salome/gui/GUI/pics/newsticn.jpg b/doc/salome/gui/GUI/pics/newsticn.jpg deleted file mode 100755 index 94c8ee971ad77ee3d385eed1bdcc4c781dabe251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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~>;* diff --git a/doc/salome/gui/GUI/pics/objectbrowser1.png b/doc/salome/gui/GUI/pics/objectbrowser1.png deleted file mode 100755 index 16ab896a21ecfbfde70947b74086b95c1d636478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10900 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 diff --git a/doc/salome/gui/GUI/pics/objectbrowser2.png b/doc/salome/gui/GUI/pics/objectbrowser2.png deleted file mode 100755 index e010ef2b0f355bfe72f08ce2ae156415b1998316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16560 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 diff --git a/doc/salome/gui/GUI/pics/open.jpg b/doc/salome/gui/GUI/pics/open.jpg deleted file mode 100755 index 5829aef523cc7cacca1697127f7feab94a69e417..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 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%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 diff --git a/doc/salome/gui/GUI/pics/pref12.png b/doc/salome/gui/GUI/pics/pref12.png deleted file mode 100755 index 8cafab810e6091eb1660a669c17b268d20e15b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39991 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 I(eu~;50n>k_5c6? diff --git a/doc/salome/gui/GUI/pics/pref13.png b/doc/salome/gui/GUI/pics/pref13.png deleted file mode 100755 index 4cfe950cf841780d7bd446dd47a060aec8148dea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19006 zcmeIacT|(<_b(cCl(E4mDuMzQkPa#W(si%}r1u&XX`xB)1jmAkfQBYD^iEJ9p@a|= z0UV!Q9eZ~O0AJ$h{X`2v6Jg$LYv z7PC@^=MtH$6P{3aA))YKby7o2^+rliM|I56Ixm%tDC4Yq$0PZbO)g%%7&sMY8oVE@ zLoY)TRyW)l?5dr3{Vp+Hs=FgqIfS(1oRs2*$jK8*fHpHjls>NvL`NJY?6pQx5K~Qy z1kZ_$=q{5)bU~Yo+H%V_{SSAjfxmxM>Ba$>B6EED3jakga+no%K{@}G;EpjdL8h{J zY3Uh7gH$Vnx~`5%2|5UFuzGK0@@_clPId7q#S$Y$$huD3{iiH}5IYck^mSpOa(8#v6Nj9dc@U>ShKY1+5@}L59TUul z9LfXiRW`h;Cq1{BV$v7y#!E6MFB1+xAfuTRzEF&eu5k(9oTrkNrnYu>3%5w@0;3S# zTj;5js;Q;b{gzuq2$}%%t=_+1rI7y61fHaOO(a!w(S=3@ z8BZnjcI&t`vG6m@cDB4VV}uKQKN!t;YU$*m#-G^wD6Lme`$~!e8C2rL@{h4+qEf2b z(6?^~@!JY?GEUdDr_LauFCV=XuiHFf=rj5Bu`5ms;|i@VtF|-eEt;9&HV}r{J1zW% zh@gvp3HSp6?Hkt2K zU{WICJz$sM)SaunQbn%GzUL!Xb;-dxA*aPfrI-(y<4MbK8Tw$5W?6QjfO^Om@4Wau|MVZt>Z`Yu8=LZG z$>yDn3+KRQc%r9|7tX$`hvWoxdvEnP^%j}xGHCs#$)O()3Mep`xr3Dm6uhsvKnZhx z5Fw-;9wmJGm+y;1$BjyDRKZR$^Qs!O>2;C`q5sV*3t5M-jugc#{Pw!|)vH%2SmA+z z;RL(C$ih&Eld}7ZG0){)$XSA+yGByU?t0`yYW%9977`|| zJ@M9G%Bbp>?)TPgk*7Yu3JJ(4SgtqBLVsk)iVt==zg|Mas8Z)c9c<;5+Rm(PuXCW` z$0*m+p4D)ePwH?QwFcdc(&|wM`)f1Ji@z@reZN`vd`$C%K79}qheRfoL=mU-EG*V} zmn6_te{OFqn$FLe9kemgVxZUH%%)$LFmy&Paqjb4I4-jy_#SW>oA{%`K;PaL8W+W{ zFH%aYepLkz#XoiMg2m&EtdX%FV(lqpxVeLA_ax1;k?Pra6W!exN%Ur5WiZOvM4ev$ z+cj6R?v-WB79b6B-kTV%Iv4A?1`&$o+tD9}2=797$21Q1arO5LGE93+3Dm+-K2Jq{ zq;Pdg{76!@K5jj&%ewOA1LW@3Bx}%no=^39zBXD3dBjzuyrV(}n{Sx>h!r|oVZ(I9 zCt01&@7#DLt|)B%7V4C=Ii_SSa5nw^p;y!JEZ9a9b+9fCiR?Z->fto7#Y$Qw@C%2s zC8ekG6;s$snJBHO@D5Pf=XvwI=EH}v&GeqkjhYr(`|k_!c4FjY^!Jx{$h*J9Q&j>C zY)VbV3R(*F@$aZsW5&Tx;2EwWLP8H#=7<}(xoM90!LQ`9?0~(6^pNd!F=64HpIF)G zWoDU*ltJP?wQJf)8C&y660$f`HT(*czc*uAyhL&2)?AA)*Bo;>l_lhH<(jb!VOfw_ zYa^UWpP?V-qEg)JN;w41XYmsjjJiKGZH>|q)Ln-@=dB&1$g{sRqgB^G$-9kYc*IQ8 zlJ{!UN_2Ybi~bf-5#pREjB%A!M&%|4Q3M$s3NXiU<%kc=ru`9(wOA`cLiCrCM7Spo{RvvXZw&p)8u%lt+uw!6EVj+K=P zR<^v^uWo4mwf)341nDNpf9DcCcSQU3fKD*nnYs4Xa_Kzs%hB zF24Uxpu2yX&%3UUcqz-C;_VP*_GMhc95pb3T3$es$Zu5LTGo?I{e}Beo3F>HC#b=T zA-g5`n6C$ym=?H0STWyCB6#DvxOFgOxktvlED_O6m4 zJ^s>pa}}wrheT{@EYjl%&_vuuW8p?Se}!$cZ*PgEDY?eSaC|PrmmfNaS@eDmb{|EW ziJ2;Jtz>RLH^adBin)7B`&<>|4Ln z?P@@)uUqwDxw*N^F{+!T>cq#;ZW|Xdtu8!bs5pb<-YFu3iPcrh3Bs>z_{|JqV;Q_3 zc@L{BfY#oep((#;q9**}y#OQT2Ixm1xB9!jzFk}Pf|lXhtwAu6sl!3z>bIhv>O zyPemq2fE_upSlWTk^&cUUlVqNsz>}+U4?T^jXjf4_tdW4?xfKs2b!KYEGMl_3&wqt zH!v=$l3Qk-9<1EemRneM6C)Ucef}V>t9npZIMl8A&gOr5!4a1dn;jMgfp(3~$WH}X z85khXbB3d<%CJbo+QG7IZ?sF2=@9U(YA9V!tt2K%-WMB{^6TCPOUgn35v|jlCSBnw z79>xq)$J9AIx#~ShKlf>iOWy}xW&R3yLi`Mfp-oFSQc?B+Y>#jCbf0-M|=H5<=QQ& zK4o<_+p8DJ@=snxxhIQ-OWfkjvuxQ#bcHof&%h_}KTvYZaWX#BOBRY&#*^Aw29GB8 z1*EYpQHbpTax{e^Sc;d)~FhU*6PAl;`>QZ^gkgsA&yc>1Uc+N&0 zzq!EIZdtba7f^5|s36gt5X#~ix5}8=>j0xcPJbZH7`Ao(CRa^0kaP9UVMko*Ax(N+qdT@B*Np5bR&85fmp-Npjc#mFl6u)uSmhjd*kv|FVh(jX1WIUDwLzMg_ zZ%5K#g}J5<6(MUs^!XJ%?>IR*0W1do*L?8c=U78HV|$TM6c|aR_7oUqxX$F=(|(c;s zAN`RR;CG0g_ur_y{sKBhIn;6`Z{;kQ5fY|yV}AEB)-^#$QMR%pRNJ}j>!+hPh1g#R zILvvZBd%9=e{DBXxL|YRD?4!!)lw|4(L!43#D8OZ(9`-I#i8=`mMhS*Pk*t;6OTLvNAJ! z@|*7uvKY@o)0#;;e=JFdN^J#OjcDXAg_>VAB1kb~{(6zEyjW|9LhJ?va20e#D4sPO z(SU?$UUo34{MOJAlJHW+cfH93bw-=tY!dP5zUuW>&Lz=mGK?!BTg74Y#f!h>{Fg?L zs%Cr2c}=%zdUeP;bQs~D%eDrcJv}n0xS?r~Q!OoClPK$Oa&+J5ejw~V*Arg!Vu5Yi zIbPW%WbBFg2=#-y{_2QC*=6RkzY5Q@8>cnwlx7O|p}$GoHkhiB27XT5*@X0fQ?12; zX@rEpex3Z|6gquL+PLGVL1ITD1m+z#R|E7a{&Epcs6_%5Jks_Qrt)%Q)pYh)@U5w% zQgL%Bt4Ei*VRKoZE_Rm549b8h+HlyZQNyDSS9TYQ;-&(o?BobjUjCM#u~6P_LPywUMLb z-piLXaqFpN8}2sG2o~#!@eYC^IGYlVMK>wv3NtwAJhS{vFm6bivPH?Tz|DPFK&&Iy z>%{h|?(%EA=$Xex)0J==C@hh%Gv;Yx`;4o0SP#$UL_-O z`m{B%*BZI@=ng{8ZP?7Y58Yjs(->5v0Yqrp?A^)DUDr<U8@c)-_qce{>%c;2K3ma|&XQ zb?f5?u5h{J)VIX zF<-%mN~Y7R0gOf@y(Z7}sOzxr1LWGEELqNe{Ny&H_4sygRcLyhS(!CQbd&P~ipi1U zG5x?A)AHTzh;{z=aYA5;vvot31@P0A2HmxRAyjxI?})wtBCjdB&W2mvtRN}jx7pp$ zlBs1sv1?-5sNm&tofMt6^3oH2;R6%-Hod9t1na@ReugWJNLvK}-Fh#nrsmh8acF-x z)^(`DjjVL{&YgVCIB|B=5J3fJf;<=K%H;fZ;vU1luD=7QL~qvpXshjrEx+^%bPiIK zRJRXucQs&g8<{PvMd-A2x37MS$@c81hgpze_oGlBV^1XcEvPCGZG`J}U6Xpd$cWw2 zT-IverGuLshp=4{i|EdlZYVMv#38=D4tV5SM`sRyXwo);pYNI0n=2tJF^5L@GOJ+= zKV=bH4a~HWgZf=^OU`}8o&0{o8CufS-_iY*?l7E+nwrhWj~|tMsIe(Jd54ajO|S8x zX(H2t78J?;6On^ub`k7MHI%hgU|w#2R|ySrltFw@W#Gm_2^&v~=%&RsjD2XH=uGt+ zDF7SgQCj~t>0@PP_9`VwAOl$C?goq>% za{!Ojj#7tRyLOFF(KFk3VYmR}+z($G{o1IsclmylW8=Hi08#?j5V+QPKOzKuu-(Q% zN|`?)+akfZ1uL_PX?Q%h^u<4f*`NdMN*|HJtmNSbF&o)%n2q*}z{;OPvVBnG!a}bV zVJFb2NMRvih*SVUx7=ZsbAq z2ECF3AHuo>mbJpEn8%iL_| zQ7%EX;@6RU)5<~e&V7=Ms_O7R|NQe5H+PnTyC8j_{Jv~1 zNiX@c{40SOMqn@Sk;iL;(uE3aSb^&tZw_#9ieA5NfY@C{9pw*tyrR^>J*xlW_3;Yl z4QU`ni)6&F;?J~ir}Ts`^m{N{!J!A;!@)=-lG-|ccO#cTpB z+Hq)Mf|=%bdnE|L#jlio<)Zeaw-P->`_CjtfEL%UCH4msl(*U1VNvxgbuQ9x0PN z=)WH@WNiH{vBsGkK72Uorbnib6Tr_(fosFzC;)D8QpB>JYC{KL)Yjc=e5q<7gVGZ7 zRh;}vKS(l{gB#Dk>0Hyzm5`R!(aAHsA1%;sQkgDC6jq!8W58|K?qS^fZO+NN{QQ}r zu{tk9@cP~9WTtLz$R(yw?lrOGVxHe*X&mr^+8sy2q+OSeH-o8i+6wUx*x758^7SmPK= z8eB7lma)$ArT@1Bl7SKg-}EkWJYh6;rCP|d+@QQ#&PuNj6*)EBVg~cdj;lfUf)Vrq zj_w)PZFiC08Yd~%8u4)u48ZLQRwZ{ewZo>udUa&JXkWC93Z=Uy9UNAjPO1{njZf76 z(o(i-h7m&fu06Sf-I{2Mj2WVL_!Qfj7XrY5rDvX>d3MtXALtVl)EX-mxb&6d^vRQ% zJv~OMo1-rV2F2QiZybq4S0_L8UFmVKKDR6zj0eEL7`Z?)jzUr>D5B-0A~dugew%;*Obi0C=dyj&f|dqDDVFB6$*&Yz{*p_k_?Y$3 z&O#o=uhw~qIV>F`prcrCl5>wcQ#T9VpQ8lYQ1n*gcM6v-ex!Q3XDb~~D+vi7Uki`N zc*!TW-$%LjQSM<)A4R_3dt?J*Hv&=hLT$&z3te-r5~Q61f_6u@uZVgd4-OL{saLMo z8hfcHOAsHoaF2c@l7vwthlEO}?t7p}Q(n0t_{*KpG2qrmA3vWE8=IXzdLdxH%GP5h z*T9yHbEI#sW5EK?z=s&ptMV!O3lG%?ugAVegn3R23d)?oRo1I zB)Y4sdu=WcMU7Hk__1!Yw>c5L@|%CfZZiYkS8M(johs+t_w>9ibXNcYBmp46IxU4j z$y}Q|yp$iXIz2;0!%FSjlk8}f>Hjf04=CCaa*HX(;N4_2|RN;nQwLSY))=&A+S%r z?Hw~{wZpM;H=dcQ$0r)rc7Dwm14Dde&2y!4$TcBh-O%y64}H*B2ET?(V-d^2VLF%M zO#pH>r1h21c}Z>kjjDTolmJr?5090tT0VIfv$q`zgv8l{TAqjp?G}DxUG3|>ef^1{ zgS84M+Yk%pM0NA$Lz@n5>$|l+d)0wzr6$FcxS3_e?bhm47@;V1ON!zpR=6`lk?!}? zhg%djMW1tDq)`Y2rEouNWvWgdCkX9%s6dN&ySY*li!qF$iVk8{e>QN<^_trBCcr|) zqMNhcmOhLnP8s0V>1*F7bZ7A`i+1NspNC9W#otrAVNicRyAe}ulDoV|ZvZ2Hl|kDLOGAEI~f-d(oSnGut%6;$!QYHI#W z?{mDQwP!}S5xT~YX5-XR9aOon1s{-^Qhk49ahhiNz#!3zr=_KZ&zp21M6J|6`e#WS z`_9Qd9SEdD7kod8pIGHk(Iapf3ewzH?ez(3_w-_nbG_>HV1IdE6OEva>o)9V1M)2 zUObz1-5QW-lX*S%qs)L%^`l*x0THV#Io`ao6tA|gXAg25OxU>kzB4o6D18vGWvVc) z!39ZQ5synY(^p!ld3&0t5~Pu3wc(Fa8p7KHAI>+5=lkjfaP5PF0K!bp=g(JJ zz<7NJ(o}NR;ZZ#@0+hw5sZ?7-mp8;&1@#K5KjK@SjdMWyYN zju58N?U2dy4tu*SVW@P1mLJ(C;nL;Hy?MHVu9P}!g%N*SD21&9=?`PKjs=(7w^szL z+C#g_Noqy2vyNaPtH=Tl*#K(bRcK0k9jLi zE&I>Y0pIBi#F(TOQuF#4?-Rry*T}V`nS!8=1?mVM7wEm1u@}6Ix+FN1r;GZNcB8Jw z<4d!*cDM7p-uoUqG}xYa?|NBlAo^7#PO=%uM!eL3Yl%yB?ZfU$0%5i-Q5KmU8+!^c zDY%_JOZVQ%mKZwSht@Yxiu0b!{PE)fw5!;>94ODs$;ga!HIR(f+PJ4Rvv~{vlGz#v zFr!wF-`!P)DU9}lOYLWhqF2S!mXqy?%J%`W+^0YZHq4&jku=k5y4*&HMvj>6eBBm2 zwfzaXX8bG25a|I#bt<>#z)r{pIS=S*p>1>2k)uZqXF5{leCN$@J0+DPU9E8vy){10 zY{)aw99>DgqMek@rM{yFpimd!TJoVWSK=Ix9b|NZfQoVKyhO3(;1VbXF{l8*Fkvb# zGhl=4C+D_vv$xpX5P9nC*?b;Yu>NA*D%x6P=2&3gz;dx2NOP$O2ZRs4peS%;(6FGO zU?3_YGSZl!yydh!-dNrA#c$Du?71pM?Zk)M1TN>e*qLuT2K(5ms;>u-hbQd8Vl)9L z@5XB^822aFP^SeHXfr5;^fMJQ&d)SBxVFY`Q5rf(KoGXp=|yM-pI&;1dp~e=tMkso zRUUl6-QrxpOo84#SqE#&2bx*S&4RSoGBiI342*5X)evcdwkiOMG!x)*7b)j5 zJylXkK?=E&YkEVeI=MgPGXSBW^<_I4m|xGvdR@)l?zYc#8*jDMj5G=yA~hPZlO+%| z|3yWE_UntSocFBWaXys?<@Oy0o}Qj*A=x=ObAvyf<=ldsR=4g)oiF&v6=?*zRIqO3 zLUr|J2dQ1kcyMz$&{E`e`qELNuA#j`Q z%1GG01Fb=#cTb)^9p`TTm`5v=_~uAiU@sicS|37YgBtkYc8D5^&8o~atCiB+tJFxg z{b=(dKT7*22BCZ}H4q45rP#qd-VH~W4+>&(5iwpfIzihHcM|_>jwz>Xj0BMuHgXa= z+IJo3#3|1LKh#K)I-)LcZ8pPN*{{GbPls8{UHvLNoCbDh3RI}Tp)@U^Pi%Grw1-Gb zCvs_u9sO-n^16GS9Q5&RJaDChXYu;3dq4X|cz{dz@Zp0CBUlY3Ni+bdbXQl`ii-px zIZ%q&<@30I4kX$w3iUj3-E*-70s&8F1Y#b2-GA`6-%bUn2-BUH(!U1I10S%p=0qOY z>v)1uXR=x>@PU}j%*-3k>yq0}n&xqhBF{j1fN7Lc`rvNjS?13N_@!@0l>%0>v)||3 zBSnYUaH;NmumnTu9%+FF}i_np3ZlrOqr?DHO%#x^IN#86&5%E}-MuF#8a zHyi@=(bm!nE+1f^JWj!h?B;|her5RluPAF*!7!te?88dR#G|Wv#Ykg80a{uQ8P7d2}-C@F6CY3__gSS8;h#})IdX1vg*=; zi!1}cLbk_}u?+15G=B{3m&ZiYTvoK2!Nvj^1I{3L`^Vf=0<3S#ht^x-tnkW@v!AxN z5tuPC*O?XWRy%eN+7%&Fm#^y(TF5rvJX!T#aBcPo!P;UN#(cO^2+sXuQ^MTaW|Uqf zn(Q4!8KO_!HfOtCJ&S+Zvba>Unt;^zmQvsYgZT9F{FfSq=F#Mu3)VQ=)Cgmj#QX?CsF#-74I%l zdmZ2o#f$Z(*MVq29FkgmZ1jK%?4yeY)SCiY$u zR%ewg@7k4lH$n(HH#b*kS&8mLTNi;ir^@It{O@6#AD9%GXaj%K1#nsp;87+6M>e~1 zKu^|?e2_95E|4+Krfd`gdWj4Gy(k2Yw;O=DQUD*qfAd+oV4eGQK#iJ>9E^Q|y2AkrwZ0Dc;Q9Wb_4&@@3d8CBHbL5*ot<`a>eo|+&ojg2e{I8T7CVk_EcpBQXnNX zd7C!xg-ygrfyqx5JCq7o)Xq9H=6fgR1+*e~v<>fkXO&5UoZ_B;q~clIJ;|tLhXjRa z2Ge`#=U1yK!Ib0QnQ=VE_MfF&&PEJkvklyF70cSiV6eDb;H&Jx?%o-eX%T@YUAIe8 z+j2}gBeONgS(13MPE_E>3GZf06EyF77w00=6~z_v4QKRP;R{=MPkxyFDXWe2UebI2 z7u@pQn;-tE3F9w+wf%wO?P<1*=kHSoyM!g!`;%%YFYB!bKe3g)>IYc3#)%UfLt0MP zUj+4Gmd)dy`YO|0cKnHD2UtvT7s=B=_suWVgIH`e307iZj`{|KXU4(R_|%*mWes(} zcu5zC(d}esEEk`AW!HzpBCJR@s%5WMcH%ppiqCb$rj#$3Cv?Z&>9`i#XTkVuKcb`T zUDcg%UeF>Lrg=g3)3gFDt(WorooWXC98PjNL~Tau2u9me(h?|K00TVP!ZXlR@cP#Fn*WsrVIbg#1qjVY!)vG_$o zs&LeOPBtcqd{1ETNZGMYN^r++89D+;2!O0GG~$d@*P9cUD;_tzep0y#@)a6$1|_4v z4a^L5#t5HPWyfnVhX+#g4jwAcuI4__O%j9SQ>5>FmKUzova5YLJ)P{{w?M`TLxEcB z1N;X_S_u$Bok?k`zIeZpfcx#q3Z_LSC2V5s)$7;dfX>Xw$hhl90J%=!_*;=vXU^n; z;zwQmF3=r_VVqM~^!xWl4<5V`n(MqTXng0+OSVG*>vIDB!52^1V=Y?L1y{4*yc=;w zOi9TCv=3G~3`TT?f~X5JgCbPu7L@H4KeIc`>Wy;hUS0v6s$f#Kw*iiC?JI}i17y4m z3_VcppoIkZJkud9ph+#)xgQOD)hFPMvH=2(%MStkEXW;kHn&+oqL5tiZn>qqa{q7p zAFxX#Ijim}5ELJ@VFHe|0^|b*i>24!y?gi1Q0b>)1H+=Dqe)%};QlI} zG`>?I)&Xo~wGDDTlj3!+1)2PRBo@pq0j7TR$3LwJ|NYY1{(t4YO&9AMe1S_lI!K|F z5^Nk(kE&h)X7DZw!c}5}x6laZGzJMDJp|xNeLx@fu$AJ~tGQ-DL`0m;?7} z3gTM@fI+~~*|0AgULVIi8~f(sg9=`O0&Stz(9qrP1lAR?iK8|DB(;Ui)fw7I&>|)} zQNcZJ0k^0IH2_lqCiN=FM{|oQ?C$Z)e~d~LR8`%?1I$;mP(!=nHhhx|Lh@i;2+mq9 zaLqB2SN0w|rU0aU!*lWhP7-K{54EQgl#|v598hzhW~UEOM}>VmA7E4F0I$|zQVEXt zT~t(G1DAR+*oYPK6aal7m6ZTG2m))@|0Amvf(})>n^NjR7~hV{;^0l2e$Bq}1J9A+7xbNj_1D3aax!U&Xm zHhL>a`O1|mmX?V=;r}S@6;s&%G@H$`?kk0<1EN`%t!4+fRMM~6Ha$HD9Lg=bKf_A1 zr#n)MT4F?s+$nWzrDRLd+IPUtw;CuBNZX8aG~=wAmCkcklih-bC={4Z-fC@=Z1Co@ z3YSsWkf#&(h8-5GJtJI^w>Yhqw6lA;M879E`bt8CW zOk7-w*#(%dFE|_|P$~gsc)T0A=H$j{US2V1l4=kZG-}XUfCL0dJF=(B!xqe}opb{V z6bVB+CZJ*lV5|`sbo2G=~4TqYZ{y!C^=yJLi<%ZfIp;?ag})fvu8go8pNe2d`tuMMLqp6_Z3GF zm#YU8vsIyV12(Y&b_5NT#K5*m`0C%@;vlUJB4Vy9f_vZgUN`t{7LjvU=e|x#>1|a)^ zA3;Z!Ky3mB!@O{7tF^U9DC~oT?VD6RxXF+~FBbWN*n}Sy_&?T}2c?AXN|Qe>29@z| zSAe|l=`_ErpLwb7p8ri~mb?{gAnT2f1g3gkzGxPZQiWUS5h`2KoY`7B`t+?h6u^V!~%kNqca2 z1+V%5(1|AN{o`jbAjWm6v|-YAnQgS9d@o$imaloTji4$Uv0&aq3n4Hg-KTp9iVRhL zf|ojCMwt?z>vP(%R+#HyN}Q_@$YDDB?*bf0kU#YG_3gS1+890zL&-Ut zxYaOo&-?y*3`J^isonq&hm(qx9el(p!6V#OtllEoMRWl3$9=UfL2Z6L8w86{Y=c*l z-3_=GFHL61oKeumu~+NxUhy)4+3p^Qam}0Jk|G&{Zk;bXS%NIl7<5v_j83i~KbWFA zV5_~_dBmEZW)m8}?H7xNHHeIx})T?lYmHag0TiuVF?N)C~#MI;i2a2_$d zT+PA`$*#A3;SF6`DmJUT1PTStO=*hqA}DW9P(bd?aq;VS(9+TZWvYbEta~#l9y6f6 zn?npW%zN1Wsp%T?XQv>ws}vIZxG%NbbG2Pz=FR1(2VL@GzAeHDPYHkq%yH4R{kG85 zz0kD&JogiX0Eo(zXWtH6_oXfsaF>Crs42j~Oh)h^u9Xv%m5(1k9)x>)pbN-37W9cs zgGQMS&`38j^{0!gYx{lmtII=)KYxAz756$@=Ie8AKc-Br(&CCtrm;ir#QxH~KqNNtIcQM0+1}m`9dzq9WBe#o z*;#5xyk>h3P1xP?^BMN*^CJ?5kvYV8`>Db>^Uu$23#MA{IfGSv)QD<3pdNg|Yr3Na zR0z`^H**sIz9uLrP?B~_r0sAxHPCdQa#Y0T6PVO~{QKMLvDfF6u%IbK6{Rv3V_x?p zz{YIv&xFu}>Bk70jWR25bwe{v?SlBYeHGGt6|h`48h_gyIeWuVPe*YocGzn}l|_!- zm*oUCWS@i(uY%jKbY*9X^6s!uO8|EV(NI^dm*xsJfWc7Z9cmJw{g6nMA*9UosV0y@ z*UN*(Zyd^Q76_39kMCS8k5tZ2F54L+b<39D|n4<%t*}!M)Aqa!^)HQC*mingSL00xjkOnk0hqFB@`= z(-a0Dk+Wv@)z^1+fBKAD27NL?h@!>CLu)1)8XBSNZKRb%ZuRaj3yBVC19rKr4s*Zh zZ*O^~hbn`W`>he=5x40u_S#g|f7ybk8MMXYG%YMG4GWAsCt}Zmm#xXOu&Sk_)mzk} za!}4oQ5dULEAqQwfwOmgef(VCms&9YFnEkbajE`5(6Bq8wyWvuL!O`_U=KS2KKWOH`%F26ox zOQq~6XK6bSEbvMP3u_-iThz`0)!-dqBbwgr7e@PqLkp#sagm}S66MI*y*k5J^lSNNG<6(PZl6r zFZZ)1e3-kLiw@xM6&I=|Jo^#D7%kNp_fILSO{fI6JHLECa{l^(V4z-JjZ>zRA2c{y z@;kF?Qu*CnT-ttg-l@-Xh4Zjdr|qp}qg z$>4~9c@LKo3uSeL?KKdoNi{RR zdv2R)SbR5VdQ1M87ulu=2HSS9|?%^Lr4m~MmQO<5!khR1-B){q!W`33xp6h zrfrtO`yivb-z3gePWC1YUKx&AhwQBsSsD}wGs_nipQElm{x;%BL7fU2+*os>bmu|V z;;-3~ek~y^S67PMv*WSHV7#C&pWdsndl4g~5ze0!zQ+J6$u7-_w*0)P(e2M*G3hl} zE>nK2liSd-o%j-0lsm$CXo0Z*Fa)v|U5Ul`PBMf%x|RPck$7IrqRT2DW@i&0wz64H zeHA%O&_rq9s|oA>4HCBN+u74-zD-oXwbk^CwCvkHu4&L>>Fz>g(bPUT2)aX?gWyU- zia{`^?L4Ff95ZQnf9Gbmdm1)x2xKCSH6E=MJ8N;>1_eSGBV^CW$5Le{(sc*NFIa`JhQ~dnyp;Y6~sPmosP4ZqB9wqWsH7Vuf_2oLs(I-xXk$_Ki(}` zB4&esuQ#gIS$WSXxz`=%b;W&e|IaBq`JtG29*gxh^Zk%|wI_tFO2PXf4(Np+!^*Oo zL+aBQpUN3f>U9k|>0`zS;*UEPvP!|#Jv|A5%=#%e1R;0SFRW=_Nx2;M6Pz>zdRONT J`p-vy{SQXV2rmEt diff --git a/doc/salome/gui/GUI/pics/pref14.png b/doc/salome/gui/GUI/pics/pref14.png deleted file mode 100755 index 2f8bcfb3c9994bcfc8fb39f939172688cc270848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22374 zcmeFZby$>LyEi<7fS`hOgMxsRNH?gUq@W;O(%oGH7<5QC7$7PzbjP4{cXtlmF~9)d z8t?nr@80k8?DzflcYJ?7a~yi#4%b|>uC>l}p1(L3Aup9=ZsSqmK_HOZao8@$6YUGNP8xeJk#e)8HPU~}5t<@NAH>)uXsGT&1|5+;9HTqZnL z3dQQnonwFY_U-h|x8FzEXTtPJZhpadI}px?74IK9^ob~x1d9asj+OuYtQVeF!IT5u zH>9AMWx74WHR9*jgIFegd$@mU6!bKO5L=GqQ5L{2tBDEGud2K}1NclE%Ekw^*P5qO z5qWWbBAS^lf>V-1eq1`_L@5NH#Si!C>5P9SdDZdaKmPc!TF0;TzBaRySZ>GBldHXU zhlXZz^PnyFy6%of5n*UBc*#EW#;0HGOujO?I6Dd?1Q*a8ZQ=;Eqw<#*SkPY{%^uw> z+c+2(4*s^uGUlNXN;BJ3A{a>5&zkUccvE%jtf#G;m-q1G+pX3Zk9iDSIZHo{M?CVS z#QM_U1-oNb5-^<+J(qF|r#|C{hd1-0;aFkPFQm6|C?$@W3>&iyTVV9lr#}hE2gF&| z7u>22w>r9c7nExqu7w3PKYglFovVvmiyo?Oh*-Chm4@=SYInAbmGBQ6L#3|=1_z2J zw~`c@#l*$;_V<4e#)Jm3(gsb3@yh87(O|JmERUSbR(YCvZ5tN7**o05JO7jl8(S%@ zWA+&s+*0VGWq`FNFcRn+$K%f8Qb3)R*y|jZ@-?T zDpw&aOl9A){h)Hk`setg)UK>=-yFB6v}lyff1LMpb@MvADiaWJ1R8$yxOZWc&tMmD z!jt{7IVKo>VGQNH-MIZow&>ibk=lFU-p|)RlzzS<=0Z@aL})*&uVg^KOxq#r$R~By zx4O&-hV^D1qPWL1@`_G6@tvMxT(|6<(+tN2rhpa_|dLRh>SX_9a-@`N=s8x zL`eG>`g$i=&OU}sO+5+^pFRj7ANZB5l_L5M{%g^@Atb2z)6Xbe1AAUqpWZ&?`h77U zOv~8%h}hP}vBT64)2&u-B*hXpCWH1;51=VXpZ4RM@8rFw(bFU?pJm2R9D%Cc-7Ek2 zF|Ogml8JVi)r-c!+k3ma4Qnn7E+W4kJsRfuu6M2tt3R`H+nx%k$YJ6CsquBbY%NVJ z_W5rtnE+pw`^;ox742WWqR)FiGRgFgy}WYA*qOlGX|klC=-EuQ81UKjC(dcSd$dH9 zGNklFi zW#6Z3wr89ih0}R*-NH29N#N056_kgJ5eqCRWs{7#gU74_*Ex!$mu~V#<%i*z9bTTD5nZ*X`WQBeC-E#6Dj0%unQCq1T zRGSSIAX*7tDV*+p9oL<$)rp=cw{pAfYFCM+ykj**bS53rLXO_2CmIFif-^HSX%fzO z_V)JcLqDXnwY|zk$ii?_InVKsWuy8EHZ~lH-t?T6;j*er5uA;ROfHpK{2&nepQfjy z^D;+q{O8W$*Y64oCr^}F6H`+w{62l}bB?WBRmIz>_mj;3Cab{cbbjF8iCv11UZW>$ z{`(r)v5kRDY~8HGt`EdK7k-12$0`d$Ztby%$ze){f%%8(vfkWM+)6U#0=7-$o|Kiq z4YMN|%wW{9yWMvk+OYBK*qU9~gOZayVELTfPs|{wgLa&8&!1Rdamw1&a2}Lqc8NGA zY=2Wttwwn+(G>U{62Gwj-fm2AJtoDBMYy>oj-bNn#S8l91bAJ;GLpHH_nwT###pts zPX4aWG}1aevS+HNL+>pWF<0yJh2^ae-Da(mlQ^;M(oRl1GZ|*;^?o?`GS3(6D6rjv z(wAEiHX|-ea@qV&II#uLLiH zF2lpi%j|x)rRCU`o65lEeP;azBW?#U9pAo1r=@j;@RIA=a?;Uxc$kP??xkpxJNMU~ zl}~QL>Un)nl^)g6T@d6nKOb4N#Wj94AXG{8nS3 z$`ufws`1gnQtyido)HCk#eR~wPvzwbj+|0^tn-`Er)I?bav~|sGfcg@@obiU7E7uU127y)>*mZ zkU`wnC*2-h#x3PkENZzP*BtIOhs?Wxy0CY+&#>jA4WoHzJ&RC@kyDcUWml7=L*TQ{ zqKGY&w%c&CCW-g-Ii$iP2`uTJnxmp)ncKg)p zR*C3@|Jeu7$TZpIz%vbFo@7}Cg-%VTE75k?!rEQV?nvT7%`OUTu&^8q=jz;!Q}Ydz zlQ$b}?g>0((!ftF+gVy#vhgLjMBpo8cX?JZVLM#C*AwHj6wIt0AYxJ4#K+Os&p184 zt(8fb9R1l`ZjLrtIs2FA9xgwYc3lB$?umGY<`(d%N{NT;igQ_2rJl;LJX&Iv` z+47__C=1%rvQiUkRdv^aL9Ush-QKHwM1IBWz42{@pWW}G7xfuea=bi`9hW>9!e%aU z+RLMn>U$;~IMhO@!AWFLy+(_MJbFR*i+5gP=uLP!sCB2%h`WUk#gX{<_&_Mcpyu^k zDk>_Ek`;Bm^=MTFX*MN19%|U7Xv~7d31(Cg+vj*k05;_{A15I8=pME`mwivVq=v=p zM{&X4TIFGkH=R4f%B0^NS7jhslTNJ(TIIIAxY!bO-O00LZ<08KHZ6y2oXFP%WRgeQ z&xE~XXzGIO=MHCjA8GkKN*0$pI+Mhfs29_q-{G426*mgMx8}jetUyXrPGWUN(B-WE zXMK(ZY{C{ZGP-wjRfERH8q>tR6R7yD3J?8g_w(#2m~Sx}Q@heiN}^Dxv1;B(S4rB= z_{QboliPw*{)1~vVS>&la3q}8QD`$w%rVBgpeC}~bz^1H9U4A2_Xa_@6BO!u4?RiJ zQvuCJ3+*_QyKUlv#PoiFtE(0OM1gV`uwkl@%#+DbV!tDyX!g$T-n}tex?0o>S%UNy zJj)l6t>0nOb(@OMgZmee<{3L9delyoP9o_v;+_HD1a+Ssw2Z#WRp;zUlW0sv@`5a) z$V|MpwsxO|#TkWk#HW`~JX#-K8!KWQ&K;gRu!kD|>hR6VTA5i`a1au9TgSM(4g2C5 z8(y!RA=Dm1%u+aR0}@HM+2ZdHH)$lHX_8l{SgYaO{vWD2AnPi)>Vy+{petb2esiYs za>M+Au0ak}H6fvzWC9|k(qSIMtR%T5g4%f_zrv{8gXnZ?NAZg9TSL9` zPrI;wGAi^J{}7`xFnH(fEnxmwQ`KsC*Db$Rs)a0(P3`9!o@6BBG0jc&?ZpFoKbA|~ zexl9&O;OdlxN-TpzYvL8QBt94)svyYM#V|$f^41hjjA7O!+iCZY*w!imX?xDpy#|9 zw%$sGZU+XaO9a50IUBa$pGA+mC+e*CS9{u~@Buiwpn}1LUWbL}>)Bl`ult{%0dufy zKWo4raNx+8kj8QudQ&Bfx+{~hK8U9 zEF-!h_4ch#$dg}x@dVF~oGX;oe=bRJ>Xl$dt@+&?ijt?H~xaPsB& zrZDt-x=O_>>-anseM#Zr2ze{&2=tq6rcBl_D0hG$yW`(OFzp^5Y_G;Jz##m}*m3_s zKwFz^WHW8<>LclgI<6P%>Ml2)wrtc2c5SKk8wLlzW)pUHz3JbMJU7AJM}ljqf}l;m zh6y%ivytx5xYA%<7uDHuQrf54#~YzRNXGRm|F5L9p~14*F}xarZ{NL3=T8y8Jc-Cx zQtzn_`q~h*iphg%Cp)oc^fDgDZxPT zPMTQj4Fb#G!QMKUb1ovuMGiRZ^`fh6vj@Xc(mUaczYz6q>E}p;={1T~na4ZhFcBQ% z-l`7x>7MdTiaR$f^z|5CZB&JFy(u?0H|lUu8RTsn0qX7){zXtFA8g!FSUMUtKqQ-I zu)dnCT@kaN5fgD;mtJg%&_jIr`c>HXj8EMA*yMO~TK2bRJVY4Fg~P zKtr%&Ehfu31!sLqa%=Mt=ZjI21KA3RMin)2qvG)Emn&qW{W;deGfAW`7C!L(1odb0 z-Ijw$`sSGXm%d|FGds57b?DCIg;v@2<07M;4ig>+A-0ugUZle1!NDXidUU5T9vO{6 zP!|{DM0N45*7Xn6gM>Bat`1(4x6~bDiXNvo+3;ArhCeUgub)oYola;xylvTawSrQy zxN>)~XehiCbiCrt4VFxN+P$vd*5uwN+sn~1biX<~!-j@lLy_}A3gt|V^A6zQ_c;Y` zeQhdQ8h-fb(Z@RP6Q{)p!Rnr^@sgnJ>6*o@t?ssHMg=}~IZ}bEFC9Bn$%@Pj3_Nth zUh}`PR(dm|5);V-0s?cOoZ!GLiEx9LiYjU%bRN{ej~ zQt*5Gz<1xYQ00|h(EPpQ;*V)Yi?P|FLe38u&NceXYZyO z`6BhkS3;}$-NOojxpE!qIR_Crg%V!ZkrfO?wDacdrI_lmBnKfOE3W|u3gZ8r-#Yoy zEg@A?fenF&QX8%naumUBlTA6fa&?Ta3ys3D#jtYTAvWMf%!-G`HAp%sv+G0cZ|)&f zAikD?bb?s);=On+>j78n(NWj@!AW2ES5@KOJ>0IYKpy2>|$bKR!0ly zuU)(L%!-_Zr0Lf?oVCFm0yMtf+uH-mNo`%-+ALhsb$y7H@A&u9Fbq^j>1WU8=jQ{) zZI~q_GMbvCQv~fJ4Jpuf^}E@*z52CqfDg9)#Zh>j0`VG zfJWU{K*h2dE4&ul{yry%#keJ$HMVMn*;j6_LxwlDa)Il)mqruswH}R&9t#7 zR3O&RXY>V&_Y&bkyBcDyupb?tBn0<*YV%>m27Z$5D_cb#UP*g)h(8N%pVX(Zq-~Ck0ICgzNjjBda&u zso%FZo`kh%5PNUZ)Ju?gxgVLY%cNF*j8P)BCjff@tA`OWR$cK}x~VSiOh**NPFi-2 z*69;J0XxwSz+X>|j-WOIIFQfjRE66)j5NX-ZOP88r8Zu-YoL;9Z?3wjhfU7wW5;`J zXT4)qBCJeBD;Cb*ad?WRt!1|K)mR&!MQLSl1_-9!s!!?fb@dUp{mi;Xhg@up8vO3~ z)ki}I(VMAkq4@xvJy-j``iShPWeOC}%BAZ=C<+ zxY#n~ydw_Lot^U<<+>viNn<$w`-9kC6Y+-@{iNCn&vTE#!dFuGG-8i8M)Jpx79UQ` z43K5ANmNZN3kI!lrj)pCY3E6(N79LhcAGUe4!&y)A{eaobguQS4dcHu&-6@?<5Kz} zAJ3*+>F`ckO)Q&*VutD%hBEqdlT1!B@gjTUvmQClotPOksISe3I&&$l- zgRa5eU6f=d&YM$~&b6T`Vp>r*lfiE<@-&Oy&NBuggwoYIS6#PW-dK!Acs90a z-fgQUZF+R;7NY_+=JAy$l>t2g^lFi>&hEfHo>J@V82*`TR8MbsI4UP+Tx|q-mXe3u z791@KYF?s}>>b0SAfAhA+=DGXKPoUfO{uF|&k#>k^o6ev{hW^&#BEi&Kj$aKnZozI zSx|Djb+q-JluVDK{Z1sHdH3^7zFrP&j=*=x%>CnZg5w+-?X#U z3NpVe!S~;_dx1oT=|Oys8lU`@q9RXeARqp)Nw1{`&XUOrPoJUza4d_mS*}js z+puO8)KwPV`KcM;4dXq_s5E}q+m%AUE9moZih#sK4OkIx6ak%3+t;sj&4Yun4}a-t z*4ud28bMP*^Ftexx$W_bYo&hhZ&iCFI3rKNgICnK^@v_vqH5QSy`W z__JrZZq;OTPLUfMw)duE4kG;+XUF!b2Z3t2Z29|UEPEhootZhiAEu_KlqSDq;zI=F zrRHIc(~oH}fdx??3PvxUUx*CjTBxL!3!d&Z3)b9BlYs#>u_-_96i=)nQ>Nzt5q*Fb z9bKJwuz1QxTyEtl96aZD6ya5GN^gKm249~4I`o`8krB&J9bHK@h^px+v(r!Y^;?=L zsd}?4kx)z9(@?a1G!z7?bAd(yU5--vmnZMA4>v}mKrZL@LGIcdu_$MR=j52f$^#AO zHa1eXDj#eCQZ@Wj&6(B@m;&Jx+;7dgQ=&66dV&cVi;q+jbSxkuE~^b+o`nU6g)xeY zr>}IUA|@Zgg@<5zsetN%jIQ(!`?iq790c4u>($ri6n?WadPApCw4w>1?iU+2VuPgG z=G-f;VdmVebv$a|_X>qJmyGMKYCfylHg(M3 zSBUYuxDc8a;ak{ng-6F&HFgd@m2G{F+TVDkL5*oKy(w~h;TU5U0lT;T`e{OOSi6(W zlrRYP#Pst8$alTY#8`8la;%ng#k-H@MBH{H1A>|rt2qxOsDTip>ExS8>Z<6!$U>~^ znkx9Sdym6aIZbJ4MEwY9*!g6kmuZmy`>S$JsbQbGU`h9YOt%&%gUr;uqaqTas5E0h zFT7a~NRe|o>qYa4j6&&swXZlwZ|jKLTQ|jgpQXHl--cD+oLPNQli(UWLz!rQMekc5 zhRgWQ!viJQ1o-7oEB)GC3!HC$RI$0+$8{{z`$Y*KwgY<2bDu<(CEi~ayl-f!ikadSp z(7v+Mu^=KMLSL~uoU2hkD!768y#hDwB>P<*gyz19iHRF>g8DO*nfA4N&!Ly6=G7lu zj6rg|e*HQL(wVcvl`9NX&;ieVMT~O-&pyHX4X$=4my2nU%C(j2w}xP9A4WK}uPKc@ zqwlIOzC1zL!dr+)JTR}lutG~ovWoNPoRrE*JElo0e%co^leH0k&@V`p|@D`YPA_6U)gKrHfnl>fg7DQz?02NpVs22*!1q}q-({IUT+?&kYKPK2As(w)Rs&7x` zbMumIx2d0O&|hWQ%MyQaZ!r|0v`Ld}QxkAMwVO$Wrw>yTyebRDIk+6`R6G9lg*I;* zrBSrtvLU{En%C#HGm~Cg%GYw`EM`_h8Qb18_v@YBk&I0E%2vhf$`6)I2C$jDj@G#y z2c++wgnExGE|gM>*gS}3R{8?0gVMTe&WwzVDs@MNFQ44*-Md%2-@z_+f^ud`Y3vr9 z?TTSiu$ZncvyK-&aCSso&D88ffBfj*xb|kX?=w@1J=7LFx3c6BA254j$E6E0>TcYw zLB=K3s(0~{@&&z$id>K^xC*kbKg9+j|F>ERtgz;%=bw(lsYN4C%xinwUNN5T_+54; z8bIaZ+0;DN*K+o0bH9()alq7`$RR>h5yFn^KJ`a%-Pj`EoeIfFb9TX0MWM7F8&|*a z_>1#pqvY5KNduqv`B54zSLtI#ECRjAeQMqk4jtc|cef=?{YXsBPEX(8ytnq#KcRqS{$4fT0J6hr4vD?R3hS?L#@X zHDSfoP}dM`V%Hy1KVOcB=Ea-!#9P9$P3syvDmI{;2T;-Jf%l6!J1ZFAx0)_kP~F$sHp`1(}^9B1o zE{JCqldD-{KzvuD_;2c~62l2B0VUamFgQQR%-2#D>?EJURiRaD|hd zw^J^QFS0MVtJ44etdQ5{gFos51<*4{VTyJ}@x{@jFY*{-=BqbgxvO{X-;Dj7_&6ju zZpi-{X3}NPA;U0dVyb4g&*|`hfIAmqV-gJr146 zr#!AG^mt@{#Cc*|Z4|%dH=i4<=-(I8^gG|T3$mqF}Y>r3E$jlsQHT;v1m>AO^ z2!|s&_RC;L%)_rPxKah}S5T)1kggQ|FvG^c__Z?hL=v**J9***-~_2Xp0GyGW{G+4 zJ|fc(qtL9I>Uev4<7ZRx^QnLI0;GQYICoYHz3?LA(1bL6yeH*xJZ@fcBy7=l7lKAN zjq`IE-rJ6}^x|H7%c@ur(Y!s^FtH(TiZm<1aJ4EO?)jb{o6gqzx@=99WhFjF2SJuD z02DrtA46)~wlLCJl5guBv36Yog{Rze9K-4*IJ-wsNJSzh z%k5|Dv#GoRu=dR0vgl%eHd1ANp*vyChK@{~WR~5p&m$I25t%HkthoLlC8jCm>VDOOq5#w5n8Cu zol4Fohr7~*W1oeQ5t5QNe`yX&;x@*%9?4@>IVWXTkF!E0(|2*Gorl&|RhAl?r+bg| zX4icKqfx1f2Z7RnNzhkft}NoVDGQ=%ZK{fwm_^AYUO7`DJ%U;g#E>-rH9ZPkbxUli z0=882P~<%j&9)p@H&v(4MQg8Cet-ZpNH zq=glKm5Ji{bOm`@{h_Z!MtNXxut+-}te8=m_Ca|5CvKJ(Y0{b&6kuEo0s;xUyAI$& z2Xkb4Q%eiR?zZU8et!`CwMUi<_qXXh1V0v$S|6_VL%K4=Qzz|f(m&eWJ6xO2=>wHd zGL~RrzHLe3HCL+l#ju&G zj1HoQ3iXyJ#s>EjVkId1nTtTYk2f8~U0GD$q&@~3+M)<>{`hJ?-^=}~&U;mIs+cAe z4VXM)-TC)>+;AHH7+^Yp%NmInGu{l3=0YeWpi!!%Kl z599d;w(3elYBEZth4-A^XZH#Av|#X)cR1YW8z(&q05>KE3I=!v59Ae{+4=DnTGj`c z7pNkjd}2Zhls(fUQU#ob)ikOu!%6r6-ZNKAt9R4Xi4Vs^JCCNd&IjsSO!U@!<H^m{{uZ$*$)*W?RIXJuqc6%F0!}yO? zRAM$-Ok>;Qc3w0-qa?ojU8=9SS|MQo=35hH`s7LN$&9zlYF_{-O%kU|#MQxy38aaoQ9U@BNYq=Bih?|6u2qqx9K9MhpQB+72)b;I+hO;zlYxQ$pee=h`>-+d zRTMV_cgpu<8s;1&arWTz=g%{3Tv4Z>w?OWaD#g<4QfYAjt{zC38f{1t$ zI;k;Ig>a|Ef_3cNK>*jGG}+imj>k3cT$$q)}S zq^K3Y*b2p$LkA_M{2Y^kWZwDbFH+x!0DbLD;9{@+f=*9t)gfx&3hAbZ2mdgvOfwqJ zk;p!bgl0D_wPHb_T7U3SFsD|nqh}Vbm($U z$f{Xo^O;h>hN8r*8)FWr_-12;hT|Q|X+lp5^y@5!f06>AvkW53Exrzv=^;O;U@V*lfF++#ykEMXxaQg zuKxyDiJMbZvGMF07;h>je;B|efD*%@Tlq036Iw0y8y#(gRh#jh#`km8^W_1v_BdP1 zSp!)Nkhfm-`oB?!h?17W=620H6avA{rXaAl)S{nZBwwes*7E>~T#PzBp0wvqR`dW8 z@;XJ}D}BSiY`2jP&H#W4#FcV*dyDDBy&f62+ydq&P6PO;=^q(XI%g%tcRR$I500mOMUM4^Y?F-Fe z2YDyc?z5y5<|Fl4tNZ7Y3|hizkqUQ0fX%t;tss40ur5T+e_>i<7x+J_qXiE^F6MGd z1r;*kexB~x@s`fI#N{bUvMRsR)^tS1(U>jQ`r6!V6TIt;s48a7JNJzi!mG-sK=+|z zux?~rgF=x#o_@6nt9ovHwn73~Rd*MG8JS?7n5kVETZCz6!rleJEO~CkbjF2Wzxfs; zJjtoN{k8h&Q|VBpSsg6)jh*a;a88Eioa^;5?a6uMf}YCq@(Uo~R)+oH9RRHs$1m%0 zTK3msLBKZvjXh7D9a2CY+*&Soe9zUt(QLqcNz z#JHyML`PpzG`cgM2r2)7*RnUImfSRx6)nC>jl%TM8v;NS*9^b$B@$B7XF$r*Gl&Di zw0WQJJI(WH?d_T!31-ElkLER_Iki2-%bn;qSA0ddG%{bkdUcDE=Y0^J*A0JMV&+Fq zL$W|bNwBnku{ds?!Kua}kQ$MSX}>Z#JWE7FlV(q^wQLjXjE_}D`xp8sIj$-5p*s~O z3(M9V&AsbZlP&^vMOrOubfFxWfsv8r__f8SY@b~MwJN3Wc^YryN)2$*&jO9T%kUG= z)9l1B@r<@*=~*3;v4`eYZZ)*{gj7wUbzN=r^(!P>LQ?c-Bk zQHzL)(fIG~?iyX}tSa{Fe5uNv)q@<;_hshy>m1~f10w}2pjNqyR>sb)u^M--Fmg__ zg{%+=8dPxABN;%9a2vOfteGL+8gbuxH&f?LZfz$#Ng@!GCtyF(1vbWQ|AK;o4fEGS z8)}-m$z0E^L5>6atbX2CueCLbzE@rFz`EZ@c51i!Pfc^5 zNAJ2*1&Jvs+fi5tT7_={ayj_<;~kA#_g1cEnmRjgws|}m159yuZ;y4jGP%pFBzGsK zoYewfIKKI2$9~PFutDI;^74mqo1PMaI-wV^`)4z3^>6Dj@j@#;6;02d=L^k_GLXJt z-;IB1HlUxjL_62X1vi;%2(Y=ZWbfDcdU~3eiEiT5DYv=y3Gl+ErY14e3Nn%Plfl1=g#?rCkLr$=)P3cr(=YYUukb&{{KH zoZs|5FmT}L7?yYLNXrFB@c<@a))G$nI$u2=;769;y_N`C86O`pu$Fs^t>)~hyyp1V z1hF64>$gZWfB*hK-}gu@1G;WW_E1w6_+>9r_zZhkobl3BUm3Ihs9pJZq-}E40oR}J ze-*{!Jz@i3#qXGG1rUl4oc>Rb&~gJG-z}1gAJ5OvuUy)Gxrmz(^iq||Mle2?xkE{* z)pJjs&a)1Csvy!J1HoJ1`%0gdj$7nyb0*?qA+I*+R;<3aUnhtm~!%XF&JvD9`l0WiwX4SVQPD?O!F#k>nZKo;;HA%Kts0x6-$ z8KD%2PupP}CBE|WUfeE4_g&J>e3zE9#qJx!oY0Nuy*5_RgbJvFZ82B4K4{K5?b6B7;n zKSqBPrHM4U;&~bO_cRPMDa_@(NNqt&AfQ%!*RK=Fgr5D#wE=J?O~RK7AXe*wI_$@p z626sd-%`f_e@~A3$4LJ!@;;!$dc4q3D#H}uD?OOA^UBhNSq18>*R%f9-(M3y1HJd> z@t(&u{6Q*}giO2WHyG@s|2iBHO#SK~9Z(O)jqhh~n))8(p@HISeEGTQ*Cr+=&w}ov zKS25zw>DLT%suam6mXddqwzk8|F?IFYcQCn;6oMgR7LrCXrx zk5yTlCpYsPyh|24U5Ygw$pnLxHO(SL%4ezPYu6s`D|97`x4Lc*{ZO5fT!I3j;0_s8 z3rJUxLhbxCQTNEg!bcFa{4ibZhHiQJG^=+3Dn>zWR9fylXG%pIe>oU0H#cGKa7ykb zaCL93O8TQEgw6ig!$TK{k+Cr@0Rc;v&JFj#SveaUn~VcC3-p83@^5i^ovgnI`h=f% z>BbLS0>D|1n7{kp$pxoU)ZKwlguch8<0mi!AISfPOU!A|lbiTf9ZWVrgczMUa9;7= z1JHIrBj(ZPDrWfm`twLCIiMs00bxGGQMqt^Lk+YU^ndZZsX-*_y8arL>r4yrcH5Z; ztviON`^(QF1EV77 z%96=9-#?^-l8nC~! z_Cv$NITB_3*aO^+vFf^heD~8FxvI2lF2ifzgRA1vcOXn4dsW5u(9A3p{b9r3aWqXBsF% z5Fk=X>FTECatH|}6&bey`dmYx>npnU7R94aQ)lWJJ1e2*I@2@a-j=`# z+86^E->4Z6G`Ql~2%2?Ke5>P+aNC-QPDzn}9OiGctdv9C_y~AWV>abR%_bDji`EfL z@Vytz#DL_(jJdeDK$~)g?^0eWKa7&T>&?MRH_$$K{C@e6akN!ZYX0@z3NO6p*wM6| z`9(_8I|A`lkx|YpYTy~W(zZ4=EsYC+aFdjjgh-^Huqx#Ys;L*~i)+*@cP4^_cCguK z!ZYt6x1g8#wpq4D;$N=9y zE9*K(xB9WN<%6BL=_ab4OB!nkf?zkw55+i1Z1JyapVJX9^tZ>^$%ZoMYgn7eX9qGV zteBj+zTtcHSI|0x4HO1b_D(iFzBpKgyXkb)Msd2|vO&S_>UWuBaccp!pRWzu2bcgk z+THKu;`KVTFzZTsGHj)$H)-R<1_sG(w<+}35dqK=Q~!@K{%gX`z#mCL`&qof^g+QE z1=JO_FP7=KRrUehhPkw_`VvOQEy6I16S?#nFc!c9G45J*Ykz}ZB$W4|vsZ8>@qeG_ z{$J$6f4ZberT?1jDPZxh^3G1{jy2H5j4cB|^o204`UfiFHI4c`f7}9D%Lf4k(rHTO zpIvE`TA6~;7fQ>^d(UA(8Xw{1^Exyr{2J@{2w<{O%&!&f?fDW)SuG}+>1Y%*OMCLzHpXf#OS-Bs#N^$Cmcy3|l3?_4W za&=rHb79q?Xb0A^*v3(*#@i0i|oHnk)^ zsCTh#v{sz$veTcQ-I=ftfJ0>m$f}g$UVJ&qnJqTl2cw_ip|qoC^rI!9qhZuh#Ym;- z99?ayVpszTOyrCAGt^GDr<3^{iA3GE?}PI;fM3^i0Myr5TJfzPrYEYRs)}nt_|k&r z56)f@*>MokEHc89kdSB&MbBVXaUb0uTE%6zj}JNm6ab>36ttrOqG4h_$N$=mmh~5- zxf)TxH-IE?8AMJ)_r?$YLtir!2SXxkN3R87DH&@(&MZ0~ovzA|_{aV^Dcq)!bfn?p zDiE85Kib239zpXAyoUl3!1#LI*?KOj^oV8qM%BByo?o@6EvZbAs$g(S@>!gG@$aV% zxk?iGj#m5MeQk|g5%B|^Tu$ImbtK3Eo}-8hoQK=i725fl`Rb#4&b@j*kv^a|8~J7h z$CN1N&xFf@2}eWCKZabeEafW<16-OgQT2cPyPxh4eECnN*?*`GB9O}@2YS_Pzn6DDyzOk^JzR=5PU-lcap&~$}WE*^;RBT&`_cN84V3z<7o#Z^34AiwZAIHCwExh$O!PlVKw`KCb{%QYaQH4`g~1pxmHz}37nFH(Sc8_n^i{9Lx?{^V0Y3ICHQEjCFV z_+)3M?ix@J57#DxKm`CTpdA4hII958oMNGS)Sa+Eaxnc3Y65tP2;5@q^#VpaC`6-s zb5GuRf^HUJ_idUBoWtIVbnx`SCgAerog9C?M*V(C$oEj2?MT=nU@X;}jm{s~jr&GyB-`bL^nAye$;}o&g$iO>Drj z-7{yOUptf5x)^{Ut@OT_7r#fL4*@LQPEW zw=P7+tMZ{EPK62#I0R@0Uu2KKg9^)_-(<-Ce7&9soMHSh;wVI$cozT)P*z#D0uqh( z>=!b(Jle?>0K5cy@oD~N4xMTa9nY_U5#XKoE;sK1>v*@LURrX#UdbFMzwRj z_y({pWGGK77WlHsCo{fWy=Unn?hMBco7uNsfeBm+{d!$r-ljK0{5m$anJD=f^GDFO zy`<&0+!4=bJ8`J;9yA_a5v1)+bk~`dS>WmPEqJ;ja%704Ok^=j#iV=XIpkFOx zOIK0x7WjWa>&170Y>>=nNdzP-=#NGcFcno_9t0#3QF9wzM~f|>F&2V8cOys4!fmt^ zEVe=5?Lpz_=(ssiwxJTpivHqf;Oqx$(YAPX?8l@AKp(e6PFBB05m8a4*r$R{Lv(!s z4Oy`ApkQ>S5izY4RCRlRy4m+(E{b+I&iW7w)a^X z(XnUj*vj^o-OtMS&pP@4Kbh`7?vnil^W#1_x5yXGBSuC>VZf8pzMx|zdH@8voX>w2 zYta#On`t*bcyNuQG_rB6^7>!ELC%t(mPFxy51%U8t$(Pm%QSk;sUogce=#x*AtsO^ zL6afSGSD&}xxPmL2%2))E#QW=oJjf@;oe#Wwq4t@9Byr#W=>Cf zusF?zh=l7p$q7N#Y?%n$xD_7)q}0Dv&;~EaDU=w3#UV(f3~^%nmiTf09B! z1Jf|Z5h$sEv}@*%=sG8hc{-J+hG^t#Hzx&iGu7-es7Mh1hCs+k(Z3e}EZYz8#BpPQ z<^z)aW5eTLqKM$o&@ayp$Y9cfa4*PT0;L&noUeg42a|f&EjLlnG-(1X(y?+|YGZo( z4fzZp+9@N`=f#k7@9r}(85U{c(Te82U0)Wo>+v*84+CZ?;Gm#;=y93Vux8<#Yd{L& zilRr;W8HbQd<_m>p(mm@9RW-u4xRcgweri>qs>|PtZQ0aQk*$G)-dm1N@A6rhldcv zcB1s&!-qX;<^PGqbc(g0TDsXbbUDaw`ko!5c^QzaoZehr1BWW&%tg_W@fK_yqxLCG zg55nCdftnzH6LVu5CrfWp!f$wMJWgPlDzJ<5m;PaR?DgeeN6-e1fxZU6rRwB>toOI zHTo*Cx=nXK{SpK1qG)=1iFt;YMCbIZyAzmPOahzphE2`QMb@JaA?SuRv@*A!l$0bk zNm{1wxM4O7bZ?0(lr!WKURQIw_-8$V&}B^xdocfJiKfaos=tB)d+u|`eouO7xcBhe zmj_?4=#3O7La3P5vr?EJ+$nNNQS7pK75b5t>?MPg=A-8yNEH`ul5)3LVsw9!QzhYl z{^@OSq4&AbeD%$m4Yr%^e#q0>H^(#1+rn4QmAr@=^ImcH&IHb79gFQS?s9cCHPY_x zt=Z6nv1_f*fzf0%(xt`iwmJ5YlK}F@9V4S|f0(^qyWVvHl*7ffc;!~g#@^t2ne;@G zm0LJl_1|(2>P9_vYK}7PBc4g>lQeDwwvNH6sYSsp%#CgG>+2-~Z_|#b6}2oWLp{Td&G{c#}v(%1jhrCHwwFy}6)dCe5FgCLLw zDDzyb_Mag@Adj(bAhSl`web7dj|eJ1OJ|Zf6u_bXW-v6 z@PC_u=oEPZ|DFg+-fw@(GtPLfzX2%R?h)_s6>FTe(bfDhL9xa)IKT|k{P>`P-~1m} zaF^3mP3tJwbmF4WC-69aqYztzC%qC|&|}M!4U0?+n(s8cGw>6qu2rW78R=aJG3RrHJQE>7n`b(>JDz>S!dka|7VyYN4gsZt$h&MY(x^){GDs0bs@0X_8Yz5 z)ZTI?{Z;cKH*)CLUJW_40v@O%c$kVGS*GU-llB93LrV+ghJ{`=L_|1Vy*&q~D=GH?``qT<0rC#v zEV4z=sAo!;`^}s`UU<2=rREU&Zd7Faue~1pc&(u!1N!1P^vd~GdQz!xl5qrM-6V5a zD+5iCk*&~U&58)qm1*7@Tdh(HE30CIYeZHyHsQceVMkvMzOl%sd7t8N^xc;qKYk2I zP1+A!M;)#WE{az8u;7DJrNO~Mn}v-=pv9c~0=8zmqElw2rh9&5ZG0?VviP1@>3h>l z?>J!fHvLq~HCl%&Ml^?=pu(Ennf+M6Y^4b=bRiq*FZ;4BYdCyOEOnia_?KG=#1CJF z!_83jlSz0YV5S!nSSy;uOLkZ#PbRDjnzIvisnAF{_>6FG%DETlJVlz}FH!}X!C5F^ zi4G_{jHotrb!?$DZ(2Qg-U_;3J37ZMIDWNWtuK1#)o60GfOf{OnjFuin>NQwj91sB zj6J4zg}j%>r|a|MoluUgt+W-hgp9pZl<$;jY0xV$X;;JfJcFM{Nql)ov)o22)l<~V z52jP`5IC%)=&@9N?TG*mY?26l*!%>CwzRc2otAh)G{eosX2%jtD`?MO%!*aAI+&8nlwbv(iXL=oYKq37_Arcl zahsCcqVLm%coW?kILaLY1ifbNRvKa%8b|3=K_gXF)ijTVkp8hT3Lvm}g0|cug+Vt; zXv?k#Xpmos5S#%t@$>-ES{c@|bsq8aBQTVkZ*tYXg!&A=5NwXu(4*|s;E0;ssT8mG zToh#dvfS11If#x5tUqDDQ*ujat9sMdC_2wxxrTO;|FUbOk9Kxwf2tNd8Dfn9EUNU^AFgYQ>G8sl1wA5P^v2HuBEM$WKm4I zLmpA{AfZ4Lec(4N)vo%7m@V*v_I|`lkSZi{MkJ2Fhs@v@9~D+chWk@&wtf79jRP8#|EdzzKydN6K!`uf2dFAGD^? zvuA3LFIy54^7HdM9t)edf|EH5!x{z=h*1gp%=0P4akJT>Y}D1lUJ{`HAO(QdWgpNI zT{L|P#Cme_@T$A(fy2$nf~Y9|+|g1|1C861JojNW+tr#=g+lnkOCRgB)s{Rl+@J4v{#5YdN`N`+m)Twi_@W4Wmlp6mk*l2x%!heH%Onei<_dwj>p8X zv3K_HYcGf%KUikua0xuLHv=`k51f|sO*-?5ofN2sF5mVSn>`7zm!P9*}??%8K{l>6F;s$^#O->Eg&Ru4*Az-SGsvA1qCB1!bpWr(9}wltLlo z@aELf+1Xiaw*j*sco<3sf>0E)@*;9_aVb_g60}M-e~PN`?M;x+26qDHWF+WTYORSh zZkgs?2w}+x21n3ad=GZQP7i7>=O;4qe*XN~ohb=^&j9W4@bGkXwgH6&#!(l+NdnC!oRe}typ?hX9g(U(N zK}t$0&1s$0R)2Q9R4)Q_m6lwBcA#9RY>4i+r<=8Q&U@39xVX-UP*MT zG)c(O2z3UB*11zBXv*yLs^Vmx^^`ul?YPg%;$9g(a!%?`1FK&DnIvZEgj!Sf3k^=_ zWJ7c%6Hivy&l=D4MB;AID%W_~6qNFr&-J2yC-1ea2rhs|5)R3evI1Yu^^J{_q!W-G z9j3f@>bTEp`yHDIWtxN$X(f_D6UKZTR>8RiRn`Ab0F(r4`^|GBM~;k!MGY}{@ZhMf zu8y_OuZ{X*eH03XnDxV1<@q|Bw!6`zN5|qNi=%)4{`+iODxs;VDT>8nR28bCrluw? zyX>+y@4u;2r^XHcctiYX{*PkYwrz3TamU3y|9Q_I%b9S~ggAfn`El4`hsChEVQtO; z-#qc=xa!KQqHo{6Q8&DJ19z%u< zY4@+TogEX}JDzs+*j{OcAw!0g{&K)^5v7Qxh?qb3o_J~fOMA>%dvtBAe|i1>AK?Mu znyasgX?ITBb~yI0000z$!o7~jqMw^mLJzdM67#xb3`HHkS2Fy z004lV}D60!46b~O?Yp{Qv*}0A$jywqMj=`#`+7w&jbf4&OAZOo0JtD$I?*IUhh=2zGfSzpU-Dh?Y@BjdiNKM4fPqRi#&Ci=RFIFt~ z?V11pP-&M;S`ce~`&OH??lln+2Om@w5rugB&F%5P+K+u5sKw39XoE*P=ZD#cpawEzHc0O-@Z zX6H|(o$X$TD3o))<-3^*5v9`3ljW^?yAZ9uiS^*#)jQ`bPkl$J6j5mPMC&EDvUSVW zZrUsW05~wUboVZ;&Xkv*YOlT9E~93BpRYviOaC6dj=iR3TB&8OQaRFhR(0G&FxSM|@HaD}`5wY&2b^B&30RZ3taZt@WA4lE2tIN&3 ztHIy-G2U2vN4(hQ%Z1Nh_D~cC7Jpb?NWZuKqwP&50RVuCd$G@#%NNr8KRw+H0GPsO QUjP6A07*qoM6N<$f(ki=CIA2c diff --git a/doc/salome/gui/GUI/pics/pref15.png b/doc/salome/gui/GUI/pics/pref15.png deleted file mode 100755 index 05fe6772100e206a5dfdfba4dd45fc310f52ee50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27974 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�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 diff --git a/doc/salome/gui/GUI/pics/pref22.png b/doc/salome/gui/GUI/pics/pref22.png deleted file mode 100755 index 26921dc5a8e6222c550352f0c281bdabb7f7d0ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21249 zcmeFZcT|+yw2na})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 diff --git a/doc/salome/gui/GUI/pics/pref23.png b/doc/salome/gui/GUI/pics/pref23.png deleted file mode 100755 index bbd45259b5b17a0c7c90d844b64d22175058ed77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22674 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 diff --git a/doc/salome/gui/GUI/pics/pref24.png b/doc/salome/gui/GUI/pics/pref24.png deleted file mode 100755 index 55a0ed5ef56ad04056cb463939a673e6f6864514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32727 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

goKi4Si^ze|;G8+Xg713tuzrS_cOIUmA zfB#bXq4Cz)njPSyL`4Rm9M6TB(U}nDL&0C{NN&e&#NvnK8x)H9DhO)-dHK&J_|Gc% z&qnx9EcpL19F9&>SrXi~Z4ltIKuO;S*s%eVRZMyg7TyBN^AF1(@>8GjMkT!^gthiR zj2I*SZ>INuaTmUy7Ry^-S($70GwuMxP@&yYrqxVYT4V@@;$^Hw#7sx;s0|OiIQF&3 zy7{hTt+M8LKpBf>=vt%mnw#~ zZUS5lr8PtlZmIYW{pnc*3DIt*I0qQdPT-0AvS$(Egg4FuTu2V>Kq{6emc;Q`D?A0V z+S&bcX@!71OcB-rjPE`>m>L{&*$%v=FvlxKi#9PaK@o`S$NrQDz7hu z;J!R1c)fseG1FiI`nZZd@v+5z>u^wEsx5MPz%MizkE3=MGr3pgDSw-2Ef8isa>Qn< za_!ZM`2alK&Cf8RT4lz}(9sMF2n#VB{(3#-c9I2RE>T2S5fJ%~96o$T5i$G!Hoq4! zoQytv0t`XH$+6Cgorq;ps-(wGXWPS=#XX%GY1%pEtssENAt6;mp_plkQV z*8;h#g`j=Nz@$z#?;-u*BN#6jJR4X467@GnBs6R;cBRDgV@x7I zC9Eh9;+hT?8&n5JBbcNUW(XC8MzPyqiuC&$7LVK-5Z$!_kZO^He)~PJ8~CsU=*vOm-0eYc2!O@=s$~f@4KzugBK@~s# z2>*zTweT8sm4QigNNoov?A+%hqX7m)w5Pl^fHKbJb!BNx}%b7x?i zIbTzgX#js>Cd^8lxw61;l=EEYn}aNrp{?1WMIdEKq|e`LR1u%|^Ji%##k2Qg_6%kt z{Jrq6H3^^}ySMIHK!H13*Um1JD|Rix*W|B7X{jS@YN+ga6k{$sX!`nA`5Gb5X|92t zc?`$U0RL@~mSA0!)2J2U!1C2_ZW=YnzI8po z#uQaeL}Lm)zgZztATZ0X>Vw&d;U-JRC8V51u!93;4E zpff=aggM)A!HHs0t)rjoqD7oS*OzCr=6{<%i}jBLVmY?Yr5mqyQtrBZp$As{4|hS) zT#m0{>8(UW9|DC5HfzP!1NMZXxwgecSH%8nU|>M$sfg6gH6@Qav4JPm|3s2S(h|9* zx(ht=+D3X=b8WcX*RL-Gpo{G7RqlRY7d$XkXDjXAgA}ifo1GECGe`lPoruHXbmFqV ztaF(%fFT^7)uAV9G)Kiq0{6#Bf4@*LVnlM!fZ1yNKCY$pYRBh3Qj0!n~| zxe{Z~u?a4UB6qT}Th-~eXBN?ptMP2!=$hkuQK*3|r{%KHeDmfPW>X4o2ej_Si3Mv_Qpu?j{aR(=zA2H2H;U`{f(v-_Rp2h(L*pstwy% zAr57%*R(03r5jt-LT~yQ2nNZO_Yz;?l@KUpI-=c!U0)A+%uek*$gtIvTN9RQs@WDX zSqqczUFGPN`-$C4rD=o)(OoFlk9^nzdonT;7Sb!&p8@( zPpM|3DOB1uWm<0#WrjyN`Dk#+zz6JPwM$0>auWzD2g+#o<*^@Uvp6j0(i-NozAQZ3 z5a^|3#!QOd$#S&OaXdJUPFb%n8DVGp*g5r36d_VjD8r@XEFav5SyqQ4WmU(Trs}tv zj%6M=^64I*VkPK;3^#)il{%_`)~mJ7qIe(l>-L*pXQJDdW({3%k!Phdw0}0gT%_qK z=Q-)4w0#~OEpwx}$)?d+vr)9GyK7ccTe-|K4$JsCoLDN@Vc?KgZG*m1TeH=^_){4C jK5Bq^JtUsQ+qr?;<$iCH`!4<}@>4~*o7V|fZ{7bd6J-HL diff --git a/doc/salome/gui/GUI/pics/pref31.png b/doc/salome/gui/GUI/pics/pref31.png deleted file mode 100755 index e5606d133a2dc1a889bd41fb30a5867b8cc8073b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45306 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 diff --git a/doc/salome/gui/GUI/pics/pref32.png b/doc/salome/gui/GUI/pics/pref32.png deleted file mode 100755 index 63daf463f78a927d8993969e8edb4746dedcbf9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31670 zcmb5W1yqz#*FQRff}ns(NefCzNjE4U9U@AH(%s#N2$BNQ-3`(m3W(&;J%Dr#-7)h& zqrUI={nuT0-F00H(P8F1&vVW`d;ek|KEG0w!oeoRhCm=VGSU*SArQ1Z@b&3726%-T zR+bBaJc7tbym({kw+(aCezSsT+lMBQyn~z)-gD_7RFSi#R=IhK!#z@=HC=L4XcWt0 zp1)CDWTvBKt&tc@XT6+S@TPTkV(Y_-{m|?C+V^i6rXex|37;mjq=RLaj^Zbaf3jN@n{jD(nCGdTHkoKTt3`>3OmREqKv{c8{Fga`SMJ zIdS}i6-I>pXKZS0J~wth1w94*iBg^52jCr~*W+>Vzplsacca0z!JF`CQldT=(cyr< zRlCKq9Z7=xsc4(DKF?(a;)tdS4)F8aYlk2MW2NDVN8qZI8w3A$8h+d0}cO7y52 z944RS&DQ%5yv%#d&n>4A2l+Qvkajg)p_+8o2N85NtARErNn;F+1dWGxF}O%^N=r-Y z>g#_O_O`u@4j5XH)Gs8H%z{5}?C5DBOIrK1#wtJ|phip_wQHD}{_e+<{l-6!=ekh0 z*;b@UG{*FB(A?3`$jE_{{l5QDP+lIrW=ZV!w&eqS{2TeI)ucN+?oCxBhDJ$2tp%O$ zs&t&I52j4HH90sq>YbRdvbx_aS2!3P&Z@)4I&Y<9GGxzoH^lXRXWX++bQE%AJR@mY z4K;p(ktNpfJ=*f<;cMv9Z)Lx`IULrx5*%Nj;_hnyU5?;rG*>tA5_4?Lk~`hCHV#`S zES_Fo1v-tm?#+~8lHxVgNk>&&11XpOcZgYEw-?dHJpGy%uD>WLOQdEq%`{W3-iv|V zu^ODY+?T3UAAKu#cJ#x2Pn|dt2qON@UcarV}ysmHhbTMaLx8?LCkIsRfCCt}1cC<(h zkC>QPo(`Wb8jIkT0%5@Bn8mAV^SAo?`h$%Pugk^UHphM~YUB>ou*AxCLRPKFIf$<}B_lp3ZZw_s#! zYESjqZoQo~{e*s5){to(sms@3LSdO#S2E4f-Pf8YFW3fjrO|E)9kUi+GREozvhg=v zYq4S23(`hIA4kl&!2SgC;`gEAR7~!tjRwz*9hf$Vsx2mR6;lMNaP`a_8aq|U9N2eg z-WI;eP<6twQ>(1^6owg39dC|hf!!A`Pp5gL@$>tb|H1O^@i5&<8L7Ov`BP$6-E{kv z9@Soq(aBjup0-kSX@y>_Z-fN$!C0MNU2Y=OH9d|i>53?&6jM#s_IFK(wr{r_%WF5< zg}^)__AjSq7@U5l?;ouwrC`J{^A6j*>3rAYY&cJ}pjOKfV{x&h)tjW3HBoLm^uU~V zXK}FR24ZZl@RFhQ;y{R$C*#%e9aPi=Rg|eZ3A;C^l6{^S+B$Z1bBjz!h@p>A%%c_* z+`a7@M#>!&60&qsGV`WXGi91PY+Jy2CZi%u5?wP)Y=%B-vbq=#^1Yq+#+TSwN$|j* zLqZ;(J6DWV+~DTnO@QSTqSr;ImdwEl8C*<8)Zd29ym_p9$Uq+fPyby|lH3UUnvFe@ zE~6NJ_YwDg$KXv2i~S{$fjwr*B>4L!=NxsGTMAsjU0PWM$T z+S@oVNN)bp5e>V(5r1^y(4lSfBmRBKo#h+bvC&CuNlvXJ8P#|`x(%JlF9S{A)N+&w z%>;+aqnm9^_365PF^_?fa2CJym*#Maz(w`rr3A5EygwVt&d0OR zV=>p|vEYoa?rykb7BveCPIFN#Rm*ztP&|GeQ}BoHrjOu?q}O_|-u@(BcG56IW209Y zO_BY#>h2HRhGn_ZyEkWF!|rd6S?ee0~ct=q2!Zk-cb4X z^JU6kne-wfp}2G>(sx_>FNiJ?5B}_mTW?FY{fa`EK>Fl=;b2UM;qP}OkIu;GGPpqy zD*2d%Bq2K|$BuhHyrE>E^A>Sja+j!Tkv$tx^_!aS?_Tu|RBu$ibH6sAhsc>!E&Mzt zV+j5b5)uMK1rHP}gpgndV{d~bAZc;9WC%-hLUuLKi%e#yn)wY$4MR_JfsiJ#i@E3l zx!DH4;PQl?PmbFN#`b)Am&8vZ zciP4r1WnZ&A6O76bvB;A!qu~uT?~M66{-c~v*|Ltf-)g3+rNn@B=C82(shR6h^Ej9 zUe-CJh08w_97qH3)g+MQXP z1x^l!r|ht>O$rj9-Pr|#GRN5uj7%w;r83!ci09_@JGho^K8dH-bWnSDW5q5o(`&4A zxk|Op$@~tadU|>d&T!f3k`QxB-%4VeslFv?evo8e?&idvujS0#eQj5$ab$iAuc60Ha2fNkDfv*tBsda zGab^Nm%MOZ(0T~(BZ`0a{u!yAgG03@PrT@34tg=(I}2g;N;%&hcd@v6tVCf!@I1YK z4cq2Mj-oUFVP-O;7GWEDxfYG!?rIE5N=nZvQ%r8H^#e;4ZMTYw9oXozjrqp2vuLO^ zr)yLs{73!-qH{>RnmN{PLl(P8QXni=PjzKO^NRn6-syO#Re{8X(Tw_Ir=K&3JhgS){TYq_Ui7+u^%+y`9AUI9k-* zlBXPMqTE*?q$!v`w;i8e;?zvC{Yg;DSI$)ReP2=$t{!gpiCrSIv!6UwE&kQuQ(GCY zr_9A5JHTbmW@FRT+|2*bA%PWIyHI6EnhcB4DU^A?Ls zO9s`J7GD<@-i^>+AD%Wp{xd@#8SXd=;FO6@BoYS-{pe5nOwMNuQBzaf94*Ldv1C-+ zQ883Z69|(m8l-)4(|;&{ByHEk%5hsyvxc^MI4-?JC2ye0P^Tz!m*g)@N&eDpNQ0QB zARQ}_Si;~gc%6g&nfHNAQ$o=9ch9qizQn}5)YK$ZE7ktJ*ctLB|CQefd`2b1^X0gu zaCn%bS=c9*poEt|^2kH}ya-S@&8+qn{n1&kE!K|vE6<@ zwvHn0fIo|PkCw@&*xLm=%--dd?g!U@(e>G_*!l^0QL@{uG+RFF@3Z|Vi0|4wMRP5= zx%2O`j}O&_?;PGg6MHCVY+24F`~1xt0<1WE*+vqhsEAr6Gu{_pzg=Y9nQE?5GvgJ% zP2GXsG1J>PIP*04L&5FSh^N6~o?=by=Z9UJ0uXQmM%0UE`T6;m^U{3sA5^-yb{n&+ zk{-$avLQ=b1M|4FgoBQWyL`FZ$_A&yT2?3Eol2vXJF(et_-XKtBLSP+)m+3^XB18m zBdQ9;THx-1k!h{ashS)ejVQ%A<0nratn}_XPQ*BKN?`Ri<1V{1c=g7yNtI3XmNU>* zh|0xo&kxggrLTioGarq{pX}9kHOZdXl550LR6;w$Ow-03co{CWA9bx!VTgEOf2C6NHJYw0*KP!}Mum@D8o57B4>4H6P=Ku+9((+@ zJlX;8G+^;PEmI4K^w-QBV=%2IJt6;W&_6!nW4E=fC6LEP57jjp|IobIP^)JtbtpOJ zcG4eao_bc)ZGPdmge74mSW?QH(Dv@x{pM3V?13q|o z-x@F3Y|w3X-|uB>1qe2G)oiw|JW<4U;W-TrO>o`_ZJ*ArwVju?Hn~=5;L=mnTTM3*dxHc{4#u>Gk@xmTFZ;Mnr4LROFd+56Oncj4|$}Fi6()(Fy2CoU&k7C8<|=&Sn5XZ?TTvNi?g4(V>s7-9bxz%B z5ZdZ>t2>Cun@MlHG@@;t(u1>9BP_VEo746Tdc!LNrst-ezIY6fgh^IuvIx5$rK^@` zzBDs0n5uWk6QB6z)

6yLWX6jkE2=u5cC#rxfnV5D$EoAa7`5vb4La1Xw$AahyajY3%Qw0#)C+=J|{x!`cw(VlZ%3cF-I1XH{{Rf(B31hRCxHLSsL zca9?GZYV-SP|xQQ&U>=c%xgQGA&!~IZL#_);bZ`vAHz*U0AsvVMXL0r#e|gEb(;Dx z2u}guI4Rs8P-w(8CT_)2UM7rMNWbHDEQ^-pOpO)$!@B^&&?&ha8a`?EIHlv@h}sy* zn_;n8`Wbe0Igg|h5J)s1E3{ksi39FgCIFjoeT-?X+#V#}TxG*Km3gHyfhJ`Jz+ zY+HZ70*h49nElcE5Y2H(mHK7n$ZCHQiID5FYV)xlrd;-5P@3z{vdUjC=jKegGKWk@ zjlv|`C(HR=)aIMqqS;!nqQ*urV(lU|FCOY%W#sn7_UZx7+o!@H6+yvU!OA7>yuBdaZhJv&I< zj#k~bp>+6qW&Ay0{gdEo1bp}KmEzJHET`_vNjD0R^HD0bmLkk&2s`aX`zMm*CC6W; z8Jm`^k_$T3KcB0&2{`z?4cG@Js#G^D^{uSx!>T0_-K+$r2 zqSX__6xiC@3gdvMVA|h3s2J6=m?(HWky-7fo{XeV74Z^)E|g_~qO`MhKQjExdnFDc zfjr_&^FCnj6d{O&{F_qkdi9>FE=@@5sVVtx)2v@5v9`k`=ectmKz-P3Pktyg6~-8-r>%O{Y(Mht=L*aG z;>r}J6i2a84x##VWcjmpD|`yxUQjvl@K9dMnL-4b#nN;RbqQRzA!@TA2yoHe$zMgn zebmm)cByV%_%QLOY`zsP-oZaS80M%rqdB-I!rjZcSs?X!+WEDPccGdCBB;@^&dvD4-%t*t2#B4EI!btA4jg~9zZB(EKTrl~T=sDM$DJ1b2bp{h| z+RMsfGpUt6VPwQAQSDv$?!SM0e9L~I9*8LS$;d)78Lr?qK3TFcPt6n0&(~L0jH;7` zJx;!PoLc{t@IuLW2dtX`=UzRX_o3(Jj@jF@P2{oak)rYf>w%HxgWxY~K1m$gqV;J3 zW#SO(gTViFKHTJaZVwRL7`+IX_9^4$0HY1p?fKTU8|WCX%JpAzE46xGk2-oFF_%x! z7ho>)Mn6MIR8PxuoW`doGhg0OEz=FtEvs#eu%B62x3kZt2!N%nZdp-?%2_?zmDAU! znfJbAp^KKmk*BDa?1N8L2BHQAQkPT8`Fdr^QXJB~!Ts3W?_^q#_2v2XJ1gW4tT7I} zCx4<@w~Ss$D49j8X0XCYF6r8SS?G(wJLJRoGTv6j{!4w9)NU9L3riS?%aH;Vdd(`+ z--AwfZ9#fWf(v^Im^9?o#<^rr5^6kn(NwRGx6lklCp{=#>W?b_wHS)lb@eoM@Pr92Cw7#s}CPO#B&&- z*2!?b#mf!N)&KkRBGr=7l?twapVLj{^a7&a1F5{FL3TBpE@lKD-IQsz+mNKRxO@oe zCLhQXbqx)f4A|{y6r~9JX2*>OsIh*0#JaUv5d$^l8cu(K{z-^C`*{*j2a$-=Rsiei z*x4iP%0ij!6T z%n{oSS&nOQ(r8<5k`&c?!G_ezl5Ru&p-m*wdTmr0GB}Ep<9)%vm7Bwi+m^FHu;lOU zfTT_PPJ3(I6K7yc{qv8$U$L2qPa7R!jWSWEy!kx$`yOYwcA zaSJ}awE}-R@9o9!gAnSCWzBL*8gJsY%p2Nh$1#Y-K~`F;bFQw~0^5TkhKa2o=8dRl`C7qlQj4VG? z@Pg!6J9}VB<-?eoGtWxP&rbsK50H3A9bYPsLQf9B zKNYX_jTN(o@_jV;y|4I^c&&^VJ3haBI&!~8(vg#+lF#Yn=^E?oLI6G0%37nF%4<$D zvW51sEk^Ce1lcSQd79lRRY&qdFeg)jfVW!uzXo`S@<9;#1~!IoTRs*jS+#ysA3rv73I2?;xgJ~GLZaxy4u2g?&#=9XyvBM-JfG) zFE&PC zrm4`Y24R;Ia^%BnydtlPx4YLBRaVwoAOUODSpIJFLkE>CaH`T|1|IDudNA?cj7m$> zg!Q!P*~7bE+4NHHKbBl5bpgq8=ag^CLdtGi$pcbLoPxn#`?zT67G9PSo#Udo@3O;Brm`;Vz1KEc{rm-{V*kJL1;p;>7h@of}iwz>DMh z)cC^OE}fQ60~XI9{uIu*CU-)mQrg^U1r^^|1ULV67x&ec+S0+XVRfG$Ea~uid>*?> zrJih(E-(9VB^cd2t#7TCN%e!?;W0pg)bK5b&28>Rx5KzNpK!0ahLY2bo@ztx61(e7 zZFV`PNn`vKAxDB$_(;ua+gf<0HxoKx|4~V`F3H39E-vRw)tVJtU&u zLV1cQsCfb8Ah34cd&b!NrSjgqu?6f>4%4x&Mcv;6EwPZ^!gj^3410@KE z?lb&!be~AM%^}~6`$<#1PBZ|)fC3QF4Kh{%(1rwEroFRaAF=R(ocTdOjS?gzYj+nmcEn`O1xPzT0(p&{@vVaBffjkSx#~OVGRUVBw~uYHEx0)e zzMF4_Tq{f<5nTI=le=+yjuXlSO=PSBC7sTz;h}3t<-Utt(}nKT8=Fdvs?~=jHZOKr z73yp^=;BJBOqJ04q+pN7l^l1E=yXNSvket1<9s^8PS?mHC1;oG)$7V(s&y-Lkt^!z z)lY(JW3HNAUz|Q>Wc>WG7YjUEl{G98Anp7OyST*zOP8~~_h4#pDMTbjj1@{!BWikN z6lHQjMGN(O|Ad%T+csa<0zP5Ng{xDvdfr!SGhRH^EJ7h5F_Jre`DWB&VEBSk*yEdf zzd3=zK-!KIYl9HHW-M=WtjJ+wm==tT0EBV%CKV5=x`kH_4S6lE+f_`2XKpJ=%@`Em ztZo3<+3!%AwCkd^R(KBe-Mhi8*OJ^~o>Ztp$#Q=`R3e9R{H8 zE{1q&5)Xi!?Si{a;z-1Gz1O94YS$NqWWGoduZvl=#-1Z`SEk3DqJZLrwCaYc7Ik)Z z2JDx?$o#0TBZfSmt)bUg!-93oOiq%g)*S^TL&?971{I*PF;7Izcd(%sO+SEG<4lm3 z_cYKSh~vBUGn_(enS0mZmYgmRwiRn?`VU&VpVu5=<=^7#_B z38F5FzQldZUOTkath^-2Tj0Ij^{Sq?%7jg*$oq1(@o_DET_uD-|5i_{Wr-3bK6G2; z>*>&!@l8H&jsfFK%W`M$WlPCJ$nFMK4JczuqSsa8 zNX(|aQ{uDrtOy3RQt}9q6Vp^Kxy#960SDEzSHBlT>`_TcO8F!&3sf(R!=pH<=Dy3y zxitWMAAvv6mTITc#5=gSKMgt9x6&#>@dKL6;jhOL3mY4sGZ}ay^bj>#=DXL)jh)p# zRJ%uf8dDlgynyb)(qH(mKlI#vf1~EYX!kGLS7(~=Y_4_%()KJ2=4P-+)_1YS%wsdx z2i{BGVy#PgT+x3*aDWn{ zM3ajdP8almZo2<@HanC4F?SOX5H|Y?EjHTO@uH2mMS;+NmLM;X|1RJpiQtoswL$7#j8qVg}ajC zKp4Kd1!9tB;v;^f!GEs?oeK9WIlXsHI71w8b5C(#7zU*&0~}`(`UEAWzt81reMR83 z+%l=R{O1Mgj|}_|+Wy$_x0OFh|5t;5O>^Ta^JR!Btbsd1=-@U2fsjw;D}PeR_!U%Q zpbGz0<{7F0u~RG4?GGkonk+ZK>Z7Xw9)i5mxSxiBAqW^9-vFiZ4#CRcVaF!Q+Azk5-R`Q@EoBXks~pU49(2=d)Z5c~U7oA}na6Qww*Fh=^FLNc z&;#Y|8=fP%3jB79H&M%M(|XN=`ign__Vq}ZM2_np7P6-6F!B2TxFLuGocudS5KZtb2}zt(N_7Dl~DXp!*8n4!&>L_af0^NLLs z_84yQ@&E`;97OczprBVHqSr?%C)-ovK*0bqJ^OC+X=);m55kj(RT~wgpsC3agm!?r ze~G}w(T4cpYJZ9KB`{D%s?1b?S*eoWkfQMV^#fg9-RA>waR4CR*h_;V+A{+}An~N^ zG4zaEQ(p_-^CE}E;9q-bi&0Bdww`w?)* zZMaVqn#3ECD(wD%;Gu-0V^!h_ScqYkVlvo|26l^a=0q-Q{c@j^%|vhk>-Vt9MwhZN zp1@C^?6<~Q8l1LPU(J&Z1)< z*CGPtd3E@gNvyU-knx5C)Sw|>q+QQZq*hiF4>TxY=iNCgb{1M%TB!Z&*HL3eT281< zq}qEE<(IHE?S1I9O6i_tH?Yd}xtPj>pimaLp6k_q*T!r;r+*rGXh_JN7cX8g1584U zK%jwXe+;}(5Iq2r`A?cl{^Jnd$%X| z@81XJQTB5(91L{O5M=Sb3Zl%?(eDF(AB>IG&era=6_IWQPoJw#2fW8FaN?eg=U6+>##~mzK$}`85@gWMDQKal-)(_AFnx1GzZeg=*Qf z7?t1Ea$*b?+nsBsu&#W3zLO`fbv;w-LY3xqLIMHmH*O3uIeFjN{t_0|Jw>Rl@Yr$9 z06JHQ5U+N6_jMysM(2Sc`gRaMd z-td|!)s{=f5mjXIalfkDofhr37OzXxG}^z+zUat}Iy3%b;I6F*l}QuQ>UWh1jwS^u zr3k$QbZ)dNJ^hgg^2!0|3sSFM-9xFJESgoX{Ciocb<`Ui3lc?7&(BYWAw0$NkTwwW zx9?&%?K;;28Vq`-(7&0D6+_4*8U*nGtd|yotC`3)YTKDHRpDpa;qG?02BK=Bvg>A|O*xdTlEU2?^Pb zG~OR&l~zdOwjjcvkN?#}$khGoSNi+*Po9TxUgr^@Z-yyet^N3>Z*n=jY|fwimi2ys-d#Txvx*947a*vWUdyiho}Ptz5HVvT+^z$Aru z=N1&b;-CZ1LY{@_&F&u1r@r0H(g8@6u^FqdqR|ZvSelP-L5v*eu z8f3vmI&Pzmj2r#a0izuIOQHBr?iKq={XZ}S6z1KX9YuhS4~w@zZ$)G(u`Yl*nLKiT z%NC|sIp*GfeK))|z=`Vt9!QOw|LfpWW9Lca4*oMu&{47or~UFTp$&jka=_Qkn>Po6 z&;&f6;@s;sQDlZjr7`NYQXN63>sG`u8yY$~;Mgq}AE^EmCTdC^+5>__;9ouE#K02{^j1NA%oQ2!T(DBPJ#m^!f99;1-b!x!&`2nfHoAUhn$6DR>>w(IEl3 zi-F$K(gNC7e1RE{az;lQU3Q~P8}8-kZ^xJCz;2>0#n(nM*RBFGN4@FS=U-sGZo^$NwqM^&=(_luCiGB=j8!ar}S? z$Z#wDT`{yjkQd82rYA`qRZ4Z;H)x62bmf6F0-z--P51(Yg)$F75F;-pT4l4`{=~&1 z^;fc{OV`VLY4`McO3F(?h5q`LAY>~#DryuO!=z>m5;@V~HBh~rd%4*D#Ybk3=)q3k zi>9W}$JF;oNedBY;|Fg=(Eg2x7uu`;yOdBdqht;?@auDe7Y{cV69(&oHw@yj zw4<1~_{Lm`Adom-jf|J-$N~6JJZ@074Lku19C8WixO?s=>oPz+gxJ~H9c@iSpdi5R zL>h<%A$S6>4Uj#Ko-jOPfD&f_%rn@mTy>n3FkU6 zdb%R0@&NAcOXeTZZ$T~a<|reOJ%fOv4lp_H1S;l(D&!;=0(#y(TUdd2u2S*f;pUcbNMX^X`=DWU(D!I?hj~G7q`}4aUJi*sZYKx_+C17wE*yi7!Y77M4 zT;$iU5@0zFt_a&y`7!)&fb$5sib=A|2hyOWLLGn_$R*yk$#z}2>Q=eh39vsmCR(Xb zE^t9X0Z=ELuD@lpKRh{lMiVE+VbnuVtqA<3X7}UCgC(MHa{eD@YF$No5@0A-#QEA7 z9JJ7n)>K=MCE~4mF6`M&Rv3j`7@2_w`}pY-2T;Ay&VkyP=e;vop4CM40&IjjynzGx z(;p16_s=lihb+(QpVd||24}ViF+F+&$r_Rd=E~R#;5qqjF7VmTDzg!=fJU=*cB(ea zxVX3|EL*HsJGbb7gvW3`@`OOpF>#g`{5&Ganh9J!1F>+jxJz~F@?>WTAe@_RBO@wa zwQYXan8o7-48f#awLk&`jXOnV=e3+ZYA=pS$99?OT7U&6BEs*m17M1b^fzSaG;pC~ zd#>+-fRxZ6BqVg27aho)lw6P#JY(rarp_SH1|A{rR07Xp(7c-HkTgt^$9guXv9YnA zgV?j)7qE=`goH1bgQZoA)s^$@nb{NMdA7>mI=|P&SS@BF&}#AIpZ7YY0Fdq}JQtN5 zjC#Z`Y3NNzgjsug7Dcun3oyP)6H9?e2l#uT7Qgidzu&hZQ^)*doGo6+ zH*1&xnm^juakZy~9ekQQ>3H&KBe-_4MkR*t=;)i{-si6x(>XWP-iSGKJdrSu9JP?;M(?VM9gCNG?P#~2?-|6((#5(D44C4BN6M#j?j~_qQuOv(w zR{&iCW%U6O=}&<5<3+q05{U>NcI+E;S&bVMZ6_d;yQg<29t_id%=;wt5>(zV4(J;$ zy{(V46mBvDER&Xj;a7(Jqcw$2u&kKxrYek% zwx_^G1F44HZ1@RC;-AXO%Gy^@*_(#VLMg*;Ja2@+4O>BjT-ce%XN4n#bY`7&W=p$G7t3TSkAO4=aU|0p%#G#HCAHmzPfwk zsvgd^jJ2p_?VajiS377%z)=w@pU|4Llvg&z@V!DU&8q(@M+&=`t@I#8MuXgs%?b!- z3=V4pE1>TN)zMIuWH1IWUwyJ|Lf5p&>K+d$9s`HJ6dmfn3#N-)yhep$=VRU=m(>Ld z*>|{2-%T@5do4B)i>ID-%g-uxx773PrEtyP+ciI4vEUxCbI8bAE_)ceLbX4@29T-> z=I$5#P^r=&X1FnGs2?u|D4WEwLfevN+|C|QDea&=FG*a9M=F~1xHUv2Cw8BmA|vF~ zUPB(vl`;Bk&EL%$>PR`VoYk&&b+7y8_JXfjkCm_g`|ERh9+584d5S+e9HMat*OvNs z&Dce9Sm-~=Mk;2V{7fWe>kxErLUO~bpoJwS>eVZE#oaGBo#Z`qgMTH^J^Otwh2>_= zEz?c%=IO5FYkQ2YabXKiSEyc#V$nT^RZ>pTdCWF7&L73&YnI6y%29s`FP?wJ6-}N# zmEVLp0T0`4sXXO6JEjyDkv=z`V*?iRgPuM;h&pmaWA5UzSqg1O_yIKebIRmduSU&| zfK8={#Y&R=-qL{Rm}kwV1J8q|J0|Y@sN%Z+jG?#HBgE^bh)ejz^+Ul!6EyUuhxazS zz+sB>nHkYSvn1l>CXyq4F^;U@FK>R8qhx2fKr zU2Pp!f5W0CHNz(E6FCANoTyqP$$vuC+P7P$8Mv#vE&_+A-&v&VJygs}`SAsn>pxJ2p;Z!7-dtGoBA#k6ef0kEozpcO ztz&*N62HIQpy5wX?w=8PwU)=T?Z{&LciB|LpB#~i5~!d4Ox9yrtyc9$9RGW2)Xm z%r@4fix})$>jg$65nS)jkoyy|b;-7Rq61=BxVSuFl)|K-d*_6T?-$e3&j)Gub_aig zq8X#yu5Y-}v3GJ%QzzmwFF4Zu1RJ<_V1UIk6UOj^{gZOiJM-X@OuK-ZpC45!QJ81_ z(@q~<cBmrCrHTDvB_*x$d3*nk!B!aq!xd(AkDTZT9>NhzBb{|_vcnipPhUuA=6JPb53tTLi#Ah2%lgFFo~JU%fo=5rt@ zfQp(4dNXfb;8RgS)BXHWunS5l+}+coKQnISmRj3l)Jya;jKYN5$Gc{_)v)_P>iW@5 zl+ZHL7}4pqoezW*yX9Z^K`{+}6OIZ@N_h@6E<5ZebDBZ-5m`eBOSGlIQg8SG68U6ZvgAN4Yc3X z>ghS1gGLIs1H9W*khZoL=n4FXb3w?`l*XX2u(xq4Dz6VmhZeSFzk&VJ}8 zjBn30MnFX_??RN6lpvt(&FkU>aBQ590ReVAC(INAj^7eRMYZ5~e=*cYyxVyuWvR|H z^r%Q0ejDG#D=0UJ3gcXWRXq`DP>p7DCqJ&}?vI%az&eReNhv7>ULcANp#)G|s4}k! z7wJ@;-Q%5|om<0InpWkCB+3Mxix+u;!u>^MEj_@se#mE6f3+ zK%*v6q2C#t>GVf{r7bOPQIcA16a9#?p72D@00_)4EqYr-1giV3ci<5o-u)yN*ZTe% z0|N9Nsdul^8(QR~iDOxH3R&02O_Wd=$LKG{ajrF+ZxOZ_FTU}Jo0~AY`{wiJi(^|S zC!^nLciaFC*`VXsj*aMm1Vkz{Aug`5Dsssbz5S5Tn zQ0l?Es3RFcs&Hxz<9Aq<&yZ@b{*Pc`F!bZ4e44k7;w3;_d_eBi5pQ@f%N`#ga`h{N z!=x|%`~Qt$CSk^_q9zq5m(_r-{4StYS~(9915^mK=_nVevIHIo4kIRhwn|QXDMhgj z5S4Cn z)9860=ZM2O)&4;fb`~EkdpCeQoMD40hYyL^G@3K=#y?udmYa<9X>4sa?5o})Q~JeujajIlpJ z-sFFCZ;|@27kT}9S^*XAAMqVd7AOpH{~q|bXB7OeUIzt+R|<_ZKLdv2zO8cP-Q_Zh(qFEzNPNDhqdtc@BxGPe@fKL=14Vos#p-*=P$JGQU`Dgh&$ zZt}lpGiLA1r3eT8_we%30VaHayh9Fx{F1L$OX=hDd)IB8+iW&_a%RG;NpPsh2k43LnK@pH}YBdqxpGqqN0?RcWuE@g8! zZ()=Jnjka-EW^u>0iT8dfo0XMOD_d&mICc*B#M9lHv~8>0Xfud6D7?5)y-{E4;B{} z*C)!TP|16~Ocd-R2w-{tlyuc}a0-I?_h&_=d!RswG+zSIK^F9rf&j&>HoB!u-6^o(=kh35hK+WYQ_Uqo7sLPb0<0_F#Kc7Pq0lw)__2su-*^Pv8YxZTA4jLT#Q8o4 z%iVX$1VY~{;XMYrI_lG)q5x(zl5K~dnU!_NlGEgb{A3#@4(PVDtZe4%99g%6Y4Z?p zcc8OQUS^px)DSaeW0j<*PL6h))n^!oOYN6J*Lo z3heccJ`zr>4bsIu=itnHl$5y7fyE-371?rqQP>O4R&_`F{FA@qO+LC#4Cr+H{8`vr zz*yk6xejZr?YzL-7HuQe^L$?}ZvoT-RHx8y^dB2jMJ9fZT2|#_m>w%cwSeai*V=$` z1MckXY`L%N@Z^M!I>S<=RTbe#R(j)5T^!}0?mQ?02Yo)e#&?G#OC+$bz!*_IVW2bJNeA>G@VOr` zK*)G3>&nPv4rji3qeDPv=Hq7!uXN^Vv+u~ovA&IS*s7$@*BNZ)m?+J%dZ*Pm)6v;E z1WYWTR-C~*Y@QDgN6w1OScFuIs6VZJ0vxm`P{;3sLXVQskN>t!8Rgx~P2KOf-}2vt~(!<$_Y?h_&&0eaN;%Rc?Dq9cV$X2m%5^ zhziYsh_1g#hObetPYb$kxhyBY*tA^#v`*kO?t9l4&yF&B?7_Jr;K)wFR{t*n8v``^ zhYlz?8Ut^TXGXsWFSdup8d$sf!`U)dz*0NAxLB3h0_gy-UK7v=$*ffqnkp>kO&WpP zHR&NrLA4Ky1-Dd8K|Pc1NDb?+yz2bGcEAjruRWB+!Y(SQf_4n?BXQkzGvVx8b7>t6jKgF&Hv)7LY{y5D&BJmiJRh| z?*0a)s1wj)K)+*LJy3BS_yX~0?r;6LofjPwW5itoPTk+4oMA-$bTN{wL(pLl7o_?i zG|Ox5Kac>A#{_Tg#eY*iL4w#{hnP~}k8}ho(QW!y@o|4t^~}AVgI!%zo<}n}e)*@C zoNfI#tN*{0i+{h7;{Us@{LdS8m*0GfSy6-hRe^s*LRvzf_Ld(}>>CxPPhKZE@Dkw6urvOV4!GnpKG?>3I(W6THs1C0h5;m!5=UOV1l z@h(8!y22jiH1+{w?sUzZpA{oq(9&(@TQ=QWKY4c!;~jFywF3k!TkZX)L~7gPZ=ov| zjYUNzihT&>v2*A|`%b!sw)@tVhi14~smm#K3$oV;#l+@dm4N4!yrw?CH zNLT7BH2VcKDf1q*iH;qHt&ot%-FaU*_+Ks=bQQU~ zRHwQwV&%vyDsR`Rzg1JKHP!l7@w~>$;`PCkvGMVXhvm&NcK5Xcd(@d8fuGmrO;T@%GROFqI*({I4IL+BxtUy6ov z;#``F^~w;{$hxj2v-^tlN~y(wZd7eJfQ)dl9IZ6HT~<&qw4Nl1ncQi^%EqR2NZc1U zvM~xy1ymdEKY+U%#XZ^B@1mSYo4blGZMiT{;djV|c?(fSl#+R-IB(Bp01*9rBv(!Ga4MjRCRn_(gTI6nVA(lVdUji12g>9Nh!8Qr1hHWnAmcx5DR9)7pAcr&JI~Iyf?;MtQB^%d768w>o+ixDw1%I%vgSTVVS( z1F_MC%q}WzD115dPR`VQx`p>-1N1Q<;5M7B`>oCbDd22G9%rdPcmqsVk^Q&(V^buZP;x#!v2hy~5n?bA*Barb;aXcf5 zAP`d}V`Jm8V{j+h`K@F9iQICG(JIUK^$kMfk?m4kz~^F3+dX!F`}S=P@Q!QwRVzv* zKzoXsn_GQNtkqi$jXk_RNeKziG~-+hX|eR~D!GFb1S7&V;&&^wO-r)Ol8!KarW-Lh$#GpGhZ z>Uir0;(^Q2gVq7&>l% zIX%$dk8>vX9d!Kovoe|s|BO}=p0f4=zio*aTh0`GgZSTDu#>rSLVO$iTjl-&xDe{4 z|DWF^PMmJ6dx4O3F7yIRwy8LN{F)n#w2q7B89xc?xinlzSBXsx4djQNM{R-k)1VXY z$;zPrr@ilvYBJx}j@=m*bUcWHkWoQKT0}qv1QZnv2sl)!Q4x?nLnoAAWoA^+NJpB4 zULq}Yq9URoy#$Fg=>!NRp@foezmDgd zIMZq4+|9zV$HeglG5$#|0^JV&K?mjKDuS&^4nUm_f$Q5Ceq*h9Mz*~v>wOX5;elde+mN3@bxPTthJ zmX494jKstPSCm3(k_27Kf0QuFxgqOpWtHSy!rsG|CH_dH+m~5U8yz*ol*M2gdp!Z; z>dOdmz`o~z%qg+jJ9{}wl@QS6``xJU=B_O$)T`aH)1yD?r0RouR?qr;^5*S(zsGhh zyiv(EFVUkoNr;K1cB2%f{G&yV9Fjfjg7z*mE8OqRIDLOjvTmGJ{AFXu*VBbh{&ZSD zMXo+rH&(F_IgcGPZewZC&G~hx!0Ff9Pbm&ThLZ-R4ee9{0jqZw)?nGhG42e}L$r%Z zpw`ya6&5;X*4EYze%|^+s;QZND)EwadT@6Ff`Vo3#%cR`f}TBlrsj;Eh`7_STHvL- zzPsx5GBW?yV9k6g?@kBzZmFoQwwBe{K$v$a>vje$?-5m19NK^JvB(jX1D2q&n=MlC zp1#twW)UWh)jNOw?wji1IVKvEXWUZ}b$l&b&eT)~J2c~bLz=fAcXr4fuxc#wPgj!} zxVBOQ0bK#)n6WKT@BDGfd$Rk<>4l?BDk#*>xX7CtsVk86?YPaWlGf|A5-VBP^89KQ zi_Bfdt=8~kOtV1#U&mmJ16&gg3=Bv?!hRR%wUqS4#52v!&0ULS51lxkC-*DjC(>Yr znuI6spnm96rJN#^?0Jt%xVd4AI3yEDCNsBgt*4tMX~t!-#9 z!eW2TDIeF&2F-r8H`MS^HRB{6w~je_rEB>vh%_m0FW^O??ufxQoc2~$o)y)mS^8!N zEYo{8E3W}gIL$+bpta_hp9IxQ&J1$})3MGAJU!8I3Z>R5Iu&a;=Uvd?EWi@ zJ0$=~uIyZY>MwYC^tMtORpD}V{*_K427@u~ephOlfi$1%J`>2h8(3D}^w=84*pMc? z)g%Ph^=WQN(Q$z7gE=h&r>t^;1 znKn9}h!5j2?07HfBtbun?JD)iw6Uq5a7WY3-5wh8<+QwMc_>8jDC-8dN?*!AcP&Z00uOqS1UdP7n;G2QAj?h^M*ZeVhv9 z>~rA0z>ms={ta3S+deO_Q;O9CGm8<=-^a<9X)MPnIssy5v~_m=V4SQ4TFq^Wo^zsd z*$?;0s>l1yVuJ>ThKI!+Y{DTJPlELz4#-8wDlP^;g`R1Q^EW(y{=6wjLb#W~Ko2*> zW{yYOpV!dHM1YX{88dllImVu2CBzYf;*2JO;}_8LG-h_}IPq~Ovg!jnF00+v8Os)x zBf3}f8IMvT>G0i4T-E@g#n9NIJ<|&9%?OP1ol?N+soUH$BCDvzOnH`t0dWcpty=Jf zAbV~SrP>EL+AMB4c;$hsX5q9!Jv0QCdbNXpD>2WJru{rPz3btAg}k~EEj=Bb;5ff=Z1wBc zX@Ck=>LFw9h_^9LBgYfyd0BgE%v?6W_}&tg8{GxbTJy`>TST$a5n95!v^X(UP?E-` zDJ9acIWt<8Qg!1yK+){Z{OGIXD5#`jlvA66`$&hf zA$|M#m8MpF`1lSe$K@9S3p3f7dzQ!oy!J|mvHJ{eA(!K*=G%rbO(4$Wi{IJ%X-r0W z=%c_Qv>W*B0WU6ST;BEDg9mNUfj|wvUi<3RL{KFf>ghd`AeZU^JHSTQ)z=xSE#VE1%Xj>c7dWy}NwstB5J82@iqH)q2t3z*zAE%k7Rt{Ov^;FyMe;M48A*v?$ftNly7sT8m5db0KFx4XL7wbJL+)$K8pst zOx8LrVM#WQ+83qhHv9k}z11OZia~_+bO8Cr)O8D7M4%B66b54%6O3c<{>}fX5ETY> z`}EkNx*^xQ?w0oU8C*8RP-o~5EA8A<9mJ)jr&tOAYAN7J>4TlMx3_0O(VBhToLRvs z7oQ6w;El6QwHdT*W??0`Y0}3xdb^vf(%1rEI0Eu5NB&$K|ybdVI;1 zOT&Wa)sL^b5dWoXXGVi<)MNrfR$BrHWME;Dts(4l4ioOB{Q5KQKy}<_+<`-GptzNF zgEj8}_V0iO>1-kQM?t+_2&0}-neCa4jniM_4wjp{>M}(G^{6P;*!<_a1nxh^Zr`wv z!DQjLuM@TihxvbcS3zoi$xj8mi#Ko7<&Phq@4T#_pn#uE7vtN#JL%rN%@6k}rH&L7H{<@9SiR-k6o9qK%>#JVA3P3w&85O_~d zAbP?c2j$Hfw1)`}M+ThIB2pZCTAo>)J9nqNhY~`4AcXdM|mUTiR4&wjW8Q+_7xJ5!S3)ZOZ@OdQ~5Gf%-v(d z!M5RboGo*XwaCidX!>6JL44;k3(#~Q)`?7`^?FxSD}3!Qaq}XBv)0)5tBx-l4LEeY z9eafYccgq z$OlUIC%dCS^v_XM@Dn#)&>;KOIyK(CHVIOiK>x-_nX^D0PP?eCOjoVZbXC~bU%1`l z5fWf2uy)LEAI|OQ%omz>A=pv$M06(nv6-dtUV+dyFbFB6&B$$HQ z8V1-b*Uv5xgminsxCv2aIOY5a-@)nK`5gKVKrkyo@;r1e#@Sraq{3r+{ci9x^T!UpnptePJ;Vf4>YTB3GLbhH5AYXM=HT2fwq zsvdU~2Z2@)FS-Nd&jkP`u>vE13Jz1uXfW1Ibl}bOExuv4EQ!jIsWYV=*|=0d43e1# z#9o0Z$+}NOtgqX+b1>_ddpc7=2UJUO0#WV89etAz2iz44p+S(qqa2k5*hUFg>yTbkAjkxwE0viGQTMud@%RXwnEB$V=mx==?y~~thXl-q+ zeE9%GSdG^9S{;y{Mi~Te& zvM)=Yc=%fYn}Nb_MPGyOpth?8g4^b+%W`aH}>hLQE)&g|es?@V-Eltot^-` zPjEXQHE3yTv#G*-%HlW5z~b?wQ!mwwzr{qX=|Sz3XHgCOzW5S^v~T+@h`)OSB3Rf; znz6);f`S5`#>|Y2aaaG?_Nd$*p9LX4Wxclh$d$1q|K(=n&L6^XlLzk>nm2hdP5 z!1n6_vCGAvi7X~}jrp7KKB=Ip=JYjN@B%r5y!z4HBmF(CSGVCF3V0)09gQ88C6e!AbCAqs2(XzmO< zluf!gD@MTHZ4_E4eMz%}R1T-_Hm{u1xEx%O!@CAic4O{+!@(L;tC2TApD5*OFx2})`miCx~* z4{}Hjnaja&p)`)u`0iaZCSp|&3F07oT2R~o-5m4?tHb0BGMSe{gC+Laq$Ii>C{u!E z*5g0Yy~m+1X#2irx3}TZ3SUm$6AsR{+VpdE!D7x&3GeNe)?)g=9#6B0^ad7F_V_05asbd z(JGdZ)fAdHzH}+UXQ958vx5N>%-^D*e3cnjp&3Pl6S>W~hCPl;gnC4~Yb)mn^+4Q= z<<&{+H1xbpELTp2vq!0vX3V$#x@xolWQ5hfz&^yCOAU<8fp_M)5`u-sp zxq9_QWla1btj3z3$f)P@+~^`-NbeQqU9pbf#LHOSgD9rIHvmd=V&)s4LOc^Que6_M zva{q+Um@%`_buyGwgaEI;PDNA>@Zah-irKR;vJCI;AUR&$xd%oDAyuZ^>jBr>(J#KyxCn(3G(nyb-~;iAMGjdOW@A53&8B_8LnL61Za~|Z2C*CNEOd-h zb7J7OABw#0alv$NYtgILYHCk3THc{JsI&17izO3WG~ZUJ;CO!??s)Y8&| z5XtHd;bTs{M}A;UAFfl3vQjY{We*+SOOpRMOOQsyrx9 z#nL{ypW5G~gliD)Wcd&4j-3Wyc<8GP*A{&QdUhUjn=ZDQ!- zs9h|~dT3PF6naEkwpTw@$Emp?PcoTA+Bi8kxxppKT=)6hQ=Qa3Ql_NZ-!#EV{(cad zA-ur<7b(7f`Kkiu4j9k3tM18ffbHds=@K$d%vU5rvgFPw$OoO)1p}SvwvO`Og@LW6 z`WG)gfX6W$z~YyNBIw!5o_-TcDmaAPh`SaT9*DgoD2Vw*E#HsC0DHZ5x z%)Ytc<4+V-=5!{lS=G%&IJ{ihBmfrw)9z1aqxmp@4kv)Bn4)q6!cG|Z9d+e{MaoUx@xGSs06>OBPdP9sFfkQggcmsik#LU5&K&p-0MMO6&I_ED)n*bEir zHM=G&ic=lMi94TXUAICG0e)ke4a9Ll8NP_1)ERV5tTt{5Jxlm=%Z zK^G#I)4+CCN+;64a2M?|rj3KJQp_LxPvbAn60e&Wy>;@M=uA`+>pnuKAgN%y_lK%k ze9SE_xDXYF*DgV(Xp#^M?skg;e_jI!odTB$>}j$)*!~OOR!jwVv8z|XCF9?-PB`{k zCUC5Hn@QQOa_f8`847Hf!Vi~%WM;jkgOg7HjsQC?2t)^OF%<$0^6HE{Hj(BpV+pQg z@pJIJQamm*FM3CiY~y{5K-1B}8!){A3;5Io%vT!}XCHU!{u5rT{wae^B*E^oo6q_H z8SP81dU-rTihp~4?`y90WQX5oJbdN1_`PJv`zPya(H?djN3ZYi{zVNB4L3n`Bm=eR}N**5Lq)dXa?G4spe7F@bA>@m*f*rv$_x> z5lINj5b$%lrEo5f;rIKndX|=P!#qd}3J9zZ z#=*s)Ef>yWTlzzI9l%z*mYBz8xcw_5`E*?m1V?Dy8$Ih2vJu7WQ!^5 z#k1p7)W)(P2*YlZ(OI!&o)lkchdY6-zvJOqMl&vuL&EE8sd! zEMPwLH!X2Z1}+LnSJhC@HkaqrgT>v>-LXDJ2njwiqM+z{a(cU;ugBjLTh2&gi*9xI z6@X%LGM4zoyV~r?KPr3=|M&B!WXdu}pmt0h;>nf}!peYi`;ULlUq_W&k`Y3jO5i%P z{dNAC_SI8Ol!UgBxgtjn9(-0!BwZQUQW}&P2S)9E^>)9#iu_$=$L1=bm0PxXt{%>B z<}N8kR1i{I2tP(kahh1XTp}J5o@G#OkQn*1%$n6#NGO8+dt~OsBYbM_^Lr4sH7uC@ zxQnGY{ty1tEs6uV;VUlKE(>xoTzx!VFTocw#M1unUj(J+NXK9`by_}9W81TQZPJ@t z)0ma3IuPc9SEx<@CzNEUQof4Nh@@xF4l1+y&UP75w7~}c798C1rq{`_)#WR4_$h>e z>pP-jA~GMaw(k&-yRdseY_k*Wg-x3_l|q)uaMt`+m|{Y@rtKS$Ew;S=W;YxB<}Ig+ zGGV!+P(O|3!^bW!Z*77av(O&JX-Ys`{w1+-ojdNcuO{xovSto_SET`%czk&??!?Ky zHMa$orrgs`IPaOej~Kr^Kd3f-!d&k7aq(lv^pw1&+FXvWs1MPXq5xDT9Wa>?q@~F_ z(C)M~vTu_SVnGBePo8RyPK}4SdH=MQ5zVK<(%RADmG%9|vb^0E1+YE%XY1#t+ zA@L8UaRkt|D9TuKG^;3w1*f2pTPqb3U%Phj(>8Ix8>R`at}0W)LA+$(fpDHgJO42s)?kamKZF znyOaBxc{a=t?pnUCHE1Mk~N)j_@m4jUX1T$;KcQMsYT{n-)vkQ?`}7x22=!amwTb@ zx;mB6zknzXq4KLMWfD}E?EAPCwV2~BEx$ZI#7XG7uT`zZm*-^0hcRS%98v%Ixr6pS&h3kQyRYsdKzjd#dr(GZ-3IXsOm6zY=OLbMuH7McxMtIZQ zt{lht6kYIWF_xzZJF#F7F9Z3<#p*B&(5$wJK+D%0_#8 z3LPR`_YAXos#%E+IVI|u-x}Lljj3}h|0x6$!NL)6{_HT~lP99seA{}XmDk?DeTw^= zmO|@O&#`$T2rd3YG zvpmDgnDMJv+$GR^R0rQT^ziVwPk9-j^5+oI>}k&E}0tICMWw7tlA8i zTfNp}4=c!%?XZ+Gz_*vOC@s(*piD6#(Pf;RsfSGcuvCoi=r|{?W}w;QHn}x8R;eJM z3SS?uiaVt7pbhyK$P`#e-`kY<;c)k1y<-g8()#E5D~XJ?w3bH#bkqA|{O|GEd3 z*p++G9sM%byH539+n)yL64WXEAT6z97T?=NOE#B7R4^br5IG_xm0f=<+HR~>1iLS4 zAAb1-{Q&w23A(arV`C3SzJ7 z^`%O4&eggPj2jx=+y|#02TrO1SN9JoIAmj9GYN+t`J!0pua^(epI)opDjmAx`P`p} z#Q-|#??+|o@LRk^l>`N}T*1{Z@E-z_&B!`_;E^< z9bx!`Z72*3m$OJ6PfX^u7(Ip&hn^i!GPCRs-C<3_MMG*10TTrhLeOeHmYI52s=<3| zIuKFYL-vq$naZDZC@ACx^!xd|WHK_u+00&Q_nfP%D{D|+SN!l{bqL7>WJ`w{vl>U9 zSet-+$-v6WD##-=OQIQ2!qCz(C)?W0&}a`Q$N^&mNdc*~m3@4CqL7 z!Ee)H&s#24Ngz7d+nN|*$ROlRRW3VMtP*-UZWi$Z2J|-fa#wpHm(nv^^s`~92o_`q z0{luj)k~8?O16u?^p{TL)fGVbX?>(jl9%-0!JjxRJE*W!TWF}DQ88a6p)P2sSMDoe zv)KZtyq}BM)eTEQnrO`mR8}+bBd#U40#ITH55D4#;XwghTzqn9WQ38#t2*9ucb{Zu zqwU0E=UmNaZB=A~zZ{i}LdimP&}j+dtTsf&k#1))1Y&a*)JYZE(R+N=5*Au7_0pH4 zWn`zHOg$x$8PpDt_^mDn%;(3$Gd0q+>D1*iYU^C1Dw$yxRByKb4~l{(I26e-sHR4E|1(E{U=fG zx=M3%A0mFY=oSx{`%<>f$NdcERo-pB!qtzexumM1+#$Ci{@5fzGhEm9&_M&r(x+vq z0nSUBSLfj-j8K10#d3%Kf<(Zz^0j4NZkb-n^vlx_G#5qN#%moBJgm#bm40k3*tifS z<{GoUoSDZx9PjsAarxw&EM{{=3n6e@deU-7&vu)%{20iF(bJ;?;9kITCI)FlUDxe{V+arMqI$3`!j|0~mA^K50qYu{6(MOC7?dglAEEf4 za2JM5+PPF05;Oif{}C*ADFSa2?p|0GnW~B8qObP1Mdfp5=Tg4$8e2wjBQTA%v)Iyu zivo-9-@o7XBkpp4-2AC2yT*aI^(eJ!Uv=imRoo6vT?8RaS9@QNt72>=W=oG)Jc*&f z(~_yHTX9_#IV~!35Qar!?56nYNOKA%r*t@ThqmmrtzdLzz7$wFGwCHv zu#6DdQ-Qcgn-9D|UikBw@hWaSzpGR(kXWm!CheiaMUEeyRroG?YQr}Y$n~Z(w}MxC zsfCdqA)%zYbl}MVQv$%Q5{xXCo(g zV;V=*W5z~*Uq|%I6In7HV%StRehO!rElI{dqfA1mC#;BYTQpWz0VLXs#A?Q8G-rEkX*(#atz$=nGprbD&ygQx>(RgfS?<4zVy np^qU-f`rCZTP|S+Lt5h2JKGnF%Y>`IyD02=opU*AS8n|u?5whM diff --git a/doc/salome/gui/GUI/pics/pref33.png b/doc/salome/gui/GUI/pics/pref33.png deleted file mode 100755 index 74ea331b40ab5499a2150a77a218cc35649e6982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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- ziU}$ROlO|_7E~9A>3Oh1XRcn=_QnRwy<+qH-28yNMQ@Xl6QNNyFZ$I4+VeFqJyz7iv$)7V-=z3Et zV=;&Zl0RC{m@LXmel`lc8J69L)hM?j@vOEbaQOLnWkDnv$|AXcp`6ktjxJ&Sr{8o- z&C!?N12KCd2P=JMFX|iT8|EfZBM!?&jZ1aAFE6dqrf;sT&p1t%{+aBKu0Qe>{Mu$G z?yE_SSGf5s4rI%vh+T=<)v|D?Awn))ryzL#9+xOnRYJVOjzGzRc8sM;F;`VSUz0*X z!D!gzig@kKC>oFX_A#FA#7E;*4#ASWk@Q-%)tyBcEL=()R|?1wt2AjBhjDSUl9Mx4 z#D9878|R+nNM<+5WUv+OeT#gMb4D;={AIk{&gbN!`&{JIYVr?KpRSaf9;CMAsTH4G zmn1r}T0hlxe$CK#Y7?FnFUd+cwiwcnV9}D;sf;IA<*v`aqhQR{IH2sUuaWWFpQv1)_>mKRxq=qWgG_r(}*jEg%vRitO}U*C%U2b z4%x{9QO|YcL|0#aQr6&*J|lk=&%s||Ig~i2H}%eWf%m1Si_ycIsgW`I*#+vHYn+kk zr{Pw1OidqZ+Ud2Zqt+tvb!R+0($bYwE<01uzv^LP);!{<)2Qs^m^eW=&J3VFRH_79 zy?$=<8^fA~j=DRmv#uxo3yFt%ZR7E*_(rZu!UyV@k0Hji3?tvF^~5ukC*$F0>#*KB zfBf4l*`aaT%@c;VrVTHj9jvO?9z8}EPm$k&N;LT60p?Ls`T=4NwtN&45)z~uJFZ6( z2FwxL^%}B-9mE_Gd!h43Lzv%MT67APpFWpNGL3#IpKE&iJ_E~8(b`lUe&+IVF~@}F zXzqnozjIn1J%01^hA-vhY*_epC=@!ki=VQe+rLZjIb9}Omgoh!3*K|~TqA{F2p{u- zhPaTkTNA`PU$w69h4e)o{o>9fzSN3eiu^s%>$={XQT@P~5#=r@qajQsq_!!O;ITrV zU6#7B`4e$^I8?W})oRnBQv63o$ed%V%Gf4HM4ToYxrtGP&;*64KBA+vDtr>dLW+4ZSup zqQz8}muv*{tm~{Nf^&QC^$cC@daJ+U7SGErwz}iD9+B4&>UCEi#V^hd7ie=OT=BMC z&JwnY+?`R&K1U|(bic)(_LTZ#f##`HY%zs`l}`IAGD?cB*#6I)z(zgeSh{yJu)MO| zlKcLf)ZeZ=T{G6l(ld z%KxH2wH^>i-R4pST#y|2XS#RllT0a8s5)WZ7&Y`*`T^!=Bje?IjlDEYDe`k}D|41}GG>pOw2tdRA(F3;*)CJE%lLBG(8RfcI!13VG{oY@LU+ zUH&HdFhy6XMP2tx@jtcumq28G#tY2Z(VK*1U@|Ubo{xI*4Q-(jyQt?^EL;nM@r6}ILPop@Loeyj*0pb>DC9<1 z9jM+pJDBGUkO`l*v54;5Kv3{P05*QR@2}Tic{}f#|-I2 z0KhHXP|vku#6JtXLetqXM-!b{-@YtVj{ zUfq2wd*$!ydv9?jqjY1u5x<*J!S}<5x!sj9fsJnjrl+672af%cAItV-$SQ4Yf9vlL zrIuCtz~f9Ke%T;*Ifm0DIg2rtc#iojdrwWLFsj1p1S>qz8JCTXEmm(V8BO&f1KEC8 zQ2)X2caDUlm-#f^Y8lwBm`l03lKbFOH4hAg-{dqlWK(PVxIq|=H0Vn1XR^h``D$wQ zYsG_VdPxICWjrz{|6KD!tythq3tG|`!fJ!RUq|mPuRycg?B;3`kz&4*k@+I&oK@Mh zuYYi(DOXDW!c$2}Y6gZ6CPR7GC@7wf6zLgFRC4M;`SFfNDetYQgveP-TNNtH=Z#kf z%LH2g$PLxp4P4?bcR%5y4aE_ay%#MtUgwbr=Wn!7dAvwBy)jyB6lyXu7{*BviO~G> z)&)+d*V5P3wl%Vp7`(JrGS;&eFVs&|IY>xL({gf#|NgD3uCBhmyGwiT-qo6~;rR~n zs1#0ND-I!)+Dl}Fn>bUIYDpHXiPgy($(Jv$x3;#zC8=sOWmZN@j3%pjoxPaI&W@P; z>jccpmY3UNg4zjh{#j76)<5!2&v)-;w%422$~!h>239{lB#eBS_AIG?VP9|#Z>d(W z-TUnH*)c`SIa7m(_$1@aXE;CK|K-x1uXNhA;d`=DXsWm}FXQPi@CpWZ`{k2Oo<`?p_6=4mC*R{I_$k|Nia$i&cZ_|KG6WN%sYz*=|48UHhs z@92Zz10!9^H{CuPGtDH=($1TXmw#eX$|tnrd`BNqEl}fEi93z4#@aqy$5))04I_48 zPNj)sYKhVBt*YmdIFab>-Df$C2gsI1EJXa~tJgx)`+;QKb8a-h?%}Avdph)auPr%G zS*3--+b0X^eRZPwJgb-r3R|3xF;0l8&rAG_@YIy` zOJNteOWU63H1+l*J@&7}Z5kadF-Z%iw1Fwz)Hw0t$G}y5-8c*DNur<zaW)x(IWsdN;JYRv zx0nO(ybZP6_CAuRK0je9c6bSAp6~)vRPVq$@nA>$_;H@bFVY`1tYr2HopQBhw52+O zJ}&VZCCtBFnOyrax@b<+wsolprFNAk5SD9wl_Fygb#?E~v;@t5*3_@b1bP+D!f(07-XR+YsDR#-=(FxAsKlf9B5O`Y!_Z>v^9#ag$L;$_nM92F#PMz8doxougc04=R|JimiBS8Sm& z^8>>kPy3b8Sr`5-RJXz5_QHWC)vL*BCxL_Cp-|;VOw%9x;O!qBkz`7V3*-n{M>uWG z$pY<%`z+R58qA%UZt}0*9W_x+fZpY$WWHJ%E8Jjz1e4!e=?v<7_dYfUlBrE}wS_Y| z{d!LlH%jcXyE+lOc3MVMug1)1!7_63;Rzp+lanREq`JBzMy_ZThS%ZT9H(t*sP*d;CKC1@^8>{!MQ+^E1SQDIJ|g zJm@`BP~wk*bkuToj2`8+?v8Gr9<6cME&dRQbeik9afg~39vq08@nDX`-s*%b<(pn% zwU*^Cav409KRtIVp2u?i$k&=mVz=SP)1}hYGou>jlcC@xF^i`XJ#pz$fmMg)*_(nj zJu}mo)F|#dtWm)KPCSUb6>tR`7q`Kb%Vu@Ff_dTBuV35CBcbc-mUA7^p(ajhW#+S9 z_(HFS@-*aglt00*y(!}OZ4oSzhK7eJ9l(@uaB$SC9Y4YMT&JMu%vCG1w6W=L>s{I* z7k00HXvV}?T5CUA>&EYebtM@(TV-Zq^NC7@&-s~zqODtp#QqoJr8C?H7i1KW4y6yg55ky~M0! zes`2PLu2b^v4tk4e^yA0vHn*-uL^UAy*E=vKh>i9R#{zlCXA%x>%N+>m3*B~N9BH4 ziQZGWtJ4r8TbpxDK|$gf*G3{mo#m{Uc982@-QfE#TlN?)e&IMItW9C3#J)+@CD1Yz zdNdw?w`!~tUk%mM8cN4&Gk2M-X8XE1Fw)f2^}4f@{HI+N9jK-X8`S=4)tcjMxYBao z%>04u$C+Vb6SuHL6KgCNvsRf3gYJY`s73;3$6Jn$j;{)pdF+=-^YZfMcbt9NTf28^ z?hTd=PI4G@S^oZh4FF&C%geNKk24`H*NqEll9A2b-E2eu&Zpd((k?miE>Sf%<)}JT zSAt-y-ujTNW`d@Z^OIC+uG}+1PmQX*g8dYHhV9p}AfcFrJ_&g#kA>yrHhx?61G}#-n(qt$k-{C?5rvgki(Fa`Q=v@c?2uy)){*7bpc* zr^il&qQ5Fo2`M7)aVtub^x7lhc&y&S6fbmG(^M@rZG|(D#hr@$91&!JV(9V+)x~Ha zOCiXWL%-uE)!Dw!uFcb@*csCC(~~tW+bd&{?U8IYhucQi2?!RZ>gw!IM@{5lSpbmG z@bap-v^_l7oGsa5-(8w*kCY{R4=vP`RDuBS(CPQCNqQSGRZlHFkiz)?Q{eNvwyoOh1EqRrL3+8WaZh(m;w)wX{Rkw#$Xz!-4ua$^rYNj!JIsZTfw{I|O+C+`a@E16Cz7`n2 z;)-0l>_8xg$b9+b!DAQh-=XU%yqkLFXUL?TgN;Zg@<6{dCr^@YZ++v?z?C_l+?jQl zoZCx7!E_0ZBJD#NGE^*rWhM`s3vt%>>dxZJrrgP%p6NTBot^+`Q`gXlzW4g=fL`h1 zNWtsJwTFvL0b)9NEhckYDLO4d$D8eJAkWC~QxUVOKYjMh&z_wBW$@c=qh@Qhox%a( z=&|c0BrPObu5YrkRA0r&=GB;}=zse32`-3me$|=zDMO!*kKGFf z>Mr7uf7YsVA1z^?IjqoW!2|ZJTc#02ez6GOdg@|yq=AqOM_H4iKxm;kFiIxHoX>7Y zyAMoBx!Gnw1HFW(Sp zk6?-BwV_4dFf1>XbB@T7IK3yEvN0k$CX>oOK@|H#b*G{em3ABXYcl@CEX7{VON+S= z@QtOb>{p&jNPHa_AQF`&71A!>ZQt3PZO_rFOJI;o|2-U0<4WxR9?B-i{>WF}#ndcD zD%W+4zq%-`RNRZ7?D4(gc1r_#-3fxWR%;@rrp!R$Nt8&EQ&PSFl!`e}1BlqJ3=#99VZoO2rCYsW*?w%97943^c$JZhV7zak$isj4jxmcZjRlc*1XQ$|X^=#>Hy- z8;)lDA>)+$QSM-AKy7DFxrC1M_WY-mlgW~r3a72~PN7zH&8BBW(Wj%faK(dHzb;;; z;0v2{b0z@zA<3@&Z1k#MeXMxapQYGn%o|>U&Chy_QuB$dG`*?({*33S9d6C;61JQT zONYWr^$fYFZC9oMbLTe4@s{^reN_kqK7I)0gCwtE}H9B&I*~iLtPpjJ?}V6l4n5 zH_Z1Avvz3GmSs45x8wROy>=r{F^HwAd)PEIcV#X-S7!+Z+i_^Ol$Q@Rze86O=(pBK@74F<4x) z=m)cgd5Hp5{JCVrl*`0uH%~8GqsEztN{gzBx~6njYj>&M zq+hFDcB)!ke6vyYOcVZ5OL&UeY;$Kz4@$AhrkY7)O3RyN%q2Tyslb*~j8jFfBUZiX zeWZ31E_$|ld0(*(Gg_-2f!BF5js*IzX>HribINuf|_YXl8nW3f@c;XoD<6w%I*Q+k=CLQV&Zhi4eY zX8jTU88S$VDIwNVt52V(#m`wn;S~#}42+Fci`da&YbiSPAGmw>?&qPU3ac6Kh&+0~ zT^sWQ)e_^hlh+Z^(i#1=D!f+H=f}#-4B$c+82fLy{YEXdzF7+x3L~+uj&qSJDJhL!DAQ@@R$K16(PijSLD%+cX{o(5 zcPvvb18=rHyt}Wo!!6crqGL8YD@G@}q}neTeV*4>&%}JHtgOED=VYKqy4SjoSJ<>9 zacS(YoXZbzYch^0If+rz8rC*Buc@FgX#Si^&wP4K;^^~D(}_^`jR6MSvyp4>TXhRn zr5PMBX+tk~Y5FA7tHOdRuUNEv9BINkB^sBa8eX(N^ySGbOc}0~<0f-=A|i*foI205 zoc=_+`Joa@erk7`UFUOHH9>`qs>+?>=?qWk?MHPTs+@F8sPxITfM`+h+gk$gtxnZ- zS37MXTJnWQ%4XKqWcEibRf`QDy?S*E%j@f6QHQ*O-f8s#@X@v~hQ{xosI9mwQO?!+ zrxj+grGS%*1G$kit_4bE4U2N(OFFrD(L*(szs^CS9vH3um3;+ItG#HbS8?6Y;!Lj& zPdVE{GoRXN)-aZtSTe}HY#^^gxLxRbdiYLw47F%j%k%H{1EayUQaWSP}Xqzv7AojNF@a>0a$5!N9;E z=e2&vWj1Qq9z@P7^6=rqplUR?Vo@vA1)O<5m3c?kB0(KpfmM*SFc`XhsS+x4l4OC+ z%zGG!Kcs|G@Fo(ELFeKDhMT*a3$}bP4521&UT@zjmzt_1g+<36Z_B1V3+Hj& zzX$zH8j!2w-7$;taw|*=3yYPgI1U3mAYzK`C6W3MZX!D*ZFTcfdJR)0BUw9uT8$tL zbROKa>DXvrVS4HbAELiYeT&ggWTDR^=z3Loxo)(#p4r&oXxOK2Rn^@S)sMV2T&Q{j zTz!v|8LTU=OtSsi%-l0;1U5T(on+3}>~6PS=*z03sS=?)z-o{7*67&TL+VaeEEFU4()$;3g7QZAH95|5=y542DR~FmPi@S1 zEW@Z#*|~?qSzgpA`r*0=y-e8@ETug4LVml3!P9nkiUP%dtJh$rtk>|cva6e0i5{vu zF~fOh5sxCW2!FGAklax%?gsnpB})KdAHn z>b+KXM#*`iAp1mARJOue55Z+RTqxF#opdtM;8~QL;gvIs8lrjd%#RX zoABxB>8J-r*Yj%+jf1LLREvAWu2Ip6Iiw7D7<9)sbAWz)6bEo+Dexy!u;z}9@Ilukol&ViDEkV;-Q(BU- zoF)+yTn`L~J+F{)U+tm4B|c_a!m+jaK<*}*Qa*U_V5oYe9l1B68M`=?e`YY+n*zP_ z7_(ePztItO{?Tyb#H$^xW^CK$I-9zw&!RJnj^$+g3-Xs05*gcn_8`2sjivm>28vx7 zUwjc^NLaY`aK>3-{~)rRtG!rB`svc>WxOk&J<71iJzjX%9FMdsvX`uEmQ(?HUW3^b zlo*s|Vc>zaWB8pwZ@fTRKKp<@a<88)^2?f9^w%VeAA7kSGWMgX!wYh;Zt?A$3k#Go zTLa$tFKidICdkw;t904840(dQY;~}y2czhIywS4#bLNq%i1xYXn6d1OO|t5hwyksQ z;(3>XDD!u_d^%dJ%y;O&b9VF|DrY~Qv-R*eV@6rbxtBSxv>)edow?^|R0WCplKz_o zi1<+~4_~Z4p*~XOz=lQgIPZwfWg>Tgn{DV*!{St}+fkAIifW&f5nyvv2W{=~rsUzy z5~{~4dd%w9(JhOX^4!_d=^LJf`2jTd?|6n@tb2nrYrRT*~h+v(N$+Gj{gAZh!jo z6s3Gkr>r4r!Hbj4-#Zc}T$DEsaG@~=r&cQF7&X5+tkk?YdAv7VVM8aD^2uon_4*zu zDX;Neq(NsoOyTofm%a@Q3@jSHO*tr%QwTSb%Sb!BmQlaIF>^^h9eJ1uS9Lwv8G2y+ z<0+Zl_x&5M#`mpUw|m8<-0T>QjEv-SRl`+~2D35g0KWDsH-Te`%MwmTZD7IGV2$gr zM{jNyf9PoEIOKX9TWW@V=~92hk}aRDGewf1$iisnVdyo}z&mrhBZ{$z<^YPuqqUmu zQnN97g)Bn3jOQg4fy69o_ni84g;Wkd3>=Q=m=rsXt%j=fnK#o|a;$cLLQ%k~@kp-7pnv7f=4nkrA3J=)n@QryyG zkSQrRGaPJr!B;d^yfGs znT^g)_oskvypm-JAm_afrQ1$LpDXdjub&&nYp&m2$x({Xe0)jSDOB|70EsSOF45+! z6*?M8fSich5}0btJUpZd3eiWw6@a2rv;?3-Ha9k6ipnmp)-BtW{i$iV*&bsh7UD4s zfn{^mX)I(g9n8GOj1yN%n961z?mk*Qs{b_Q29rxv*3!YjV6pg1$4QHNsl`-R{ToaQ zAq%nK8)jv-7breB=&$2_Mmq#(1g50swQ6wm;pTH6cjPi3pZ|dyad&XldUtbMduUZd z^hK<=cx0D`p90m+;)uW5SlO)d=}fS&^{<8t(EiGwFJUBAGjmq1v|VlRpq3^wj=pWS zSV*@il@xJMzBDLwLR&a(TPuj?H^#YaMGeZK-;&Tgc^~f(U5By@Zs)$$%t)~jK~~n> z5)S8$CH|WhE>6x?TXWCrKLmdwe9uF?N|lM11O=6-%nhUs>+W|uUk9ciy1NLTW1lm_8S|5)S_yWoHc$4R z?xn>k^$$kh73)9efaG7=h0?~~YZKA{CUEp$olcIc@s>%vsB()jM1n!T%n0XvsO z&h2Y=jZSonggt;`+66;FHve={^x&fCBk|QsC!*4S#dd7er+-`#Uvb~_|48)$B5~L2 z*|cio(x1onm0RhcGeulxs;f+bcWvf67#11-I-#E|fSG&j3@GKOl?D0wV!NLn7z9xY z`bjIfVjTjtGPJ80VU{WXN5R)h5+8*2Q5*EtFa|j+Pjp_%Vp4$R1d7}{Z}00@uRa7; z2+eALAFF2d)3H)B9Bk}cJUmg*m>3&@jHC~`VzKE+2sAlJyCua*=Oq@9MLv|3al^6g zc4W_E9^Aft`weJ!hI-No0@3yL4>jF(6uj}N^1?TEhO{`ezxg(-QvS6+a8r9Q_vJFA zdoyLJV;2bMq;(g6d;z2`G#+4V4!Dt$_B`s|8_;^M5fL>3Esf@}N{-Oyiv6Nm!svrX zq21_xo^IBS30Knfsh=~?*bIu#%aX;qKYYY1Y6%P?5MH|Cy(G@Iw`u%9FuKTOk z#R``_Rs{4duYP38z8~fO#})~bOTbLrcy;73~wzyA7Q^X*%{4YP+SeV z=xF!R?urid;E2m)TmeIxE-aGKuV24LoX5h_E>tEJa4gv6<=X8wa2g#G+jYhx=edgT z`dZJ?Ezk&qyD(A34GLZwEZKvVbAKN{F1bhi=gG+luhZsTgvZg?6#CA~ET#tgScory zoB@(+9Oz+NV-|J1in8%|(66i@AtL2mGij_TUY0bpbpK}HC<=6tPYT(Jh0Z(1-dD&J zQ!R!WnI}uC7y8mJ-HsQTA1qOeV2})sxp0a2H?P*(WKFz6ymr#v5(V`9SpWfpir=0& zzwVR|glNoLoSZ}o3MJbaiS9A*wv7{m$$67c#`84z2lKV?A38enn2nWoDp4$(fgT7^ zi<~^v%#2rdHWN&$>Gvd>--k;5$!ava^E9f4w;Cx=PxtB!4ir=F33SAI2p?@D1yEy^ zcG<`*ouS5g66A_kQ{>Aah$rm`Mwp1go z1eAlQdD4}w&RFgnLZ;$Z7uykew;oD5cJ&t76n4iq$haYVrTrPvAm3Ax5plB>d zAgyPg@fEKOV4rKHe2A90zAD^8k%zqi81 z;Bap#|9NyP#(yB%%Q(9+Tlt>{Nay0@CSl(x0zda#$u)~MRW znsqJ-U4yy!Ev1pc<|mz0RQ)>~f}HelHmw9;p>4*hxvC|@bslvC#oxYtV@~9dX>UCp zndAb^QV%KR`ThG-P1g<4>?LBlnU=t^*jmTdY4Y~klU+45dF}>HShr*NJ|G5Kh)kDC zXb4)fM=YdNxx2fAF2VK7q%oS)gqTSw?|h%dso8kyeVfT=9_go1_jODoI6Nj@@8Caq znWxTcMm1YH0Zn+}OcllPcE60&;nLko+l2;r*_ldZ3B<~5$_1VoSppa87qp}~+zxF^ zp-@n3>4P$Q%k(Mf>&K1QT4Y@v(HzhUj+)y$EkvRcJtkLoO~ZBaJ&G(E71dV4Uz;U9 zTx|(Mm#a;EXxY^(oYQ*R?VcgdGL44|ZYLxpT)z1rGc$YoBS7q^R6CDyhdzf!r7b!f zrCwzpXi@5#GCNY{Km{GckkFK5b!1wA`^gc;y;naGlTIiKvx;PTutfTktU)7=29ker zw38uj7_7d<K<1?YbM}$ylK&%B7O~r{qcEbV z0=VC(fg1O987POMRIGRC>3ze(2#=QzP+zVbOymiU9MRM*?*yleeP0rKGagKXE-!@m zO(>!-4GUs5Jbu|q`NkfZwzv!5ATn379e|oK7~bq8MsQh7O8G~ym`0f7$HCLW%IgH1 zj>m2@?D1HMD0B?mx9DhTrxzA*>LX2RJFHV|=Uk&pOb0f*x!h`^KNCN~GvnqLKcXpH z8DXSjJJHF`b()|=&c-h% zgo<@f&v0Q}gSlM_M}ZII3R!*w)13{vW1RXtVCl!bKJ4$s{$R4N_=ofB4U9J^O7jX1 zMGuwGA0E*Bm$Uy*nBbk`J3?o~+Ulw_R9+_6|JIIKF4AKPR9b*4z>Z}U@rJ`j zAOeL)CDZ|y9olrAA3$xN5cUPyaX2TG*;46bt=xx-W-kYVs z1ZHF`jT?+e9IuVoQQXImpHIlIUvB{T$GLPV#pCQ0LGRaq>=wH85Fn@A^`M9&i{)Lx zW6e?8Ka*Y>=O>1y^8yXpt2sS6vPo58CI-8eK_N>%s2Htif^}7(-+5E$?AYcMZXDvM zmR451oAiFuImQrDcElzWeWWmuoacR2L?9%NxW3G=w_&d7U?C$>9}pF+nH!$e;z3sl z3D4Iz`I9X4Bw+&O`8qT-q%uGtf-Q^9oJG^UB)~Brt-kf!ZZtxw>6%E`UFl0dS5&GU z??dv99ah6F@H|0v0vQ{(9v-a1ZiyH~df*;q^jUQ8uHM0iiaHl&&22XN`-Kp)X*q1= z((NZ!3iBAQ+S(PoGs1o%L@2WW;rFK>QHstE4aj~j}Z$%IUKfE8?Mq{~nwzEzYIz=B}`+2k&OC;;bugRVH&a1Qfv9stfu z74{f8l~^0gd9u82x-8};2KW>b+0rG0)cwo|>_ z@^-f#v`=PP8Bo4BZ@gi9)ZqQD(0#%g0mAZ)>s)sw5C0-K&tG0cMkgKD)2EoHF5$CF zfxSQ|lAllmPJythlwt4-)l$P&7)DCz$4?5uE%J$sB>8yiqdh0P4TZv>RV`1wg4rmP zP6nMX^7{G^EV(yt-XMSj_kkgGliOSh$Q}^0)KX1b+XtW>qQ~j;=Ubo@B97R63GjU) zGa@@ZL>Isil>hSb!c$=}r0}h;gLWOjD$uRC+K@Rpba?IGD`hCCi2o9Y;p)?g8kfk^ zlS3rfPjn?x*s?Dr5L$1ySB4@1W*}35F3Ye=BWc{gun)Mw?=2|2{JPi2-_h(ak!>nQ z*g|N^^x)5joslM<+t(OCZK|EvU`b>?c~>^&e3VowPKZxHEA<)504S_cU@Dqm*qK8| z3L}StFxC?V1+>TuIR*?6H*e6%B>V;t*58bo&;~Npi1#=Iw7L~4JkX4Q->}g+XHksW`%lnzqhGn&)Q*NQ z$Msu)G1{1nx&{@dakKM zGYdflg&PkHulA=)rvM@BG7Pzz{En%ZcU_d?Sg7qxYyVV~GU9ckcP~dVof;IUPx^(* z!_+W7&Vphoy~a+| zVgawfel9i}i-5=+qkQJ)v=P3p<(ga40_y+tx5Qsvu+~N=!IRSeS^uWkwD+Z&`5GU{ zJ7$w~x)y?>vWCRN0U$#5)IL6HFon8@cz^HQS%FwEl>t5yKbFhv*>bpY%tg-bPlF7p z1n}g8LIzR>2uM37L95gOrjQ(+j9^%$pLin}F8P9sY>bS45VtWg;xzv86Y3iR+(?kT z3Q=}+ckjLcXg~-ZEhCwOuP^r`dD+JSCpI>^!RFiku~0+yfuGzup%UVqf8tDdeZqyxb`Zvl5 zLa#_k!Dss!oLcn?YnpavD);@{Xk8T+KdVNiVag%&!L*=q1NO<5nQK7%o7-TP>8P8l zSrfCnGD^_L@DAF=&3uoO_Jy$@3%1Ov#lCWNanm5V*dOk`yGkSZCZh+q(O1C$qX#Gt zeha&UXrw`LVxr?Tj?l@nT=oH%>G(&J=;-$AG%em&c!L8k!<*?~_u2mwEkM?g6xXab zT&jjYqbP`s7z-;w)%ErDB_Au=d&{$7$gbA$elsM!JHkz$qjS=Z*+q4(J1EEC9;q^@ z-w8{Q3#?$UM0ort9YKzNYM6Ay`+Wi5^y{W#cCH_FKcQMhLnJs72 zKXjV?90UcMnt)?L5)L5Fl;{wYbqOG5jxgq(lI9x$#4AXaW+OZ_3V-z zuD;}I{uC=K>{ut;TxCPp*v!_5nRg3a&RO-5b^uitEMk%#sP$?_Hu` zSo!s=p+=teWD8Q#EGJCczubS# z5`Xu77j+YssW6h5`;L8F3GPM&DU-tz-Mv~iYwj@ z`3M`>-yH>oOWQKox1XF69?BVR^Sxh@JVI_EF$Bg^So6 z>tUr`ZxXemg>waK_y^|Pi*Q^_!}GJ&Cnkl9U3W{B#=m1%)353Z6+yov>&jz?SDn&a zhx8%FP?#TT@-e79+8Cdz?e8mPTfu+09e%#Kx}shGK;Qq_vn-wNC{}Y_y#GAgRbMmMdb zzSEO{c{Uh=>ALPLe#)MC`vbl?W9K~&RhPC%&Sbe)lSSKQbgR6ion5n-^L&gRS`%Yq znpV`*f5oZ>+4n-{rV92Lvk$cMXxI(=xU!8NXSm1ejQlt_L&gj#9*ji(IsTt0sb!d4 zq6jrPwHy7v7oV%YG^TrAlh6SgShht*-9CJ+Q|Hbrp8;S%7Uh3)y?WI4zGmQpuCTcDVu4`Y>MRhi1#7PT@peQ{U@#VD={{c$U>ujTA$5mmf$(bW8iLecRe8oD{HD3&^H#EXn_GN zS61;S@A`DF<@R@3&=$l%PC(nvU*BH1zz7k&H++pxF0Ebjt&ovjUaDznf%^I zUTOSrngjd@>z=%J;o3hO&fQdxQj`sPq=;(R7S$fY<+Q1L4iob}>1EjbLqJN3 z{m{^m{t6jaD)<~=wIl$=GhPxE7w<3B5r^sz>BzpIA$Tx?n>U|5e24(j2M$|@ks0xz zlauqvu~OKw#u^kd^Syft_>@t_^{@&5&r6A5s( zA_Q_uda`NQFyw9W2)`ZzX!HGL_%80ljoyJ|XigP{?umtur|{8K18O)sC?(l?W9|4rQi?#_S-IvT*IwyD9q36q1WU+TGqi%6VY;0_xB~q)I7IeH6#q|PPcKSPE%yn(x zblYn~iO|aD0AM!y;3L<)-Xq8bEI-mnMj(Fv`jwPRKtRw~ZZ%U5J(06lf+R_9u;o}g z&^Lg=Vih*n)(K1mwNf@oTcC0aR9>rcQ&0Dke#}!0%!}(?{A<6H#GkxIt68ATE{~S@ zgNRuKK@&wtyDmBVCEv6B`7qlET4~+kg4bvR-|Oo~y|%|so}AZmKcM+&_s#=4PnFsv ziKkD$TZBHrK+6N{)0#iN@(@^G%$#CI4LSi$jSmm%69~*-(UOK#eh>1TlOuQ z(*xaVt}5jQ)|sm3A2DjJ#wHJuw{!kN>Q7$0xXQr5us?)!_e!d9b*>Q_;#~nknqpum zgI3Je_y+rRJH2g&G8*r%~E8|4xwn0 z$}0|tR#1a7(ZHaK`yA&Qns`~68b~K5L2^@76%;Cn=V2mXO!_xLyZl!PDn8)h7T+2{ zd)3w84$q~)}KQ4Gw10ipi6E~j<3$gbl zxE~rtuxez@wh!mg-)v%VEOR)qiEu#Gv2l|bl)6;K3aEA!zP~W7>njku=2YF4W!-WhA zA+EX3SaI+n95-9(79i{yu_FYXIHXM5LTDt{*VkWx)($3cf#Zg@ru%^&Ou&%D1;im;mlA_ z@_ri1CSf(nAKl5BHrgVpra2k-C1mHyb2fI6oG13-UpPCa9fa)^NB|`>`SC%{)$A); zyz1%Fz2WmqNmrBi3rVsAskjrGB#HUugCa9XxGg5nzZzN`zS5!65F45K^I;B(tu5Doy1;2N8q|Khoo$aC0t|NG;g+j|4T zaBgPyEui0iAFMU3{>=h_eDO#0Lf?=p&M&!^j2CUZ&cEp=D($I3uU~mPR`}}cTi5Wd z<|T`sT8$%-FQN3R|L?F2Pq#rWXZR#RD(1ll803CvBLPUkhx=}GLmwG!QG4K>87d2i z>Nx!WC6K^28Q&KFfcnUXpvt%(2#?}2=+2;cjjG8rvxZS9;q7ci_~ z$)EGo%x@VQQj%;JYSYR$uVFU&M~aZoSA-20t3A1D+z4-cGU@*WC0SB>C6s51C_puiGad;~|Qx(;Rdgqy`8oa_DUm00tFs=KeWvQamg;5 zZb8)g{oZOP8we_6r(WD^38uRE3ZmzuR2M*;dbK^@yF68=H8u%?W&3cUj)audkDw19 z2EzlRUS7o&K-h(OakG;rwnF z@pC~~;xZ|Zr^BRE%VMQmx>S-!-RYC%z*kTV$%R~_-cvDm*v0xK_aF^qvW-BR z3n1eT0^K-?d%nVUBP7Cpz5Y=Iv&uP7A0MAmSCClZggrEmT-i1fCU$X9|C{KUrTE{` zv*us))Wx5saU>D(ZJ>koRlMDwhE|fnx4B-+8VAzBtdZM)=o0Lb5P|#;i34^?D7MG` zH`qL~!S&9Ktbwg3AfWnHRkoqun4J$Z?cZgQ-{mZt`fU znWVKfI}xLNPv0^H0W9J$*e8Eg^)BumYTrm`8gIuvo`aPJV^wTE5d&P{OnlZfE_fllG(5ek?VpsxRF4deHKHbqI@$l=nz_Y z2QQhZKEp$r4i{i}y6mkQ8O4k6p*>m_t!8_(5*eOuv{GDK95&AXD~nY;%$O ziL+1ehj;JJXDMW3)uXxDY!swcyh_)A7?l+N>&qUTCe~C1XJtw4pPjwIoW}G{Hlb~u zBNpwS3Xy*)@$lMj3Fhm)eZ^u`?LHXQO*t-=R<=L9U2-1vf2HknZ~K_y8v3$unLGKp zs?QHfDO+28-Y&y;>4egKG5c-2$ETL#PTL3{YTvOf_uN@k)ToOV{*fh*dskD*-s=OY zu{+h650_qJO=9YGw!gHqD_OR$DncS@Bw!HaoSiE-x3*@dMy8ZYt#cb1MDz>{+Myz$ zw`BPdF$K8QDQ{ouj20A!^rqj3KqJfM6V;JRNY2}KZ!7IrvU=~QP%H|bWutbGyu$t7 zJ7hnAw%3&GupAs7GSbnBcQZSRiN^ZNtEpuRxgBQy+`Dikfl5`z-MyBbg9Att6Ugc{ zuo;0y#p>Ky_fenerD6rMADDdsGuhL2J9#k*FY9MN;{oB$%yl1T!AFu%f_ zgn<~hb@gXLln38%M0k#&A7Uu_fz?Z{7~e2uH$*9{5u9HTG^< z)SZ-uTn{BAA<3AR?R8#7b+?*Z9ClAtR8&ZpUEIS}R9BDF7Hgrue_IyVQ^?)-+c-wO zRx^Y8C8|Wk#ObhmaAysYjuFgO+40-kwpU2+eSR-~5mCS5L-T+#xwu%KE#FBc-@;V` zb_+*#>i2_Cpobj!y)vO3+T(pY#0WP1T zyU(kRa!l~G-Z z`=$OO_%qfS20|5&W1Vuk+v60uN?~h(Tndkf$T|}|p=c=K7%Q_-0z#WVmJl18O*M6( zBhgnVOw|v-mJKR^WTn8;XtomDimO8gh`St}NBK_87vICqFyr005kHXG!GwGuY*K4q zTO}8=-LOfb%Yw`ToxIZWmk6>OhlPoQLk@D?`RLfsw{K5;@Vx`SWM}uoo}v;+VMs(a zo`mZuLqEbHLw(*=K=j5Jy@4xO^_h0KjS*(>c$h5t`{k`wg-pvto z9({e#L8H4T6%_o#!f0$VpAMtjv3?U85D)+f>FJ21J^fLXQb;VaX{AL)$DzXrPY<_e zX>p2KJ?cGFkmovM<&`&vC}wrL+RrTMqVLvsEPK|su1oqIGR#+C>Tic!$ik&&fEiSR zf-ro>z=2*YO4DE7dB3deRJ?Z1NkB?9OUw9`lS}8FZ>FWC6`UHbHyFB*)~cbZ`T~wA z-9}?(-0a*yxSzVN?kmM$F*7g*iuX3g$60sg(p%GLFrGzqb)EBaXUR#}x5>LD&3ZIB zr-;k-)QS}=?)v!D5d{qXE<*!31JcE`R-+W{dYt7=hjz5x-n%VyjFl9BU1W^w0?y7{ z-+Kc(gO>OBit}{#>(^ChWZfF|9N9}Z!`&zlTy9)9H9hSxXeClnS6BBE;t(~$mu9W* z?w+GCb>V`c`k6DBH{zq1DHSJs;oWMe)+fOD+gs?GiX;7W&?BL*uWzo}&*S3Ie6g~} zg?)y6d-m8l>4|)Rb%+k>na2#(hm{tLkuNO=AT=+Wy>G; zYv^!y4Q{ud{`r#PiI8Uy9L=wknR+>JK79Bv++>qf_>1ymvGMU5aF(c#&3{E!ZOGoI zp`}%7m9|$>GOO9}XlY4hrIxXA6pT83{r%C9*~^<|-g^t0PxKbkTTqSj^3!Um`d zt2(_QJ{UQ|t#rr@+I})~FJX`hR|=6ZgKrsIlZL*2sBy*9m?=hMTxzN&lzTPI%JB{p zB#|u3_wLyf>w#0T=9_P-nafv+hzS++J$dLe`R&Hdo6{z~lP-b|ks+&isT(r~NNM4PZ?sX(CK`G(>Xc6V{fPaHOg-s1 zs?uStm4uo_BJE#KRD?EBv-c673&a+bmVADe_I0aCRhg?Xr!6hrMT?Jgxby;xl;c}01S$VAQAWjj<7m0& zjBO;(2{^XbrZ)Y3voa4_SF>xr=MqFWK4d&|ke zTef5GUIm0rs47b6=^rY~m_0($*)0A{;!)~`b?dq{xd#UaIrg8+_hs3D;<Wz)uu;>m;N(kN6~UpujlX9ZBA!E?o;%cSz4?m_0&MK4TE z2vZ!TC{xI)D7fb4<|xShb_QB$8*6xfLM`S97S`-8DA3T>HXn*Zm?=4?b_3`7xEr6o z-YVnP)RcC|=I}@5AH|VuKSL@jR{`|qvOboXqLX2SzH*Tx&Ju+pu}V1|IM)Au{gTnsFM? zS*rpJJYwFwIk@8MuXm$-Vo%9R(AU!o0pko)ae7%x}*RM~(Y$l%}C_&iz6B+qWOZ z7s3x}Pb0n)UtE2xrzh!{yu3twPhVdo;`!m(s6Sg}J=%5~paMm@AkJJ<7o%p6nBMHC zPXoQh4_S+po*X) z1efaF+|iit5fEsIDi2P^yoXKfY}y_E_G37#9EWV4jpWW-^?mq2zb83T1xDa$1EwjM zcjo4(q_z&f(T=ABX@|S(>5L{8aj6|Saur6GDJ;aj`}bEh^$!mZ@1Gy-@8|XY<$bcA z*1VTR!VRaNB}vJw4e0q0&mRczro_O`q+Qe3w*o5`4o51_U_#c&!N+`;I&<5*zdC}{ zSHOs7tu9Kzo_+g-OSI+!BJSQ@148yFOi4A>I~oo0Z|fY#<>D~Z^c*D;CZrWBSJJVv z_UzqzdA33b`!Y6uv62JuyLbN*$L)_YC&O>=`F;1+$AaxVo|ov*ROG4pt>c?nkE-4 z8mtIm#b*LX=#jWsZQp^u-rj*HD=J@_UVdP1VNnkXY2!lfVd^6hK?PilZ(4^-Dk^dx zs2$%6D;jome=he)6)#H>5s|`UwTi{1rL}~069Bcop&=GIYJv80(?4UXu}n)=$N5#H zXZ+uFNfWv4M6N|`?4_)ZL9?@!6e}tH6c_(m3CdDYXNZ;Tc-nd;ZiSlhyoJ{lhfr8) z3GVe~oH}>Y4z=IYf&Z@>2@A$+OSCbKTeZ~GdL|Qj?1x)4th2{&)lSoLZ_l>4fSqZa z9IW-VQ&Lj8UZn4OV6wiiaBdZ;OS1qqfT$Rs_kYWpcVtWHuSsKvP)9s<5_01mLvyk%7_fmdg~+vI&LGBT1HfzK+hEIs>ZpUfu3pt?!zI{3C@7EU-P%_TKo zdUIxL80MHu;m=3xgcxIq}*MW%J)HRE+N zYMh2nsnPsjyx0!jGNF0ObFcRMoVUhFF_@aMQGOMvyy)BPRcpTewywrVLF4uF{3cBe zjYwpj_<*0j8UIGY?bB->J^=wG!t&>T|Nf8U*q1L)V?|ytyfAgTL=KPkx2zsq|Kb<# zO?z<+jf{-e;8A^?riJdrp>}SMJcmWw08sYNZHs$0$Vh=f9yWhNAxpT=C4ayE`;FY2 zY5f7xon6j)={83|!$n7wa-W%-9%j6j9ZhpS$rb!+th>9=i=7-KY99o!YYL6xiEEo>6V$~`ORKvnVmMOmv-_Y09b>*e@j<{Y= znn{kE!A5I-siuiR*Bc*B>)d1S7V9w5)_l@rWxg8VNFCtF7USn%%Bn@Bt823P)Skte zq$Pgx9)5oRyu7^eFf|8{zjJ(qILb zBYoJhqoKv#LIjf*rdUVf(>k4X82UQ>-xYGw4X79{5&@KLp*1KlHCTHbM@Ol0@XnIk z(ZmCZK_ZtQi!Ppjhzfpj2x|}DLT+@(?KrJB?}d><0Qe|||#ESy43HUaveZ68uF#uV#a@gZ~^Lj)@H=y-E)pth}aSirGEQEwOBr&2< z&*`8VG%j6w^`Rmp4u$_^cD62{Q4ppl@xT}=M{mnW0?z79?#Q%fT)|WpcZ@+P!9EIy znvcvS(cqCxhQKiRVfev_<5G_xAn_2_HLGm@t-0eL)d5x;rh|WJpSfkxS({*-)Li!) z$nLkF;)%fmfg4xDMLx6e-qzMk-qra%*lVZ}Y}4+~5T^N|Z`3^ZvP;|5#Z{9fdub=A zyCM{;K2|P$_j68mwlJKYUUuf@u{?a}WgN2f*rKEWvT`pUGhF0uq8!efZy)uMNlHoz zxo62-m?hS3&ir)j>({3-MWd=DK$F7|H4L2``@x@(YZ0MqsH^Xmmew<%ET&*D2$8XG zdEP!A(-RU(i>quN7Wl6=9bS2E1nB+8mgA7y?x~518f2Du$lxtdt6X4F^tChUV|!jx z&#X=^5%Omh8nN8kv2&)AGr?UsOWSY?#Z<)h{ZIV*$!Ee}ScfpYNNqB!$GGU95_{+{ zP7vJ!+Dn3jYO|`nkoaq5W#w*HS69%Ljl1V(XGPMDGj^h~cXhm7GqUv++M=6mY}PjW zv?zB@0kLVu>qo-R7lZD1`COL6+lvam%|mE40D}R<5|ALFW1f#D_S}*59#%}4DKOiL z<{Sn>PNS@L0W@7u_(WS8Q>M6FhYoDquwnPXgQ}gBr5v~!eBC=bI#`pI6myumgWL%j z-@muMIp%Rwa+IYpH(D<~(M4ZhKT~i>X1F=Yi^TR!EENy_5coTIo{Ct|KljBTIxBP<3EX_Wbo~`fJ{fp-4TF-tk z$#Njz2qLDnR7XZe#s!z!){(=138AksTF$0kdIE+9yo%sb1yei8Skc>umdFg)clJee zsM|@4#(3hg<#@Vo@4kKN*m(f0>k(k;nZBu5tREQvP0aeb6bmiid+ftix#%+P24Ov+0%9UhX+)|EyFz;2^;*d#v2QR6z8#JSatVzX|n>TKlE?vDI6#S%nqKphI zeb?Jt$N6?>L35+$OnQ=6?XXs;Ypz7LJ;+1iBbv_Tw{H1oJYIHJY?5oH@UfV#Rc&i& z@QfTO?a{x$=0eNaNa<5!SJ#m^DA0+W<|!O+ z7fWm#&FS_k>gv5!QE^iwQo0`MVg7P9sb?UbKa;JKzic)b7-~*h!^Rfy7o2Zh{Hs^$ zEjNUJDSU?tdxm%lnq@GVM03Cs^Ww!(*hIh)*URy-;nB}8xq;lhH}h+PGsb0?{3nE- zujsa^isS#aK0+1@Pxp3BwkpupM5%Cf7*)BT`Xbe`Jqih?9#N~cn+58I#FKDY5Yb38 zj|Mk_LgwLmyWk6y+n=SD6*p?4(9KQ7(Vi%)0~kS zUzmB3Ja?{hm4xm48!F6%50X9O$BnqnFy4e30TNK$az3BA+y(RFc*yH(b`8MfB{mIu zzzjAgd2#R^L>o^3r0%Q8)q0TEOLXJ9b=%_V_ux?Ab_5K3{YUlY8ix;iV!eknj89Cc zYHJ6nz}Av>k6YI2k)VF|fNBof4KqY^B`C~nH#fH{6TM_F!{}2_wv!1pqTQ;ofKB$& zqrH16tNjzE{i5_Z-+wbos+vH}MLtA@Sh=9&nNu{%Aj~u()9Csk&Ar4SZmiF$7SsWX zM-34wnWcSTg!{>;+S(?HT6RQ$TJJnPZ|bVm@D}X31w8DT^CMaQkRc>T(&Z2?w9ziQ zkoXd_y5yU!(n`%!VzH8Zr|m8OimMJIi14Aju&^-jy0s3VD~Re!d`yWm%SX2%8xR3t zLiE^ZbPI9=n|^@2!qK<4bR&=1yW8tp-WY)m&Kk{C134X0+Wo6l-ogrj?inwO`P5-* zM7*_S{p;=mjxA_uZxZnVO!^uec)$=mbz>I6BU3clz$}k2J?h-KXBcAl42@;LsMNzp zk0KTp+`@>vc!ZTYVEu^^`U!zsBVBSPZh;&VWE z9P1_JRUW8lXIzL(9Gx|grlobbDWDy8>Fqv_3xbz?*Y7hWK#f3B)~ttHbPoU$=hABx zh_x0r-=6*WMtGNl57$ZO6V1)d{1j^XAk-r4bCHNkcb?b5dVtSiM3oZ@3Cv0+BpUll z=^0Z5D+KCwa@{g8w9CHJeP$5U04rtK>tvkn{33xzZgJOFDS|1Ua0LKg!){|5VqOOBOk#l^(f&YhtW!mwC}Q-RsM zmcfvlWe(A;V@{~NI4^JXTSHoo=^Wk8aB(@wChq)7E+F&$>psKmU}0NTh?^uSR-%$U z=FCypNXnP~%mB3IFxW_4g|7*%6ot3d1#)RuC%A&D2qBY7(8@sjc?VD|3856v{%0mS z{r1Mg4-)&l*W|={cRdqpdL1fk`Zff(G(LaCH43J96GEzWz3s>5@d_*~Q57!ModEpem{0I%YdAW0 z<4`-Z>pELU?}Pk}Pyk&9BLjTwkO(8@E`}3Ca;NJC=tB{2&pMfAdESY>zqHTxWbt@@Abvn?h` zv^)2Qd}f|8KIP=^y67QtfJy#lL2csO`1|`40yokzY9J%Nf4`p4u)@m;#BO}Whfw|M z#$zNr7SaiV;0(S(Em@Y!ha&8war zf$#Parcb@EI`5^EJthXYQz-ut2ws8ISgpj(A10qZ4B}u79Q!w`nW&HwKW9FKlk>lUkVFj0g9ES z#&584NfA4J3^ZSfD+BjyT`){a>vUD0jT06EYM26|HqRqUX%DkTG8HgqrV(^hEaIi+ z7`Pzsj45v}T~|xFdjYi>$rNGbz9%Q6&*w~>GUD`ENwPA4403?Nbc?*FTn|A`SV`5^c z5zr}6n4|+Io~h(M$kKFjc4k-bgz@u5l1XKzaL1pt-dC-Q1uCFXKzjO!o|35)dM;D)8E<8Xb`vZ_okQ9ZG9;Zn|im`xj z$t+u>q*qn7w(5XCly9!ARNmwrd90$RC6&fJ8dz8uykwp$GdHjUJD5f72gMdR*}Q#< zYW2>pGWeguu)aAf|FOzW=jLfmO-)fFdW!DFLA5HB0i)hLT#@Iq6GS#Rclp^8)su(CZ}^5(#JuujOepa;1);b= z`mB3>c*|1hxO}PB!Xh`tF>{eV&0&$1IBvz)@&1aW71qsvLaujx`e$;zd*bipItm)0 z%9arf`aej#TAj<*kZeAFwkl<89FbZ<3cdZmLaxW}|DH6qg&@yaX6bP>6lzkJ%9*2t z6$&-IL+{1I-?GbsjV904~OFg<3Q+OZ(<54D{j% zzMV?2i!;p0P;{fr@fpf)*i5|Evl%p265bzz&e+85y-V>zIb+xyMbZU>y9g@}d@GA+ zqb(gcL8ya0#qCCP_xgN?w_FP&!)`1e@Rzw(uDD!ORaFUD*GrX46^}l1;!t$Z^gQGt zTyG$9sOlzhg#YE~G~zQaBTFC0o|8MWH{=_u6`gJ$eX;lR=rKu-Q~NT(dPK=C9OXq#wa{hIhb&_Z-EIFdIR|sf9+(L&hXdH9NaE z=rRejm$J-kL_LOYu9#YFKE_RY)(7FJ3T+{(=qMxA#Kgp+q?fPdV+WUFsMJ|t#Ya4_ zB$Ys94m_K80hoEGpJIcx$H(B6^U&HoF>t8)4X>xpNzij6IWzjw3u6T?!zqnEhua?! zbn{jTb%^va-~|ck+R&`=pLy9WbFRG)j;mwyL#wMSBNMQ6pHN@<&%8bi@o~@Y-BrNz zI?RjJFTpsLx3H3IKA&W0&A{xJ>_y@DRLm>Rk-0*UsI=^fyF6w`TfUZtx!5-~15z~f zzuG0{=#sg@_+w4vx!eiC5VR)2LIVQ0kG)-`o#)~Ha0+}B3yI9yiYBYXGj+M{uF=EN(@lo>!ly4@jL2PLx?+drnCF=L>c_v6 zm#O*e-SWEMjNfo1nQq`?77LTTw$xE|*gur^To~&Rvg5`cTe!;gKWe zniA~)pH)<%>mL8Og7hq&Fn1A5pWQsXUGcs-BkNkf(f+fS|%I=pX2XpsG`K>=~D!9AuVtc zuK`oepH*BP^id^wqCHQ@JcgPr7 zlA4i40Z9dZ3&lW zhUO33r1TUPJWwluN0NUYAU&HUJ{9_-su0HxzCpVmu*PVKv^Q^5&DPftMIw=GXg^r9 z6Bwev@Xwm1WmaMj0I2Esi(d#m`Rv(dd;4f8da$=qBXD~Mvx!H=<>s!%f&sfBy59Nb z4k47*juWB~DjLB@?C#r!M~9Lh0FB^%Hp)n~tseBn0FwWrf?H)8?7Qg3!}puK>el{4 zySoPm2ThWgvkuXX-7wE(Q#%SncN6%yLqnw{C8{tafu&N{(~C!~BCDe65YpnqKW zxsb5yy{$6pEtp$1P#wMzlpnMlc3LB*xbwl0gqjXYs}`f4-cO6amHzBDYJA+bxR^P; z$e=&5*XocY#%mFH10t->U>V72&sW)APVZ&I2(jI`{Ar{jrRm}gE;2k7nk90dYnUZp z$9C?pQc7TPd3n7n#YGuKP7|n+n7I*cDdvCxTgXZlt_azYxp2(jNQj%S`sAe!vnFa6 zv9CfrcEm{L@+gnRxfrmag!=)rG7Acnpe!W5=R+}$mQ#)DoM%C3@e`z z8Ce$J#;s4DJR#VhDHxU*xa-U1A6yOTbhI{3lhl(kTbW zOl$3?eWw9Q!O99l>`kluW+X;Rt@+ikn0Hp5fo~2)WU502rw-+BkMs^bV0Fv(^DY7K^hGx{N8@YqLoFY z3fik|p`2mg)Vc03vB~Vv{cjT?TTL#17@#cQuXC;hHtW`-lpP!fF%I7zD^&I1>2ATPU}JO?h(rw0zl zI;4%sHHD30qE3=xT7DL|Gm)ISbCjx_7mKAsYipVw>mpK6^enceomv@CPVN>31aCXi6*g_8(U)!14jOuZHOQcEU^YATyw;R8}ytb26 z?70_{G92Phv6n`IWeqp# zz9D?V@-gh2ju#Aa0xjF-|$UF;hz1yo@j2gw?Kt#h+(V+C#+G%%^O33~%a&&Wp% zjn)J4K!ed7xg4x-Wm?X3P~s@$t~$cU0C{!i&Yc+xEoXjXi0ctMM0{AHPAA7Dg>aR{ zpG}g-1yF-Fv=`qqJ6o#!skj;(@>;~ZPBDt~A=WR2b;ITIy1E=x3hm7kRv}aad zFYCBo*VriL?32^su^tRGiR75LlB@jt8s6SaOXzBy+bt<>V}?85@$QB~up?Z4kC<3m zwMV<{)EUC^yvb}mUfTG=O0F~?7&7^+6+^*??n5zxFqUdg!TFAFks*-|TOfeMZw|Oe z7^s^9&q(hdSw>ccn=nc-Bnpr51_PLAq{Ptw;+*0sMlXcDgmwO-M{sm+V(}Vot^|mD zhVz6YSx7?Ou+T>Zx)otZZE}QPYUeJVJu(9Nm4dDv&vW8TrsU>s>=qN#GJII5-^i3@ zjB>dBxiOiGZ{^fp~rv4N`A=-h0!t#@&%LEtvNY4zRgZ#)@>61ScO&z&u4R3be?4= z0r}wc7~kPwkA&MV95<>kJ|=&Rqwi0K+T%OPU(B}m#0mB|btX5jF}=QT+_0z~H=+tC zB$8NM(k>^cqPe-%-40J+S%D;1T55)jD7_|Lm`2bh#37?bfJ0BO$I(8l0J*4qBFT{xW{pn4$-=d1&YoHbUa?5K@JL zVacC-Cj1B`8g>FP5Z%1laApbzDp!Gw7XR5dKVih8I&<$V>c_#yD*>mHSD=l2-E7G} zu~QLPvKE^mXIoyRQ>lF`r0Gd|i&pR@SG)wvh~#J8tcNmtK4gA}pVW)vT+Z)y%YsKN z>{c#FC>wO9XlZDJ5y?kgM z^vsj`TusPU-dpvnCl{9OJotD8@`Z1CJjNn_=n=kJ{ES?yQTM~uyW4?1*w!)d4cKOto8d5zffPJc(7 zwlxHi_U}Lb|KMoczm;o6$`bQf_>^mf_ImMG*EM4xOsuU_u3MF*yUQDhEhBk)^h&Sz zWG|S&hmhR&EZ!e+~etGXC25uj5eY15w8Dm^c3WtRpv}wvqPIJjKgS8!vdSPD; z#rd#PvK@ttClBTG7H4j5TvTCs;riRZM=LKI;4>@??caoe%)eZ}_g{Rq@P0}6sd-8e zehSSE9}DvjzFAB+^kaOQtqzk3I?u~eN(-Bx>aa4-`v~&WcyNBK=1Ij@W6Js82AC43au5?2Wi#4AS}^X5b8blTjUc8k{h#&ZUa zON%r8m!l~H_2wecp?2oEv&x;PbaZs6x!gL_w=R6OFkw_GcZXO9;P1mSU5pTF`Aw+p3&Azwy?CUr;%2e<4v}vbv~F~`yo0bLwv7h z!mm|%TtN*D4Y^h=`f8^n9^k+&#-R+0x61jla}i zOSd_30fy3x@BP=$v=vW2mt&I_7E{dPbF9coGHl;V%cgn@WbY1_zgIF)Snd4bi3ybl zuY(AA892>{Je&2LROIjd@T68rlE0^dJpi7>D|O=)XRrA!))zTQIHYKoBjT+ZulbM% zv}but^wS`uhx*D6m`u-QO#AoTlNLy8chM<)dSF+96364d(#QReb*zd5g$jEk)+?7_ zkXF{C;gPvZW@g1m+zFZYzI-Y@J(QfBe5KhMvK@Q-Aqj2?x}4tJM$dy~*@nhenS)VV zFlUb3!rLa0`|14<0$!5-?d^fD!7>dq;^X-Z zvIo4MOy!(qhj*mI>O$URl^mN9j40ytm*I9z=e_JRzQZEK|4rkhhOGxAAH1LDsr6 zzC6Q1%U5l^aylqD_+fHqRN}+~e`nY^aaV&$UB`C&QF{95tI-dX3~`0W0>yXz_a3CY zUC@`v%57|E3EHu8>w|g96$(5%A*BLY`{eGiQ;EkP+$c)9(!;HKB@T}6Nyuh1uY4%O_>yeuRi)#+Edq6zbm17cL9`T*lZx0+V4J1S9o+s6Ap6!V4-ji>UM znVSCk#3bYil-Lirky}NQMOe9s?0mDdEyrR_xU9P{2th?Gi+6X{CxH*wdu)Mo>)caW z`s=zKLgNZ=^d2)}U~uh+rd~mf+9^Jkzr0gTZ;>3ST8z1UR2~efEvjv3c$`!i zTA#RpjF~-OXZzIbyB_5$S@Ehd7moh8Ei)aEELd+#|n!==2zJO!_clfjSkF@JqH5DU+FD6z)Xhc-1Yi?XW;Q-_ zeqYS{h909aJLV<(6cSjMyWdv->GW%u}?BQUNF5 z80KM-ILwoj^z`(KYNz=5`NeTVb|G9<3-9wN;~h$`&b8}>@v=w`4qJK$+x?8Nv(E8; zj}_0pMWom{O6f^Z=Mr;<++rQ~RLoi*C_GcGx!w1hEDmK?iPV{t3&vf_OKpSBmbDh* z5XU7O+^6CU6b%h~l#Gby^&@Xvl76|c?{xud=~6c$lv2=9v-qWG&GcdDzRO5c2L=_yuOjRRf3s?MJX5^m!)@WUuQ8cLt@W( ze|PUeM7_66=3cj(A5L@BQT}|Ce8V}DX0cU`t=(*_!$`g4Zef9&B;}UowS2kAYZG&5 z#C?4+p*H9-J3D(v36z|h6WlLx5*erPr0{87j1Rb z#o=H$7K~c8O6pxM7h$)h-+t;|(VWwq-A<>uYrmn+O}6WXxyNM5tZ34jDmoCpq1~7L z`YM)+8{WB(=7t^lmMUpsmSI=9FIQ+$Px1#d=x=O1mge~lQQax8%Mv^WKdGf~sT%W{{$o*9mNlE{2^BqnEkTAIm1p2!o- zeOyPKyPgvQ1TgndOTYbTJg2DRJ~1A0sdq5-q}{o=v;&}WC=*#)VkWht`pT(!#R=QU zp%iDeJ^sCw3~%Q+*l`!gPDTYEvgcIiZ@9jZ&d*z*e^56kGhfZSc40zKo>;*b!Or&&y7I79_r@AO7_=~%?dG&Tvq+P?@(Z7*S9(1be z64tjj2sLPBcE`$zRhWfc?aYo`{5WiF**>N9BU--Par6rJvO{^ST>b_Ps=_QO^JT1` z0Yk*LW~Q)3OYH)}1#j$b(k#9r9X80aDS7c~wmw+TxSf;Q>$ym$s!ud<>Rj$@Ve5TT zq+K%}8dTv>)}ht16ch1Sn}4>hTec!OIBH~Y8ek*QDo{#9*0rxreGi%6pC`q!m!Xtu zGJbM6zHU#-w@ucrHz=1~J-O2)+GF6T&HQg01y-%F0%QISRoj-l3>xAK-s_6?tuaKAI$x~_#YbDndY``G(e2cKU^i{V`&yM#a>@Wh`9%OMb_*Wl;l1swRz zgORKx1mY$_T==nq;k%^~M-8H_lj`-pC8lgTV~2Q$iFfhwpUx*4QaPB!ge!Y(XRsIa z@Vf;Y+3mJVqdsS4F|Sta#E{Pt6`7(>p%;8GeEKI-X^rC6Bxdc`J1ZmJgcKB}RD4Ict$J=IB?r&{zT)7Ew0Nyz zkgv4(Q{;~XS;??gHD7&_t~T=@WFstb3^=w1b+h4D_a{p_;v}9uzb(kJJa+lHsCVlJ zl0TQ&xtO6;W7vA(4TtyVuFTYV%^*wJ%k%l)5BXR`d@g3t6Z_EJX-Mu8_0%0}opPN1Sg6x${%x(ULN}fz>mRq z)1Sp%;mhP*OAC`u%oWWiqg+_PF>k2XVGpO%EM-^Axb9K&NJE1HLCl~~H=-F3${B3q z5grz)=1bdXtNcLs5wi1ZL`1{#P|?Hiw!KU~HqH)Tl%}S}Z+h=1PvrJTG^C~9*?0eV z@jUdAz!a;rk*F>^{f`?Gx{m@_)+rL72j5j(uWO?aOOqR2s3HEdSn)UM-zqDvWu|;b zm0oe5!!KGLPIB5>>`9TmR-qLjno#qSJ@9K(YdD($kNffI;EJ@h7Xz$43axdtKdhJa zrESZu8;(3G?AMU}<~xA7D8BHrU9yd;rq61R`elPi^7uq%T)vi%@&fmw!n3+W8$?_8 z$@o5sVTmtsDywDYp_YocU+)O_YbtTg9jU``_6Jo{e-}wO#v!D0TpopIU*W%7=kWDw z(E5(W^X0(;OH0cdQ%+sZ$j7q3zbU6Eq_Psr+ENat*U_1L9wNRmEOEzU2(9Qd77giiboyvcH0iX7$4-XV$0Yh9Q^Safq4ExG;um$~=xY4}rs&bTE+-OB zQy=}EFA~zBvB#z+D|de6I7kU+4qg9Si2&~lQZ%-`*4 zkf{5Mio$SoPSHT#s?0I3>-of4ZuUeZCP3OlqLiFIhxlOxUc0Xu=a#YKq-uTW;;7;t zqstkI5H}G&oam_g=vDQrS!#@LP@!=mea()>+JAQFHV)dFytGp?C$bK#T#b+`_$)#hAzr1avBow@-Qb2~mPMRR%Y{2l@ zM^;v>!S@v>C+mIc#y%IRbA4}^)%QUv*doN~akdtfME2}C{WOV7o{GF;XXIX=lU@`x zn`osJG7ok=L#99d>>OeDJDa8yjuEZbJjMeC_-#k`rxumG6UsuyRoTKaB+lm?_f@4T zW<21{z#;l=M0`EtIH-HhVqL{v8=>X8M}OObU2iyhc3=a+(;F0SQ2(*YaHyQ@M5DCL zS%N^mD&!us;MGUQ5nrZ>&RB<1#K$M|O?^D4htz%aOn~=1>gHY4r!uX^_F9s??NE6~ zDuO@F^9vv9esF`->c^Uw!ddoW37vsaQNE*!Ei$pTHG01;3=@mg7_xqi`X*Twx^0P> zm6D{rX0(v{jZyy6>MvTtuie(^eDw4eALh;YFxfcUMUoXWTsmCSA!pJkex#5o?NQCG9qDy+qeO;zjG}WhC!Leg2h+u4J2Ypn1UFm<8eI=7rY1d9ha7 zYxF0DnC7w$%tWL1+7d>dd&{03&jr0cbMIs(b-_!uge7|J<1VI4f_Z%|N4{07_{*{o zQ}!?U!8|4ZExlPs_l7I2uTS$-u9}DnuHT6@AFCdgai1JY%)7y9^RP7XVmbc;o|f}! zqv^6QReyk(SnJCZ3-mgjynm<6W!n9KXK7rE>f=*)|Mb6HRL z_~GbZ3AUEWqIt>Bq?>O9j=3H9HMrSwXIpzjG#av6TUp2)mX;@EnoKGOY{jCyI%0Cd z8^fKB_tDIUPht?`gW=IV8S7WZ7-L0H4NrNj>H~@~&MDeu{AeL(T6I3=%4<#8f^L%0 z#iV(Y4Gm`ZSZ?^I4gH;{my}CoJ+!hKQT3jD7uWA3|9H92)l_+%TxOt)w8*hFOi8yP z;Tt)Wy*^PMX@-&yGLqcLzALx>O^EH7v^Xu#-E#>O=B5G;zjW9yg|)8Lp&M0L%B~{R zGB_Jc%`E4}5P}?x30E;yvK4G|V|=}zC+qEmbfsnDzM>fkr`&FLCX`*fYn^O4My%9A zZ$wJ2&l=8cJ%R69S}@U*8l;e=70sks8t8KHKH~iNrsohohFd;hz*Mx;Io0;qdIA3! zFYT&w5>o|V?=6mukP%)gBgNoQrygwOiAY5@9ZOwqffZpNwhOmJ`WVI!t8rh(-o~?6rXor{)J;# z_o`OU+M-w4-u#rzGtLlN)cDUZ@l`_0{vmzJ&`jF3u;5wQjGUa@Z$oy4%t;aBh|g8+ z!|m522h-HE`e0;r(q->gwW0cXZOpA>!mhp>mFigLE3!@}PuIn?qM_^II0v}he_~t8 zbnfOzV1-4vk$Y5e!+0n@p}jGqx2RWh*hhnr;~(Ub=VBT+wrUcT=Z}V|UL`0cbe1G^ zmVRB_rpBqtXHln&^`v^e;;jCx-06y6CK2t^OEFtGL&HpeDp7WA`_R(!mVj&O;!J(L z4@t2t`ufbTVBK0TGt*gRB0TS}EPjJXW5qP3j9+n03`_hjJnEMXkSl5h#yXsldv1@n z_xswMZv-_rZJG3?Y9wAlr77mA7YRIn^Co-m>+ymH!QUmia`&Bd^2AJX1ZF8vf4H2q zvBu-PrLAqEep|$1Z3ye@QIT1_9&vUxPw8krUG|c--pMnESEyWN(1rDUGYt7KCS7Q> zNCHp3T>T4EZm>qS)oIAYyJdJ8zDT|_(-L}*iPOJ0((;C%C=BR@g#~Qa*jiM?Hp+qA z*N(drUi9io6k}#Q^@Fj}U%y7Udiyl%&2ISJSwy*f!m(vrtaMxEg>hT^^5J*7OE@0y ze*CzTsa5ey=;ZKec|3IuB%eROBrYy)SfIApllrtJgt2o`L-hnb_F$j(r_P9KFo$px5!s(dwmzOBpFk0? zV_N;)e2ZRNIxEJ}%a@)BO8QAc=bPe$GOYdEhlC}TyRGwUz;J-NjXV-tAdu*es9EEox zBfI(Z4@kJ6;~~>Th3rusIL=jnvFWwGopJ(`6 zHguAzy0(;Wr5WTW{(Y=}Zo}dU&e|pYM_=UE{=S)rK~;Cl7on9<<4bzi`jy|Gr*kD< zrHKq_(E6^A{$YeMKyE(-vu<_z3$1s=}uz4h2GTq_p&-xC9W?# zo}vkQ!^(0=oqz9NHeID*(f*7>#@UsB*A)xNapDaz7{|OkEM7m?MSlw2mo>K$+#)i9 zck9EO6g8Bw$cX2GH+=2w^d-ffkt>t$6i`Uxn3ntA?|G>E0`7Z1X`Q)|j4|*-*&@hh z#)2I`P4#7I#~wWSX|xfWcqP8rXm|%1zw*;{!lAz#7Lx$ALG|>)Jv<8Tz}2dg%9OJ8 zM-2W4)ux|1Zdv&(Vb}Z-zUkrE>`PBz`V#rWP()A3SlYjXclA= zRLatlGP2i{wV$fI-Do$VR^i0qRH4;Sa-mtUsVY6Ebe}%zYJZEy?&PzqJ`!6JZvoPT zgV?31$)~4x-`|Bd1hFtVJOxO^lZ5#^?sw8`1?^!H%3nMs7a{(Pwz@UE|{lU@(`7MW7}!9 z+y7e0ld{UIq9uEyqOwlIM-15+X#Ox~y6l2GmGiZMh=EtPB;$$C*W(JHK!l?d`%r8ummW<0>@?d)zGu-aH zTG5zq)V-lW^>SsnL?PwHsk{N-PQ&RhVpKI99n9Lcyi;0!vO3{>_Ds;_^!l@P7E23E z`m9!ld6HyeGiOs@#J!Ig{r>pOV39>urZUkvKT&K)X^Y^<8)#S7cCGK05zL_L6*{GvDu7<_{YJ;&#*F`Jn zokl$=U*v6PH{F6=U$*rMHtp|?~Veh$?BAcL6U`(8$R`Ao1-DeZ`z zgN5<0Rt=KdBDvTc)?SuZRIr3g)-^QDqVL@ok+sqs)nkq8H0*ipCtAC^PO7XtR_++Y zT)F#xwk>iFDQz%}WV!zU8ab32OnZmE~izZ-uq#f0e)Na)8m+sEo0k)F0iv zlGKW)jE>+d!0jFz!+CTN!m;o>mzFj!JfEEg6S`Vd(*8Amc)51KhbvX1k|=S+_8aqD zyZo7mc>C@zQLo0)cw(Q+qN6ehFiBq7W@D;keObOZJo|^S}w4{3>qZ1dSMP>iH z677|?9P0LLd(*iYHlCn_soTt3G5n5S&z#3!>yej{EwwQM6ffpaQG-GeXDFd<1om8o zW(vwPmi@fFCx6F1^`#PskV}02<=eNqK5chDFR$~Jm6bfb;oS#{+wVBkhfMbNT;Z8x z*F?)<;#{&|-;$rsV>ep3NY~;Or;$~k z!QK%73QPmJMK%atq5)JHF(nTcmMWS7kEW{R#7AhQDbRB)_hzW4tLA-#Cu_q?In@{- zhD7DsEXbLUmVXvac%0S8_GbK1d3kwm!3^D)NmhmEix*c6+N0uRVg-AU${qUdZTf66 zF)`=l3?2t`o*eH8!Kc*J)R+zze+dh_(cnw^)W(MWJOP#7?%KqiJ9n;-k^Rb0FZyj< zaG8ofY!QV#!!7B&T+nCOorKrf*-7X9Ge|~Id~ajMdidk_?>GIa1fCa}kMtLqkUW0; z*mSgfz<6lM%wQHeeFro^l`1y@v%&o4kkx`dt*L1HQCV&KmEmys7C~WQ&#K&xiftAM z?@349ymjl{sWUh!tJ-2iHb76Yv*Y=5Z>P{xpgR<3%(_*;>%8N$9oApbN=1B|a_Aot z6*F>kb4%AOQ_^flyZv(FcXD(b$S{C@3|sa5U!Ck4tz=Wq2=vnpc;@hRQ~WXS&*46k zl2UAJ96h*eBG}>@(OsF1GS}+I9Y-o|k1M(4j%-rbCKLw+UV5v1m*C@$*-rx#{GoK^ z9F>)k94buc3Jv|;XgMd6=VfTq%)Gu1gb=g&@bmcmGXF+rj>(-WCTniik0Hk>hjL|_ z%F#80LRK=7TY|TO>yZSqwa5n^&YY965?reJi#PKcgnq^=o{wG;laAskq+AwKZ~Q)E zd6k5u5nG@Grb=hz4Mu4~wpT_ZPL7W<+|K3mAD9kMRim@2+SM&85|dObW1$&`WK^}g z`A^TBoOjkOw-^)L-&xJ7TxAmyazEZPh~P9^d{dTNN${F_+KgHy)1vFgMRae*)2u#q zGoK0v+B{RxLRvzZlb?Fwvm15Y89K4v9_7l($-zHx-q34cFGHItkANf3#NppU*f=@F7R@vgu>%?D*&)<#e}s~H5ge&XWdBxCq_)Ybhr!X;?| z*VYC$dg-Bq225vb354oiKD+{J`hn!$bXoh)8woggnd8?3YL z5DJ~*%y%rt!;Hp?#a6m_FbDJd_a1`zv5rE&u3mLh$KlI(OgOj?kdB|f8;724O{mU z?7KJCe|aDjGNxaY=$BVs zSx4XX6V;iNH~Vc!^!01^?p~4M^RlvW`J-E$=031PaNT455|zE2><+HD3i@}gFx8Dn zCq;RQXj{*#oAX$k@(sEd`af>TjpQ_&ggQuR^z1aWSrmA+@GF?12dUjL5w6v;{DMeC zvwhz!LeR{q@OXCC`VO}aum~rIdL9YSyCZ#D-{eJTG_<$3)4{J`26<&&ior6M`MF{=08 zuec)v)ogDu{`OtI$&mlGd(zq9Y_uO)`^zSXp1MLw*#;jO5E&V%xEChDl78rPcYS>w zI9aB4Rb~={cYI|#y*8{u53_yKca@s$;EC*rE1F1LI?d5*x!!Z)xfst5-b)VcONz^at|jG znTWF@kgala<@7X*HyW;)Bw~93%@LW7MWU+xfDQ3-spB6HxXIGzCud1jF69bWcuU=2BRJ!dk=Puqz`_|mX+wN zKESjMHTR?`g`h1zA39F5y2li^;?lhDIXo)k)N5(4`do57KpLsD^r_b#og20h-$`f4 z?p=D=(k`#CbKggM? zTxQ!FC;B!$MZ>v8)VY<~%YXVX%F=T7vTmclVt~(Tuj|~V^BohR<#Pdrg4RnFv8G#G zMX@v`GfSM|l1Zjh<`!iSv|9w5!ZXZ%9UgL$`F*38{|L`{BGbNT@VfK*8{89SSOsUE(xU72qi>_GNW6eW8IWIK}EFI9Tb*_vOnMI`8+L zhQhK$qwXiJUL@MP2M5;kzi$l|njtg!Z04^VA0H2F2p%luojrFh$DkwT{aDKF>G?Sn zwhJSb7)S8}Hz9YAdVBQsPQ zu|&uN`aoXmuc0hy3aNyE3VuBH!0Aa>4eCyou|C?jb#Za&(Y4xM8h~;dOz)G8(8?-` z2%T@$5UbFVdG_oAke^q8Kj*jhO|1{D_Ae5SAMRls935xElx2xvqx5XSyin@SHZ3qS ziDbnLJZ~x0#;_&#byDoM=FwFh?=z?unocB!YRPqDa$`*?1GX2#xh-#F!T&&>SB3M= zhWp8mJ3fZN`^iFAVn#@w|6Ojks(wBuie+4}<=K!5gy3SUEtQdGWQOx`!^?+popegp zog*6gH>7Cc`5R8E*BeJjzLFyoM73Bla(;0txc@!pLVC+LyQ$gbJNRN+dWNz3-|YGZ zGz`RZF61(5R#3^vkKK>rcaFvp3@&z}(P}eLr8RMESw^r?CEA3w6&{4Bw@b!Z=ASH4 zdbCrJjPDA3O$D_{qtazyqURzP7uVK_eNeOB&XFFns$`F%8CP9b0~*JxSFcjEt13&G zczGkhcu|=tD$>j)uxcEoaBw!LvGz6~5~=Cy3x&>c<;D%eJX7h|qC((<-yeDG{^UKQ zJ+7>8Hd0D#-H;If$=COX)yyx1%g%^B|9aiEC_a0C82w%_U_ceB&D8W?z4Xv=LyuM_ zCcRzJ+s8+DvhH*F;YQ2AMxptLnt+dkP-hw1>^Pd=mXNE09A=<$mgY>H7nNK$u*=qW zXU?;_iORjeB>wpEqCib?bH&MSdDIi&NsCJ1jA>=Mdx+5-b5t^nwY^NXiqqrr6gp(2Z9>1f{KP%E+3%w)jAOT#7dZSLz`B3lK}muSTNzuWg&?>6bcuunAt zo@-N#=NHL7TedYeG1enAR5&ms-Lkdt(FO|$v$QI#S|bYt#ajFe!PFA9@5ZNY=;-J$ zk0$dI9icu~5Wv_?wY)=z?LHun>r^^;fzw1p&&%S$TFT8AVfP)&^=FU!Ly``&7j=plPrd>c}a89;0^GjF&z7 zb$MY%CSgB#uQopYb$I#=vCnd)%@%&Zj`^a35XI5VCh6+Z0jih9Fnnch&cHTZol3&r zU$Ld?_{@Hu)0S~pSNHESw56@}YY+|RHEiZbwiMD7K1+l$#o6~^4pyrS&IZ`+n?rH& z*x@c>611z_(zPlgY@Pz)7Qjh(XHmKL5pWjLk-{u==HSKlg;{c7<<+TB{}`A-(0@LLMcTCDpq58&wP`ucNF%^^&hm-HlKo1J7A zzCZSW5r{|0Yg28=uBMsKVm{2R`m&ma5L=k1~VM#>$5wJ7dnVpnrg^7k)6R0SqNUG~iWlt17mYR$qUI?Kb?8 z<4|pY!{n1C+ja?)t9RF@Fq#HBezMSXKz5}z9L!I3>b-^Gs4iZg+671&zOg|BqRjgC zw*G8-I8Txh3|LTF0Y<$b@>JG#CWf8`!wScvMqhi`tZHT-i`fb_)j#5qCuQ~-vK!`; zIc+V8^qCi~`o3H>wUBPvF1+}%wV$Qc*_{f;bG$;ToMbp}y*YV?hZ>vF6-L$=5x z>$(9x+shQ}fm>r41`TMojr>?s)Iv&3eJm5LpdeMyKpiLzztLOx7(OzCmUYWbx13f3 zRY9(U_=oM)XEe%Pf_y?P23y^?_RR{lsxmT94wg881x5@1v=>V?>O2{i8rnG+Fx?tZ zGcf8d)Ga(P;>?-L-eSDT1_j-$=7#Z~THNToMiRZ^#r9uf@p>Pl8#7mBecU1=bo8OB zstT1eJ+D$gL_y&T^Rb=J8uX+amvJIEOhlov$`W}R9AhryUVl(sTkCP1QJwqHr3f`P zOi|{jgLFB-Ul!;30ehJXW$S^17q9t-&vu~GPW2zl;KsPeRyc^t5)F@xgtOXSvK|eu z1qp+c-7v6wHFBJ;mPvDw%SPkFXzd;PUbSLs=l6$`PrJd_j4S8-y`%jj~J?eTD z+fivsG%o7Je#5urpM?g#;t+Lp+R^Erl^WN4U)%M8;zr!BMhE70X|NV z&(i{#ZXK3lMuox_+}0}XFtbyWs{C8$5L-R;qQ zVr6#AYdbslxVgiu=h{<^sHmtQN#X@+1=jOWQMmyj+Osu2sf&G|kC|1fv_c9*u%~2x?&4xr36uw1p2?}bt0%kJr&D6xL{&bZl zOwhGdF&aq1nVSzEUI9%ISWM4MSXkN4hE0!XuNyuY`vpX_bfa#7fT*D%o$JB&%ye^* z%~C&0*3+ARj11v8x;3^n&|N6_>@L4OIjB0JxqbV+dXahR0&UP|xEA5ntB-|+&nC;n z+GQq?;bmrKF6M$5sg}{JuVpX@3231L^3n1hzTad&r;^Ccp3F>veNgtDp>zkgBO2~RW)`17gSy}>+0Z;`U4mzPt z%pj9FsIwCj6HB{e_(@W+4L$S&s~7ax$u8pJw#Xla%v2suN<^anddxNSYl!2|_hP;S z+~z-At38W@)0L^o2T``vBxbezPp|-8P!?qDhSiZ4m8nUL8pVNkB|^qmS3ADml>qHe zCuV;<#ZS<6|97#aZrN)u0&4%*SZa`&Tjhu92WSHLf9_%CPNgUpQRV5k$E)|5FAWt1 zIN738_ZCqZjbgY$@%CAx`4^3Ad$o%;usTVZvc-F~^EtL?C1g3`)~#Du1&@&MRlzZ6 zZ92e&jgR**vw0w!AK!p~r(9a_n-muzj_ z-9fhK-T_IZW*H}J*_`kYa4rf=c^L1Za}zj~(p7Ydq~Btpcq>~+{{!_XUuv#Vo&9*3 z>#x;|ET=?akDbxes2&3GBX6wLP1_}*^OLe7Gv`TuIP8f19drjg&+x-;z1uW2q(bKW znq_tc_peb=N!Q}wT_hkVQX9+C7SgX248l@nQiECLELFT}UsARkY<8DHw~XSpeBT^I zi@`7p@m2W!x&QhBfE*<*Ggj~V)ag#Sh@*apU&9*7<24>Wr3})lRc;j{`K=!HhU|od zgzr0F{&?bfsWnoFpsDz6k^Sl@C-`JPL90YS&uG+R?cC|CT-*SkCVE9Th*k=88yw{< zjk}zjA%L=FGt@W`cB_L@5KWBWV!741uzU@B4|MIU7T@G<+<99R=(uhs{OMz;>!zYX^TH9%SbY1K(mk@MX}0i~7lbJDPL)0?W{|Yw^`K%Y(uG z0XD6LmB88V(B7F`UX}v4wr9(Fwsm4HuGVH@*b{_+2fHt81eP+e+ex_jj=bTDb!T!y zw3vaS8O$tT}#{);PK zkbVE`pYJPt@%BI4`pVsB@6NAbt*zD35o1lj?n|TSAyVkYd&?nzXTXjp$SehFjKF$< zwBWx5#&U(6++-*2@!tzvm?Qp06amslp39!qANmSKo6(h}Stbe}hwbnW9|i)2NHGG* zjoy!pmg1Q0}WSupvU|A|#zkX<7F*D?Eyldhrk>lRs{I|Y06pcfI4^_ z)^0)vVTYZ-nsAm1bCp>YWUcjrQI>Z5bBdp;7M2w=HKr^Gxa3t=;weM>C_9; z75AY>fATIpc=&yH*I~;REF)45V=47jC7e16@oh z!?s~Pc|)03uG<3!7cX6U)e$2w&;{0q^Ug{l;L(Au%A;*{2+uZy=cQ6;N{Z#wWPUg# zBqSUG@pPUjv%kY5SC;5p-hf8W2;$N@=T{K?8%#O7;igQDz|I>7nLs&|Ex7}MC6i)Q zjvs)zfq^BfGV-U|uMpe}8u*5;f;uC%Ey^GoBy|wG&Zq{Gs6gY!OpCabR6TH4C~E`^ zKoM}spvYlJ715R6`!hvWbfF6~E;3C^K#723!r3=gYAfNoys*#=kic|yC`VV!-&U>n zZ*r^7LpY{x|Lt1p@>5V4qIvD&or_lNlJ9LT4{^zCsfR=gxw}=OTkhYvBYcEh(bRNh z6qbEsZ-4LR&9~qc{EipFMH;=`?vIc*YylAgGgLt_#GK9vH!@64SS@t(|Lp$qc{40z zev1l8!?_Q3W=OOLHDak@JS@g~d3o)teTx5%GXDJO(|CW5ZuwTPI{(hFHBZPunSGYL zEwf7Y&8m@>24F)4+BeLg5Q^>ZymdziY&6jT^`v?Wjhw|~_Ccxbas#vh=<+cUSz04b zF8OOTPCJWIk>5E@k8ByJUDi%jIB(IW*j|CbTJQ^()Zo`OLc*TBsc`g|;~eGIgcbrb z*JiLjS&tYlw)FTyBidCWZ-D(&*elVaA=*WU#u}TMgwbHL+N(J- zdss;SArS;W%h^`an^U(B?Uo0z@CkA>`@+Ue#TA(|=z%(l7RBKz& zwxm6Ec*bz5!LKJ({yYLg#(8h`4@a}7gyI)VGngqCx`{m z0&0UPvp(s=JorGDoh((ohzYvGZDNaHPyRzyN)aNA$FR}ce* z4I82cm$|$eL^jkR1bIMT+kj5dU1Duu>)Ol7N}Ue=N3%CE!woil$(qZ)SDt)B09dyw zs4Q;U5lM%<72_v2{G;#m~}x$nFK076jy6=09Lb zqWlHTIQoiC-X0^c%(Q5%^1zcu$n261;G7E=s$V{Q0lrP;A*=3S|H??2Du8kXji_(7 z)9Hf5a{j3H-lr=FV8!}*0wS_erOV+7=g}8$)p^{Uwem%g?o3jZKfO94DmUyLZar?6 zVQ+1nr%H=HlMmK606xc+r{G}>3ThSx6b`e&G0lEAd!l@^OJcav zHS(PY4)50YET~W_Q}`szeP)8>ysf~psQr{av~_x4r^nWZE0d4Ekk*BM7^l>``aT9L)GUCEUCXHe2WMv_8rlxb-378PVi8%DTpRIsh4jKoFah=IK3#PI3k-aO z5G+sWv)x?i_5wy~Jy~}Vxm8GIm5egxaoo5ADFQKBA{aEWXif?N6&V=k>vv$g-QKs! zmq#;(<|T)xHfK^y3#3UQfRyEc~)c^1Qk#tyzr@C!2=lRt=b+m zDTkjubNLGr+f*vbWp-wu@&@UWiV-BM=lt9z5mzTDIpY8tqnTg}+fO&^-GkU;_FNhHE>6`m8lOBxKkPCVmNB%5bwh!9x3Bq(YKC^$^L_CF~d) zmbt|LmMfxl)9v^?g10cUCQ5vHo=yL0CYn?r<#QWiG|8=~l-H=wSHs2=)7bF* z9i+#V9bD(Cv(R3%S959th;2zWGF~MAUgEX-9H50h`_`VA;Cf}()qt){I8(v0UUf3n zh4MXd5fxl)3_2pyVGS35&N4ommS{sy!s#yf2(Q;V?L?(tKK*Fn&SR;HFwEZLcI`^t zB4}d(Q`W~VXEU|$K90j#bLHK~#@-O4H%=aone)^a3B|s8CZnzI=NvYtug~9Xz0u7$ zf7ruoUZ1@2f|LvUpSh3sC~#I)(S1h5w`DZvmg^5r?QUdb+7101qf~i&$6;}@if$FG#_`8>~5Mi8Wk=H8sv>e zEpkOpgle9o>`@fJWaY8k_Gbd5#1RKRBsyj;fk#!Q|l99g-~C zhYpjpkw&%2hu_RbzU{cRC?2Wy@fkyr!*xD=eJYz;a-iAin|KG(}QrF$jCW( zLH%#w13rhM=l|eSN-G9&_+2f1dU&;V(#~ z0y5~*-lgRD%_4u{_>;h^3$@4RWP}lha1? zy;$I~1aHgA`0&Ws5#IrDLMTg_u?Pqzj6YFGKRH#zfRu52p$eW)qxV77PWtra!!vsQ zzjZ!j{$=EsDLH%YyH0=lVzb!)83N!Bzn>uD+w=|@u1*Kgm1y|yWP*jw^i zw-$S+5&P(6Vh*Q0JXP_sTcW!3Z4sT0eDqE(0y4Oh=K5MTQdbGc_Dz>Us;b=4| zVR~pu6Uk{Y8C^6c+dbD2D?^-h9}%^SKHHrnr3=vM?Af!wGt{|eEBQjFr}e0umsrR+ zO~W$W{@=8^EhpA7!(fvwfi0;c-$JI*pOW;jf84aj#=(Ib0iln3`>Tcs{noIWupHeB z`1rE`WF%wQ!(-j|c+`*1<5Rsn{7^=)vj=$-!@+bT|DiM6jhsb8ChTPETU)Pt$@5h5 zobbT1nMP(+p8oFm$a>U$)irsa#%iupj9O8<$fVC7T#6Z$*@OT=KvQ zHFYK1t|xpdC+>>5E}SE59BuA;=K6Nd4$`dPUoNmAsd4+%3X7z(d+bvqaHqlD~t zmR6=i?{z1L5p0?}jk?X5MQ$Tgh?s)CFfejH6 zk(`ww+r#XM^Z%vsF=2s*dB+kY%(8HTD7o+!gP3mQ5ZJ)qg%D@X<4rFYt*-by4`$#Y zR`EUz=dy@FaS#Kasjl|j={AUU{RsLE0-HeWj2FRzVC<;|poQOfZ5N3Yi$FHg`x5H4 zMI8EF`}FSlRuJK!bc@OX9fV-zjyVaF4 zHN>5qoC`_&qF___AG@G`;QdrJ624#OZRWNg4&W&JD&YXt8TP=8I z@Fv0CaSu~R5YFCd(+EK_^qgMn=U6rad@!=^+L+P7bL+`a4<**lYEt3^(kFJppN2E3 zS!R2e=Wh7bTCtZ8$)3qbfSTPuJ7Dds8>tSdiTUnM8@vVYc)ACwrNUCcQ*P4H9c1C( zKEbkoE!QnYtOmRVnqk-1uV3jD(}=)UuW6iHF;fLaPaO6?r@T8Fj=#CY%o1E2GClH@MjQc3|AD}Tri9@0_E&g-P%=7cg?FM277z6lao*2$XyTHDjZz}-5c>1TwzOS z%TQvFIfw%h5P_utUueW2U7(5;Xe(WKK)z*&@PnfmI`X~TzgRyN5fjYO9$S60hf)7v zU+;^&YdTD8phAe7E<<+LT@SxRy(9Ul3bX6wXu0EXx#Kk%nU44s|6rJtRx=yK7e{eF zXBf$b+b#9$Si3@e%o}A*2!LYx0Y=irQUDVpe%j%dl}_6rhsa=MMcyhreUVWv7{Zfo zFNQtr1ASEfoeq$lzWn!ahQm0~zb*zh>7nr*PCx7veLdu1#;RcbH|-tZ;DM}0Glj!n zc=7zo|D0R+4-knz`#;`^Fw-kIA4}d4K(5`R2?JCX0r=hm({NU?B5gKRP(;@IP)Fu3 zs=2#&T^E3pRmc#ZKXGUfAFHS6UvNYy3}5088vDOp?fBG${E(NQDznPva_?{0#sC)$BqsTDOs4s7Us%U zThfHid7IH%FZ?ORdLPh^&O8L4-gKmtV`vv*Z#nKKZa+Cab4+%aVEcU09Vy8`y6kO0 zpR$}@yPAB!d`Tvn*LH1lGe6u8+>cWGRcV--3t$F7%2c)+R8?TNH$e!3?J)R2=w&qm zf;ItFRYG7|!|C0w)KbdCQxCMt!(dl-X6rmXefo5I7bp?6F#^ueJCi|FQ!=V>+WI*% zGE(xc+0%>4iB4t)ax5DP=B;5YU`yw|Zn=)!qITQ81!I@s zQ!m%1Qh{(?wZNf3b^rbGri#Vb#PaQeJ9H^#d55jp{8ZKqLa%Y-U8KDycgwV&Ax;pa zoHjS&OrD;?n(I%!@Cu$&!$ZQ#UNB8B&kMaxNulG&0NF?>3yT&ys01z=Q+`8N9|A}8 zrC|Bm9?jdGVZsH$+)IzZiP7Y>zs1234C!Is{MAPa3PgWRf)s-k#)H$pvmZZ2R<=d( z_?T;!VS|ljX0Nv(GxoQ=)Yr9mprc;X=Z`2yY$dNq4yq#SdD-vov{`9lR7na!hYE3`kK03-qdOVkJ+ZB*Kj?4TI6YaPsf6!S;0p%l8MqqyH?Wn~S{ z!c)WcU<5=;bvNfbm5$ITB#Bf6dmJD*>~R&S_rKO^j6fu8pNXj{U6fazK}Qz|t`Pu} zmaXeRF8pVwT2vj)X8TD(GAAC)PjJo%5E}o7cRPGkaNnAo+WpXy(_&N-d_4qAW&#!# z77%Cz)sH}YS3oM^HSJE$%*}-|1_*@c?t`}1l_E=XcyyHUz8LF*Lg5&YCr35(Sw%$+ z=sUZ<(f2*|zYO92MYd+RD<13FD?~)X&^s>R;!Xkhze7iNfts2c%!41ZwuMjA(3r0Ye`3;gZT*nA9auA;5G55+ip3bL+PT;UN6ADe{yNJ*AC;{hQ^H|mc z>MK_sxww??OGG3HzMe51fN$Iht{@!RcqS=X*U=FGOZS=~Hj<@HN=O@KHLRAowPcjQ zEQR0l(Q~TlO$0ssRR#c5(@+<;vqf&c{`D>Ac@@w;paV3VoYym?TlTEy%z6{(E(Hkg z(;=WQ&jDnDGF#Cs`|R(p6ngC%A*wG(J4P~qO5k_dg5yDSkr}c5Gg%_1ot0$;bx84) z3&Z(K>+~^0_AY?lvxoNh5Djhm@j0l6ZKh*x5Xl@;?H-$5vsp6V=P zR2q=Pop(3?A>aW(z#+OXxGhHcktR|UsAalkh~+#0D-?Um8So_ro{?O#H04d2wbjn4 z6=o?|jQ^bg4;MUI2^|KPG-a7W!0Fputh-h;)yw~iv6JB9@gHq=FFIRbb8BlqarrT= zY!5U`zxDJe6i9=n3g2KHZL&dx}KasOw4Ed z?)saWySGf^=~gai+T;hHrnF5v@_UgMZ<9n*U|WRpra@BPfB!tAUz$O&#_v62VL~DA z1vS|hrzAY5cg|~PUeqgj9QdJJyQ5auszYGTrM+Z*HYn2B;vsNu=wFwXtJWLH9WZTN zw?bQFRa8EeSkJ)?UnA39f_(#0Xkc)#C+vn>ckiA9>*=lVZ6nqlkdSY%>RsR$5PZV+JHHIyPMr9#;!B7zL2h=>XK{oqT4pU)N)6r^Ni5Qj)4%K6D7Hn$Qp zq@FG6MwV`cb3Y;c8)FA!xTh%N;SBF(i@SzI~{x6P})) zX6KT8Y-Yv?gXc43er|Jc5QAA-1LrUB5Zn%H-`~_xrU)5xSWQ2BpqhIY&Nzxe44h-I z6b>B#_P2yUEOf$C0Ck9d-66aPF@TGRH`dnOyVc=AK_0-?5nBgQpFUmibAkvAG0N+C z;(HCIMtE@JGc$J|2)XQLH_*EQQn^Zn3}Ar{1ZR1loUVey2^rScDJlIRu%c&RpbIWw zQ*(1?*ge;tgP@if?4Wu7{yjDp`X=UbTh>1RXUe?78=G4RO!w}IaWB(xbE{0%MhV}( zDlKGXY57hrl}MTc{^zlH^HFRt2|1EQw}+F-b$zkBcnkz)9QgYl2=)M0a`J$Z@(oY`(iPMv0)5B1eKlPsj`DrYwfy0uu|6+LWkZ>OVY z>{L@yRlUf^$A@_I>PdXche94bD^eJOkg{_nesm=J{$tjBNO{RwKrr<)Cz=h5ipU&Z zJC3*e1bELA36+$T-n@D9$jwbKDmof+&v830e6Fsk*7M76;iN0>RG$b_=oEx;0$XOd z_m^cSnvyE}BfERIw6jd2uF06qfpgoVs&8Qt@bxPpH#hh9{CtI}EnO26T*S{W0-C_C zbHG1#fj&*v_k7+&U3-A~cSQihxeK zK=XL^>{<1_SeN&ZD|)iZzd-Ih^AaJ8cuV3ErO1$>LJ^sjP(oykk}*Ri znUf@B$~;dAnMtTLnPrwTj~O$5>#4oZfA4+HcmChk@0{N*!#h0h{oL2O*0t8UXNI!R z6$J61#BeHv-ivSB#u6=(F|#zE-lnXgT!Rw0R(_)-y2l@rldiiTUAlCMUcj1()HTwd zOP#-y29Gd@?S85tg7|uCK#)A@VA%_#&lVY*BM^*t>J%7r`CS zKxY_yU~tJ~Y^76NIZ+Of9b^=Ht`?5VFnzf5aKo-vbWSUbh=@=;ckv?Sv*mv>g*y+He5}{!Ux(_IxWBIgWB@ud*){ zwsgTmc(TOR)s-Q>&d%PR4caQ(V!f)(Z@%A1T>{G8h@xJBTU#>B`ttilPvVw*Jp;X# zp-#abPEI`}8?CPz-2 zQiEuViJ93i#Ada*!0ldbBu>VmbkwHiW_)k^l+FWw$Lrg<#2nz8qi=8hd>^>0;( z<<>&QGVHnZ1a2Hg0HneAP5HLqSJg;tS0t+ll^K^9r) z1j=zpT)42q*u*5$to7)wJjHZ#Gc%v~aQicYKd?Mq+S;^S%!c+CSPjvE;U0&cAR5;P zEDjm^Nl(~kuP>n?m}u7XEvu>`gJ5FoJBFt7 z={6HzrHEg`enDJme5O{7+v-kZ^M33g0Yha0!``#4CJRP5{s$$4CJSZh&{VBh)FhLJj22P>XE1$`i^-TSRhAD z+jb@?+&XsaaX`Q-(sL?j56Yn?-a7(&MP<-4L7xiA6cy-Ue`$6zr&ZkB@cYcR`(@aoWOEQPRRP4b&QBywl|g0&2^M5Jk|2ms`1jHJGoob)YJsQ=<9a+RDig! zO6zO>M7{q>`t6gEw|#S|4rmvrC>850t@oZ~q_PpP@p;Y9F1Ysj^}`sNv02>MiQOtb zd+9^SQ9U$Wwu=*0t4IJ62aBe*rlh8_CQwy5J#hE(a*0US_P3vZhd*1kGOf;&+iZT& zoQ8&m{^^;po7n*o5mX9!oIuNp7cctoMpt#AGAZt*Nk~bdd7vmD_H~T!vy2|am}JQs z{2KJRayQ#R_TEX4NFR5APUuxza%-{KF}j17yf-rsj&Tolbv+Z9>3y+|BvvdoXZq>t zdV|`V=&i|}A&m|~bI~}B0^Kz*;BoivYP=6!5c?;CRk>(eV02AroF{-XdK^WxI{p2I z5U;o!16svLIC&DN65Mh*zWWepuBLCIr;68M&O$m?nGiC=JiMB;IOe=k4#@q~LDA%F z>hzsuw2gD11^ga8ipms0k96Y1*%Icbz`8IgdA@pe(qUz3Hi%d6e$5gktJvZl-Nw`J zMY63acw{tF%&aWpV;9UkMikGVkI(!BN%@G&eJKO)jfJiN@jJ24y5TeH0l`uiJPxd< z1C8CAj~^@drx)JEOZPc^?A9@+H^R4hG;?HK*&Xn1!HO{Q>6PX%D8q;sNwwZqSbz&VR{H(QedO?v|+@r$S} zM=3Cjn5*hsxf2w?3;DHhXlN+kgRhLrnwnmb<@djONobdrmrLAi%d^X)7rvQLHsicF zae8>}3fYyOD?!YBn$jIND>_1RNTqf`M;@>qyLO00C0;oZSt7R~#JXT&ckUb=%FZf6 z`rBOMT%t5Wws!4tu7K5q^3D}wh+iKHM0N0-@;GGJ6R_iXR1_Np{h{OimS`G@l1%Et zgr^K24gXh0aVL@RTcbi0%)&Id9|?(<>vL=mgj$7csFo`KkQNm%O)P zQGiV9FAS-*w6w;jo3w{UqEARktpkbbf*Ave9swyV7{T55@*~5D5pnj z=mAQvXSUOsj07{i{4B#PB<)L7KqlqHgA5LOf&$*bzMXeb5vv;McM~1~GhPMd}MKv*8@&y);Q6H;8Y7 zZ&6EHM^3jv9}tt8rM0;^;eb}*Gp>C+N=qOZlTc4L>7yZ0zL@VIW4rujx9j74n7|YzoMQA@dD`k$j7JrWzbHm#D+*10Svqr07TZDbEkB`q_pSBZS!}*?{=f)Jy4+9{pm^HsV zp{A@6)$&~5%NPj~>-Eg#H7m}0hNPG$InU3SL*agocp+EqfZEm0#46i%AdjW{IzYJ^ zddDOn%LKw=;j-XL=(Py{m=b^^G>GwoSWV}b1{9o?f6mR}ZNJ?47!%UO9P`dJEVBXA?;{5#`ZTAF7!FUFt8!_XB=)jZE{v@h$1rXOC zOKWE&_s*Tivw>d&@VYSQJll|{!WsF#vhq~G!-qSQe2HhkUaSgesEF)S1$8lS)D7L` zZfaZsXVerGpV@c2Zh!Hhrn6H!AUyoni^B7rpKdByR*N24k2#4VMrgA9kQXH_ zCHkf!x|hiFLEre>FAio7dC4$lwqDXU{oqKMe5Ae@>$2FI!LaqykjAzCq7$ZRDF@Go z9M<>j7h9D;ymNhh{iMhB?Oa&6w9Xz4t5sE1cXD!)VZ(bU%?_~Xf-bnV#$1BU&;44} zyLV@LRJTv(1OE`)AhBJXJxjS>$Vgn7xY{UWUD!CxYs97+>dwcha`^=Ze_`vJ9W)t2 zu}?@#IyF+HQD0yG3?zX@t74)m@f4}4Qf6kU8CqNc#-Xn+%e8R@yz3I4nVAWKDVS9H zi|J7!n4aV!0*rk8-^d=-{|njkY?(3t{_fG^OEoE&KYV+)ii?m+ya*z zn22a_mk{4XDRTHpAHq@~-G+m|GM7w9NCxtZ9xM5C4cR=kbH65v(xHGUi6AdoL zRU50RSjAGV8@B_q+^ZVYqu8|RB$C*mPrmo~F%4L@i$kGOr%&$&3H0U57sy)n-?(vu zuUCe3dimQ8A?Qn7KnB5W!Vtf=-O*_yQT zePqs0HD8(Sj=V;@ty>vAQ-#uX^jfwrwA41q->OhCCSncBn!n!=LdM8y62S%$Z1As5r^&e}?YexSP*PITNpyRc944f~hEPbz z%@4%J#=aV&Bbl0+ts+6NQooRW0}2bIKs*>8HuW)~oXSp3AEt7ia~bayz?&qT)TG;k zgT`3y8{$3r2vP_${59`G1kzU_CnRc)9U3S3nf*&!~B2>K6vynG8)n|=auCRl#~_NRB$`&;~s0v zJCc-~?Ak|APUE`@t~(dlj8!72_WInoPIq}~v0bgeOywlI_4^jx&rQDS=$-qUGo#1b zuxSa>Ci7-ydNN0+UEfhV-Vr%++{3;k|58Ea>)i&&`s)NaE>2a%oRu|O=q5>n@P%(?^~FR7Gn;N>aozfkR~9*T z`8C_GZrAzwN{T%5h!ZEE5fR-2vW24ZnyKdTB{E7I8ymg2hHo*kv1RS;%&=rM<~@M( z5aI_C2?m4l$%2)Y^j!nT00-x1%%q=QeVqSMVB^|20LP19i>LkrE@ zPLU^XubkBdnd@>Uw$?r#K8Vo`*Byb}qr~Ol=hz9R`1q1*^!(tCK|PrCURsYlt+Wyb zX+=oV#uq{SYg9Euw)N)9VYn904^<>nqKjgm(ga)vzo)!+a%xHvL!xm9AY~An8Vdy= zl`9`GdtnOaE-d~3$00oihjdO*QTf7!eeaRE?e55vuu?KUKK^-!zc4Bu6RCE)|Iy0A z%BR~jO>#RKMiQK#)lN4*md5-_6?dq`&6|?fIyM$kQ$KiAyS1Eu)jc=Y-8?+00TM5m zV$aKlaA##@*X0-LjAjRjZa}Xh=-ge{P5YKRRM>74uCDsR9iz6?%Md_q2xs=*uBB}_ zq)1^rC*BAmk7oOJ@@i30QC^!-t!~|#^#CR`qg#|NT|zRMK^F!@8ChB703NPh->)3r zftsTTWQp=irD!q}Tdfo1Q*hJ=$ZZF80)J9|Nh3a(f3b@D-YCNUQ3FasiTpL~k9%3$MvG zInN|?V=abCrz$Lw_@hH4UIw3?+UOjq`4_$ zzBny!M8GL6J#2mDw{G^Yd;Zh{sLx}8^k77^Enxppb;GOjSD89J>y;c^TE9f6q)?C^ zI?lI5&z&tXnn1p8 z<@xTB59KV;``#z+d%g3CP=zr!uU_4BWM=Uw`S?YJ2JR8HS+3T=BR^hh~Sr z)LqeyT)UzMJSNl^_)r_Y>Tfo(<|FcBb_?zsZ?wzebT)?Q`1$SM^+LyuA5z z=c-AMtUZ5_Ol~aSJ{mt^`zxEI{_5wLq~w$LL7lI7`3Z*Th2a4CYY+D~aCaJc?fdHZ zi-rPeMDRlR^B;JnLiYf7X>!Y=Y;o4|(&i5l&sTdV_YpfAn-$80+0Yi!A2bws zL*wb%5U;-9OwtnTtz!#0o6C0oK`6b9C=9XR`sp`y#eJzKrv0(MEypBhh;dy`&-)H#iqD+mriR zrFK5e6fqQyza#&F(#_pH;bKidN{I2+PhRSOA&#m-WIIg#|3V&hO;oX-zIc%txmf6b z$@cHBTM-Ek3*!;7X6TQZ&`QbA7nY8#eL~@-aRL1wak@iotupGb97$NR8rC=jGIml7i2cWQ}uD0X+cQ0;s-5w z4x&QfF6MtHkkWa3!l|cwv^UMK@cvr2<45J!BPDLF{N~qS9A4y<*wq<8^tshnd|8l$ zUid5GWbS5XPp_Ho25AEw!T98~iL!$B1rXRL?@H_peA_+p-3KIxgi2yyS~G~cuVMW* zUHBS^=7ABos9E%?yj`_8s@AS-T;B@H^VIREyLU^(XbdmnvuxfQdy4NqzBJ^OM(TK)`S zG0*r=57gR&s3+>iWJIVp3i2p{ks$a&(uR#2?_eP!m$a!;iJH2`4I>}_o?BP?J;DAR_L38(d~AFDr< zL!3_HYd0ADabq&WZqh)f=*^oq2EGloFt@IonVIf8(emX>RU?(Y3Lly&GxKupBO!gZJx9+#Kjj0=b%0XQcz56Qc^(Vh1(a&3PQ5D-wA zcwo>9oxpf^J{3VBU~)}yqc;2{1?=@$5w@A?4Emr60G9Bp&rHpKc z*4_HYszh6fV4UWk>0wlDqb^eghTUwB0|O-zRXv42?BU>84_z10bmfcIQW8ZpzXSKd zA?FUkgJ|RY|i51;)}HNU}E85=mJ;N-U``JS2cv3>5yT9MPt#F&|ZZ@r(8QnVFAB3IVU)0U;KL|?=Yy3`W*;%W- zBsgRF`X_lGWx90z$HcKtRPVnJ-2@Q*u!=+vF2kZ~N3h)e=g$w=E4D9gP6EX$`+!YBs7uvlz=T3K(t{b$2@ZP660qy$<% zCJ%vz-D8xtn?;PeYHU#7o?nRzFI@BIsAQ8udFgS@-ZbC*YyL96+L4%zgw9U> zDwl_vSZ8#_l;#7%4?!RX))T5kZapA9z{GRT3H3=FCd}j~G z?J6UG=6>KSa)^0xrD$}|Rlcy2zKfkROdsi54$pG1;fpCQJ-JpzM||D++|g)jwx1lsEL@1u-@QHjZaG( zjcmN7IM^C1YDT6vg1q8SqO+mnSKnHmkgR73c>JV)@rV@WGp}=eb9X^E0|spkNd)#_ zcTdl)@2da7`)|+(ltVVjZIqsv+cJ9(9H4tg)WdeSp)T%=!!ji_5=y*bD?r!c4RTuAxb(fZLtB} z6l#=Y*SF(naz1v2zOJg$gPi?g^|zod@e}>G{$70tf$LWFELE1be_#ev5!IVMVLO$Y z{4vPBr83IAfPeIKSlw|>QcJGv8i{ldT;;i+^Zdb_mf6U_MR(Q>2R2S;C`V3hW8*Fi z%GULmvGcq}sdk5%e1O~6)AQBc&+Bj#A6HVMraP$No$@J*MEYmpq50a=v#OqTM^1KD z#qyd3LT>fepJVrd1Dn05xKHWm>;fe1{{B5S*B1@GAmz=iTZ@3|VLYPQe=f~%>(wh) z*jIC`>-rw3eM(J@7QDOj#;S^n?tQKCB$AXkjSeD^P#``Z;~ZP+5oHp!rhzH`xRjLZ zp>XI6y28GX?G)O#1L_zCz3i;q@;fPO1TA|h=$7>(AGQsKlvMUy$hdsxqgBHW6@^yy zDKi0H2J^tm))Sp31cHAvFOvLLBsdw+y$5~u62zSf!VQ@G8JbUSpnkRW_W8Q0YG1I7gp3Q$4TzltcE>ypo<)*2o` zstf55qNOpUmZJ#TD^h~CG$XB8jG<~^Y%D!{crLRCPNdzWXRrjn`tkLvE;QENn2$WP ze)#oAY_-Nv^5pn{jC($()#dQi z)6e`0y~e~&#H+hD-+II|DT#~F!=y^Eu|<*9|EqAi_QO--Br>}@e5o#LgYSmZwvsO` zlGc*&YX7K$r?O4-_1B^8>(2A>p^Q;ZY_zJF*%fd`M^7(0JEdDfTJN9a;=poFWLcwc z4nf6WVM*LLa~L|yskBbpl)=n?M$MiHJ{y*)h9lP8K4^rc*|%cTjLOMrOvv{c2;sCu zm-he>JbLiDA{AH)R*}j99o+rla}x4bYA<2Z4oV{mIvx^nza*$~MQU*b>YzZrnuHpz zJ9ELp=E`uYIP)Gy1!1jrtq@w5VzHEz6tr}dIlQ{BH!Lo6uB<1is;O<%!<_D3SQs;D zC+{vLJ=1(N#(J>&0^3#2UM<=Fgk0~ef?G&Ih`ZkaYpYAj{+#ffO!xL{5b~XbR$~Xl z_V(wL-`L+OEAp#<*b$9zc6?N~}bgF{~4|+2m+uX_Y z^OQMb^11X^Ly_sbolc7o$Q}FOWr#iABuL9`484oiQ#aH!^yBWiK{_6-dyoj=06)-A=AnSYQKAEuL8RlWoABc4#8kS+Vx;6iR; zp-AEUU~)oY;vFn7vHAYpFY`PWtna(K%bo8LIV0-P^n{Ah-+4e&K!lr#@#wWJw9)9Y zKueHFU))Mw-=7|`MKAVd3zG0^;)St){WKQbYMykugK?b6mW^LzULK3*i=3z(*`Lw? z+CRhsbXBUO1077iN@Ul%c}dBU5TUWYV6=TkWyc^I@Jsx&uKiU+@JF5e^TDXm0ZYb6 z*{a)Wx}ivM>;*~l!Te?^UXwJLWpM@3aEhqp*@*mZPM=GgIkFe!p_t>gp{`lU%*`?% z+Crhb`q#tWTXT2^{^NX2Oy-RlCm50$HMh#Y0RBZG`=Dx4LYLLSPgIo6{uBXC0ITFR~dyartDFyESj!>Mq)QZKXLqkzn*d_JMOMEB$`d@ zxc2XlRNPBy6MvPWxYq*1A$ae5yj-*m+m0ODzn`4Co0?(7yyfM_)?70(QX#5koI=QE z66BUA)YXGBI_^(19_la`L230vr^|hC|9%NnOcYQQRV78mosWfPEG6NNK|Ot1uM%%w zRC)SigKx7iuv|V>QyHrA{Q|10$b*}^mu5TNR&1SL7UcCnNXB4AB-8-fcJ++7z=`R_ zQhuyvthBY75o}Qw(iyd}Ar8ll@ z%WwCA(Nmid02uq&x4u5Y9Qf)70^u>~k9ziugr~$|2x`esuy9r(2~UbJ^5tCn;whoc zbT=?J@YDs=(7Oifb{Sf4dF20ynwHiTNjA7;%Z;9?_{XR_+M%B$7R>cQ9a8;wwH=7C9_I^seY%03j$JMCRns!DCb58L|Oq&l8i;LBHg>1B=$P3cz^0#jj zzg+L%?}a@cS_8KC7tWsb*%A>s=L6a39*5iTC;!#Un+e?LbMYRxp~iH8^jf>uu*FXI-ls_TSKBhd~-wb!sszVW5H}D ztULa&Z0}qe3FYFXHt0UsO-Q7xSFb|HrDT3AL>Q%Se+J)I| z*L)5`Atv@C5wyX5a&`oTV8V?x;w?wMU=m_=ZJyIlj#J#pA`<(HW&#k zXQ&;m8nZGp@2GM$9Aj1#@lVdn+c4c# z?-grf-f?S4Az8Z9fAe{P^O5f{chkFQHa|7uf?11hYgH@JZl?~tEGQrb6vRvl!sZF+ z7s!d868*EaN;scmQAn zMib9{D)E=6lNzXK+=>qq1i{ENF$0MSlV1YuAR$YRkKv;GxpQ-KPs_+Gt&=Babt1Xv zcA%1Nh9oh}InEtD94znjFojMaUx&OJh~;6>;|+Oo4_?Pef@#~J|67S1T4qhi$()Zn zV{T~3W5YW7K-+nV_EX8Y2ofAOHs5@H2Y5}1x9T5Ls*-c6qM02JoERg?Pj+KNMw(dS zm(%63%KJWQ3sN0)-JWCK`ha%-XhdB{8*hK>QQbdyh&kJZu9oyBzRDcqX|Ca)rc@{l z1|Ng=IZQq~*eFH5y-a1)LuQpfpZr-~zK>ubAl|0Fqq3SBn3LFa;XXKqTL3bF(wUJ~ zlqm~1UwwG7Er(z_NGgTar6$*0TPN>tgRDuD24e9u=Z_xMOR|alf2A1A&uA~fmb0O! z@wC5Ws zsmQDD`!GsY7@A-81s_2=KGS_LQ)fvye2oH+#8LVCoDue0m$$vpc9*&Gv3P!Pe`+-Z zXR(j*bHTV9 z3bVbJfnH+P9sJD6X59JSPMqMzrO8$D%b~>dBc7R{2L8J;^MC!3ZYrT*Ud!c;mkFxF zn1y59;9aQmav&ieed@chF!<}ILPGa>f#bhDox?F3=qPP(*-4--zo;^N4H!i*4yNUA zhzCj#vZXdTmWw^owE5*K*w-b%BjEhfy^r+`403d?5O1R%aIrNH{b6%U%W4wHL2OkA z3Cuw-MOZNR^wF$#pLt6Q;jT`%HeFOq%vz#0JblRzThSW{-w5KFpr{p40mourEnwP4 zA_Xn<_~)9^xtUWJ^9YW^^gsG@}!X~ zciCXIdF9knkV?6iK9a}?d}98A%DO=kGaQXaVLxio2le0gp?Rf9;Q?+R}xVV2oPMes$jb0l)`_9DJI0HOg%F<;X zkfJ0KN&}dfew4SYg*|v7QBSH0KEJT+bXcNo^Oj%r^z<^J zOOQS*LkL-rL*N#+((*H-oRAMkLHnC)$!fl!e)Y>w^69>p+WYcqV}>!?t2oW-TyK1x zcqXOEaT*5Vn*FCK(Vvvse;XuGiTp{A-IXG`+kuAKoXsu?7rUH>x(~T7(fuOIKoYkI z-?KJD@Fr+9rGoOMb3=y%et*-L+RRbX)BTNlZ+_>m{-WM^cx1R$cr6=SbWpjI7eSq6 zd)^l~VQG7Woo)5|t0fi0tVu(wM?hS~8DBaaPdpHLO|Al=Sbn2_0}Hwb`W7>0X$pRV2_k>LKk8Sk|&P8K{9>GtkUrZSv* zvqvQNCK?E-?k^{!2kRRePH+VrO)kMi)}X<}$67vIaARw{X-)F^gQVl{-_aA3&W9vS z29ug{KN)Uo@I zQ!K_)#tax(X~Zy(;)OIXq&Aj1st=(-e1%~$VJ8SUVi4{(nEA%q&3m|6WPN=E6{PNgU~L5PKyMkK(VWA*DJp)IKMcq zBjBCknDy|M@Tyb~B3hfWGA3<8iAPTlV>04oO+*c^BK?CqEEZRIu*5VWKXq(;=0_!B zFrL2794)sRXC3qH9xcD#?5%@McjOXH~Swp22FoR&j+X{Wa?0PY+K|sd=ZUJ zN1W^yS&bgqZ7}(zO`p!&c0@{$wH4jkjwn?rG9xlVgbACBhRyIFx?+u1GjrSm#Mr92 zx!I80*TdsZd_3o-O`8aDu^IxGlFJ7wL=KQYcNHh+S4mG z+|4Lz&j+O7g*hEKL^8~ewyT}$y>q&Y=QC!CpP?b|wnHZt{@igBNpVVonm``j-V~(i z)20ZZcL9y~=iChIm{f{(>oPhFZ3ls_-26mZUBxuj3Zmzi{9@&+}_^%Xbq z4z!O%gzZ*oB&K>bH)O&P72NpKilx`vxp-C~ReuE8r@oEfG2=Y>2nj~3T~FSb#kqqz z_YDqfEOfkSGjDIATj05<#|U7BT^1V6;OM5jb!2AKFWUOA?LnaHVGl_*raTL4>q^`l zuFpZkn10D$cYG$@8dzIDMR@oEx-JPuw_WNHGHlxHV55sn)XnAS6La|M1~ zbi?1hP`$6wyZU_$r&afC-H4%4b|cIh8z?B&5|J+SC=}b)aBTX741l<-@U)+5ecj!6 zpui%O_=}Yb{QJahMw!Igm-fxXG(}AAvmQS0ncjtHE1K|IcDKr^3zjJtV2y&1Yi_Ay zjIdjxyj;39!v9OqG5*?Lp$lefjn-_M^J!Ytm$HD1_ww+6TG*I-uXoYbJ5oSlG*|9w zNvyf4*GfJ;HlO}0bsLk!a115%kw7OnmH6uSOxSSmMvqw!Is54 z`^oY;PS3?ukdCDI7YpgfFdaQ)heOgXPP&YD#xVWcP`XD1=Y2G_oGOhW#f+V;B2cSK+-YK0+q!=v`&N(2b)nD~ZYCphBV&GgA?tUu z;;KM2D<+M#Us}HmEt(u4DgylikE5REkKV1sI9?@Az6@5^?8ZK^6f++dQH?&P!Tnk6 zshOR|XE6n;PfjoL#E67+{E8}j+*ySx>#82s-D+;i{V+HST(#}}L13FBs1Z-owY8|A%cLo#95B$YmY zqmPw!7z_dRwDseROCXrgPHNr=GN^*^NJeJ5Pn?sTz4TN1K;o(=(oOA5EK>)l+RTk+ z56x)iS3dct0?-#e2#)DIs#|l#E6caKU7%y63wNBkprrpKDSJjURq8AB`4y`!e{vrbe9qrbscwuW?tb$KgeV|tI!c)bJmCqzF%M7<8C@kVp?&crW} z4PnqU7?8VO5=)6b>L`4|J_RQq+MSV?Ihrqzfanl4UvA&TqK!978kT{scs|t6Xtof9 z^>1jp8}rnuQp{Q3NJ{DkPyRxMesqP$I|V}zM&(qkxK;A@{Uk`^7%9!pZb+fj+srR) z{%^g{FTUAtN4Hc8{CUudye|YG=;ZVdM zVE4LD=c3#azVs%Pcpx6hPBBOL;-vL1fVG{U8E8#fk`EPBvMn4ouRdfj6~s{;f|;Sb z2`i8Ozc4HL-T#JJ4g7^To=fI;OlkCd7*CBg?}pG*xO!n`fZX-us^5mKP+_Yxss*V< zzPs4!ejJ+Bc2`NdEFnf}op-IDMn~|Am)Zp|tLfrrRhY8T+CeUkzid^5C zqwpmP`WMn|Scm4gM~)DlP4yjFTS;(aXK!#6rGc#PWD!hyWe``y%X`XhdE+1l5Q~u! znxw4CA7~uml_QeQ2)ikCgi-<7HhW_C2(LV?HhSjY_&r`e;;xsM*GK!`Abajd^1%t1 z?0QmjJGM4xn~dtYv)nH&Jw7$o$qH7m680;&y_y?$1;1!)HqYij*V6hr7m!51vGtGC4JS`GxKBaZ<{F77Q^$3NNbfP}-wJ64v) zoNLB{o$!f8HL?mBvwN=CI7fW0U7%-EIehga6NcoQ0pSQu7R=L{ZjwCixqdHp`g17U z1;4+j->v;HQ((=)%vd>ge%BxWL7_#uZ4=d5ws^iz55RP8s!jo=a(8_)0zM+d93M{G z(R~aRa&dLOu(xo6{|}6rDr5Q2k#+ww0Tv0fbssjJ{5-sqopaA_$O({)6xFl#c3Yv= zz0++gyxwr5Y)6)~%i67&VzOCVaYF_bXZ0Y=O{gbgY)QprNAN*}-lSG%J%4Ti=>X&a z(i<=|0ZtTk(H~LLY-1#Pk$Xs&FIxT=$d(<`bC>g&KM{w%t{XtejNZrS@SoDIS}0Bn zyXIFzWl{RwZaX1uVE9gSB7cX2e*!?#A)Gl{m_4=J^cf^=vl84=JxgCs_=B+lSfiqSKfSqKwFp5RzUr!*I%* zeig~~>s!v3{x5a{tKBJbT>9zv3$F3dsx`9k_f_dp6xk&?m!1=6>v*WX(wDq~Y*De# zt*5}n;6e~{cTnIu=9QNsQ(|X%CF6{d!c_P~!VBwPlp8yYoQ1`q#i|AJ(~S*Ml9FBJ zR;;gZ{xCm3Km9j8>1ZuBKSQ%R!WW}uadBuM%EVD(g1$OP5dNXY?>J=D)_G(hNJx(Z zN4%2LsuC26UX`z?qN(J_3E7pMp7Ye>m8V|=aCzYvwH{0*?!8_f5Et=Luy%;5IaMw+ zP8xqZqmTjHscCC5zcMdeXMrw+^dft zHou8kt3(Y9$HpF8Cauy-PMEZYd-Im7fz5xNWkI(4)6FM&fPr3O|i4Is; zS@H|B{B~p5`+wiDQc|?wo19;~vf?bx^w20LE^m)vHLH65Cpk@t!%C~D5+e6Llc)>G zQ)5sZ?D!JDv;O7_d$+T7^)b~q=UmQwbqkJ72+`nb;j{7=)4nmVA%&ZtSI?qrf$Znj zZ?|uE2_5`6VxRYtyl>i}I6S>-i2rMw-4BuU^YRZy3n%5_P&*MOA|El1_ivk;&Pz$Dv088)IB>LBJH4^7<>&ld=5x`bq`OYY zBupK5icKsDAv{(C7==9wojtPt<)seW9?B2UWn+c{cEvxd`npk5Pv1F9w$k#44}+d1 zyxB`h#h7-mcrmJyYzB>ZJdQTo&&?-y+LuWUR+pzEFUgl*9uGFZ%Ec}y$y?%~WM}tN zZ3suxsD1wYOhfNOgt)dzQ>vP@g?nR~CXu)&kRN_~)hgk|iEf5gkP0t`8}y&@THa?L z2)=if&w5y0>eMN&i7%4Toskl5G+VZO?$>)2ie(-N-F%a^~S z1B44W-qCJh+SWnK#mmRb$E0?Cmtb%ICqc0=N2Y5fH%HR@BAmbze;*h~Bph$)@x^K0 zxte_|v#iW>(l|o5rrOyluVw)onTr2t#JBN-Oosvo#XAoa{iLO(#b?s=a`Fvgho(Y0 z7f(U%`v|>ihr{IArEi?#dB&P1R^LBG4<0%HpyPbn_da!X!=R%@1&Ni<1xwr2R`O6g zV>PekRRr11&dfBT0|>nkE^GWYLUVc=FSQQyU#I{gDoEb zmupmXlod#JtdyeX-)OG}*6WTgPq*76y67g@2`dcu$`-h18Gf2{XSPDKHB2Ed(7mQC>RXV)*jOVqQb&hH=9!R8+nUHs*#Sjq&N` zQ(_=u4Qri_oAeHv-z8b>IkMQMODRGkkuI~nFI_`Q3r=oh+(BY^_g*}A!#Jsn#QNEs zDQ$a~!=g>Iph5AawYDUS(iEy$QdjX@-ghzeHB|W3pbe{7@Sj7}tA9Tbeh4yIN&G&E zblYP~7Y2N!ZM*R3BofET+hq8U+&wa(;GkgERTTJ%xLu_okAqoP$cex2E)Ajam0eFF zStz93`Te7$zduJIqk74;qLXHkMBXq`W@CPS`e0)%b02EdtATjz%Uo;c&Rv65_T9UW z$_D4+FhPg|$Dlw*<&{-^IK{y%wtU38U`hD=YW(bG{OkcM{Uq#74aJVPWNLi`Iuc+) zi(bNddn#h|97=2&I)*q%KN-zXUp?L36>(csN_s0H6QHKIsZPObJI}c}$L@U2E*7)) z=W2+hQpGTWt#k4ZW@=@b&3q-EXSd3gIq z;(ERGiIGvG%6-6%?9@k7X#5i(%d(o0m6NM~F;GWCPoDtcw-HVsY+39ukWoH)@-Byb zP=d#-LjAnePykL52WKUd^mNzQaNUKFj`kRMS`49>J0l}glVWpq00A7HUOp;@hK5B| zFvzKm9kbsL$LS;0OPA7|mKKaUEGLP-?s9SK2j`KG)G)$5ic?l%%KGpLbeTf#!*gTE ze08Bm!|b8>!A@>E*@j2Kd(yd;&RIVx7M)G~G1DjW2&WLGf((lubA3c!*<`oy;{{TV zWRz8JK8AW*QSUvDs*q7e>#U}v6j?(Z?bD>~FyUI0Tdb#gHB+62h2?9H{hIL5&=k&CwT`ai-8VGi&3O9lol+1z)vZG;_<6#ocBhK>AaUx{{a;^xh|q(pfjd2Z-R}b5hl8i$es4|VYYn#dbAlf8y@>%XgZmN>|?%Eniv-C*VarF zU+ku$9K3aTWtCNNY!=Qv-YfHTrOlxTM?^l7V&K)i#}>^t{o_?2|5E0_j~_n{&kVsb zNf2kgn;l{boE>d?6xPQbLQW{Nh^=C$!=w+!aE7MltvRWqFMBr2D5H{3!BZieEJ-Tm z-^+F2hV@3DR}_UIg12T;@G#smSXe-VDLITrgq8 zy_HXplatd@Q%64R+T!CuAB|iKz4w@s?c?T7X%ur3UE(tz75QR%lt2|o`n+USI5>T2 zUKqUG?$h3?rMF4ndwUtGc=qk{`(WVDo~n_3M#7DPfDfl!eUsE=4GiK=c{Ax0&fvzb z@Y-&L$Rs-rQ7arA!Yp({5(BC18D=rvmmMD+TDz@I48a$dj=t_)YimKJb#g-z?9Brp zHSXDvO0CNA{(|NU64k1&uBSSusQ9qbhxNQ3$Aw4KPAfkGOA@+P_CI8Ya^4sN#7z_w z^%yAd;bCv(fx2@uYF*I!AVEp(1*OxH}uHcz}%0z^5UHrE>-9JVgFRP1lB=-VBkLtZS4c-`JH3*M-9V|?snsrEsSp3E*j7Z(o z>oea+RJ0bqlg$#RSkEt&mjp`DA!Td-Pv5upy}?(RF0~fScgC(bPB=5?L|Q@n@RC^g zd`Hgb#otod($)SNObdt>zyh4}Ppkge4=m3Hk-szN}WB!1( z>!-Jy|3|T3c8mDIMJ@4#FQ2@dB6YxNkq59l-t5{946>9vTw>oJ>85(&LLyRFRly)V zW?!1RD&Bx}iH>KJQbWqvU$vJ8&l5!=8{7NzKwZ_BJ*!9z3HzvqECW6(+_u@>e(UD> zS(bKMX695t$LtnaSy_I|O1YxNzCfSY)z~0gUS5yJq2afRs?B~u6la+Xb?(gzskUaW zXgrd!N2Drfr%z2yX*fbI$2=N>?a}q%LDl!>x{t%cQqQPy-7t-r8E&r=;apWG?6mlj zxOD(H2cZ8bB7D(T1J{xa*Rp(D8<;aWcFgDYQ)g~%T#BTIs~v52p21t9LAEir-j%o; z@Z^a>p%`XM9cCFSh3ZzrPTY<0uS)rd)V3ER9DL)3AhG&XOrm*MfTbAi&4G+ z(Yq6k&pO<=@jQGnf^+)RJR=tmj~YmZ?0F~^M~>kjkBZ7lV+5iYJL}!zxtKqd#D5|6 z9Ib=KGeyk=ZaObzZH1z^i8LAphNNeaCtC7M;vou2gzr2dD(WQcvf1oW_NA(> zs;X)R^BJd~en4fOQ7vow6T3)sre5-sMRu_e!zmo{{&4kb;}xkjshvcS1p*ZZpd&mF zVm9pJX3{ecPfstV`&Q?Rj!|M?PLaEK;VO!ann|1Z!K9)G3xAZNg2B1m4*O)}2{7e+ zC#sMWUc=@!R*pRvlV;zgr;9W~9qgShaK$tsYrPEAY_%{}^Etf!PPO0O&aPpu^qQQU zH&|rjk%f+hF{9cg|3PNf-bOU~GPQ_wPDTg8U?YVDwkAm4)BtQCfSSLL>hp5HL}BuM z8utJlgxmzNI)OB0oDl36(El$vRRSZzwVk=#9oSBPje<<>bN?nO#F2C%N zCcapd!ji(bmZa+8dBb|0n(bBMb;#ZOH~5S*ul!F@uZ zl5nS{NMZaE-&$5(t8LgA?X3oqHL|RIaB2j5L3o;ASj^SjR{d;^5JxTi zxJ?yyW%ZfC!^DJ)Xh_-L8fOpQA!B(M7#PT&n317~J)S7cLGHX<+}t+>`PLC~oc?y?~9()y*x}A(MDuZ#*zqt!Tjb z+8Z;d{{x8f8c((){O2XUmx6V>Tmb+`|K^<*Bc{`+pg{Gjf$6Mn~V zN1JQq*?ae02fxm4=O0*>;mQq69xl;G!QmUFA&%7f`<+0 zcO>RB`s@2;TN&{9|7x8w?yV;c9&&24m68%F*hC^3<5Rx92CLu;JkMQQ&~-8WuKOgC z;A@8ehpy`%YvFghCi3R(YaGxPhUG*er5#yaD5HPnieSN7{7Z1vs*V^>1=?eO{LAD& z_Hv}L^+Y|zHiHPFI2dM(mMtg4luzS$8vU#t<-t)pcrQ$X#2Z#H2+#-@%M{oU%JE0sj7$AM{p}Za3nt%DDjxoGMz4 z!&!%kUM&o&9WOeb8)tZc=CM{E#Q^RPyj`(V*0juREcgWf2qWLjyQXu4h|rL5ng94t z;5M;-q$w0NAIo7Pe?A+Bm&Kg&Wk`iI$%J7WiS$DLeQEBE#QiEnYXv2o?4xUi6Q_VJ z7)Ja#&z`eT%phLnn@qoVpFRn+q=jA>1&ZhyLK9}x|1gqR?g`^cR@aiNfnBVAe3Ow; zM#qTB2F+HcC|+tkRdx0LjPF4ghzI@+Qmq??RNEWU`a)xbHjz`-!SOIycyv#nY(1I)17_kKu)Hq~QPnclDjES| z^<#I$K}mxMfDK!M7v-jGpC-FZ)v}cw5<{+i{^7G-+g6En^rxcu&$kLUp@$RBZ2)#T z4T}*F6+1fthM(H5NTzD%UP6qd22|Loj<|XV@rwH}X4VK`L;=VxM>m&Oh+4Dr}hrC-4%IhQk`)8avn8Zc851k#8u$UGBwh^mf1OdV15yY^okKYQUtD@#gT~kq|zjQDy1uz*Z|@{-M~% zf$TE>=vuqRgK*EOpS#g?(PjW5Bg(YYe5B3q1OBicZArv#0rF?yyLbt=OiRJlbVxk7 zWb(W3GkQBR*yFAJ?rTRaN(N;Oks6l-6m^O5@KHV^IhG&mNVg~dmzMS=gRBlj;n{{0 zY(Ezkl93|pXx|i?nx2yKxI!1qT^<-OpOO8SG$SD-=GwhmVyLcZzo=+?cg|pvTYVfn zYljTp#a5RDX$=@#Nh<@BHQ=}?Jn8<+$4k|4Wvz^*#giMj%+1G=!}~IH%4tAJeB-ry zgBCEA(FE-(8LNXL1}XE1?_`%DvX@d)_*!JoocY$%vs*@^z`)EW2jGU@#uGo}*M3c) zWfM6$zeU&oY46L!n!M9!qgI^Ss;yR36qt6v$|fSK3Z!ZUBdd_G1OgUim&FATB!C-K z1*uV>!XPTEKoThg6j@XRw2H_QqEHq^1QK=$`*P2Rww-DF%*=hB`{(uX4?(i<<@deI zIp;m^H-J65lMH8VJM+W;HrFWAjCTCAIrk0uUTIBdH<(mpbqRhBQJlSdN{;1X_sSYC zg0GC_+TZrQ-(}tEm&v(4EqoUpJ+pWJlHenez)9%K{zC`-9{fb8*}nb$c1@QfNhU#7 zb?GJo6Yb`dwjbK0ywqKv)&t?AqJV`p;MM}ohyUJON69Nkeg0d8)JYRT-ew7;1pq=l z);wTw_H#G8fy#wJ2PgK^#c?zb0Vfgh2%kT#f9}n4j=Bf#b>5YF;Nr~igCtI%F^Tki zt1b9xCF~yGNG6kepEPkR+uNyB`}%8%?N04BK24G9RG0(ZJ?*}esh-t`@jH?PmX22E z&qt|y>m1fZeYll5kte4R(B!WY=&WYsh94lQ{{c_?%gFwrra1P)3X;xetJZe*EGLmR zK3aLTY-iY_u&o2vwvxh>oIYNHr}JGomsM8(NMLSZO&J;4Zo~Rm9PD#qPyB_s=Pnq6 zpS8~2)1D80%TeBMfXiG0rU}iIR6SW zj~-3v<(Mn{YcuGN-GhsPgTyLkQ4mGmV+o7r7bVMw|64 z=xXRp;F-o9nz{#Xn_ks*KbQn;5734t#v^uJh@yssl+3ls9}qg|f$xl*pRbV%VJyu4 zwhNmIxcCf-mNmJTJUbo@y<0s*(8LW1V2E`T7*Tgz=~ODznCY+-C93;pin1vGxY0g| zv-WFH2p6I6$Az-MlpYaj1b-8t;61l`#r588`JOu~B;ejmIKbhGSp)cwIs~i2tk}3DNAy)WV$DAz5Yp zdIOmK)}Z2j({1aw>;w$|r1gTRgfu8t+4ctd!Ft<{1z}AJiW@!Z{jKja+TeV?T2m-K^gQb@Z-s3W{6zd?Km5DSwruq@tFV6~ywq?5kFZx`zV&Tbyz>=;{`! zr7y9!h6R;XP*9JhI=Xpc0&;xXa7OaO}T`sDi5klNm& zIq`UU`)&|X#d{NTzm0H?#;?2neEC;*n>U^>zu|i6YD~G4`|zoc0U)shS^^DWPMZoV z9?yfA{d$hNg0Rh7FTi{gch~tFBMlGn^gUjq_E_g9#+1 z7Sa*kcV!Y3nr8>Z6Y>;z|72!lOy4^7z1rtMw`;fc7bWjaHeAzm>h~trJW;dbK<922 z;q>+QePKDpDJkFT>+7>pc%BVXJdz7Bhg*!kot1(CQ%{_2gC-OxQM39`okaHcLco}X zOUO!r?ctE#GLorN?7+s)+nRUaLpEs9{;47#PCf138h;{??#L-R`rX025bl1V#A8$~CE| z7RBXpj+@$-#vLeV;-jT&Z-udpDh1n}FTyvUk2^0lEzJYYP8IrC$k%`xgt!|K7}`s7 zS2-Np4#5GR7rsvs(C<}RdeKs?JxfJ?XpXM=?U#^Qvb3Ld zfJcu>NKm3oV3XhQK)-A(zb+Fup%DwySTDZPym7ACJC5(+=f4KO`q>{(1gKkwiz`l# zD*0iRKy_89X_hrxE1#C+?7;Jg317Mjp#Jagew5gFYfQ^9nkqBne$!L2vL|_&wozmHPBl5 z8qT^X&f_m>7y=}11Qvhl0zM_W>inX$g9mCO~Q#&#A7AKdQ zp6>bJ;m5p@B)sY}^3bjPgUvS}q(OyQ|LV~4_vj@N{a36vHiuzrjSKFM-hA)I_`5tS zwjbX*Dec0qb@Y=46||#8!b2p|HzI?u0L!Y+Td=-%lR5Nc=KfasSheJOPoYQK zXOWod$K%3_n1SL3OKUrZm||>XgQIY!_HK z9*K6Hi?mF(`~p&#)yXx-w2vy}IeH!=A9))ITgv1`>AGFFih(@*3s6@v^3R@i6bq|4 zJkR&G4~23zI5=32;wi{x@AWL`YbGkZRE{wXz*5;X{t%v}6e7r4cHWWrWrgpZt8*+5 zx5mMmjkJ>VRtCJ-ZCRJLW~$|a8#vEEzaz?bVn#Kn?Zl$UZO`r9-$q{9inj!_@yqaT zz3HKKr>$;2>JaA~o68eHnPtos??WDhf*UsIWHfww^fw}BRm5aWX4)-_c0Ow^f?8OiciB6#{FjzU(Pg%}sCB6x6TVZ?8&(lb+>mJAh>q z<{4Sovpm7)hNPk!({d|?&s4$o>Ba(|P?e5(B>I-v=eN(oV$khzt-P?cv=pT;gw7$& zp0}EMLDy^~ulLmioB?u?B?nT)1N>oyXd-y*RfGydiga(urUm`PU}6?Bj#1`fS=jY% zZbTRLh4e}`5g^y8S)e~-VUljWlFkMjjBi=Kd9fS1iEZodmV^*Q&e!f29_%Q~gC!t+ z5{m%dE#{r^IQGIfQ8#cXzH(U9onC%kQfaEhw|RwcH0G)^p-)%DmkR+6!xbc|i*{s-fdXs6WggX|91!epJ3t zU4+V4fJI1eUd4fF;ov7|I4x!SQJCC?v3r z4Nk_V^ZQ?LmaJKes#hFw1zLjMv8JVj`7%nEc)jEKWjUhXFpBrFH9IHiPqlZ|W*66_ zXN|*s>)FPPo9=aKHw{N+h%Zx1uG0Sz2`MrGqYz1Az44FN2%P~)Gm2%JaZST7Y$5cu zhg>2PrM5-yI7n#=O6?NuU-tD_B8|Y)gE=i0{1ikdmNrD}7YM4~7w*prD-15g$nDx? z=zjm?lUIc|_tTXnp&r`9ni%QLf-*Gf!fLM~&dkks$SCxZ;5%jQoxM-$(AGufLkgbk zHOgsL+^}JjgX4xf=AGl${eHr4jr)kWCtwrFgnG)L>EBEL>?3#L0hA!9%elj0e*zBi zo_S`_+p>uMKu=uX;kX?7Og6zZd4bO;Sh`N<8iuf~pb(h5k&!~&(6m)NC5C5iyuKl& z-p7$?k)K~=*WHqQw{WzJ1L7Jt$fkUOc;87}WEFbRZp@?;{7g~{Q>wYzgGZ2=H9Rdp zV^~%P1_rL-78e&MFr$J&C!rq7KtG`+y1gk{=-K87t8v0zeDl@DiKf;WD{Qf7xVHV& zFc_9B=s%WL-X1zGrpta-i)2Np%mBp2Kp)}I9N3xIn6p0uEvCoR84}67DfKg-@PUmv zrz^aArY23nYVTnUMR#ODN@mdXYiCi5`#UlOK+VwL;6*vC7ioAAk{XU={Pi|N7REPI z=gnIX@BB1;@$IkMh6dFM?55Ri?Pr^=8F=xdW!Ejw2Kd$Pw^P69`vxWC@1)R~J4UCF~mEoUrpBbl*p;j^LAtDa4pC@al7oS4SFlhMu}xI*+gR`rQ>@I z?Xkpkmm#?pW^D-_>*kR-Wy@Euw%LLSFbu%EJGO-A$;b-YTEBVi)b3G~)7JP!k|Kv! zm7W`2)*HtuPSzp`E+qK?WTH{6G$tt7hjI=DVMkw7X{MH3C_j#mhvgmUW=Tjl2`a4- znq%cUyqh>s?YPVVKl|1zUxzLwtZ6mbyC~P_w#!_Gy?v%(=z7R|iNy}1U--|~5K6D5 z1M{p%VOdT@kJ7f(jD)^wj^x_+)nBJ&g1q`S(MNh~R~V6&+pJhHvYz7{PRhN1mCL!V zwF&1miC*d6vS4O#BI5z=^EtMGv9zBf^ZH}re|(Qyhx=PE9Yi2M1X%@9&qKs;YQZ8U zdHK}x3z|TmB-aw^mplBG4GhhP@4mFsChY1|ps2!Dhqz{M0a_5d9vd(T2XoM*6H*Cq zh*W!fWq7$1W9#_DV07p&86jBLPzyv`3>8Qh5{m$4mL&0i(^$NF`|J{s>w#OZwt`Ej z(F&|RuyD~rPngG?TetQmX6yfq;k!gyGkcJ2h|E22!Tie!37&aO2ef49v zfKq9APwC*+ps-MB{8`)}Pa)U`l|-M5a?+CmH9$pnaE)iBAk^-PJo_A?;|$zykLq$q z3N8`J&bv8pytryBRuH=As_jG@#v%#|nUFW%VeyRv7VE|$fpN=XNK!s%z8c{)v6A})FXvm5rkh<&+d-b!5_Pn{hCwJ7uy<{~#77!#Nq-9G zky_`=5A&yCBocWg#BfsMz^4SUx36K*7N8^#pOyC4w|#kvDDOY04Qj4lN=*LoV>KdJ zgoVwk7{N9`ERNXCYT(#rL4%#_g$W^$9H(TCwasJP_T7$b>`DFm=;){*%_QLq$R~h6 zrB}QNQyLVDA)32LtXcrB(O!BsZDaxIcC5gv$jY_pAJO`#wB1+hKNPOVb%fyQGZ1SV z)YSIQ1x#>Ui}h8^GgPRAC>A!IYrH-_`|-JRk+nFj6R)4BdIXbv?#r&)@UGXGc-&iU zHAPibAF2sH#=0TrCo56^CL3PJ1ll18x$(^>uv9yZdhlxsJ=Y})wn%{{(tf}?X5uaRj`8F=LJyB`)WT&K zydBkgf|j$tWRjzgnfa`wzqNe?NOPjfCnUKP%rLT4O@dE}dtNi@>Iv-S;Wl#T&?+Kd z-g zSln+dGTgU_BnbGG-#72I9TJs8$%mfabc+@~;(ri1zkxt%{vUDs{}I5Kd2_(YCFG+` zc(wR&l8=Q;$doGa?+f_1?ptXDNj(B8`fs|s|M(jJ7i!)Ay%+oculSx+|Bw-N6B#7o zDrsqSi1@JDc5oE#!R1lIS~{Z)if}@~0olkS&4pvHEz7HD;9f{!68rv>BIJL$zDq)u zXPLPs#bzhd;PKRe7xM7xjMtJD5$F-`v^NS>QG*>UIq-J}&Sk zn#mdFRIA{waojtM@jON;0ts8yW(Tq8mw3Pa1_mAln61#~4ReoUQcD{%DR5%Vk~O+- z;x9N(Z%t20v9Gh?{QR=jh%GLh|BYt>fSIV(`aAF_2o3plv!m`bDs}hand48y`{GHZ zeow5}_IE6>@GI@`kt5i2?nCIJ(4gC~OW@MLCl;-yvMH9}LKDr|o{xWi%Bpg)1j3zb zq_z@@L#&DPdRe&3vw>3sZ--O@1KB?5;_52$37xge<^MFqi>cC*%zV-7&ru@%XbzCi zfiaN@+%K7UBmg>QNR6TY-R7664DGa!2VmG-SJe6TCdzkK3XmQ*l%Mnw;ZIW21kt58 zIJSb$3yQ(!qmD=m#?Pq8;XWvi%NH)%&QQ= z6GBOUV@Zc;#aYNpGdkar)3K#wZPT9>o^p>}a=T$s0%rD-oXJ%U+xy$^6Z-kDDh(9L zgKii&c2^i-19fT?f846H3r8bk6rE&C;IU&%Xj%B!ztz8HI8$jSW%oa`N{!#Ih zozwb3q`+qQun#e?zV8-BNP_zAbb?O*nnGLQy-ar?3?!?EnBA{;zh=^%(cjCd(3m%a zMPTUfLZiH<`-NOwz%^VYMaAK!$EEyp0xLowFSz?{+%UXm34sBD#iL@gZ(m#ET_E}m ze;v+P9!etpZ5g2jAh6gJ2_9qlX60{Z$12H3XQl#)#-wn)@jssrecd642D=7DVw3

<<>|ip(hTDIHEyjX#W+*)G?ls+g9Xw!Qwb>2G(i{|NRR$J=n(vBmviR< zPiU5)n=(;POnmpU*WYiXJKLn+yY}b$n0PI(_@JZx*YTx=P;`^NDRg^Oi61j`{hy%$ z_U~FJu*KB&!uh19uN-G5;`(|5Tu)6jj9zW)n$F{l`djahC$)YCa){_Bpv39#v9LG5 zX@=NDjzY+5V{0O#)+s?mccFHsXnKkFB{>+AMM>%HL9sW1F-Wod{q#c2NZ7sBu&?c7 z+||TZ44eR>xCBbQbaJJnq=)^m4vJZ&nZaWnvQGkDaIb?8)kJNLJ3Wi23N&Jsa!`du zMqZX9pcx1}rKHswk4+QMOqZiz)U~CgXloO)FLtfi4I@Z$l1oNEGVD)Z!t@EyGIL!8 zsXs1#WrThMcRJMTAXJ9t>?mEp2huoCas8f!Nq1;5Kq?fOG7mPpS#b`d@e zH1v1+#hxM6P(A+al#_uA4@Tdby}#U3DG!$8&_lT~CxTMbwWrE>oTp`F$rVXtbnt`% zPW)k*pla)SQriUNHPP@1&4$6`WPHV;;gH7XqyDbyRi92_`&TAlY#{~#S(y*IaX$nd zZA{jj2t0n=lP{zN^-quHdGHm#rV6*V1a?Yee8F^bS&wzgj4pFHI(qnB(yTo&E%k{v zzmt34L`{o4@21#|dVAERMOj#8vu zn1oN`qsmG{R-S(q9gu*O7Z$jwjbLBX&36lQaD*z-MbLu(i+Ur_>uVP$9MCxcTxCub zD_WO4;kS_VV;N>-Gy|U56HpH;GnST?nhKyl+p2Y*E)5+{?z|2kwj!9ml60iw1*jk({X<}P$8tZ zW9R4w#m###3T1BYYaX?x4U{i`*uBoL&O}>5NAC8sm#;8+vT(_g+GmVygld@>zQWnr zvwOGO%nI!j6D4F2He8@wY@3`Ny*>xIV7eQ&n2JSbuOr~^<9FCbT zFa}P!bk@VJ_4vu;(Yo-Gf^7-%n>O7V%J0)l-Sc>(0<+3v<;qojVOQNt!}9cV+|V;@ zqHT^|RM&E?*7G$XGJ7LK(HhCdu*T+w@Fo zs%{8%a^?!>n&z~uuO6efkgt8}<@1+S(xFW?8S!Cn_l3WNUSBMrt0(h{qZLc<7FD!b zvSyA5i>L~=KCk=GH9>r`Wx8rtOk%NH(a7bL2bS`zT^_ET-tYfwT$pfPaa?$ExGb?p zSHAn5s?mX*-Q=A3w;b$FB8A!MFh_2bjNkBhz?k^*Ug&t$E?Y(UX7f?0v97Kz(cUDx zSMge8j{Cdz`1vHMbEA>5hu$_>FvqI`GO4ui0<0{v3OQ2OPg8hYV7SQZxU+E<`WO7! zw;ovWVy08FzG_C0FRk*(O`7_^Dx)l!)|uALm1ZXhQDob?S(V(ifee<-FlIx3t&e=2 z$-gk)F8@$eU#(r1iv%<(kC5iyfM69o2Mc)|2lxbdX^wPxJ>k zH`)wXO1Ic;XxG=|GvbR2sMFEAVluNY_X&psszSZJjRfGCNIy2@QjYiy44d03Tcj$p z6uFNC{HY(xRbpmosi_t%4&-mg`a}OV;MHV9bHBK!n#r9FxOH2|Q~t>&Q-Yn>Rr_V8 z!<6qMq2WZ|WWQY>{JBA#U1Jw?E_0;K{LrkzD*yf+t=i?M-7zs_<5=q_O_H?Z%SF*e zZ1S)MT{SEFvNB(bDtjmX{Hl#wb?$gHiET;iD@kcIzLWEK?+9m0xa*;&n?nk8j#l&Q z%tpnmAez*d(-Blhrc_C0vNC_E&ChdSkvUhEmoxK2ld1{NNHe|F`QR-oePcD(E~U0Q zwyUb3<+7`@b82dr;j+i0x$-gE6MEjCIs|ryX1a*8te$lZsgg9kT`V`Qlw6tr)Rw58 z*{9<=JED^vu4F|$Wh$I-Ywf$nS4Ri_TbW4qpAdB;>UdptDE!> eD5s3i&f7Y_sPNp=Ga`JKMA>EfEoaBRlm7>4<|s!1 diff --git a/doc/salome/gui/GUI/pics/pref37.png b/doc/salome/gui/GUI/pics/pref37.png deleted file mode 100755 index 1d4d082fe64b111e60131ed69b037483dc65b027..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35733 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 diff --git a/doc/salome/gui/GUI/pics/pref38.png b/doc/salome/gui/GUI/pics/pref38.png deleted file mode 100755 index 5c8d31ce358d299302468a931addc424d9197182..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34467 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 diff --git a/doc/salome/gui/GUI/pics/pref39.png b/doc/salome/gui/GUI/pics/pref39.png deleted file mode 100755 index 878a526071290bc31b9c28b9eaacc5de32de6ba9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22668 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

"; -} - -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 deleted file mode 100755 index e5729238b..000000000 --- a/doc/salome/gui/GUI/whxdata/whftdata0.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whxdata/whfts.xml b/doc/salome/gui/GUI/whxdata/whfts.xml deleted file mode 100755 index 52af9b44f..000000000 --- a/doc/salome/gui/GUI/whxdata/whfts.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/doc/salome/gui/GUI/whxdata/whfwdata0.xml b/doc/salome/gui/GUI/whxdata/whfwdata0.xml deleted file mode 100755 index a6ea6fb6d..000000000 --- a/doc/salome/gui/GUI/whxdata/whfwdata0.xml +++ /dev/null @@ -1,1326 +0,0 @@ - - - 14, - 14, - 6,14,2,24,16, - 24, - 24, - 5,14,24,15, - 14,24, - 24, - 14, - 14, - 24, - 24, - 5,14,24,15, - 24, - 14, - 14, - 24, - 6,10,2,24, - 6,14,2,15,16, - 14, - 24, - 10,2,24,18, - 14, - 14, - 24, - 14, - 24, - 14, - 14, - 14, - 14, - 3,6,14,18, - 14, - 8,14, - 23,24, - 24, - 5, - 24, - 3,1,23,24,16,18,21, - 10,26, - 14, - 14,24,15,16, - 14, - 3, - 4, - 24, - 5,6,24,16,17, - 5,16,17, - 24, - 5, - 0,25,19, - 3, - 14,15,16,25,18,19, - 5,14, - 3,14,2,24,15,16,21, - 24, - 24, - 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, - 17, - 11,18, - 19, - 24, - 14, - 11, - 14, - 24, - 14, - 3,17, - 14, - 3,4,6,8,14,11,12,24,15,16,17,26, - 14, - 26, - 0,24, - 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, - 14, - 25, - 3,0,10, - 6,16,18, - 14, - 24, - 17,18, - 14, - 24, - 13,24,21, - 10, - 21, - 8,19, - 14,18, - 23,18, - 0,14,23,13,24,15,16,17,26, - 7, - 3,5,7,14,10, - 24, - 24, - 0,14, - 14, - 14, - 18, - 18, - 14, - 14,23, - 24,18, - 23,24,21, - 3,10,2,17, - 14, - 3, - 3,14,11,16,25, - 3,0,14,15, - 14, - 6,24, - 14, - 18,22, - 3, - 10, - 24, - 14,12,24, - 24, - 24, - 24, - 14,15,19, - 14, - 14,17, - 14, - 3, - 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, - 14, - 10, - 6,14,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, - 10, - 10,11, - 3,0,14, - 9,10,11, - 14,17,19,22, - 3, - 24, - 14, - 19, - 14, - 14,10, - 14, - 23, - 10, - 3,8,14,11,24,16,17, - 14, - 14, - 14, - 19, - 19, - 19, - 2,15, - 20, - 14, - 24,25, - 24, - 24, - 24, - 15, - 3,6,8,14,23,24,16,17,18,26, - 24, - 4, - 25, - 14, - 0,14,24,16,18, - 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, - 16, - 14, - 16, - 5,6,0,7,1,8,14,23,12,13,24,16,17,25,18,26,19,20,21,22, - 12, - 3, - 24, - 3,14,12,24,17,26,20, - 3, - 3,14, - 23, - 14, - 14, - 1,23,24,25,18, - 18,21,22, - 11,24, - 16, - 14, - 3,0,14,15, - 14,2,11,16,17,26, - 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, - 14,18, - 3,10, - 10, - 3,12, - 14,10, - 3, - 14, - 14, - 14, - 14,10, - 11, - 14, - 0,14, - 9,11,13,16,18, - 16, - 6,14,10,15,16,17,18, - 3,15, - 10,11, - 0, - 3,4,5,0,8,14,13,15,16,26,19,20,21,22, - 15, - 0,14,24,20, - 14,16,21, - 14, - 5,14,23,24, - 0,14, - 11, - 18, - 24, - 7,14,16,17, - 14, - 3,5,2,15, - 24,17,25, - 16, - 14,23,13,24,15,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, - 15, - 24, - 6,0,8,14,12,24,15,17,18,26,21,22, - 24, - 18, - 10,25,18,19, - 3, - 24, - 25, - 14, - 8,22, - 3,5,0,9,14,10,2,11,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, - 3,5,7,15,16,21,22, - 3,10,20, - 10, - 17, - 10,2,24, - 7,14,21, - 14, - 14, - 3, - 3,4,14,19, - 14,15,19, - 10,24, - 19, - 6,9,14,2,16,17, - 9,16,21,22, - 12, - 14,18, - 14, - 3, - 3,10, - 24, - 23, - 0,1,8,14,23,13,24,16,17,25,18,26,19,22, - 14, - 16, - 3,14,16,17, - 3,4,5,9,14,13,24,15,16,17,21, - 23, - 10, - 14, - 6,24, - 14,18, - 14,15,17,18,26,19, - 14,24,15, - 14, - 14,15, - 6,1,14,23,12,24,15,16,17,18,20,21,22, - 24, - 3, - 3,14, - 14, - 4,24,22, - 7,14, - 6,2,16,17, - 5,0,9,14,16, - 14, - 3,11, - 24, - 14,24,19, - 14, - 22, - 8,12, - 14, - 14, - 14, - 16, - 3, - 14, - 12,16, - 0, - 14, - 2, - 11,24, - 14,2,15,16,17, - 3,10, - 3, - 3, - 23, - 7,8,14,2,15, - 24, - 24, - 26, - 10, - 14, - 24,25,18,19, - 10, - 10, - 10,23,24, - 15, - 6, - 18,20, - 3, - 3,14,24,18,26, - 3, - 3, - 14, - 3,10, - 8,14,15,17, - 14, - 23, - 18,21, - 14, - 14, - 14, - 14, - 3,6,9,14,10,2,15, - 3,14, - 10, - 0,14, - 3,14,2,11,24,16, - 22, - 3,16, - 10,20, - 14, - 10, - 3, - 15, - 14,24, - 6,14,10,16,17,19, - 24, - 2,15, - 3, - 10,11, - 3,14,11,13,17,26,19, - 14, - 12, - 3, - 10, - 0, - 3, - 4, - 10,23, - 3, - 25, - 17,26, - 18, - 14, - 10, - 14,15, - 23,24,18, - 3,11, - 14,16, - 19, - 14, - 14, - 24, - 4,14,24, - 8,14,10,23,24,25, - 14, - 1,14, - 5,0,8,14,11,13,24,15,16,17,18,26,19, - 23, - 14,19,20, - 14, - 3, - 14,12,24, - 10, - 0,14,24,18,21, - 18, - 14, - 3,0, - 14,10,2, - 24, - 12, - 14,17,21, - 3,0,8,9,14,12,13,15,16,17,18,26,19,20,22, - 23,24,25,18, - 19, - 4,10,13,18, - 24, - 24, - 14,24, - 2, - 10,24, - 10, - 24, - 0, - 24,20, - 0,14,10,11,16,17, - 14, - 16, - 10, - 3,4,7,9,16,19, - 3, - 14, - 14,15, - 23, - 2,24, - 14, - 9,14,23,16,18, - 0,14,11,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, - 20, - 14,12, - 6,11,18, - 24, - 0,2, - 14, - 0,24, - 25, - 14, - 23,24,25, - 3,5,0,14,2,11,15,17,18,26, - 14,15, - 24, - 3,12,20, - 14,10,2,15, - 14,15, - 17, - 11,12,21, - 18, - 14,13,17,18, - 14, - 14, - 10, - 23,24, - 22, - 3,4,14,10,12,13,15,18,20,21, - 14, - 14,23,24,18, - 10, - 24,16,18,21, - 14,10, - 14,23,21, - 14, - 22, - 14,26, - 6,23,24,18, - 3, - 12, - 3,14, - 14, - 4,20, - 14, - 14,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, - 10, - 14, - 10,24, - 12, - 3,14, - 3,19, - 14, - 0,14,10,2,11,24,16,26, - 14, - 24, - 2, - 14, - 14,12,24,20, - 3, - 0,10,24, - 1,24, - 3, - 3, - 3, - 23,21, - 16,17, - 3,8,14,12,24,17,20,22, - 9, - 10,19, - 14, - 3,6,12,24,19, - 14,24, - 14,19, - 14, - 14,15, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14,15, - 14, - 14, - 14, - 14, - 14, - 5, - 3, - 14, - 23, - 3,10,2,11, - 3,10,2,19, - 14, - 2, - 3,0,10,2,16,19, - 23, - 3,14, - 4, - 10, - 21, - 15, - 2,16, - 24,22, - 14,10,2,11, - 17, - 14,16, - 18,21, - 18, - 14, - 8,10,2, - 24, - 14, - 4, - 14,18, - 15, - 14, - 14,11,15, - 14,24, - 24, - 15, - 15, - 8,12, - 19, - 0, - 15, - 23,24, - 3, - 14, - 24, - 18,22, - 24, - 25, - 4,0,14,13,15,26,19,22, - 5, - 0,17, - 14, - 17, - 14,10, - 14,23,24,25,18,20, - 18, - 24, - 24, - 3,23,24, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14,2, - 14, - 14, - 14, - 14, - 14, - 3,6,14,12,24,16,17,19,21, - 14, - 24, - 24, - 4,1,14,23,24,15,18, - 18, - 3,10,12, - 4,14, - 8,14,12,24,15,18,20,22, - 14, - 18, - 3,0,2,13,24,15,16,18,26,21, - 24, - 3,24,15,16,18,20,21, - 0,19, - 8,24, - 15, - 24,18, - 3,14, - 14,19,20, - 23,24, - 17, - 16, - 14,24,25,20, - 15, - 3,17,22, - 4, - 3, - 24, - 5,0,7,8,14,10,13,24,16,17,18,19,22, - 14, - 5,14,10,23, - 14, - 14, - 10,18, - 10,2,16, - 14, - 14, - 24, - 24, - 4,0,14,18, - 3, - 14,18, - 18, - 10, - 3, - 14, - 20, - 24, - 24, - 5, - 24, - 6,9,14,24,16,17, - 0,2,15, - 14, - 10, - 24, - 14, - 3,5,0,7,8,2,23,12,13,24,16,17,25,18,26,19,21,22, - 16, - 3,10,11,23,24,16, - 8,14,2,15, - 14, - 24, - 5, - 24, - 14, - 16, - 16, - 3,0,1,14,23,24,15, - 3,10,11,23, - 10, - 3,0,8, - 0,14,10, - 3,4,7,1,14,2,11,23,24,15,16,17,18,26,19, - 14, - 14, - 15, - 15, - 15, - 24, - 14,24, - 24, - 23,24,16, - 6, - 24, - 18, - 14, - 14, - 14, - 6,9,10,2,16,19, - 17,18, - 17, - 24, - 3, - 3,10,11, - 14,24,15, - 3,5,0,8,14,17,19,21,22, - 14, - 7, - 3, - 14,12, - 4,12,24, - 4, - 6,14,12,25,18, - 0,14,23,15,16,17,21, - 24, - 24, - 14, - 14, - 4,18, - 14, - 3,5,8,9,14,10,17,18,26,19, - 8,14,15,26,19, - 14, - 23,19, - 6, - 14,15, - 14, - 3, - 14, - 26, - 24, - 9, - 16, - 24, - 14,24, - 14,11,23,24,15,18,26,22, - 14,23,24, - 14,10,11,25, - 3,9,10, - 15, - 3,5,6,0,7,2,23,13,24,16,17,18,26,21, - 3, - 14, - 5,6,2,18, - 14, - 14, - 14, - 14, - 3, - 14, - 10, - 14,13,26, - 3, - 14, - 14, - 14, - 14, - 14, - 14, - 3,6,0,7,14,2,12,13,24,15,16,17,25,18,26,19, - 24, - 20, - 24, - 6,0,9,14,10,11,12,13,24,15,17,19,20, - 14, - 0, - 7,9,23,24,17, - 14,10,24, - 11, - 7,8,14,13,24,15,16,17,18,21, - 14,10,11, - 14, - 23,24, - 3, - 23,24, - 23,24, - 0, - 11, - 14, - 14, - 4,0, - 0,14,24,17, - 10,23,25, - 23, - 14,2, - 24,16, - 14, - 14,2,11,16, - 15, - 14,15,19, - 14,20, - 12,17,20, - 3, - 14,19, - 3,14,24,25,18,19, - 24, - 6,14,16, - 10,17, - 11, - 14, - 7,16, - 14, - 24, - 14,24, - 3, - 24, - 14,10,11,23,24, - 3,9,10, - 14, - 3, - 20, - 10, - 3,10,11, - 14,24, - 14, - 14, - 14, - 14, - 8, - 22, - 3, - 24, - 6,14,2,16, - 23,24, - 3,4,6,0,9,14,10,2,11,15,16,17,19,22, - 0, - 14, - 6,2, - 5,18, - 2, - 14, - 3,14,2,23,24,18, - 12,13,16,21, - 12, - 15, - 15, - 24,16,17,18, - 16, - 3,0,14,15,25,19, - 3,0,14,16,17,25,21, - 3,10,11,24,16,17, - 2, - 10,11, - 23, - 14, - 3,14,25, - 15, - 1,23,24,25,18,26,21, - 14, - 14, - 14, - 14, - 14,24,18, - 23, - 23, - 23,24, - 5,23,24,16,18, - 24, - 25, - 14,13, - 14,11,13,17, - 24, - 14,15, - 14, - 10, - 3,11,24,16,17, - 5, - 0,14,10, - 9,14, - 14,15, - 3,0,14,10,2,11,24,22, - 3,10, - 24, - 14,10,15, - 14, - 14, - 14, - 14, - 14, - 3,0, - 14, - 15, - 3,14, - 10, - 14,24, - 24, - 14,15, - 0, - 14, - 14, - 8,10,11,24,18, - 14,2, - 3,7,14,10,2,11,24,15,25,19,20,22, - 0,17, - 3, - 9,21, - 15, - 15, - 14, - 14, - 24, - 3,6,0,14,10,2,15,16,17,18, - 14, - 14, - 14, - 14, - 14, - 14, - 10,23,24, - 10, - 14, - 14,18,21, - 0,14,17,26, - 14, - 14, - 14, - 15, - 14, - 24, - 11,24, - 3, - 24, - 0, - 24, - 0,12, - 10, - 14,10,12, - 14, - 24, - 9, - 24, - 26, - 14,24, - 8,24, - 21, - 15, - 10, - 18,26, - 14, - 4,12,24,18,21, - 10,24, - 22, - 22, - 24, - 2,15,22, - 14, - 14, - 14, - 12,20, - 14,23,18, - 14, - 12, - 10, - 17, - 16, - 3, - 5, - 14,18, - 17, - 24, - 18, - 24, - 3,9,10,11,20, - 6,11,24,18, - 24, - 14,10,13,24,17, - 3,10,15, - 14, - 18, - 24, - 0, - 14,2,24,15, - 24,26, - 24, - 3, - 14, - 18, - 10,17,18,26, - 9,10,24, - 26, - 3, - 10, - 0,24, - 6,14,12,13,24,16,17,25,18,20,21, - 10, - 10, - 3, - 14, - 24, - 24, - 14, - 3,14,15,19,22, - 25, - 14, - 15,19, - 19, - 3,14,12,15, - 2, - 3,4,5,6,0,7,9,14,10,2,11,12,13,24,15,16,17,18,26,19,20,21,22, - 14, - 19, - 15, - 26, - 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, - 10, - 3, - 6,15, - 3,0,14,15,25,19, - 8, - 6,8,14,13,17,18,19,21, - 4,14,13,17,20, - 0,14,24, - 14,16,18, - 14, - 14, - 23, - 5,6,0,1,8,14,23,13,24,17,25,18,20, - 16, - 2,23,24, - 14, - 16,21, - 3,14,24,16, - 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, - 10, - 14, - 1,23,24, - 24, - 15, - 14,2,11,15, - 14,20, - 6, - 9,14,17,19, - 14, - 8,14, - 23, - 23,24, - 14,2, - 14, - 14, - 3, - 14, - 3, - 10,11, - 6,9,14, - 2, - 14, - 14, - 14, - 3, - 6,23,24,16,17,25,18, - 14, - 14, - 24, - 24, - 18, - 24, - 3,7,14,24,15,20,21, - 3,10,11, - 10, - 10, - 10,11, - 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, - 11, - 17,18,19, - 24, - 1, - 15, - 18, - 6, - 24, - 24, - 2,15, - 3,5,14,2,13,24,16,17,26,19, - 14, - 6,9,14,16,18,26,19,22, - 0,14,17,18, - 3, - 14, - 1,14,10,24, - 14, - 3,0,14,13,17,18,19, - 14, - 14, - 14, - 25, - 3,14,10,2,13,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, - 5, - 25,18, - 14,20, - 5,16,18, - 25, - 24, - 14, - 2, - 14, - 24, - 15, - 15, - 2,15,19, - 11,18,19, - 21,22, - 14,10,19, - 14, - 14, - 23, - 24, - 14, - 6,14,2,24, - 3,4,14,10,12,24,20, - 7,14,24,15,16,17,18,19, - 6,20,22, - 14,25, - 14, - 10, - 3,14, - 14,15, - 14, - 14, - 14, - 14, - 0, - 14, - 14, - 14, - 3, - 10, - 3,14, - 14, - 14, - 14, - 14, - 14, - 14, - 24, - 10,12,20, - 14,15, - 3,14,19, - 14,12,20, - 24, - 3,6,14,10,23,15,16,25,22, - 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, - 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, - 4,12,20, - 14, - 14, - 3, - 0, - 14, - 10, - 24, - 24, - 24, - 24, - 5,14,18,19,21, - 14, - 18, - 14, - 14, - 8,14,17,19, - 14, - 14, - 14, - 24, - 6,14,12,24,17,19, - 0,14,23,24,25,18,19, - 19, - 18, - 3, - 24,16, - 25, - 14, - 14, - 24, - 4, - 13,17, - 14, - 14, - 0, - 14,10,12,13,16,17,25,21, - 23,24,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, - 2, - 14,24, - 8,19, - 14, - 14, - 4, - 14,18, - 18, - 3, - 1,14,23,24,18,21, - 14,15, - 4,12, - 14,11, - 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, - 5,6,2,11,16,17,18, - 11, - 1,24, - 10,24, - 9,10,2,11,16, - 5,6,14,2,18, - 14, - 14, - 6,14,12, - 8,14,24, - 14,11,19, - 4, - 4,10, - 3,14,10,12,26,21, - 23,18, - 6, - 14, - 3, - 24,18,26, - 23, - 4,11,25, - 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, - 1,23, - 6, - 14, - 3,5,7,22, - 3,0,14,24,15,26, - 14, - 7,14,15, - 20, - 3,6,0,9,14,11,24,16,17, - 14,16,17,19, - 10,17, - 3,17, - 14, - 3, - 23,24,15, - 14,15,19, - 15, - 14, - 14,23,24, - 10, - 8,14, - 14,18, - 5,6,0,7,8,14,23,24,15,17,18,26,19, - 25, - 15, - 5,6,24, - 24,17, - - diff --git a/doc/salome/gui/GUI/whxdata/whgdata0.xml b/doc/salome/gui/GUI/whxdata/whgdata0.xml deleted file mode 100755 index 0075ff8d5..000000000 --- a/doc/salome/gui/GUI/whxdata/whgdata0.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whxdata/whglo.xml b/doc/salome/gui/GUI/whxdata/whglo.xml deleted file mode 100755 index 0f1cd68e5..000000000 --- a/doc/salome/gui/GUI/whxdata/whglo.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/doc/salome/gui/GUI/whxdata/whidx.xml b/doc/salome/gui/GUI/whxdata/whidx.xml deleted file mode 100755 index ac66bb966..000000000 --- a/doc/salome/gui/GUI/whxdata/whidx.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/doc/salome/gui/GUI/whxdata/whtdata0.xml b/doc/salome/gui/GUI/whxdata/whtdata0.xml deleted file mode 100755 index 6b0205e6a..000000000 --- a/doc/salome/gui/GUI/whxdata/whtdata0.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/salome/gui/GUI/whxdata/whtoc.xml b/doc/salome/gui/GUI/whxdata/whtoc.xml deleted file mode 100755 index a271ba7cc..000000000 --- a/doc/salome/gui/GUI/whxdata/whtoc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/doc/salome/gui/KERNEL/pics/cataloggenerator.png b/doc/salome/gui/KERNEL/pics/cataloggenerator.png deleted file mode 100755 index 51a0f2786546ce8989fa8831832ca18ccd5d8d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15404 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 H@a_KtedGHD diff --git a/doc/salome/gui/KERNEL/pics/copy-paste.jpg b/doc/salome/gui/KERNEL/pics/copy-paste.jpg deleted file mode 100755 index e243122b36da3b8d46fdda1d06fac4c3919a85a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1199 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=x!!h1+3etpY^huOZda>b-NaJRbpMPN z_w6MyGa61#-I2yJ!BbS?vo+(3`WwIe|1z1}|HIt>pP_Tbv&&n&GomuT+||;U{@(i5 zkp;D$qRk6_bUn&VeY0f7{YbyZZ?4y+?lwt3#g{z6nC8}>a>mDYJ@AtP9Z0R{VgH@Yb z=w^`Txyp6B4}BK?@Hu+hW98|@k+jS_pbZxXg$rjU|YZuBO}oh2M_X9$t?(<@}D99wfz^d{r?#b zO#jayWxxIF{9oL_;C$fypP@G>*Ls0%u>XfE+rqDX7s?9qnXucUcWPh6%D6ShWei_N zNuBG>To=h5z4u}0k&chsuDLPvG=EX4Gksit``7uutn2?Xd{F(*aIF9B-}HY?*Z(v8 z5c<#X*k#Gn9diBrjn_^t7mHeZ$=&SGYrTl4tvcZo(RrbpQ#t;*R=8fO#qwJ B^Rxf} diff --git a/doc/salome/gui/KERNEL/pics/exemple.gif b/doc/salome/gui/KERNEL/pics/exemple.gif deleted file mode 100755 index 6350d1737bcb792d83d8db55e36d9e44185c77a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 zcmV-C1;hGBNk%w1VI%-10QUd@|Nj86rmiI-C1PD@!M(>(PF8qwhOMZ*Gb&d!F+w34 zMlvl;my)repR6w_SAuuNURrk5)8RERSt%W*cyQB0K66=EY6k$<3INv%0LBRby9ofP z3R&fRZ{sRF00|4>|0ObS#-UI;I0szVa z0ImfA;spV;1_7-E0jLB5`UV2`1p>tcVuyTH*a=BYjzbyNG&};D6O%K)!<$Z4*;>Y zTzh{+tFUf0HYNA}321Bu_Wl+3{~2a#7O1T>={Q&v=0Q>y` z`Tqj^{{xDR0{#C4`~L*Hzyy?-1^WFA{Qe!-+A8_}I(d2?+}}OH!#qq)B4=nt;Nh~> z*02Bl0Q~#_`S}3<{{jF10{{F2|NjL4{005}1^@pB|NRF4{|fv13V3)1|Nae&iwXbz z6#Dun;^QT!s2sbxFaG{Y(b7YrqCmvMZSnAzI5;-{`vCv>1&W0O;M@tAl_~l4a?Z?% zk&6IqYgk)W3u0XwE-V#;e^R5HQZz0AeS2>vAOK!nSS20-QcXD#4FCrP01pTNVqRLp zzP(96KL7v!A^8LW00930EC2ui03-k=000R80RIUbNU)&6g9sBEB-4qWLjnpTB4nh` z-LPTv@-33cQQ(16>1@%$#cH0tjvN`e+op}0GHdAypp-Zu8!Z6LrU3vaYG%X%x&X`q zKrL6WP(Bq}&?Su)G;`&MAx()=djUgMvE5DuLs3kiw5ACGHl-P zp*1*Wm9V?tguUX2vH*!chzJc5Bw^1V2@4eDAV=;{0&<3O01~vIaF{TJ5I6|Kr;b24 z%|cUYmH~*JW;|Gg=JBJM5G7NZEeS1K_LAA5zX%~O?>uj-@lJYfg=zP z>Jz?E_ntnyx^(2tcKq-n@Xc!M;HyXf|4kfwvmb8+dU-y6I&Io_rCQ!3rql_{}86#<#OKHQ4Gv@39 yPAU#zDeSNT0RTJoi#Lw| diff --git a/doc/salome/gui/KERNEL/pics/geomview-alt.png b/doc/salome/gui/KERNEL/pics/geomview-alt.png deleted file mode 100755 index e797b085d3a214c0f6f26413c7e19326e0e7138f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73865 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 diff --git a/doc/salome/gui/KERNEL/pics/loadstudy2.png b/doc/salome/gui/KERNEL/pics/loadstudy2.png deleted file mode 100755 index 595ea0528410f67c2228806613f7daffff88e4ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8181 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 diff --git a/doc/salome/gui/KERNEL/pics/lockedstudy.png b/doc/salome/gui/KERNEL/pics/lockedstudy.png deleted file mode 100755 index 9ec7e744ba90f96b3cf92f1acd5c382b861a23af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6140 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 qv&}C)M5(a4lA_Jly0P@1qGzLOX=>;|K2{& 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 diff --git a/doc/salome/gui/KERNEL/pics/neo-view1.png b/doc/salome/gui/KERNEL/pics/neo-view1.png deleted file mode 100755 index 1a30c60f19b7f834673e9fc89e87f4c4564870ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71628 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 X*HlSXn2KJa;7e9YNfIlr@A-cKf>{kt diff --git a/doc/salome/gui/KERNEL/pics/neo-view2.png b/doc/salome/gui/KERNEL/pics/neo-view2.png deleted file mode 100755 index df1c7fe0f1a31bd46be1ae33cdec87fbcec86262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64097 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

NF_sL1hSAC!NjFo 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 V?#}S`6jJycKA@tQxKIDD{{nm~h#LR^ diff --git a/doc/salome/gui/KERNEL/pics/newsticn.jpg b/doc/salome/gui/KERNEL/pics/newsticn.jpg deleted file mode 100755 index 94c8ee971ad77ee3d385eed1bdcc4c781dabe251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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~>;* diff --git a/doc/salome/gui/KERNEL/pics/objectbrowser1.png b/doc/salome/gui/KERNEL/pics/objectbrowser1.png deleted file mode 100755 index 16ab896a21ecfbfde70947b74086b95c1d636478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10900 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 diff --git a/doc/salome/gui/KERNEL/pics/objectbrowser2.png b/doc/salome/gui/KERNEL/pics/objectbrowser2.png deleted file mode 100755 index e010ef2b0f355bfe72f08ce2ae156415b1998316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16560 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 diff --git a/doc/salome/gui/KERNEL/pics/open.jpg b/doc/salome/gui/KERNEL/pics/open.jpg deleted file mode 100755 index 5829aef523cc7cacca1697127f7feab94a69e417..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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$#>JLJ02A_&r5f>S}H8!71qk#6bkmXz-9l$Mt6kZz>AySwYX=i2+6v)A6| zeE9#~53GsvH|N9i+%c|kjWO;O@L5V284({51_lOMR7Btl49t^A@Du#vIe6zt1A+zv z^BP7}fLG4&``)~h64p3D%kiO_J!bzLj3TO>zz0SgR5=JU7RF^6m1IR)VBkA_?c&;; z$iVve9OayFm4s}CjixBE48wyZmD(q;mxG5WE4@wX3a&gutE-KSHiHd}{r%2E36e7M zF_^@}#L`VKNWD>&r^*e&B2T8-*1i1v{BD-#m~j&l(2US3YmfnW&A%X4ya${l_mwJJ7O-TIA4>P>M!s1~w( zi?s^9dPYrseSsH`S|}o9GlM+M87w*kI zBOF&+QL$0_g_!Z&g80MG=C^f3()LlQC#I(9#)5Ef-e3^VH4io3Uj9@l!XGb~Y?+%Q z3=!gwWC^&cVSBjQB~vU`%Py0|N-eL-@XfHk)FP{X=*cr5g)JiJ4u69wD9T-bLdSwO z7F~+RC@LAX2!n;8<5Px>-y2V$CA(okNXgln)i2H@#`$|ciIvTAFrG)JH@&egc1Lp7 zO3F2927B>TcrVGf*n!mB(Kxz#S3skMtm1Wx~PJ=IGuKa}z!RUPe=-MXmkUaUuT zn&f1WvrQ2>IYC~TQG4^ZN`_Cc|hFFb^pjgOK;2s-6e&~YC9XNR@s?oCjt zhZcD=hb?zi*w%YvNQLs+GN+!M7|-Vt)mpA=e*O_$i;(1yVsKcxdt+q*Z`xO8+NYR* zd^>DnsphL zeB&aMaJ8o>PCft6xx6qsdS!e9{_#NACY#fReU;u9T9ch2IIJktjHU4sJ<;_OY(qQI zx!X(P@dCwMp%8qgojTH4>on=YzHt*pr-$p!JQdNlN>$Oh8jLiv`AXyQjBn>VKl8<& z9@-I3PjL;L5y86-rCWSE+8TaStk%ePeX?F&NbqO#1+%f+R1kfUS4@QOlGs7 zwJ!t8k{bDwOJ7*W1_rQYS>Kp~Q{Kyi(TmNWWNF+6(Fac?KBMk4 zXcQlPMKWTtc4>N7XcK$9Hqnxb?Bp=T=XURgfK0%myLzK%J6jjh%goRjKV6pdp!S&_ zffP|=Tx=sgDaq#YkOREv=;-kC@o6U-1&1(0-e#Mj$rY<5m`oO1JubNRD*hBWr~G*F zV8x?ow`;2s%!DZU&9}@Ug%#$&!X4$4ni^pYrTofFr3q)vTu*?Cc)R?xuc6%#r8@t0c$v20eFI#3)j7#^=qOOU# zT%+b^C%+7Cz!@_gh$fV+vsKwV@#-{deVmVT!b}o5EAqS9Ch6pQPvCTHAt&idHNMLk zEWQ@wD}S{d7xjZ4w!GH`V=crY!R)H>9FgLyX%=e30}74Wb)3&CS3=DZ%!YnvVZv}~ zHLTmSrB%`a+>4$PqgZBA8NZMYEc|8`><}ZT=PnfqI`tc)mtM$7uBX{ZcDWh~1v{^d zVx5I89U30411-EX4F)!NtW0#fvUe}ziL5bm6Ni=`2m9JP-&!s2G}~Hi3d}x9w{;zl zU>V5AcvK1k`@Wf^v6FRnX#LiL+`BtjJ)0puAt@p{t7C2s7N8Os`HdVQQ`H?Gskr1% zn1Z|oqv$vU!f|NuSDR_>f3|HQ5bn;I-pKqIJEKr}<#8ecf|ozeX0b9|qERTGHz)|8NhwmvxKv z+O&Xu%i#JOTP`K^>T#poc${*Bda-koH0s!NKGG=a>DKLU-U(Bw_G;m$U{?x`eD`9LKh@3i`)FZT7$gq3bb242JMvdjfhiI?3R?G#7j z;I<7bUE?Y8tB}Qw$@@*VigkVsmwk+T&O3uUPm`xOce8d&Zppqw%^^!2lR1oa?mC?V zH!S?~+i~O7T_`t0e^N9j8W0K=mqw2pKNo4dTWP^*n7<^#KAh=K*5fI2>*#WtG?=CKMiKIg!>T2$~iQ1&^AjZci%Ha1RlIg%3j zR4|U7_G5jyO({48%l0Et7zsHl4o+85v(C9*h@=D^y=aqZ^~z}-Qdj<%ok^vN>-_sB z%{8emQfC+?j>;zvhjW55m=Y2a)=-G@Uu!G(Y;_NSJXk%{rOvRY4Fd~}>)9v) zfl>U&VxE|^>UQ@P6?@Y}!Af7(pGF1)b=lvim>s^UQSyA_pEBoDQ6sOq3$Rv0ff;9dk%A_hHo8e)6qLY0Sx1p6KU(dUw5< z#@3ve{Mq9Eoa5Danht-rz@FN|Qmo9=d)v0$``)C5!Dm;G9{KU5c9Y7Hky83fID9YK zAjZs4Oaq+b-Ven;C`|Zr@%O{TJiJnzXcH%EZM}GQVKyF2=`m$szP7HecU}S>!X*a7 zURvI66Ap>6nhWPl7J1hdab{SC%%@zw#W3k|eQQ@3KuoL)IT*3;;zWqaAwvT9wDoH_ zTq852k;~L>0+PYGk=xCjH_ilMy;VbkJq=dd4etgnue{gbf`Wsyj$dBPRoG@V>A=yb zH45L|@7^5e<-+0qnNLu4(7~ho`WnH?q15Dzdt-vR#`2ulTyn>%<0molj$D5Q)u;Xx zC7Ox9y#)3Pm3l@^=s`bGl zL$@oMXcRwp{<}>N?N%SJ(^^YA%!U0#gP$A) zdXgmd`S}zZEH{TZC5xF>ZHaTgEVDHB$>a2^jlYES*tl;FcF4dlAW%q*-) zL{LU-eJNhybF~&!tg=tG)9#u^>(P{WB#2i!f=_Oz+HpB-ynLb25De+S?_*F1POiZo zEvtgOGp@D0=l-BjxHS5QTu+s$EK|(MCzfO4tFAE|h2!I)D!0b3u-em&)7J~}<%+3l z>EY8ZtcP{&xlazx2g(w0${aTQsn+4!h4As=Zdb!sM_%79 zDJdy4pAwAjkYN^2r$zj@f75CkJuBnp!o4&51hSEhK<~9}$Nao{qxr(n5|%73&B0m6 z!+4BxXt@b~_k8y`g;37VIswYDeXj&NYMA1El=cP}BFc}=1+*A8d$N%$k3yOB!zcwi zAAPQzacXWi@tNM~(N*UEzAvaROFqn0?W%G82FI-OJe|Hu1ZT+cf%}pn}&{+G)qlejE=z!Of<*P^Ey*sYpb-Tiu^L4{7CdT;QYH-ud~_CHr1_9lo4R?(h5R zWT7nZ{VwhKw}zV0I5?9qo3$$=K1JyqhZ6H(l3i&tKjSIqqNRoPG)LQ0I(!{*ThZg_ zO1rkYI)j5pLq2~(W~0vu*Q+YpW=8!HnZo`dA({FEi9eOqwzDYkG2hlE)qPp-Wipuv zev@l{WYldXB{I( z-h*CN@pyj*PtGPO)kcfd`#0cIE=T5Xo?m>6aDTW?YV$+UF*X(p!Dl{WMa~ha-Pti+ zQ)UuEOf{SNF`htY*F)Mg@6;r+J18-JHGb{#u9RXt^wBA3!h&kWzI_wYxzOHThK{w< zBtNHxaNPgL*v|CsniF|fp|waxK9R+&Hx13*dc7B`u&C(0Y86#}eq?-nccb%Vjq@eV z#KZ)X`CNRNUZGO;xwIRH3-f4QRAl6?`R818Y7MF4+p!+mWFGg_%~a=CA3l7*6day( zy}dB&jrkxP^-dBX--i)0G(Lar6Ya*{;DbfnY9V{b+qc%&Cwk@!4FMSxJwt6`Vy#nC z@qt($R+g4NMJnj^(c-*NaSbML&@L~!^{I<_;dqGUIv+=)zS0>&aKlQPGp1f^t(OcM zl97Cu`cux+X0}wF`8?6dSkU}3`t7W5&8O4M&$1u8u-l+xU<3pOJ&mkSrJ|-DHe^z3 zun#M#PSG13lDV^?UCk5^tUJJr6!AvQz|C^M3&;yVqn#`XHW=NhVUur3zp;rfXIQ^j zv`Vf&Lm?lWTZ!{h^skG)qqs^=`*b28HcuQ3r~UeQKCcu?8m4$IN`UK}Hdr!hui1PFQMyAuSU z^1Xyikv9&n!m7hg7! zh~BHK;;%R39E)9ovGd={9>kMI4~T%Eg74QxeKdeX)(Mhny9x zPC^c=!m)=mjOKJV!C%-usAP|P{QLp6Xi>Qg+cv%{2M5Km1&k}r7)O+|+=ueILo>bm zPii5(l6!9a_b-rwLFG`bH{FaFy&7XNoeED^({HnmYa42ef;AK z_ne{l!A?nn1ZHRKhc|aNSYYZngMw{RA(wLU19s@&`%7G`ix2y+f1YxFJM%B!9Q@Mk z<_a@6H>Xr(i>IKVKrzipP$-r1k=;IT9YRLt8B0ukz8C_S(?70+$Q02Mr5l;l_nnag z^+TYi0fBUmL@HlFY|)vh)}Iz$LN-Sau^39L)lOsupTgb>DgLMz9#K&kq@<)%98(w= z7;ULs&i{3-Y?BYHqR+~>hyIM`egMtt`Z-O>uHX6YB+BBGrn^J;N1dLPx6rSZF+he& z+1c3WzMXBE`oXzkdp9@pG=96#27hr%uC&JvETiMX_u<$93b_N89}(lV4N@a2k0dA+p0jTlRM>ux}vOS83bWs!VJmiId2{lJ1w~x zAq0bl3Gq^eIJt(p8fRZCy8g9{5x=A_PN$}f+!Zu2bM5+;$hZha4cyp-M2j@(N&(b@U`FWTDmu-tpv5Cv0<=0H;>>^&0?9 z)Pa>I;s6G=$^U^`|3E5#2s+sM&m#oDu5W#9J+44{La?JaN9r#J_V>D29r~w>pvdgk z7cWI2K2%Ih6*c^*8SN4GE8Ar1sw;VlsE0q%R*YoBZ+$961o9%%6tT|sh8Yz{*DLD< z>v{x4W#VrI%|*%3vU>-TSYH+${QC7vO)_`f=q2@Y(vwWO%b>Y%0Wtx~TBmvgH@7E< z$4mgf_|_tmP0+|}o|B^&Df9*7F&eH;`@Sl%`%&&-AeGD}gIc<7*yf8Y$dJ|=KF%xp zO5v@n#sdw{;~8T~rF%#*x4IG76V3M*Np8t0Me3viijL>l=bTuA=}xB`(0cvRZimid zp@C`DnldQ?NJ2Qe{$v=>9n7ee8@&7CXirCnc(k;&TR|Cj0z45&t|<7D%PfvUH(^;0 zhYLO*!!odOaKI2nBTf^wBe^1bW>6T_)tn^G35OE)T%=XWHh!}kOlId#W4*N`YcOlfi!k~Zv1Q@&B ziS^SV9^qW^17WGguiHG*iEIb}fF6RcFg%J>s~Ozx9Le6i*&Z*);c`A}&kaIBLqo&c zsHbp51AA0Td#yWy@T2Vu4{#lNhXXYLy76pUWb<|QnIQ%Qp+w?tX!7=U&Na@sbsv%R zwX~i9iFhc-Y{usXjB-DK1V@8X>DtJ63^q#4W_WGuP-P^GU;SH zHw|0$PVj9(O2!ZS*yy#0j{$2NcL*MN3GeG24&Sk`!~zNJ7>r~#9*@xqWTw)r>qx8Z z$qN*euKFleuDZ(>@Zx@V3=fm?(SBv3NL8)Q5&C?^n$3e?V{VU?%I2I77|(Ls?O+mV z?0zaqZ9KbGvmfO@dBDTO6u7nD$D?<71_SV^4crl!b3Ary-Qo#Bx4it`^}e_~mCAg# zcpo3Qt}v2Z(WrNhPEPd3V?U8Z-Nt^(G~Au^HJlD|!1O0Fi}Tzmf1bJ(R6vq~fa%Cp zIX5=)9nX`6*I7*_;4qu5)O+x}Hl4166KTpiDXLy*b@%2OHIOh^%?asG z>YM>=H|Bc#{gvuPH)s92u8~7R zxW@7|@_hbHoj#~ zpCf%eTxcv*ugCU4;kiS7Er~NdTKwxWs2_K(Qcp*xZTy2`sl%^Hlq3!Vn#OOJP^tAs zD`DRs(B<}yj^mr%lGBIVLmQwcCa0tX`1}9J78bv^6%rDf?p)f~=*$w0^7r>|X>H}> zS==Zdcw#tR_V)1H9p&|q9Zv4e`ED+IypNyX>fT=AV=DSBxPzA5G`C(rZRuE8-1HNV z!yBTerf0CW1~c-Fo1$K{B=8K;+3m<-3Tj;*%wN4aT3^eHx;eJn855Otmy^Q;Lkjmp z`BYyZB?$J1*=$vzQWI>7RF@x#TQ}>Xi&uU=646Jd(QExmGhrd2kwRrgn0uG9B<=#X zp){Vb`g)G=h9Ruj=yTVzEt!VKMyK7P>a$f)^?dwmJY~`(Lil}2C${xSY8~`Jc#1isGI27h{xzGU8 zCgSL$IuQ}k`6vlM7jklP7zhPdOPfseYQ=?VEdR%ZX7MQ zeLDHgp1WNh$f)EO@+Hr&ImJX5RTaJLsx}xxG9b`YaULjUjm5YYVF4 z8=>H@oo9HCmB+2Uy@)y(InRI|rE=kJafH8@&4EEZQ$~Gw zc!*C(K*PZi{`Bcn&N?9>AuiW9CYz1^-(6jPm70aw{9UhZj?>fA`x6-b;8BR_fHXq5 zdtrG=F>+9}F_5&&bGbju+NYWLp8N66=H~J+3^-P$rKLCL@&MEUdvQFd-E=%!`rf3e zg!_(1^x0DRbsD|-9Girs#ISKC`-4&f4pZ3icWAf$nwvY-iMMB-E->S$^(F0(VZ+au zaA3#^`;-lwe)SvArh<=_l7wcf)mqoo)NEm>nqQV{ z1)^SG?D|Sa5E~mC%rBs#K1U($w;AH<5~pp9E_nHEXDqL+<@;0RQf)ykzq|e~bMy1# zzrEo9$#QYI`%6R^m3e{6Tc}zc>OYFspP1r;O5Llku5jmj)6=$%7%nxwe*H=VPtocHtW@)>o+_fVRi%PvL z`p++N0)rxz%0SxJGCQ0D2+d%xUESWE9%vqZDOZrpkxtW?BVAYZdquPbM3oc{haCI; znP>3uI1VD7xoc?ef$_%;e%unZZc#87X=!BG5N~*G@?v5^6<~79whE{xqib6Ugx_Ld+28EA(=(Q!`W8 zO6q|bn754Q-jGN>^2z=En^E)gsil@@{Oh1*F>%FtFShW zj5r%owD8fns=rUJ03ReqVz*SU<#L}ChXzBNk_=#l-ZXa;~X zDmvP`w3J>{RP^q+iv&)-l9xuKPHB$R@?uZ_PI8Uguy7Aw~P`JC54$DJ zxFl@cqu2Z=C>@2JxeFu?dsD|_4HJrM8sFbW0!E`;Y7IxNTB+L?OMSMx7$*2T=$|bb zkV2Oi8lBlDZ6?UkJ*xI+%3Q9kK_A-UpxV583dC=1ZBNjldE&r9Apn3gbTfyhaEwHo z3}^T}+yd;Iei*eUBq9Q(Mdy5H{KiV%rS4Bh?n|D#qo>%|*cB#|p`k<{^_AUu4_^RM z`+Hyj*#qqSQE;hdom!^8A<5KQN$$LQt5_;!*zk3hyWc-i;u-7^K@Ioz^|ijcvhqNh zJ%P{U{@U7(0OAVe7K_}mw3?~5T<&B{}rv_R={{UZ~;Wav3gR-N50bhw|t zBJ94qK6L_hJ$+zTSw@K!BGe@S1XOSb>x~bG!yUQev9p%Cx{#8F6U1;9ne4^bH*ek; zO%&q60Gu13lU7tz%*e<%TTNuP5E`rfi8QKrp)w9ylPo8T%j?rkD+dSoKaY;0wB7K(Cda@Y97$*15; zXEH$r$bI0yx5o_BaoV$0W`G611PwEdW>c^t0qvkB8%hgkiVz5Kx_6ihpsI0q>4PUG zI(jR|VFUlCPcUBaC^?|@_F*Y8khCZFJiSGFCn)n%rtvudkxvt|zr4Jjf+P!*(TMlC zW^vbCD`9sH^<=R+RMH&H5PTU*%$2C+h9B}=SXkJ#@BB|XKN~xHcEURvn$Qo5#k%+= z#!^yJd$ZMHV8PjZef%yF2Zq2V(OqhF^e}8?`pb_nk?oz)7$~IOUe4cW-QS$IIe5@k z*;mQsslhqJJ42ti#o<$8SzyMW$Hs@Nt1HXBEqYJxm#vG7B#exVD=RB6UcBhGU$D2g zx4k$BwqrLT=5i5Ox*}JMkWAq8nVM1(a;L)=dBBQQzlU=TT?3W(?(TGGtWY_Mw&{vb z1p-I$@!iK!-N;4A%6t!jhx_AwoM;sJ6J?7wo6W(ubabdDCMH09Jl_-oGcae!MY+!cVs~2s4*FB?5FZ~xk^MIE98gyn*m<1AxT%l4# z%m>92aPK${j@c?V#YJO1kn(-jbqg87p{*O+i(IB}wP>K5)Zd*bf-<7}+e;iL!ncCF zT=&(^mj{3i^c?5=PfyQSZ4MH_*dN^ZEcv`#OAirD2gI|&VzH^F%`rc_LPBhXH~W99 z-Uu>3AQAq#LZT96Fd>>oRP$UbdG8Fm|EiWMkc_bi9Q+u!6IPcx5wiCJC-&{Fq`Q^2 z;_f|V6!(w_OfsjSG*rBpF&kyF$2CHz;^`#4_r0Hrx{i>Liq`V?U=|D=2AN*)3_x z(e4NY^($PVNEOE4G zs~r%9o-yg15wOQE4yOBl%4AMen&4#e;0|~PU>u#D>4FB!^y(Xb@y7cw797547Pxbb zc-Y;U-uIa)*QZDzmIQoj`@@BhLl{k|)Q_V7#Lgq#bYO!250cNr0i~nj%rNiKTvs=G z-K9XjAa;B6=T8b?Yao6q-x%=!hy&O1PXuil7@(d!jTY{FNt!AzXdkLOQ(-hUGd)sa zBx^kJGXQ{O>f-O;-+@jGO^@8rPU@Iz4aR%W|6N`bla2c~>~wM`smja*Z4tCKhVc8n zT3%brDsf(Ha;-3*PXsLv<`yT={EXyu1J?f5A@rxP;&_1m3mq5Nzp|1Ua2hHk4UuNI z`y-;IprRCNc}m6K3%^stV@Q#Xh+sbbG2jK1SVv!92t+uZJbB_2Y5*|36F#)7wbk?L z%5ej3;OSS;-9LNwjP9}an#pkL6OSuzzw8UrRH6TbiS=z{eLzqV*K|XG_MZ`xwp#sn zdj82=1QYBp-2b=zg*lzFPv*Xs*ZS6P&M}E=T0uNCV?p6|;zPDBRAEogat5nTClV;%$@)qJLo8}FmZXz* zSqsFc<@4QDl!4-TCJ|~4wxumQ_}e^XEjztpyq!s^fJg~)4~=vJAEwX!8g#xWfRmmr zW@cp2F*9d_ZlkvN&H05A;cSR$!CP5givpkYc1R>xEDan^qnXYq;N`T7#C@v^AS69d zxqw3L=}PTfWxCMH;kvk-(sa0_Hk7bGTfM2oO+n#*u|LD8ef0tc8;%zC>qxsOm1-5z z&_pT_OrwCh`4#k3%AE=06`DnlfqAky8Tpit&X4YdY~goJ4uI_zs+FPxI)An^9R#@9 zj(hF58fVNsvAZy!a)sZSSb#1NYTG$1y5e|@=1Q*ump_Tc?C9v|H76&b2arC8fABs9 z%by=~XfKeE#wK$q5Hp2Bw9mGNeb6nex_795I5}|`LaQ$bqgWrzvBNao9&psz9X|gA zwjxl$Gr&|`*&dUUk@0EL=*>#8QvkaGL1e*PDwR_-H#B8yxDo!a>6GU3a52sdYg)ku zUxNzTi_$jVec`g*3a|UB^$YPQ@V{ywCIMv1%a5x`qv&4Y5MdNe6evp1*BE8ugWugw z2UzoMTsN8YzI0}XT6FYc8E+1zjGIiBtSdcCF1pEQ4hm<#Pdjny{zJM0Xzkcmyy3aT zT7pEb=ylw9#bjnl0TGA2oGbiIew#3owCuvj$d`N9p+jR^iHdK_B`@=^NRdH}pZ8K-+)Q{8-X_pI=u~ zvsPpFG(RXP2p=CiA5g`DmtHveyUi-Jv-y;>#=NEl*IaJ7?a(@VKA6I>GfB`SGY`g2 zyY`Otqx?I`>$ligSc0QDl1~gL8t`N`Ge)AV?Cc~@@7n_~0O9MXqn%72HngVF%#})^ zy49KgAD<<0@7Av3zcsbW72VDgR)tRRk8v?LMOc+N?`spIy=DFeoQefC@aEtpumfc zzZHRU80)nc=H}*5xtg3jmuXejf=;nSxaqcz`}*FR zgM$MD8`~E^IiRCD;0NYxZ#wEF4$bFmF)XO?-0JgkG`i2!&s7C;EL1t24~{T}FoDyE z0SHv1C=S-vWDv+RKrpqnwSg%hooKCGqzVrY57cp^kt~GWX0@zHV(FPxMglzw<1NW!%Y4u%dcq?FPa3}pI+y&z1R%iUc*_?_D5 z%+UXaHj&k$_;IenJs?S_8$zo!nF4y-ui1AhXc*`@86YFRdtMvdRmu!%8JNl zjYYHmimAh+bPf+k@cV_)xx{OxmZbuc>O^TwDyH1rYWYz-_r_ zkeZD91}BPNuTWrLloabO&V+Ul`GSCeF`PAjhWO?C<%f$CgDG$%mI z4kAy~49xf80$(~a&YDWA0XlUM@dcE*-QPeBKbc<6(}4E5xd!0O@%ev|L=S*EdUW8~ zfMo}Dz4@deL@EH~2#0n@`lukk7X*Wirhbuv%uBD0YhICZxi5oW?;lW=f$0~K&J8R~DxXA= zy?iCBLtak5hZ>>7P#QumS0WEZ{27_+YlgcTjzHE10!zBPk2odwZNVrFR}Ygm4N614 z-U8J6IYP-F9fB4|-~LFsebly0Q~YVJBPlRucJM%uba+r%h#ruipUmx=2&5o1;IGuz zJ6E0e$J0O6S>4ky9M8uBtP`4gd5(;4xij`&PCgryREogJ-6;l}hdU?zq12EJ3eYeu z@9ZS*mO;lIRt)kk;g!Y2FUs7(c`_Pqv=E_m-y&v*$B@)DzH1%$M!bH}42`sxGj zvB}|uMwSn(DN6@DrSZ5XhI1`6qc_q*3t5sj&Tb3N+N_`^c3(k+>5|giLFmXhX&#B?{n zjsV!4ZtqDSpPXa}o#WSr?)T9)>n^o?2cJVFA{qcuqj)weGSC7|-|g$)G|l4x6Se9@ zA+7qPUJN+u(umX%a@EvbDelCju6^tEsqKPtT<;hN+Fk z*%Ye>JSC^e9L-aTW6ta{K~}EZ{^{0`@ySm?ijXH|j%Z@KFX1LMrpDzy&7~t%`7%PG zU>zXp-c%_+&mI7IK)IfJ06mu8XaoXujOd&@@a8nYbKo=pZ*RCvuTNt4^7vTmbYsAF zdjuRd$yDpIKi`q>3?nIdEFLx-k%$^M0Q*70CsricL~-Nfy!m_;9CUg8UR1a!fBmQ0 z??6=tVpO|r7Ha%i*{&woNsGCsuSw|x%=gtqM8>qW3zyr|CP&9KC({`|ri3Or9OxLC zw=W;{Io7ftZ^>|4g<+f$I_s;el82_X0Q?T?bbZzWY}Ev28*Gcld+hvtbbS0?0*i*< ztOU(kM@zq@dwtTr9)Adcls%ZxyW3E2hFo3ce$0E>DkQ5?t26f!_bO_yWEEtfn4hO{%{nqzkBP)mX?OzDJ&c5Bqo{hZw*u=6 zpg9Uun!kT7w^=uX)lQa%>EPgC2OgB|<45bQBQ#%>)4oyuTfl*?t}p%hkV-8pOtxWL z2Gu!&*drs?ySlX+JqSd)#YpRNwdENJn41W&rY+h8HA( z3C3bkaC>XHBI#vR$F#z?MkRK<^9nPyG^M@KLq+)CA=z=o9G=Y9WZUtn%B1LW-IyTSekKwM1uff3-%$qxF zRc7oF^>^QQzbhV$V5en z^P)t|2h()PK??-!owgR9f)}XMabpGe1!!La-bdwr)$B{9PO3hVT6A#CJ>&qox;`+o z*ke%;5i?xtFM@HoVLgEQ4inF0g$~5{w(?4Hkh#ceGa-s+x6zNa(r4aR+-=t0iO&0( z-}|`mNCN+g5T>Ommg|FJVLM>l(AG)EFBI@?Hpvv|Ek?QF{zpqi##5jI#*rt&Lrb)M za6;;lwgZUVSB7)Krik^sPpM6G)s1NcAE{)43*!`N}dV9)}x1C8AmLQS&PAXZ1`c|c;u5PEVKbbvh zXv4h|Y-v&^DklC9GixW`%{k_y-do)6l~%Ojfy2y_YT z^5jCI{;t5px$%JyxwwY8`as!9O+RGcv`xr{DIeDz!6pmLTrCVGP57*BO+v)cAyDU zcL6am2Kow)56nPI4kcvw1d>0n3xP5Ie!wwgLzI6H$a2p@U+SJGjsrn%E#Jj{)A~6w zVf%M4_@8ol=&a^*U*)^=Ii(B6jT6{)-T{wB3$)Qd^b^+9|KF7HwA+|d5R~d zFYm3ddgkEw*U!Zy)*dC zCt$xir}pMrT3UVumEi0jF*Kk`eaW`Q+9TRSP{wP8S$qQA4rVh`Q>xU|)T>u#dfnlq zpniB&na#p}H82o1I2=@pE8iGy6Mhzo($5e(hCp%u>&KAi(dA#{zNUr^78cf8O^DRH zJNTbzFVmAbO>~lSh2x>39#|Z;sT!Gvz*K!34`t|vnW%3iG{SlS zs@QNf{#_&bv84*J{sV?TS3H6o-3Y`k+efnn)E+*7MC}>C1Za#5P-)(^E2}!B9*ETbgY}xA9 zgm*q3=}?<=JzC-gZBwdNO+E-4U#l*B+oi5DpH4jdE5#?fhGKR`uoJg`wIui(YGaR^ zDCn4(Aw!yjTu-8VjB?7$D|LXsX~={hOQYWFu;|_e`qN)kWjV2~MO3?s^#-(=+_*7X zSKFhxc^Zu$p)NMi567Ez?hDQ}tpJtmbmvU{{YcPXf4`9Ja((je8nM=TV2tTP1D?3J zIB-?{9Skgdk?IUZL850AAi%sjtQkgVK?w!jK=G* zbh<(%%NySRi~CAD;S#a#VxzJMol`?Y!w4RUN~P3?r1?xBH@8~?-T`tHFjJ?u#2|50 zM3Q#ndIDf5TQCTlO1&<6m?T&qAd=&^Z)MJx<}5Car2O+LMc66%ZSC!lwi-zS*5Sq8>uB^0zR@$<7vrroHzOVj2JkiK~mv#C> zK2DB0z#gbhsjIrW4dUnv6pF+^&S!9N(6Qp|^~ZOKAQketT56tYv=)FOPa2OqF)01e z;3`AWB`~W%fRL)~C@TxXVzJNfQWU19X}^gZ@XC-DxX0$Lv;Hbq=qT@yfn z4@hh9ktk=tBO0Vj5jusq05Adw58v|r9-g7d;V`w)(a}*C7X+x9Pk|eaPJ|(8E5QU} zWMm+DDlZQrD*egyQS>^UAoDcFbQ%~MurYP4^OqHzlBL$+rb1msT=^+ z<@ne;3~I@{x#87keTj7d`ZKWp%|M$Z|N0b*?*)H!H;yXu5s`<~_%I08DygVw1KfMO zygA*aZPr)T|C>7fy3MgjAqa$L8&pk3-+enj$bLLfTf_s$2ttXtI=?@K2R=bNa60&X zk+eWHd-jh6uD-rLh=!q|hP$A7q@)m~G;-*u4<-tukf5<~(@FQumuT|1z+Y*b7>LL8 z%0q!!SI_^!MG{d^X6sSI9fX_N?9bwV|8=u)6_p=gV6a7@|6c%#gM)*erQcpqd*jdY z8zhpAxD8GLDN{4k(=pc-z;=|Ro+AKsqv7dN1lbr+MhDN&{#}-su6zpxK9FMlC-6a& zApf@l@XzA`0S)Eq(XW6!P8ujA+8m&Y9zf^MsjlSTDz7GeHt<*DF5@j`-AC3eW=qy% zGASx*@qj=opbrS=$ysn)WR3tix`-RbS93$V8NN`!qYzV5ic%gPM-nB(I^asv_!-@KAFNnSyRW#fTaz`7 z=IDGJXR;e2n9JR>CG$if+fhO?)dJ8=$XC0NGZN*mcI!gCovATE(~Sf=XaeXfOMwu< zmzD-1EELD&v$C?7aPsn_;L1Z`-hO_J!0FuB*nm2nW*}1PaxD1zI_?g*{C^CYpy=^d zJa+3ai491AylHS+IyzBi*B$n7 zf3C8d`4Tm9Pwp5b($g>?>%dt;lu|}UhRJLO(?fqC3C)g%QW8&5agu3KI+^Wvez<($ ztu+yT$h)o+u-|*i2nK;$r6(SzrKjhU(W9=Y4$itW+$YPbJE;#gfSN}P629dT($Y37^gXDLl&Oyf1G-QV4nv z*BYV8J2&p&1R}Ow%9hm~*K0ESUuKHYq#OvZ0+**K-cv)FTulp-zn z%xLcJ?zuyZle%S&!`k3L1qCfFxs9ZLqg@uQ_$E+~f_?UzFIt*eoDRU`scGij}tfaJVZaepbn7H`%cma;DmgU3UwSJLmI}R2$)<060cP`X5%yYuYZ1FfXL$-p9FMQA2y*(cCb$0tUojF) z$5X$r_E}$FXEtgM>|2=EsVrI*Mew`SWv}g2#*KZzPy%wbASUK9Tyi>%HWlD zzi04i+~NuW0paTUy3}e_2*j(t@>r~ZYEkIqh725Yg>w0%+0Uf*F58t*1sPbMJOUHVd3V&NtE*e1rjW(;*X#@zd$vyt^PFxD7+eRg zgAkne{q=1E$mLr!9Q)qyW_AVZgD$~zt|p?Md~RSK<3JxOy28Ohv*+dncB)?MAPq0g z#|IlxB{HF3q$jmP$iTp$RA>4goOyi>Zew_OIGM{iwn@g7014d#k5Qiv933!iG=;k1 zyT$dPBC3$--ExzC#p?N-&`~0AHRu5$U48u#;1d94w-w;}T)udFT&)dk39GksJtBJ7 z5U~m0`ql9&5+NI^2k#@h|7ut0B&AIsb@kXcx2->mYLy(xGiN zlLq3en&*fOH+8zrsIAzKLj$Cwu>4F|-0142-b32~q4}Bs)e9|7q2%0*Xr3NFzoaf?7 z3LAd(8TRn*o(Obx6f`vYHU}H}1kgW)ms@ZE@};+{?d<}@?srzzyXZ!=_#fGz*fA>^ z4vcvY*VNi~Q5`|p7~o8TlM{P_3BzvD8&~CzI5cXnop>2OGq2lbyMzEkEHWx8f!PH6 z*y>oRt$dvwt*}-m3!Lq6ot-oif+OAkn1@T?jKXTpsW1E za|wgl#*i*}Q9(Vp7@_R#Z&I$Vz1ycC&tGmcDV3{7*qn~+YNJlw-2An9^gb?|*5p?s zXpo%LE;YNlB#Cl4h@JQ7K~VAM&!0ca$|C3H)MNp8;QTju*y<@CqT=E8Bv~{~Pt2np zi!p1h6p_Lb6GNJ6DBhBNiDUJ9vE?m*hDP6$X#locv#{T|S*hLZl_jmsTi2mgdb)3EZV*5l0E#hLpHe9!4=>O~E%HyHh z`!FdbT1Kuxg(h08sVv!L$h6p^>`No}GMKANw#K-(8zTxCWJ_hpMIzg^4v{6~W*AvV zV@QM~`grozKiUzjNlC=Xt*0@ADkL`{A&ol%8{r|ADRVzWqPT z`hM4+P7Uq*C|6y^1&w`NLFMF7A&C^cgJ!fPJ|(4}vZC zqZ}usYXqis;G6bkjw>rqyseq@0FRV;$MbHNJqZ3EHHv z%b^2I5}mKecfh>;3+&wRme+O%BXr%7*lQ^)0OC^`KZuhQr|B{@o~ z-)u`bY~EV#-XzG^)6)a}@hF>|;8vG+>~|b5&?B0`CzW9j(TjzjS$y zj|glJ`IgY^fET}q$w)MV2vZ_*Xj3VCNtzS(`Mp|&-^iPxZFrhGMX|lT9Uv+G2gNHV z{F&&d+1Y2pmX!$E>(+KQZO~-V@@H;^$fg#gE#=hJlR_|yZ7x~7Bfv`J-eNrFXTosh z*qQ6t60VvqCvXz@`lTa!q2FYC#4+wxhp?t`hkP+o zP}zxziJiFqRcvR>&ddsEAo+wbruXBp6Q&|EMuQJdo5o5s))O`!Y6ME%F}VY`j!*V@ z{)?{M`y)wNNW_94FbSl~1R7@W?0cUB?H{QhUi&7K#WSTUi36Fa({Nc#zFN7 zZ$Y>s2?H1Wm5bOmT4W+O!mP{rW3TxV?s9r|GQr`w*Du0VCCfH)fP)rhu<%nUMX@KpgW5qyb!s!DSDkM!wZZ2 z21kih+>89QA*siSP0F-PfInBd)kCA4FFtdBCu`{o`szzs3vk>R=49Ls`&0K|Ilpl9iT)>7Xe4nv;YejkV!R)L7Z-Lyd0_ChoA zlfQAC!w_`%b~S*9?A-FY&woMjL0XzO1J7PvfEPgR^@{QEr8~eR!EpU+fM3;wINV}y zx69mWpjqf$f}i7s_~eV6k4nn(9{fS4O7^WO)T)Q+um zHEDLFMpL{aX%-s)?hO(AhJCL^`8_XYH5NZ<`n&<0*gIXFlGcL|Jv zp@fo?1M#q{ID_=AmR*{|hSt`i!jr0h*~XYqj8;a7GLn*#PSpWI5f2y%7kxmHO7>%i z2#ZcLCbM7*mf0K)_|o<|1{qzaNw2Rf0+VoQP`3+@j-bowSXzK$noPdU?6|C$b*;C} z3V4!s=&`_lOxWaHv+hLRP$)%=t?G(-ladiLsbWSIt%A!pHg=p zBBu#tGTO~e_WJef6bhy6>yGp&`6EYK9_oc@Xr$i@+H-*Q?wqJ|b-VRLb&;kM0g^vz z%D=_Psj6CNR*3p1s`uuv$ndrVtcA<{jb-W=-X)VrWe5Mc4D?EFBI3-8pwjaV<$CGS zEemL~;1{1A6=;!G7%tRRRqY-Lj|Mq3{h@#$X487LC@uG_v;(`@?4z36d$qW2N)`{9`jr>te%? zci(7C<%5!w`tgwUBD-e3koN7)l){$5pCot7N#2rE?3aF>c!Xxm=uQj%@Y9^xd~RAXS^kYg|B7{2f)>z&lskGEDn7!tK|^ zPN{giF(z_=_3kM05QoaMuqn4^o%y8ZSqo~-0* diff --git a/doc/salome/gui/KERNEL/pics/pref1.png b/doc/salome/gui/KERNEL/pics/pref1.png deleted file mode 100755 index 363957ecd5d8fbd2b955b70bb0e65003f0b66778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22045 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μgh(`iiyI$f9 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 Za)D)SLgWejGc^dQNAeGI9_YUL{{RzkwKD(! diff --git a/doc/salome/gui/KERNEL/pics/pref4.png b/doc/salome/gui/KERNEL/pics/pref4.png deleted file mode 100755 index 84fcdcfa193a4cc7ab80ec3126f197a79c7ffe9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15601 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

2?B^_NTdxy5%F5I4IdlE;o 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 diff --git a/doc/salome/gui/KERNEL/pics/preferencies11.png b/doc/salome/gui/KERNEL/pics/preferencies11.png deleted file mode 100755 index 08c9d434a08fa4b22affc3b149364fc81001d770..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27272 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 diff --git a/doc/salome/gui/KERNEL/pics/preferencies5.png b/doc/salome/gui/KERNEL/pics/preferencies5.png deleted file mode 100755 index b6746a917281750f0763eb6df7e5e42f4dcb0675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16850 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 QdO@HR)Nc`P+-T(jq diff --git a/doc/salome/gui/KERNEL/pics/preferencies8.png b/doc/salome/gui/KERNEL/pics/preferencies8.png deleted file mode 100755 index ea43d45639a416dbc904944bdfc920efd9568c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19542 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 diff --git a/doc/salome/gui/KERNEL/pics/registry3.png b/doc/salome/gui/KERNEL/pics/registry3.png deleted file mode 100755 index f44e2ec3a9323f90d9d66d4362664eb0d7f8279f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7440 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 a&m)MV7y8ScfOnoCki4{tR29VZ>;D12pU_bN diff --git a/doc/salome/gui/KERNEL/pics/registry4.png b/doc/salome/gui/KERNEL/pics/registry4.png deleted file mode 100755 index 98a3772b5373f1efca0177f6b1307e8e77a36f2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17550 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 diff --git a/doc/salome/gui/KERNEL/pics/selectfont.png b/doc/salome/gui/KERNEL/pics/selectfont.png deleted file mode 100755 index 04eff08fdd28a0678e67ef62819b56a5cd488f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23157 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 diff --git a/doc/salome/gui/KERNEL/pics/studyproperties.png b/doc/salome/gui/KERNEL/pics/studyproperties.png deleted file mode 100755 index af88317f1143d5fb59049dccce3630201ea02177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10469 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 diff --git a/doc/salome/gui/KERNEL/pics/view2.png b/doc/salome/gui/KERNEL/pics/view2.png deleted file mode 100755 index 9d48a09bb25f8c4f10be825e3cfc22d645fb5d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15859 zcmeIZS3pzS_C1Vx?3AO3O1}t56HugAk4Pt=v_K$4q=wKtp&c72QX@sWAT0?ANDBf9 zDgx4LLT^$-2uKMX^55Ry>-YRU-IqLM@4fb3bImp97;}#G_OXc`+a;b$EG#T+2KtZ8 zSXfTmv9O#9xo{5n=Xtvr8w<;SSPUNhW8wCkJ{cU&N6z2baIHn#l51n7$1A0Gr+D!< zpJ|`IIe78atE(48mDbtd=~u6sUGxzWQo5KQ;|_UvewTfu&K6%Otz?N^GsI4YGOg)` zQrI#lj+P@*UN2;9G~>Rji{6xLZ?=l#1aeyM(%9bAWHIo1pAJcL@4GLW)Lt}sgs*#T z^_&9Cp!6H&_gPr}Ew6i;b}*TUzxOh~Q|Rn>O6c&kY*Y>G#C`XMti&GGpSmyTv9s?vc!%ruLL;ZoBSBz~nv(^XcZ;DH4F+)o8F{vuqPQy*Ho( zp^K*65RRI=SbM*E^+DRD+nBb<;Fo-s3JRDqJmSN*3ylv=Wms7HPAN8*D}!+bP%o8u zq{=GFK_4a5a8!ASaNZj3xT}sSi+>V7TvW>wvKpkVnFlu*wW8RXy}!d%8f6KJ=QD}X zP9;zE(f;}~)D@WqG#)y!auq6-uF)4_ZVQ(3&H-!YnJQ+1WYUeEJbB`$;=WKFy0EK* zu2waSj2fR^kg^HVPP^19QPM0F(@C{(2Ia7F%Q>S6EG!Rx*s)7!bYrVuAxAxf$P@~? z@#xi2F}ki!d6XVR9v;S4S6iS`(lU!bd~hooM=ao!0t>rj@|x(C4M7|2Uj9F6IIs;I z9UjSqOO3}O&sSO8wf&N9qQctz*fO5ri@(s|qcf@=8)$*fThAMFZZOeo5=xXcVZ^4D zAN>2wv7wZrZ2vPvD~k%5#}PLstN(7 z$RHs@C%ow61lV~F0W-q(n&ArSqeruaK`QvQGd-1FU9mc7>un(BEYW=TG_eWe-iYE3 zXUzW~cYd)z0S0&+9tZO64=QR)l@zOi^wcHuEKHUb%(Yd!q-&2S-tGuq=4S9|fg8H8 zLrRNUV;26Q=cgaCu>5vT&wgs27bo8GNX^0qitfNjvhga~5yN)V2B|6VOgWIb9P6kV zYao3Lghr#sDxKdIKxIUO3?8q0*>j~*(3P#zE~5%w1ZQUg*gLDr=!f%p`F4xv><(_v^6;|he!F;3H$xabmT z-7e-1-&_ri;|8AygUJekE2aI~^|bFQ#}-Qri4NysqxIE+#m0g@+EVW-_Vv=@3I!%@ z73w@!=g@oNkc&T9Cp34+vBK9jRlx7Pz{flLWRjDqxtX{P3=TbR%|E(Wm zZPHdFYzHulUxTTDONSQ$3u}tR;PI4i+UHZVv&+ixid@$yH0#eL-IZZGtLW8LkNEoE zEsC`5ACqSSN@tSH%*<}dG{A{5xw~bWk)i*L9Bp~+B~pk1zKvjJ)x@b{LY(jz+5?Q~p(ztmTAqIWrTE&goI#&!hnC02CXE9}^7Jlwv#_HN|2Z-xR z>SRi@gLy<%bfVW}J^JIv2V4tW{4(R~yX{{0<-KNa;lg*+4F-m=C&C7P4U<>Mwr1i+ z8K9tlwNdWsjQpwXXrT4R6m``UrNPrV>u^}he{z=n66NpS)x#CKmy4A1 z?9>u!zC$dR7*ZOGA6v5zIY;f<57ta!!zF?mW$^T4=y8}RRo@{s(w`ZD+{|N^7yknDSi-RaIReFeoS} zxJT~iINaQ%ge`1@%=?B}fWcx-)8(q(xO$NvlGrS*RsV*X%1JLm0W^qsJUqI2c${Au z5t%ok;1xmJQIM39qFIc7LpJRaMl-{X_3}SD-yA@2fQIt5V{T!BeYgib zZD-APk!Ndvv#P3-cpLt#g9j%?m4?x&Z2ZATE}w6+@fWBqMrw0;W#xu=X6a^!HL2Iw zci)`WmL-0H#3Wd@bLW&=ZzZXBQ>M2=2`SdnQA-yYd44e~$L!=`WDWC;DX}tad4|F) zMf7+W3~cpkmFG477A7Lep<>`WpGtm(w|mf%WK=u!m?Ly07^*h zq@p?(P`yj$P-srLCTuydIq4{}$sIwP4{ETqwUuhVJ0GCB;G?<_a4y5$+|n|hk6pNI_4`0(UnRdpLlKg>)N8J=zQ~0tbY0`cpnjp=(4-|&icWw2 zmXsg;bpcJ^lh88A9FM~4I$N&LYnWE4jv*x-ZlK<68RRO1vwrtEP2RyeQ-FCWoEfy? zCmOU~pu!nOMfsm!&To)S6M&bYv-Lt5OOh zxv?|nh%wP@u|Vf}VA>H97CbY^muIRO-^S3LX)kLSe5MA(uymL63&IYs&`h|?$POOK#jetIf7b8PUMAZ>`FoEs-*Z!hI)Z0Ke`C|~2}n7nqdj;Q|i{v}4!cexPBrou#5EP;m4 zuzVeEpZyMDtR(ZOPJ+SU;hT2G=8^aN-nGwGCZ7{*vYN3bMb9uZ-=r&=Xx^QO^ayhRqS-pH=R_nh%UrNezqK* zB0^1>?ruPE&P>?IJWNq#>kLfe^68$?=LB#VxyNJV2Nw{1h`8^G1_Q-V&s=x`H^o~hg64i z)#wl|tlph=G)5{{U#+UEsdRkyOvC_u6mEnK+ze6AkyNwx&JsGNDSdiqv)nQrKR|BU zGwy%V4}{lCy=LF0^w|wC-kzmHvV9mfz3qNIBa2GfS?*|PFFY&CwqMgFE3G1d_iL9y-e@}mL*9URyA7MXLHkoIGo6m)R>%5z z-Y*^crr>|R3FRpJJ|rR;muOoP*^^%2Cl1N=f$R9LF5`&Cg%4>_e%pl(X%I=Zd-tA{ zYsr6Z@ndVg-JDeGJ&oUvV|8|N3MgHDN`yuHp5KI>%!%wDlisXM@;I&xp%-VD5yF|= z02TN-TS3(ujvHX4$33>OK~u_Mvgw^gtE;PhECv63lRC8(wAk*VB=1kTvwvhVxjUjt z+?mb2U%Z;;6q=i&p{912YuNTPVHF0T`~BnMgzLkluprdAZ8|o=x=^icxwzAu_RQ;+cuLS5ywlavfZfFm;$*Tjc@)ts+UW4=1_oTe-m zj_>@{nX5u7iQYD~H0iDF^kVj?P=*>r|L_c!ch104(BI+z0*1{<_@`Wt&4|R zM^iVRZ~(OFzHXih^Fr8Kl1SKZo94UQz*gGl!veSaEdK2JsV-rA_H??&Q8AgD%AFTH z35?itv%4x)8^yPi5WKLN6*lS-}|>32-jI=y2$Fb zXAgW-Sli{lyLj-_o$U8U8KUqFYxS+eS=R>a5jTGaUTsh30w#nDt#w~*Ca-E26mhV{ zGz*mv^M*iOvbIjcz(*P^ESav@X!BTI?J&zup_MU2c`A@nMKm^kaOT6m^|hR5?R(R7 zp5?)y#{&3wNWsJ>1}_*D{iNrUuNl(w^cYN)8IQ02hx(yjXZ!G z3=o=*JtGdsr>z14swV_?m&_byu+e~R-7;~F?qlD{#zulX{r&xbclkA(alpd0WLQoC ztMOpVVj>l9p*YZ9(BznTY_O+8})0XLoZP=QCfoF z)Rjy{uT|w^8jNYioH!|Q4jbG2c3yCKxapuqggTd~#qPNa4W2Brsd5c0Ei=c_YKHBw zp<9bol#%Qc0B<07meH=c5xV|MJ(kWoMF))a673jv2^9&IUkqy^6Jl#BLZkak{~sT;2_;@%lgv?sWD{ote~<(Ibriul~X(FxAReP?7Mf)2i<*J=HzgGTqH-xxO|EG;d) zeNgK;E+2Ig4nP%C*Sv^YMbEJzmyBe*Sp+t`7 z#kAgrK)-zX;`haF?6YHx@!$})oP;rw`65y_L8)~;*ruumt$x^9o5b$zh48C~JO+sG z&^C2Yt(qw9xhs|zUci0dWtn$+FWRN+L%yljadkKK+XC}wNej^$$DOGaMJhJU!^a39 z#eXq+Kit#Cg3Ht3nMmgGZs0I97~T@g1&~(+rR<_7_%|^jF>%;C>d+RHqiPAvPdjV< z34);sJ*?Qj#~D6F`7D0+;aX1c6xzQ>MGuIa!v_qS8e?i>=G)8jiT4ltEr2cYSbI;7 z%^cJ#Q5!Ix3w*Mrg;i-m<*kB%^rWP}4~_wU8VZ~y%9O40dN)3aVzy1EW@Tad)q<7} zXywBlsZzp{4Ml-YE-vnEJ^b|xX|~%~7}L;yv8(@A%R9zuRd2LsFFknT&#pFVA~A>g z>oxj|(xI3e_Tm2oPX?w>g>11&L#o9+_9?YX+5SEKzeL{wd_X>E)mj=_Yf%h$pK1)v zA!(TTe97`A*)%ba*A?hxa7b-Hh8JnU1!qsJCsY5~oeC>YlZF*fOxS&y^g2FXk4mhQ z86{R)nwx(bs5Fy?k?gccTW!b{bV;@Ax&Y3mK^J($yR>YkcdJLsRB76;O76ZKV+1CM zU}(7Grb_$;6*XL51jfx`7YmS#cr_KnL_0d`P>%{ zG8_9drynwJQH3{hqlDyf8e$!$ugb?+1qq1GG-)2C+Rq$mlU`a9{6Q}K4MFq)8`m7s zL3st|j+FPcC7~L(0{eAtP$&F*$fD_X1=U0Hf$LKmWpV#CNpHVnRH$)e6Rc@354OA? zr6D^gA9%=52(DxACJ4#OnsVMYNrGo)D#HslfjlkWZB=rfc(mDx+?$QDd}1#Y)0{7b zZ!FLb%m|{$6E_ZcfsF<>HjeAb4Xd4sSc1|=iF(b^Y-(^pj+=M?ld?IEOoU)}sS`1v z#EilpA{oWp{hyUXJDf6HKGxv&PyS;0h+Z7+5HcX2hbhBb7X@#3zl`s?owH!OKLN*0 z8~Gr;yzqY_9fLj&)=S{)uXOHIod6dX?fd)t*LYCnx^p#brNCwCa8l2XkP*nhl6i8> z*vdP$yL>}N9S*pG>qwu&pRI*Lp#mt?RRO(|yFaM`?tNeX$ywvQW`~broSZhu@@X_(RgNJ-E94s*%j$M#?7_kcp z*wkqPxJt%x&LvJRP8~$J?%2^xxEc75~Lo8c};uf|NXgqxX>^Z5)iRXE@wO zemjVfTf7g*1aH`6(6}dZc{WD1nq(x~V4*bS^XX(`Ps;>@upPhu?8k*s9xta1U_;8h zg*vUwZxNF(r5*nKl(^g@IF0@=ax-*7Kx6Z#@MhKt;1td-&hBd}{;3~6lwvw0C;fXh z_{Vn5OF)+Y{PWzUCsU${3SQSF0%)lSK3JSnU7mHqdNMT@He^LKZPTnCr#l2*)J&YW z4&Nxc!5E)Du>$V=^J$Pt*txftSx7tf5gXp9LJloRnV#T2jN81#MB&eNjX6E+NjP~> z4F7}Us{5p5n{FA@&qnipFFx<|E`(&b=DAMz?LOYr}nrrBEP;k(DQRw!LI`Ikyk!A++0BU(mTj>x{dAOt>w-- zQ;F@}TXwleiF%k#VA*qrGZ1g!nfYx1V8FKt zMyY#1Y&l|@`xk`={8TrWjrRp3_Z&(DlG8j}f()PY%Gf>$auvuKRpM7^&FoY;^oq}~YL zu`of^!#AMR`o(hs=;OkaNHfEPlnJrl`m3U%3ZWvq?8c_;7uC%U4dBN`)pimxIyegV zg9lip@*N~GKO;Bf*F}TpS>W>}S;eC(d$uy^Sh80Aj9g$~V2P)&oebDI^xIN*i4q}X z<5`hwA#J4JF;f9yl|{2|4EgNRoym1DI@JhNekCO&;KB9=W7Y8Yx^XxA*TPW&qt5B@ z{sJ9`byFjnw}D6?+|?!Fo2twIzMjbg7m5LnTnAGIa8Oy=0AP93MOQhjTrQnc>ka``Dsq&m3d> zg9enw_L@0>0ui>dQjSeP?vZ)1iH2uMu+p6^blV&8j7aTb*yf=~l(tm*5vpl4YBrh& zQp*D&cFXf;HW2>@cYnAUId)RBYT^{7_zzUxs`TJTEtb4Be*E=`C`5S;(6RHiJJ z(N>r5QTi)to_;-lu=kUNzpP7>T4P-Te%ZjE((CQMwZXT4lQs6`wSF@b1 zL1dWpBfbYg!sv~^xtut=%Oy2@EkZBB%NYsNoGn72ulfbmGi8kbGJu!v|4LH0;S}`Biu=OS5@JKo8{YdgFFK)7_eLNUHxDlXNxa<@HEbeL|GZ@cPxWn9zLs5F5Y2Z zbTb_`d3A-X)chENGE&sbp6^Q2a;VIvUY2j&ZubwU3Gx^f(QCKz9J9o)K(yB~9}yc6 zua5lSvp;{E=lkDwrqyEg+UaPpakY8W(UKVC#NeN0MwSdeUJ$Be^Ld)X(O$YVcMPb4)5id^ibU-CL3ageaCQvh8MwBdxTP1%Z3SG?KTYb+va ztHjGDI!|cQprS*`DH?Lsgo3O=`Mr~QrUNkA9J5}x~ z%@VvcIJ+m((po}&?V8&!Jq`Q#hvBLn&R_4?2~qbVr!=HyC*Mxj(91}$W6Mg$X$anM z@7l8)?RF#A6Fa&(;`Y|P-)Vp}=FO1JN6`-A-ouIu-usCZylwu}XhQ%c^a+H7{BUyo z>m72h&b+EEky4g_CeUP8e3T#Gm!72mqpc0QzQ06W$6Ebq&AvRxHt_t+`G8}#VMN!5 zd#J(}FHRGWDdU)fc}M8oC=y?PKW3s)2jF~^H_5_7I9q~MrxK{iY0oKhV9$m;Rw<+F zt&YG{elJnEq3V3!Zma?VX=*f7Qyi0L4p`Gi#6#T+oA=FZY(6*ICmIimac@ta9vei? zxJRCbJx}|TnaM*QlK(4n@b@lx013I?=u$}70B{OF{*M-*^}=NsD2hi{uY=~HaVszQ z_sq93QbdEHp<%TrO_5DN-5OQ>tmV?5kPlo+qY$X@mVQTF#MWXrPzw(kQO{EHrmT>$ z3h-ZrZz#MTv+l^T3S6EiS)stO>}~P$MKCtjmsIge$DpA1H`0%ql7&Mnr@SL+!? zqVYYS_`?#G$t`EclEC;(2zn|P!%_PKVb`JN*Ro3)n4A?{ZaR!|rP?Yr;a|*I^7M(> zm>%!gff~0%4W6?Eo|KW0vvlMV)#*imTYC*x_{r2Wx)p~92T1M)Kt9BF@~I#T$-`r+Q)6n^ zrz2_nY}^Xatl&eg8*^YY+W5B_aIX!u6U zLEC4?`t>hS@QL|$US;t(*6m$ zXkEG5-!UZ`^t%*KGDKV#qbkIUu z@*))F=>cz!Y@c)rVfTA`B0E(lrS1OtvlkNh)hx`+u3mxxP>e_3txqCCcvb&0IH`Gb zb6g{Q&*u+O=M*#cAatcYB!8Z3Q?(pU5O9>LvUiXUBFJI~Or50zs+9_bZQA zu|HF|9e+xd+edB$#^YrkGfQ8N5e8FwUDK20b=tWJR8(%W!r=OVt4cJ|B`#Gl3+W#9 zIwLC@5E2GjNBsRr!IN(9lyN0J)8mt1GrPvMh?!HN#Hq(dQ63&;UWXfr zjGb|B#Qe`>9*ujygC`n-*K4NsLpqwH)Z zQ2fz%asKT%3-qyE=-lAgMD0iK>HP$}vUiew#C(>dj6W^EM5(k?-e=|a3zcKWfLcRJ zRNX^V%HaJchwP~Yh?NyVnJ#-FDq=d{k73NAWx^zel#~4X|Ni4KJz2@0T&E}Uvt&Fc zN z8jzWE{QUV?S6BDZdiSGj7mFIg7B6ld}c`&grn?PMIcS=+%0lg!!x5;y;@SX|oPA zaFa*WTi66w=sxI-Wti%iN&t8Y|9Ax8e*HZ;YN=}fA!s`X6tm-Md=%K8fnE+Qc4v)C z6KV#daoj+Umx60F}xRim~PU!$FY-0h#dz+u!e;uFj z3dgx1c1wmi(qC)(&LBR&On7?!Pm^J2$O3>im?*C(1~>`_t+GN`mG}QJpyz!@bW`1C z-QiO^9iF(?Sopq~W71_41bPBUMf4h<*QuOztKq+zR!QIAEPAiBP4kz0(jgx>(R}&U zA?TS3y}?!|_fGt?h}|3OMwkAoVm1UP2q2L!A>*E=#9B~rL{tGOYCQ&n*^tzvpc}k$ zOG`3yV&y^b(Sy^+tI->f&$Ig21szEg`&M!^-~^Dmopo6=Vg|l2#XUYR6sH+N3!L13 zDU~`VZL7B%fpI5j2i7R8yoY0CTw;$RC2rTgE1>IHz`S(>d_mu4!*djl>~s>}3};5H z)7(xjGWh#!)q++B)?VRaL2+gnY1_}EiY;wc;H?rlN z8R)^1&Vrg?+wAKTH*cDD-eu)h%wpB{Q_ij&^{iA|1=>`pPp%3N#)YdZ&d|gQz6Q1z zrHf14>x=o-a>Je#q{gp05Q7zVz^*p3|V7_ad5WNoxIjdcF1pq%$w20KJ0mr00v^0{ogKw}^IA8X>?Oz0*uBGyl3yW_Co;b0chzujIs(l388a(6yV z572|5A~(NYqPq{cQzp`>k}d77@dGG;XPTrr^J7$1gQq zLOe_;#g~9}Q}wD`fsPMhm|C~=Z_j$*r`V35Qd6r0_e+M(!6UX%utjrzq!05Sx@{BG z+xf>zqtU@n%3(MofRFs~IaXv?Ox0P>qsg9zprce^niSgJIieu$g_4)m8nzT*vuV2qB*T&GNs$7gvJA4|& zMMmlFKl_C8Pet20c9gvOVJ#}s+Mbk8I`%}a5KM4PanSU>LB`ac>xgU)UGF!&EYuL?^%*rA0%R=DINA9e~mc#r&j!68rYGWhY` z0G&#~akbW4@Y$8?Ff_I;vaGDok01Bb%5L+bXlj#C@Q`?_TB{Vw{~bb!pM1m%Q-dGS zcV#u;W1&h4L8aa}FVn_akZE=Q7tK1mliAn`IY>Row9sT%*{u|ND8sSMy|cqo)&2hV&!${(WF(1QP_t}o z3<5>&7pVsPPD+!uFH3}lL1Q=st)97K{^(H05+0bAAI=T%@Hedj47ht7^1doDa!{m!g`sbcsS?L_U!4gEBzIJmp5+4 zico*OlcluWfRzDC7GRxgRqi}0JaZg4Z}tl|K|WCjmbiqmIiJ?yUVc>UfS9QB#q|iT z4p&D`9$Y_E4y?9McCUJkjrVJd=PgOpI@v3veoL!LQ|%#GdOd2h=1l%8@jK=(jf(0~ z`m0}K(A7BqG21#52kSQ@AFQFi{ns>hH*bj+yR^fqK;FcIjCzq4`0DRF3+vN`fe1=_ z#@$B}_g+g%%2-*sV07d8ic;oN-Xt(o6ZMSJ@sFD{Rd`fg{#}hW;<~qQ7{^<%cIFqk zN*r>0&Q-j`6=t~}=+@sMHbj)S*=T1U?fm3)zhK_4-sywxBN{Dh5Im|;6}U5@GDZl_ zOS@xVJlPraGr$ThPO|5!B^gpFpoX-_((P9@E6J%v8TWe!K0bf>&~dYdklQt4-JPLg z>h@y*VRe-JzN1;+|@i?@+GX3GN!X zcZDoAu%Ef&ah{w8$yYU7`|#P(B(oN%@0+CZw%?;zRJ?wdmwe0$3EB9rIGv@Ry`sM* ztj7V?wF*97>JGN#eP7(w6#!Hv%K-&LyB7g5d$Pq?k7|+*j+YO4nsAPTr|i_rbNaeY z3(V!*bsCV~1{)BXeX(p*!vs2Jk5tUgKU$us8ENY5%r#ai2?Mf9Us>pT1!3QUX9d}+ zmFuM)CVc$~bTtLv?~i~rr0RWNtB}$ZvTxR7AD+p78F)0}%XR&~qAH*RXU0?(jaw=2 z63F<2q#=+@*5)^LM_2P;iJAwcv9a$`VU|U!8eu?j+++WU^qU#QCZQm0iH4&cI)hhV zh)7^fi6>vwL-J$uT`3B=w~od)>-!ql<>O9;Pnz-?DIXcI<}5xBszz?DEDDt%AWzFO zXSVhA-nLN#2ji9g^hx+H<--)a6N@OtywUl*-gWm@7s<;XdM3<@(KFK_Ms2pP2|9Vb zB^|MbI&F{gH8x;l9Q+5uK*COqZ_+XL!oAYjm#YS z+reR1>PX72-${w{H=EJ>>IaY@Cw@RW_SWF7w9Jx^^26N|nlX`|U2i#d=82!6o-~D^(a*GM`r4+%}&_pTkEFR)l46nu(;6T{~NKi*ev1$w17q|f2cUcMea#Q=JZdmRXzlrdJ?F7agl zNvGr)K#dhRurmn)L|Z-`7l7kGEZ6^twxQizgv+P55(6WUnV0f4%s5wof8@dP8IW#sHfSqh_eU;D|BwI$hf=7Q1G<|>o zZx7c|V6**`Tn$hfn%c!xSYubP0h_cPa74(k*vT~R-~|RaaQmA)sP1w0(1$C%enDfF zy?ZIC@P(r#N~q=F2=>4dNH!!Stc& z2^Q=1p*1xYcrb^tBagvzhyDL)~WU=_=ylZ;=tCS15! zo51}%iZuf$ky?z&P40GvY3AX80rs+wdZD{+jvE2o(M}ynPKuq{AbBUT=Cb$j53zoV z+4|e^c11VmDm$NUn5Jk@zZWVEBNh!4qMv(uR|XqL>vqg&@bdm;W<_doZZBt%bl zMVC42>xxIVyIp`3kM`XpiwJVN%MFAFq!1l?`mpiF=5m?FZV*4tHFp!8(||hO^gm)} z72t0#f!rmeUZ>9{iOl_kEvy{B{EBdSDs%rDhR4i$&;|cBPA;>oBJDb$>GC-j8#K!6 zXH_9#bjf?l%O%Tyjp?OG?#kZ!>2F)AL%usO#lD@ diff --git a/doc/salome/gui/KERNEL/pics/viewerspreferences.png b/doc/salome/gui/KERNEL/pics/viewerspreferences.png deleted file mode 100755 index 50bea963f306b85d1eb888e800b68538eda736d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32191 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 I|J2q00jwm6y#N3J diff --git a/doc/salome/gui/KERNEL/whgdata/whexpbar.gif b/doc/salome/gui/KERNEL/whgdata/whexpbar.gif deleted file mode 100755 index e677dc6f1f61b69ada037436772b0b36f587e71b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmZ?wbhEHb{KCk{F!4Xb|Ns9P7#I#5H~=ISf3h$#FfcLb0ND&6c?KqtDg7%?zvW*% UXUnbb&G+{F=5Kq{A;Mq{0QPGbMgRZ+ diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf0.htm b/doc/salome/gui/KERNEL/whgdata/whlstf0.htm deleted file mode 100755 index f16a7e0a5..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf0.htm +++ /dev/null @@ -1,48 +0,0 @@ - - -Search Words List - - - - - - - -

>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf1.htm b/doc/salome/gui/KERNEL/whgdata/whlstf1.htm deleted file mode 100755 index b9cf39401..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf1.htm +++ /dev/null @@ -1,41 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

-cd
cells
change 1 2 3 4 5 6 7
changed
changes 1 2 3 4
changing
chapter
chapters
charge
check
check_version
checkbox 1 2 3
checkboxes
checked
checking
checks
choice 1 2
choose 1 2 3 4 5 6 7 8 9 10 11
chosen 1 2 3
classic
clear
clearall
click 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
clickable
clicked
clicking 1 2
client
clone
close 1 2 3
closed
closes 1 2
closing 1 2 3
clusters
code 1 2
coefficient
coincide
collect
collected
collects
color 1 2 3 4 5
colored
colors 1 2 3
column
columns 1 2 3
combines
comfortable
comma
command 1 2
commands
common 1 2 3 4 5 6 7
compared
compatible
compilation
compiled
compiling
complete 1 2
completed 1 2
complex 1 2
component 1 2 3 4 5 6 7 8 9 10 11 12 13
components 1 2 3 4 5 6 7 8 9 10 11 12
compose
computation 1 2
computational
computations
computer 1 2
concept 1 2
concerning
concerns
conclusion
config
config_files
config_mandrake10_1
configurable
configuration
configure 1 2
confirm
connect
connected 1 2 3 4
consists
console 1 2 3 4 5
constant
constantly
construction 1 2
contain 1 2 3 4
container
containers
containing 1 2 3
contains 1 2 3 4 5 6 7 8 9
content 1 2
contents
context 1 2 3 4
continue
control 1 2 3
controls
convenience 1 2
convert
cooperate
coordinate
coordinates
copy 1 2 3 4
copying
copyright
corba 1 2 3
corner 1 2
correcting
corresponding 1 2 3 4 5
correspondingly
corresponds
costs
coupling 1 2
cpp
create 1 2 3 4 5 6 7 8 9 10 11
created 1 2 3 4 5 6 7 8 9 10 11
creates
creating 1 2
creation 1 2 3 4
cross 1 2
csh 1 2
cshell
current 1 2 3 4 5 6 7 8
currently 1 2 3 4 5
curve
custom 1 2 3
customer
customization
customizing
cycles
cyrillic


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf10.htm b/doc/salome/gui/KERNEL/whgdata/whlstf10.htm deleted file mode 100755 index 93b7967a1..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf10.htm +++ /dev/null @@ -1,46 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

-won 1 2 3
word
words
work 1 2 3 4 5
working 1 2 3 4
would 1 2 3 4
write 1 2
written 1 2
wrong
www
-

-x
xml 1 2 3
xterm
xxxxx
-

-y
year
yes 1 2
yet 1 2
your 1 2 3 4 5 6 7 8 9 10 11 12 13
yourselves
-

-zone 1 2


- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf2.htm b/doc/salome/gui/KERNEL/whgdata/whlstf2.htm deleted file mode 100755 index 6c5d8e22b..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf2.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

- - -d
data 1 2 3 4 5 6 7 8 9 10
database
date 1 2
debugging
default 1 2 3 4 5 6 7 8 9 10 11 12 13
define 1 2 3 4 5
defined 1 2
definite 1 2 3 4 5 6 7 8 9
definition 1 2 3
definitions
delays
demand
demands
dependancies
dependencies
depending
depends 1 2
derived
descending
described 1 2 3 4
describes
describing 1 2
description 1 2 3
descriptions 1 2
design
desired
desktop 1 2 3 4 5 6 7
destination
destined 1 2 3 4 5
detail 1 2
detailed 1 2
details
dev
developer
development 1 2
developments
diagrams
dialog 1 2 3 4 5 6 7 8 9
dialogs
differ
difference 1 2 3 4
differences
different 1 2 3 4 5 6 7 8 9 10 11
differs
digital
digits
dir
direction
directories 1 2
directory 1 2 3 4 5
disable 1 2
disable_flag
disk 1 2
display 1 2 3 4 5 6 7
displayed 1 2 3 4 5 6 7 8 9
displaying 1 2 3
displays 1 2 3 4 5
distinction
distribute
distributed
distribution
divided 1 2
dockable 1 2 3
document 1 2 3 4
does 1 2
doing
domain 1 2
don 1 2
done
dot
double
down 1 2 3
doxygen
doxytag
doxywizard
drag
dragging
dramatically
draw
drive
drop
dropping
dump
dumpversion
duplicate
dynamic
dynamically
-

-e 1 2 3 4
ease
easier
easily
easy
economically
edges
edit 1 2 3 4
editing 1 2
editor
efficient
egrep
either 1 2 3
electrical
electronic
element
elements
empty 1 2
enable
enables
encouraging
end 1 2 3
enforcing
engine
enough
ensure
ensuring
enter 1 2 3 4
entered
entity
entry 1 2
env
env_
env_for_launch
env_products
env_vtk
environment 1 2 3 4 5 6
environments 1 2
equal
equipment
error
etc 1 2 3 4 5 6
even 1 2
ever
every 1 2
everything
evolutions
evolve
ex
exact
exactly
examle
example 1 2 3 4 5 6
exception
exchanges
execution 1 2
exist
existence
existing 1 2 3 4 5 6
exists
expandability
expanding
expectations
exploits
explorer
export
exports
exposes
extended
extensions
exterior
external
extracting
extremely


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf3.htm b/doc/salome/gui/KERNEL/whgdata/whlstf3.htm deleted file mode 100755 index 42e8e19fc..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf3.htm +++ /dev/null @@ -1,49 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

- - -f
face 1 2 3
faces
facilitated
facilitates
fact 1 2
factory
fail
fails
false
fast
feature
features 1 2
field 1 2 3 4 5
fields
fig
figure 1 2
file 1 2 3 4 5 6 7 8 9 10
files 1 2 3 4 5
fill
find 1 2 3
find_in_path
finds
finely
finish 1 2
finishes
finite
first 1 2
fit
five
flag
flexibility
flexible 1 2 3
focus
folder 1 2
follow 1 2 3
following 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
font 1 2 3
forget
format 1 2 3 4 5
formats
four 1 2
frame
framework 1 2
free
friendly
front
full 1 2 3 4
function 1 2 3
function_name
functional
functionality 1 2 3 4 5 6 7 8
functioning
functionnalities
functions 1 2 3 4 5
fundamental
further
-

-g 1 2
gcc
general 1 2 3 4 5
generate
generated 1 2
generates 1 2
generator 1 2
generators
generic 1 2
geom 1 2 3 4 5 6 7
geometrical 1 2 3
geometry
get 1 2
getting 1 2 3 4
give 1 2
given 1 2
gives 1 2 3 4 5
gl
glossary
go 1 2
graph 1 2
graphical 1 2
graphs 1 2 3 4
graphviz
greater
greek
grep
grouped
gui 1 2 3 4 5 6 7 8
-

-h 1 2
hand 1 2 3
handle
handled
handler
handling
happydoc
hard 1 2
hasn
haven
having 1 2 3
hdf 1 2 3 4
hdf5
hdf5home
healing
hello
help 1 2 3 4 5 6 7 8 9 10 11
helpful
helps 1 2
here 1 2 3 4 5
heterogeneous
hide 1 2 3 4
hides
hiding 1 2
high
higher
highlighted 1 2
hints
history
home
horizontal 1 2 3 4 5
horizontally
host
hotspot
hotspots
how 1 2
hpp
html 1 2
hxx
-

-i 1 2 3 4
iapp
icon 1 2
icons 1 2
idea
identification 1 2
identify
idl 1 2
ie


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf4.htm b/doc/salome/gui/KERNEL/whgdata/whlstf4.htm deleted file mode 100755 index c8ba46115..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf4.htm +++ /dev/null @@ -1,47 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

-if 1 2 3 4 5 6 7 8 9 10 11 12 13 14
iges
ignored
image
images
immediately
implement 1 2
implementation 1 2
implementing
implied
import 1 2 3
important
imported 1 2 3
imposed
impossible
improves
inc
included
includes 1 2
including 1 2
inclusive
increasingly
incrementally
independence
independent
index
indicate 1 2
information 1 2 3 4 5 6 7 8 9
initial 1 2
input 1 2
insert
inside 1 2 3 4
inspect
instalation
install 1 2
install_binary
install_disk_space
install_source
install_wizard_caption
install_wizard_copyright
install_wizard_license_info
install_wizard_root_directory
install_wizard_version
installation 1 2
installation_mode
installation_script_name
installdiskspace
installed 1 2
installing
installwizard_root_directory
installworkxxxxx
instances
instead
instrumental
instruments
integer
integers
integrate
integrated 1 2 3 4
integration 1 2 3 4
intend
interaction
interface 1 2 3 4 5 6
interfaces 1 2 3 4
internal 1 2
internet
interoperability
interoperable
interpreter 1 2
interval
introduced
introduction 1 2 3 4
invalid
invoke
invoked
ior 1 2
isolines
ispython
item
items 1 2
itself
-

-java
jpeg
jpg
just 1 2
-

-k
kbytes
kernel 1 2 3
key
kill
killall
kind 1 2
know
-

-l
labels 1 2
language
larger
last 1 2
latin
launch 1 2 3 4 5
launched 1 2 3 4
launches
launching 1 2 3 4
layer
layout
ld_library_path
lead
learn
learning
left 1 2 3
legend 1 2
level 1 2 3
lib
libcosnotify4
libhdf5
libmed
libomniorb4
libqwt
libraries
library 1 2
libstdplugin
libtcl8
libtk8
libvtkcommon
license
like 1 2 3 4 5 6 7 8 9
likely
limits
line 1 2 3 4
linear
lines 1 2
link 1 2 3
links 1 2
linux 1 2
list 1 2 3 4 5 6 7
list_of_prerequisites
ll 1 2
load 1 2
loaded 1 2 3 4 5
loading 1 2 3
locate
located 1 2 3 4 5
location
lock
locked
log
logarithmic 1 2 3
logger
long
look
looks 1 2
lost
lot
lower 1 2 3


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf5.htm b/doc/salome/gui/KERNEL/whgdata/whlstf5.htm deleted file mode 100755 index ddae7146d..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf5.htm +++ /dev/null @@ -1,47 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

- - -m
machine 1 2
machines
macintosh
macro
main 1 2 3 4 5 6 7 8 9 10 11 12
major
make 1 2 3 4
make_dir
make_env
makes
manage 1 2
management 1 2 3
mandrake
mandrake10
manual
manually
manuals
mapped
mark 1 2
marked 1 2
marker
markers
market
massively
master
matches
max
maximize
maximized
maximum
means 1 2 3 4 5
mechanisms
med2home
meet
memorize
mentioned
menu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
menubar
menus 1 2 3
mesh 1 2 3 4
meshes 1 2
meshing 1 2
message 1 2 3
messages 1 2
middle
min
minimized 1 2
minor
missed
mistakes
mix
mode 1 2 3 4 5 6
model 1 2
modeling 1 2
models 1 2 3
modern
modes
modification 1 2
modifications
modify 1 2
modifying
module 1 2 3 4 5 6 7 8 9 10 11 12 13
module_root_dir
module_src_dir
module1
module2
modules 1 2 3 4 5 6 7 8 9 10 11
modulus
moment
mouse 1 2
move
mozilla
msg2qm
msg2qm_root
much
multi 1 2 3 4 5 6
multifile 1 2
multiple
multitier
must 1 2 3
-

-n
name 1 2 3 4 5 6 7
named 1 2
names
native
natural
nature
navigate 1 2
navigating
navigation 1 2
navigator
necessary 1 2 3 4 5 6
need 1 2 3 4
netgen
netgenroot
netscape 1 2
new 1 2 3 4 5 6 7 8 9 10
newer
next 1 2 3 4 5 6
nf
nodes 1 2
normal
note 1 2
notes
noticeably
notifd
notification
notion
now
null
number 1 2 3 4 5
numbers 1 2
numeric 1 2 3 4
numerical 1 2 3 4
numerous
-

-object 1 2 3 4 5 6 7 8 9
objectives
objects 1 2 3 4 5 6 7 8
obligatory
obtained
occ 1 2 3 4 5
occ_version_major
occ_version_minor
occupies
off
offered
often
ok 1 2 3
omg
omit
omni
omninotify
omniorb
omniorbdir
omniorbpy


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf6.htm b/doc/salome/gui/KERNEL/whgdata/whlstf6.htm deleted file mode 100755 index 88a38f9b1..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf6.htm +++ /dev/null @@ -1,43 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

-one 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
ones 1 2
online
open 1 2 3 4 5 6 7 8 9 10 11 12
opencascade
opening 1 2
opens 1 2 3
operate
operation 1 2
operations 1 2 3
optimization
optimize
optimized
option 1 2 3 4 5 6 7
optional
optionally 1 2
options 1 2 3 4 5
order
org
orientation 1 2
origin 1 2
originality
os
os_version
others 1 2
otherwise 1 2
out
outline
output 1 2
outside
overloads
own 1 2 3 4
-

-p
package 1 2 3
packages
page 1 2
pages 1 2
pane 1 2
panning
parallel
parameter 1 2
parameters 1 2 3 4 5 6 7
part
particular
particularly
parts 1 2 3
party
pass
paste 1 2
pasting
path
pc
perform 1 2
performance 1 2 3
performed
permission
phenomena
phrases
physical 1 2 3
physics
pick
picks
pickup
pickup_env
pickup_env_flag
pickupenv
picture
pid
piece
place 1 2 3 4 5
placed 1 2 3
platform 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
platforms
please 1 2
plot 1 2 3
plot2d 1 2
plots
plug
png
po
point 1 2
points 1 2 3
pop 1 2 3 4
popup
popups
port
portkill
position 1 2 3 4
positions 1 2
positively
possibilities
possibility 1 2 3 4 5 6
possible 1 2 3 4 5 6 7
post 1 2 3 4
powerful
pre 1 2
precision
precompiled
predefined 1 2 3
preferable
preferences 1 2 3 4 5 6 7 8
prefix
preinstalled
preliminary
prerequisite
prerequisites
preselection
presentation 1 2
presentations 1 2
presented
press 1 2
pressing
previous 1 2
previously 1 2 3 4
print 1 2
print_env
prints
priority
pro 1 2
probably
problem 1 2
problems
procedure 1 2 3
proceed 1 2
process 1 2 3 4
processes
processing 1 2 3 4
processors 1 2
product
product_context
product_description
product_name
product_script_name
product_version
productivity
products 1 2 3
products_directory
profile
program
programmatic
programming
progress
prompted
prompting
promptly
proper
properly
properties 1 2 3 4
proposed
proposes
provide 1 2
provided 1 2 3 4 5
provides 1 2 3 4 5 6 7 8
providing 1 2 3


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf7.htm b/doc/salome/gui/KERNEL/whgdata/whlstf7.htm deleted file mode 100755 index e07341a4f..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf7.htm +++ /dev/null @@ -1,47 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

-pure
purpose
purposes
py
pyqt
pyqtdir
python 1 2 3 4 5 6 7 8
pythonhome
-

-qglobal
qm
qt
qt_version_str
qtdir
quality 1 2
quantities
question
quick 1 2 3
quickly 1 2
quit
quits
quoted
qwt
qwthome
-

-radio
range 1 2
ranges
rapidly
re
reactivity
read 1 2 3
reading
readme
realize
receives
recommended
record
red
redirection
redo
reduce
reduces
refer 1 2
reference 1 2 3 4
references
refers
refined
refresh
refreshment
registry 1 2
reinstall
reinstallation
reinstalling
related 1 2
relative
release
relevant
reliability
reload
relocate
remains
remote 1 2
remove
removed
removing
repeated
represent 1 2
representation 1 2 3 4 5 6
represented
represents 1 2 3 4
required 1 2
requirements 1 2 3
requires 1 2
reset 1 2
resized
resizes
resource
resources
respective
responds
responsible
restore
restored
result 1 2
resulting
results 1 2
retroactive
returns
reusable
reuse
reveals
right 1 2 3 4 5 6 7 8
risks
robustness
roles
root
rotate
rotation
rules
run 1 2 3
runic
runinstall
running 1 2 3
runs
runsalome 1 2
runsalomewithport
-

-s 1 2 3
safe
salome 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
salome_modulecatalog_server
same 1 2 3 4 5 6 7
save 1 2 3 4
saved 1 2 3
saves 1 2
saving 1 2 3 4
scalar 1 2
scale 1 2
scaling 1 2
scene
schemas
scheme
schemes 1 2
scientific
screen
script 1 2 3 4
scripts 1 2 3
scroll
search 1 2 3 4 5
searching
second
seconds
section 1 2
sections 1 2
sectionthis
sed
see 1 2 3 4 5 6 7 8 9 10 11
select 1 2 3 4 5 6 7 8 9 10
selectall
selected 1 2 3 4
selecting
selection 1 2 3
sends
sensitive 1 2 3
separate
separated 1 2
server
servers 1 2
serves
service
services 1 2
session 1 2 3 4 5 6
sessions 1 2 3
set 1 2 3 4 5 6 7 8 9 10
sets 1 2
setting 1 2 3 4 5 6
settings 1 2 3 4 5 6 7 8 9
severe


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf8.htm b/doc/salome/gui/KERNEL/whgdata/whlstf8.htm deleted file mode 100755 index 7bd3f1cf3..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf8.htm +++ /dev/null @@ -1,43 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

-sh
shading 1 2
shapes
shell 1 2 3 4
short 1 2
shot
should 1 2 3 4
show
shown 1 2
shows 1 2 3
shrink
signal
signals
signature
sigterm
simple
simplify
simply
simulate
simulation
simulations 1 2
simultaneously 1 2 3
since 1 2
single
sip
sipdir
situations
size 1 2 3 4 5 6
sizes 1 2
sizing
skip
skipped
slightly
small
smesh 1 2 3
smooth
so 1 2 3 4 5 6 7
software 1 2 3
solution
solutions
solver
solvers 1 2
something
sort 1 2
sort_path
sorting
source 1 2 3 4
sources
space
spaces
special 1 2 3 4 5 6 7
specialize
specific 1 2 3 4 5 6 7
specification
specifies
specify 1 2 3 4
spin
splines
split
standalone
standard 1 2 3 4 5 6 7 8
standard_version
start 1 2
started 1 2 3 4 5
starting 1 2 3 4 5
state
stations
status
step 1 2 3
steps 1 2
still
store 1 2 3
stored 1 2 3 4 5
storing
strict
string
strongly
structural
structure 1 2 3 4 5
structures
studies 1 2 3 4 5 6 7 8 9
study 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
study1
style
sub 1 2 3
submenu 1 2 3
subsets
successfully
suit
summarizes
superv
supervision 1 2 3 4
supervisor
supplementary 1 2
support 1 2
supported
supported_installation_modes
supports
supposed
sure
sweep
sweeping
swig
switch
switched
switching
system 1 2 3 4 5
systems 1 2
-

-t 1 2 3 4 5 6 7 8
tab 1 2
table 1 2
tabs 1 2
tag
tags
tailored
take
taken 1 2
takes
target
target_directory
target_platform
targetdir
tcl
tclhome
tclsh8
technological
technologies
technology
temp
temp_directory
temp_folder
tempdir
temporary
temporarydiskspace
term 1 2
terminal 1 2
terms
test 1 2 3
tests
text 1 2 3 4


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstf9.htm b/doc/salome/gui/KERNEL/whgdata/whlstf9.htm deleted file mode 100755 index 0a1728cbf..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstf9.htm +++ /dev/null @@ -1,47 +0,0 @@ - - -Search Words List - - - - - - - -

<<

-

-them 1 2 3 4 5 6 7 8
therefore
third
those 1 2 3
three
thus
time 1 2 3 4 5 6 7 8 9 10
times
title 1 2 3
tk
tmp
tmp_disk_space
together
toggle
toggles
toggling
tool 1 2 3 4
toolbar 1 2 3 4 5 6 7 8 9
toolbars 1 2 3 4
toolkit 1 2
tools 1 2 3 4 5 6
top 1 2 3 4 5
topic 1 2 3
topics 1 2 3
topmost
total
totality
tr
training
tree 1 2 3 4 5
tries
trihedron 1 2
trolltech
true
try 1 2 3 4
try_existing
try_native
try_preinstalled
two 1 2 3 4 5
type 1 2 3 4 5 6
typical
typing 1 2
-

-u
ultimate
undo 1 2
undone
unfortunately 1 2
unique 1 2
unix
unload
unloaded 1 2
unmark
unnecessary
unselect
unselecting
up 1 2 3 4 5 6
update 1 2
updated 1 2 3 4
uploading 1 2 3
upper 1 2
usability
usage
usecase
used 1 2 3 4 5 6 7 8 9 10 11 12
useful
user 1 2 3 4 5 6 7 8 9
users 1 2 3
uses 1 2
using 1 2 3 4 5 6 7 8 9 10
usr
usually
utilities
-

-v 1 2
valid
validation
value 1 2 3 4 5
values
variable
variables 1 2
varible
variety 1 2
various 1 2
ve 1 2
ver
ver_major
ver_minor
verbal
version 1 2 3 4 5 6
versions
vertical 1 2 3 4 5
vertically
very 1 2 3 4
via
view 1 2 3 4 5 6 7 8
viewer 1 2 3 4 5 6 7
viewers 1 2 3 4 5 6 7
viewing 1 2
visible
visu 1 2 3 4
visual
visualization 1 2 3 4 5 6
visualize 1 2
vtk 1 2 3 4 5 6
vtkhome
-

-wait
waiting
want 1 2 3
warning 1 2
way 1 2 3
web
welcome 1 2
well
what 1 2 3 4 5 6
whenever
wherever
whether
while
whole 1 2 3 4 5
wide 1 2 3
widgets
width
will 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
window 1 2 3 4 5 6 7 8 9 10 11 12
windowed
windows 1 2 3 4 5 6 7 8
wireframe 1 2
wish 1 2
wish8
within 1 2 3 4
without 1 2 3
wizard
wizards


>> - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl0.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl0.htm deleted file mode 100755 index 68add311f..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl0.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ { {O {D ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl1.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl1.htm deleted file mode 100755 index abe4bcb45..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl1.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ AB AC AD AF AG AI AL AM AN AP AR AS AT AU AV AW AX ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl10.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl10.htm deleted file mode 100755 index 825690098..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl10.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ JA JP JU ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl11.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl11.htm deleted file mode 100755 index 80d2b7bd6..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl11.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ K KB KE KI KN ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl12.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl12.htm deleted file mode 100755 index 469aa3bb4..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl12.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ L LA LD LE LI LL LO ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl13.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl13.htm deleted file mode 100755 index f0652f820..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl13.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ M MA ME MI MO MS MU ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl14.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl14.htm deleted file mode 100755 index 6f3ac1a59..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl14.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ N NA NE NF NO NU ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl15.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl15.htm deleted file mode 100755 index f666a9260..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl15.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ OB OC OF OK OM ON OP OR OS OT OU OV OW ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl16.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl16.htm deleted file mode 100755 index 0f586c5a3..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl16.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ P PA PC PE PH PI PL PN PO PR PU PY ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl17.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl17.htm deleted file mode 100755 index 2d54b9d1e..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl17.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ QG QM QT QU QW ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl18.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl18.htm deleted file mode 100755 index ff323c328..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl18.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ RA RE RI RO RU ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl19.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl19.htm deleted file mode 100755 index 42d03f769..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl19.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ S SA SC SE SH SI SK SL SM SO SP ST SU SW SY ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl2.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl2.htm deleted file mode 100755 index 91c96f4a3..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl2.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ B BA BE BI BL BM BO BR BU ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl20.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl20.htm deleted file mode 100755 index 1bf26cc31..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl20.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ T TA TC TE TH TI TK TM TO TR TW TY ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl21.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl21.htm deleted file mode 100755 index e114c5b4f..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl21.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ U UL UN UP US UT ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl22.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl22.htm deleted file mode 100755 index 83751fcb3..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl22.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ V VA VE VI VT ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl23.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl23.htm deleted file mode 100755 index 5b9913388..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl23.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ WA WE WH WI WO WR WW ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl24.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl24.htm deleted file mode 100755 index fe53a9650..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl24.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ X XM XT XX ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl25.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl25.htm deleted file mode 100755 index 6dd014377..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl25.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ Y YE YO ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl3.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl3.htm deleted file mode 100755 index 0d4c9260d..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl3.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ C CA CD CE CH CL CO CP CR CS CU CY ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl4.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl4.htm deleted file mode 100755 index 962e6a104..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl4.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ D DA DE DI DO DR DU DY ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl5.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl5.htm deleted file mode 100755 index 80b15bd8f..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl5.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ E EA EC ED EF EG EI EL EM EN EQ ER ET EV EX ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl6.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl6.htm deleted file mode 100755 index cc785e2c0..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl6.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ F FA FE FI FL FO FR FU ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl7.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl7.htm deleted file mode 100755 index cf9c787bf..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl7.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ G GC GE GI GL GO GR GU ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl8.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl8.htm deleted file mode 100755 index 66ee985c0..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl8.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ H HA HD HE HI HO HP HT HX ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstfl9.htm b/doc/salome/gui/KERNEL/whgdata/whlstfl9.htm deleted file mode 100755 index d8837c555..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstfl9.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -Search Words letter - - - - - - - - - -

^ I IA IC ID IE IF IG IM IN IO IS IT ^

- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstg0.htm b/doc/salome/gui/KERNEL/whgdata/whlstg0.htm deleted file mode 100755 index 43ad4fd8f..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstg0.htm +++ /dev/null @@ -1,75 +0,0 @@ - - -Glossary words list - - - - - - - -

Cell

-

Element of a mesh. Cells are determined by their connectivity. They can have 0,1,2 or 3 dimension.

-

Component

-

One integer or real value can correspond to each component of a field and to each entity of a mesh

-

Descendant connectivity

-

It is a description of the entities of the mesh with dimension N. This description is made by an ordered list of geometrical entities (nodes, edges, or faces) with dimension N-1.

-

Edge

-

An edge of a volumetric or surface mesh. It is composed of 2 or 3 nodes (2 vertex nodes and optionally one middle node).

-

Entity of a mesh

-

Geometrical component of the mesh: node, cell, face and edge. Faces and edges are only intermediate entities allowing to define the cells in descendant connectivity.

-

Equivalence

-

Equivalence represents a list of correspondance 2 by 2 of the entities of the same dimension.

-

Face

-

Face of a volumetrical cell (triangle, quadrangle).

-

Family

-

Entities of a mesh are described by a certain number  of characteristics (boundary conditions, groups membership). Families represent classes equivalent to these characteristics (two entities of a mesh can belong to the same family if they have the same characteristics). Every family is determined by a set of attributes and a list of groups membership.

-

Field

-

Field consists of one or several scalar components. One definite type is associated to the given field and the values corresponding to different components are all of the same type.

-

Field profile

-

Fields can be defined only on one part of the mesh. Profile  of the field or profile of the component of a field indicates which entities of the mesh contain values.

-

Group

-

Unordered set of entities of a mesh. One entity can belong to  several groups.

-

Mesh

-

Mesh is described by its geometry: list of nodes and list of cells which constitute this mesh. Supplementary information is added with the help of families (initial, boundary conditions).

-

Nodal connectivity

-

It is a description of an entity of the mesh by an ordered list of nodes constituting this entity.

-

Node

-

Node can be an isolated node of a mesh, a vertex or middle node of an edge. A node is associated to a point.

-

Point

-

Geometrical entity determined by its coordinates in the space.

-

Reference connectivity

-

For each type of entity of a mesh, reference connectivity define the topology of an entity.

-

Result

-

List of fields referring to one mesh.

-

Study

-

Study represents a chain of sequences of calculations.

-



- - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlsti0.htm b/doc/salome/gui/KERNEL/whgdata/whlsti0.htm deleted file mode 100755 index 0da8ad119..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlsti0.htm +++ /dev/null @@ -1,39 +0,0 @@ - - - -Index words list - - - - - - - - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstt0.htm b/doc/salome/gui/KERNEL/whgdata/whlstt0.htm deleted file mode 100755 index ead302172..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstt0.htm +++ /dev/null @@ -1,54 +0,0 @@ - - - -Content - - - - - - - - - - -
-

- Welcome to SALOME
- Using this reference manual
- About SALOME
- GUI module
-

- -
-

-

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstt1.htm b/doc/salome/gui/KERNEL/whgdata/whlstt1.htm deleted file mode 100755 index 20ffa3486..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstt1.htm +++ /dev/null @@ -1,57 +0,0 @@ - - - -Content - - - - - - - - - - -
-

- Welcome to SALOME
- Using this reference manual
-    About SALOME help system
-    Navigating topics
-    Using left-hand tabs
- About SALOME
- GUI module
-

- -
-

-

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstt2.htm b/doc/salome/gui/KERNEL/whgdata/whlstt2.htm deleted file mode 100755 index d2486ee12..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstt2.htm +++ /dev/null @@ -1,58 +0,0 @@ - - - -Content - - - - - - - - - - -
-

- Welcome to SALOME
- Using this reference manual
- About SALOME
-    Introduction to SALOME
-    SALOME architecture
-    Installing SALOME
-    Running SALOME
- GUI module
-

- -
-

-

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstt3.htm b/doc/salome/gui/KERNEL/whgdata/whlstt3.htm deleted file mode 100755 index ba5ef78cc..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstt3.htm +++ /dev/null @@ -1,64 +0,0 @@ - - - -Content - - - - - - - - - - -
-

- Welcome to SALOME
- Using this reference manual
- About SALOME
- GUI module
-    Introduction to GUI
-    Getting started
-    SALOME desktop
-    Viewers
-    Displaying/hiding toolbars
-    Study management
-    Using Object Browser
-    Using Registry tool
-    Using Catalog Generator
-    Setting Preferences
-

- -
-

-

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstt4.htm b/doc/salome/gui/KERNEL/whgdata/whlstt4.htm deleted file mode 100755 index f8b9e5f6d..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstt4.htm +++ /dev/null @@ -1,70 +0,0 @@ - - - -Content - - - - - - - - - - -
-

- Welcome to SALOME
- Using this reference manual
- About SALOME
- GUI module
-    Introduction to GUI
-    Getting started
-    SALOME desktop
-    Viewers
-    Displaying/hiding toolbars
-    Study management
-       Creating a new study
-       Opening studies
-       Saving and closing studies
-       Editing studies
-       Displaying studies
-       Getting and setting study properties
-    Using Object Browser
-    Using Registry tool
-    Using Catalog Generator
-    Setting Preferences
-

- -
-

-

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whlstt5.htm b/doc/salome/gui/KERNEL/whgdata/whlstt5.htm deleted file mode 100755 index b5dfe800d..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whlstt5.htm +++ /dev/null @@ -1,69 +0,0 @@ - - - -Content - - - - - - - - - - -
-

- Welcome to SALOME
- Using this reference manual
- About SALOME
- GUI module
-    Introduction to GUI
-    Getting started
-    SALOME desktop
-    Viewers
-    Displaying/hiding toolbars
-    Study management
-    Using Object Browser
-    Using Registry tool
-    Using Catalog Generator
-    Setting Preferences
-       Setting Preferences
-       SALOME preferences
-       GEOM preferences
-       MESH preferences
-       Post-Pro Preferences
-

- -
-

-

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvf30.htm b/doc/salome/gui/KERNEL/whgdata/whnvf30.htm deleted file mode 100755 index 7cff7ce54..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvf30.htm +++ /dev/null @@ -1,13 +0,0 @@ - - - -toc frame - - - - - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvf31.htm b/doc/salome/gui/KERNEL/whgdata/whnvf31.htm deleted file mode 100755 index 91a985f9f..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvf31.htm +++ /dev/null @@ -1,15 +0,0 @@ - - - -Index frame - - - - - - - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvf32.htm b/doc/salome/gui/KERNEL/whgdata/whnvf32.htm deleted file mode 100755 index bc2231fbf..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvf32.htm +++ /dev/null @@ -1,15 +0,0 @@ - - - -search frame - - - - - - - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvf33.htm b/doc/salome/gui/KERNEL/whgdata/whnvf33.htm deleted file mode 100755 index 6c091d828..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvf33.htm +++ /dev/null @@ -1,15 +0,0 @@ - - - -Glossary frame - - - - - - - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvl31.htm b/doc/salome/gui/KERNEL/whgdata/whnvl31.htm deleted file mode 100755 index 8642bb472..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvl31.htm +++ /dev/null @@ -1,43 +0,0 @@ - - - -Index Letters - - - - - - - - - - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvl32.htm b/doc/salome/gui/KERNEL/whgdata/whnvl32.htm deleted file mode 100755 index 51700fda7..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvl32.htm +++ /dev/null @@ -1,72 +0,0 @@ - - - -Search Letters - - - - - - - - -

- # - A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z -

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvl33.htm b/doc/salome/gui/KERNEL/whgdata/whnvl33.htm deleted file mode 100755 index d8658b1ce..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvl33.htm +++ /dev/null @@ -1,72 +0,0 @@ - - - -Glossary Letters - - - - - - - - -

- # - A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z -

- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvp30.htm b/doc/salome/gui/KERNEL/whgdata/whnvp30.htm deleted file mode 100755 index 0c9cb814b..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvp30.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - Content Navigation Pane - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/KERNEL/whgdata/whnvp31.htm b/doc/salome/gui/KERNEL/whgdata/whnvp31.htm deleted file mode 100755 index 87921c0b7..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvp31.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - Index Navigation Pane - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/KERNEL/whgdata/whnvp32.htm b/doc/salome/gui/KERNEL/whgdata/whnvp32.htm deleted file mode 100755 index 90697b01f..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvp32.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - Search Navigation Pane - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/KERNEL/whgdata/whnvp33.htm b/doc/salome/gui/KERNEL/whgdata/whnvp33.htm deleted file mode 100755 index 8351bcbea..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvp33.htm +++ /dev/null @@ -1,16 +0,0 @@ - - - - Glossary Navigation Pane - - - - - - - - - - \ No newline at end of file diff --git a/doc/salome/gui/KERNEL/whgdata/whnvt30.htm b/doc/salome/gui/KERNEL/whgdata/whnvt30.htm deleted file mode 100755 index 8fe4b6284..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvt30.htm +++ /dev/null @@ -1,47 +0,0 @@ - - - -Content Navigation Tab - - - - - - - - - - - -
- -
- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvt31.htm b/doc/salome/gui/KERNEL/whgdata/whnvt31.htm deleted file mode 100755 index 44edf37d5..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvt31.htm +++ /dev/null @@ -1,45 +0,0 @@ - - - -Index Navigation Tab - - - - - - - - - - - -
- -
- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvt32.htm b/doc/salome/gui/KERNEL/whgdata/whnvt32.htm deleted file mode 100755 index 8e9e59dcd..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvt32.htm +++ /dev/null @@ -1,45 +0,0 @@ - - - -Search Navigation Tab - - - - - - - - - - - -
- -
- - - - diff --git a/doc/salome/gui/KERNEL/whgdata/whnvt33.htm b/doc/salome/gui/KERNEL/whgdata/whnvt33.htm deleted file mode 100755 index f20893094..000000000 --- a/doc/salome/gui/KERNEL/whgdata/whnvt33.htm +++ /dev/null @@ -1,45 +0,0 @@ - - - -Glossary Navigation Tab - - - - - - - - - - - -
- -
- - - - diff --git a/doc/salome/tui/GUI/doxyfile.in b/doc/salome/tui/GUI/doxyfile.in deleted file mode 100755 index 192abd083..000000000 --- a/doc/salome/tui/GUI/doxyfile.in +++ /dev/null @@ -1,243 +0,0 @@ -# Doxyfile 1.4.6 - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME = "SALOME - GUI - v.@VERSION@" -PROJECT_NUMBER = -OUTPUT_DIRECTORY = ../ -CREATE_SUBDIRS = NO -OUTPUT_LANGUAGE = English -USE_WINDOWS_ENCODING = NO -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = NO -ABBREVIATE_BRIEF = -ALWAYS_DETAILED_SEC = YES -INLINE_INHERITED_MEMB = YES -FULL_PATH_NAMES = YES -STRIP_FROM_PATH = ../../../share/salome \ - ../../../build/salome -STRIP_FROM_INC_PATH = -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = YES -MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = NO -INHERIT_DOCS = NO -SEPARATE_MEMBER_PAGES = NO -TAB_SIZE = 5 -ALIASES = -OPTIMIZE_OUTPUT_FOR_C = YES -OPTIMIZE_OUTPUT_JAVA = YES -BUILTIN_STL_SUPPORT = NO -DISTRIBUTE_GROUP_DOC = NO -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL = YES -EXTRACT_PRIVATE = YES -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_LOCAL_METHODS = NO -HIDE_UNDOC_MEMBERS = YES -HIDE_UNDOC_CLASSES = YES -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = YES -CASE_SENSE_NAMES = YES -HIDE_SCOPE_NAMES = NO -SHOW_INCLUDE_FILES = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = NO -SORT_BRIEF_DOCS = NO -SORT_BY_SCOPE_NAME = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 25 -SHOW_USED_FILES = NO -SHOW_DIRECTORIES = NO -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES -WARN_NO_PARAMDOC = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = log.txt - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = ../../../share/salome/src \ - ../../../share/salome/bin \ - ../../../share/salome/idl \ - ../../../build/salome/bin -FILE_PATTERNS = *.idl *.hxx *.cxx *.h *.c *.hh *.cc python_extension_must_be_here -RECURSIVE = YES -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = YES -IMAGE_PATH = sources/ -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = NO -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = YES -USE_HTAGS = NO -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = YES -COLS_IN_ALPHA_INDEX = 3 -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = GUI -HTML_FILE_EXTENSION = .html -HTML_HEADER = sources/myheader.html -HTML_FOOTER = sources/footer.html -HTML_STYLESHEET = sources/doxygen.css -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -BINARY_TOC = YES -TOC_EXPAND = YES -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = NO -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = NO -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = NO -USE_PDFLATEX = NO -LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = YES -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = NO - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -HIDE_UNDOC_RELATIONS = NO -HAVE_DOT = YES -CLASS_GRAPH = YES -COLLABORATION_GRAPH = NO -GROUP_GRAPHS = NO -UML_LOOK = NO -TEMPLATE_RELATIONS = YES -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = NO -CALL_GRAPH = NO -GRAPHICAL_HIERARCHY = YES -DIRECTORY_GRAPH = YES -DOT_IMAGE_FORMAT = jpg -DOT_PATH = -DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1200 -MAX_DOT_GRAPH_DEPTH = 0 -DOT_TRANSPARENT = NO -DOT_MULTI_TARGETS = NO -GENERATE_LEGEND = NO -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO diff --git a/doc/salome/tui/GUI/sources/Application-About.png b/doc/salome/tui/GUI/sources/Application-About.png deleted file mode 100755 index 7b58330d50856e28562e8f9ed80dae72d6e6dda3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19226 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

5r3>=?gKv-6#gF2kVYm^Euk4pDx%bDo{L~m zgS1GapZxVAn3cEn>zxB-X}(|}RLG;R8{7?6YT`~f|EAwz{s;8qGKD}`5Z=K5#;hPB zd{K6QN2uW85nuze$XhrwY>Du0#kcvwfnlh0$(lJs>Z@c#m{f`8yDgu(Xxl;U&g83B zUq#HqKOMzC5+qT3wDfF*kxQLz!l%{qHnb@s;}k1cUe^{;|G=)`Q7XcxsGROqks=Ag zoG&{r(5Uh^AmM?y6E772#8>?DKUFS210lo3mrT6UhI+A37UK;xw|ch#S1h1BXDG=0 z`SiNg1^NZ*(PT8LkDAb9n>5TF~*;2X|?`-g4}Gv zHVASR|W^#YY+&=*csqa%VVRcgH;U|fb#O&RhxdbC{o>7 z9sXQmS7K!HHpD>$O;_GV)`q5ZdKo{(;6`qw|4liq0fGA^2xmybmm^?^5=Tzm8%Q=4 zxyVdzWIccl`P{Q@)3Ol=o-se6E3p`DR=kPOaeEoszU?{gdD;P*A{mPm7jCbqFB}!d z+Kt-6%F$pT*&zY(gc(J_j%HtucuzSt=;xH=zNPQ@D!Y^Gn&u!0t zd!$P}@X`C^*w+=z5bak_D)nRLRbug>V~S~pCd%L>R2W_0@3h;GD&t&`XzDzI?_s{TqX#5#lQ25WD?j*(qQt zGsh5u08x{uy9~0Q)l*NPPFxzK83a^V)k21`no1$G8 z^g#{_Nna2JEnf`k?4wPQs6wRp)i3=ra}+Et=ggZl*1@gTrzH7vZrLW>yJ+koTO&r& zb4n&kQfR3VlQr<>>h4Mc4AFg-1)~QPbWL`a$(j|E18OWFoPG zF9Lo3nkYf^vkFB+XEMK&1-$=s5Hw6;6F1WDM@@rMPLo^Mi`$6heFP=iCli++35AiU zd9c^0?B4}GSXegeF`BvPF>Ns6urz-;L}-bMWCVO`yCs-XxsVaR>lbK> zv5I@zodKgEpScyRX)&NSTeC`Fcs9A%)OeP2-8#Ok63~L$H&fx7YcZ`nM8aqYI0~Ft ztS7S;jGVxI99M-gd2^AIT1pfT%*Bar5QaqxIl1yf2$=G!Hn%n3Y~)vqxNjT$jajM@ zDB;vz!RfYkr)^B0L6HdW!nd3}fa{>ky9(Y)n{TU(&$1MW+ZXB_v*ddzZ~PCrGTctP z22dU5jpaxNwDZ1}`bu(CouH_i?k=5Wnsi8j$;tBt-c>&7>wiEmY~(XP9Arqc0jWx3 zmCq#MFHe{-0OjxB29U?1@`_G(z-dQ;2l|=rl)tc$s0YLBnR>;~I#6QDP0Y=HHj9k3 z_+9iB#Jei7?$5DpLDIrihG52Ek_5VelB{R!=mYrLb$+P~ECC7y*X$hE-;z@v^Oibl zkM{fb`}_Ub3{tJJos+q!bATN(%Vwbz82dgzm~wo}8$DcFrt`})bXb#7diPs$o0yu! z0=0>OXexC6Zei(ryQ8(@Y1u{bD_jt9pn;l?aW-TrQ z9tZ31%nlI_{yraxt|O=v=LOq@W`uozSeP&gWDZ!S2z$Tx69X+Bc++$m|6Ia7eeb>r zypgw~rok>T+g&*82q-~&FZ%g(G- zF?W}JEQN?5%6ybUtav)xopGFX*qYxDcp3TL$M-$H-?Ue?{|yi4+P@i?aGEAthMyqd zyOFcYX}Qw4b>J)}d50JTlk57L1aS8;GuESI7fZ9&!#4tZ3Fi+AQX}MjJ9S=@YHbZS zGboo(LPEmd9R)Y+k$Ik2M_zC{zklu=dw+Jn?hG|V^hYDfG}LVnP78gaFm_Aj$?i&9 z*Sm%13*vUJS!#d6j=W7#|Va0XloS= zeT1)L&vW<&CDSaYz9IXxyKiHPq`j_i)lq1Y+B+VwVjlaPPy#;sr%bNCew~^tbnJU= zTen0|g|_B~4wo)|7>@CV<<&d>4C11m?z=83IA*X^QRIxG0mjpL^}2e?`O>GM%F@AD zC2Z`%0iF8Yh@1bwAA4tDgy`IkG`uRI8Z}50?1CfVzWtu{ zb+t7WbFv&U4-kG*J3PenKfbC2doslF=yRJ42n3d_U0W8)NsW6Yz4|N0rHw~FALM+u z=J(m5#6Uu-+W5}OZ~8pAd#M(U_itJCN<3WmE^z_7)}PLTIyHOw_0?E~HqwuATd%-SL&P zB4)|r4LSetF!v-561a@{EzbIVmEKl+3k&%bHTRzm_Owh;p;!Uo=?=IgjPc<3-dNm{ z=|h#{kM-19Mt5$D0J<2cjm0yL^rV$Ih!wUu3iRbUk@lNaqc9oy}Q`Yq8i|^yRT`{Uv#8So4Z~%Wr50^68`yl@& zU2;|SHfUt-GabaxR_0(;-)?9vgWH#(Y}pcb$%XljV=dh;Y~q5YvpeQ28a>Ft(|ZkL z+p5M-sRkdDSO-6W;~(|W=PjpYluexxSl=Z8fCjN*^Y)Wba(S40Yd3@sUn7uRlmk%cK)=nhlr zy^wS$btG;1H!c`3elu%~&mcoc@C4a^+HZdSwLafIJUrR4;tJJDkS?!xn~La}w7yWl znb)H?VkR>Z*}|!UW-HLcrhJU2S#+8VFK3E$rkNudRDk` zg_-#cf&j!9XrLW;_(eV|L;{5oh@j+gPq*_&_t(i?%R7YZA%Q8xw@eLAiE<3}dW53C zJo{W}fKBQp?3p*RXc%^}FA=ru*UZ=(EyIGFhO<5O zmw8i98C=QGKFTnIM|4dcgYv3PM0*BH&uBWlXpvXHu)FK@#W-y(4D%JQT8<|G$Nf_? z*4l4|B%R|EV?n`P&i^t7iB*buRm>_e0jf5BU|Its@X8R5FPFN?v^ znAFo)4W@&8z_Y7({wPl1k$#f}aS%0f^RvA;r zUn{Z4ou7qmDj}N3MFpGlrsLr#?6JZ^stURn_(B{yu3@+0xIvwJtQ6|Tk^{B-DGJNj zW9&R&`XeO~yjLK4piGrvG-v2D{1}z7hRU8v9`hO~Jw$yw=6Qymh2Di?Q*oR=&YSC8GCNQ2W)CcuRKLK7P6e8_M5!xhr`7d5DGoez?%LGeu6laQ#?>{T z37ys_n~Kur69NVAu%}Ugv*e2TARVDY+kz!8qEfm!Yp$j#;kM4y>s9ck79c`H+tcm& zmb75$G7ea~*igp0Qj>a1FTr@goB^Oz5AN96{`0fY+3eaYkJ2Hup+pbvD@wRnP{G$6pkFlcvz}qy zg9PZ^R^iO@?ni;l$Rr?TkI1OsifCq0nr&`BxMwXP2S}zAw*8Xo-R~r`T!xl5jJl;B zWj2Tk>B9e|3IB8ZQL#V&?0f-(zPIpn8F@RaPswLxR+eEibgQYfMuCdH8@4%;dgV#qMms@gf&a0*B6R_;KYD19o(V ztjdjxP{+97O7r6}tuuZU@hO2xHg5jE%_C|45-(L)bq!J!%7Lv{hy6~<4Gyj@RpUk=Wc@nLQTq?v&~<# zrx@5-GahHyB*ne9WSS?hCNt$+=!y?)^1v?I&^0DvawhTMJG;pY+;^VZdF0C0N=iwn!f*!v zmbpHczaSvE!e6k<*2r7lYeyvutt2R2vpqm(%}1$3dgPu*9jm55u6-eY^-m9}Sdcac zY5G$s7)n%{?$_`FQxlSpz2d5?BQNWY|Jy%smQ=$hP%~nwM+uTkjlgV-wY!#>qhv63 zmZDTV?47urA_rUn-wmuY7a7jr^3(ctL?B;CjbbPvrl2O2V%}M_9{=2i`y!Nsp|~`@ zJ{%KD&s(B(RH98NQ!F88hQYw@2W1)X(Wb$vd$Nr$Ymd16M{wM4TLX_9#=dojpF&Wl1Wg?;Gdl=^o|SJCL?Nri;yHkn6;HFZ5u8vfAT6hE0L^Ge zo#B?LJf~=G$s@yErx$+|>94cB3W-g#J?lr9VNuJZoL1N8OZ*4>*uC!V@U*&J6t~Ha zo+Wk=`lm@7^Bk6uOxo=AEG8;>29Xc9a(Rdyg&|JWR5C0q1FJ@J_$LZc=%x+GDvDjJ z`wi>j7y`6s4kc3`sF_|iI<%ayd&eSi`)K$;rA97cs*@2Vn(^zGKO zxPSb=i9Z&Y35TyOdFq+f{J9sq&QlZLOGOgxg&jWGh2PV{OQu@ec3l z{nh99N+#-iC)b1e9mEk05?vd8%Rjr zy4Y))2`RD^sa~Ga4KCvI*2U;l8@Yy+ZdqF7@N=%8M&W)Gf)V0D<*QwV;;b@;UG2m@ z!Pyms1Q3i5*DGf-!Dslr(kR7G>qZ+<7%NV{x#!Q)nQD_A_Pf7Si-Gw}v!HfAaT3EGA8C&+^^Td?o#0{KpLC@(Qh8#052I@M=^}QNB zDrS}W!cPv5^SkgSkiyNHJlT_QhKJ*z+Q61Umm!hijhmu`CGs+PY4NzNX2KYUi6Lnv zP$C)_;h56c4zw5c)YV#Ru{1T(zE!j8AyISv!KvTMywaaI zmqCqjf;y!F^t9l+fxa`Evhsy07&-gC5V7Q^I*xzg&_+kwm6SS{KhgSS@i_MjnNXBT zM}8(pF;sI1gAzGteybvS>8qBRzCgt3!zXAV+_@xmADY%g*L&Zp_b-R*#nhIGP>6h< z476#{3h;|=;`P7`;SV2em&Lp6b@xs}i^|D)cj9V4FDQ@o+}-T?D(D8Xb{VMK1Asl- zuM4Fqf=v*6fpdnCpocA6|;9&qJ1Vko&%&i$B1 zdUM}4z)210pv7O8U=yJauh*Xxz%{($VNyql$xgn1^r@A1#%~LdxXyRrzXfE@D^Nb< zUJEekF+W*J|HXY3Wmh!An3a|nW|iiO8l#M1d4L}R)|FSueIe|j7pVPVZ2Nk))7nSt z5Uuw1__l`O*=Lp&M^LP zfibvm^6&#TL@v-OzCrg?SvF`&XdXqvLye!X#vr`YNkqor6NAx6g2Ri{PL=t?xFF(wu(TZRTSznl&I%;$@C~n-^Y`Y_K{X zh1=r(9nwn_tYcOW3(>~Gf16DbgMvSPC+-^p{sQ2>DETs)N{Cu@ zUBi-mTziKOxGv6v=KwXP$3SJz9`06i26lWgip4%Ryia%bYl{Ll^n$^*o#;o}q+~bU zafVX}ZTw+_xwh5Q^(?c~2lzNq$gs%`2A5MtH|9~u71r7}|E$8&r2I}GVdp7eqL4cR z*pq%ypaeNgfMc_{ND%+>zvo_K;f24L?Cfz5atUpK$l)+_`oy_>w~%6DU&<{ai&@GU zAUKSF#~>_#peXXtxrubQVs#$kI=0QL`KQZS?uCfY%s8IcV|PT^gN$HVW}!<9g6e`m zG_~wz<&p9@J#@~-)OrglKxwS1&wCvMh1twI#oJi~+8I&GllA>S{pihdh1gJnZPY{k8k&>>@wY*rys~`}QCa>)=dZCS)csTC9gXVF zYCX&TVal0)>rc(!man+u>*+BO|HoX(fv!*DmGy1pXU;5iyWH&(4-J!XF%4JTzUQfS zPEL5Bx8BJE&s}b6Q_&VI|80W(A_$RA+&vzlcN;u+ZPPhCB4l;9JVV1P{(-6p6T@YG zG1XC+xL(A}X4-Uuar<8Q+N0U#s)=Xzm$rLAof6IJJ<2Z2r`4TUVoCMYn;=+(kXT_j zOGRa}?#Bg(JpSxk&2;+u4~HsoujWS1f9WB^bfYZBAulwZnHE5}w`NeRHs>HeY=1_| znkJNQL0Te>>e~-0pt#eOu_B1b+4>+Xs77#(8k3!b9aIK}au)dpZ`ujR=M5RzSE z7-{A@hMXj}T%DNTDDEF1t1M&Qn}^p-IPzw%|5Dv%y;#>|7FSAzUN_fH-dT4g-`#&le`t^tV+CaSqyOiT0r@7>AT{hg(!|WXV!5J!Rj*RlE$%80Wokt? zN9KjhIWkmc<;NP*DKDKA7nyU+ypY}4Dr5PykNJGt`{Vuj{(Dn4CbQzUOMtb&aR7z= zOe3y?;W~z4$R^1EZ7-aRUCqX8HO?WK`Y@Bn#B1v%_HG7GX|Rnx&>Uu{IuWDMvzmPv(GuI$msO*9u}u_HMQi>Jo4Ew$Iv-p<%TQwClr!B|6vpzvNAQ zn$uq=9KNR2HaO?rhW(SOQ`yFCu*qbfu<%N{>{E8oE zaaV@4iM8bk)^?U8UtrKGY=!nF7&{?nPnfP=EkE0bqmY_S_Vwe}u?TE=j6hS?`=@ToBS?@q@cgtW`VTLl6(RiNx}nL}L* zE~p6+l;~yoLf5oTQU^;i7=n08LXp-v=aO%wimQ#*cAhXb%qv?6dhBvr%jXu4AcMi<)pJDPj_W@J+S4nboLdOfi%=cb+= z!01%Hw{X*{B8zAwW!h88uR zzO`Z!ty}8*&J(+{U1B{t_2$XF>%;q;rL}!Ar=kbOW-hegTid&xj+&kC*>y6R(O*N0V0etv*T=~?OiN)MB92@n=4;hmO7JIxsM_om?27nbo?uu;8 zFYW*de*V_;C{5aRhHyW!50$y*HEjq#A2ikHH(l`V5&1`FlxHR%KV|+VmO%DT&gOOc zh6lhACc)V5H&sMAFtXvG=xWBVx%W#OYL3`km(ku_fVB*myOCR-Z`3xTfRkx7(b~_Y zXT0O07Gj2@71GHnf7!B?Czr?sBagR%0Qd2czf?B|{oHaDLh7kIJA%vI^PbW(8=TWh z?S1KT?~5zTY3?ieH~;)Npb*WPIqFx~1cBSe{K*Giuuy!$!q;c|G2Rp4{^j^#X_7LY zxus$%{6yg{BxCn^a>|cpfs<0uG?1kY@=VMB~l~(Us)G^4^oB-&LMo zu{5PM1X_Aw@9nZ^!r-Hqx$9C_R7ZY&xwzSrE6hnL-us%&#RUOqs4J9ZL1(7O(n_}h zpk5VBSxv{LoLln&(c6qtaB%rqWMXEYJ-V;HA*p5Pi{D4=6Mip?FDqrI?i{})9-(!6 z#osHa?MmEmVezNb-88@_>lv{`Kh*!+CyX$tIPr=N-sdoQ@=NT?V6DCux ze|mxwD9b6w)IO@3bvB{z^*8u9YdJ*~m}t`~B3{#29ZX@1l6;Q)hqB{vLQ_`0)CBfy zcZ+m#Q^p52pG+_Z_z4xq7WRK1=(*(?@ZZMfQev9Y=XC3FLhRG^Nz*9*!}JT`_+Bp# zR9K3px^;GKV{h9xp#f@8HYncC9<&*wMv6sLLJk}ATfS#fJK7FGBj3Ua64Fw@pz zl)jeaJBH%WzqjL9snH>O07~=5-|*#Ig?dH4eEq?hFbJ^R^#Tdie2N&d`8 zO&hv|l(J9rCO9b(i_O&LxD{0_r&oOGpIXuEb8usaUt44?=YQL2tMc9a^3ns7m}R8w z3;fJ@cxQG5S>X)9(nb23E2qR3iPclaw(M_lHGzmJJlN5H;hCyssim}fOa8_)KU%D(t@lnyB`RpC^$PcuI+R{filaPm_w`FnuPi{Z zXW%BEdlj3#Ynu<^2ChWsgb+U(tJoZe{Jgjk)KxL^mgZYdxOqjYaj3=C~&AaBa@))*-jOU9=3G33>fvwWgNITCrqF^D+ zyCa0?$uD!m-rxp - - - diff --git a/doc/salome/tui/GUI/sources/html_comments.gif b/doc/salome/tui/GUI/sources/html_comments.gif deleted file mode 100755 index f0c0f0b47100447f7d3a8104b0b4930c548f5437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmV;N0Av40Nk%w1VQT;h0Du4hv>+h=|NkNW6+?1mVRU6=Aa`kWXdqN*WgtgMO;7+K z`2+z90096j00000YXAuV00LT!kEzS;4#1l<$#<*OH8amG5(oyRc7{m0hHSLOstHBc z2p=%3&u96YxeS>bktgh7J}aBf$+6{%G-U^B!de@_Bt+>MZM~unISNh_&rFnzZP`Jm KJ9x`c0029x$~vY1 diff --git a/doc/salome/tui/GUI/sources/logocorp.gif b/doc/salome/tui/GUI/sources/logocorp.gif deleted file mode 100755 index 7697e0837777ed6aa775741b68962a9533f62caa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1792 zcmV+b2mkm-Nk%w1VT%AS0M!5hoSdBI=H|`K&1h+9yr%&i92}?s9Q4@(`}_LWPNmY) z(&*@(Mny)&y^n7I4{B!vuhPw}5?2IXir|z73~g1|qP6eq%$#@+9iPydLQ8d@5mkyJ+Hc*mQgIAO1%kNT04UJv^Xbjgu+dWmns}MAyYSKDkey3~zS-CTdiC?|VXDsV z?d^iw_xI-Rw^eTF^5`PJ@#MM6alNa@g__&l+iiR_0!%suKW6s!_KJ#%u&}WA_xAt* z0RH~|A^8LV00000EC2ui0E+-G000L6z*cWaEEFMdcUl8%k6r< z;IMd1E}O}{fWnGByWjA*T%KNE=i^n!GwFL42zY{nZ*^>hTQ53UFBcbmep(_Th?SOE zhIfM}6$ufa2{khhq>dLJA}%tkt1fMquyC2LZ!MHr03W&$x*ru47a5Ko78?>EAQ;LR zlsynM5HYdSVzXyGA}K7$$tgND9|gU-Gg%fED_O=l6359lG$r!$(A4%@)?Wxcfm$Z) z+}cSnp@6}-4=_%6F(H9MJ7g>%P{2W9o;(`&GUn6L2mz)+Fwufcx-*5n z@S9e57v2cMNN|`;0+1OSJ2C?x832H11!4j05dFhO7aal;cOEccbmAW^GY8IM0|4vM zhksbPEnti2(ORrz9?he0i{HaDW6G*2O9saoP)wdqokZ?102s91F@Ql~9t>;`7(2i- zfFG>61YiJqy^r_r8JI>7e@7Mp4B*GdRX~4%9gFk;Ujg$Cpq~!~Fd%>q{T=ATa(2-2 z0yq)CaDxWaO{c+z(ue{79uHb{#sC7~{jdUS1AwT-4h0Ob#d@IS7ax2B=+HugJ}~e@ z4?DbzJjJh0`Z8sx@TKUyeIKw9A87XWzTiFV$eUnaR;06o6Prl|-ND&qjL4msWr z4JIiZ4=XT8=m-F=1ptGaX!3yE z9WH>MhsQqu;KHmES)|GT*?<|$ydU1;59BgPK3Vaqg06dts+nHOeQ0fXKj!BaGW5yrqS)CJ^53@nK7h&4>24SnH6jU+IN4Il=mK7d6eYO#a{$YB?sI3=~j1U z#t5qaagB`mA|f(i!x7H$j}mkM4ey9YSnv=IaO~qB7a0N?MxcO&q>CO2kw`@{@`w>A zMyi3R{9CN;T9OC0hId_1Ed%V>ZMK(dsTIHem}kjgq@F#;8UjC{3wKSIW|sy7Z+T iFpX*a^t7Gi*z~42&8bdz%F~|u^rt`#YI0B%1OPi{2poO@ diff --git a/doc/salome/tui/GUI/sources/myheader.html b/doc/salome/tui/GUI/sources/myheader.html deleted file mode 100755 index d2efb75fa..000000000 --- a/doc/salome/tui/GUI/sources/myheader.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - Main Page - - - - -  - - diff --git a/doc/salome/tui/Makefile.in b/doc/salome/tui/Makefile.in deleted file mode 100644 index dc94bcbb7..000000000 --- a/doc/salome/tui/Makefile.in +++ /dev/null @@ -1,71 +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 : Vasily Rusyaev (Open Cascade NN) -# Module : doc - -top_srcdir=@top_srcdir@ -top_builddir=../../.. -root_srcdir=@ROOT_SRCDIR@ -srcdir=@srcdir@ -VPATH=.:@srcdir@ -doxygen=@DOXYGEN@ - -@COMMENCE@ - -dev_docs: - cp -fr $(srcdir)/GUI ./INPUT; \ - cp -f ./GUI/doxyfile ./INPUT; \ - cd INPUT; \ - sed 's|../../../share/salome|$(root_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; \ - else \ - sed 's|python_extension_must_be_here||' ./doxyfile1 > ./doxyfile2; \ - mv -f doxyfile2 doxyfile1; \ - fi; \ - if( test "x@DOXYGEN_WITH_STL@" = "xyes"); then \ - sed -e 's|BUILTIN_STL_SUPPORT = NO|BUILTIN_STL_SUPPORT = YES|' ./doxyfile1 > ./doxyfile2; \ - mv -f doxyfile2 doxyfile1; \ - fi; \ - mv -f doxyfile1 doxyfile; \ - echo "Running doxygen in directory:"`pwd`; \ - $(doxygen) ./doxyfile; \ - cd ../; \ - cp -fr $(srcdir)/GUI/sources/ GUI ; \ - rm -fr INPUT - -clean: - rm -fr 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 diff --git a/idl/Makefile.in b/idl/Makefile.in deleted file mode 100644 index 6954d4bc0..000000000 --- a/idl/Makefile.in +++ /dev/null @@ -1,67 +0,0 @@ -# -# generate dependencies for idl file : -# - -# source path -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ -VPATH=. - -@COMMENCE@ - -IDL_FILES = SALOME_Session.idl - -PY_CLIENT_IDL = $(IDL_FILES) - -# we copy all idl file in $(top_builddir)/idl -inc: $(top_builddir)/idl/salome $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - -$(top_builddir)/idl/salome: - mkdir -p $@ - -$(IDL_FILES:%=$(top_builddir)/idl/salome/%):$(IDL_FILES:%=$(top_srcdir)/idl/%) -# $(CP) $< $@ - cp -f $^ $(top_builddir)/idl/salome - - -lib: pyidl - -PYTHON_BUILD_SITE=$(top_builddir)/lib/python$(PYTHON_VERSION)/site-packages/@PACKAGE@ - -pyidl: $(PYTHON_BUILD_SITE) $(IDL_FILES:%.idl=$(PYTHON_BUILD_SITE)/%_idl.py) - -$(PYTHON_BUILD_SITE): - $(INSTALL) -d $@ - -$(PYTHON_BUILD_SITE)/%_idl.py: $(top_builddir)/idl/salome/%.idl - $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_BUILD_SITE) $< - - -# install python client (generated from idl file -install: $(top_builddir)/idl/salome install-pyidl install-idl - -# create directory $(idldir) and copy idl files into it -install-idl: $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - $(INSTALL) -d $(idldir) - cp -p -f $^ $(idldir) - - -install-pyidl: $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - $(INSTALL) -d $(PYTHON_SITE_INSTALL) - @for file in $^ dummy; do \ - if [ $$file != "dummy" ]; then \ - $(OMNIORB_IDL) $(OMNIORB_IDLPYFLAGS) -C$(PYTHON_SITE_INSTALL) $$file ; \ - fi ; \ - done ; - -#@ CONCLUDE @ - -cleandep: - -$(RM) .dep* - -distclean: - -$(RM) *.py - -$(RM) $(IDL_FILES:%=$(top_builddir)/idl/salome/%) - -$(RM) Makefile - diff --git a/idl/SalomeApp_Engine.idl b/idl/SalomeApp_Engine.idl deleted file mode 100644 index abce369ff..000000000 --- a/idl/SalomeApp_Engine.idl +++ /dev/null @@ -1,41 +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 : SalomeApp_Engine.idl -// Author : Alexander SLADKOV - -#ifndef __SalomeApp_Engine__ -#define __SalomeApp_Engine__ - -#include "SALOME_Component.idl" -#include "SALOMEDS.idl" - -module SalomeApp -{ - - /*! - * SalomeApp::Engine: special CORBA pseudo-engine for persistance needs of components - * with no CORBA-based Engine. - */ - interface Engine : Engines::Component, - SALOMEDS::Driver - { - }; -}; - -#endif diff --git a/resources/Tools_en.xml b/resources/Tools_en.xml deleted file mode 100644 index 7457ddc90..000000000 --- a/resources/Tools_en.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/resources/Tools_fr.xml b/resources/Tools_fr.xml deleted file mode 100644 index 7457ddc90..000000000 --- a/resources/Tools_fr.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/resources/back.xpm b/resources/back.xpm deleted file mode 100644 index 7dc5b72cb..000000000 --- a/resources/back.xpm +++ /dev/null @@ -1,27 +0,0 @@ -/* XPM */ -/* Drawn by Mark Donohoe for the K Desktop Environment */ -/* See http://www.kde.org */ -static char*back[]={ -"16 16 5 1", -"# c #000000", -"a c #ffffff", -"c c #808080", -"b c #c0c0c0", -". c None", -"................", -".......#........", -"......##........", -".....#a#........", -"....#aa########.", -"...#aabaaaaaaa#.", -"..#aabbbbbbbbb#.", -"...#abbbbbbbbb#.", -"...c#ab########.", -"....c#a#ccccccc.", -".....c##c.......", -"......c#c.......", -".......cc.......", -"........c.......", -"................", -"......................"}; - diff --git a/resources/cascade.png b/resources/cascade.png deleted file mode 100644 index 9cd171538d3bf91cd2f2d4a9c9bff8806cf0da07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!9%)r1XI!iqT$l(d_32{Ae-~arKTriH9nmt<-R&!UUhjd$-o|AfbHSH@gbvuNE7UK3u)$`nbw{wZ9^U{E4d?lo_c QCD42ZPgg&ebxsLQ05eNRGXMYp diff --git a/resources/channel.cfg b/resources/channel.cfg deleted file mode 100755 index afe59a75c..000000000 --- a/resources/channel.cfg +++ /dev/null @@ -1,278 +0,0 @@ -# ================================================================= -# PARAM SETTINGS -# -# ** standard.cfg : -# sets up the daemon with default params as given -# in the CosNotification specification. -# -# ** channel.cfg : -# sets up daemon with default params which we prefer. -# -# You can choose which one to use, or copy one and edit it -# to suit your needs. -# -# There are only a couple of differences: -# -# standard.cfg channel.cfg -# -# PacingInterval 0 1000 (1 second) -# MaximumBatchSize 1 8 -# - -# ================================================================= -# omniNotify Configuration (Startup) Properties -# -# You can modify startup properties in one of 3 ways -# -# 1. copy this file to create your own .cfg file and edit it. Use -# promp> notifd -i -c myconfig.cfg -# to start notifd using the config file myconfig.cfg -# -# 2. set an environment variable; this will override any -# config file settings. e.g., for tcsh, -# promp> setenv LocalClockTDF 0 -# promp> notifd -i -c channel.cfg -# This uses channel.cfg but changes the time zone to GMT -# -# 3. use explicit command-line param definitions -# these override both the config file and any env variable settings -# promp> setenv LocalClockTDF 0 -# promp> notifd -i -c channel.cfg -DLocalClockTDF=-60 -# This would set the time zone to 1 hour earlier than GMT -# -# omniNotify manages 3 kinds of properties -# -# * ServerQOS properties are properties that all channels share; -# they cannot be changed on a per-channel basis. -# -# * AdminQoS properties are properties that can only be -# set at the channel factory / channel level. -# -# * NotifQoS properties are properties that can be set at -# many levels: channel factory, channel, admin, proxy; -# some of these can also be changed on a per-event basis. -# -# The channel factory's AdminQoS and NotifQoS property settings -# are used as defaults: when creating a channel these property -# values are used unless specific overrides are provided in -# with the channel creation request. Once a channel is created, -# its AdminQoS and NotifQoS properties can be modified; the -# factory's properties can also be modified. Note that once a -# channel is created, its properties are independent of the -# factory -- modifications to the channel properties do not affect -# the factory defaults, and modifications to the factory defaults -# do not affect the properties of already-created channels. -# -# The settings specified in config files, environment -# variables and/or command line param definitions are used to -# set the initial values for the server's ServerQoS properties and -# for the channel factory's AdminQoS and NotifQoS -# default properties. Since the default channel is created on startup, -# it also takes its AdminQoS and NotifQoS properties from -# these initial settings. -# -#================================================================== - -#================================================================== -# Misc Startup Properties -# -- these are essentially ServerQoS properties, -# but are not currently implemented that way -#================================================================== - -# Names to be assigned to the channel factory and channel created by -# the notifd channel daemon - -ChannelFactoryName ChannelFactory -DefaultChannelName EventChannel - -# Path names of the files used to store the string representation of -# the above channel factory IOR and channel object IOR - -FactoryIORFileName /tmp/rdifact.ior -ChannelIORFileName /tmp/rdichan.ior - -# If a file path is given for the following parameter, the file is -# used for storing debugging information. 'stderr' and 'stdout' can be -# used to direct output to standard error / standard output. - -#DebugLogFile ./debug.log -DebugLogFile stderr - -# If a file path is given for the following parameter, the file is -# used for storing report information. 'stderr' and 'stdout' can be -# used to direct output to standard error / standard output. - -#ReportLogFile ./report.log -ReportLogFile stdout - -# debug flags -- 0 is "off", 1 is "on" -DebugDaemon 0 -DebugChannelFactory 0 -DebugFilter 0 -DebugChannel 0 -DebugConsumerAdmin 0 -DebugSupplireAdmin 0 -DebugConsumerProxy 0 -DebugSupplierProxy 0 -DebugEventQueue 0 -DebugRDIEvent 0 -DebugFilterAdmin 0 -DebugFilterEval 0 -DebugCosConsumerProxies 0 -DebugCosSupplierProxies 0 -DebugNotifQoS 0 -DebugAdminQoS 0 -DebugNotifQueue 0 - -# report flags -- 0 is "off", 1 is "on" -ReportChannelStats 1 -ReportQueueSizeStats 1 -ReportConnectedConsumers 1 -ReportConnectedSuppliers 1 -ReportConnectedFilters 1 -ReportUnconnectedFilters 1 -ReportEventRejections 1 -ReportEventDrops 1 -ReportNotifQoS 1 -ReportAdminQoS 1 -ReportServerQoS 1 - -#================================================================== -# Initial ServerQoS Properties -#================================================================== - -# Each ConsumerAdmin and SupplierAdmin object is assigned to a group -# and each group is processed by only one thread. The number of such -# groups and the number of threads that handle the groups have to be -# at least 1. In addition, the number of threads should not exceed -# the number of groups - -NumAdminGroups 2 -NumAdminThreads 2 - -# notifd may split the filter evaluation processing in two stages. In -# this case, a second thread pool is used for evaluating proxy-level -# filters. The size of the pool is controled by the following - -NumProxyThreads 0 - -# The following variables control the number of threads created for -# pushing matched events to push-style consumers and pulling events -# from pull-style suppliers. If these values are 0, each consumer -# and supplier is assigned its own thread. - -NumPushThreads 4 -NumPullThreads 2 - -# The following variables control the number of threads created for -# notifying suppliers of subscription changes (using subscription_change) -# and for notifying consumers of offer changes (using offer_change). -# CAREFUL: Setting NumSChangeThreads to zero DISABLES -# the sending of subscription_change messages! -# CAREFUL: Setting NumOChangeThreads to zero DISABLES -# the sending of offer_change messages - -NumOChangeThreads 1 -NumSChangeThreads 1 - -# For pull style suppliers, the time period (milliseconds) between -# pulls is controlled by the following variable. -# A value of 0 corresponds to continuous pulling - -PullEventPeriod 100 - -# Period in seconds used by the garbage collector of the event queue -# The minimum number that can be used is 1 - -QueueGCPeriod 300 - -# The next entry specifies the time period (in seconds) between -# each 'report' (the Report.. flags above control what gets reported). -# The channel may have a built-in minimum, e.g, even if you say 0, -# the channel may choose a 10 second period. (300 seconds = 5 mins) - -ReportingInterval 300 - -# Description of local clock values returned from omnithread::get_time. -# These values are here because we do not know a portable way to get -# the clock accuracy and the time zone across all Unix flavors and -# Windows. Let us know if you have a portable approach. -# -# LocalClockInaccLo/Hi: local clock inaccuracy in units of 100ns -# (must fit in 48 bits, 32 for Lo, 16 for Hi) -# LocalClockTDF: local time zone expressed in minutes west of -# greenwhich meridian; 300=Eastern time zone, USA -LocalClockInaccLo 0 -LocalClockInaccHi 0 -LocalClockTDF 300 - -#================================================================== -# Initial Default AdminQoS Properties -#================================================================== - -# Maximum number of events that will be queued by the Channel before -# before it begins discarding events or rejecting new ones. A value -# of 0 does not place any upper limit. - -MaxQueueLength 0 - -# The maximum number of Consumers that can be connected to a Channel -# at any given time. A value of 0 does not place any upper limit. - -MaxConsumers 0 - -# The maximum number of Suppliers that can be connected to a Channel -# at any given time. A value of 0 does not place any upper limit. - -MaxSuppliers 0 - -# If 1, newly announced events will be discarded when the number of -# undelivered events in a Channel is equal to 'MaxQueueLength'. If -# 0, newly announced events cause existing events to be discarded -# according to the 'DiscardPolicy' QoS. - -RejectNewEvents 1 - -#================================================================== -# Initial Default NotifQoS Properties -#================================================================== - -# EventReliability and ConnectionReliability can take the values: -# 0 --> CosNotification::BestEffort -# 1 --> CosNotification::Persistent -# OrderPolicy can take the values: -# 0 --> CosNotification::AnyOrder -# 1 --> CosNotification::FifoOrder -# 2 --> CosNotification::PriorityOrder -# 3 --> CosNotification::DeadlineOrder -# DiscardPolicy can take any of the above values and, in addition, -# 4 --> CosNotification::LifoOrder -# StartTimeSupported and StopTimeSupported are boolean and can take -# the values -# 0 --> FALSE -# 1 --> TRUE -# -# NOTE: the current notifd implementation does NOT support all QoS -# settings. In particular, it only supports the following: -# EventReliability 0 -# ConnectionReliability 0 -# StartTimeSupported 0 -# StopTimeSupported 0 - -# Note -- PacingInterval can be set programmatically to any -# TimeBase::TimeT value (units = 100s of nanoseconds). Here you -# set number of MILLISECONDS, e.g., a value of 1000 means send a batch -# roughly every 1 second (or when MaxBatchSize is reached). - -EventReliability 0 -ConnectionReliability 0 -Priority 0 -Timeout 0 -StartTimeSupported 0 -StopTimeSupported 0 -OrderPolicy 0 -DiscardPolicy 0 -PacingInterval 1000 -MaxEventsPerConsumer 0 -MaximumBatchSize 8 - diff --git a/resources/close.png b/resources/close.png deleted file mode 100644 index b7126e002d7aa7ab3a7c9a9265a9f283f1ecfa20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!9%)r1XI!iqT$l(m|32{Ae-~f>MpMk-+o$V%& z#aI&L7tG-B>_!@hljQC0!qCAg>jC75mAFQf1m~xflqVLYGNfmw85QKED;Vh+=o#9^ z?aKhF@bYwV45^rtoRAQZz`&@=rl@d};fZB~%MKBV8!Qqm2Z9)7c$k=Yboh9Bcz9&^ zc(@NN(ot|a%eZ2eW+U$rp9Y~h!WNPeDv}GT7{z>>C BH68!} diff --git a/resources/copy.png b/resources/copy.png deleted file mode 100644 index 1e43a09c2f80427d80e154e552661e4cf9596317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmVSHfgws1h@S1R)~Jg>q(I^nm!Ehk*h?(CiQ_`x^^=3-E)5 zLbA%d2#-ENIrtM(k(d=QkqFSj9m*Y5AB`$p^8^rMsgFI#G%JJ2WNc4{;DD&PfC_$1 zssbv*GlPT4%~)z_mngd^2hj~MDeS{szWFq}&Z4QW9aLgxm)u<+PTDR*aPx9$AME%Y vI-=-M9W*`mTejkBpTT~xoc|z*gX-b}*D!os%$qEI00000NkvXXu0mjfFDYd; diff --git a/resources/cursor_rotate.png b/resources/cursor_rotate.png deleted file mode 100755 index a3cb0c1ecc31ed66595b4387c55dd2731809a5e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH%)r1{DZJ<-ki!|^6XJT{zyToh|NsBJ3q{m` zEXI-`zhDN3XE)M7oFs2|7lsa2Sq~sbti&~FS$q5M)5)u*~FeEXuNpvI#I2A}-X}F}rqr=I=%gfWlk;uj_@bD7j z6|DtF4jh=G!12UL&ENr>PlD1KMh`VE4Ti0yjJ+8Jj78ER4MKcUJUm)LTnfPsZpKOG zEV4cgmtt0nIY{(yPjhvQn8U-#ZQ{ry%Esx*uHnq2v$d(wm(@i-H9286!$zGf)iWM5 eQ+5h#~Zei#`hDW!d{qzoT09t(A+S%@5$1>k6; zb# zo2behy5}(Clz~nqzAEwS~Qouyq_X=hOOA@?L&Tay4KX40} z>iw?;oV~7&LqCsj0a5q_hyvh^CBWV}sPx#07*qoM6N<$g4hjg*8l(j diff --git a/resources/cursor_zoom.png b/resources/cursor_zoom.png deleted file mode 100755 index 0020fea39f8531230eb0c25c662b76ee98f696bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@&H$ef*9{vs0Ga>)|F^Z8<^g0e zmIV0)GdMiEkp|?5mAFQf1m~xflqVLYGNfmw85QKED;Vh+=o#9^?aKhFU`h9MOJ`zW zkPLd4!Up7Lc)B=-RLn_EP!KOz+h7#dX4;UsjI)PRK$4w})1Y}W<0Lc-a$k!M*zN28VxpF`U#yCAY@F9!>Q{yu)SmYHks0PSS(boFyt=akR{08E}qwEzGB diff --git a/resources/cut.png b/resources/cut.png deleted file mode 100755 index b35200830ca593d5f55a151525f9f9125caa44f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmV;^04)EBP)5rp7y4|B6o z^XVaW77F0XR@IjsWXMYaUHf=tDjGZ{Px2s*MfvR#^$JrRAmGcN?F5>>hte6<$NK;P N002ovPDHLkV1hc}Rq6l$ diff --git a/resources/default.png b/resources/default.png deleted file mode 100644 index 0140a6667b1232eee2ee1680bf0ef475025b0ca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmV;d0#p5oP)1u zMC(dLP(cK%ATBKUKq&Q9S}iTc8XFU%ZPKJkCYf|5lg#|?Tu5xQaN(lg_MH3Ro(r(R ze+SWw>Hc~D&Dl!j_Mr>O{y()#r;j+Sx4I|P->QO#imNetMY|hNgk)4>()U#cX9!DlJ%p zROV-_M^O|rMUgruLogjdif-X(KokR@VL&zdKx5wsfR%P>>UDc`Gy$>b=bgzyiI}Zo zMG#nJFlV@?b?=s)=HUnh0ILB2o_^aw#K-#D3^aen*GlZ^4pXFW1q~Wf2cQDTvINnu zlkn)}4;UWjL9Aj02$UQc6$>t#riaT7iV1{o{J!C_qlY0r)&~Z<4AVut&0<6+ysf6r zz$zcI*xDdp6kzDXi25a-lnR3KLPdtlc8B{Fi=)_OV}Y{=03qBslt{<~+~Spptf#w7 zM*TrEOYWb{R#T!VT;(guzv@0_n8`8Q#r z*Y93tshniAs!zpg>U~to6!~(;@})+`>sc}~k<6=&>Zmz}eFuQ!^KG=izvmY*NB diff --git a/resources/dl_delete.png b/resources/dl_delete.png deleted file mode 100644 index a7a0ad8f92f8ee93a9cf789c99fb703057b8bd4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpkRWh zi(^Q|oVAlJ`4|*=nE#g4?eefWa$8aFvB$y%Ck+dE7S!?1oSgNpfoTJSis$tW*ZdsW zt)6aQ(zIg793!#&A+g_k)})>-dbTfofla`K4LQ}^7t1Fw%~2?8YTonHNAduF{F^4H U1H0aG0_|e(boFyt=akR{00b>Q;{X5v diff --git a/resources/dl_insert.png b/resources/dl_insert.png deleted file mode 100644 index 54e108a889d3fab855bbb1d9dc8a5c79dadfc453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpkT45 zi(^Q|oU@Z0xegd`u>AcmZ}Vf5*slq16?3wrq*JnR^u* z!;W)JB8bP0l+XkK*$6~8 diff --git a/resources/dl_movedown.png b/resources/dl_movedown.png deleted file mode 100644 index 9c872192d1481f4a3e3dce5d7cf7c9c29bbd18bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprE^_ zi(^Q|oaBmv|Ax$}GnCG{NFO+G;Ddadry0Ziv?exzOExmR4%Zww9+xm`&MK^Gj5u3y sxIyCVmVVY5iWN^eB^@p>dGRtZM5}x5U2;x#I?zZ4Pgg&ebxsLQ0E}5JQ2+n{ diff --git a/resources/dl_moveup.png b/resources/dl_moveup.png deleted file mode 100644 index 45b275007fa72c9d6a7f050d5c0eb42db4775906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprEIx zi(^Q|oaBmv|Ax$}GnCG{NFF$F;KTeJW(f(2e}@fDvMFRAOXs*at5DKuQd&;igf)_P v1#YoEGB9Y6IP0>Mxn>q;RilK@Mn(q7wVr#ge9{jA8p`15>gTe~DWM4fM!qlz diff --git a/resources/forward.xpm b/resources/forward.xpm deleted file mode 100644 index 2ed813482..000000000 --- a/resources/forward.xpm +++ /dev/null @@ -1,28 +0,0 @@ -/* XPM */ -/* Drawn by Mark Donohoe for the K Desktop Environment */ -/* See http://www.kde.org */ -static char*forward[]={ -"16 16 5 1", -"# c #000000", -"a c #ffffff", -"c c #808080", -"b c #c0c0c0", -". c None", -"................", -"................", -".........#......", -".........##.....", -".........#a#....", -"..########aa#...", -"..#aaaaaaabaa#..", -"..#bbbbbbbbbaa#.", -"..#bbbbbbbbba#..", -"..########ba#c..", -"..ccccccc#a#c...", -"........c##c....", -"........c#c.....", -"........cc......", -"........c.......", -"................", -"................"}; - diff --git a/resources/help.png b/resources/help.png deleted file mode 100644 index 452b45f62a547640e2a9de3ad3870bbdcf8c0a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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( diff --git a/resources/home.xpm b/resources/home.xpm deleted file mode 100644 index 9c1369d9f..000000000 --- a/resources/home.xpm +++ /dev/null @@ -1,27 +0,0 @@ -/* XPM */ -/* Drawn by Mark Donohoe for the K Desktop Environment */ -/* See http://www.kde.org */ -static char*home[]={ -"16 16 4 1", -"# c #000000", -"a c #ffffff", -"b c #c0c0c0", -". c None", -"........... ....", -" ....##.......", -"..#...####......", -"..#..#aabb#.....", -"..#.#aaaabb#....", -"..##aaaaaabb#...", -"..#aaaaaaaabb#..", -".#aaaaaaaaabbb#.", -"###aaaaaaaabb###", -"..#aaaaaaaabb#..", -"..#aaa###aabb#..", -"..#aaa#.#aabb#..", -"..#aaa#.#aabb#..", -"..#aaa#.#aabb#..", -"..#aaa#.#aabb#..", -"..#####.######..", -"................"}; - diff --git a/resources/htile.png b/resources/htile.png deleted file mode 100755 index b838286fb446498c73441a44cd808ff804fbd891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPL>W(e>JasB`QKLbMxQ1HNk13;1} zAc;fO1E9D9LnlK{dnXPRLt9uA==>RsoeW%)eeik&6h1LPoB+frK)e8mL4cEyfgz(L zGbdHg-O~*e;KTu7>=20{<^dH0W0fEPDx;fvRQKNmB})cIhHxuTC=Dz)F)Ma2&;?4K zE{-7;w~`IonAj{12MF-ANb*P~^6cPXmPkkqSjL@Z&5)hV^*mGL_ZN_RJzf1=);T3K F0RWU&)(8Lq diff --git a/resources/icon_about.png b/resources/icon_about.png deleted file mode 100755 index 6817eb4073d11a0fe69b69d01bc06f5a8895f208..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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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 BH~atq diff --git a/resources/icon_default.png b/resources/icon_default.png deleted file mode 100755 index 0140a6667b1232eee2ee1680bf0ef475025b0ca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmV;d0#p5oP)1u zMC(dLP(cK%ATBKUKq&Q9S}iTc8XFU%ZPKJkCYf|5lg#|?Tu5xQaN(lg_MH3Ro(r(R ze+SWw>Hc~D&Dl!j_Mr>O{y()#r;j+Sx4I|P->QO#imNetMY|hNgk)4>()U#cX9!DlJ%p zROV-_M^O|rMUgruLogjdif-X(KokR@VL&zdKx5wsfR%P>>UDc`Gy$>b=bgzyiI}Zo zMG#nJFlV@?b?=s)=HUnh0ILB2o_^aw#K-#D3^aen*GlZ^4pXFW1q~Wf2cQDTvINnu zlkn)}4;UWjL9Aj02$UQc6$>t#riaT7iV1{o{J!C_qlY0r)&~Z<4AVut&0<6+ysf6r zz$zcI*xDdp6kzDXi25a-lnR3KLPdtlc8B{Fi=)_OV}Y{=03qBslt{<~+~Spptf#w7 zM*TrEOYWb{R#T!VT;(guzv@0_n8`8Q#r z*Y93tshniAs!zpg>U~to6!~(;@})+`>sc}~k<6=&>Zmz}eFuQ!^KG=izvmY*NB diff --git a/resources/icon_module.png b/resources/icon_module.png deleted file mode 100755 index 9fdd5fb01222465f14b6dd39a8607b0486bda000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1385 zcmV-v1(y1WP)E*${}5JJ`f000McNliru)dUm_9wbGCV_pCN1olZp zK~#90ZIr=J+g2RMf3{y78z**L0)>Pu34^k3L!+vus+zQ3rfS-%N$bv)cG$6({U1B^ zuIF56@UJu>AeVdib-D;LaBxs@9Ov5W*RS_aPfvfNl&+LY zrL#__LlFQ#9LGYMraB>H7Gpfl7`vn>%8aV2k}S&z07Q(jbar+&Pbsavc<}%j z@B8S@n>TECcQ+=4v^nQi9LJ+D3`GDC5CFjH>MFl_^(p`Wmt~pc^LZhPBGm161>3ga z|rquU+J4up#jIo`jDFpzI(ljknO26`bziwI9Eyh^h^E|oP zYznUH0%HuKD1tOi!S{XW^?INvifEdqGCe(Ay>sWzt!lL@t*x#7`S9UGf`T9@A08h5 z{OZ-K4}IU~2qDRJUGebn5XQ&Hp;RhCtyY74J`a>qa2y9lqY=omELoOSUtV6WNRqTj zDOIxB>@teu7`0lh;`8UvFIkoqiK3W_q9_ao0}w?K=H}*LVPWC?oh-|crYVe#je(|V znOrV6rfJ#~La2Inc4nYftK~j^{P^kS=4Rx&?nJRz)TXAUSQv()AP6u%J`ROK0Vt*5 zx-KM10=ljP=bRgc;T4O;fvT!qP17(!2uXyH!PeH+)@U?(={SxG02R|TGm4_1FbtvJ z@5Ax&G3@T{LaWsRMNz;sO_s@I!hAm8uq^A3ot>SPIFA3eEUPOu8V&Aw-jEP7P*rtC zlB6X~)8tB}BAKQsV2lOZwgF=dg+c*pwHjxPrJ^V%6B82_V{FZ`tj%V#X%RvO5&*!1 z2M@UK`;!Qv?{c}^=b21K(sg|_GcyCFQVA|!zRXS2l` zqG{T0uh%>EeIFwLfMT%-v$L}!P18KaSe(gZ5T(?294CViG5|p0oO4xG{jssJezjWF zDwRqxm&+l?ai(=$FB*n%bS{TSj~?-bg@vIk%b{TyvZ|_%BuSgKTFu$t-~V7R7^u3g z#{kgCX0xlgTyDoS&HivWJlx;k-`L#T+}+#T^DxELX~`gjWE+h}cWZ0w#P|IK0QmXf!NCEy zZ9ANtoP3$4>0z(e69hpB%H{I!*=+V&p-@OBCMH^zWgTyCZ+CZgc2ZfECD(P+AP6u3 zjL!A-jvxql5CjAO5&#gMJ$u%4UH8{849ko$<@EH_cU{*dghZWAhhCKZ+ko&NhyM#j rQIH@AGGi>mIcG_dByZoa|Lgw)N}}v>NL48|00000NkvXXu0mjfY-5lX diff --git a/resources/icon_module_big.png b/resources/icon_module_big.png deleted file mode 100755 index 99e10b1ff7802e5652aea93f3d535506b198ed92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3630 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 diff --git a/resources/new.png b/resources/new.png deleted file mode 100644 index 953757a62f594c7591c7cdcfe8e51cdde41bfa45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t_Kbr05bpo|KGb%L=DJd zED7=pW^j0RBMrzAD{+k|3C>R|DNig)Wk}CVGb+eSS1{5u&@;4++m``U!IJLjmJXyP ze>`8)3#3&%T^vIy<|HRDFdn-gps+DZvm@deLlP@PXQ*(8l9MyD!~+I~_)t;*^HWte Q0M#>iy85}Sb4q9e0N}kbVE_OC diff --git a/resources/open.png b/resources/open.png deleted file mode 100644 index d9953b6a7d36d4983f2cd609ef10976ac221215f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!7%)r1n>(-?sKn{O^Pl)S*0|);9XJ~0+_z$EQ z7#`Knt^-nxB|(0{3=Yq3q=7g|-tI0e{TVj{fgG_C*NBqf{Irtt#G+J&^vpD)g1mGE zBRvB>L)*B089)``o-U3d6?1&M4)PvQ;5l+fi(A2vp(}!6Dx*Nk|Cv%5s~;VoE6>K# zQGEW5oA9EG!rjU&^ViLso3`2fSZHEMajgTe~DWM4fqRCMQ diff --git a/resources/paste.png b/resources/paste.png deleted file mode 100644 index c7446259534a83a6e06232c80c732b459919cd15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmV+z0q6dSP)p}?9Qv#DoiT`}aPY1G@i@=zb*uwtp zmkY)pBs?6AgR+}@z?hGG;nxQ>UM}d4z!7>1uK9(3SAf^^7GunHcs^$cDz)_6(iV({WI4*3It{)u>Xhxj~ti8*H|$zqZ} z5J<)wJji1p0cj{igW)BkJ?%Pv>zOQKhAcmy9|Z{bV&nXriRhkD0mYv?#0>V_!1=*0M=P_N#mTuI*XDD zDJ5oVP*Txqwy4!>IlS;^hIEpWoQ?8%zZa8EQd-RxU+cAeeKbrM3F&eEM51X zf!*F5=A6Sm*rh$|?7AbXz(%uynHuhH?od+YZ|a=GOiey?NmGd`E5Nmlot!6`eYB*L zH19X9_1cPr5NvO4BjpB{0YpI%7DIN*JLpduKl6C+=WZ6B9R&zQh$uddSAl=4-#bmH8`<`*2LJ#707*qo IM6N<$g7~BA;{X5v diff --git a/resources/plot2d_clone.png b/resources/plot2d_clone.png deleted file mode 100755 index 5b5a8ecc19d058fe30f73531f7764c5dfd04ae38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmV_hdxWz05&vhSGeE0ofr5n86@02!OVO z`c$ho^s>jnm7x5U>F0GPs3TQO7fb$_!m_ zSP=275>Xws>+u`R0Uz27sta5RY6xrv^%F2*+51Jk=?j-7T>be5q0RsR002ovPDHLk FV1jEZX9EBL diff --git a/resources/plot2d_dump.png b/resources/plot2d_dump.png deleted file mode 100644 index e8bec70ca330d6cdddbb1a68a85028611f44bbf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)1wKMdr8^vxQ|~wy?0v9av|%U}Gs*rfcp)?rHBR=#3tgUIJ6OD z(pc!B=?-$jPAPb>Qv}>Xm=x=6a^Rg8d|?@8_M2zloo{$Otu+8dkwa^b7iy+}J&wj0 zH)%unqU*XB-LW+@(|mRRVBZ0Bjyo8|A!3;;-NN~l7twWKyBkO5Lk5|a?ffcjb;f0DCazsJ$Hb}|3DyGO6z zqrO(Bw*0PGZyz3UaCpG&;1>ViMi^rtj`I;*`>@UR&sy&8F6HQZjg1eRR4Zo$^R)t) z^gkh`BpswrJB*^pGsd{YBmh*FDgbP5Z6f6=)un*5)3cF1;X;W0ZO1o7DK&D1DsL+6 zec2;aAy=1IV~=U7E(5GAuh9D30w90LVVF13H>6M?I1t0X4j`tq7U z1`N;CT1#S*;t5qqwNeF`d~LQrZhPzR*IhbD>GgYslZ~y7C+md}lYs!j7nEL=SX@{n zd>xWKWMo-}5CY)~gb+n-NtC7l3V}o-gdoc@c!2xto{}hm&j?WXQ#hQRoAt_bWy+MF zD+T_e%TFqbT#;0dde-4YY3*sPT{MJh?d53$ymj#7#qmlW4q9u6*F-m)D5ZwsFtws) wvvBM~9tMC@N&zq&pOb1d05EZ!FBs$g0O%^=#(Qhl&Hw-a07*qoM6N<$g0qwojQ{`u diff --git a/resources/plot2d_fitall.png b/resources/plot2d_fitall.png deleted file mode 100644 index c09ff94ad89b32483194de03275ece8844f985da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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$ diff --git a/resources/plot2d_glpan.png b/resources/plot2d_glpan.png deleted file mode 100755 index c23322a4ae4dc6ffdbbac6af7b397fc35554d750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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#+!$#_8k0000q<_O%b&X~PS@Rh&PK53aiRc&AF+5-asJ9`bIh<#s{<+<1?CEK$vtQ}@Y|s``%z#iB?sWW&-DgXbs+=*j^k+N@AZI)02Fu427qnb-gDMK1GFIn zr-id>99B8{m3IajcSS$Dyww9KB_|@Jl-x?l4X}jVyWtr%ml9(vH{F%Z@zCK+ci1`{ z0^ym%5%g7ubHIPq1+G2}a8cN+(38W`dNIb~ZB7B<-0Um0*n~XN$a&MtB9ggyzEsuq n-oYYQ{{r9>>QznJbl7zd^&y98Uc7U000000NkvXXu0mjfno54V diff --git a/resources/plot2d_lines.png b/resources/plot2d_lines.png deleted file mode 100644 index 6baf57344cacc7fd22a5e42fa8c5eff44313ecef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 zcmV+`0o4A9P)6Y?_0RXE0JT4_OJT|IN zm=P$_uiT@)Vv5ae6+`d03x@pxz}amxmn^mKnr9P}*-!iyjEDjeeJ#Rp_=bA`$ziJM xV$#u^;(b!4FZb54|K{s!E#|p0jrXqWb^<002ovPDHLkV1f*>eft0a diff --git a/resources/plot2d_log.png b/resources/plot2d_log.png deleted file mode 100644 index aecca8c13acab4ff9fe724bdd0532f858b60e84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmV+*0pI?KP)yV)cn^ALNr{!zm6}N9f-s*K1ca7l!Ic&+rQHFX z0DzhGSCEL%27Ez3iFbL6y|1-uN{J?4m~%b_`n<&lwMw?-TC3)q(ORP;XrH%uT~~O& zEhVLN2s+DK+kMqOvu1*b z(5N%udAK88j8OwH-muv>x@jahvr-D?c?JOWf6=z(em-aBbs|Eg6aeq;cOAYShx7Eh m)*9uU6@a$Z=)S}LTi^rT50BHSofNhJ000024T;k_?8=a+U^Ie-J8 zx>-@{(9+p2q?EYt8=zQ)y~AEddvY76lz?~lTMqw=3qa1BjE7>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+4U|+y9YLuzxZ27TOjT%-$E$~~7BX~I%V-x@|x@~x2(ZAX9R%KKv zH@MGoC}F@_4I&aE+H70;nddB~-iLY4vel4?gqeRf*SVE8XRlk&HG8<%u8cjSNlV@f Wo_;8|&b^la0000DGCWSsE#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/resources/plot2d_settings.png b/resources/plot2d_settings.png deleted file mode 100644 index d291da9dcbeee3eae6c68fbb3cce59d107ae8d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmV-90mlA`P)#4&q426%%9U#yJvcQFmpb-jPz@vDCjNk1TRo9bO7~FmDaAEgfs_?BRl$Z z{J{~B*D*ADZp%(iW>3SJ(I^Wtr zgUl5vb-fG#fb>WJR$lBHZ1^A09Xsld9W@;iQRZq57yw>SO^=j2{5)y<{%mtHr@J^b z^?grYr@S_~r3qMbv>7NOBqG}^)qnuN%#`lwXK1#E<(=B1-Cyh{*-fFAJ}1Tt00000 LNkvXXu0mjfVkmy? diff --git a/resources/plot2d_splines.png b/resources/plot2d_splines.png deleted file mode 100644 index c39d4321c35c26f3792db5fbdcc42d7a272e36a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmV++0p9+JP)E(pSSm7o4rP5dfTZo0?MBWOjZt-%RW<8)Zs3q} nwMS`wb^9v0Oyz4j$R51`lB<3+1VYzX00000NkvXXu0mjfElqrU diff --git a/resources/plot2d_zoom.png b/resources/plot2d_zoom.png deleted file mode 100644 index b46573914ded57ddbdbd0fdfdeca02dbe772beca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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(-?sKn{O^Pl)S*0|#1~TK@lM_z%Pk z3>q;Poq!Z$NswPKgTu2MX&_FLx4R2Vf5y!~AV;jkHKHUqKdq!Zu_%=xJu}UyATM3P zNY6me&^B&g22e$$r;B4q#T;9|+nfxB9H(Pt7Z~4RVU=~r_%{EgRO>H6zopr06D=?0RR91 diff --git a/resources/redo.png b/resources/redo.png deleted file mode 100644 index ac72e5c27cb02fdb6aebd6fdf3a8f08b4a4bb2fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!7%)r1n>(-?sK#pjDPl)S*0|(O5(ij+KrlrjU z0tN;ko8e_7w;YgSED7=pW^j0R10=?n*?YcQZXkvfq^-UO^uOFVzQz_10&lEi3m{%2_6XphGc;j yHqF!^hL=hVK9Uk42TzGOSUK#9bu1CEvt^K0XP(n=mTxoAAO=rYKbLh*2~7a~`8MzX diff --git a/resources/reset.png b/resources/reset.png deleted file mode 100644 index ccda81cb117fd14d8ba2279f5de2aa03b55e1b90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!7%)r1n>(-?sK#ov=Pl)S*0|);9XV|-sVZod^ z|A8z9hKEa&*8wTUk|4ie28U-i(m6vLp z1$pTTMtTN%hPHA0GJq;VJzX3_D(0m27;-fj2(YkE`r?+P-=x1o-s8>r7k~e2yK#1; zbj{VB#%i;{@t7vRb)2A-owOg9tRi2*k)6{5EmN1aeX};$d_CN2vYGxb%MOo=+y2lFzshE?TkPwiNkTB!Gfg=l8m&}#eBr!>XWru@DmT2=etpyT?nG}*37e;y? zSkda3%^Hw(m5a@kjm^N2*=a>vo14Lkbx{V)P7MqUQul;6JeuR&3^bU*)78&qol`;+ E0M`~hx&QzG diff --git a/resources/select1.png b/resources/select1.png deleted file mode 100644 index a1a4ee1d52bb1642c35e59cbd98a6d61e1cbbf3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 975 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqMyzU}gyL32{Ag(XtH+i|A$>yGTanrJv}Vn71?{kepP$n8jbDQ&9P6{DSwHJ5&6t;zVEf4 qiTkGBoX&*C49m@7VrQ-I`_JRw<#IIU%bh(S&w0A~xvXw<1Ils0EOha&)G zhi29XRE$AVLX2z83hY@qyn?PN*9!}5%=51tW?*n2DbMS%*Ws|APzsXLeseuu>2PdF zhASAwM6r1$hgOhe0JgfGIdk`9W^WzT?vy_idT*Pv6pO^A*Kc!J`n*}gGY4hUGSfVv=kz%pNyD z%|aCes3^et`Q-pgGGOKm2heA*nuwq+zhbALJN)6+yM4#{bIo$Q8DV3vV(v`S?Yq%< zv)!WIgFOK& z_i)KBA#D}|XaE}8s_6k-3INYJN-48PG^%iT$s|QeiBbx=y&(4kT1o+kTEuLHH5E%K z9Uo3^zs|W@;V{`6ERc@h<1=PJNx{W5SujMixs zcR!$CD~vEzmCL{hjW7U^7>c#l^C19WYm)b3n-O|jueC%YXm8_hv4O7m0trxlKu wCBS->ex-0pc~{YbyqekPf14fbYlUa)34@fKXJBgCO#lD@07*qoM6N<$f`eRvU;qFB diff --git a/resources/uc_del.png b/resources/uc_del.png deleted file mode 100644 index ed6c97cee3997af589c84b8c224c6dfc1dd401dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmV+{0n`48P)Y(?Mzbl8|a01;V&zG_Imlm&%% z0Bj0HWDUri6UmC4d(9m77!-bk_LRpD9d>W=C4~)`45)1J=vNgUF;Fs*ta0<`zuCuc zqpE2a1_0@5FMIdI&Y^1cc-|=s=3V0lczju5gt$p5KVBqlDU9hx7_gagRA}erzIG@8lB+*pKRt1gz2k0000#f5u2!#(-2Vs*kN=IRojzTwK6Zc0$iXZgmDn*Kj6a4uYW5~?#OS}FRU?Q#hCua0- zAOOf}Apq{)+#MpagD*#bmAN~Zx%+ks$jor}^T6BYf1>aP;JLk@Rv55v3J;yK6+RSZ z=n^QZ%~T0^*P5BNJbColrY(!=RLI|8V-7ooqS_z=4A+sFDU?)x0`4%8QYipLDk{59 zFtZ)njW^Xfzbhk4ffID)fi5K@oO1iBa`*|5er$%v{f^uqx(-?sK#ov=Pl)S*0|(O5(ij+Krlrkf zU;r{0c8fE|0x8ClAirP+hi5lHVvI@N?k=o9@?RbYa>PnpBT9nv(@M${i&7cVGt-O; z^3oNI^bGV2ZR7T309Dv~x;TbZ%t=mQU}j}wb7#{iVECBO(8;)tf!9FG&|rfFL+EA) z6N97`4y=4Uemp!~4sBgbS7OxF+1c3AYpNKu@|hn*9eH^jXcU8|tDnm{r-UW|1Q0o1 diff --git a/resources/undo_arrow.png b/resources/undo_arrow.png deleted file mode 100755 index 717e0e6df7803954bf4d7edc708970333b7a959f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmeAS@N?(olHy`uVBq!ia0vp^oIotV!OXzG*fMeIa|Q-xh5(-sR|bZL|NsC0Vg3!2 z1u}r-C>RZakrM(jE@`Yl-!hj3`2_=$|MgS6jzF%qr;B4q#hm1Xq$CDKHa3N$EJsgt vaH?@9ANEvX;+c`qb%8_8MyJDVQ7HpMPzEDo0B_A-P?&kT`njxgN@xNAf4(T; diff --git a/resources/view_back.png b/resources/view_back.png deleted file mode 100644 index 436f2da157599bbe520d17325d12bdcf949b3cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)ToQ5QWE47Di$LQWhKmpCjr4BGlVNU9_~9sjS>4aD*%(C5tZDx$_(i5NduFs1I2f zVSn>x>`~-sRc+SA5pAb_R&}+=zsZe~xf)AZV0msvL3LgE_qjTg-fGfXkEd*mA^UAf zaqQ6e{3zRCx9g4WKX+=HX5L{)2y}cql5-E2_GBsBWt8sHfkVc75WlfWQtl5pFJ6n$ zGHm)Vi4MU*C}lTuOivEW_p*&Ha{y#4(dzf`e=jy9ckNLI%imo|WWET9`pE%_a8U9O zbHCk*QN@~-l$Y+>k-NJqX~x{J*-fW$#aa4fC>k#_U2SW^-w&p>fECP^9Y zusKaq4-)YHWv~7K=L8retyUZg)&JkskQvfD|JBoO zzYDtIW9aesNJUvtRaSAyN+~A`+mJO5V(9sDrba)=(7hC$m657fmWtJWrIf)#UN2=9 z&mflSOXjTJ1Lt6z&T{-rV)e9b@jm?D#)kQ_`G2S+uxB66eTN|2B-*BJr5mj0VbbyA zs2(xH&;1gcRYUcv4oe0Y8vw9hh62)m_YWBQuMmZqmX{1eGTG2l@Bst}kDGy&!c2+- z#4;s52b?9c!{)lG4T!<(&vll^HpL7umI+w5>6{%;pdL6aWx8IjW;Ro1*UUF3Lj>Tf tfk96h*9_n^PzO}{2?hEGbItq$-2mb3gTb{fp`ZW&002ovPDHLkV1h$>uz&yn diff --git a/resources/view_camera_dump.png b/resources/view_camera_dump.png deleted file mode 100644 index 8eb63e09be9919e21d4c8e54482127881dfb5d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)4z!7>1uK9(3SAf^^7GunHcs^$cDz)_6(iV({WI4*3It{)u>Xhxj~ti8*H|$zqZ} z5J<)wJji1p0cj{igW)BkJ?%Pv>zOQKhAcmy9|Z{bV&nXriRhkD0mYv?#0>V_!1=*0M=P_N#mTuI*XDD zDJ5oVP*Txqwy4!>IlS;^hIEpWoQ?8%zZa8EQd-RxU+cAeeKbrM3F&eEM51X zf!*F5=A6Sm*rh$|?7AbXz(%uynHuhH?od+YZ|a=GOiey?NmGd`E5Nmlot!6`eYB*L zH19X9_1cPr5NvO4BjpB{0YpI%7DIN*JLpduKl6C+=WZ6B9R&zQh$uddSAl=4-#bmH8`<`*2LJ#707*qo IM6N<$g7~BA;{X5v diff --git a/resources/view_clipping.png b/resources/view_clipping.png deleted file mode 100755 index dce8bd5c5952847b115e7702d01153ab055996a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_y#VP)u!tbyBV-%dJVUUx(D(*w;Uk0<7Ba*)un;Rj8;wOEjgmS| zK(R?4VT%+gLs+;L?ykE#oA`rX80PPC=A1cqMo|7V*5E$@r6fa86%<*aMZUvON)8Y( z7v^)XB&T9AlP^_iX_jOeYTPoz%u*Wd%eT@V;P&p8ey?A+8L>eGG@)cVM#>oaEg#b{ z8OfQb*F6Pzd3m*DX>}i&^?0~{P=Lde8#zDQ1z=}uhs~``Tc7s|Go8nIRsmTqC&@t&SftvQZ$*h;pne{LogWvKAry=1qv|ox=_W_6&kp-Bn`7NJl5fLpS{Fa}(?AF}nPj7wu zz*-A}AUDp=^A;8&DN+h$6YuGdzpq5bZ=#Z8DbRiFGM8!_g48=9YqvCu4PMt|W&$jzeRwk?y|( XBtfKUVyU7u00000NkvXXu0mjfNX_2{ diff --git a/resources/view_clipping_pressed.png b/resources/view_clipping_pressed.png deleted file mode 100755 index 7895f655480cf00be12936bf7a0870a56eb68053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1(2s1Lwnj--eWH0gbb!ETG&B&)}Eu@>;2ozf3>Eak7aXEQQ-rB$C9b69_aY#Mj z6MVH1~C@(jN5ZBwDgMqS6ARa4AlESQsTm;>p(pZ^)}?KbuH91x_{t8L!_hdxWz05&vhSGeE0ofr5n86@02!OVO z`c$ho^s>jnm7x5U>F0GPs3TQO7fb$_!m_ zSP=275>Xws>+u`R0Uz27sta5RY6xrv^%F2*+51Jk=?j-7T>be5q0RsR002ovPDHLk FV1jEZX9EBL diff --git a/resources/view_dump.png b/resources/view_dump.png deleted file mode 100755 index 8eb63e09be9919e21d4c8e54482127881dfb5d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)4z!7>1uK9(3SAf^^7GunHcs^$cDz)_6(iV({WI4*3It{)u>Xhxj~ti8*H|$zqZ} z5J<)wJji1p0cj{igW)BkJ?%Pv>zOQKhAcmy9|Z{bV&nXriRhkD0mYv?#0>V_!1=*0M=P_N#mTuI*XDD zDJ5oVP*Txqwy4!>IlS;^hIEpWoQ?8%zZa8EQd-RxU+cAeeKbrM3F&eEM51X zf!*F5=A6Sm*rh$|?7AbXz(%uynHuhH?od+YZ|a=GOiey?NmGd`E5Nmlot!6`eYB*L zH19X9_1cPr5NvO4BjpB{0YpI%7DIN*JLpduKl6C+=WZ6B9R&zQh$uddSAl=4-#bmH8`<`*2LJ#707*qo IM6N<$g7~BA;{X5v diff --git a/resources/view_fitall.png b/resources/view_fitall.png deleted file mode 100644 index c09ff94ad89b32483194de03275ece8844f985da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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$ diff --git a/resources/view_fitselect.png b/resources/view_fitselect.png deleted file mode 100755 index 7ff3e0a62ca7db8d8712a19dbc5dade1281dd369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0eCP)004R=004l4008;_004mK004C`008P>0026d000+nm#LZ50008B zNkl#>_Q{}^3I1ZAK->@uy8O4 z@CYz)@Nh5)iU=|+UA7dg4kXXU#`Y4ZKLx}G2q5e(1Okw2v^2F)ya@|K5CC}<23D?I zDf0Wr@7cn;g=Yf<5Kb3@yaNK~PM-rC4stCBfLtjlD#;KW6b$BrT(6;_!SMU{Z?GDG z0D>C`av|I_q{sn>*B_{>fZpchh%uV06U6%0Io{Txh#BJJModtkPNgalYUKmfrF1Oi87!$1KH^A5-b zFg7xP85SKC&9Gtph6{YWd_rwx*nR%|`Gb&v&^vBU zZY6*KLNO4ZVXy!~PJb{^URM6s+|1l#>C&Zp00Ib6d;!A`IWeOf2FfAeoWg=?Ac+6s z#T_eP1U>}u0Rjl6_yXq3|G-H250w1Bcw_yc=q?F{ZOBXNwc5!y_(bm^LfbLyrGGhgr^Bcql2p|*#VPNa#t^Z+Z m4CGBGS0_faG>;Pi1Q-C|mSt5BR$P7n0000!JVgih^5+cQw$wr zBrNIEn?Eb+Xi>Xc7Dtq&7Tu@&m416~mCV(Y%K~fP+DTBgtNeI$N79)lt@ShzE6qzo z^>aPCj5UECJ`R)@Ihn#tyX>3`R16KOagjhz=M$CuKw+2^R^?sgQC!71e66*km;6jh z@4SG-)!1cGH4kL#JhGFA(vQgbe3@1|mUm(%Sd1@UMlu* zBq_~nm}%7CX1yU}%tmJ%BGCMdZHzCLn8iW*0_gW| UI2>wZ_W%F@07*qoM6N<$g1r`_kpKVy diff --git a/resources/view_glpan.png b/resources/view_glpan.png deleted file mode 100644 index c23322a4ae4dc6ffdbbac6af7b397fc35554d750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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#+!$#_8k0000dQQu^Rd0_eIO zw%@u?(1n7uPDC){__FTiy$Y)`1rgEie0P3?Ss#1!gA65@4V7R-L}c4CHbQO3(CstyWOGV68Jhg&)CVui>>_|4@#Fvi002ovPDHLkV1hK&k+A>( diff --git a/resources/view_left.png b/resources/view_left.png deleted file mode 100644 index dbc06cc6ec573b34d14c82800a0b6fbfd6e24d08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)#4hYT73@xcd(&pm-#npxikSuV5-9m#TxJaE8cS( z?6CT6guTvLO5I1?Y0TfI*^p9d4t#%GP6fh2>61#>&d|az~ z05N#?xDzwrJ#o5i(^B2kWS)!|$8SyXBtk0wa=r|AGpB2s!CAJ;*nocxT=bl{W&r1b lVS@_K(#Gk*T(fDJegL0JhzmDWEerqv002ovPDHLkV1gN~uB`w7 diff --git a/resources/view_pan.png b/resources/view_pan.png deleted file mode 100644 index 038fba118736ff3732a97e0e62ea4420022560ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)BjE7>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+z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-mq|oHRCwCNl)-A-KoEw%4LNKehvanvy;S4{l2g3U zQ|Kw=VcZQEoLo{?ImtE&>Y+vjlhV9O4hHEU&>jqvgKX6+x3L9<4h-6Fg?|2>nUxX| z6pB>{h+=J{W9+SifUKU`G!ua)y9+Ah<>xN|M&pFn`75Jw(!5T_iKI`d>?Wvc2PYp+ z060H8$Mg)|d%iuT0Qk~Vl*Nt?rLI{rsvX(B#r7?xXDG^o_`y;63Kkt}=)G^&$4AEi z^ezlqYYq+%(1&`vqWmtoxY)^ZYa?CkBz;T;sk`>K3>=!CAsHpy4R28j;;#;XyWuTW zS>YFct3egaq1qe|cVCN|PiBYXqW0H0eM~9Jf~u^z{CtV+Tk<03>iUZ8d$v_CQjr9L zT5I&8F1(A~Mpr+cM$P)iG}~Z+KrlLuR5s1T?|b~h2VGx%G#Cz+GyvMX-sSglIRWji zw;2eJye;Af$7DQN(gbMp|8$tob8fy^X3w+6Q9cj3lSA9Lfulch=Ng6%XF!|VH|5|LZ6HnY2DTKF00000NkvXXu0mjf48-Oy diff --git a/resources/view_reset.png b/resources/view_reset.png deleted file mode 100644 index 12850643e8c561aae15dc7c2990028d57ac9d1bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmV<30V4j1P)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 diff --git a/resources/view_right.png b/resources/view_right.png deleted file mode 100644 index 598def41df5762d105c934b230cb10f1c6d8a546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmV;10eSw3P)ToQ5QWE87Di$LQWhMcK1b98RH(N>SwyrwOl9>DRjv@{2w6nR5geXj8e_2O0(Dq` zyZ6bQNNyxaDdRw#w1<|O zeKUKEGlm|2j+EsY6?qZ2Y>XMH@B^xG5koK63sv0%g=1i+3LvEv>4SE#&@w>Q;=R{->_G!~_p%cc;8FnQ*Q|c6g@69AY)N!AvA65Z?PeDGCWSsE#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/resources/view_scaling.png b/resources/view_scaling.png deleted file mode 100755 index 5d3443634a69abf41d825b5fdbd331808066cbda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)Po92!IiWcWARVf8UuMehUVxU!Hz^ z5f56#t2#PWfNiO<0o+x?B5WVo4EKQ*e-_w!F6>dmN?0+Lro6P-)DMJ@bM4ThIOU@b^V*pBXJDE)Ec)66%zq5v} zehjZCTW5+kpMTqjo2`@kf9-F^Z6D^)c+e{Oxt+Z|TmSVjD%qku5kW*U0RPyptkEvj v&T52V$YQbZe1K-N$!s?J7YrZ_L%aS33LLx=z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-xJg7oRCwB~lQC=CKorM+XFNQC2j%0mbTEW25iX>e zYOkTo^+V`01ba%dw45>+*^rBe@Fz5!u>!3)MjMLbme|X~Vbo#w}@BT6< zE!iJd0Vb14xu6)1l5WFVThE$fKxxlj4TDlWvDVgksuQY$F^8YDy9;ZA;04CJi$+z; z*j;ytJE-i=ZmGtUVXY;O<5uSEA=9@@-lI5<>G%7*N1a19xx^9n!m2-dG;q0GGM!F& z{`1^|oeiQIx_DfumUpMkBrV%ir>Rtd0HQAuPrsk|@aZG7d5ZTQ5#j6k1pu>oigcw! zWe=I=>wG_G5SeDe+Lw)1oDCw9UkMtPA|cH`{%H_Uv{)9jknWh!FIG{eQ}9%I-7rbxyG^xcq*}_-f25UjYzE zfQTFi6cJ=2Tfc6$@4_%dM2;*OSUfJ&dyn7v`qo8+uorUr`P3Ly<$vn$01lk`EL2jX Q6951J07*qoM6N<$f`$hDr~m)} diff --git a/resources/view_top.png b/resources/view_top.png deleted file mode 100644 index ebbf34da5e69afc736d890204dc84ff913cb512e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)Qy+Xqgx~S9*QoBGheug2Av0WAs zFLL8(#^3xTQ$dDi)nZ;8(K2To-iANruP&6}y-1bJu>QGEg4*lW-M7P*Yh^Wsudn!IH=BRb0Ay{}Y1;~CDR|NXF`uxx&gwImCKbNEqn54q3I z=cPXnM0BN8G?0VZQ~F8&z%U_&EZnq=lkz=kni19Q*9Hhlu)NPf;XgX3-h0000LX zs1y%eI2<_t`Okm;B*3xPIM^@Te*!xGCPvWL)&+Z6<^aSeanP*?5c~`)P$zEz|oc#e30cD(1^Uc5=y=x$By?ZPaRGr!Wk^d?nv5moIats-AJTEz@`9Z`A4^ k(&qh^`6b{_V(&lL4{SuhVMr-3DgXcg07*qoM6N<$f-sH8LI3~& diff --git a/resources/view_update_rate.png b/resources/view_update_rate.png deleted file mode 100755 index 3d01ad18482c5a4b8c37a4d4784935bbf9dfda78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmV;-12g=IP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ#c!2mTx`6-zgkd1auxNgMhW|&8GCa6=kpU#5v||TIsvD}L6iL4_ z5Whq=7$AUHK!k>x8Xu6#1me{nKYnCj0O8xW8D9SQ!C((GSX@-}%C{ds96x{l{1B*S znwY4l%HO|#-8k6UC;j{Xf7kODFXqAw1qdJ(sKFg6si~PeckJl!{qu+6|D#6?=RSXC z2)cHS!NJas!QI0{=jzp~3b8WS7q#>WS81A{kE-22Gk!Ktwj+7#X2^%Aa$}bGUtKj1^@&QIHv$(YZ^3R z!@;j#zc&B-_m7K%gToo_dZS2&&u<C;*u^AbP+VPriiDXITr zVqy$3GBONXwrl}sEp2V>FDB)e7#`g`&G78}28MU{PB6T_aR8)zC&)ZdDgxs5Kzt7% zfUp$~+#p2)z5)#Vm-rdDxw#n>Q}!}^czB-S{lha1*EZC_)a``QcY$~V5FZ1jB!B?I zTH1ih10Z$<;u%;{%UWnj!+`EOkN`jc;W7~9N$D2U!bMTJ*dkr!3qa} u0K#P;vH{9a!^M&0UP2AIi(Y&I1Q-C)H>OJ$<6_?c0000@}v&{ diff --git a/resources/view_zoom.png b/resources/view_zoom.png deleted file mode 100644 index b46573914ded57ddbdbd0fdfdeca02dbe772beca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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$%y0000W(e>JasB`QKLbMxQ1HNk13;1} zAc;fO1E9D9LnlK{dnXPRLt9uA==>RsoeW%)eeik&6h1LPoB+frKwJaFAi&AUz))6_ znUkuQo|y&;aN+IEGZ*N;YU?Vsmyh5J)pf5fKq#Fn*xK!_&jW!?Pvfz?ue2W`^~%IHk5sn34-} Nw5O||%Q~loCIEJ_)DQpw diff --git a/src/Makefile.in b/src/Makefile.in deleted file mode 100755 index f55c420e7..000000000 --- a/src/Makefile.in +++ /dev/null @@ -1,83 +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 : Patrick GOLDBRONN (CEA) -# Module : SALOME -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - - -@COMMENCE@ - -SUBDIRS = Qtx Style DDS QDS SUIT STD CAF CAM SUITApp LogWindow ObjBrowser Prs - -ifneq ($(DISABLE_SALOMEOBJECT),yes) - SUBDIRS += OBJECT -endif - -ifneq ($(DISABLE_GLVIEWER),yes) - SUBDIRS += GLViewer -endif - -ifneq ($(DISABLE_VTKVIEWER),yes) - SUBDIRS += VTKViewer -ifneq ($(DISABLE_SALOMEOBJECT),yes) - SUBDIRS += SVTK -endif -endif -ifneq ($(DISABLE_OCCVIEWER),yes) - SUBDIRS += OCCViewer -ifneq ($(DISABLE_SALOMEOBJECT),yes) - SUBDIRS += SOCC -endif -endif -ifneq ($(DISABLE_PYCONSOLE),yes) - SUBDIRS += PyInterp PythonConsole -endif -ifneq ($(DISABLE_PLOT2DVIEWER),yes) - SUBDIRS += Plot2d -ifneq ($(DISABLE_SALOMEOBJECT),yes) - SUBDIRS += SPlot2d -endif -endif -ifneq ($(DISABLE_SUPERVGRAPHVIEWER),yes) - SUBDIRS += SUPERVGraph -endif -SUBDIRS += LightApp ResExporter - -ifneq ($(GUI_DISABLE_CORBA),yes) - SUBDIRS += RegistryDisplay TOOLSGUI \ - Event Session SalomeApp SALOME_SWIG SALOME_PY SALOME_PYQT -endif - -ifeq (@cppunit_ok@,yes) -ifneq ($(GUI_DISABLE_CORBA),yes) - SUBDIRS+= \ - SalomeApp/Test -endif -endif - -@MODULE@ diff --git a/src/OBJECT/Handle_SALOME_AISObject.hxx b/src/OBJECT/Handle_SALOME_AISObject.hxx deleted file mode 100755 index 342cf6221..000000000 --- a/src/OBJECT/Handle_SALOME_AISObject.hxx +++ /dev/null @@ -1,108 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : Handle_SALOME_AISObject.hxx -// Module : SALOME - -#ifndef _Handle_SALOME_AISObject_HeaderFile -#define _Handle_SALOME_AISObject_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_AIS_InteractiveObject_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -/*! - \class Handle(AIS_InteractiveObject) - Smart pointer (handle) to AIS_InteractiveObject -*/ -class Handle(AIS_InteractiveObject); -class SALOME_AISObject; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SALOME_AISObject); - -/*! - \class Handle(SALOME_AISObject) - Smart pointer (handle) to SALOME_AISObject -*/ -class Handle(SALOME_AISObject) : public Handle(AIS_InteractiveObject) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(SALOME_AISObject)():Handle(AIS_InteractiveObject)() {} - Handle(SALOME_AISObject)(const Handle(SALOME_AISObject)& aHandle) : Handle(AIS_InteractiveObject)(aHandle) - { - } - - Handle(SALOME_AISObject)(const SALOME_AISObject* anItem) : Handle(AIS_InteractiveObject)((AIS_InteractiveObject *)anItem) - { - } - - Handle(SALOME_AISObject)& operator=(const Handle(SALOME_AISObject)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SALOME_AISObject)& operator=(const SALOME_AISObject* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SALOME_AISObject* operator->() - { - return (SALOME_AISObject *)ControlAccess(); - } - - SALOME_AISObject* operator->() const - { - return (SALOME_AISObject *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SALOME_AISObject)(); - - Standard_EXPORT static const Handle(SALOME_AISObject) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_SALOME_AISShape.hxx b/src/OBJECT/Handle_SALOME_AISShape.hxx deleted file mode 100755 index b987b929a..000000000 --- a/src/OBJECT/Handle_SALOME_AISShape.hxx +++ /dev/null @@ -1,108 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : Handle_SALOME_AISShape.hxx -// Module : SALOME - -#ifndef _Handle_SALOME_AISShape_HeaderFile -#define _Handle_SALOME_AISShape_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_AIS_Shape_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -/*! - \class Handle(AIS_Shape) - Smart pointer (handle) to AIS_Shape -*/ -class Handle(AIS_Shape); -class SALOME_AISShape; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SALOME_AISShape); - -/*! - \class Handle(SALOME_AISShape) - Smart pointer (handle) to SALOME_AISShape -*/ -class Handle(SALOME_AISShape) : public Handle(AIS_Shape) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(SALOME_AISShape)():Handle(AIS_Shape)() {} - Handle(SALOME_AISShape)(const Handle(SALOME_AISShape)& aHandle) : Handle(AIS_Shape)(aHandle) - { - } - - Handle(SALOME_AISShape)(const SALOME_AISShape* anItem) : Handle(AIS_Shape)((AIS_Shape *)anItem) - { - } - - Handle(SALOME_AISShape)& operator=(const Handle(SALOME_AISShape)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SALOME_AISShape)& operator=(const SALOME_AISShape* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SALOME_AISShape* operator->() - { - return (SALOME_AISShape *)ControlAccess(); - } - - SALOME_AISShape* operator->() const - { - return (SALOME_AISShape *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SALOME_AISShape)(); - - Standard_EXPORT static const Handle(SALOME_AISShape) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx b/src/OBJECT/Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx deleted file mode 100644 index b94e60d00..000000000 --- a/src/OBJECT/Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx -// Module : SALOME - -#ifndef _Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile -#define _Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_TCollection_MapNode_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -class Handle(TCollection_MapNode); -class SALOME_DataMapNodeOfDataMapOfIOMapOfInteger; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger); - -class Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger) : public Handle(TCollection_MapNode) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)():Handle(TCollection_MapNode)() {} - Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)(const Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)& aHandle) : Handle(TCollection_MapNode)(aHandle) - { - } - - Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)(const SALOME_DataMapNodeOfDataMapOfIOMapOfInteger* anItem) : Handle(TCollection_MapNode)((TCollection_MapNode *)anItem) - { - } - - Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)& operator=(const Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)& operator=(const SALOME_DataMapNodeOfDataMapOfIOMapOfInteger* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SALOME_DataMapNodeOfDataMapOfIOMapOfInteger* operator->() - { - return (SALOME_DataMapNodeOfDataMapOfIOMapOfInteger *)ControlAccess(); - } - - SALOME_DataMapNodeOfDataMapOfIOMapOfInteger* operator->() const - { - return (SALOME_DataMapNodeOfDataMapOfIOMapOfInteger *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)(); - - Standard_EXPORT static const Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_SALOME_Filter.hxx b/src/OBJECT/Handle_SALOME_Filter.hxx deleted file mode 100644 index 8c2294006..000000000 --- a/src/OBJECT/Handle_SALOME_Filter.hxx +++ /dev/null @@ -1,108 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : Handle_SALOME_Filter.hxx -// Module : SALOME - -#ifndef _Handle_SALOME_Filter_HeaderFile -#define _Handle_SALOME_Filter_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_MMgt_TShared_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -/*! - \class Handle(MMgt_TShared) - Smart pointer (handle) to MMgt_TShared -*/ -class Handle(MMgt_TShared); -class SALOME_Filter; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SALOME_Filter); - -/*! - \class Handle(SALOME_Filter) - Smart pointer (handle) to SALOME_Filter -*/ -class Handle(SALOME_Filter) : public Handle(MMgt_TShared) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(SALOME_Filter)():Handle(MMgt_TShared)() {} - Handle(SALOME_Filter)(const Handle(SALOME_Filter)& aHandle) : Handle(MMgt_TShared)(aHandle) - { - } - - Handle(SALOME_Filter)(const SALOME_Filter* anItem) : Handle(MMgt_TShared)((MMgt_TShared *)anItem) - { - } - - Handle(SALOME_Filter)& operator=(const Handle(SALOME_Filter)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SALOME_Filter)& operator=(const SALOME_Filter* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SALOME_Filter* operator->() - { - return (SALOME_Filter *)ControlAccess(); - } - - SALOME_Filter* operator->() const - { - return (SALOME_Filter *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SALOME_Filter)(); - - Standard_EXPORT static const Handle(SALOME_Filter) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_SALOME_InteractiveObject.hxx b/src/OBJECT/Handle_SALOME_InteractiveObject.hxx deleted file mode 100755 index 9bc3776c9..000000000 --- a/src/OBJECT/Handle_SALOME_InteractiveObject.hxx +++ /dev/null @@ -1,104 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : Handle_SALOME_InteractiveObject.hxx -// Module : SALOME - -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#define _Handle_SALOME_InteractiveObject_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_MMgt_TShared_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -/*! - \class Handle(MMgt_TShared) - Smart pointer (handle) to MMgt_TShared -*/ -class Handle(MMgt_TShared); -class SALOME_InteractiveObject; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SALOME_InteractiveObject); - -/*! - \class Handle(SALOME_InteractiveObject) - Smart pointer (handle) to SALOME_InteractiveObject -*/ -class Handle(SALOME_InteractiveObject) : public Handle(MMgt_TShared) { - public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - Handle(SALOME_InteractiveObject)():Handle(MMgt_TShared)() {} - Handle(SALOME_InteractiveObject)(const Handle(SALOME_InteractiveObject)& aHandle) : Handle(MMgt_TShared)(aHandle) - { - } - - Handle(SALOME_InteractiveObject)(const SALOME_InteractiveObject* anItem) : Handle(MMgt_TShared)((MMgt_TShared *)anItem) - { - } - - Handle(SALOME_InteractiveObject)& operator=(const Handle(SALOME_InteractiveObject)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SALOME_InteractiveObject)& operator=(const SALOME_InteractiveObject* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SALOME_InteractiveObject* operator->() - { - return (SALOME_InteractiveObject *)ControlAccess(); - } - - SALOME_InteractiveObject* operator->() const - { - return (SALOME_InteractiveObject *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SALOME_InteractiveObject)(); - - Standard_EXPORT static const Handle(SALOME_InteractiveObject) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_SALOME_ListNodeOfListIO.hxx b/src/OBJECT/Handle_SALOME_ListNodeOfListIO.hxx deleted file mode 100644 index e78995482..000000000 --- a/src/OBJECT/Handle_SALOME_ListNodeOfListIO.hxx +++ /dev/null @@ -1,104 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : Handle_SALOME_ListNodeOfListIO.hxx -// Module : SALOME - -#ifndef _Handle_SALOME_ListNodeOfListIO_HeaderFile -#define _Handle_SALOME_ListNodeOfListIO_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_TCollection_MapNode_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -/*! - \class Handle(TCollection_MapNode) - Smart pointer (handle) to TCollection_MapNode -*/ -class Handle(TCollection_MapNode); -class SALOME_ListNodeOfListIO; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SALOME_ListNodeOfListIO); - -/*! - \class Handle(SALOME_ListNodeOfListIO) - Smart pointer (handle) to SALOME_ListNodeOfListIO -*/ -class Handle(SALOME_ListNodeOfListIO) : public Handle(TCollection_MapNode) { - public: - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - Handle(SALOME_ListNodeOfListIO)():Handle(TCollection_MapNode)() {} - Handle(SALOME_ListNodeOfListIO)(const Handle(SALOME_ListNodeOfListIO)& aHandle) : Handle(TCollection_MapNode)(aHandle) - { - } - - Handle(SALOME_ListNodeOfListIO)(const SALOME_ListNodeOfListIO* anItem) : Handle(TCollection_MapNode)((TCollection_MapNode *)anItem) - { - } - - Handle(SALOME_ListNodeOfListIO)& operator=(const Handle(SALOME_ListNodeOfListIO)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SALOME_ListNodeOfListIO)& operator=(const SALOME_ListNodeOfListIO* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SALOME_ListNodeOfListIO* operator->() - { - return (SALOME_ListNodeOfListIO *)ControlAccess(); - } - - SALOME_ListNodeOfListIO* operator->() const - { - return (SALOME_ListNodeOfListIO *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SALOME_ListNodeOfListIO)(); - - Standard_EXPORT static const Handle(SALOME_ListNodeOfListIO) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Handle_SALOME_TypeFilter.hxx b/src/OBJECT/Handle_SALOME_TypeFilter.hxx deleted file mode 100644 index 4ca800e04..000000000 --- a/src/OBJECT/Handle_SALOME_TypeFilter.hxx +++ /dev/null @@ -1,108 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : Handle_SALOME_TypeFilter.hxx -// Module : SALOME - -#ifndef _Handle_SALOME_TypeFilter_HeaderFile -#define _Handle_SALOME_TypeFilter_HeaderFile - -#ifndef _Standard_Macro_HeaderFile -#include -#endif -#ifndef _Standard_HeaderFile -#include -#endif - -#ifndef _Handle_SALOME_Filter_HeaderFile -#include -#endif - -class Standard_Transient; -class Handle_Standard_Type; -/*! - \class Handle(SALOME_Filter) - Smart pointer (handle) to SALOME_Filter -*/ -class Handle(SALOME_Filter); -class SALOME_TypeFilter; -Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(SALOME_TypeFilter); - -/*! - \class Handle(SALOME_TypeFilter) - Smart pointer (handle) to SALOME_TypeFilter -*/ -class Handle(SALOME_TypeFilter) : public Handle(SALOME_Filter) { - public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - Handle(SALOME_TypeFilter)():Handle(SALOME_Filter)() {} - Handle(SALOME_TypeFilter)(const Handle(SALOME_TypeFilter)& aHandle) : Handle(SALOME_Filter)(aHandle) - { - } - - Handle(SALOME_TypeFilter)(const SALOME_TypeFilter* anItem) : Handle(SALOME_Filter)((SALOME_Filter *)anItem) - { - } - - Handle(SALOME_TypeFilter)& operator=(const Handle(SALOME_TypeFilter)& aHandle) - { - Assign(aHandle.Access()); - return *this; - } - - Handle(SALOME_TypeFilter)& operator=(const SALOME_TypeFilter* anItem) - { - Assign((Standard_Transient *)anItem); - return *this; - } - - SALOME_TypeFilter* operator->() - { - return (SALOME_TypeFilter *)ControlAccess(); - } - - SALOME_TypeFilter* operator->() const - { - return (SALOME_TypeFilter *)ControlAccess(); - } - - Standard_EXPORT ~Handle(SALOME_TypeFilter)(); - - Standard_EXPORT static const Handle(SALOME_TypeFilter) DownCast(const Handle(Standard_Transient)& AnObject); -}; -#endif diff --git a/src/OBJECT/Makefile.in b/src/OBJECT/Makefile.in deleted file mode 100755 index ad9e94ccc..000000000 --- a/src/OBJECT/Makefile.in +++ /dev/null @@ -1,73 +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 = SALOME_InteractiveObject.hxx \ - Handle_SALOME_InteractiveObject.hxx \ - SALOME_AISShape.hxx \ - Handle_SALOME_AISShape.hxx \ - SALOME_AISObject.hxx \ - Handle_SALOME_AISObject.hxx \ - SALOME_ListIO.hxx \ - SALOME_ListIteratorOfListIO.hxx \ - Handle_SALOME_ListNodeOfListIO.hxx \ - SALOME_ListNodeOfListIO.hxx \ - Handle_SALOME_Filter.hxx \ - SALOME_Filter.hxx \ - Handle_SALOME_TypeFilter.hxx \ - SALOME_TypeFilter.hxx \ - SALOME_DataMapOfIOMapOfInteger.hxx \ - SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx \ - Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx \ - SALOME_Selection.h - - -# Libraries targets - -LIB = libSalomeObject.la -LIB_SRC = SALOME_InteractiveObject.cxx \ - SALOME_AISShape.cxx\ - SALOME_AISObject.cxx\ - SALOME_ListIO_0.cxx \ - SALOME_ListIteratorOfListIO_0.cxx \ - SALOME_ListNodeOfListIO_0.cxx \ - SALOME_Filter.cxx \ - SALOME_TypeFilter.cxx \ - SALOME_DataMapOfIOMapOfInteger_0.cxx \ - SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx \ - SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_0.cxx - -LIB_CLIENT_IDL = - -# Executables targets -BIN = -BIN_SRC = - -CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) -LDFLAGS+= $(QT_LIBS) $(CAS_LDPATH) -lTKV3d - - -@CONCLUDE@ diff --git a/src/OBJECT/SALOME_AISObject.cxx b/src/OBJECT/SALOME_AISObject.cxx deleted file mode 100755 index c50184989..000000000 --- a/src/OBJECT/SALOME_AISObject.cxx +++ /dev/null @@ -1,30 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISObject.hxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -//using namespace std; -#include "SALOME_AISObject.ixx" diff --git a/src/OBJECT/SALOME_AISObject.hxx b/src/OBJECT/SALOME_AISObject.hxx deleted file mode 100755 index b89716f4c..000000000 --- a/src/OBJECT/SALOME_AISObject.hxx +++ /dev/null @@ -1,119 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISObject.hxx -// Module : SALOME - -#ifndef _SALOME_AISObject_HeaderFile -#define _SALOME_AISObject_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_AISObject_HeaderFile -#include -#endif - -#ifndef _AIS_InteractiveObject_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Standard_CString_HeaderFile -#include -#endif -class SALOME_InteractiveObject; - - -class SALOME_AISObject : public AIS_InteractiveObject { - -public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT virtual Handle_SALOME_InteractiveObject getIO() = 0; -Standard_EXPORT virtual Standard_Boolean hasIO() = 0; -Standard_EXPORT virtual Standard_CString getName() = 0; -Standard_EXPORT virtual void setName(const Standard_CString aName) = 0; -Standard_EXPORT ~SALOME_AISObject(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SALOME_AISObject_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - -}; - - - - - -// other inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_AISObject.ixx b/src/OBJECT/SALOME_AISObject.ixx deleted file mode 100755 index 11980b967..000000000 --- a/src/OBJECT/SALOME_AISObject.ixx +++ /dev/null @@ -1,87 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISObject.ixx -// Module : SALOME - -#include "SALOME_AISObject.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -SALOME_AISObject::~SALOME_AISObject() {} - - - -Standard_EXPORT Handle_Standard_Type& SALOME_AISObject_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(AIS_InteractiveObject); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(AIS_InteractiveObject); - static Handle_Standard_Type aType2 = STANDARD_TYPE(SelectMgr_SelectableObject); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(SelectMgr_SelectableObject); - static Handle_Standard_Type aType3 = STANDARD_TYPE(PrsMgr_PresentableObject); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(PrsMgr_PresentableObject); - static Handle_Standard_Type aType4 = STANDARD_TYPE(MMgt_TShared); - if ( aType4.IsNull()) aType4 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType5 = STANDARD_TYPE(Standard_Transient); - if ( aType5.IsNull()) aType5 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,aType4,aType5,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SALOME_AISObject", - sizeof(SALOME_AISObject), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(SALOME_AISObject) Handle(SALOME_AISObject)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SALOME_AISObject) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SALOME_AISObject))) { - _anOtherObject = Handle(SALOME_AISObject)((Handle(SALOME_AISObject)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& SALOME_AISObject::DynamicType() const -{ - return STANDARD_TYPE(SALOME_AISObject) ; -} -Standard_Boolean SALOME_AISObject::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SALOME_AISObject) == AType || AIS_InteractiveObject::IsKind(AType)); -} -Handle_SALOME_AISObject::~Handle_SALOME_AISObject() {} - diff --git a/src/OBJECT/SALOME_AISObject.jxx b/src/OBJECT/SALOME_AISObject.jxx deleted file mode 100755 index 95635ee72..000000000 --- a/src/OBJECT/SALOME_AISObject.jxx +++ /dev/null @@ -1,32 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISObject.jxx -// Module : SALOME - -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _SALOME_AISObject_HeaderFile -#include "SALOME_AISObject.hxx" -#endif diff --git a/src/OBJECT/SALOME_AISShape.cxx b/src/OBJECT/SALOME_AISShape.cxx deleted file mode 100755 index 52afc406d..000000000 --- a/src/OBJECT/SALOME_AISShape.cxx +++ /dev/null @@ -1,40 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISShape.hxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -//using namespace std; -#include "SALOME_AISShape.ixx" - -/*! - Constructor - \param shape - TopoDS shape -*/ -SALOME_AISShape::SALOME_AISShape(const TopoDS_Shape& shape) -: AIS_Shape(shape) -{ -} - diff --git a/src/OBJECT/SALOME_AISShape.hxx b/src/OBJECT/SALOME_AISShape.hxx deleted file mode 100755 index 4a8b87d98..000000000 --- a/src/OBJECT/SALOME_AISShape.hxx +++ /dev/null @@ -1,122 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISShape.hxx -// Module : SALOME - -#ifndef _SALOME_AISShape_HeaderFile -#define _SALOME_AISShape_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_AISShape_HeaderFile -#include -#endif - -#ifndef _Standard_CString_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _AIS_Shape_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -class SALOME_InteractiveObject; -class TopoDS_Shape; -class TColStd_IndexedMapOfInteger; - - -class SALOME_AISShape : public AIS_Shape { - -public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT SALOME_AISShape(const TopoDS_Shape& shape); -Standard_EXPORT virtual Handle_SALOME_InteractiveObject getIO() = 0; -Standard_EXPORT virtual Standard_Boolean hasIO() = 0; -Standard_EXPORT virtual Standard_CString getName() = 0; -Standard_EXPORT virtual void setName(const Standard_CString aName) = 0; -Standard_EXPORT virtual void highlightSubShapes(const TColStd_IndexedMapOfInteger& aIndexMap, const Standard_Boolean aHighlight ) = 0; -Standard_EXPORT ~SALOME_AISShape(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SALOME_AISShape_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - -}; - - - - - -// other inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_AISShape.ixx b/src/OBJECT/SALOME_AISShape.ixx deleted file mode 100755 index 11909336e..000000000 --- a/src/OBJECT/SALOME_AISShape.ixx +++ /dev/null @@ -1,89 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISShape.ixx -// Module : SALOME - -#include "SALOME_AISShape.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -SALOME_AISShape::~SALOME_AISShape() {} - - - -Standard_EXPORT Handle_Standard_Type& SALOME_AISShape_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(AIS_Shape); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(AIS_Shape); - static Handle_Standard_Type aType2 = STANDARD_TYPE(AIS_InteractiveObject); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(AIS_InteractiveObject); - static Handle_Standard_Type aType3 = STANDARD_TYPE(SelectMgr_SelectableObject); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(SelectMgr_SelectableObject); - static Handle_Standard_Type aType4 = STANDARD_TYPE(PrsMgr_PresentableObject); - if ( aType4.IsNull()) aType4 = STANDARD_TYPE(PrsMgr_PresentableObject); - static Handle_Standard_Type aType5 = STANDARD_TYPE(MMgt_TShared); - if ( aType5.IsNull()) aType5 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType6 = STANDARD_TYPE(Standard_Transient); - if ( aType6.IsNull()) aType6 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,aType4,aType5,aType6,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SALOME_AISShape", - sizeof(SALOME_AISShape), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(SALOME_AISShape) Handle(SALOME_AISShape)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SALOME_AISShape) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SALOME_AISShape))) { - _anOtherObject = Handle(SALOME_AISShape)((Handle(SALOME_AISShape)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& SALOME_AISShape::DynamicType() const -{ - return STANDARD_TYPE(SALOME_AISShape) ; -} -Standard_Boolean SALOME_AISShape::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SALOME_AISShape) == AType || AIS_Shape::IsKind(AType)); -} -Handle_SALOME_AISShape::~Handle_SALOME_AISShape() {} - diff --git a/src/OBJECT/SALOME_AISShape.jxx b/src/OBJECT/SALOME_AISShape.jxx deleted file mode 100755 index cae6c5f54..000000000 --- a/src/OBJECT/SALOME_AISShape.jxx +++ /dev/null @@ -1,35 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_AISShape.jxx -// Module : SALOME - -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _TopoDS_Shape_HeaderFile -#include -#endif -#ifndef _SALOME_AISShape_HeaderFile -#include "SALOME_AISShape.hxx" -#endif diff --git a/src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx b/src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx deleted file mode 100644 index 34ebe62d6..000000000 --- a/src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx +++ /dev/null @@ -1,116 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx -// Module : SALOME - -#ifndef _SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_HeaderFile -#define _SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_HeaderFile - -#ifndef _TCollection_BasicMapIterator_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile -#include -#endif -class Standard_NoSuchObject; -class SALOME_InteractiveObject; -class TColStd_IndexedMapOfInteger; -class TColStd_MapTransientHasher; -class SALOME_DataMapOfIOMapOfInteger; -class SALOME_DataMapNodeOfDataMapOfIOMapOfInteger; - - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -class SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger : public TCollection_BasicMapIterator { - -public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger(); -Standard_EXPORT SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger(const SALOME_DataMapOfIOMapOfInteger& aMap); -Standard_EXPORT void Initialize(const SALOME_DataMapOfIOMapOfInteger& aMap) ; -Standard_EXPORT const Handle_SALOME_InteractiveObject& Key() const; -Standard_EXPORT const TColStd_IndexedMapOfInteger& Value() const; - - - - - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - -}; - - - - - -// other inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_0.cxx b/src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_0.cxx deleted file mode 100644 index f24caa367..000000000 --- a/src/OBJECT/SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_0.cxx +++ /dev/null @@ -1,65 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_0.cxx -// Module : SALOME - -#include "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" - -#ifndef _Standard_NoSuchObject_HeaderFile -#include -#endif -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _TColStd_IndexedMapOfInteger_HeaderFile -#include -#endif -#ifndef _TColStd_MapTransientHasher_HeaderFile -#include -#endif -#ifndef _SALOME_DataMapOfIOMapOfInteger_HeaderFile -#include "SALOME_DataMapOfIOMapOfInteger.hxx" -#endif -#ifndef _SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile -#include "SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx" -#endif -using namespace std; - - -#define TheKey Handle_SALOME_InteractiveObject -#define TheKey_hxx "SALOME_InteractiveObject.hxx" -#define TheItem TColStd_IndexedMapOfInteger -#define TheItem_hxx -#define Hasher TColStd_MapTransientHasher -#define Hasher_hxx -#define TCollection_DataMapNode SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_hxx "SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx" -#define TCollection_DataMapIterator SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger -#define TCollection_DataMapIterator_hxx "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" -#define Handle_TCollection_DataMapNode Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_Type_() SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_Type_() -#define TCollection_DataMap SALOME_DataMapOfIOMapOfInteger -#define TCollection_DataMap_hxx "SALOME_DataMapOfIOMapOfInteger.hxx" -#include - diff --git a/src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx b/src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx deleted file mode 100644 index 3c100b02e..000000000 --- a/src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx +++ /dev/null @@ -1,153 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx -// Module : SALOME - -#ifndef _SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile -#define _SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile -#include -#endif - -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _TColStd_IndexedMapOfInteger_HeaderFile -#include -#endif -#ifndef _TCollection_MapNode_HeaderFile -#include -#endif -#ifndef _TCollection_MapNodePtr_HeaderFile -#include -#endif -class SALOME_InteractiveObject; -class TColStd_IndexedMapOfInteger; -class TColStd_MapTransientHasher; -class SALOME_DataMapOfIOMapOfInteger; -class SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger; - - -class SALOME_DataMapNodeOfDataMapOfIOMapOfInteger : public TCollection_MapNode { - -public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT inline SALOME_DataMapNodeOfDataMapOfIOMapOfInteger(const Handle(SALOME_InteractiveObject)& K,const TColStd_IndexedMapOfInteger& I,const TCollection_MapNodePtr& n); -Standard_EXPORT inline Handle_SALOME_InteractiveObject& Key() const; -Standard_EXPORT inline TColStd_IndexedMapOfInteger& Value() const; -Standard_EXPORT ~SALOME_DataMapNodeOfDataMapOfIOMapOfInteger(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -Handle_SALOME_InteractiveObject myKey; -TColStd_IndexedMapOfInteger myValue; - - -}; - -#define TheKey Handle_SALOME_InteractiveObject -#define TheKey_hxx "SALOME_InteractiveObject.hxx" -#define TheItem TColStd_IndexedMapOfInteger -#define TheItem_hxx -#define Hasher TColStd_MapTransientHasher -#define Hasher_hxx -#define TCollection_DataMapNode SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_hxx "SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx" -#define TCollection_DataMapIterator SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger -#define TCollection_DataMapIterator_hxx "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" -#define Handle_TCollection_DataMapNode Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_Type_() SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_Type_() -#define TCollection_DataMap SALOME_DataMapOfIOMapOfInteger -#define TCollection_DataMap_hxx "SALOME_DataMapOfIOMapOfInteger.hxx" - -#include - -#undef TheKey -#undef TheKey_hxx -#undef TheItem -#undef TheItem_hxx -#undef Hasher -#undef Hasher_hxx -#undef TCollection_DataMapNode -#undef TCollection_DataMapNode_hxx -#undef TCollection_DataMapIterator -#undef TCollection_DataMapIterator_hxx -#undef Handle_TCollection_DataMapNode -#undef TCollection_DataMapNode_Type_ -#undef TCollection_DataMap -#undef TCollection_DataMap_hxx - - -// other inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx b/src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx deleted file mode 100644 index b1a4c95fa..000000000 --- a/src/OBJECT/SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx +++ /dev/null @@ -1,133 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_0.cxx -// Module : SALOME - -#include "SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _TColStd_IndexedMapOfInteger_HeaderFile -#include -#endif -#ifndef _TColStd_MapTransientHasher_HeaderFile -#include -#endif -#ifndef _SALOME_DataMapOfIOMapOfInteger_HeaderFile -#include "SALOME_DataMapOfIOMapOfInteger.hxx" -#endif -#ifndef _SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_HeaderFile -#include "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" -#endif -using namespace std; - -/*! - Destructor -*/ -SALOME_DataMapNodeOfDataMapOfIOMapOfInteger::~SALOME_DataMapNodeOfDataMapOfIOMapOfInteger() {} - - - -/*! - \return OCC Handle Type -*/ -Standard_EXPORT Handle_Standard_Type& SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(TCollection_MapNode); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TCollection_MapNode); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SALOME_DataMapNodeOfDataMapOfIOMapOfInteger", - sizeof(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -/*! - DownCast method: allows safe downcasting -*/ -const Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger) Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger))) { - _anOtherObject = Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)((Handle(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger)&)AnObject); - } - } - - return _anOtherObject ; -} - -/*! - \return OCC Handle dynamic Type -*/ -const Handle(Standard_Type)& SALOME_DataMapNodeOfDataMapOfIOMapOfInteger::DynamicType() const -{ - return STANDARD_TYPE(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger) ; -} - -/*! - \return true if other type is the same - \param AType - type to be checked -*/ -Standard_Boolean SALOME_DataMapNodeOfDataMapOfIOMapOfInteger::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SALOME_DataMapNodeOfDataMapOfIOMapOfInteger) == AType || TCollection_MapNode::IsKind(AType)); -} -/*! - Destructor -*/ -Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger::~Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger() {} -#define TheKey Handle_SALOME_InteractiveObject -#define TheKey_hxx "SALOME_InteractiveObject.hxx" -#define TheItem TColStd_IndexedMapOfInteger -#define TheItem_hxx -#define Hasher TColStd_MapTransientHasher -#define Hasher_hxx -#define TCollection_DataMapNode SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_hxx "SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx" -#define TCollection_DataMapIterator SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger -#define TCollection_DataMapIterator_hxx "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" -#define Handle_TCollection_DataMapNode Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_Type_() SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_Type_() -#define TCollection_DataMap SALOME_DataMapOfIOMapOfInteger -#define TCollection_DataMap_hxx "SALOME_DataMapOfIOMapOfInteger.hxx" -#include - diff --git a/src/OBJECT/SALOME_DataMapOfIOMapOfInteger.hxx b/src/OBJECT/SALOME_DataMapOfIOMapOfInteger.hxx deleted file mode 100644 index f3aa034f7..000000000 --- a/src/OBJECT/SALOME_DataMapOfIOMapOfInteger.hxx +++ /dev/null @@ -1,148 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_DataMapOfIOMapOfInteger.hxx -// Module : SALOME - -#ifndef _SALOME_DataMapOfIOMapOfInteger_HeaderFile -#define _SALOME_DataMapOfIOMapOfInteger_HeaderFile - -#ifndef _TCollection_BasicMap_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile -#include -#endif -#ifndef _Standard_Integer_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -class Standard_DomainError; -class Standard_NoSuchObject; -class SALOME_InteractiveObject; -class TColStd_IndexedMapOfInteger; -class TColStd_MapTransientHasher; -class SALOME_DataMapNodeOfDataMapOfIOMapOfInteger; -class SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger; - - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -class SALOME_DataMapOfIOMapOfInteger : public TCollection_BasicMap { - -public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT SALOME_DataMapOfIOMapOfInteger(const Standard_Integer NbBuckets = 1); -Standard_EXPORT SALOME_DataMapOfIOMapOfInteger& Assign(const SALOME_DataMapOfIOMapOfInteger& Other) ; - SALOME_DataMapOfIOMapOfInteger& operator =(const SALOME_DataMapOfIOMapOfInteger& Other) -{ - return Assign(Other); -} - -Standard_EXPORT void ReSize(const Standard_Integer NbBuckets) ; -Standard_EXPORT void Clear() ; -~SALOME_DataMapOfIOMapOfInteger() -{ - Clear(); -} - -Standard_EXPORT Standard_Boolean Bind(const Handle(SALOME_InteractiveObject)& K,const TColStd_IndexedMapOfInteger& I) ; -Standard_EXPORT Standard_Boolean IsBound(const Handle(SALOME_InteractiveObject)& K) const; -Standard_EXPORT Standard_Boolean UnBind(const Handle(SALOME_InteractiveObject)& K) ; -Standard_EXPORT const TColStd_IndexedMapOfInteger& Find(const Handle(SALOME_InteractiveObject)& K) const; - const TColStd_IndexedMapOfInteger& operator()(const Handle(SALOME_InteractiveObject)& K) const -{ - return Find(K); -} - -Standard_EXPORT TColStd_IndexedMapOfInteger& ChangeFind(const Handle(SALOME_InteractiveObject)& K) ; - TColStd_IndexedMapOfInteger& operator()(const Handle(SALOME_InteractiveObject)& K) -{ - return ChangeFind(K); -} - - - - - - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // -Standard_EXPORT SALOME_DataMapOfIOMapOfInteger(const SALOME_DataMapOfIOMapOfInteger& Other); - - - // Fields PRIVATE - // - - -}; - - - - - -// other inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_DataMapOfIOMapOfInteger_0.cxx b/src/OBJECT/SALOME_DataMapOfIOMapOfInteger_0.cxx deleted file mode 100644 index bf8f76794..000000000 --- a/src/OBJECT/SALOME_DataMapOfIOMapOfInteger_0.cxx +++ /dev/null @@ -1,68 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_DataMapOfIOMapOfInteger_0.cxx -// Module : SALOME - -#include "SALOME_DataMapOfIOMapOfInteger.hxx" - -#ifndef _Standard_DomainError_HeaderFile -#include -#endif -#ifndef _Standard_NoSuchObject_HeaderFile -#include -#endif -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _TColStd_IndexedMapOfInteger_HeaderFile -#include -#endif -#ifndef _TColStd_MapTransientHasher_HeaderFile -#include -#endif -#ifndef _SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_HeaderFile -#include "SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx" -#endif -#ifndef _SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger_HeaderFile -#include "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" -#endif -using namespace std; - - -#define TheKey Handle_SALOME_InteractiveObject -#define TheKey_hxx "SALOME_InteractiveObject.hxx" -#define TheItem TColStd_IndexedMapOfInteger -#define TheItem_hxx -#define Hasher TColStd_MapTransientHasher -#define Hasher_hxx -#define TCollection_DataMapNode SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_hxx "SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx" -#define TCollection_DataMapIterator SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger -#define TCollection_DataMapIterator_hxx "SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx" -#define Handle_TCollection_DataMapNode Handle_SALOME_DataMapNodeOfDataMapOfIOMapOfInteger -#define TCollection_DataMapNode_Type_() SALOME_DataMapNodeOfDataMapOfIOMapOfInteger_Type_() -#define TCollection_DataMap SALOME_DataMapOfIOMapOfInteger -#define TCollection_DataMap_hxx "SALOME_DataMapOfIOMapOfInteger.hxx" -#include - diff --git a/src/OBJECT/SALOME_Filter.cxx b/src/OBJECT/SALOME_Filter.cxx deleted file mode 100644 index 79ba21691..000000000 --- a/src/OBJECT/SALOME_Filter.cxx +++ /dev/null @@ -1,31 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Filter.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "SALOME_Filter.ixx" -using namespace std; - diff --git a/src/OBJECT/SALOME_Filter.hxx b/src/OBJECT/SALOME_Filter.hxx deleted file mode 100644 index 4386503a5..000000000 --- a/src/OBJECT/SALOME_Filter.hxx +++ /dev/null @@ -1,111 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Filter.hxx -// Module : SALOME - -#ifndef _SALOME_Filter_HeaderFile -#define _SALOME_Filter_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_Filter_HeaderFile -#include -#endif - -#ifndef _MMgt_TShared_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif - -class SALOME_Filter : public MMgt_TShared { - -public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT virtual Standard_Boolean IsOk(const Handle(SALOME_InteractiveObject)& anObj) const = 0; -Standard_EXPORT ~SALOME_Filter(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SALOME_Filter_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - -}; - - - - - -// other inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_Filter.ixx b/src/OBJECT/SALOME_Filter.ixx deleted file mode 100644 index c872cef3f..000000000 --- a/src/OBJECT/SALOME_Filter.ixx +++ /dev/null @@ -1,81 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Filter.ixx -// Module : SALOME - -#include "SALOME_Filter.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -SALOME_Filter::~SALOME_Filter() {} - - - -Standard_EXPORT Handle_Standard_Type& SALOME_Filter_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(MMgt_TShared); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType2 = STANDARD_TYPE(Standard_Transient); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SALOME_Filter", - sizeof(SALOME_Filter), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(SALOME_Filter) Handle(SALOME_Filter)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SALOME_Filter) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SALOME_Filter))) { - _anOtherObject = Handle(SALOME_Filter)((Handle(SALOME_Filter)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& SALOME_Filter::DynamicType() const -{ - return STANDARD_TYPE(SALOME_Filter) ; -} -Standard_Boolean SALOME_Filter::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SALOME_Filter) == AType || MMgt_TShared::IsKind(AType)); -} -Handle_SALOME_Filter::~Handle_SALOME_Filter() {} - diff --git a/src/OBJECT/SALOME_Filter.jxx b/src/OBJECT/SALOME_Filter.jxx deleted file mode 100644 index db8562e5a..000000000 --- a/src/OBJECT/SALOME_Filter.jxx +++ /dev/null @@ -1,29 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Filter.jxx -// Module : SALOME - -#ifndef _SALOME_Filter_HeaderFile -#include "SALOME_Filter.hxx" -#endif diff --git a/src/OBJECT/SALOME_InteractiveObject.cxx b/src/OBJECT/SALOME_InteractiveObject.cxx deleted file mode 100755 index 53d93c062..000000000 --- a/src/OBJECT/SALOME_InteractiveObject.cxx +++ /dev/null @@ -1,162 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_InteractiveObject.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -//using namespace std; -/*! - \class SALOME_InteractiveObject SALOME_InteractiveObject.hxx - \brief ... -*/ - -#include "SALOME_InteractiveObject.ixx" - -/*! - Default constructor -*/ -SALOME_InteractiveObject::SALOME_InteractiveObject() -{ - myEntry = ""; - myName = ""; - myComponentDataType = ""; - myReference = ""; -} - -/*! - Constructor - \param anEntry - entry of object - \param aComponentDataType - component data type name - \param aName - name of object -*/ -SALOME_InteractiveObject::SALOME_InteractiveObject(const char* anEntry, - const char* aComponentDataType, - const char* aName): - myEntry(anEntry), - myName(aName), - myComponentDataType(aComponentDataType), - myReference("") -{} - -/*! - Sets entry - \param anEntry - new entry of object -*/ -void SALOME_InteractiveObject::setEntry(const char* anEntry){ - myEntry = anEntry; -} - -/*! - \return entry -*/ -const char* SALOME_InteractiveObject::getEntry(){ - return myEntry.c_str(); -} - -/*! - Sets component data type - \param aComponentDataType - component data type name -*/ -void SALOME_InteractiveObject::setComponentDataType(const char* aComponentDataType){ - myComponentDataType = aComponentDataType; -} - -/*! - \return component data type -*/ -const char* SALOME_InteractiveObject::getComponentDataType(){ - return myComponentDataType.c_str(); -} - -/*! - Sets name - \param aName - new name of object -*/ -void SALOME_InteractiveObject::setName(const char* aName){ - myName = aName; -} - -/*! - \return name -*/ -const char* SALOME_InteractiveObject::getName(){ - return myName.c_str(); -} - -/*! - \return true if entry isn't empty -*/ -Standard_Boolean SALOME_InteractiveObject::hasEntry(){ - return myEntry != ""; -} - -/*! - \return true if objects have same entries - \param anIO - other object -*/ -Standard_Boolean SALOME_InteractiveObject::isSame(const Handle(SALOME_InteractiveObject)& anIO ){ - if ( anIO->hasEntry() && this->hasEntry() ) { - if ( myEntry == anIO->getEntry() ) - return Standard_True; - } - - return Standard_False; -} - -/*! - \return true if component data types are same - \param ComponentDataType - component data type to be checked -*/ -Standard_Boolean SALOME_InteractiveObject::isComponentType(const char* ComponentDataType){ - if ( myComponentDataType == ComponentDataType ) - return Standard_True; - else - return Standard_False; -} - -/*! - \return true if object has reference -*/ -Standard_Boolean SALOME_InteractiveObject::hasReference() -{ - return myReference != ""; -} - -/*! - \return reference -*/ -const char* SALOME_InteractiveObject::getReference() -{ - return myReference.c_str(); -} - -/*! - Sets reference - \param aReference - new reference -*/ -void SALOME_InteractiveObject::setReference(const char* aReference) -{ - myReference = aReference; -} diff --git a/src/OBJECT/SALOME_InteractiveObject.hxx b/src/OBJECT/SALOME_InteractiveObject.hxx deleted file mode 100755 index 712d96d3b..000000000 --- a/src/OBJECT/SALOME_InteractiveObject.hxx +++ /dev/null @@ -1,136 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_InteractiveObject.hxx -// Module : SALOME - -#ifndef _SALOME_InteractiveObject_HeaderFile -#define _SALOME_InteractiveObject_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif - -#ifndef _Standard_CString_HeaderFile -#include -#endif -#ifndef _MMgt_TShared_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif - -#include - -class SALOME_InteractiveObject : public MMgt_TShared { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT SALOME_InteractiveObject(); -Standard_EXPORT SALOME_InteractiveObject(const char* anEntry, - const char* aComponentDataType, - const char* aName = ""); -Standard_EXPORT void setEntry(const char* anEntry) ; -Standard_EXPORT const char* getEntry() ; -Standard_EXPORT void setName(const char* aName) ; -Standard_EXPORT const char* getName() ; -Standard_EXPORT Standard_Boolean hasEntry() ; -Standard_EXPORT virtual Standard_Boolean isSame(const Handle(SALOME_InteractiveObject)& anIO) ; - -Standard_EXPORT Standard_Boolean hasReference() ; -Standard_EXPORT const char* getReference() ; -Standard_EXPORT void setReference(const char* aReference) ; - -Standard_EXPORT void setComponentDataType(const char* ComponentDataType) ; -Standard_EXPORT const char* getComponentDataType() ; -Standard_EXPORT Standard_Boolean isComponentType(const char* ComponentDataType) ; - //Standard_EXPORT Standard_Boolean isComponentType(std::string ComponentDataType) ; -Standard_EXPORT virtual ~SALOME_InteractiveObject(); - -// Must be defined for using by NCollection for ceratin of data map -friend Standard_Boolean IsEqual(const Handle(SALOME_InteractiveObject)& anIO1, - const Handle(SALOME_InteractiveObject)& anIO2) -{ return anIO1->isSame( anIO2 ); } - - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SALOME_InteractiveObject_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - std::string myReference; - std::string myEntry; - std::string myName; - std::string myComponentDataType; - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - -}; - - - - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_InteractiveObject.ixx b/src/OBJECT/SALOME_InteractiveObject.ixx deleted file mode 100755 index ef92c07c6..000000000 --- a/src/OBJECT/SALOME_InteractiveObject.ixx +++ /dev/null @@ -1,81 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_InteractiveObject.ixx -// Module : SALOME - -#include "SALOME_InteractiveObject.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -SALOME_InteractiveObject::~SALOME_InteractiveObject() {} - - - -Standard_EXPORT Handle_Standard_Type& SALOME_InteractiveObject_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(MMgt_TShared); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType2 = STANDARD_TYPE(Standard_Transient); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SALOME_InteractiveObject", - sizeof(SALOME_InteractiveObject), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(SALOME_InteractiveObject) Handle(SALOME_InteractiveObject)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SALOME_InteractiveObject) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SALOME_InteractiveObject))) { - _anOtherObject = Handle(SALOME_InteractiveObject)((Handle(SALOME_InteractiveObject)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& SALOME_InteractiveObject::DynamicType() const -{ - return STANDARD_TYPE(SALOME_InteractiveObject) ; -} -Standard_Boolean SALOME_InteractiveObject::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SALOME_InteractiveObject) == AType || MMgt_TShared::IsKind(AType)); -} -Handle_SALOME_InteractiveObject::~Handle_SALOME_InteractiveObject() {} - diff --git a/src/OBJECT/SALOME_InteractiveObject.jxx b/src/OBJECT/SALOME_InteractiveObject.jxx deleted file mode 100755 index 0c3fc7db5..000000000 --- a/src/OBJECT/SALOME_InteractiveObject.jxx +++ /dev/null @@ -1,29 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_InteractiveObject.jxx -// Module : SALOME - -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif diff --git a/src/OBJECT/SALOME_ListIO.hxx b/src/OBJECT/SALOME_ListIO.hxx deleted file mode 100644 index 7f52828d4..000000000 --- a/src/OBJECT/SALOME_ListIO.hxx +++ /dev/null @@ -1,169 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_ListIO.hxx -// Module : SALOME - -#ifndef _SALOME_ListIO_HeaderFile -#define _SALOME_ListIO_HeaderFile - -#ifndef _Standard_Address_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_ListNodeOfListIO_HeaderFile -#include -#endif -#ifndef _Standard_Integer_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -class Standard_NoSuchObject; -class SALOME_ListIteratorOfListIO; -class SALOME_InteractiveObject; -class SALOME_ListNodeOfListIO; - - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -/*! - \class SALOME_ListIO - List of SALOME interactive objects -*/ -class SALOME_ListIO { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT SALOME_ListIO(); -Standard_EXPORT void Assign(const SALOME_ListIO& Other) ; - void operator=(const SALOME_ListIO& Other) -{ - Assign(Other); -} - -Standard_EXPORT Standard_Integer Extent() const; -Standard_EXPORT void Clear() ; -~SALOME_ListIO() -{ - Clear(); -} - -Standard_EXPORT Standard_Boolean IsEmpty() const; -Standard_EXPORT void Prepend(const Handle(SALOME_InteractiveObject)& I) ; -Standard_EXPORT void Prepend(SALOME_ListIO& Other) ; -Standard_EXPORT void Prepend(const Handle(SALOME_InteractiveObject)& I, SALOME_ListIteratorOfListIO& It) ; -Standard_EXPORT void Append(const Handle(SALOME_InteractiveObject)& I) ; -Standard_EXPORT void Append(SALOME_ListIO& Other) ; -Standard_EXPORT void Append(const Handle(SALOME_InteractiveObject)& I, SALOME_ListIteratorOfListIO& It) ; -Standard_EXPORT Handle_SALOME_InteractiveObject& First() const; -Standard_EXPORT Handle_SALOME_InteractiveObject& Last() const; -Standard_EXPORT void RemoveFirst() ; -Standard_EXPORT void Remove(SALOME_ListIteratorOfListIO& It) ; -Standard_EXPORT void InsertBefore(const Handle(SALOME_InteractiveObject)& I,SALOME_ListIteratorOfListIO& It) ; -Standard_EXPORT void InsertBefore(SALOME_ListIO& Other,SALOME_ListIteratorOfListIO& It) ; -Standard_EXPORT void InsertAfter(const Handle(SALOME_InteractiveObject)& I,SALOME_ListIteratorOfListIO& It) ; -Standard_EXPORT void InsertAfter(SALOME_ListIO& Other,SALOME_ListIteratorOfListIO& It) ; - - -friend class SALOME_ListIteratorOfListIO; - - - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // -Standard_EXPORT SALOME_ListIO(const SALOME_ListIO& Other); - - - // Fields PRIVATE - // -Standard_Address myFirst; -Standard_Address myLast; - - -}; - -#define Item Handle_SALOME_InteractiveObject -#define Item_hxx "SALOME_InteractiveObject.hxx" -#define TCollection_ListNode SALOME_ListNodeOfListIO -#define TCollection_ListNode_hxx "SALOME_ListNodeOfListIO.hxx" -#define TCollection_ListIterator SALOME_ListIteratorOfListIO -#define TCollection_ListIterator_hxx "SALOME_ListIteratorOfListIO.hxx" -#define Handle_TCollection_ListNode Handle_SALOME_ListNodeOfListIO -#define TCollection_ListNode_Type_() SALOME_ListNodeOfListIO_Type_() -#define TCollection_List SALOME_ListIO -#define TCollection_List_hxx "SALOME_ListIO.hxx" - -#include - -#undef Item -#undef Item_hxx -#undef TCollection_ListNode -#undef TCollection_ListNode_hxx -#undef TCollection_ListIterator -#undef TCollection_ListIterator_hxx -#undef Handle_TCollection_ListNode -#undef TCollection_ListNode_Type_ -#undef TCollection_List -#undef TCollection_List_hxx - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_ListIO_0.cxx b/src/OBJECT/SALOME_ListIO_0.cxx deleted file mode 100644 index 7538c4744..000000000 --- a/src/OBJECT/SALOME_ListIO_0.cxx +++ /dev/null @@ -1,55 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_ListIO_0.cxx -// Module : SALOME - -#include "SALOME_ListIO.hxx" - -#ifndef _Standard_NoSuchObject_HeaderFile -#include -#endif -#ifndef _SALOME_ListIteratorOfListIO_HeaderFile -#include "SALOME_ListIteratorOfListIO.hxx" -#endif -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _SALOME_ListNodeOfListIO_HeaderFile -#include "SALOME_ListNodeOfListIO.hxx" -#endif -using namespace std; - - -#define Item Handle_SALOME_InteractiveObject -#define Item_hxx "SALOME_InteractiveObject.hxx" -#define TCollection_ListNode SALOME_ListNodeOfListIO -#define TCollection_ListNode_hxx "SALOME_ListNodeOfListIO.hxx" -#define TCollection_ListIterator SALOME_ListIteratorOfListIO -#define TCollection_ListIterator_hxx "SALOME_ListIteratorOfListIO.hxx" -#define Handle_TCollection_ListNode Handle_SALOME_ListNodeOfListIO -#define TCollection_ListNode_Type_() SALOME_ListNodeOfListIO_Type_() -#define TCollection_List SALOME_ListIO -#define TCollection_List_hxx "SALOME_ListIO.hxx" -#include - diff --git a/src/OBJECT/SALOME_ListIteratorOfListIO.hxx b/src/OBJECT/SALOME_ListIteratorOfListIO.hxx deleted file mode 100644 index e69f42d5c..000000000 --- a/src/OBJECT/SALOME_ListIteratorOfListIO.hxx +++ /dev/null @@ -1,139 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_ListIteratorOfListIO.hxx -// Module : SALOME - -#ifndef _SALOME_ListIteratorOfListIO_HeaderFile -#define _SALOME_ListIteratorOfListIO_HeaderFile - -#ifndef _Standard_Address_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_ListNodeOfListIO_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -class Standard_NoMoreObject; -class Standard_NoSuchObject; -class SALOME_ListIO; -class SALOME_InteractiveObject; -class SALOME_ListNodeOfListIO; - - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -class SALOME_ListIteratorOfListIO { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -Standard_EXPORT SALOME_ListIteratorOfListIO(); -Standard_EXPORT SALOME_ListIteratorOfListIO(const SALOME_ListIO& L); -Standard_EXPORT void Initialize(const SALOME_ListIO& L) ; -Standard_EXPORT Standard_Boolean More() const; -Standard_EXPORT void Next() ; -Standard_EXPORT Handle_SALOME_InteractiveObject& Value() const; - - -friend class SALOME_ListIO; - - - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -Standard_Address current; -Standard_Address previous; - - -}; - -#define Item Handle_SALOME_InteractiveObject -#define Item_hxx "SALOME_InteractiveObject.hxx" -#define TCollection_ListNode SALOME_ListNodeOfListIO -#define TCollection_ListNode_hxx "SALOME_ListNodeOfListIO.hxx" -#define TCollection_ListIterator SALOME_ListIteratorOfListIO -#define TCollection_ListIterator_hxx "SALOME_ListIteratorOfListIO.hxx" -#define Handle_TCollection_ListNode Handle_SALOME_ListNodeOfListIO -#define TCollection_ListNode_Type_() SALOME_ListNodeOfListIO_Type_() -#define TCollection_List SALOME_ListIO -#define TCollection_List_hxx "SALOME_ListIO.hxx" - -#include - -#undef Item -#undef Item_hxx -#undef TCollection_ListNode -#undef TCollection_ListNode_hxx -#undef TCollection_ListIterator -#undef TCollection_ListIterator_hxx -#undef Handle_TCollection_ListNode -#undef TCollection_ListNode_Type_ -#undef TCollection_List -#undef TCollection_List_hxx - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_ListIteratorOfListIO_0.cxx b/src/OBJECT/SALOME_ListIteratorOfListIO_0.cxx deleted file mode 100644 index 6f5fb7f85..000000000 --- a/src/OBJECT/SALOME_ListIteratorOfListIO_0.cxx +++ /dev/null @@ -1,58 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_ListIteratorOfListIO_0.cxx -// Module : SALOME - -#include "SALOME_ListIteratorOfListIO.hxx" - -#ifndef _Standard_NoMoreObject_HeaderFile -#include -#endif -#ifndef _Standard_NoSuchObject_HeaderFile -#include -#endif -#ifndef _SALOME_ListIO_HeaderFile -#include "SALOME_ListIO.hxx" -#endif -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _SALOME_ListNodeOfListIO_HeaderFile -#include "SALOME_ListNodeOfListIO.hxx" -#endif -using namespace std; - - -#define Item Handle_SALOME_InteractiveObject -#define Item_hxx "SALOME_InteractiveObject.hxx" -#define TCollection_ListNode SALOME_ListNodeOfListIO -#define TCollection_ListNode_hxx "SALOME_ListNodeOfListIO.hxx" -#define TCollection_ListIterator SALOME_ListIteratorOfListIO -#define TCollection_ListIterator_hxx "SALOME_ListIteratorOfListIO.hxx" -#define Handle_TCollection_ListNode Handle_SALOME_ListNodeOfListIO -#define TCollection_ListNode_Type_() SALOME_ListNodeOfListIO_Type_() -#define TCollection_List SALOME_ListIO -#define TCollection_List_hxx "SALOME_ListIO.hxx" -#include - diff --git a/src/OBJECT/SALOME_ListNodeOfListIO.hxx b/src/OBJECT/SALOME_ListNodeOfListIO.hxx deleted file mode 100644 index 6d288bcab..000000000 --- a/src/OBJECT/SALOME_ListNodeOfListIO.hxx +++ /dev/null @@ -1,137 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_ListNodeOfListIO.hxx -// Module : SALOME - -#ifndef _SALOME_ListNodeOfListIO_HeaderFile -#define _SALOME_ListNodeOfListIO_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_ListNodeOfListIO_HeaderFile -#include -#endif - -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#ifndef _TCollection_MapNode_HeaderFile -#include -#endif -#ifndef _TCollection_MapNodePtr_HeaderFile -#include -#endif -class SALOME_InteractiveObject; -class SALOME_ListIO; -class SALOME_ListIteratorOfListIO; - -/*! - \class SALOME_ListNodeOfListIO - Auxiliary class, represents list node for SALOME_ListIO -*/ -class SALOME_ListNodeOfListIO : public TCollection_MapNode { - -public: - - void* operator new(size_t,void* anAddress) - { - return anAddress; - } - void* operator new(size_t size) - { - return Standard::Allocate(size); - } - void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } - // Methods PUBLIC - // -SALOME_ListNodeOfListIO(const Handle(SALOME_InteractiveObject)& I,const TCollection_MapNodePtr& n); - Handle_SALOME_InteractiveObject& Value() const; -Standard_EXPORT ~SALOME_ListNodeOfListIO(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SALOME_ListNodeOfListIO_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -Handle_SALOME_InteractiveObject myValue; - - -}; - -#define Item Handle_SALOME_InteractiveObject -#define Item_hxx "SALOME_InteractiveObject.hxx" -#define TCollection_ListNode SALOME_ListNodeOfListIO -#define TCollection_ListNode_hxx "SALOME_ListNodeOfListIO.hxx" -#define TCollection_ListIterator SALOME_ListIteratorOfListIO -#define TCollection_ListIterator_hxx "SALOME_ListIteratorOfListIO.hxx" -#define Handle_TCollection_ListNode Handle_SALOME_ListNodeOfListIO -#define TCollection_ListNode_Type_() SALOME_ListNodeOfListIO_Type_() -#define TCollection_List SALOME_ListIO -#define TCollection_List_hxx "SALOME_ListIO.hxx" - -#include - -#undef Item -#undef Item_hxx -#undef TCollection_ListNode -#undef TCollection_ListNode_hxx -#undef TCollection_ListIterator -#undef TCollection_ListIterator_hxx -#undef Handle_TCollection_ListNode -#undef TCollection_ListNode_Type_ -#undef TCollection_List -#undef TCollection_List_hxx - - -// other Inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_ListNodeOfListIO_0.cxx b/src/OBJECT/SALOME_ListNodeOfListIO_0.cxx deleted file mode 100644 index 63fda117c..000000000 --- a/src/OBJECT/SALOME_ListNodeOfListIO_0.cxx +++ /dev/null @@ -1,122 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_ListNodeOfListIO_0.cxx -// Module : SALOME - -#include "SALOME_ListNodeOfListIO.hxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -#ifndef _SALOME_InteractiveObject_HeaderFile -#include "SALOME_InteractiveObject.hxx" -#endif -#ifndef _SALOME_ListIO_HeaderFile -#include "SALOME_ListIO.hxx" -#endif -#ifndef _SALOME_ListIteratorOfListIO_HeaderFile -#include "SALOME_ListIteratorOfListIO.hxx" -#endif -using namespace std; - -/*! - Destructor -*/ -SALOME_ListNodeOfListIO::~SALOME_ListNodeOfListIO() {} - - -/*! - \return OCC Handle Type -*/ -Standard_EXPORT Handle_Standard_Type& SALOME_ListNodeOfListIO_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(TCollection_MapNode); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TCollection_MapNode); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SALOME_ListNodeOfListIO", - sizeof(SALOME_ListNodeOfListIO), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -/*! - DownCast method, allows safe downcasting -*/ -const Handle(SALOME_ListNodeOfListIO) Handle(SALOME_ListNodeOfListIO)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SALOME_ListNodeOfListIO) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SALOME_ListNodeOfListIO))) { - _anOtherObject = Handle(SALOME_ListNodeOfListIO)((Handle(SALOME_ListNodeOfListIO)&)AnObject); - } - } - - return _anOtherObject ; -} - -/*! - \return OCC Handle dynamic Type -*/ -const Handle(Standard_Type)& SALOME_ListNodeOfListIO::DynamicType() const -{ - return STANDARD_TYPE(SALOME_ListNodeOfListIO) ; -} - -/*! - \return true if other type is the same - \param AType - type to be checked -*/ -Standard_Boolean SALOME_ListNodeOfListIO::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SALOME_ListNodeOfListIO) == AType || TCollection_MapNode::IsKind(AType)); -} -/*! - Destructor -*/ -Handle_SALOME_ListNodeOfListIO::~Handle_SALOME_ListNodeOfListIO() {} -#define Item Handle_SALOME_InteractiveObject -#define Item_hxx "SALOME_InteractiveObject.hxx" -#define TCollection_ListNode SALOME_ListNodeOfListIO -#define TCollection_ListNode_hxx "SALOME_ListNodeOfListIO.hxx" -#define TCollection_ListIterator SALOME_ListIteratorOfListIO -#define TCollection_ListIterator_hxx "SALOME_ListIteratorOfListIO.hxx" -#define Handle_TCollection_ListNode Handle_SALOME_ListNodeOfListIO -#define TCollection_ListNode_Type_() SALOME_ListNodeOfListIO_Type_() -#define TCollection_List SALOME_ListIO -#define TCollection_List_hxx "SALOME_ListIO.hxx" -#include - diff --git a/src/OBJECT/SALOME_Selection.h b/src/OBJECT/SALOME_Selection.h deleted file mode 100644 index 696f68f55..000000000 --- a/src/OBJECT/SALOME_Selection.h +++ /dev/null @@ -1,42 +0,0 @@ -// SALOME Selection : description of enumeration Selection_Mode -// -// 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 : SALOME_Selection.h -// Author : -// Module : SALOME -// $Header$ - -#ifndef SALOME_SELECTION_H -#define SALOME_SELECTION_H - -enum Selection_Mode { - NodeSelection, - CellSelection, - EdgeOfCellSelection, - EdgeSelection, - FaceSelection, - VolumeSelection, - ActorSelection }; - -#endif - diff --git a/src/OBJECT/SALOME_TypeFilter.cxx b/src/OBJECT/SALOME_TypeFilter.cxx deleted file mode 100644 index 57d6390a2..000000000 --- a/src/OBJECT/SALOME_TypeFilter.cxx +++ /dev/null @@ -1,47 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_TypeFilter.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "SALOME_TypeFilter.ixx" -#include "SALOME_InteractiveObject.hxx" -using namespace std; - -/*! - Constructor - \param TheKind - type of filter -*/ -SALOME_TypeFilter::SALOME_TypeFilter(const Standard_CString TheKind): -myKind(TheKind){} - -/*! - \return true if object passes filter - \param anObj - object to be checked -*/ -Standard_Boolean SALOME_TypeFilter::IsOk(const Handle(SALOME_InteractiveObject)& anObj) const -{ - return anObj->isComponentType( myKind ); -} diff --git a/src/OBJECT/SALOME_TypeFilter.hxx b/src/OBJECT/SALOME_TypeFilter.hxx deleted file mode 100644 index 5a32301fe..000000000 --- a/src/OBJECT/SALOME_TypeFilter.hxx +++ /dev/null @@ -1,116 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_TypeFilter.hxx -// Module : SALOME - -#ifndef _SALOME_TypeFilter_HeaderFile -#define _SALOME_TypeFilter_HeaderFile - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_TypeFilter_HeaderFile -#include -#endif - -#ifndef _Standard_CString_HeaderFile -#include -#endif -#ifndef _SALOME_Filter_HeaderFile -#include "SALOME_Filter.hxx" -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif - -class SALOME_TypeFilter : public SALOME_Filter { - -public: - - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if (anAddress) Standard::Free((Standard_Address&)anAddress); - } -// inline void operator delete(void *anAddress, size_t size) -// { -// if (anAddress) Standard::Free((Standard_Address&)anAddress,size); -// } - // Methods PUBLIC - // -Standard_EXPORT SALOME_TypeFilter(const Standard_CString aGivenKind); -Standard_EXPORT virtual Standard_Boolean IsOk(const Handle(SALOME_InteractiveObject)& anobj) const; -Standard_EXPORT ~SALOME_TypeFilter(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SALOME_TypeFilter_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // -Standard_CString myKind; - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // - - -}; - - - - - -// other inline functions and methods (like "C++: function call" methods) -// - - -#endif diff --git a/src/OBJECT/SALOME_TypeFilter.ixx b/src/OBJECT/SALOME_TypeFilter.ixx deleted file mode 100644 index 13e1a3ec1..000000000 --- a/src/OBJECT/SALOME_TypeFilter.ixx +++ /dev/null @@ -1,83 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_TypeFilter.ixx -// Module : SALOME - -#include "SALOME_TypeFilter.jxx" - -#ifndef _Standard_TypeMismatch_HeaderFile -#include -#endif - -SALOME_TypeFilter::~SALOME_TypeFilter() {} - - - -Standard_EXPORT Handle_Standard_Type& SALOME_TypeFilter_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(SALOME_Filter); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(SALOME_Filter); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("SALOME_TypeFilter", - sizeof(SALOME_TypeFilter), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; -} - - -// DownCast method -// allow safe downcasting -// -const Handle(SALOME_TypeFilter) Handle(SALOME_TypeFilter)::DownCast(const Handle(Standard_Transient)& AnObject) -{ - Handle(SALOME_TypeFilter) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(SALOME_TypeFilter))) { - _anOtherObject = Handle(SALOME_TypeFilter)((Handle(SALOME_TypeFilter)&)AnObject); - } - } - - return _anOtherObject ; -} -const Handle(Standard_Type)& SALOME_TypeFilter::DynamicType() const -{ - return STANDARD_TYPE(SALOME_TypeFilter) ; -} -Standard_Boolean SALOME_TypeFilter::IsKind(const Handle(Standard_Type)& AType) const -{ - return (STANDARD_TYPE(SALOME_TypeFilter) == AType || SALOME_Filter::IsKind(AType)); -} -Handle_SALOME_TypeFilter::~Handle_SALOME_TypeFilter() {} - diff --git a/src/OBJECT/SALOME_TypeFilter.jxx b/src/OBJECT/SALOME_TypeFilter.jxx deleted file mode 100644 index d519586d7..000000000 --- a/src/OBJECT/SALOME_TypeFilter.jxx +++ /dev/null @@ -1,29 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_TypeFilter.jxx -// Module : SALOME - -#ifndef _SALOME_TypeFilter_HeaderFile -#include "SALOME_TypeFilter.hxx" -#endif diff --git a/src/OCCViewer/Makefile.in b/src/OCCViewer/Makefile.in deleted file mode 100755 index 842759ae3..000000000 --- a/src/OCCViewer/Makefile.in +++ /dev/null @@ -1,96 +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 : OCCViewer -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= OCCViewer_AISSelector.h \ - OCCViewer_ViewManager.h \ - OCCViewer_ViewModel.h \ - OCCViewer_ViewPort3d.h \ - OCCViewer_ViewPort.h \ - OCCViewer_ViewWindow.h \ - OCCViewer_VService.h \ - OCCViewer_CreateRestoreViewDlg.h \ - OCCViewer.h - -# .po files to transform in .qm -PO_FILES = OCCViewer_images.po \ - OCCViewer_msg_en.po - -# Libraries targets -LIB = libOCCViewer.la -LIB_SRC= OCCViewer_AISSelector.cxx \ - OCCViewer_ViewManager.cxx \ - OCCViewer_ViewModel.cxx \ - OCCViewer_ViewPort3d.cxx \ - OCCViewer_ViewPort.cxx \ - OCCViewer_ViewWindow.cxx \ - OCCViewer_VService.cxx \ - OCCViewer_CreateRestoreViewDlg.cxx \ - OCCViewer_ClippingDlg.cxx - -LIB_MOC = OCCViewer_AISSelector.h \ - OCCViewer_ViewModel.h \ - OCCViewer_ViewPort3d.h \ - OCCViewer_ViewPort.h \ - OCCViewer_ViewWindow.h \ - OCCViewer_ViewManager.h \ - OCCViewer_CreateRestoreViewDlg.h \ - OCCViewer_ClippingDlg.h - -RESOURCES_FILES = \ -view_back.png \ -view_bottom.png \ -view_camera_dump.png \ -view_clone.png \ -view_clipping.png \ -view_clipping_pressed.png \ -view_fitall.png \ -view_fitarea.png \ -view_front.png \ -view_glpan.png \ -view_left.png \ -view_pan.png \ -view_presets.png \ -view_reset.png \ -view_right.png \ -view_rotate.png \ -view_shoot.png \ -view_top.png \ -view_triedre.png \ -view_zoom.png - -CPPFLAGS+=$(QT_INCLUDES) $(OGL_INCLUDES) $(OCC_INCLUDES) - -LDFLAGS+=$(OGL_LIBS) $(QT_MT_LIBS) $(CAS_KERNEL) $(CAS_VIEWER) -lsuit - -@CONCLUDE@ - - diff --git a/src/OCCViewer/OCCViewer.h b/src/OCCViewer/OCCViewer.h deleted file mode 100755 index 724486cb9..000000000 --- a/src/OCCViewer/OCCViewer.h +++ /dev/null @@ -1,31 +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 -// -#ifdef WNT -#ifdef OCCVIEWER_EXPORTS -#define OCCVIEWER_EXPORT __declspec(dllexport) -#else -#define OCCVIEWER_EXPORT __declspec(dllimport) -#endif -#else -#define OCCVIEWER_EXPORT -#endif - -#if defined WNT -#pragma warning ( disable: 4251 ) -#endif diff --git a/src/OCCViewer/OCCViewer_AISSelector.cxx b/src/OCCViewer/OCCViewer_AISSelector.cxx deleted file mode 100755 index 43dca4567..000000000 --- a/src/OCCViewer/OCCViewer_AISSelector.cxx +++ /dev/null @@ -1,223 +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 "OCCViewer_AISSelector.h" - -/*! - Constructor -*/ -OCCViewer_AISSelector::OCCViewer_AISSelector( QObject* parent, - const Handle (AIS_InteractiveContext)& aisContext) : - QObject( parent ), - myNumSelected( 0 ), - myEnableSelection( true ), - myEnableMultipleSelection( true ) -{ - myHilightColor = Quantity_NOC_CYAN1; - mySelectColor = Quantity_NOC_GRAY80; - - setAISContext( aisContext ); -} - -/*! - Destructor -*/ -OCCViewer_AISSelector::~OCCViewer_AISSelector() -{ -} - -/*! - Enables/disables selection -*/ -void OCCViewer_AISSelector::enableSelection( bool bEnable ) -{ - myEnableSelection = bEnable; -} - -/*! - Enables/disables multiple selection i.e - selection of several objects at the same time. -*/ -void OCCViewer_AISSelector::enableMultipleSelection( bool bEnable ) -{ - myEnableMultipleSelection = bEnable; - if ( bEnable ) myEnableSelection = bEnable; -} - -/*! - Sets the color to hilight the detected objects -*/ -void OCCViewer_AISSelector::setHilightColor ( Quantity_NameOfColor color ) -{ - myHilightColor = color; - if ( !myAISContext.IsNull() ) - myAISContext->SetHilightColor( myHilightColor ); -} - -/*! - Sets the color to display the selected objects -*/ -void OCCViewer_AISSelector::setSelectColor ( Quantity_NameOfColor color ) -{ - mySelectColor = color; - if ( !myAISContext.IsNull() ) - myAISContext->SelectionColor( mySelectColor ); -} - -/*! - Sets the interactive context for this selector -*/ -void OCCViewer_AISSelector::setAISContext ( const Handle (AIS_InteractiveContext)& aisContext ) -{ - myAISContext = aisContext; - if ( ! myAISContext.IsNull() ) { - myAISContext->SetHilightColor( myHilightColor ); - myAISContext->SelectionColor( mySelectColor ); - myAISContext->SetSubIntensityColor( Quantity_NOC_CYAN1 ); - } -} - -/*! - Checks the status of pick and emits 'selSelectionDone' or - 'selSelectionCancel'. - Returns 'true' if no error, 'false' otherwise. -*/ -bool OCCViewer_AISSelector::checkSelection ( AIS_StatusOfPick status, - bool hadSelection, - bool addTo ) -{ - if ( myAISContext.IsNull() ) - return false; - - myNumSelected = myAISContext->NbCurrents(); /* update after the last selection */ - - if ( status == AIS_SOP_NothingSelected && !hadSelection ) { - emit selSelectionCancel( addTo ); - } - else if ( status == AIS_SOP_NothingSelected && hadSelection ) { - emit selSelectionCancel( addTo ); /* unselected now */ - } - else if ( status == AIS_SOP_OneSelected || status == AIS_SOP_SeveralSelected ) - { - emit selSelectionDone( addTo ); /* selected ( the same object, may be ) */ - } - return ( status != AIS_SOP_Error && status != AIS_SOP_NothingSelected ); -} - -/*! - Detects the interactive objects at position (x,y). - Returns 'true' if no error, 'false' otherwise. -*/ -bool OCCViewer_AISSelector::moveTo ( int x, int y, const Handle (V3d_View)& view ) -{ - if ( myAISContext.IsNull() ) - return false; - - if ( !myEnableSelection ) - return false; - - AIS_StatusOfDetection status = AIS_SOD_Error; - status = myAISContext->MoveTo (x, y, view); - - return ( status != AIS_SOD_Error && status != AIS_SOD_AllBad ); -} - -/*! - Selects the detected interactive objects. - Calls checkSelection() for checking the status. -*/ -bool OCCViewer_AISSelector::select () -{ - if ( myAISContext.IsNull() ) - return false; - - if ( !myEnableSelection ) - return false; - - bool hadSelection = ( myNumSelected > 0 ); - - /* select and send notifications */ - return checkSelection ( myAISContext->Select(), hadSelection, false ); -} - -/*! - Selects the objects covered by the rectangle. - Multiple selection must be enabled to get use of this function. - Calls checkSelection() for checking the status. -*/ -bool OCCViewer_AISSelector::select ( int left, int top, int right, int bottom, - const Handle (V3d_View)& view ) -{ - if ( myAISContext.IsNull() ) - return false; - - if ( !myEnableSelection || !myEnableMultipleSelection ) - return false; /* selection with rectangle is considered as multiple selection */ - - bool hadSelection = ( myNumSelected > 0 ); - - /* select and send notifications */ - return checkSelection ( myAISContext->Select(left, top, right, bottom, view), - hadSelection, false ); -} - -/*! - Adds new selected objects to the objects previously selected. - Multiple selection must be enabled to get use of this function. - Calls checkSelection() for checking the status. -*/ -bool OCCViewer_AISSelector::shiftSelect () -{ - if ( myAISContext.IsNull() ) - return false; - - if ( !myEnableSelection ) - return false; - - bool hadSelection = ( myNumSelected > 0 ); /* something was selected */ - if ( hadSelection && !myEnableMultipleSelection) - return false; - - /* select and send notifications */ - return checkSelection ( myAISContext->ShiftSelect(), hadSelection, true ); -} - -/*! - Adds new selected objects covered by the rectangle to the objects - previously selected. - Multiple selection must be enabled to get use of this function. - Calls checkSelection() for checking the status. -*/ -bool OCCViewer_AISSelector::shiftSelect ( int left, int top, int right, int bottom, - const Handle (V3d_View)& view ) - -{ - if ( myAISContext.IsNull() ) - return false; - - if ( !myEnableSelection || !myEnableMultipleSelection ) - return false; /* selection with rectangle is considered as multiple selection */ - - bool hadSelection = ( myNumSelected > 0 ); /* something was selected */ - if ( hadSelection && !myEnableMultipleSelection) - return false; - - /* select and send notifications */ - return checkSelection ( myAISContext->ShiftSelect(left,top,right,bottom, view), - hadSelection, true ); -} diff --git a/src/OCCViewer/OCCViewer_AISSelector.h b/src/OCCViewer/OCCViewer_AISSelector.h deleted file mode 100755 index 740c8f013..000000000 --- a/src/OCCViewer/OCCViewer_AISSelector.h +++ /dev/null @@ -1,82 +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 -// -#if !defined( OCCVIEWER_AISSELECTOR_H ) -#define OCCVIEWER_AISSELECTOR_H - -#include "OCCViewer.h" -#include - -#include -#include - -class OCCVIEWER_EXPORT OCCViewer_AISSelector : public QObject -{ - Q_OBJECT - -public: - // constructor - OCCViewer_AISSelector( QObject* parent, const Handle (AIS_InteractiveContext)& ); - // destructor - ~OCCViewer_AISSelector(); - - // enables/disables selection - void enableSelection( bool ); - // enables/disables multiple selection - void enableMultipleSelection( bool ); - - // detects the interactive objects at position (x,y). - bool moveTo ( int, int, const Handle (V3d_View)& ); - // selects the objects covered by the rectangle. - bool select ( int, int, int, int, const Handle (V3d_View)& ); - // adds new selected objects covered by the rectangle to the objects - // previously selected. - bool shiftSelect ( int, int, int, int, const Handle (V3d_View)& ); - // selects the detected interactive objects. - bool select (); - // adds new selected objects to the objects previously selected. - bool shiftSelect (); - - // sets the interactive context for this selector - void setAISContext ( const Handle (AIS_InteractiveContext)& ); - // sets the color to hilight the detected objects - void setHilightColor ( Quantity_NameOfColor color ); - // sets the color to display the selected objects - void setSelectColor ( Quantity_NameOfColor color ); - -protected: - // checks the status of pick and emits 'selSelectionDone' or 'selSelectionCancel'. - bool checkSelection ( AIS_StatusOfPick status, bool hadSelection, bool addTo ); - -signals: - // 'selection done' signal - void selSelectionDone( bool bAdded ); - // 'selection cancelled' signal - void selSelectionCancel( bool bAdded ); - -protected: - Handle (AIS_InteractiveContext) myAISContext; // graphic context - Quantity_NameOfColor myHilightColor; // color for hilight object - Quantity_NameOfColor mySelectColor; // color for selected object - - int myNumSelected; // nymber of selected objects - bool myEnableSelection; // enable selection flag - bool myEnableMultipleSelection; // enable multiple selection flag -}; - -#endif // OCCVIEWER_AISSELECTOR_H diff --git a/src/OCCViewer/OCCViewer_ClippingDlg.cxx b/src/OCCViewer/OCCViewer_ClippingDlg.cxx deleted file mode 100644 index bedb9eacb..000000000 --- a/src/OCCViewer/OCCViewer_ClippingDlg.cxx +++ /dev/null @@ -1,561 +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 -// -#include "OCCViewer_ClippingDlg.h" - -#include -#include - -#include "SUIT_Session.h" -#include "SUIT_ViewWindow.h" -#include "OCCViewer_ViewWindow.h" -#include "OCCViewer_ViewPort3d.h" - -#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// QT Includes -#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_ClippingDlg::OCCViewer_ClippingDlg( OCCViewer_ViewWindow* view, QWidget* parent, const char* name, bool modal, WFlags fl ) -: QDialog( parent, "OCCViewer_ClippingDlg", modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - myView( view ) -{ - setCaption( tr( "Clipping" ) ); - - QVBoxLayout* topLayout = new QVBoxLayout( this ); - topLayout->setMargin( 11 ); topLayout->setSpacing( 6 ); - - /***************************************************************/ - GroupPoint = new QGroupBox( this, "GroupPoint" ); - GroupPoint->setTitle( tr("Base point") ); - GroupPoint->setColumnLayout(0, Qt::Vertical ); - GroupPoint->layout()->setSpacing( 0 ); - GroupPoint->layout()->setMargin( 0 ); - QGridLayout* GroupPointLayout = new QGridLayout( GroupPoint->layout() ); - GroupPointLayout->setAlignment( Qt::AlignTop ); - GroupPointLayout->setSpacing( 6 ); - GroupPointLayout->setMargin( 11 ); - - // Controls - 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" ); - TextLabelY->setText( tr("Y:") ); - 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" ); - TextLabelZ->setText( tr("Z:") ); - 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" ); - resetButton->setText( tr( "Reset" ) ); - GroupPointLayout->addWidget( resetButton, 0, 6 ); - - /***************************************************************/ - GroupDirection = new QGroupBox( this, "GroupDirection" ); - GroupDirection->setTitle( tr("Direction") ); - GroupDirection->setColumnLayout(0, Qt::Vertical ); - GroupDirection->layout()->setSpacing( 0 ); - GroupDirection->layout()->setMargin( 0 ); - QGridLayout* GroupDirectionLayout = new QGridLayout( GroupDirection->layout() ); - GroupDirectionLayout->setAlignment( Qt::AlignTop ); - GroupDirectionLayout->setSpacing( 6 ); - GroupDirectionLayout->setMargin( 11 ); - - // Controls - TextLabelDx = new QLabel( GroupDirection, "TextLabelDx" ); - TextLabelDx->setText( tr("Dx:") ); - 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" ); - TextLabelDy->setText( tr("Dy:") ); - 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" ); - TextLabelDz->setText( tr("Dz:") ); - 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" ); - invertButton->setText( tr( "Invert" ) ); - GroupDirectionLayout->addWidget( invertButton, 0, 6 ); - - DirectionCB = new QComboBox( GroupDirection, "DirectionCB" ); - DirectionCB->insertItem(tr("CUSTOM")); - DirectionCB->insertItem(tr("||X-Y")); - DirectionCB->insertItem(tr("||Y-Z")); - DirectionCB->insertItem(tr("||Z-X")); - GroupDirectionLayout->addMultiCellWidget( DirectionCB, 1, 1, 0, 5 ); - - /***************************************************************/ - - PreviewChB = new QCheckBox( tr("Preview") ,this, "PreviewChB" ); - PreviewChB->setChecked( true ); - - /***************************************************************/ - QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setMargin( 0 ); GroupButtons->layout()->setSpacing( 0 ); - QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setMargin( 11 ); GroupButtonsLayout->setSpacing( 6 ); - - buttonApply = new QPushButton( GroupButtons, "buttonApply" ); - buttonApply->setText( tr( "BUT_APPLY" ) ); - buttonApply->setAutoDefault( TRUE ); - buttonApply->setDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonApply ); - - GroupButtonsLayout->addStretch(); - - buttonClose = new QPushButton( GroupButtons, "buttonClose" ); - buttonClose->setText( tr( "BUT_CLOSE" ) ); - buttonClose->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonClose ); - /***************************************************************/ - - topLayout->addWidget( GroupPoint ); - topLayout->addWidget( GroupDirection ); - - topLayout->addWidget( PreviewChB ); - - topLayout->addWidget( GroupButtons ); - - /* initializations */ - - SpinBox_X->setValue( 0.0 ); - SpinBox_Y->setValue( 0.0 ); - SpinBox_Z->setValue( 0.0 ); - - SpinBox_Dx->setValue( 1.0 ); - SpinBox_Dy->setValue( 1.0 ); - SpinBox_Dz->setValue( 1.0 ); - - /* signals and slots connections */ - connect( resetButton, SIGNAL (clicked() ), this, SLOT( onReset() ) ); - connect( invertButton, SIGNAL (clicked() ), this, SLOT( onInvert() ) ) ; - - connect( SpinBox_X, SIGNAL ( valueChanged( double ) ), this, SLOT( onValueChanged() ) ); - connect( SpinBox_Y, SIGNAL ( valueChanged( double ) ), this, SLOT( onValueChanged() ) ); - connect( SpinBox_Z, SIGNAL ( valueChanged( double ) ), this, SLOT( onValueChanged() ) ); - connect( SpinBox_Dx, SIGNAL ( valueChanged( double ) ), this, SLOT( onValueChanged() ) ); - connect( SpinBox_Dy, SIGNAL ( valueChanged( double ) ), this, SLOT( onValueChanged() ) ); - connect( SpinBox_Dz, SIGNAL ( valueChanged( double ) ), this, SLOT( onValueChanged() ) ); - - connect( DirectionCB, SIGNAL ( activated ( int ) ), this, SLOT( onModeChanged( int ) ) ) ; - - connect( PreviewChB, SIGNAL ( toggled ( bool ) ), this, SLOT( onPreview( bool ) ) ) ; - - connect( buttonClose, SIGNAL( clicked() ), this, SLOT( ClickOnClose() ) ) ; - connect( buttonApply, SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); - - myBusy = false; -} - -/*! - Destructor - Destroys the object and frees any allocated resources -*/ -OCCViewer_ClippingDlg::~ OCCViewer_ClippingDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - - -/*! - Custom handling of close event: erases preview -*/ -void OCCViewer_ClippingDlg::closeEvent( QCloseEvent* e ) -{ - erasePreview(); - - // Set the clipping plane back - Handle(V3d_View) aView3d = myView->getViewPort()->getView(); - if ( !aView3d.IsNull() && !myClippingPlane.IsNull() ) - aView3d->SetPlaneOn( myClippingPlane ); - - if (!myView->isCuttingPlane()) - myAction->setOn( false ); - - QDialog::closeEvent( e ); -} - - -/*! - Custom handling of show event: displays preview -*/ -void OCCViewer_ClippingDlg::showEvent( QShowEvent* e ) -{ - ReserveClippingPlane(); - - QDialog::showEvent( e ); - onPreview( PreviewChB->isChecked() ); -} - - -/*! - Custom handling of hide event: erases preview -*/ -void OCCViewer_ClippingDlg::hideEvent( QHideEvent* e ) -{ - erasePreview(); - QDialog::hideEvent( e ); -} - - -/*! - SLOT on close button click: erases preview and rejects dialog -*/ -void OCCViewer_ClippingDlg::ClickOnClose() -{ - erasePreview(); - - // Set the clipping plane back - Handle(V3d_View) aView3d = myView->getViewPort()->getView(); - if ( !aView3d.IsNull() && !myClippingPlane.IsNull() ) - aView3d->SetPlaneOn( myClippingPlane ); - - if (!myView->isCuttingPlane()) - myAction->setOn( false ); - - reject(); -} - - -/*! - SLOT on apply button click: sets cutting plane -*/ -void OCCViewer_ClippingDlg::ClickOnApply() -{ - qApp->processEvents(); - QApplication::setOverrideCursor( Qt::WaitCursor ); - qApp->processEvents(); - - myView->setCuttingPlane( true, SpinBox_X->value() , SpinBox_Y->value() , SpinBox_Z->value(), - SpinBox_Dx->value(), SpinBox_Dy->value(), SpinBox_Dz->value() ); - - QApplication::restoreOverrideCursor(); - - erasePreview(); - - ReserveClippingPlane(); -} - -/*! - SLOT on reset button click: sets default values -*/ -void OCCViewer_ClippingDlg::onReset() -{ - myBusy = true; - SpinBox_X->setValue(0); - SpinBox_Y->setValue(0); - SpinBox_Z->setValue(0); - myBusy = false; - - if ( PreviewChB->isChecked() ) - { - erasePreview(); - displayPreview(); - } -} - -/*! - SLOT on invert button click: inverts normal of cutting plane -*/ -void OCCViewer_ClippingDlg::onInvert() -{ - double Dx = SpinBox_Dx->value(); - double Dy = SpinBox_Dy->value(); - double Dz = SpinBox_Dz->value(); - - myBusy = true; - SpinBox_Dx->setValue( -Dx ); - SpinBox_Dy->setValue( -Dy ); - SpinBox_Dz->setValue( -Dz ); - myBusy = false; - - if ( PreviewChB->isChecked() ) - { - erasePreview(); - displayPreview(); - } -} - -/*! - SLOT: called on mode changed -*/ -void OCCViewer_ClippingDlg::onModeChanged( int mode ) -{ - bool isUserMode = (mode==0); - - TextLabelX->setEnabled( isUserMode ); - TextLabelY->setEnabled( isUserMode ); - TextLabelZ->setEnabled( isUserMode ); - - SpinBox_X->setEnabled( isUserMode ); - SpinBox_Y->setEnabled( isUserMode ); - SpinBox_Z->setEnabled( isUserMode ); - - TextLabelDx->setEnabled( isUserMode ); - TextLabelDy->setEnabled( isUserMode ); - TextLabelDz->setEnabled( isUserMode ); - - SpinBox_Dx->setEnabled( isUserMode ); - SpinBox_Dy->setEnabled( isUserMode ); - SpinBox_Dz->setEnabled( isUserMode ); - - if ( isUserMode ) - return; - - double aDx = 0, aDy = 0, aDz = 0; - - if ( mode == 1 ) - { - aDz = 1; - TextLabelZ->setEnabled( true ); - SpinBox_Z->setEnabled( true ); - SpinBox_Z->setFocus(); - } - else if ( mode == 2 ) - { - aDx = 1; - TextLabelX->setEnabled( true ); - SpinBox_X->setEnabled( true ); - SpinBox_X->setFocus(); - } - else if ( mode == 3 ) - { - aDy = 1; - TextLabelY->setEnabled( true ); - SpinBox_Y->setEnabled( true ); - SpinBox_Y->setFocus(); - } - - myBusy = true; - SpinBox_Dx->setValue( aDx ); - SpinBox_Dy->setValue( aDy ); - SpinBox_Dz->setValue( aDz ); - myBusy = false; - - if ( PreviewChB->isChecked() ) - { - erasePreview(); - displayPreview(); - } -} - - -/*! - Displays preview of clipping plane -*/ -void OCCViewer_ClippingDlg::displayPreview() -{ - if ( myBusy || !isValid() ) - return; - - OCCViewer_Viewer* anOCCViewer = (OCCViewer_Viewer*)myView->getViewManager()->getViewModel(); - if (!anOCCViewer) - return; - - Handle(AIS_InteractiveContext) ic = anOCCViewer->getAISContext(); - - double aXMin, aYMin, aZMin, aXMax, aYMax, aZMax; - aXMin = aYMin = aZMin = DBL_MAX; - aXMax = aYMax = aZMax = -DBL_MAX; - - bool isFound = false; - 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_Plane) ) ) - { - Handle(Prs3d_Presentation) aPrs = anObj->Presentation(); - if ( !aPrs->IsEmpty() && !aPrs->IsInfinite() ) - { - isFound = true; - double xmin, ymin, zmin, xmax, ymax, zmax; - aPrs->MinMaxValues( xmin, ymin, zmin, xmax, ymax, zmax ); - aXMin = QMIN( aXMin, xmin ); aXMax = QMAX( aXMax, xmax ); - aYMin = QMIN( aYMin, ymin ); aYMax = QMAX( aYMax, ymax ); - aZMin = QMIN( aZMin, zmin ); aZMax = QMAX( aZMax, zmax ); - } - } - } - - double aSize = 50; - - gp_Pnt aBasePnt( SpinBox_X->value(), SpinBox_Y->value(), SpinBox_Z->value() ); - gp_Dir aNormal( SpinBox_Dx->value(), SpinBox_Dy->value(), SpinBox_Dz->value() ); - gp_Pnt aCenter = aBasePnt; - - if ( isFound ) - { - // compute clipping plane size - aCenter = gp_Pnt( ( aXMin + aXMax ) / 2, ( aYMin + aYMax ) / 2, ( aZMin + aZMax ) / 2 ); - double aDiag = aCenter.Distance(gp_Pnt(aXMax, aYMax, aZMax ))*2; - aSize = aDiag * 1.1; - - // compute clipping plane center ( redefine the base point ) - IntAna_IntConicQuad intersector = IntAna_IntConicQuad(); - - intersector.Perform( gp_Lin( aCenter, aNormal), gp_Pln( aBasePnt, aNormal), Precision::Confusion() ); - if ( intersector.IsDone() && intersector.NbPoints() == 1 ) - aBasePnt = intersector.Point( 1 ); - } - - myPreviewPlane = new AIS_Plane( new Geom_Plane( aBasePnt, aNormal ) ); - myPreviewPlane->SetSize( aSize, aSize ); - - // Deactivate clipping planes - myView->getViewPort()->getView()->SetPlaneOff(); - - ic->Display( myPreviewPlane, 1, -1, false ); - ic->SetWidth( myPreviewPlane, 10, false ); - ic->SetMaterial( myPreviewPlane, Graphic3d_NOM_PLASTIC, false ); - ic->SetTransparency( myPreviewPlane, 0.5, false ); - ic->SetColor( myPreviewPlane, Quantity_Color( 85 / 255., 85 / 255., 255 / 255., Quantity_TOC_RGB ), false ); - - anOCCViewer->update(); -} - - -/*! - Erases preview of clipping plane -*/ -void OCCViewer_ClippingDlg::erasePreview () -{ - OCCViewer_Viewer* anOCCViewer = (OCCViewer_Viewer*)myView->getViewManager()->getViewModel(); - if (!anOCCViewer) - return; - - Handle(AIS_InteractiveContext) ic = anOCCViewer->getAISContext(); - - if ( !myPreviewPlane.IsNull() && ic->IsDisplayed( myPreviewPlane ) ) - { - ic->Erase( myPreviewPlane, false, false ); - ic->Remove( myPreviewPlane, false ); - myPreviewPlane.Nullify(); - } - - anOCCViewer->update(); -} - - -/*! - SLOT: called on value changes (co-ordinates of point or normal) -*/ -void OCCViewer_ClippingDlg::onValueChanged() -{ - if ( PreviewChB->isChecked() ) - { - erasePreview(); - displayPreview(); - } -} - - -/*! - SLOT: called on preview check box toggled -*/ -void OCCViewer_ClippingDlg::onPreview( bool on ) -{ - erasePreview(); - - if ( on ) - displayPreview(); -} - -/*! - \return true if plane parameters are valid -*/ -bool OCCViewer_ClippingDlg::isValid() -{ - return ( SpinBox_Dx->value()!=0 || SpinBox_Dy->value()!=0 || SpinBox_Dz->value()!=0 ); -} - -/*! - Remember the current clipping plane -*/ -void OCCViewer_ClippingDlg::ReserveClippingPlane() -{ - Handle(V3d_View) aView3d = myView->getViewPort()->getView(); - if ( !aView3d.IsNull() ) - { - aView3d->InitActivePlanes(); - if ( aView3d->MoreActivePlanes() ) - myClippingPlane = aView3d->ActivePlane(); - } -} diff --git a/src/OCCViewer/OCCViewer_ClippingDlg.h b/src/OCCViewer/OCCViewer_ClippingDlg.h deleted file mode 100644 index 27efa2e90..000000000 --- a/src/OCCViewer/OCCViewer_ClippingDlg.h +++ /dev/null @@ -1,110 +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 -// -#ifndef OCCVIEWER_CLIPPINGDLG_H -#define OCCVIEWER_CLIPPINGDLG_H - -#include "OCCViewer.h" - -#include - -#include -#include - -class QGroupBox; -class QLabel; -class QPushButton; -class QComboBox; -class QCheckBox; -class QtxDblSpinBox; -class QtxAction; - -class OCCViewer_ViewWindow; - - -/*! - \class OCCViewer_ClippingDlg - \brief Dialog allowing to assign parameters of clipping plane -*/ -class OCCViewer_ClippingDlg : public QDialog -{ - Q_OBJECT - - public: - OCCViewer_ClippingDlg(OCCViewer_ViewWindow* , QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0); - ~OCCViewer_ClippingDlg(); - - void SetAction( QtxAction* theAction ) { myAction = theAction; } - -private : - - virtual void closeEvent( QCloseEvent* e ); - virtual void showEvent ( QShowEvent * ); - virtual void hideEvent ( QHideEvent * ); - void displayPreview(); - void erasePreview(); - void ReserveClippingPlane(); - - bool isValid(); - - QGroupBox* GroupPoint; - QLabel* TextLabelX; - QLabel* TextLabelY; - QLabel* TextLabelZ; - QtxDblSpinBox* SpinBox_X; - QtxDblSpinBox* SpinBox_Y; - QtxDblSpinBox* SpinBox_Z; - QPushButton* resetButton; - - QGroupBox* GroupDirection; - QLabel* TextLabelDx; - QLabel* TextLabelDy; - QLabel* TextLabelDz; - QtxDblSpinBox* SpinBox_Dx; - QtxDblSpinBox* SpinBox_Dy; - QtxDblSpinBox* SpinBox_Dz; - QPushButton* invertButton; - - QComboBox* DirectionCB; - - QCheckBox* PreviewChB; - - QPushButton* buttonApply; - QPushButton* buttonClose; - - OCCViewer_ViewWindow* myView; - - Handle(AIS_Plane) myPreviewPlane; - Handle(V3d_Plane) myClippingPlane; - - bool myBusy; - - QtxAction* myAction; - -private slots: - void ClickOnApply(); - void ClickOnClose(); - - void onReset(); - void onInvert(); - void onModeChanged( int mode ); - void onValueChanged(); - void onPreview( bool on ); -}; - -#endif // OCCVIEWER_CLIPPINGDLG_H diff --git a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx b/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx deleted file mode 100755 index e97cde8b9..000000000 --- a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.cxx +++ /dev/null @@ -1,274 +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 "OCCViewer_CreateRestoreViewDlg.h" -#include "OCCViewer_ViewModel.h" -#include "OCCViewer_ViewPort3d.h" - -#include -#include -#include -#include - -/*! - Constructor -*/ -OCCViewer_CreateRestoreViewDlg::OCCViewer_CreateRestoreViewDlg( QWidget* aWin, OCCViewer_Viewer* curModel ) -: QDialog( aWin ) -{ - setCaption( tr( "CAPTION" ) ); - - myParametersMap = curModel->getViewAspects(); - - myKeyFlag = 0; - - int aQuantityOfItems = myParametersMap.count(); - - setFixedSize( 400, 300 ); - - QGridLayout* aGrid = new QGridLayout( this, 2, 1, 5, 10 ); - - QWidget* aWidget1 = new QWidget( this ); - QWidget* aWidget2 = new QWidget( this ); - - QHBoxLayout* aLayout = new QHBoxLayout( aWidget1 ); - - myListBox = new QtxListBox( aWidget1 ); - myListBox->installEventFilter( this ); - - myCurViewPort = new OCCViewer_ViewPort3d( aWidget1, curModel->getViewer3d(), V3d_ORTHOGRAPHIC ); - myCurViewPort->getView()->SetBackgroundColor( Quantity_NOC_BLACK ); - - myListBox->setEditEnabled( 1 ); - - if ( aQuantityOfItems ) - { - myListBox->clear(); - for( int i = 0; i < aQuantityOfItems; i++ ) - myListBox->insertItem( myParametersMap[ i ].name ); - - changeImage( myListBox->item( 0 ) ); - } - else - { - myListBox->clear(); - myListBox->insertItem( "No Items", 0 ); - myListBox->setEditEnabled( 0 ); - } - - connect( myListBox, SIGNAL( clicked( QListBoxItem* ) ), this, SLOT( changeImage( QListBoxItem* ) ) ); - connect( myListBox, SIGNAL( itemEdited( QListBoxItem* ) ), this, SLOT( editItemText( QListBoxItem* ) ) ); - - aLayout->addWidget( myListBox ); - aLayout->addWidget( myCurViewPort, 30 ); - - QHBoxLayout* aButtonLayout = new QHBoxLayout( aWidget2, 0, 5 ); - - QPushButton* theOk = new QPushButton( tr( "Ok" ), aWidget2 ); theOk->setAutoDefault( false ); - QPushButton* theCancel = new QPushButton( tr( "Cancel" ), aWidget2 ); theCancel->setAutoDefault( false ); - QPushButton* theDelete = new QPushButton( tr( "Delete" ), aWidget2 ); theDelete->setAutoDefault( false ); - QPushButton* theClearAll = new QPushButton( tr( "Clear List" ), aWidget2 ); theClearAll->setAutoDefault( false ); - - aButtonLayout->addWidget( theOk ); - aButtonLayout->addWidget( theCancel ); - aButtonLayout->addWidget( theDelete ); - aButtonLayout->addWidget( theClearAll ); - - aGrid->addWidget( aWidget1, 0, 0 ); - aGrid->addWidget( aWidget2, 1, 0 ); - - connect( theOk, SIGNAL( clicked() ), this, SLOT( OKpressed() ) ); - connect( theCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); - connect( theDelete, SIGNAL( clicked() ), this, SLOT( deleteSelectedItems() ) ); - connect( theClearAll, SIGNAL( clicked() ), this, SLOT( clearList() ) ); -} - -/*! - Destructor -*/ -OCCViewer_CreateRestoreViewDlg::~OCCViewer_CreateRestoreViewDlg() -{ -} - -/*! - Changes image in accordance with item - \param curItem - item contains info about view parameters -*/ -void OCCViewer_CreateRestoreViewDlg::changeImage( QListBoxItem* curItem ) -{ - if( curItem && myListBox->isEditEnabled() ) - { - int lowLevel = -1; - int highLevel = -1; - int index = curItem->listBox()->index( curItem ); - if( myKeyFlag == 2 ) - { - for( int i = 0; i < (int)myListBox->count(); i++ ) - { - if( myListBox->isSelected( i ) && i != index ) - { - myListBox->clearSelection(); - if( i > index ) - { - lowLevel = index; - highLevel = i; - } - else - { - lowLevel = i; - highLevel = index; - } - for( int j = lowLevel; j <= highLevel; j++ ) - myListBox->setSelected( j, TRUE ); - break; - } - if( myListBox->isSelected( i ) && i == index ) - myListBox->setSelected( i, TRUE ); - } - } - - Handle(V3d_View) aView3d = myCurViewPort->getView(); - myCurrentItem = myParametersMap[ index ]; - - Standard_Boolean prev = aView3d->SetImmediateUpdate( Standard_False ); - aView3d->SetScale( myCurrentItem.scale ); - aView3d->SetCenter( myCurrentItem.centerX, myCurrentItem.centerY ); - aView3d->SetProj( myCurrentItem.projX, myCurrentItem.projY, myCurrentItem.projZ ); - aView3d->SetTwist( myCurrentItem.twist ); - aView3d->SetAt( myCurrentItem.atX, myCurrentItem.atY, myCurrentItem.atZ ); - aView3d->SetImmediateUpdate( prev ); - aView3d->SetEye( myCurrentItem.eyeX, myCurrentItem.eyeY, myCurrentItem.eyeZ ); - } -} - -/*! - \return current view parameters (corresponding to current item) -*/ -viewAspect OCCViewer_CreateRestoreViewDlg::currentItem() const -{ - return myCurrentItem; -} - -/*! - Deletes selected items from list view -*/ -void OCCViewer_CreateRestoreViewDlg::deleteSelectedItems() -{ - if( myListBox->count() && myListBox->isEditEnabled() ) - { - int curIndex = -1; - for( int i = 0; i < (int)myListBox->count(); i++ ) - if( myListBox->isSelected( i ) ) - { - myListBox->removeItem( i ); - for( int j = i; j < (int)myParametersMap.count(); j++ ) - if( j != myParametersMap.count() - 1 ) - myParametersMap[ j ] = myParametersMap[ j + 1 ]; - else - myParametersMap.remove( myParametersMap.at(j) ); - if( i != myListBox->count() ) - curIndex = i; - else - curIndex = i - 1; - i--; - } - if( curIndex >= 0 ) - { - myListBox->setCurrentItem( curIndex ); - changeImage( myListBox->item( curIndex ) ); - } - } - if( !myListBox->count() ) - { - myListBox->clear(); - myListBox->insertItem( "No Items", 0 ); - myListBox->setEditEnabled( 0 ); - } -} - -/*! - Clears list of view aspects -*/ -void OCCViewer_CreateRestoreViewDlg::clearList() -{ - myListBox->clear(); - myListBox->insertItem( "No Items", 0 ); - myListBox->setEditEnabled( 0 ); - - myParametersMap.clear(); -} - -/*! - \return const reference to all view aspects -*/ -const viewAspectList& OCCViewer_CreateRestoreViewDlg::parameters() const -{ - return myParametersMap; -} - -/*! - Renames key of view aspect map in accordance with item name - \param anItem - item -*/ -void OCCViewer_CreateRestoreViewDlg::editItemText( QListBoxItem* anItem ) -{ - int index = anItem->listBox()->index( anItem ); - myParametersMap[ index ].name = anItem->text().latin1(); -} - -/*! - Custom event filter -*/ -bool OCCViewer_CreateRestoreViewDlg::eventFilter( QObject* anObj, QEvent* anEv ) -{ - if( anEv->type() == QEvent::KeyPress ) - { - QKeyEvent* aKeyEv = ( QKeyEvent* )anEv; - if( aKeyEv->key() == Qt::Key_Control ) - { - myKeyFlag = 1; - myListBox->setSelectionMode( QListBox::Multi ); - } - else if( aKeyEv->key() == Qt::Key_Shift ) - { - myKeyFlag = 2; - myListBox->setSelectionMode( QListBox::Multi ); - } - else - myListBox->setSelectionMode( QListBox::Single ); - } - if( anEv->type() == QEvent::KeyRelease ) - myKeyFlag = 0; - - if( !myKeyFlag ) - { - if( anEv->type() == QEvent::KeyPress || anEv->type() == QEvent::MouseButtonPress ) - myListBox->setSelectionMode( QListBox::Single ); - } - return QWidget::eventFilter( anObj, anEv ); -} - -/*! - SLOT: called on OK click, emits dlgOk() and closes dialog -*/ -void OCCViewer_CreateRestoreViewDlg::OKpressed() -{ - emit dlgOk(); - accept(); -} - diff --git a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.h b/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.h deleted file mode 100755 index fc1579ae6..000000000 --- a/src/OCCViewer/OCCViewer_CreateRestoreViewDlg.h +++ /dev/null @@ -1,77 +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 -// -#ifndef OCCVIEWER_CREATERESTOREVIEWDLG_H -#define OCCVIEWER_CREATERESTOREVIEWDLG_H - -#include "OCCViewer.h" - -#include "OCCViewer_ViewModel.h" -#include "OCCViewer_ViewWindow.h" - -#include -#include -#include - -#include -#include -#include -#include -#include - -class OCCViewer_ViewPort3d; - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -class OCCVIEWER_EXPORT OCCViewer_CreateRestoreViewDlg : public QDialog -{ - Q_OBJECT - -public: - OCCViewer_CreateRestoreViewDlg( QWidget*, OCCViewer_Viewer* ); - virtual ~OCCViewer_CreateRestoreViewDlg(); - - const viewAspectList& parameters() const; - viewAspect currentItem() const; - virtual bool eventFilter( QObject*, QEvent* ); - -public slots: - void OKpressed(); - void clearList(); - void editItemText( QListBoxItem* ); - void changeImage( QListBoxItem* ); - void deleteSelectedItems(); - -signals: - void dlgOk(); - -private: - int myKeyFlag; - QtxListBox* myListBox; - OCCViewer_ViewPort3d* myCurViewPort; - viewAspect myCurrentItem; - viewAspectList myParametersMap; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/OCCViewer/OCCViewer_VService.cxx b/src/OCCViewer/OCCViewer_VService.cxx deleted file mode 100755 index 77ef0aced..000000000 --- a/src/OCCViewer/OCCViewer_VService.cxx +++ /dev/null @@ -1,302 +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 "OCCViewer_VService.h" -#include -#include -#include - -#include -#include -#include - -#ifdef WNT -#include -#include -#include -#include -#include -#else -#include -#include -#include -//#include -#include -#endif - -// For 2d -#define LOPTIM -#ifdef WNT -#ifndef LOPTIM -static Handle(WNT_GraphicDevice) XServiceDefault2dDevice; -static Handle(WNT_GraphicDevice) XServiceImageDevice; -#else -static Handle(WNT_GraphicDevice)& _XServiceDefault2dDevice() { -static Handle(WNT_GraphicDevice) XServiceDefault2dDevice; -return XServiceDefault2dDevice; -} -#define XServiceDefault2dDevice _XServiceDefault2dDevice() - -static Handle(WNT_GraphicDevice)& _XServiceImageDevice() { -static Handle(WNT_GraphicDevice) XServiceImageDevice; -return XServiceImageDevice; -} -#define XServiceImageDevice _XServiceImageDevice() -#endif // LOPTIM -#else -#ifndef LOPTIM -static Handle(Xw_GraphicDevice) XServiceDefault2dDevice; -static Handle(Xw_GraphicDevice) XServiceImageDevice; -#else -static Handle(Xw_GraphicDevice)& _XServiceDefault2dDevice() { -static Handle(Xw_GraphicDevice) XServiceDefault2dDevice; -return XServiceDefault2dDevice; -} -#define XServiceDefault2dDevice _XServiceImageDevice() - -static Handle(Xw_GraphicDevice)& _XServiceImageDevice() { -static Handle(Xw_GraphicDevice) XServiceImageDevice; -return XServiceImageDevice; -} -#define XServiceImageDevice _XServiceImageDevice() -#endif // LOPTIM -#endif // WNT - -/*! - Maps CasCade view to the window [ static ] -*/ -void OCCViewer_VService::SetWindow( const Handle(V3d_View)& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Xw_WindowQuality quality ) -{ -#ifdef WNT - Handle(WNT_Window) w = - new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin ); -#else - Handle(Xw_Window) w = - new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, quality ); -#endif - view->SetWindow( w ); -} - -/*! - Magnifies 'view' based on previous view [ static ] -*/ -void OCCViewer_VService::SetMagnify( const Handle(V3d_View)& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Handle(V3d_View)& prevView, - const Standard_Integer x1, - const Standard_Integer y1, - const Standard_Integer x2, - const Standard_Integer y2, - const Xw_WindowQuality aQuality ) -{ -#ifdef WNT - Handle(WNT_Window) w = - new WNT_Window( Handle(Graphic3d_WNTGraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin ); -#else - Handle(Xw_Window) w = - new Xw_Window( Handle(Graphic3d_GraphicDevice)::DownCast(view->Viewer()->Device()), hiwin, lowin, aQuality ); -#endif - view->SetMagnify( w, prevView, x1, y1, x2, y2 ); -} - -/*! - Creates viewer 3d [ static ] -*/ -Handle(V3d_Viewer) OCCViewer_VService::Viewer3d( const Standard_CString aDisplay, - const Standard_ExtString aName, - const Standard_CString aDomain, - const Standard_Real ViewSize , - const V3d_TypeOfOrientation ViewProj, - const Standard_Boolean ComputedMode, - const Standard_Boolean aDefaultComputedMode ) -{ -#ifndef WNT - static Handle(Graphic3d_GraphicDevice) defaultdevice; - if ( defaultdevice.IsNull() ) - defaultdevice = new Graphic3d_GraphicDevice( aDisplay ); - return new V3d_Viewer( defaultdevice, aName, aDomain, ViewSize, ViewProj, - Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT, - ComputedMode, aDefaultComputedMode, V3d_TEX_NONE ); -#else - static Handle(Graphic3d_WNTGraphicDevice) defaultdevice; - if ( defaultdevice.IsNull() ) - defaultdevice = new Graphic3d_WNTGraphicDevice(); - return new V3d_Viewer( defaultdevice, aName, aDomain, ViewSize, ViewProj, - Quantity_NOC_GRAY30, V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT, - ComputedMode, aDefaultComputedMode, V3d_TEX_NONE); -#endif // WNT -} - -/*! - Creates view 2D and maps it to the window [ static ] -*/ -/*Handle(V2d_View) OCCViewer_VService::View2d( const Handle(V2d_Viewer)& aViewer, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Xw_WindowQuality aQuality, - const Standard_Boolean Update, - const Quantity_NameOfColor BackColor ) -{ -#ifdef WNT - Handle(WNT_GraphicDevice) GD = Handle(WNT_GraphicDevice)::DownCast(aViewer->Device()); - Handle(WNT_Window) W = new WNT_Window( GD, hiwin, lowin, BackColor ); - Handle(WNT_WDriver) D = new WNT_WDriver( W ); -#else - Handle(Xw_GraphicDevice) GD = Handle(Xw_GraphicDevice)::DownCast(aViewer->Device()); - Handle(Xw_Window) W = new Xw_Window( GD, hiwin, lowin, aQuality, BackColor ); - Handle(Xw_Driver) D = new Xw_Driver( W ); -#endif - Handle(V2d_View) V = new V2d_View( D, aViewer ); - if ( Update ) - V->Update(); - return V; -}*/ - -/*! - Creates view 2D and maps it to the window [ static ] -*/ -/*Handle(V2d_View) OCCViewer_VService::dpsView2d( const Handle(V2d_Viewer)& aViewer, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Xw_WindowQuality aQuality, - const Standard_Boolean Update, - const Quantity_NameOfColor BackColor ) -{ -#ifdef WNT - Handle(WNT_GraphicDevice) GD = Handle(WNT_GraphicDevice)::DownCast(aViewer->Device()); - Handle(WNT_Window) W = new WNT_Window( GD, hiwin, lowin, BackColor ); - W->SetBackground( BackColor ); - Handle(WNT_WDriver) D = new WNT_WDriver( W ); -#else - Handle(Xw_GraphicDevice) GD = Handle(Xw_GraphicDevice)::DownCast(aViewer->Device()); - Handle(Xw_Window) W = new Xw_Window( GD, hiwin, lowin, aQuality, BackColor ); - Handle(Xdps_Driver) D = new Xdps_Driver( W ); -#endif - Handle(V2d_View) V = new V2d_View( D, aViewer ); - if ( Update ) - V->Update(); - return V; -}*/ - -/*! - Creates viewer 2D [ static ] -*/ -/*Handle(V2d_Viewer) OCCViewer_VService::Viewer2d( const Standard_CString aDisplay, - const Standard_ExtString aName, - const Standard_CString aDomain ) -{ -#ifdef WNT - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new WNT_GraphicDevice(); -#else - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY ); -#endif - return new V2d_Viewer( XServiceDefault2dDevice, aName, aDomain ); -}*/ - -/*! - Creates viewer 2D [ static ] -*/ -/*Handle(V2d_Viewer) OCCViewer_VService::Viewer2d( const Standard_CString aDisplay, - const Handle(Graphic2d_View)& aView, - const Standard_ExtString aName, - const Standard_CString aDomain ) -{ -#ifdef WNT - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new WNT_GraphicDevice(); -#else - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY ); -#endif - return new V2d_Viewer( XServiceDefault2dDevice, aView, aName, aDomain ); -}*/ - -/*! - Creates window driver [ static ] -*/ -Handle(Aspect_WindowDriver) OCCViewer_VService::WindowDriver( const Standard_CString aDisplay, - const Standard_Integer ahiwin, - const Standard_Integer alowin, - const Quantity_NameOfColor aColor ) -{ -#ifdef WNT - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new WNT_GraphicDevice(); - Handle(WNT_Window) W = new WNT_Window( XServiceDefault2dDevice, ahiwin, alowin, aColor ); - return new WNT_WDriver( W ); -#else - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY ); - Handle(Xw_Window) W = new Xw_Window( XServiceDefault2dDevice, ahiwin, alowin, Xw_WQ_DRAWINGQUALITY , aColor ); - return new Xw_Driver( W ); -#endif -} - -/*! - Creates Xdps window driver [ static ] - On Win32 the same as OCCViewer_VService::WindowDriver() -*/ -/* -Handle(Aspect_WindowDriver) OCCViewer_VService::XdpsDriver( const Standard_CString aDisplay, - const Standard_Integer ahiwin, - const Standard_Integer alowin, - const Quantity_NameOfColor aColor ) -{ -#ifdef WNT - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new WNT_GraphicDevice(); - Handle(WNT_Window) W = new WNT_Window( XServiceDefault2dDevice, ahiwin, alowin, aColor ); - return new WNT_WDriver( W ); -#else - if ( XServiceDefault2dDevice.IsNull() ) - XServiceDefault2dDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY ); - Handle(Xw_Window) W = new Xw_Window( XServiceDefault2dDevice, ahiwin, alowin, - Xw_WQ_DRAWINGQUALITY, aColor ); - return new Xdps_Driver( W ); -#endif -} -*/ -/*! - Creates Xw window driver [ static ] - On Win32 the same as OCCViewer_VService::WindowDriver() -*/ -Handle(Aspect_WindowDriver) OCCViewer_VService::ImageDriver( const Standard_CString aDisplay, - const Standard_Integer ahiwin, - const Standard_Integer alowin, - const Quantity_NameOfColor aColor ) -{ -#ifdef WNT - if ( XServiceImageDevice.IsNull() ) - XServiceImageDevice = new WNT_GraphicDevice(); - Handle(WNT_Window) W = new WNT_Window( XServiceImageDevice, ahiwin, alowin, aColor ); - return new WNT_WDriver( W ); -#else - if ( XServiceImageDevice.IsNull() ) - XServiceImageDevice = new Xw_GraphicDevice( aDisplay, Xw_TOM_READONLY ); - Handle(Xw_Window) W = new Xw_Window( XServiceImageDevice, ahiwin, alowin, - Xw_WQ_PICTUREQUALITY, aColor ); - return new Xw_Driver( W ); -#endif -} diff --git a/src/OCCViewer/OCCViewer_VService.h b/src/OCCViewer/OCCViewer_VService.h deleted file mode 100755 index b15ab5564..000000000 --- a/src/OCCViewer/OCCViewer_VService.h +++ /dev/null @@ -1,132 +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 -// -#ifndef OCCVIEWER_VSERVICE_H -#define OCCVIEWER_VSERVICE_H - -#ifndef _Handle_V3d_View_HeaderFile -#include -#endif -#ifndef _Standard_Integer_HeaderFile -#include -#endif -#ifndef _Xw_WindowQuality_HeaderFile -#include -#endif -#ifndef _Handle_V3d_Viewer_HeaderFile -#include -#endif -#ifndef _Standard_CString_HeaderFile -#include -#endif -#ifndef _Standard_ExtString_HeaderFile -#include -#endif -#ifndef _Quantity_Length_HeaderFile -#include -#endif -#ifndef _Quantity_NameOfColor_HeaderFile -#include -#endif -#ifndef _V3d_TypeOfOrientation_HeaderFile -#include -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _Handle_Graphic2d_View_HeaderFile -#include -#endif -#ifndef _Handle_Aspect_WindowDriver_HeaderFile -#include -#endif - -class V3d_View; -class V2d_View; -class V3d_Viewer; -class V2d_Viewer; -class Graphic2d_View; -class Aspect_WindowDriver; - -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Standard_Macro_HeaderFile -#include -#endif - -class Standard_EXPORT OCCViewer_VService -{ -public: - inline void* operator new(size_t,void* anAddress) - { - return anAddress; - } - inline void* operator new(size_t size) - { - return Standard::Allocate(size); - } - inline void operator delete(void *anAddress) - { - if ( anAddress ) Standard::Free((Standard_Address&)anAddress); - } - - // STATIC METHODS - static void SetWindow( const Handle( V3d_View )& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Xw_WindowQuality quality = Xw_WQ_3DQUALITY ); - - static void SetMagnify( const Handle( V3d_View)& view, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Handle( V3d_View)& aPreviousView, - const Standard_Integer x1, - const Standard_Integer y1, - const Standard_Integer x2, - const Standard_Integer y2, - const Xw_WindowQuality quality = Xw_WQ_3DQUALITY ); - static Handle_V3d_Viewer - Viewer3d( const Standard_CString display, - const Standard_ExtString name, - const Standard_CString domain = "", - const Quantity_Length ViewSize = 1000.0, - const V3d_TypeOfOrientation ViewProj = V3d_XposYnegZpos, - const Standard_Boolean ComputedMode = Standard_True, - const Standard_Boolean DefaultComputedMode = Standard_True ); - - static Handle_Aspect_WindowDriver - WindowDriver( const Standard_CString display, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Quantity_NameOfColor color = Quantity_NOC_GRAY69 ); - /*static Handle_Aspect_WindowDriver - XdpsDriver( const Standard_CString display, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Quantity_NameOfColor color = Quantity_NOC_GRAY69 ); - */ - static Handle_Aspect_WindowDriver - ImageDriver( const Standard_CString display, - const Standard_Integer hiwin, - const Standard_Integer lowin, - const Quantity_NameOfColor color = Quantity_NOC_GRAY69 ); - -}; - -#endif diff --git a/src/OCCViewer/OCCViewer_ViewManager.cxx b/src/OCCViewer/OCCViewer_ViewManager.cxx deleted file mode 100755 index 3d799109f..000000000 --- a/src/OCCViewer/OCCViewer_ViewManager.cxx +++ /dev/null @@ -1,48 +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 "OCCViewer_ViewManager.h" -#include "OCCViewer_ViewWindow.h" -#include "SUIT_Desktop.h" - -/*! - Constructor -*/ -OCCViewer_ViewManager::OCCViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop, bool DisplayTrihedron ) -: SUIT_ViewManager( study, theDesktop, new OCCViewer_Viewer( DisplayTrihedron ) ) -{ - setTitle( tr( "OCC_VIEW_TITLE" ) ); -} - -/*! - Destructor -*/ -OCCViewer_ViewManager::~OCCViewer_ViewManager() -{ -} - -/*! - Fills popup menu with custom actions - \param popup - popup menu to be filled with -*/ -void OCCViewer_ViewManager::contextMenuPopup( QPopupMenu* popup ) -{ - SUIT_ViewManager::contextMenuPopup( popup ); - // if it is necessary invoke method CreatePopup of ViewPort - // be sure that existing QPopupMenu menu is used for that. -} diff --git a/src/OCCViewer/OCCViewer_ViewManager.h b/src/OCCViewer/OCCViewer_ViewManager.h deleted file mode 100755 index ea88d3577..000000000 --- a/src/OCCViewer/OCCViewer_ViewManager.h +++ /dev/null @@ -1,41 +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 -// -#ifndef OCCVIEWER_VIEWMANAGER_H -#define OCCVIEWER_VIEWMANAGER_H - -#include "OCCViewer_ViewModel.h" - -#include "SUIT_ViewManager.h" - -class SUIT_Desktop; - -class OCCVIEWER_EXPORT OCCViewer_ViewManager : public SUIT_ViewManager -{ - Q_OBJECT - -public: - OCCViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop, bool DisplayTrihedron = true ); - ~OCCViewer_ViewManager(); - - OCCViewer_Viewer* getOCCViewer() { return (OCCViewer_Viewer*) myViewModel; } - - virtual void contextMenuPopup( QPopupMenu* ); -}; - -#endif diff --git a/src/OCCViewer/OCCViewer_ViewModel.cxx b/src/OCCViewer/OCCViewer_ViewModel.cxx deleted file mode 100755 index 772bbd758..000000000 --- a/src/OCCViewer/OCCViewer_ViewModel.cxx +++ /dev/null @@ -1,621 +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 "OCCViewer_ViewModel.h" -#include "OCCViewer_ViewWindow.h" -#include "OCCViewer_VService.h" -#include "OCCViewer_ViewPort3d.h" - -#include "SUIT_ViewWindow.h" -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -/*! - Constructor - \param DisplayTrihedron - is trihedron displayed -*/ -OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron ) -: SUIT_ViewModel(), -myBgColor( Qt::black ) -{ - // init CasCade viewers - myV3dViewer = OCCViewer_VService::Viewer3d( "", (short*) "Viewer3d", "", 1000., - V3d_XposYnegZpos, true, true ); - - myV3dViewer->Init(); - - myV3dCollector = OCCViewer_VService::Viewer3d( "", (short*) "Collector3d", "", 1000., - V3d_XposYnegZpos, true, true ); - myV3dCollector->Init(); - - // init selector - myAISContext = new AIS_InteractiveContext( myV3dViewer, myV3dCollector); - - myAISContext->SelectionColor( Quantity_NOC_WHITE ); - - // display isoline on planar faces (box for ex.) - myAISContext->IsoOnPlane( true ); - - clearViewAspects(); - - /* create trihedron */ - if( DisplayTrihedron ) - { - Handle(Geom_Axis2Placement) anAxis = new Geom_Axis2Placement(gp::XOY()); - myTrihedron = new AIS_Trihedron(anAxis); - myTrihedron->SetInfiniteState( Standard_True ); - - Quantity_Color Col(193/255., 205/255., 193/255., Quantity_TOC_RGB); - //myTrihedron->SetColor( Col ); - myTrihedron->SetArrowColor( Col.Name() ); - myTrihedron->SetSize(100); - Handle(AIS_Drawer) drawer = myTrihedron->Attributes(); - if (drawer->HasDatumAspect()) { - Handle(Prs3d_DatumAspect) daspect = drawer->DatumAspect(); - daspect->FirstAxisAspect()->SetColor(Quantity_Color(1.0, 0.0, 0.0, Quantity_TOC_RGB)); - daspect->SecondAxisAspect()->SetColor(Quantity_Color(0.0, 1.0, 0.0, Quantity_TOC_RGB)); - daspect->ThirdAxisAspect()->SetColor(Quantity_Color(0.0, 0.0, 1.0, Quantity_TOC_RGB)); - } - - myAISContext->Display(myTrihedron); - myAISContext->Deactivate(myTrihedron); - } - - // selection - mySelectionEnabled = true; - myMultiSelectionEnabled = true; -} - -/*! - Destructor -*/ -OCCViewer_Viewer::~OCCViewer_Viewer() -{ -} - -/*! - \return background color of viewer -*/ -QColor OCCViewer_Viewer::backgroundColor() const -{ - return myBgColor; -} - -/*! - Sets background color - \param c - new background color -*/ -void OCCViewer_Viewer::setBackgroundColor( const QColor& c ) -{ - if ( c.isValid() ) - myBgColor = c; -} - -/*! - Start initialization of view window - \param view - view window to be initialized -*/ -void OCCViewer_Viewer::initView( OCCViewer_ViewWindow* view ) -{ - if ( view ) { - view->initLayout(); - - OCCViewer_ViewPort3d* vp3d = view->getViewPort(); - if ( vp3d ) - vp3d->setBackgroundColor( myBgColor ); - } -} - -/*! - Creates new view window - \param theDesktop - main window of application -*/ -SUIT_ViewWindow* OCCViewer_Viewer::createView( SUIT_Desktop* theDesktop ) -{ - OCCViewer_ViewWindow* view = new OCCViewer_ViewWindow(theDesktop, this); - initView( view ); - return view; -} - -/*! - Sets new view manager - \param theViewManager - new view manager -*/ -void OCCViewer_Viewer::setViewManager(SUIT_ViewManager* theViewManager) -{ - SUIT_ViewModel::setViewManager(theViewManager); - if (theViewManager) { - connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*))); - - connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*))); - - connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*))); - } -} - -/*! - SLOT: called on mouse button press, stores current mouse position as start point for transformations -*/ -void OCCViewer_Viewer::onMousePress(SUIT_ViewWindow* theWindow, QMouseEvent* theEvent) -{ - myStartPnt.setX(theEvent->x()); myStartPnt.setY(theEvent->y()); -} - -/*! - SLOT: called on mouse move, processes transformation or hilighting -*/ -void OCCViewer_Viewer::onMouseMove(SUIT_ViewWindow* theWindow, QMouseEvent* theEvent) -{ - if (!mySelectionEnabled) return; - if (!theWindow->inherits("OCCViewer_ViewWindow")) return; - - OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*) theWindow; - if ( isSelectionEnabled() ) - myAISContext->MoveTo(theEvent->x(), theEvent->y(), aView->getViewPort()->getView()); -} - - -/*! - SLOT: called on mouse button release, finishes transformation or selection -*/ -void OCCViewer_Viewer::onMouseRelease(SUIT_ViewWindow* theWindow, QMouseEvent* theEvent) -{ - if (!mySelectionEnabled) return; - if (theEvent->button() != Qt::LeftButton) return; - if (!theWindow->inherits("OCCViewer_ViewWindow")) return; - - - myEndPnt.setX(theEvent->x()); myEndPnt.setY(theEvent->y()); - OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*) theWindow; - bool aHasShift = (theEvent->state() & Qt::ShiftButton); - - if (myStartPnt == myEndPnt) - { - if (aHasShift && myMultiSelectionEnabled) - myAISContext->ShiftSelect(); - else - myAISContext->Select(); - } - else - { - if (aHasShift && myMultiSelectionEnabled) - myAISContext->ShiftSelect(myStartPnt.x(), myStartPnt.y(), - myEndPnt.x(), myEndPnt.y(), - aView->getViewPort()->getView(), Standard_False ); - else - myAISContext->Select(myStartPnt.x(), myStartPnt.y(), - myEndPnt.x(), myEndPnt.y(), - aView->getViewPort()->getView(), Standard_False ); - - int Nb = myAISContext->NbSelected(); - if( Nb>1 && !myMultiSelectionEnabled ) - { - myAISContext->InitSelected(); - Handle( SelectMgr_EntityOwner ) anOwner = myAISContext->SelectedOwner(); - if( !anOwner.IsNull() ) - { - myAISContext->ClearSelected( Standard_False ); - myAISContext->AddOrRemoveSelected( anOwner, Standard_False ); - } - } - - myAISContext->UpdateCurrentViewer(); - } - emit selectionChanged(); -} - - -/*! - Sets selection enabled status - \param isEnabled - new status -*/ -void OCCViewer_Viewer::enableSelection(bool isEnabled) -{ - mySelectionEnabled = isEnabled; - //!! To be done for view windows - if ( !myViewManager ) - return; - - QPtrVector wins = myViewManager->getViews(); - for ( int i = 0; i < (int)wins.count(); i++ ) - { - OCCViewer_ViewWindow* win = ::qt_cast( wins.at( i ) ); - if ( win ) - win->updateEnabledDrawMode(); - } -} - -/*! - Sets multiselection enabled status - \param isEnabled - new status -*/ -void OCCViewer_Viewer::enableMultiselection(bool isEnable) -{ - myMultiSelectionEnabled = isEnable; - //!! To be done for view windows - if ( !myViewManager ) - return; - - QPtrVector wins = myViewManager->getViews(); - for ( int i = 0; i < (int)wins.count(); i++ ) - { - OCCViewer_ViewWindow* win = ::qt_cast( wins.at( i ) ); - if ( win ) - win->updateEnabledDrawMode(); - } -} - -/*! - Builds popup for occ viewer -*/ -void OCCViewer_Viewer::contextMenuPopup(QPopupMenu* thePopup) -{ - thePopup->insertItem( tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) ); - thePopup->insertItem( tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) ); - - thePopup->insertSeparator(); - - OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView()); - if ( aView && !aView->getToolBar()->isVisible() ) - thePopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) ); -} - -/*! - SLOT: called on dump view operation is activated, stores scene to raster file -*/ -void OCCViewer_Viewer::onDumpView() -{ - OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView()); - if ( aView ) - aView->onDumpView(); -} - -/*! - SLOT: called if background color is to be changed changed, passes new color to view port -*/ -void OCCViewer_Viewer::onChangeBgColor() -{ - OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView()); - if( !aView ) - return; - OCCViewer_ViewPort3d* aViewPort3d = aView->getViewPort(); - if( !aViewPort3d ) - return; - QColor aColorActive = aViewPort3d->backgroundColor(); - - QColor selColor = QColorDialog::getColor( aColorActive, aView); - if ( selColor.isValid() ) - aViewPort3d->setBackgroundColor(selColor); -} - -/*! - SLOT: called when popup item "Show toolbar" is activated, shows toolbar of active view window -*/ -void OCCViewer_Viewer::onShowToolbar() { - OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView()); - if ( aView ) - aView->getToolBar()->show(); -} - -/*! - Updates OCC 3D viewer -*/ -void OCCViewer_Viewer::update() -{ - if (!myV3dViewer.IsNull()) - myV3dViewer->Update(); -} - -/*! - \return objects selected in 3D viewer - \param theList - list to be filled with selected objects -*/ -void OCCViewer_Viewer::getSelectedObjects(AIS_ListOfInteractive& theList) -{ - theList.Clear(); - for (myAISContext->InitSelected(); myAISContext->MoreSelected(); myAISContext->NextSelected()) - theList.Append(myAISContext->SelectedInteractive()); -} - -/*! - Selects objects in 3D viewer. Other selected objects are left as selected - \param theList - list objects to be selected -*/ -void OCCViewer_Viewer::setObjectsSelected(const AIS_ListOfInteractive& theList) -{ - AIS_ListIteratorOfListOfInteractive aIt; - for (aIt.Initialize(theList); aIt.More(); aIt.Next()) - myAISContext->AddOrRemoveSelected(aIt.Value(), false); - myAISContext->UpdateCurrentViewer(); -} - -/*! - Auxiliary method to emit signal selectionChanged() -*/ -void OCCViewer_Viewer::performSelectionChanged() -{ - emit selectionChanged(); -} - -/*! - SLOT, clears view aspects -*/ -void OCCViewer_Viewer::onClearViewAspects() -{ - clearViewAspects(); -} - -/*! - Clears view aspects -*/ -void OCCViewer_Viewer::clearViewAspects() -{ - myViewAspects.clear(); -} - -/*! - \return const reference to list of view aspects -*/ -const viewAspectList& OCCViewer_Viewer::getViewAspects() -{ - return myViewAspects; -} - -/*! - Appends new view aspect - \param aParams - new view aspects -*/ -void OCCViewer_Viewer::appendViewAspect( const viewAspect& aParams ) -{ - myViewAspects.append( aParams ); -} - -/*! - Replaces old view aspects by new ones - \param aViewList - list of new view aspects -*/ -void OCCViewer_Viewer::updateViewAspects( const viewAspectList& aViewList ) -{ - myViewAspects = aViewList; -} - -/*! - Hilights/unhilights object in viewer - \param obj - object to be updated - \param hilight - if it is true, object will be hilighted, otherwise it will be unhilighted - \param update - update current viewer -*/ -bool OCCViewer_Viewer::highlight( const Handle(AIS_InteractiveObject)& obj, - bool hilight, bool update ) -{ - bool isInLocal = myAISContext->HasOpenedContext(); - if( !obj.IsNull() ) - if( !isInLocal ) - { - if ( hilight && !myAISContext->IsSelected( obj ) ) - myAISContext->AddOrRemoveCurrentObject( obj, false ); - else if ( !hilight && myAISContext->IsSelected( obj ) ) - myAISContext->AddOrRemoveCurrentObject( obj, false ); - } - - if ( update ) - myV3dViewer->Redraw(); - - return false; -} - -/*! - Unhilights all objects in viewer - \param updateviewer - update current viewer -*/ -bool OCCViewer_Viewer::unHighlightAll( bool updateviewer ) -{ - if ( myAISContext->HasOpenedContext() ) - myAISContext->ClearSelected( updateviewer ); - else - myAISContext->ClearCurrents( updateviewer ); - return false; -} - -/*! - \return true if object is in viewer or in collector - \param obj - object to be checked - \param onlyInViewer - search object only in viewer (so object must be displayed) -*/ -bool OCCViewer_Viewer::isInViewer( const Handle(AIS_InteractiveObject)& obj, - bool onlyInViewer ) -{ - AIS_ListOfInteractive List; - myAISContext->DisplayedObjects(List); - - if( !onlyInViewer ) - { - AIS_ListOfInteractive List1; - myAISContext->ObjectsInCollector(List1); - List.Append(List1); - } - - AIS_ListIteratorOfListOfInteractive ite(List); - for ( ; ite.More(); ite.Next() ) - if( ite.Value()==obj ) - return true; - - return false; -} - -/*! - \return true if object is displayed in viewer - \param obj - object to be checked -*/ -bool OCCViewer_Viewer::isVisible( const Handle(AIS_InteractiveObject)& obj ) -{ - return myAISContext->IsDisplayed( obj ); -} - -/*! - Sets color of object - \param obj - object to be updated - \param color - new color - \param update - update current viewer -*/ -void OCCViewer_Viewer::setColor( const Handle(AIS_InteractiveObject)& obj, - const QColor& color, - bool update ) -{ - if( !obj.IsNull() ) - { - Quantity_Color CSFColor = Quantity_Color ( color.red() / 255., - color.green() / 255., - color.blue() / 255., - Quantity_TOC_RGB ); - obj->SetColor( CSFColor ); - } - - if( update ) - myV3dViewer->Update(); -} - -/*! - Changes display mode of object - \param obj - object to be processed - \param mode - new display mode - \param update - update current viewer -*/ -void OCCViewer_Viewer::switchRepresentation( const Handle(AIS_InteractiveObject)& obj, - int mode, bool update ) -{ - myAISContext->SetDisplayMode( obj, (Standard_Integer)mode, update ); - if( update ) - myV3dViewer->Update(); -} - -/*! - Changes transparency of object - \param obj - object to be processed - \param trans - new transparency - \param update - update current viewer -*/ -void OCCViewer_Viewer::setTransparency( const Handle(AIS_InteractiveObject)& obj, - float trans, bool update ) -{ - myAISContext->SetTransparency( obj, trans, false ); - myAISContext->Redisplay( obj, Standard_False, Standard_True ); - if( update ) - myV3dViewer->Update(); -} - -/*! - Changes visibility of trihedron to opposite -*/ -void OCCViewer_Viewer::toggleTrihedron() -{ - setTrihedronShown( !isTrihedronVisible() ); -} - -/*! - \return true if trihedron is visible -*/ -bool OCCViewer_Viewer::isTrihedronVisible() const -{ - return !myTrihedron.IsNull() && !myAISContext.IsNull() && myAISContext->IsDisplayed( myTrihedron ); -} - -/*! - Sets visibility state of trihedron - \param on - new state -*/ - -void OCCViewer_Viewer::setTrihedronShown( const bool on ) -{ - if ( myTrihedron.IsNull() ) - return; - - if ( on ) - myAISContext->Display( myTrihedron ); - else - myAISContext->Erase( myTrihedron ); -} - -/*! - \return trihedron size -*/ -double OCCViewer_Viewer::trihedronSize() const -{ - double sz = 0; - if ( !myTrihedron.IsNull() ) - sz = myTrihedron->Size(); - return sz; -} - -/*! - Changes trihedron size - \param sz - new size -*/ -void OCCViewer_Viewer::setTrihedronSize( const double sz ) -{ - if ( !myTrihedron.IsNull() ) - myTrihedron->SetSize( sz ); -} - -/*! - Set number of isolines - \param u - u-isolines (first parametric co-ordinate) - \param v - v-isolines (second parametric co-ordinate) -*/ -void OCCViewer_Viewer::setIsos( const int u, const int v ) -{ - Handle(AIS_InteractiveContext) ic = getAISContext(); - if ( ic.IsNull() ) - return; - - ic->SetIsoNumber( u, AIS_TOI_IsoU ); - ic->SetIsoNumber( v, AIS_TOI_IsoV ); -} - -/*! - \return number of isolines - \param u - to return u-isolines (first parametric co-ordinate) - \param v - to return v-isolines (second parametric co-ordinate) -*/ -void OCCViewer_Viewer::isos( int& u, int& v ) const -{ - Handle(AIS_InteractiveContext) ic = getAISContext(); - if ( !ic.IsNull() ) - { - u = ic->IsoNumber( AIS_TOI_IsoU ); - v = ic->IsoNumber( AIS_TOI_IsoV ); - } -} diff --git a/src/OCCViewer/OCCViewer_ViewModel.h b/src/OCCViewer/OCCViewer_ViewModel.h deleted file mode 100755 index 56ffbbfa4..000000000 --- a/src/OCCViewer/OCCViewer_ViewModel.h +++ /dev/null @@ -1,175 +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 -// -#ifndef OCCVIEWER_VIEWMODEL_H -#define OCCVIEWER_VIEWMODEL_H - -#include -#include - -#include "OCCViewer.h" - -#include "SUIT_ViewModel.h" - -#include -#include -#include -#include - -class SUIT_ViewWindow; -class SUIT_Desktop; -class OCCViewer_ViewWindow; - -struct viewAspect -{ -public: - double scale; - double centerX; - double centerY; - double projX; - double projY; - double projZ; - double twist; - double atX; - double atY; - double atZ; - double eyeX; - double eyeY; - double eyeZ; - QString name; -}; - -typedef QValueList viewAspectList; - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -class OCCVIEWER_EXPORT OCCViewer_Viewer: public SUIT_ViewModel -{ - Q_OBJECT - -public: - static QString Type() { return "OCCViewer"; } - - OCCViewer_Viewer( bool DisplayTrihedron = true ); - virtual ~OCCViewer_Viewer(); - - void update(); - - virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop); - - virtual void setViewManager(SUIT_ViewManager* theViewManager); - virtual QString getType() const { return Type(); } - - virtual void contextMenuPopup(QPopupMenu*); - - void getSelectedObjects(AIS_ListOfInteractive& theList); - void setObjectsSelected(const AIS_ListOfInteractive& theList); - void setSelected(const Handle(AIS_InteractiveObject)& theIO) - { myAISContext->SetSelected(theIO);} - - void performSelectionChanged(); - // emit signal selectionChanged - - virtual const viewAspectList& getViewAspects(); - virtual void appendViewAspect( const viewAspect& ); - virtual void updateViewAspects( const viewAspectList& ); - virtual void clearViewAspects(); - - QColor backgroundColor() const; - void setBackgroundColor( const QColor& ); - - //! returns true if 3d Trihedron in viewer was created - bool trihedronActivated() const { return !myTrihedron.IsNull(); } - - void toggleTrihedron(); - bool isTrihedronVisible() const; - virtual void setTrihedronShown( const bool ); - - double trihedronSize() const; - virtual void setTrihedronSize( const double ); - -public slots: - void onClearViewAspects(); - -public: - Handle(V3d_Viewer) getViewer3d() const { return myV3dViewer;} - Handle(V3d_Viewer) getCollector3d() const { return myV3dCollector; } - Handle(AIS_InteractiveContext) getAISContext() const { return myAISContext; } - Handle(AIS_Trihedron) getTrihedron() const { return myTrihedron; } - - void enableSelection(bool isEnabled); - bool isSelectionEnabled() const - { return mySelectionEnabled; } - - void enableMultiselection(bool isEnable); - bool isMultiSelectionEnabled() const - { return myMultiSelectionEnabled; } - - int getSelectionCount() const - { return (!myAISContext.IsNull())? myAISContext->NbSelected():0; } - - /* Selection management */ - bool highlight( const Handle(AIS_InteractiveObject)&, bool, bool=true ); - bool unHighlightAll( bool=true ); - bool isInViewer( const Handle(AIS_InteractiveObject)&, bool=false ); - bool isVisible( const Handle(AIS_InteractiveObject)& ); - - void setColor( const Handle(AIS_InteractiveObject)&, const QColor&, bool=true ); - void switchRepresentation( const Handle(AIS_InteractiveObject)&, int, bool=true ); - void setTransparency( const Handle(AIS_InteractiveObject)&, float, bool=true ); - void setIsos( const int u, const int v ); // number of isolines - void isos( int& u, int& v ) const; - -signals: - void selectionChanged(); - -protected: - void initView( OCCViewer_ViewWindow* view ); - -protected slots: - void onMousePress(SUIT_ViewWindow*, QMouseEvent*); - void onMouseMove(SUIT_ViewWindow*, QMouseEvent*); - void onMouseRelease(SUIT_ViewWindow*, QMouseEvent*); - - void onDumpView(); - void onShowToolbar(); - void onChangeBgColor(); - -private: - Handle(V3d_Viewer) myV3dViewer; - Handle(V3d_Viewer) myV3dCollector; - - Handle(AIS_Trihedron) myTrihedron; - Handle(AIS_InteractiveContext) myAISContext; - - viewAspectList myViewAspects; - - bool mySelectionEnabled; - bool myMultiSelectionEnabled; - - QColor myBgColor; - QPoint myStartPnt, myEndPnt; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/OCCViewer/OCCViewer_ViewPort.cxx b/src/OCCViewer/OCCViewer_ViewPort.cxx deleted file mode 100755 index bd5ace4c6..000000000 --- a/src/OCCViewer/OCCViewer_ViewPort.cxx +++ /dev/null @@ -1,481 +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 -// - -#if !defined WNT -#define QT_CLEAN_NAMESPACE /* avoid definition of INT32 and INT8 */ -#endif - -#include "OCCViewer_ViewPort.h" - -#include "SUIT_Session.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - -#if !defined WNT -#include -#include -#include -#include -#include -#undef QT_CLEAN_NAMESPACE -#include -#include - -struct CMapEntry -{ - CMapEntry(); - ~CMapEntry(); - Colormap cmap; - bool alloc; - XStandardColormap scmap; -}; - -/*! - Constructor -*/ -CMapEntry::CMapEntry() -{ - cmap = 0; - alloc = false; - scmap.colormap = 0; -} - -/*! - Destructor -*/ -CMapEntry::~CMapEntry() -{ - if ( alloc ) - XFreeColormap( QPaintDevice::x11AppDisplay(), cmap ); -} - -static QIntDict *cmap_dict = 0; -static bool mesa_gl = false; - -static void cleanup_cmaps() -{ - if ( !cmap_dict ) - return; - cmap_dict->setAutoDelete( true ); - delete cmap_dict; - cmap_dict = 0; -} - -static Colormap choose_cmap( Display *dpy, XVisualInfo *vi ) -{ - if ( !cmap_dict ) - { - cmap_dict = new QIntDict; - const char *v = glXQueryServerString( dpy, vi->screen, GLX_VERSION ); - mesa_gl = strstr( v,"Mesa" ) != 0; - qAddPostRoutine( cleanup_cmaps ); - } - - CMapEntry *x = cmap_dict->find( (long)vi->visualid ); - if ( x ) // found colormap for visual - return x->cmap; - - x = new CMapEntry(); - - XStandardColormap *c; - int n, i; - -#ifdef DEBUG - cout << "Choosing cmap for vID = " << vi->visualid << endl; -#endif - - if ( vi->visualid == XVisualIDFromVisual( (Visual*)QPaintDevice::x11AppVisual() ) ) - { -#ifdef DEBUG - cout << "Using x11AppColormap" << endl; -#endif - return QPaintDevice::x11AppColormap(); - } - - if ( mesa_gl ) - { - Atom hp_cmaps = XInternAtom( dpy, "_HP_RGB_SMOOTH_MAP_LIST", true ); - if ( hp_cmaps && vi->visual->c_class == TrueColor && vi->depth == 8 ) - { - if ( XGetRGBColormaps( dpy, RootWindow( dpy, vi->screen ), &c, &n, hp_cmaps ) ) - { - i = 0; - while ( i < n && x->cmap == 0 ) - { - if ( c[i].visualid == vi->visual->visualid ) - { - x->cmap = c[i].colormap; - x->scmap = c[i]; - } - i++; - } - XFree( (char*)c ); - } - } - } -#if !defined( _OS_SOLARIS_ ) - if ( !x->cmap ) - { - if ( XmuLookupStandardColormap( dpy, vi->screen, vi->visualid, vi->depth, XA_RGB_DEFAULT_MAP, false, true ) ) - { - if ( XGetRGBColormaps( dpy, RootWindow( dpy, vi->screen ), &c, &n, XA_RGB_DEFAULT_MAP ) ) - { - i = 0; - while ( i < n && x->cmap == 0 ) - { - if ( c[i].visualid == vi->visualid ) - { - x->cmap = c[i].colormap; - x->scmap = c[i]; - } - i++; - } - XFree( (char *)c ); - } - } - } -#endif - if ( !x->cmap ) - { - // no shared cmap found - x->cmap = XCreateColormap( dpy, RootWindow( dpy, vi->screen ), vi->visual, AllocNone ); - x->alloc = true; - } - - cmap_dict->insert( (long)vi->visualid, x ); // associate cmap with visualid - return x->cmap; -} -#endif - - -/*! - Constructor -*/ -OCCViewer_ViewPort::OCCViewer_ViewPort( QWidget* parent ) -: QWidget( parent, 0, WRepaintNoErase | WResizeNoErase ) -{ - initialize(); -} - -/*! - Destructor -*/ -OCCViewer_ViewPort::~OCCViewer_ViewPort() -{ - cleanup(); -} - -/*! - Initializes viewport. [ private ] -*/ -void OCCViewer_ViewPort::initialize() -{ - myPopupActions.setAutoDelete( true ); - myPaintersRedrawing = false; - myEnableSketching = false; - myEnableTransform = true; - - setMouseTracking( true ); - setBackgroundMode( NoBackground ); - // set focus policy to threat QContextMenuEvent from keyboard - setFocusPolicy( StrongFocus ); -} - -/*! - Cleans up the viewport. [ private ] -*/ -void OCCViewer_ViewPort::cleanup() -{ -} - -/*! - Selects visual ID for OpenGL window ( X11 specific ). [ protected ] -*/ -void OCCViewer_ViewPort::selectVisualId() -{ -#if !defined WNT - XVisualInfo* pVisualInfo; - if ( x11Display() ) - { - /* Initialization with the default VisualID */ - Visual *v = DefaultVisual( x11Display(), DefaultScreen( x11Display() ) ); - int visualID = XVisualIDFromVisual( v ); - - /* Here we use the settings from Optimizer_ViewInfo::TxglCreateWindow() */ - int visualAttr[] = { GLX_RGBA, GLX_DEPTH_SIZE, 1, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, GLX_DOUBLEBUFFER, None }; - - pVisualInfo = ::glXChooseVisual( x11Display(), DefaultScreen( x11Display() ), visualAttr ); - - if ( isVisible() ) - hide(); - - XSetWindowAttributes a; - - a.colormap = choose_cmap( x11Display(), pVisualInfo ); /* find best colormap */ - a.background_pixel = backgroundColor().pixel(); - a.border_pixel = black.pixel(); - Window p = RootWindow( x11Display(), DefaultScreen( x11Display() ) ); - if ( parentWidget() ) - p = parentWidget()->winId(); - - Window w; - /* if ( type == Type2D ) // creating simple X window for 2d - { - unsigned long xbackground = - BlackPixel( x11Display(), DefaultScreen( x11Display() ) ); - unsigned long xforeground = - WhitePixel( x11Display(), DefaultScreen( x11Display() ) ); - - w = XCreateSimpleWindow ( x11Display(), p, x(), y(), width(), - height(), 0, xforeground, xbackground ); - } - else if ( type == Type3D ) - { - w = XCreateWindow( x11Display(), p, x(), y(), width(), height(), - 0, pVisualInfo->depth, InputOutput, pVisualInfo->visual, - CWBackPixel | CWBorderPixel | CWColormap, &a ); - } - else - return;*/ - w = XCreateWindow( x11Display(), p, x(), y(), width(), height(), - 0, pVisualInfo->depth, InputOutput, pVisualInfo->visual, - CWBackPixel | CWBorderPixel | CWColormap, &a ); - - Window *cmw; - Window *cmwret; - int count; - if ( XGetWMColormapWindows( x11Display(), topLevelWidget()->winId(), &cmwret, &count ) ) - { - cmw = new Window[count+1]; - memcpy( (char*)cmw, (char*)cmwret, sizeof(Window) * count ); - XFree( (char*)cmwret ); - int i; - - for ( i = 0; i < count; i++ ) - { - if ( cmw[i] == winId() ) /* replace old window */ - { - cmw[i] = w; - break; - } - } - - if ( i >= count ) /* append new window */ - cmw[count++] = w; - } - else - { - count = 1; - cmw = new Window[count]; - cmw[0] = w; - } - - /* Creating new window (with good VisualID) for this widget */ - create(w); - XSetWMColormapWindows( x11Display(), topLevelWidget()->winId(), cmw, count ); - delete[] cmw; - - if ( isVisible() ) - show(); - - if ( pVisualInfo ) - { - XFree( (char *)pVisualInfo ); - } - XFlush( x11Display() ); - } -#endif -} - -/*! - Sets the background 'color'. [ virtual ] -*/ -void OCCViewer_ViewPort::setBackgroundColor( const QColor& color ) -{ - QPalette pal = palette(); - pal.setColor( QColorGroup::Background, color ); - setPalette( pal ); - repaint(); - emit vpChangeBGColor( color ); -} - -/*! - Returns the background color. [ virtual ] -*/ -QColor OCCViewer_ViewPort::backgroundColor() const -{ - return palette().active().background(); -} - -/*! - Returns 'true' if sketching is enabled in this viewport. [ public ] -*/ -bool OCCViewer_ViewPort::isSketchingEnabled() const -{ - return myEnableSketching; -} - -/*! - Enables / disables sketching [ public ] -*/ -void OCCViewer_ViewPort::setSketchingEnabled( bool enable ) -{ - myEnableSketching = enable; -} - -/*! - Returns 'true' if transformations ( rotation, zoom etc. ) - are enabled in this viewport. [ public ] -*/ -bool OCCViewer_ViewPort::isTransformEnabled() const -{ - return myEnableTransform; -} - -/*! - Enables / disables transformations. [ public ] -*/ -void OCCViewer_ViewPort::setTransformEnabled( bool enable ) -{ - myEnableTransform = enable; -} - -/*! - Emits 'mouseEvent' signal. [ virtual protected ] -*/ -void OCCViewer_ViewPort::mousePressEvent( QMouseEvent *e ) -{ - emit vpMouseEvent( e ); -} - -/*! - Emits 'mouseEvent' signal. [ virtual protected ] -*/ -void OCCViewer_ViewPort::mouseMoveEvent( QMouseEvent* e ) -{ - emit vpMouseEvent( e ); -} - -/*! - Emits 'mouseEvent' signal. [ virtual protected ] -*/ -void OCCViewer_ViewPort::mouseReleaseEvent( QMouseEvent *e ) -{ - emit vpMouseEvent( e ); -} - -/*! - Emits 'mouseEvent' signal. [ virtual protected ] -*/ -void OCCViewer_ViewPort::mouseDoubleClickEvent( QMouseEvent *e ) -{ - emit vpMouseEvent( e ); -} - -/*! - Emits 'keyEvent' signal. [ virtual protected ] -*/ -void OCCViewer_ViewPort::keyPressEvent( QKeyEvent *e ) -{ - emit vpKeyEvent( e ); -} - -/*! - Emits 'keyEvent' signal. [ virtual protected ] -*/ -void OCCViewer_ViewPort::keyReleaseEvent( QKeyEvent *e ) -{ - emit vpKeyEvent( e ); -} - -/*! - Repaints the viewport. [ virtual protected ] -*/ -void OCCViewer_ViewPort::paintEvent( QPaintEvent* ) -{ - if ( myPaintersRedrawing ) - { - QPainter p( this ); - emit vpDrawExternal( &p ); - myPaintersRedrawing = false; - } -} - -/*! - Forces to redraw the viewport by an external painter. [ public ] -*/ -void OCCViewer_ViewPort::redrawPainters() -{ - myPaintersRedrawing = true; - repaint(); -} - -/*! - Updates this view. Does nothing by default. [ virtual public ] -*/ -void OCCViewer_ViewPort::onUpdate() -{ -} - -/*! - Creates the popup. [ virtual protected ] -*/ -/*void OCCViewer_ViewPort::onCreatePopup( QPopupMenu* popup ) -{ - if ( popup ) - { - QtxAction* a = new QtxAction( "", tr( "MEN_VP_CHANGEBGR" ), 0, this ); - a->setStatusTip( tr( "PRP_VP_CHANGEBGR" ) ); - connect( a, SIGNAL( activated() ), SLOT( onChangeBgColor())); - myPopupActions.append( a ); - a->addTo( popup ); - } -}*/ - -/*! - Destroys the popup. [ virtual protected ] -*/ -/*void OCCViewer_ViewPort::onDestroyPopup( QPopupMenu* popup ) -{ - if ( popup ) - { - for ( QtxAction* a = myPopupActions.first(); a; a = myPopupActions.next() ) - a->removeFrom( popup ); - myPopupActions.clear(); - } -}*/ - -/*! - Sets the background color with color selection dialog. [ virtual protected slot ] -*/ -void OCCViewer_ViewPort::onChangeBgColor() -{ - QColor selColor = QColorDialog::getColor ( backgroundColor(), this ); - if ( selColor.isValid() ) - setBackgroundColor( selColor ); -} diff --git a/src/OCCViewer/OCCViewer_ViewPort.h b/src/OCCViewer/OCCViewer_ViewPort.h deleted file mode 100755 index b4742b293..000000000 --- a/src/OCCViewer/OCCViewer_ViewPort.h +++ /dev/null @@ -1,122 +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 -// -#ifndef OCCVIEWER_VIEWPORT_H -#define OCCVIEWER_VIEWPORT_H - -#include "OCCViewer.h" - -#include "QtxAction.h" - -#include -#include -#include - -#include - -class QRect; -class QCursor; -class QPainter; -class OCCViewer_ViewSketcher; -class OCCViewer_ViewTransformer; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*! - \class OCCViewer_ViewPort - Visualisation canvas of SUIT-based application -*/ -class OCCVIEWER_EXPORT OCCViewer_ViewPort : public QWidget -{ - Q_OBJECT - - friend class OCCViewer_ViewSketcher; - -public: - OCCViewer_ViewPort( QWidget* parent ); - virtual ~OCCViewer_ViewPort(); - -public: - void setSketchingEnabled( bool ); - bool isSketchingEnabled() const; - void setTransformEnabled( bool ); - bool isTransformEnabled() const; - - virtual QColor backgroundColor() const; - virtual void setBackgroundColor( const QColor& ); - - void redrawPainters(); - - virtual void onUpdate(); - -protected: -// enum ViewType { Type2D, Type3D }; - void selectVisualId(); - -// EVENTS - virtual void paintEvent( QPaintEvent *); - virtual void mouseMoveEvent( QMouseEvent *); - virtual void mouseReleaseEvent( QMouseEvent *); - virtual void mousePressEvent( QMouseEvent *); - virtual void mouseDoubleClickEvent( QMouseEvent *); - virtual void keyPressEvent( QKeyEvent *); - virtual void keyReleaseEvent( QKeyEvent *); - -// TO BE REDEFINED - virtual void reset() = 0; - virtual void pan( int, int ) = 0; - virtual void setCenter( int, int ) = 0; - virtual void fitRect( const QRect& ) = 0; - virtual void zoom( int, int, int, int ) = 0; - virtual void fitAll( bool keepScale = false, bool withZ = true, bool upd = true ) = 0; - -// POPUP -// void onCreatePopup( QPopupMenu* ); -// void onDestroyPopup( QPopupMenu* ); - -protected slots: - virtual void onChangeBgColor(); - -signals: - void vpKeyEvent( QKeyEvent* ); - void vpMouseEvent( QMouseEvent* ); - void vpDrawExternal( QPainter* ); - void vpChangeBGColor( QColor ); - -private: - void initialize(); - void cleanup(); - -protected: - Handle(Aspect_Window) myWindow; - bool myEnableSketching; - bool myEnableTransform; - bool myPaintersRedrawing; /* set to draw externally */ - QPtrList myPopupActions; - -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 deleted file mode 100755 index 50930efbc..000000000 --- a/src/OCCViewer/OCCViewer_ViewPort3d.cxx +++ /dev/null @@ -1,462 +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 "OCCViewer_ViewPort3d.h" - -#include "OCCViewer_VService.h" - -#include -#include -#include - -#include -#include -#include - -#if defined WNT -#include -#else -#include -#endif - -/*! - Constructor -*/ -OCCViewer_ViewPort3d::OCCViewer_ViewPort3d( QWidget* parent, const Handle( V3d_Viewer)& viewer, V3d_TypeOfView type ) -: OCCViewer_ViewPort( parent ), -myScale( 1.0 ), -myDegenerated( true ), -myAnimate( false ) -{ - selectVisualId(); - - if ( type == V3d_ORTHOGRAPHIC ) { - myOrthoView = new V3d_OrthographicView( viewer ); - myActiveView = myOrthoView; - myPerspView = 0; - } else { - myPerspView = new V3d_PerspectiveView( viewer ); - myActiveView = myPerspView; - } - if ( myDegenerated ) - activeView()->SetDegenerateModeOn(); -} - -/*! - Destructor -*/ -OCCViewer_ViewPort3d::~OCCViewer_ViewPort3d() -{ - Handle(V3d_View) aView = activeView(); - if (!aView.IsNull()) - aView->Remove(); -} - -/*! - Activates the desired 'type' of view in the viewer - ( view of 'type' is created if it doesn't exist ). [ public ] -*/ -/*void OCCViewer_ViewPort3d::setActive( V3d_TypeOfView type ) -{ - if ( activeView().IsNull() ) - return; - - if ( activeView()->Type() != type ) - { - if ( type == V3d_ORTHOGRAPHIC ) - setView( myOrthoView ); - if ( type == V3d_PERSPECTIVE ) - setView( myPerspView ); - } -}*/ - -/*! - Maps CasCade 'view' to this viewport. [ private ] -*/ -bool OCCViewer_ViewPort3d::mapView( const Handle(V3d_View)& view ) -{ - if ( !setWindow( view ) ) - return false; - - if ( !mapped( view ) ) - { - view->SetWindow( myWindow ); - if ( view != activeView() ) - view->View()->Deactivate(); - } - return true; -} - -/*! - Sets new CASCADE view on viewport. Returns the previous active view. [ public ] -*/ -Handle( V3d_View ) OCCViewer_ViewPort3d::setView( const Handle( V3d_View )& view ) -{ - /* map the new view */ - if ( view == activeView() || !mapView( view ) ) - return activeView(); - - /* activate the new view*/ - Handle( V3d_View ) oldView = activeView(); - if ( !oldView.IsNull() ) - { - oldView->View()->Deactivate(); - view->SetBackgroundColor( oldView->BackgroundColor() ); - } - if ( myDegenerated ) - view->SetDegenerateModeOn(); - else - view->SetDegenerateModeOff(); - - view->View()->Activate(); - activeView() = view; - return oldView; -} - -/*! - Returns CasCade 3D view. [ public ] -*/ -Handle(V3d_View) OCCViewer_ViewPort3d::getView() const -{ - return activeView(); -} - -/*! - Returns CasCade 3D viewer [ public ] -*/ -Handle(V3d_Viewer) OCCViewer_ViewPort3d::getViewer() const -{ - Handle(V3d_Viewer) viewer; - if ( !activeView().IsNull() ) - viewer = activeView()->Viewer(); - return viewer; -} - -/*! - Syncronizes visual state of this viewport with 'ref' - ( scale, projection, eye etc ) Returns 'true' if copied OK, - 'false' otherwise. [ virtual public ] -*/ -bool OCCViewer_ViewPort3d::syncronize( const OCCViewer_ViewPort3d* ref ) -{ - OCCViewer_ViewPort3d* ref3d = (OCCViewer_ViewPort3d*)ref; - Handle(V3d_View) refView = ref3d->getView(); - Handle(V3d_View) tgtView = getView(); - - /* Syncronize view types */ -/* if ( tgtView->Type() != refView->Type() ) - { - setActive( refView->Type() ); - tgtView = getView(); - }*/ - - /* The following params are copied: - - view type( ortho/persp ) - - position of view point - - orientation of high point - - position of the eye - - projection vector - - view center ( 2D ) - - view twist - - view scale - */ - - /* we'll update after setting all params */ - tgtView->SetImmediateUpdate( Standard_False ); - - /* perspective */ - if ( refView->Type() == V3d_PERSPECTIVE ) - tgtView->SetFocale( refView->Focale() ); - - /* copy params */ - Standard_Real x, y, z; - refView->At( x, y, z ); tgtView->SetAt( x, y, z ); - refView->Up( x, y, z ); tgtView->SetUp( x, y, z ); - refView->Eye( x, y, z ); tgtView->SetEye( x, y, z ); - refView->Proj( x, y, z ); tgtView->SetProj( x, y, z ); - refView->Center( x, y ); tgtView->SetCenter( x, y ); - tgtView->SetScale( refView->Scale() ); - tgtView->SetTwist( refView->Twist() ); - - /* update */ - tgtView->Update(); - tgtView->SetImmediateUpdate( Standard_True ); - return true; -} - -/*! - Returns Z-size of this view. [ public ] -*/ -double OCCViewer_ViewPort3d::getZSize() const -{ - if ( !activeView().IsNull() ) - return activeView()->ZSize(); - return 0; -} - -/*! - Sets Z-size of this view ( for both orthographic and perspective ). [ public ] -*/ -void OCCViewer_ViewPort3d::setZSize( double zsize ) -{ - myActiveView->SetZSize( zsize ); -/* if ( !myOrthoView.IsNull() ) - myOrthoView->SetZSize( zsize ); - if ( !myPerspView.IsNull() ) - myPerspView->SetZSize( zsize );*/ -} - -/*! - Returns the background color [ virtual public ] -*/ -QColor OCCViewer_ViewPort3d::backgroundColor() const -{ - if ( !activeView().IsNull() ) - { - Standard_Real aRed, aGreen, aBlue; - activeView()->BackgroundColor( Quantity_TOC_RGB, aRed, aGreen, aBlue ); - int red = (int) (aRed * 255); - int green = (int) (aGreen * 255); - int blue = (int) (aBlue * 255); - return QColor( red, green, blue ); - } - return OCCViewer_ViewPort::backgroundColor(); -} - -/*! - Sets the background color [ virtual public ] -*/ -void OCCViewer_ViewPort3d::setBackgroundColor( const QColor& color ) -{ - if ( !activeView().IsNull() ) - { - activeView()->SetBackgroundColor( Quantity_TOC_RGB, color.red()/255., - color.green()/255., color.blue()/255.); - activeView()->Update(); - emit vpChangeBGColor( color ); - } -} - -/*! - Set animation mode - \param theDegenerated - degenerated mode -*/ -void OCCViewer_ViewPort3d::setAnimationMode(bool theDegenerated) -{ - if ( !activeView().IsNull() ) - { - myAnimate = theDegenerated; - activeView()->SetAnimationMode(true, theDegenerated); - } -} - -/*! - Updates the active viewport. [ virtual public ] -*/ -void OCCViewer_ViewPort3d::onUpdate() -{ - if ( !activeView().IsNull() ) - activeView()->Update(); -} - -/*! - Called at 'window fit' transformation. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::fitRect( const QRect& rect ) -{ - if ( !activeView().IsNull() ) - activeView()->WindowFit( rect.left(), rect.top(), rect.right(), rect.bottom() ); -} - -/*! - Called at 'zoom' transformation. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::zoom( int x0, int y0, int x, int y ) -{ - if ( !activeView().IsNull() ) - activeView()->Zoom( x0, y0, x, y ); -} - -/*! - Centers the viewport. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::setCenter( int x, int y ) -{ - if ( !activeView().IsNull() ) - activeView()->Place( x, y, myScale ); -} - -/*! - Called at 'pan' transformation. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::pan( int dx, int dy ) -{ - if ( !activeView().IsNull() ) - activeView()->Pan( dx, dy, 1.0 ); -} - -/*! - Inits 'rotation' transformation. [ protected ] -*/ -void OCCViewer_ViewPort3d::startRotation( int x, int y ) -{ - if ( !activeView().IsNull() ) - { - myDegenerated = activeView()->DegenerateModeIsOn(); - activeView()->SetDegenerateModeOn(); - if (myAnimate) activeView()->SetAnimationModeOn(); - activeView()->StartRotation( x, y, 0.45 ); - } -} - -/*! - Rotates the viewport. [ protected ] -*/ -void OCCViewer_ViewPort3d::rotate( int x, int y ) -{ - if ( !activeView().IsNull() ) - activeView()->Rotation( x, y ); -// setZSize( getZSize() ); -} - -/*! - Resets the viewport after 'rotation'. [ protected ] -*/ -void OCCViewer_ViewPort3d::endRotation() -{ - if ( !activeView().IsNull() ) - { - if (myAnimate) activeView()->SetAnimationModeOff(); - if ( !myDegenerated ) - activeView()->SetDegenerateModeOff(); - activeView()->ZFitAll(1.); - activeView()->SetZSize(0.); - activeView()->Update(); - } -} - -/*! - Repaints the viewport. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::paintEvent( QPaintEvent* e ) -{ -#ifndef WNT - /* X11 : map before show doesn't work */ - if ( !mapped( activeView() ) ) - mapView( activeView() ); -#endif - if ( !myWindow.IsNull() ) - { - QApplication::syncX(); - QRect rc = e->rect(); - if ( !myPaintersRedrawing ) - activeView()->Redraw( rc.x(), rc.y(), rc.width(), rc.height() ); - } - OCCViewer_ViewPort::paintEvent( e ); -} - -/*! - Resizes the viewport. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::resizeEvent( QResizeEvent* e ) -{ -#ifdef WNT - /* Win32 : map before first show to avoid flicker */ - if ( !mapped( activeView() ) ) - mapView( activeView() ); -#endif - QApplication::syncX(); - if ( !activeView().IsNull() ) - activeView()->MustBeResized(); -} - -/*! - Fits all objects in view. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::fitAll( bool keepScale, bool withZ, bool upd ) -{ - if ( activeView().IsNull() ) - return; - - - if ( keepScale ) - myScale = activeView()->Scale(); - - Standard_Real margin = 0.01; - activeView()->FitAll( margin, withZ, upd ); - activeView()->SetZSize(0.); -} - -/*! - Resets the view. [ virtual protected ] -*/ -void OCCViewer_ViewPort3d::reset() -{ -// double zsize = getZSize(); - if ( !activeView().IsNull() ) - activeView()->Reset(); -// setZSize( zsize ); -} - -/*! - Passed the handle of native window of the component to CASCADE view. [ private ] -*/ -bool OCCViewer_ViewPort3d::setWindow( const Handle(V3d_View)& view ) -{ - if ( !myWindow.IsNull() ) - return true; - - if ( view.IsNull() ) - return false; - - int hwnd = (int)winId(); - if ( !hwnd ) - return false; - - /* set this widget as the drawing window */ - short lo = (short)hwnd; - short hi = (short)( hwnd >> 16 ); - OCCViewer_VService::SetWindow( view, (int)hi, (int)lo, Xw_WQ_SAMEQUALITY ); - myWindow = view->Window(); - return !myWindow.IsNull(); -} - -/*! - Returns the current active view. [ private ] -*/ -Handle(V3d_View) OCCViewer_ViewPort3d::activeView() const -{ - return myActiveView; -} - -/*! - Returns the current inactive view [ private ] -*/ -/*Handle(V3d_View) OCCViewer_ViewPort3d::inactiveView() const -{ - return ( activeView() == myOrthoView ? myPerspView : myOrthoView ); -}*/ - -/*! - Returns 'true' if the given view is mapped to window. [ private ] -*/ -bool OCCViewer_ViewPort3d::mapped( const Handle(V3d_View)& view ) const -{ - return ( !view.IsNull() && view->View()->IsDefined() ); -} diff --git a/src/OCCViewer/OCCViewer_ViewPort3d.h b/src/OCCViewer/OCCViewer_ViewPort3d.h deleted file mode 100755 index 5f923003a..000000000 --- a/src/OCCViewer/OCCViewer_ViewPort3d.h +++ /dev/null @@ -1,100 +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 -// -#ifndef OCCVIEWER_VIEWPORT3D_H -#define OCCVIEWER_VIEWPORT3D_H - -#include "OCCViewer_ViewPort.h" - -#include - -#include -#include - -class QRect; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -class OCCVIEWER_EXPORT OCCViewer_ViewPort3d: public OCCViewer_ViewPort -{ - Q_OBJECT - - friend class OCCViewer_ViewTransformer; - -public: - OCCViewer_ViewPort3d( QWidget*, const Handle(V3d_Viewer)&, V3d_TypeOfView = V3d_ORTHOGRAPHIC ); - virtual ~OCCViewer_ViewPort3d(); - -public: - Handle(V3d_View) getView() const; - Handle(V3d_View) setView( const Handle(V3d_View)& ); - Handle(V3d_Viewer) getViewer() const; - - void setAnimationMode(bool theDegenerated); - - virtual void setBackgroundColor( const QColor& color); - virtual QColor backgroundColor() const; - -// void setActive( V3d_TypeOfView ); - virtual bool syncronize( const OCCViewer_ViewPort3d* ); - - double getZSize() const; - void setZSize( double ); - - virtual void onUpdate(); - - // TRANSFORMATIONS - virtual void reset(); - virtual void pan( int , int ); - virtual void setCenter( int , int ); - virtual void fitRect( const QRect& ); - 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 endRotation(); - -protected: - // EVENTS - virtual void paintEvent( QPaintEvent* ); - virtual void resizeEvent( QResizeEvent* ); - -private: - Handle(V3d_View) activeView() const; - Handle(V3d_View) inactiveView() const; - bool mapView( const Handle(V3d_View)& ); - bool setWindow( const Handle(V3d_View)& ); - bool mapped( const Handle(V3d_View)& ) const; - -private: - Handle(V3d_View) myOrthoView; - Handle(V3d_View) myPerspView; - Handle(V3d_View) myActiveView; - bool myDegenerated; - bool myAnimate; - double myScale; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx deleted file mode 100755 index cef3b10d8..000000000 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ /dev/null @@ -1,1090 +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 -// -// OCCViewer_ViewWindow.cxx: implementation of the OCCViewer_ViewWindow class. - - -#include "OCCViewer_ViewWindow.h" -#include "OCCViewer_ViewModel.h" -#include "OCCViewer_ViewPort3d.h" -#include "OCCViewer_CreateRestoreViewDlg.h" -#include "OCCViewer_ClippingDlg.h" - -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" -#include "SUIT_ToolButton.h" - -#include "SUIT_Tools.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_MessageBox.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#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* imageRotateCursor[] = { -"32 32 3 1", -". c None", -"a c #000000", -"# c #ffffff", -"................................", -"................................", -"................................", -"................................", -"........#.......................", -".......#.a......................", -"......#######...................", -".......#aaaaa#####..............", -"........#..##.a#aa##........##..", -".........a#.aa..#..a#.....##.aa.", -".........#.a.....#...#..##.aa...", -".........#a.......#..###.aa.....", -"........#.a.......#a..#aa.......", -"........#a.........#..#a........", -"........#a.........#a.#a........", -"........#a.........#a.#a........", -"........#a.........#a.#a........", -".........#.........#a#.a........", -"........##a........#a#a.........", -"......##.a#.......#.#.a.........", -"....##.aa..##.....##.a..........", -"..##.aa.....a#####.aa...........", -"...aa.........aaa#a.............", -"................#.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 - \param theDesktop - main window of application - \param theModel - OCC 3D viewer -*/ -OCCViewer_ViewWindow::OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel) -: SUIT_ViewWindow(theDesktop) -{ - myModel = theModel; - myRestoreFlag = 0; - myEnableDrawMode = false; - updateEnabledDrawMode(); - myClippingDlg = 0; -} - -/*! - Initialization of view window -*/ -void OCCViewer_ViewWindow::initLayout() -{ - myViewPort = new OCCViewer_ViewPort3d( this, myModel->getViewer3d(), V3d_ORTHOGRAPHIC ); - myViewPort->setBackgroundColor(black); - myViewPort->installEventFilter(this); - setCentralWidget(myViewPort); - myOperation = NOTHING; - - setTransformRequested ( NOTHING ); - setTransformInProcess ( false ); - - myToolBar = new QToolBar(this); - myToolBar->setCloseMode(QDockWindow::Undocked); - myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); - - createActions(); - createToolBar(); -} - -/*! - \return type of operation by states of mouse and keyboard buttons - \param theEvent - mouse event -*/ -OCCViewer_ViewWindow::OperationType OCCViewer_ViewWindow::getButtonState(QMouseEvent* theEvent) -{ - OperationType aOp = NOTHING; - if( (theEvent->state() == SUIT_ViewModel::myStateMap[SUIT_ViewModel::ZOOM]) && - (theEvent->button() == SUIT_ViewModel::myButtonMap[SUIT_ViewModel::ZOOM]) ) - aOp = ZOOMVIEW; - else if( (theEvent->state() == SUIT_ViewModel::myStateMap[SUIT_ViewModel::PAN]) && - (theEvent->button() == SUIT_ViewModel::myButtonMap[SUIT_ViewModel::PAN]) ) - aOp = PANVIEW; - else if( (theEvent->state() == SUIT_ViewModel::myStateMap[SUIT_ViewModel::ROTATE]) && - (theEvent->button() == SUIT_ViewModel::myButtonMap[SUIT_ViewModel::ROTATE]) ) - aOp = ROTATE; - - return aOp; -} - -/*! - Custom event handler -*/ -bool OCCViewer_ViewWindow::eventFilter(QObject* watched, QEvent* e) -{ - if ( watched == myViewPort ) { - int aType = e->type(); - switch(aType) { - case QEvent::MouseButtonPress: - vpMousePressEvent((QMouseEvent*) e); - return true; - - case QEvent::MouseButtonRelease: - vpMouseReleaseEvent((QMouseEvent*) e); - return true; - - case QEvent::MouseMove: - vpMouseMoveEvent((QMouseEvent*) e); - return true; - - case QEvent::MouseButtonDblClick: - emit mouseDoubleClicked(this, (QMouseEvent*)e); - return true; - - case QEvent::Wheel: - { - QWheelEvent* aEvent = (QWheelEvent*) e; - double aDelta = aEvent->delta(); - double aScale = (aDelta < 0) ? 100./(-aDelta) : aDelta/100.; - myViewPort->getView()->SetZoom(aScale); - } - return true; - - case QEvent::ContextMenu: - { - QContextMenuEvent * aEvent = (QContextMenuEvent*)e; - if ( aEvent->reason() != QContextMenuEvent::Mouse ) - emit contextMenuRequested( aEvent ); - } - return true; - - default: - break; - } - } - return SUIT_ViewWindow::eventFilter(watched, e); -} - -/*! - Updates state of enable draw mode state -*/ -void OCCViewer_ViewWindow::updateEnabledDrawMode() -{ - if ( myModel ) - myEnableDrawMode = myModel->isSelectionEnabled() && myModel->isMultiSelectionEnabled(); -} - -/*! - Handler of mouse press event -*/ -void OCCViewer_ViewWindow::vpMousePressEvent(QMouseEvent* theEvent) -{ - myStartX = theEvent->x(); - myStartY = theEvent->y(); - switch ( myOperation ) { - case WINDOWFIT: - if ( theEvent->button() == Qt::LeftButton ) - emit vpTransformationStarted ( WINDOWFIT ); - break; - - case PANGLOBAL: - if ( theEvent->button() == Qt::LeftButton ) - emit vpTransformationStarted ( PANGLOBAL ); - break; - - case ZOOMVIEW: - if ( theEvent->button() == Qt::LeftButton ) - emit vpTransformationStarted ( ZOOMVIEW ); - break; - - case PANVIEW: - if ( theEvent->button() == Qt::LeftButton ) - emit vpTransformationStarted ( PANVIEW ); - break; - - case ROTATE: - if ( theEvent->button() == Qt::LeftButton ) { - myViewPort->startRotation(myStartX, myStartY); - emit vpTransformationStarted ( ROTATE ); - } - break; - - default: - /* Try to activate a transformation */ - switch ( getButtonState(theEvent) ) { - case ZOOMVIEW: - activateZoom(); - break; - case PANVIEW: - activatePanning(); - break; - case ROTATE: - activateRotation(); - myViewPort->startRotation(myStartX, myStartY); - break; - default: - emit mousePressed(this, theEvent); - break; - } - /* notify that we start a transformation */ - if ( transformRequested() ) - emit vpTransformationStarted ( myOperation ); - } - if ( transformRequested() ) - setTransformInProcess( true ); -} - - -/*! - Starts zoom operation, sets corresponding cursor -*/ -void OCCViewer_ViewWindow::activateZoom() -{ - if ( !transformRequested() && !myCursorIsHand ) - myCursor = cursor(); /* save old cursor */ - - if ( myOperation != ZOOMVIEW ) { - QPixmap zoomPixmap (imageZoomCursor); - QCursor zoomCursor (zoomPixmap); - setTransformRequested ( ZOOMVIEW ); - setCursor( zoomCursor ); - } -} - - -/*! - Starts panning operation, sets corresponding cursor -*/ -void OCCViewer_ViewWindow::activatePanning() -{ - if ( !transformRequested() && !myCursorIsHand ) - myCursor = cursor(); // save old cursor - - if ( myOperation != PANVIEW ) { - QCursor panCursor (Qt::SizeAllCursor); - setTransformRequested ( PANVIEW ); - setCursor( panCursor ); - } -} - -/*! - Starts rotation operation, sets corresponding cursor -*/ -void OCCViewer_ViewWindow::activateRotation() -{ - if ( !transformRequested() && !myCursorIsHand ) - myCursor = cursor(); // save old cursor - - if ( myOperation != ROTATE ) { - QPixmap rotatePixmap (imageRotateCursor); - QCursor rotCursor (rotatePixmap); - setTransformRequested ( ROTATE ); - setCursor( rotCursor ); - } -} - -/*! - Starts global panning operation, sets corresponding cursor -*/ -void OCCViewer_ViewWindow::activateGlobalPanning() -{ - Handle(V3d_View) aView3d = myViewPort->getView(); - if ( !aView3d.IsNull() ) { - QPixmap globalPanPixmap (imageCrossCursor); - QCursor glPanCursor (globalPanPixmap); - myCurScale = aView3d->Scale(); - aView3d->FitAll(0.01, false); - myCursor = cursor(); // save old cursor - myViewPort->fitAll(); // fits view before selecting a new scene center - setTransformRequested( PANGLOBAL ); - setCursor( glPanCursor ); - } -} - -/*! - Starts fit operation, sets corresponding cursor -*/ -void OCCViewer_ViewWindow::activateWindowFit() -{ - if ( !transformRequested() && !myCursorIsHand ) - myCursor = cursor(); /* save old cursor */ - - if ( myOperation != WINDOWFIT ) { - QCursor handCursor (Qt::PointingHandCursor); - setTransformRequested ( WINDOWFIT ); - setCursor ( handCursor ); - myCursorIsHand = true; - } -} - -/*! - Stores which viewer operation is requesting -*/ -void OCCViewer_ViewWindow::setTransformRequested ( OperationType op ) -{ - myOperation = op; - myViewPort->setMouseTracking( myOperation == NOTHING ); -} - - -/*! - Handler of mouse move event -*/ -void OCCViewer_ViewWindow::vpMouseMoveEvent(QMouseEvent* theEvent) -{ - myCurrX = theEvent->x(); - myCurrY = theEvent->y(); - switch (myOperation) { - case ROTATE: - myViewPort->rotate(myCurrX, myCurrY); - break; - - case ZOOMVIEW: - myViewPort->zoom(myStartX, myStartY, myCurrX, myCurrY); - myStartX = myCurrX; - myStartY = myCurrY; - break; - - case PANVIEW: - myViewPort->pan(myCurrX - myStartX, myStartY - myCurrY); - myStartX = myCurrX; - myStartY = myCurrY; - break; - -/* case WINDOWFIT: - myDrawRect = true; - repaint(); - break; -*/ - case PANGLOBAL: - 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 ); - } - } - } - else { - emit mouseMoving( this, theEvent ); - } - } -} - -/*! - Handler of mouse release event -*/ -void OCCViewer_ViewWindow::vpMouseReleaseEvent(QMouseEvent* theEvent) -{ - switch ( myOperation ) { - case NOTHING: - { - emit mouseReleased(this, theEvent); - if(theEvent->button() == RightButton) - { - QContextMenuEvent aEvent( QContextMenuEvent::Mouse, - theEvent->pos(), theEvent->globalPos(), - theEvent->state() ); - emit contextMenuRequested( &aEvent ); - } - } - break; - case ROTATE: - myViewPort->endRotation(); - resetState(); - break; - - case PANVIEW: - case ZOOMVIEW: - resetState(); - break; - - case PANGLOBAL: - if ( theEvent->button() == Qt::LeftButton ) { - myViewPort->setCenter( theEvent->x(), theEvent->y() ); - myViewPort->getView()->SetScale(myCurScale); - resetState(); - } - break; - - case WINDOWFIT: - if ( theEvent->state() == Qt::LeftButton ) { - myCurrX = theEvent->x(); - myCurrY = theEvent->y(); - QRect rect = SUIT_Tools::makeRect(myStartX, myStartY, myCurrX, myCurrY); - if ( !rect.isEmpty() ) myViewPort->fitRect(rect); - resetState(); - } - break; - } - - // NOTE: viewer 3D detects a rectangle of selection using this event - // so we must emit it BEFORE resetting the selection rectangle - - if ( theEvent->button() == Qt::LeftButton && myDrawRect ) { - myDrawRect = false; - drawRect(); - resetState(); - myViewPort->update(); - } -} - -/*! - Sets the viewport to its initial state - ( no transformations in process etc. ) -*/ -void OCCViewer_ViewWindow::resetState() -{ - myDrawRect = false; - - /* make rectangle empty (left > right) */ - myRect.setLeft(2); - myRect.setRight(0); - - if ( transformRequested() || myCursorIsHand ) - setCursor( myCursor ); - myCursorIsHand = false; - - if ( transformRequested() ) - emit vpTransformationFinished (myOperation); - - setTransformInProcess( false ); - setTransformRequested( NOTHING ); -} - - -/*! - Draws rectangle by starting and current points -*/ -void OCCViewer_ViewWindow::drawRect() -{ - QPainter aPainter(myViewPort); - aPainter.setRasterOp(Qt::XorROP); - aPainter.setPen(Qt::white); - QRect aRect = SUIT_Tools::makeRect(myStartX, myStartY, myCurrX, myCurrY); - if ( !myRect.isEmpty() ) - aPainter.drawRect( myRect ); - aPainter.drawRect(aRect); - myRect = aRect; -} - -/*! - Creates actions of OCC view window -*/ -void OCCViewer_ViewWindow::createActions() -{ - if (!myActionsMap.isEmpty()) return; - - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - - QtxAction* aAction; - - // Dump view - aAction = new QtxAction(tr("MNU_DUMP_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_DUMP" ) ), - tr( "MNU_DUMP_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_DUMP_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onDumpView())); - myActionsMap[ DumpId ] = aAction; - - // FitAll - aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_FITALL" ) ), - tr( "MNU_FITALL" ), 0, this); - aAction->setStatusTip(tr("DSC_FITALL")); - connect(aAction, SIGNAL(activated()), this, SLOT(onFitAll())); - myActionsMap[ FitAllId ] = aAction; - - // FitRect - aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_FITAREA" ) ), - tr( "MNU_FITRECT" ), 0, this); - aAction->setStatusTip(tr("DSC_FITRECT")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateWindowFit())); - myActionsMap[ FitRectId ] = aAction; - - // Zoom - aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_ZOOM" ) ), - tr( "MNU_ZOOM_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_ZOOM_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateZoom())); - myActionsMap[ ZoomId ] = aAction; - - // Panning - aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_PAN" ) ), - tr( "MNU_PAN_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_PAN_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activatePanning())); - myActionsMap[ PanId ] = aAction; - - // Global Panning - aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_GLOBALPAN" ) ), - tr( "MNU_GLOBALPAN_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning())); - myActionsMap[ GlobalPanId ] = aAction; - - // Rotation - aAction = new QtxAction(tr("MNU_ROTATE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_ROTATE" ) ), - tr( "MNU_ROTATE_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_ROTATE_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateRotation())); - myActionsMap[ RotationId ] = aAction; - - // Projections - aAction = new QtxAction(tr("MNU_FRONT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_FRONT" ) ), - tr( "MNU_FRONT_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_FRONT_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onFrontView())); - myActionsMap[ FrontId ] = aAction; - - aAction = new QtxAction(tr("MNU_BACK_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_BACK" ) ), - tr( "MNU_BACK_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_BACK_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onBackView())); - myActionsMap[ BackId ] = aAction; - - aAction = new QtxAction(tr("MNU_TOP_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_TOP" ) ), - tr( "MNU_TOP_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_TOP_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onTopView())); - myActionsMap[ TopId ] = aAction; - - aAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_BOTTOM" ) ), - tr( "MNU_BOTTOM_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_BOTTOM_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onBottomView())); - myActionsMap[ BottomId ] = aAction; - - aAction = new QtxAction(tr("MNU_LEFT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_LEFT" ) ), - tr( "MNU_LEFT_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_LEFT_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onLeftView())); - myActionsMap[ LeftId ] = aAction; - - aAction = new QtxAction(tr("MNU_RIGHT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_RIGHT" ) ), - tr( "MNU_RIGHT_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_RIGHT_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onRightView())); - myActionsMap[ RightId ] = aAction; - - // Reset - aAction = new QtxAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_RESET" ) ), - tr( "MNU_RESET_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_RESET_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onResetView())); - myActionsMap[ ResetId ] = aAction; - - // Reset - aAction = new QtxAction(tr("MNU_CLONE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_CLONE_VIEW" ) ), - tr( "MNU_CLONE_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_CLONE_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onCloneView())); - myActionsMap[ CloneId ] = aAction; - - myClippingAction = new QtxAction(tr("MNU_CLIPPING"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_CLIPPING" ) ), - tr( "MNU_CLIPPING" ), 0, this); - myClippingAction->setStatusTip(tr("DSC_CLIPPING")); - myClippingAction->setToggleAction( true ); - connect(myClippingAction, SIGNAL(toggled( bool )), this, SLOT(onClipping( bool ))); - myActionsMap[ ClippingId ] = myClippingAction; - - aAction = new QtxAction(tr("MNU_SHOOT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_SHOOT_VIEW" ) ), - tr( "MNU_SHOOT_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_SHOOT_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onMemorizeView())); - myActionsMap[ MemId ] = aAction; - - aAction = new QtxAction(tr("MNU_PRESETS_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_PRESETS_VIEW" ) ), - tr( "MNU_PRESETS_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_PRESETS_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onRestoreView())); - myActionsMap[ RestoreId ] = aAction; - - if (myModel->trihedronActivated()) { - aAction = new QtxAction(tr("MNU_SHOW_TRIHEDRE"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_TRIHEDRON" ) ), - tr( "MNU_SHOW_TRIHEDRE" ), 0, this); - aAction->setStatusTip(tr("DSC_SHOW_TRIHEDRE")); - connect(aAction, SIGNAL(activated()), this, SLOT(onTrihedronShow())); - myActionsMap[ TrihedronShowId ] = aAction; - } -} - -/*! - Creates toolbar of OCC view window -*/ -void OCCViewer_ViewWindow::createToolBar() -{ - myActionsMap[DumpId]->addTo(myToolBar); - if ( myModel->trihedronActivated() ) - myActionsMap[TrihedronShowId]->addTo(myToolBar); - - 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[RotationId]->addTo(myToolBar); - - SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar, "projection"); - aViewsBtn->AddAction(myActionsMap[FrontId]); - aViewsBtn->AddAction(myActionsMap[BackId]); - aViewsBtn->AddAction(myActionsMap[TopId]); - aViewsBtn->AddAction(myActionsMap[BottomId]); - aViewsBtn->AddAction(myActionsMap[LeftId]); - aViewsBtn->AddAction(myActionsMap[RightId]); - - myActionsMap[ResetId]->addTo(myToolBar); - - SUIT_ToolButton* aMemBtn = new SUIT_ToolButton(myToolBar, "view"); - aMemBtn->AddAction(myActionsMap[MemId]); - aMemBtn->AddAction(myActionsMap[RestoreId]); - - myToolBar->addSeparator(); - myActionsMap[CloneId]->addTo(myToolBar); - - myToolBar->addSeparator(); - myActionsMap[ClippingId]->addTo(myToolBar); -} - -/*! - Processes operation fit all -*/ -void OCCViewer_ViewWindow::onViewFitAll() -{ - myViewPort->fitAll(); -} - -/*! - Processes transformation "front view" -*/ -void OCCViewer_ViewWindow::onFrontView() -{ - emit vpTransformationStarted ( FRONTVIEW ); - Handle(V3d_View) aView3d = myViewPort->getView(); - if ( !aView3d.IsNull() ) aView3d->SetProj (V3d_Xpos); - onViewFitAll(); -} - -/*! - Processes transformation "back view" -*/ -void OCCViewer_ViewWindow::onBackView() -{ - emit vpTransformationStarted ( BACKVIEW ); - Handle(V3d_View) aView3d = myViewPort->getView(); - if ( !aView3d.IsNull() ) aView3d->SetProj (V3d_Xneg); - onViewFitAll(); -} - -/*! - Processes transformation "top view" -*/ -void OCCViewer_ViewWindow::onTopView() -{ - emit vpTransformationStarted ( TOPVIEW ); - Handle(V3d_View) aView3d = myViewPort->getView(); - if ( !aView3d.IsNull() ) aView3d->SetProj (V3d_Zpos); - onViewFitAll(); -} - -/*! - Processes transformation "bottom view" -*/ -void OCCViewer_ViewWindow::onBottomView() -{ - emit vpTransformationStarted ( BOTTOMVIEW ); - Handle(V3d_View) aView3d = myViewPort->getView(); - if ( !aView3d.IsNull() ) aView3d->SetProj (V3d_Zneg); - onViewFitAll(); -} - -/*! - Processes transformation "left view" -*/ -void OCCViewer_ViewWindow::onLeftView() -{ - emit vpTransformationStarted ( LEFTVIEW ); - Handle(V3d_View) aView3d = myViewPort->getView(); - if ( !aView3d.IsNull() ) aView3d->SetProj (V3d_Yneg); - onViewFitAll(); -} - -/*! - Processes transformation "right view" -*/ -void OCCViewer_ViewWindow::onRightView() -{ - emit vpTransformationStarted ( RIGHTVIEW ); - Handle(V3d_View) aView3d = myViewPort->getView(); - if ( !aView3d.IsNull() ) aView3d->SetProj (V3d_Ypos); - onViewFitAll(); -} - -/*! - Processes transformation "reset view": sets default orientation of viewport camera -*/ -void OCCViewer_ViewWindow::onResetView() -{ - emit vpTransformationStarted( RESETVIEW ); - bool upd = myViewPort->getView()->SetImmediateUpdate( false ); - myViewPort->getView()->Reset( false ); - myViewPort->fitAll( false, true, false ); - myViewPort->getView()->SetImmediateUpdate( upd ); - myViewPort->getView()->Update(); -} - -/*! - Processes transformation "fit all" -*/ -void OCCViewer_ViewWindow::onFitAll() -{ - emit vpTransformationStarted( FITALLVIEW ); - myViewPort->fitAll(); -} - -/*! - Creates one more window with same content -*/ -void OCCViewer_ViewWindow::onCloneView() -{ - SUIT_ViewWindow* vw = myManager->createViewWindow(); - vw->show(); -} - -/*! - SLOT: called if clipping operation is activated, enables/disables of clipping plane -*/ -void OCCViewer_ViewWindow::onClipping( bool on ) -{ - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - if ( on ) - myActionsMap[ ClippingId ]->setIconSet(aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_CLIPPING_PRESSED" ))); - else - myActionsMap[ ClippingId ]->setIconSet(aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_CLIPPING" ))); - - if ( on ) - { - if ( !myClippingDlg ) - { - myClippingDlg = new OCCViewer_ClippingDlg( this, myDesktop ); - myClippingDlg->SetAction( myClippingAction ); - } - - if ( !myClippingDlg->isShown() ) - myClippingDlg->show(); - } - else - { - if ( myClippingDlg->isShown() ) - myClippingDlg->hide(); - setCuttingPlane(false); - } -} - -/*! - Stores view parameters -*/ -void OCCViewer_ViewWindow::onMemorizeView() -{ - myModel->appendViewAspect( getViewParams() ); -} - -/*! - Restores view parameters -*/ -void OCCViewer_ViewWindow::onRestoreView() -{ - OCCViewer_CreateRestoreViewDlg* aDlg = new OCCViewer_CreateRestoreViewDlg( centralWidget(), myModel ); - connect( aDlg, SIGNAL( dlgOk() ), this, SLOT( setRestoreFlag() ) ); - aDlg->exec(); - myModel->updateViewAspects( aDlg->parameters() ); - if( myRestoreFlag && aDlg->parameters().count() ) - performRestoring( aDlg->currentItem() ); -} - -/*! - Restores view parameters from structure viewAspect -*/ -void OCCViewer_ViewWindow::performRestoring( const viewAspect& anItem ) -{ - Handle(V3d_View) aView3d = myViewPort->getView(); - - Standard_Boolean prev = aView3d->SetImmediateUpdate( Standard_False ); - aView3d->SetScale( anItem.scale ); - aView3d->SetCenter( anItem.centerX, anItem.centerY ); - aView3d->SetTwist( anItem.twist ); - aView3d->SetAt( anItem.atX, anItem.atY, anItem.atZ ); - aView3d->SetImmediateUpdate( prev ); - aView3d->SetEye( anItem.eyeX, anItem.eyeY, anItem.eyeZ ); - aView3d->SetProj( anItem.projX, anItem.projY, anItem.projZ ); - - myRestoreFlag = 0; -} - -/*! - Sets restore flag -*/ -void OCCViewer_ViewWindow::setRestoreFlag() -{ - myRestoreFlag = 1; -} - -/*! - SLOT: called when action "show/hide" trihedron is activated -*/ -void OCCViewer_ViewWindow::onTrihedronShow() -{ - myModel->toggleTrihedron(); -} - -/*! - \return QImage, containing all scene rendering in window -*/ -QImage OCCViewer_ViewWindow::dumpView() -{ - QPixmap px = QPixmap::grabWindow( myViewPort->winId() ); - return px.convertToImage(); -} - -/*! - Sets parameters of cutting plane - \param on - is cutting plane enabled - \param x - x-position of plane point - \param y - y-position of plane point - \param z - z-position of plane point - \param dx - x-coordinate of plane normal - \param dy - y-coordinate of plane normal - \param dz - z-coordinate of plane normal -*/ -void OCCViewer_ViewWindow::setCuttingPlane( bool on, const double x, const double y, const double z, - const double dx, const double dy, const double dz ) -{ - Handle(V3d_View) view = myViewPort->getView(); - if ( view.IsNull() ) - return; - - if ( on ) { - Handle(V3d_Viewer) viewer = myViewPort->getViewer(); - - // try to use already existing plane or create a new one - Handle(V3d_Plane) clipPlane; - view->InitActivePlanes(); - if ( view->MoreActivePlanes() ) - clipPlane = view->ActivePlane(); - else - clipPlane = new V3d_Plane( viewer ); - - // set new a,b,c,d values for the plane - gp_Pln pln( gp_Pnt( x, y, z ), gp_Dir( dx, dy, dz ) ); - double a, b, c, d; - pln.Coefficients( a, b, c, d ); - clipPlane->SetPlane( a, b, c, d ); - - view->SetPlaneOn( clipPlane ); - } - else - view->SetPlaneOff(); - - view->Update(); - view->Redraw(); -} - -/*! - \return true if there is at least one cutting plane -*/ -bool OCCViewer_ViewWindow::isCuttingPlane() -{ - Handle(V3d_View) view = myViewPort->getView(); - view->InitActivePlanes(); - return (view->MoreActivePlanes()); -} - -/*! - The method returns the visual parameters of this view as a viewAspect object -*/ -viewAspect OCCViewer_ViewWindow::getViewParams() const -{ - double centerX, centerY, projX, projY, projZ, twist; - double atX, atY, atZ, eyeX, eyeY, eyeZ; - - Handle(V3d_View) aView3d = myViewPort->getView(); - - aView3d->Center( centerX, centerY ); - aView3d->Proj( projX, projY, projZ ); - aView3d->At( atX, atY, atZ ); - aView3d->Eye( eyeX, eyeY, eyeZ ); - twist = aView3d->Twist(); - - QString aName = QTime::currentTime().toString() + QString::fromLatin1( " h:m:s" ); - - viewAspect params; - params.scale = aView3d->Scale(); - params.centerX = centerX; - params.centerY = centerY; - params.projX = projX; - params.projY = projY; - params.projZ = projZ; - params.twist = twist; - params.atX = atX; - params.atY = atY; - params.atZ = atZ; - params.eyeX = eyeX; - params.eyeY = eyeY; - params.eyeZ = eyeZ; - params.name = aName; - - return params; -} - - -/*! - The method returns the visual parameters of this view as a formated string -*/ -QString OCCViewer_ViewWindow::getVisualParameters() -{ - viewAspect params = getViewParams(); - QString retStr; - retStr.sprintf( "%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e", params.scale, - params.centerX, params.centerY, params.projX, params.projY, params.projZ, params.twist, - params.atX, params.atY, params.atZ, params.eyeX, params.eyeY, params.eyeZ ); - return retStr; -} - -/*! - The method restors visual parameters of this view from a formated string -*/ -void OCCViewer_ViewWindow::setVisualParameters( const QString& parameters ) -{ - QStringList paramsLst = QStringList::split( '*', parameters, true ); - if ( paramsLst.size() == 13 ) { - viewAspect params; - params.scale = paramsLst[0].toDouble(); - params.centerX = paramsLst[1].toDouble(); - params.centerY = paramsLst[2].toDouble(); - params.projX = paramsLst[3].toDouble(); - params.projY = paramsLst[4].toDouble(); - params.projZ = paramsLst[5].toDouble(); - params.twist = paramsLst[6].toDouble(); - params.atX = paramsLst[7].toDouble(); - params.atY = paramsLst[8].toDouble(); - params.atZ = paramsLst[9].toDouble(); - params.eyeX = paramsLst[10].toDouble(); - params.eyeY = paramsLst[11].toDouble(); - params.eyeZ = paramsLst[12].toDouble(); - - performRestoring( params ); - } -} diff --git a/src/OCCViewer/OCCViewer_ViewWindow.h b/src/OCCViewer/OCCViewer_ViewWindow.h deleted file mode 100755 index d9dafcffe..000000000 --- a/src/OCCViewer/OCCViewer_ViewWindow.h +++ /dev/null @@ -1,164 +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 -// -#ifndef OCCVIEWER_VIEWWINDOW_H -#define OCCVIEWER_VIEWWINDOW_H - -#include "OCCViewer_ViewModel.h" - -#include "SUIT_ViewWindow.h" - -#include "QtxAction.h" - -#include -#include - -class SUIT_Desktop; -class OCCViewer_ViewPort3d; - -class OCCViewer_ClippingDlg; - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -class OCCVIEWER_EXPORT OCCViewer_ViewWindow : public SUIT_ViewWindow -{ - Q_OBJECT - -public: - enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW, - FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW }; - - OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel); - virtual ~OCCViewer_ViewWindow() {}; - - OCCViewer_ViewPort3d* getViewPort() { return myViewPort; } - - bool eventFilter(QObject* watched, QEvent* e); - - QToolBar* getToolBar() { return myToolBar; } - - void performRestoring( const viewAspect& ); - - virtual void initLayout(); - - void updateEnabledDrawMode(); - - void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0, - const double dx = 0, const double dy = 0, const double dz = 1); - - bool isCuttingPlane(); - - virtual QString getVisualParameters(); - virtual void setVisualParameters( const QString& parameters ); - -public slots: - void onFrontView(); - void onViewFitAll(); - void onBackView(); - void onTopView(); - void onBottomView(); - void onLeftView(); - void onRightView(); - void onResetView(); - void onFitAll(); - void activateZoom(); - void activateWindowFit(); - void activateRotation(); - void activatePanning(); - void activateGlobalPanning(); - void onCloneView(); - void onClipping( bool on ); - void onMemorizeView(); - void onRestoreView(); - void onTrihedronShow(); - void setRestoreFlag(); - -signals: - void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type); - void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type); - void cloneView(); - -protected: - enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, RotationId, - FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, CloneId, ClippingId, MemId, RestoreId, - TrihedronShowId }; - - typedef QMap ActionsMap; - - QImage dumpView(); - - /* Transformation selected but not started yet */ - bool transformRequested() const { return ( myOperation != NOTHING ); } - void setTransformRequested ( OperationType op ); - - /* Transformation is selected and already started */ - bool transformInProcess() const { return myEventStarted; } - void setTransformInProcess( bool bOn ) { myEventStarted = bOn; } - - void vpMousePressEvent(QMouseEvent* theEvent); - void vpMouseReleaseEvent(QMouseEvent* theEvent); - void vpMouseMoveEvent(QMouseEvent* theEvent); - - void resetState(); - void drawRect(); - - void createActions(); - void createToolBar(); - - virtual OperationType getButtonState(QMouseEvent* theEvent); - - viewAspect getViewParams() const; - - OperationType myOperation; - OCCViewer_Viewer* myModel; - OCCViewer_ViewPort3d* myViewPort; - - int myRestoreFlag; - - int myStartX; - int myStartY; - int myCurrX; - int myCurrY; - - bool myEventStarted; // set when transformation is in process - bool myCursorIsHand; - bool myDrawRect; // set when a rect is used for selection or magnify - bool myEnableDrawMode; - bool myPaintersRedrawing; // set to draw with external painters - - QRect myRect; - QCursor myCursor; - - QToolBar* myToolBar; - ActionsMap myActionsMap; - - double myCurScale; - -private: - OCCViewer_ClippingDlg* myClippingDlg; - QtxAction* myClippingAction; - -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/OCCViewer/resources/OCCViewer_images.po b/src/OCCViewer/resources/OCCViewer_images.po deleted file mode 100755 index b75530310..000000000 --- a/src/OCCViewer/resources/OCCViewer_images.po +++ /dev/null @@ -1,96 +0,0 @@ -# SALOME SALOMEGUI : implementation of desktop and GUI kernel -# -# 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 : SALOMEGUI_icons.po -# Module : SALOME - -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" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -msgid "ICON_OCCVIEWER_VIEW_BACK" -msgstr "view_back.png" - -msgid "ICON_OCCVIEWER_VIEW_BOTTOM" -msgstr "view_bottom.png" - -msgid "ICON_OCCVIEWER_VIEW_FITALL" -msgstr "view_fitall.png" - -msgid "ICON_OCCVIEWER_VIEW_FITAREA" -msgstr "view_fitarea.png" - -msgid "ICON_OCCVIEWER_VIEW_FRONT" -msgstr "view_front.png" - -msgid "ICON_OCCVIEWER_VIEW_GLOBALPAN" -msgstr "view_glpan.png" - -msgid "ICON_OCCVIEWER_VIEW_LEFT" -msgstr "view_left.png" - -msgid "ICON_OCCVIEWER_VIEW_PAN" -msgstr "view_pan.png" - -msgid "ICON_OCCVIEWER_VIEW_RESET" -msgstr "view_reset.png" - -msgid "ICON_OCCVIEWER_VIEW_RIGHT" -msgstr "view_right.png" - -msgid "ICON_OCCVIEWER_VIEW_ROTATE" -msgstr "view_rotate.png" - -msgid "ICON_OCCVIEWER_VIEW_TOP" -msgstr "view_top.png" - -msgid "ICON_OCCVIEWER_VIEW_ZOOM" -msgstr "view_zoom.png" - -msgid "ICON_OCCVIEWER_VIEW_TRIHEDRON" -msgstr "view_triedre.png" - -msgid "ICON_OCCVIEWER_VIEW_DUMP" -msgstr "view_camera_dump.png" - -msgid "ICON_OCCVIEWER_CLONE_VIEW" -msgstr "view_clone.png" - -msgid "ICON_OCCVIEWER_CLIPPING" -msgstr "view_clipping.png" - -msgid "ICON_OCCVIEWER_CLIPPING_PRESSED" -msgstr "view_clipping_pressed.png" - -msgid "ICON_OCCVIEWER_SHOOT_VIEW" -msgstr "view_shoot.png" - -msgid "ICON_OCCVIEWER_PRESETS_VIEW" -msgstr "view_presets.png" - - - diff --git a/src/OCCViewer/resources/OCCViewer_msg_en.po b/src/OCCViewer/resources/OCCViewer_msg_en.po deleted file mode 100755 index b9f31facf..000000000 --- a/src/OCCViewer/resources/OCCViewer_msg_en.po +++ /dev/null @@ -1,184 +0,0 @@ -# SALOME SALOMEGUI : implementation of desktop and GUI kernel -# -# 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 : SALOMEGUI_msg_en.po -# Module : SALOME - -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" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -msgid "LBL_TOOLBAR_LABEL" -msgstr "View Operations" - -msgid "DSC_FRONT_VIEW" -msgstr "Front View" - -msgid "MNU_FRONT_VIEW" -msgstr "Front" - -msgid "DSC_BACK_VIEW" -msgstr "Back View" - -msgid "MNU_BACK_VIEW" -msgstr "Back" - -msgid "DSC_TOP_VIEW" -msgstr "Top View" - -msgid "MNU_TOP_VIEW" -msgstr "Top" - -msgid "DSC_BOTTOM_VIEW" -msgstr "Bottom View" - -msgid "MNU_BOTTOM_VIEW" -msgstr "Bottom" - -msgid "DSC_LEFT_VIEW" -msgstr "Left View" - -msgid "MNU_LEFT_VIEW" -msgstr "Left" - -msgid "DSC_RIGHT_VIEW" -msgstr "Right View" - -msgid "MNU_RIGHT_VIEW" -msgstr "Right" - -msgid "DSC_RESET_VIEW" -msgstr "Reset View Point" - -msgid "MNU_RESET_VIEW" -msgstr "Reset" - -msgid "DSC_FITALL" -msgstr "Fit all objects inside the view frame" - -msgid "MNU_FITALL" -msgstr "Fit All" - -msgid "DSC_FITRECT" -msgstr "Fit area within the view frame" - -msgid "MNU_FITRECT" -msgstr "Fit Area" - -msgid "DSC_ZOOM_VIEW" -msgstr "Zoom the view" - -msgid "MNU_ZOOM_VIEW" -msgstr "Zoom" - -msgid "DSC_PAN_VIEW" -msgstr "Panning the view" - -msgid "MNU_PAN_VIEW" -msgstr "Panning" - -msgid "DSC_GLOBALPAN_VIEW" -msgstr "Selection of a new center of the view" - -msgid "MNU_GLOBALPAN_VIEW" -msgstr "Global Panning" - -msgid "DSC_ROTATE_VIEW" -msgstr "Rotation of the point of view around the scene center" - -msgid "MNU_ROTATE_VIEW" -msgstr "Rotation" - -msgid "DSC_CLONE_VIEW" -msgstr "Create new OCC viewer for the active scene" - -msgid "MNU_CLONE_VIEW" -msgstr "Clone View" - -msgid "MNU_DUMP_VIEW" -msgstr "Dump view" - -msgid "DSC_CLIPPING" -msgstr "Set clipping plane" - -msgid "MNU_CLIPPING" -msgstr "Clipping" - -msgid "DSC_DUMP_VIEW" -msgstr "Saves the active view in the image file" - -msgid "MNU_SHOOT_VIEW" -msgstr "Memorize View" - -msgid "DSC_SHOOT_VIEW" -msgstr "Memorizes the state of the active view and adds it to the list" - -msgid "MNU_PRESETS_VIEW" -msgstr "Restore View" - -msgid "DSC_PRESETS_VIEW" -msgstr "Selection of the memorized state of the active view" - -msgid "OCC_IMAGE_FILES" -msgstr "Images Files (*.bmp *.png *.jpg *.jpeg)" - -msgid "INF_APP_DUMP_VIEW" -msgstr "Dump view" - -msgid "INF_APP_SHOOT_VIEW" -msgstr "Memorize view" - -msgid "INF_APP_PRESETS_VIEW" -msgstr "Restore view" - -msgid "ERR_DOC_CANT_SAVE_FILE" -msgstr "Cannot save file" - -msgid "ERROR" -msgstr "Error" - -msgid "OCCViewer_Viewer::MEN_DUMP_VIEW" -msgstr "Dump view..." - -msgid "OCCViewer_Viewer::MEN_SHOW_TOOLBAR" -msgstr "Show toolbar" - -msgid "OCCViewer_Viewer::MEN_CHANGE_BACKGROUD" -msgstr "Change background..." - -msgid "OCCViewer_ViewManager::OCC_VIEW_TITLE" -msgstr "OCC scene:%M - viewer:%V" - - -msgid "OCCViewer_CreateRestoreViewDlg::CAPTION" -msgstr "Restore view" - -msgid "MNU_SHOW_TRIHEDRE" -msgstr "Show/Hide trihedron" - -msgid "DSC_SHOW_TRIHEDRE" -msgstr "Show/Hide trihedron in the current view" diff --git a/src/OCCViewer/resources/view_back.png b/src/OCCViewer/resources/view_back.png deleted file mode 100755 index 436f2da157599bbe520d17325d12bdcf949b3cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)ToQ5QWE47Di$LQWhKmpCjr4BGlVNU9_~9sjS>4aD*%(C5tZDx$_(i5NduFs1I2f zVSn>x>`~-sRc+SA5pAb_R&}+=zsZe~xf)AZV0msvL3LgE_qjTg-fGfXkEd*mA^UAf zaqQ6e{3zRCx9g4WKX+=HX5L{)2y}cql5-E2_GBsBWt8sHfkVc75WlfWQtl5pFJ6n$ zGHm)Vi4MU*C}lTuOivEW_p*&Ha{y#4(dzf`e=jy9ckNLI%imo|WWET9`pE%_a8U9O zbHCk*QN@~-l$Y+>k-NJqX~x{J*-fW$#aa4fC>k#_U2SW^-w&p>fECP^9Y zusKaq4-)YHWv~7K=L8retyUZg)&JkskQvfD|JBoO zzYDtIW9aesNJUvtRaSAyN+~A`+mJO5V(9sDrba)=(7hC$m657fmWtJWrIf)#UN2=9 z&mflSOXjTJ1Lt6z&T{-rV)e9b@jm?D#)kQ_`G2S+uxB66eTN|2B-*BJr5mj0VbbyA zs2(xH&;1gcRYUcv4oe0Y8vw9hh62)m_YWBQuMmZqmX{1eGTG2l@Bst}kDGy&!c2+- z#4;s52b?9c!{)lG4T!<(&vll^HpL7umI+w5>6{%;pdL6aWx8IjW;Ro1*UUF3Lj>Tf tfk96h*9_n^PzO}{2?hEGbItq$-2mb3gTb{fp`ZW&002ovPDHLkV1h$>uz&yn diff --git a/src/OCCViewer/resources/view_camera_dump.png b/src/OCCViewer/resources/view_camera_dump.png deleted file mode 100755 index 8eb63e09be9919e21d4c8e54482127881dfb5d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)4z!7>1uK9(3SAf^^7GunHcs^$cDz)_6(iV({WI4*3It{)u>Xhxj~ti8*H|$zqZ} z5J<)wJji1p0cj{igW)BkJ?%Pv>zOQKhAcmy9|Z{bV&nXriRhkD0mYv?#0>V_!1=*0M=P_N#mTuI*XDD zDJ5oVP*Txqwy4!>IlS;^hIEpWoQ?8%zZa8EQd-RxU+cAeeKbrM3F&eEM51X zf!*F5=A6Sm*rh$|?7AbXz(%uynHuhH?od+YZ|a=GOiey?NmGd`E5Nmlot!6`eYB*L zH19X9_1cPr5NvO4BjpB{0YpI%7DIN*JLpduKl6C+=WZ6B9R&zQh$uddSAl=4-#bmH8`<`*2LJ#707*qo IM6N<$g7~BA;{X5v diff --git a/src/OCCViewer/resources/view_clipping.png b/src/OCCViewer/resources/view_clipping.png deleted file mode 100644 index dce8bd5c5952847b115e7702d01153ab055996a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_y#VP)u!tbyBV-%dJVUUx(D(*w;Uk0<7Ba*)un;Rj8;wOEjgmS| zK(R?4VT%+gLs+;L?ykE#oA`rX80PPC=A1cqMo|7V*5E$@r6fa86%<*aMZUvON)8Y( z7v^)XB&T9AlP^_iX_jOeYTPoz%u*Wd%eT@V;P&p8ey?A+8L>eGG@)cVM#>oaEg#b{ z8OfQb*F6Pzd3m*DX>}i&^?0~{P=Lde8#zDQ1z=}uhs~``Tc7s|Go8nIRsmTqC&@t&SftvQZ$*h;pne{LogWvKAry=1qv|ox=_W_6&kp-Bn`7NJl5fLpS{Fa}(?AF}nPj7wu zz*-A}AUDp=^A;8&DN+h$6YuGdzpq5bZ=#Z8DbRiFGM8!_g48=9YqvCu4PMt|W&$jzeRwk?y|( XBtfKUVyU7u00000NkvXXu0mjfNX_2{ diff --git a/src/OCCViewer/resources/view_clipping_pressed.png b/src/OCCViewer/resources/view_clipping_pressed.png deleted file mode 100644 index 7895f655480cf00be12936bf7a0870a56eb68053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1(2s1Lwnj--eWH0gbb!ETG&B&)}Eu@>;2ozf3>Eak7aXEQQ-rB$C9b69_aY#Mj z6MVH1~C@(jN5ZBwDgMqS6ARa4AlESQsTm;>p(pZ^)}?KbuH91x_{t8L!_hdxWz05&vhSGeE0ofr5n86@02!OVO z`c$ho^s>jnm7x5U>F0GPs3TQO7fb$_!m_ zSP=275>Xws>+u`R0Uz27sta5RY6xrv^%F2*+51Jk=?j-7T>be5q0RsR002ovPDHLk FV1jEZX9EBL diff --git a/src/OCCViewer/resources/view_fitall.png b/src/OCCViewer/resources/view_fitall.png deleted file mode 100755 index c09ff94ad89b32483194de03275ece8844f985da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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$ diff --git a/src/OCCViewer/resources/view_front.png b/src/OCCViewer/resources/view_front.png deleted file mode 100755 index c5dfc00d5f0c5af534eb0f661c971479866fe3ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3*JP)!JVgih^5+cQw$wr zBrNIEn?Eb+Xi>Xc7Dtq&7Tu@&m416~mCV(Y%K~fP+DTBgtNeI$N79)lt@ShzE6qzo z^>aPCj5UECJ`R)@Ihn#tyX>3`R16KOagjhz=M$CuKw+2^R^?sgQC!71e66*km;6jh z@4SG-)!1cGH4kL#JhGFA(vQgbe3@1|mUm(%Sd1@UMlu* zBq_~nm}%7CX1yU}%tmJ%BGCMdZHzCLn8iW*0_gW| UI2>wZ_W%F@07*qoM6N<$g1r`_kpKVy diff --git a/src/OCCViewer/resources/view_glpan.png b/src/OCCViewer/resources/view_glpan.png deleted file mode 100755 index c23322a4ae4dc6ffdbbac6af7b397fc35554d750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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#+!$#_8k0000#4hYT73@xcd(&pm-#npxikSuV5-9m#TxJaE8cS( z?6CT6guTvLO5I1?Y0TfI*^p9d4t#%GP6fh2>61#>&d|az~ z05N#?xDzwrJ#o5i(^B2kWS)!|$8SyXBtk0wa=r|AGpB2s!CAJ;*nocxT=bl{W&r1b lVS@_K(#Gk*T(fDJegL0JhzmDWEerqv002ovPDHLkV1gN~uB`w7 diff --git a/src/OCCViewer/resources/view_pan.png b/src/OCCViewer/resources/view_pan.png deleted file mode 100755 index 038fba118736ff3732a97e0e62ea4420022560ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)BjE7>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+z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-mq|oHRCwCNl)-A-KoEw%4LNKehvanvy;S4{l2g3U zQ|Kw=VcZQEoLo{?ImtE&>Y+vjlhV9O4hHEU&>jqvgKX6+x3L9<4h-6Fg?|2>nUxX| z6pB>{h+=J{W9+SifUKU`G!ua)y9+Ah<>xN|M&pFn`75Jw(!5T_iKI`d>?Wvc2PYp+ z060H8$Mg)|d%iuT0Qk~Vl*Nt?rLI{rsvX(B#r7?xXDG^o_`y;63Kkt}=)G^&$4AEi z^ezlqYYq+%(1&`vqWmtoxY)^ZYa?CkBz;T;sk`>K3>=!CAsHpy4R28j;;#;XyWuTW zS>YFct3egaq1qe|cVCN|PiBYXqW0H0eM~9Jf~u^z{CtV+Tk<03>iUZ8d$v_CQjr9L zT5I&8F1(A~Mpr+cM$P)iG}~Z+KrlLuR5s1T?|b~h2VGx%G#Cz+GyvMX-sSglIRWji zw;2eJye;Af$7DQN(gbMp|8$tob8fy^X3w+6Q9cj3lSA9Lfulch=Ng6%XF!|VH|5|LZ6HnY2DTKF00000NkvXXu0mjf48-Oy diff --git a/src/OCCViewer/resources/view_reset.png b/src/OCCViewer/resources/view_reset.png deleted file mode 100755 index 12850643e8c561aae15dc7c2990028d57ac9d1bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmV<30V4j1P)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 diff --git a/src/OCCViewer/resources/view_right.png b/src/OCCViewer/resources/view_right.png deleted file mode 100755 index 598def41df5762d105c934b230cb10f1c6d8a546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmV;10eSw3P)ToQ5QWE87Di$LQWhMcK1b98RH(N>SwyrwOl9>DRjv@{2w6nR5geXj8e_2O0(Dq` zyZ6bQNNyxaDdRw#w1<|O zeKUKEGlm|2j+EsY6?qZ2Y>XMH@B^xG5koK63sv0%g=1i+3LvEv>4SE#&@w>Q;=R{->_G!~_p%cc;8FnQ*Q|c6g@69AY)N!AvA65Z?PeDGCWSsE#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/OCCViewer/resources/view_shoot.png b/src/OCCViewer/resources/view_shoot.png deleted file mode 100755 index a80477b75e153617a59684860d928fbb4a2d9b6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 578 zcmV-I0=@l-P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-xJg7oRCwB~lQC=CKorM+XFNQC2j%0mbTEW25iX>e zYOkTo^+V`01ba%dw45>+*^rBe@Fz5!u>!3)MjMLbme|X~Vbo#w}@BT6< zE!iJd0Vb14xu6)1l5WFVThE$fKxxlj4TDlWvDVgksuQY$F^8YDy9;ZA;04CJi$+z; z*j;ytJE-i=ZmGtUVXY;O<5uSEA=9@@-lI5<>G%7*N1a19xx^9n!m2-dG;q0GGM!F& z{`1^|oeiQIx_DfumUpMkBrV%ir>Rtd0HQAuPrsk|@aZG7d5ZTQ5#j6k1pu>oigcw! zWe=I=>wG_G5SeDe+Lw)1oDCw9UkMtPA|cH`{%H_Uv{)9jknWh!FIG{eQ}9%I-7rbxyG^xcq*}_-f25UjYzE zfQTFi6cJ=2Tfc6$@4_%dM2;*OSUfJ&dyn7v`qo8+uorUr`P3Ly<$vn$01lk`EL2jX Q6951J07*qoM6N<$f`$hDr~m)} diff --git a/src/OCCViewer/resources/view_top.png b/src/OCCViewer/resources/view_top.png deleted file mode 100755 index ebbf34da5e69afc736d890204dc84ff913cb512e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)Qy+Xqgx~S9*QoBGheug2Av0WAs zFLL8(#^3xTQ$dDi)nZ;8(K2To-iANruP&6}y-1bJu>QGEg4*lW-M7P*Yh^Wsudn!IH=BRb0Ay{}Y1;~CDR|NXF`uxx&gwImCKbNEqn54q3I z=cPXnM0BN8G?0VZQ~F8&z%U_&EZnq=lkz=kni19Q*9Hhlu)NPf;XgX3-h0000LX zs1y%eI2<_t`Okm;B*3xPIM^@Te*!xGCPvWL)&+Z6<^aSeanP*?5c~`)P$zEz|oc#e30cD(1^Uc5=y=x$By?ZPaRGr!Wk^d?nv5moIats-AJTEz@`9Z`A4^ k(&qh^`6b{_V(&lL4{SuhVMr-3DgXcg07*qoM6N<$f-sH8LI3~& diff --git a/src/OCCViewer/resources/view_zoom.png b/src/OCCViewer/resources/view_zoom.png deleted file mode 100755 index b46573914ded57ddbdbd0fdfdeca02dbe772beca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 -#include -#include -#include -#include -#include -#include - -#include - -/*! - \class OB_Browser::ToolTip - Tool tip for OB_Browser. -*/ - -class OB_Browser::ToolTip : public QToolTip -{ -public: - ToolTip( OB_Browser* b, QWidget* p = 0 ); - virtual ~ToolTip(); - - void maybeTip( const QPoint& ); - -private: - OB_Browser* myBrowser; -}; - -/*! - Constructor -*/ -OB_Browser::ToolTip::ToolTip( OB_Browser* b, QWidget* p ) -: QToolTip( p ), -myBrowser( b ) -{ -} - -/*! - Destructor -*/ -OB_Browser::ToolTip::~ToolTip() -{ -} - -/*! - It is called when there is a possibility that a tool tip - should be shown and must decide whether there is a tool tip for the point - in the widget that this QToolTip object relates to. - \param pos - point co-ordinates -*/ -void OB_Browser::ToolTip::maybeTip( const QPoint& pos ) -{ - if ( !parentWidget() || !myBrowser || !myBrowser->isShowToolTips() ) - return; - - QListView* lv = myBrowser->listView(); - - QListViewItem* item = lv->itemAt( pos ); - SUIT_DataObject* obj = myBrowser->dataObject( item ); - if ( !obj ) - return; - - QString aText = obj->toolTip(); - - if ( aText.isEmpty() ) - return; - - QRect aRect = lv->itemRect( item ); - - tip( aRect, aText ); -} - - -typedef SUIT_DataObject* ObjPtr; -typedef OB_ListItem* ItemPtr; - -/*! - \class OB_BrowserSync - Auxiliary class for synchronizing tree of SUIT_DataObjects and list view items -*/ -class OB_BrowserSync -{ -public: - OB_BrowserSync( OB_Browser* ); - bool isEqual( const ObjPtr&, const ItemPtr& ) const; - ObjPtr nullSrc() const; - ItemPtr nullTrg() const; - ItemPtr createItem( const ObjPtr&, const ItemPtr&, const ItemPtr&, const bool ) const; - void updateItem( const ItemPtr& ) const; - void deleteItemWithChildren( const ItemPtr& ) const; - void children( const ObjPtr&, QValueList& ) const; - void children( const ItemPtr&, QValueList& ) const; - ItemPtr parent( const ItemPtr& ) const; -private: - bool needUpdate( const ItemPtr& ) const; - OB_Browser* myBrowser; -}; - - -/*! - Constructor -*/ -OB_BrowserSync::OB_BrowserSync( OB_Browser* ob ) -: myBrowser( ob ) -{ -} - -/*! - \return true if item must be updated - \param item - item to be checked -*/ -bool OB_BrowserSync::needUpdate( const ItemPtr& item ) const -{ - bool update = false; - if ( item ) { - SUIT_DataObject* obj = item->dataObject(); - if ( obj ) { - // 1. check text - update = ( item->text( 0 ) != obj->name() ) || myBrowser->needToUpdateTexts( item ); - - if ( !update ) { - // 2. check pixmap (compare serialNumber()-s) - QPixmap objPix = obj->icon(); - const QPixmap* itemPix = item->pixmap( 0 ); - update = ( objPix.isNull() && ( itemPix && !itemPix->isNull() ) ) || - ( !objPix.isNull() && ( !itemPix || itemPix->isNull() ) ); - if ( !update && !objPix.isNull() && itemPix && !itemPix->isNull() ) { - int aIconW = objPix.width(); - if( aIconW > 20 ) { - QWMatrix aM; - double aScale = 20.0 / aIconW; - aM.scale( aScale, aScale ); - objPix = objPix.xForm( aM ); - } - update = ( objPix.serialNumber() != itemPix->serialNumber() ); - } - } - } - } - return update; -} - -/*! - Updates item - \param p - item -*/ -void OB_BrowserSync::updateItem( const ItemPtr& p ) const -{ - if ( p && needUpdate( p ) ) { - // printf( "--- needUpdate for %s = true ---\n", p->text( 0 ).latin1() ); - myBrowser->updateText( p ); - p->update(); - } -} - -/*! - Creates item by SUIT object - \param src - corresponding SUIT object - \param parent - parent for item - \param after - previous sibling for item - \param prepend - item must be added to start of children list -*/ -ItemPtr OB_BrowserSync::createItem( const ObjPtr& src, - const ItemPtr& parent, const ItemPtr& after, - const bool prepend ) const -{ - ItemPtr i = myBrowser ? dynamic_cast( myBrowser->createItem( src, parent, after, prepend ) ) : 0; - if( i ) - i->setOpen( src->isOpen() ); - return i; -} - -/*! - Deletes object with all children - \param i - item -*/ -void OB_BrowserSync::deleteItemWithChildren( const ItemPtr& i ) const -{ - if( myBrowser && myBrowser->myItems.contains( i->dataObject() ) ) - { - myBrowser->removeReferences( i ); - delete i; - } -} - -/*! - \return true if objects correspond each other at all - \param p - suit object - \param q - object browser item -*/ -bool OB_BrowserSync::isEqual( const ObjPtr& p, const ItemPtr& q ) const -{ - bool isRoot = p==myBrowser->getRootObject() && !q, - isEq = p && q && q->dataObject()==p; - return isRoot || ( !p && !q ) || isEq; -} - -/*! - \return null suit object -*/ -ObjPtr OB_BrowserSync::nullSrc() const -{ - return 0; -} - -/*! - \return null item -*/ -ItemPtr OB_BrowserSync::nullTrg() const -{ - return 0; -} - -/*! - Fills list with children of SUIT object - \param p - SUIT object - \param ch - list to be filled -*/ -void OB_BrowserSync::children( const ObjPtr& p, QValueList& ch ) const -{ - DataObjectList l; - if( p ) - { - p->children( l ); - ch.clear(); - for( SUIT_DataObject* o = l.first(); o; o = l.next() ) - ch.append( o ); - } -} - -/*! - Fills list with children of item - \param p - item - \param ch - list to be filled -*/ -void OB_BrowserSync::children( const ItemPtr& p, QValueList& ch ) const -{ - for( QListViewItem* item = p ? p->firstChild() : myBrowser->listView()->firstChild(); item; item = item->nextSibling() ) - { - ItemPtr p = dynamic_cast( item ); - if( p ) - ch.append( p ); - } -} - -/*! - \return parent of item - \param p - item -*/ -ItemPtr OB_BrowserSync::parent( const ItemPtr& p ) const -{ - return p ? dynamic_cast( p->parent() ) : 0; -} - - -/*! - Constructor -*/ -OB_Browser::OB_Browser( QWidget* parent, SUIT_DataObject* root ) -: QFrame( parent ), - -myRoot( 0 ), -myTooltip( 0 ), -myAutoOpenLevel( 0 ), -myAutoUpdate( false ), -myAutoDelObjs( false ), -myRootDecorated( true ) -{ - myView = new OB_ListView( QtxListView::HeaderAuto, this ); - myView->setAppropriate( myView->addColumn( "Data" ), false ); - myView->setSorting( -1 ); - myView->setRootIsDecorated( true ); - myView->setSelectionMode( QListView::Extended ); - myView->installEventFilter( this ); - myView->viewport()->installEventFilter( this ); - - QVBoxLayout* main = new QVBoxLayout( this ); - main->addWidget( myView ); - - myShowToolTips = true; - myTooltip = new ToolTip( this, myView->viewport() ); - - connect( myView, SIGNAL( dropped( QPtrList, QListViewItem*, int ) ), - this, SLOT( onDropped( QPtrList, QListViewItem*, int ) ) ); - connect( myView, SIGNAL( selectionChanged() ), this, SIGNAL( selectionChanged() ) ); - connect( myView, SIGNAL( doubleClicked( QListViewItem* ) ), - this, SLOT( onDoubleClicked( QListViewItem* ) ) ); - - setRootObject( root ); - - setModified(); -} - -/*! - Destructor -*/ -OB_Browser::~OB_Browser() -{ - myItems.clear(); - delete myTooltip; -} - -/*! - \return true if root is decorated by + -*/ -bool OB_Browser::rootIsDecorated() const -{ - return myRootDecorated; -} - -/*! - Sets state "root is recorated" - \param decor - new value of state -*/ -void OB_Browser::setRootIsDecorated( const bool decor ) -{ - if ( decor == rootIsDecorated() ) - return; - - myRootDecorated = decor; - updateTree( 0, false ); -} - -/*! - \return number of levels to be auto opened on update tree -*/ -int OB_Browser::autoOpenLevel() const -{ - return myAutoOpenLevel; -} - -/*! - Changes number of levels to be auto opened on update tree - \param level - new number of levels -*/ -void OB_Browser::setAutoOpenLevel( const int level ) -{ - if ( myAutoOpenLevel == level ) - return; - - myAutoOpenLevel = level; -} - -/*! - 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(); - } -} - -/*! - \return state "are tooltips shown" -*/ -bool OB_Browser::isShowToolTips() -{ - return myShowToolTips; -} - -/*! - Sets new value of state "are tooltips shown" - \param theDisplay - new value -*/ -void OB_Browser::setShowToolTips( const bool theDisplay ) -{ - myShowToolTips = theDisplay; -} - -/*! - \return true if object browser automatically updates tree after SUIT object removing -*/ -bool OB_Browser::isAutoUpdate() const -{ - return myAutoUpdate; -} - -/*! - Sets new value of "auto update": whether object browser automatically updates tree after SUIT object removing -*/ -void OB_Browser::setAutoUpdate( const bool on ) -{ - myAutoUpdate = on; -} - -/*! - \return true if object browser must delete old tree on setRootObject(), replaceTree() - \sa setRootObject(), replaceTree() -*/ -bool OB_Browser::isAutoDeleteObjects() const -{ - return myAutoDelObjs; -} - -/*! - Sets whether object browser must delete old tree on setRootObject(), replaceTree() - \sa setRootObject(), replaceTree() -*/ -void OB_Browser::setAutoDeleteObjects( const bool on ) -{ - myAutoDelObjs = on; -} - -/*! - \return root SUIT object of browser -*/ -SUIT_DataObject* OB_Browser::getRootObject() const -{ - return myRoot; -} - -/*! - Sets new root SUIT object of browser - \param theRoot - new root object -*/ -void OB_Browser::setRootObject( SUIT_DataObject* theRoot ) -{ - DataObjectKey curKey; - DataObjectMap selObjs, openObjs; - DataObjectKeyMap selKeys, openKeys; - - int selNum = numberOfSelected(); - - SUIT_DataObject* curObj = 0; - if ( theRoot ) - curObj = storeState( selObjs, openObjs, selKeys, openKeys, curKey ); - - removeConnections( myRoot ); - if ( myRoot != theRoot && isAutoDeleteObjects() ) - delete myRoot; - - myRoot = theRoot; - - createConnections( myRoot ); - - if ( myRoot ) - updateView( myRoot ); - else if ( listView() ) - { - myItems.clear(); - listView()->clear(); - } - - restoreState( selObjs, openObjs, curObj, selKeys, openKeys, curKey ); - - autoOpenBranches(); - - setModified(); - - if ( selNum != numberOfSelected() ) - emit selectionChanged(); -} - -/*! - \return number of selected items -*/ -int OB_Browser::numberOfSelected() const -{ - int count = 0; - if ( listView() ) - { - for ( QListViewItemIterator it( listView() ); it.current(); ++it ) - if ( it.current()->isSelected() ) - count++; - } - return count; -} - -/*! - \return list of selected objects -*/ -DataObjectList OB_Browser::getSelected() const -{ - DataObjectList lst; - getSelected( lst ); - return lst; -} - -/*! - Fills list with selected objects -*/ -void OB_Browser::getSelected( DataObjectList& theObjList ) const -{ - theObjList.clear(); - - if ( !listView() ) - return; - - for ( QListViewItemIterator it( listView() ); it.current(); ++it ) - { - if ( it.current()->isSelected() ) - { - SUIT_DataObject* obj = dataObject( it.current() ); - if ( obj ) - theObjList.append( obj ); - } - } -} - -/*! - Sets selected object - \param theObject - new selected object - \param append - if it is true, then other selected objects are left as selected, - otherwise only 'theObject' will be selected -*/ -void OB_Browser::setSelected( const SUIT_DataObject* theObject, const bool append ) -{ - DataObjectList lst; - lst.append( theObject ); - setSelected( lst, append ); -} - -/*! - Sets selected objects - \param theObjLst - new selected objects - \param append - if it is true, then other selected objects are left as selected, - otherwise only 'theObjLst' will be selected -*/ -void OB_Browser::setSelected( const DataObjectList& theObjLst, const bool append ) -{ - QListView* lv = listView(); - - if ( !lv ) - return; - - bool changed = false; - bool block = lv->signalsBlocked(); - lv->blockSignals( true ); - - QMap map; - for ( DataObjectListIterator itr( theObjLst ); itr.current(); ++itr ) - map.insert( listViewItem( itr.current() ), 0 ); - - for ( QListViewItemIterator it( lv ); it.current(); ++it ) - { - QListViewItem* item = it.current(); - if ( map.contains( item ) && !lv->isSelected( item ) ) - { - changed = true; - lv->setSelected( item, true ); - } - if ( !append && !map.contains( item ) && lv->isSelected( item ) ) - { - changed = true; - lv->setSelected( item, false ); - } - } - - lv->blockSignals( block ); - - if ( changed ) - { - int count = 0; - QListViewItem* sel = 0; - QListViewItem* cur = lv->currentItem(); - for ( QListViewItemIterator iter( lv ); iter.current() && !sel; ++iter, count++ ) - { - if ( iter.current()->isSelected() && cur == iter.current() ) - sel = iter.current(); - } - - for ( QListViewItemIterator itr( lv ); itr.current() && !sel; ++itr ) - { - if ( itr.current()->isSelected() ) - sel = itr.current(); - } - - if ( sel ) - lv->setCurrentItem( sel ); - - if ( sel && count == 1 ) - lv->ensureItemVisible( sel ); - - emit selectionChanged(); - } -} - -/*! - \return true if item corresponding to object is opened - \param theObject - object to be checked -*/ -bool OB_Browser::isOpen( SUIT_DataObject* theObject ) const -{ - bool res = false; - if ( listView() ) - res = listView()->isOpen( listViewItem( theObject ) ); - return res; -} - -/*! - Sets opened state of item - \param theObject - object corresponding to item - \param theOpen - new opened state -*/ -void OB_Browser::setOpen( SUIT_DataObject* theObject, const bool theOpen ) -{ - if ( listView() ) - listView()->setOpen( listViewItem( theObject ), theOpen ); -} - -/*! - \return SUIT object correspondint to item at position 'pos' - \param pos - position -*/ -SUIT_DataObject* OB_Browser::dataObjectAt( const QPoint& pos ) const -{ - SUIT_DataObject* obj = 0; - - QListView* lv = listView(); - if ( lv ) - obj = dataObject( lv->itemAt( pos ) ); - - return obj; -} - -/*! - \return filter of list view -*/ -OB_Filter* OB_Browser::filter() const -{ - return myView->filter(); -} - -/*! - Changes filter of list view - \param f - new filter -*/ -void OB_Browser::setFilter( OB_Filter* f ) -{ - myView->setFilter( f ); -} - -/*! - Adds new column to list view - \param label - title of column - \param id - id of column - \param width - width of column -*/ -int OB_Browser::addColumn( const QString& label, const int id, const int width ) -{ - return addColumn( QIconSet(), label, id, width ); -} - -/*! - Adds new column to list view - \param icon - icon of column - \param label - title of column - \param id - id of column - \param width - width of column -*/ -int OB_Browser::addColumn( const QIconSet& icon, const QString& label, const int id, const int width ) -{ - QListView* lv = listView(); - if ( !lv ) - return -1; - - int theId = id; - if ( theId < 0 ) - { - while ( myColumnIds.contains( theId ) ) - theId++; - } - - if ( myColumnIds.contains( theId ) ) - return -1; // can not reuse id - - int sec = -1; - if ( icon.isNull() ) - sec = lv->addColumn( label, width ); - else - sec = lv->addColumn( icon, label, width ); - - if ( sec == -1 ) - return -1; - - myColumnIds.insert( theId, sec ); - updateText(); - - return theId; -} - -/*! - Removes column - \param id - id of column -*/ -void OB_Browser::removeColumn( const int id ) -{ - QListView* lv = listView(); - if ( !lv || !myColumnIds.contains( id ) ) - return; - - int sec = myColumnIds[id]; - lv->removeColumn( sec ); - - // update map of column indeces - myColumnIds.remove( id ); - for ( QMap::iterator it = myColumnIds.begin(); it != myColumnIds.end(); ++it ) - { - if ( it.key() > id ) - it.data()--; - } - updateText(); -} - -/*! - Sets title of first column (name column) - \param label - new title -*/ -void OB_Browser::setNameTitle( const QString& label ) -{ - setNameTitle( QIconSet(), label ); -} - -/*! - Sets title and icon of first column (name column) - \param icon - new icon - \param label - new title -*/ -void OB_Browser::setNameTitle( const QIconSet& icon, const QString& label ) -{ - QListView* lv = listView(); - if ( !lv ) - return; - - if ( icon.isNull() ) - lv->setColumnText( 0, label ); - else - lv->setColumnText( 0, icon, label ); -} - -/*! - Sets title of column - \param id - column id - \param label - new column title -*/ -void OB_Browser::setColumnTitle( const int id, const QString& label ) -{ - setColumnTitle( id, QIconSet(), label ); -} - -/*! - Sets title and icon of column - \param id - column id - \param icon - new column icon - \param label - new column title -*/ -void OB_Browser::setColumnTitle( const int id, const QIconSet& icon, const QString& label ) -{ - QListView* lv = listView(); - if ( !lv || !myColumnIds.contains( id ) ) - return; - - if ( icon.isNull() ) - lv->setColumnText( myColumnIds[id], label ); - else - lv->setColumnText( myColumnIds[id], icon, label ); -} - -/*! - \return title of first column (name column) -*/ -QString OB_Browser::nameTitle() const -{ - return myView->columnText( 0 ); -} - -/*! - \return title of first column (name column) - \param id - column id -*/ -QString OB_Browser::columnTitle( const int id ) const -{ - QString txt; - if ( myColumnIds.contains( id ) ) - txt = myView->columnText( myColumnIds[id] ); - return txt; -} - -/*! - \return true if column is visible - \param id - column id -*/ -bool OB_Browser::isColumnVisible( const int id ) const -{ - return myColumnIds.contains( id ) && myView->isShown( myColumnIds[id] ); -} - -/*! - Sets visibility of column - \param id - column id - \param on - new visibility state -*/ -void OB_Browser::setColumnShown( const int id, const bool on ) -{ - if ( !myColumnIds.contains( id ) ) - return; - - myView->setShown( myColumnIds[id], on ); - if( !on ) - myView->setColumnWidthMode( myColumnIds[id], QListView::Manual ); -} - -/*! - Sets global width mode - \param mode - new width mode -*/ -void OB_Browser::setWidthMode( QListView::WidthMode mode ) -{ - for ( int i = 0, n = myView->columns(); i < n; i++ ) - if( mode!=QListView::Maximum || myView->columnWidth( i )>0 ) - myView->setColumnWidthMode( i, mode ); -} - -/*! - \return list of columns ids -*/ -QValueList OB_Browser::columns() const -{ - QValueList lst; - for ( QMap::ConstIterator it = myColumnIds.begin(); it != myColumnIds.end(); ++it ) - lst.append( it.key() ); - return lst; -} - -/*! - \return true if it is possible to show/hide column by popup - \param id - column id -*/ -bool OB_Browser::appropriateColumn( const int id ) const -{ - bool res = false; - if ( myColumnIds.contains( id ) ) - res = myView->appropriate( myColumnIds[id] ); - return res; -} - -/*! - Sets "appropriate state": is it possible to show/hide column by popup - \param id - column id - \param on - new state -*/ -void OB_Browser::setAppropriateColumn( const int id, const bool on ) -{ - if ( !myColumnIds.contains( id ) ) - return; - - myView->setAppropriate( myColumnIds[id], on ); -} - -/*! - Updates tree - \param obj - start object - \param autoOpen - to open automatically branches of autoOpenLevel() - \sa autoOpenLevel() -*/ -void OB_Browser::updateTree( SUIT_DataObject* obj, const bool autoOpen ) -{ -// QTime t1 = QTime::currentTime(); - - if ( !obj && !(obj = getRootObject()) ) - return; - - DataObjectKey curKey; - DataObjectMap selObjs, openObjs; - DataObjectKeyMap selKeys, openKeys; - - int selNum = numberOfSelected(); - - SUIT_DataObject* curObj = storeState( selObjs, openObjs, selKeys, openKeys, curKey ); - - updateView( obj ); - - restoreState( selObjs, openObjs, curObj, selKeys, openKeys, curKey ); - - if ( autoOpen ) - autoOpenBranches(); - - setModified(); - - if ( selNum != numberOfSelected() ) - emit selectionChanged(); - -// QTime t2 = QTime::currentTime(); -// qDebug( QString( "update tree time = %1 msecs" ).arg( t1.msecsTo( t2 ) ) ); -} - -/*! - Replaces part of tree starting at object 'src' by tree starting at object 'trg' -*/ -void OB_Browser::replaceTree( SUIT_DataObject* src, SUIT_DataObject* trg ) -{ - if ( !src || !trg || src == trg || src->root() != getRootObject() ) - return; - - DataObjectKey curKey; - DataObjectMap selObjs, openObjs; - DataObjectKeyMap selKeys, openKeys; - - int selNum = numberOfSelected(); - - SUIT_DataObject* curObj = storeState( selObjs, openObjs, selKeys, openKeys, curKey ); - - SUIT_DataObject* parent = src->parent(); - int pos = parent ? parent->childPos( src ) : -1; - - src->setParent( 0 ); - - removeConnections( src ); - if ( isAutoDeleteObjects() ) - delete src; - - if ( parent && pos != -1 ) - parent->insertChild( trg, pos ); - - trg->setParent( parent ); - - updateView( trg ); - createConnections( trg ); - - restoreState( selObjs, openObjs, curObj, selKeys, openKeys, curKey ); - - setModified(); - - if ( selNum != numberOfSelected() ) - emit selectionChanged(); -} - -/*! - Updates view - \param startObj - start object -*/ -void OB_Browser::updateView( SUIT_DataObject* startObj ) -{ - QListView* lv = listView(); - if ( !lv ) - return; - - if ( !startObj || startObj->root() != getRootObject() ) - return; - - //qDebug( "updateView:" ); - //startObj->dump(); - - if ( startObj == myRoot ) - { - OB_BrowserSync sync( this ); - synchronize( myRoot, 0, sync ); - } - else - { - OB_BrowserSync sync( this ); - OB_ListItem* startItem = dynamic_cast( listViewItem( startObj ) ); - synchronize( startObj, startItem, sync ); - } -} - -/*! - Creates new list item - \return new item - \param o - corresponding SUIT object - \param parent - parent item - \param after - item after that new item must be added - \param prepend - new item must be added as first -*/ -QListViewItem* OB_Browser::createItem( const SUIT_DataObject* o, QListViewItem* parent, - QListViewItem* after, const bool prepend ) -{ - QListView* lv = listView(); - - if ( !lv || !o ) - return 0; - - QListViewItem* item = 0; - SUIT_DataObject* obj = (SUIT_DataObject*)o; - - int type = -1; - - switch ( obj->checkType() ) - { - case SUIT_DataObject::CheckBox: - type = QCheckListItem::CheckBox; - break; - case SUIT_DataObject::RadioButton: - type = QCheckListItem::RadioButton; - break; - } - - if ( parent ) - { - if ( after ) - { - if ( type == -1 ) - item = new OB_ListItem( obj, parent, after ); - else - item = new OB_CheckListItem( obj, parent, after, (QCheckListItem::Type)type ); - } - else if ( prepend ) - { - if ( type == -1 ) - item = new OB_ListItem( obj, parent ); - else - item = new OB_CheckListItem( obj, parent, (QCheckListItem::Type)type ); - } - else // append - { - after = parent->firstChild(); - while ( after && after->nextSibling() ) - after = after->nextSibling(); - if ( type == -1 ) - item = new OB_ListItem( obj, parent, after ); - else - item = new OB_CheckListItem( obj, parent, after, (QCheckListItem::Type)type ); - } - } - else - { - if ( after ) - { - if ( type == -1 ) - item = new OB_ListItem( obj, lv, after ); - else - item = new OB_CheckListItem( obj, lv, after, (QCheckListItem::Type)type ); - } - else if ( prepend ) - { - if ( type == -1 ) - item = new OB_ListItem( obj, lv ); - else - item = new OB_CheckListItem( obj, lv, (QCheckListItem::Type)type ); - } - else // append - { - after = lv->firstChild(); - while ( after && after->nextSibling() ) - after = after->nextSibling(); - if ( type == -1 ) - item = new OB_ListItem( obj, lv, after ); - else - item = new OB_CheckListItem( obj, lv, after, (QCheckListItem::Type)type ); - } - } - - myItems.insert( obj, item ); - obj->connect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); - updateText( item ); - - return item; -} - -/*! - Adjusts width by root item -*/ -void OB_Browser::adjustWidth() -{ - if ( !listView() ) - return; - - listView()->setColumnWidth( 0, 0 ); - if ( listView()->firstChild() ) - adjustWidth( listView()->firstChild() ); -} - -/*! - Adjusts width by item - \param item -*/ -void OB_Browser::adjustWidth( QListViewItem* item ) -{ - while ( item ) - { - item->widthChanged( 0 ); - if ( item->isOpen() ) - adjustWidth( item->firstChild() ); - item = item->nextSibling(); - } -} - -/*! - \return SUIT object corresponding to item - \param item -*/ -SUIT_DataObject* OB_Browser::dataObject( const QListViewItem* item ) const -{ - SUIT_DataObject* obj = 0; - - if ( item && item->rtti() == OB_ListItem::RTTI() ) - obj = ((OB_ListItem*)item)->dataObject(); - else if ( item && item->rtti() == OB_CheckListItem::RTTI() ) - obj = ((OB_CheckListItem*)item)->dataObject(); - - return obj; -} - -/*! - \return item corresponding to SUIT object - \param obj - SUIT object -*/ -QListViewItem* OB_Browser::listViewItem( const SUIT_DataObject* obj ) const -{ - QListViewItem* item = 0; - - if ( myItems.contains( (SUIT_DataObject*)obj ) ) - item = myItems[(SUIT_DataObject*)obj]; - - return item; -} - -/*! - \return list view of object browser -*/ -QListView* OB_Browser::listView() const -{ - return myView; -} - -/*! - \remove all items referencing current (through data objects) -*/ -void OB_Browser::removeReferences( QListViewItem* item ) -{ - if ( !item ) - return; - - SUIT_DataObject* obj = dataObject( item ); - obj->disconnect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); - myItems.remove( obj ); - - QListViewItem* i = item->firstChild(); - while ( i ) - { - removeReferences( i ); - i = i->nextSibling(); - } -} - -/*! - Connects all children to SLOT onDestroyed -*/ -void OB_Browser::createConnections( SUIT_DataObject* obj ) -{ - if ( !obj ) - return; - - DataObjectList childList; - obj->children( childList, true ); - - childList.prepend( obj ); - - for ( DataObjectListIterator it( childList ); it.current(); ++it ) - it.current()->connect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); -} - -/*! - Disconnects all children from SLOT onDestroyed -*/ -void OB_Browser::removeConnections( SUIT_DataObject* obj ) -{ - if ( !obj ) - return; - - DataObjectList childList; - obj->children( childList, true ); - - childList.prepend( obj ); - - for ( DataObjectListIterator it( childList ); it.current(); ++it ) - it.current()->disconnect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); -} - -/*! - Stores states (opened, selected) of current tree items - \return current item - \param selObjs, selKeys - maps of selected objects - \param openObjs, openKeys - maps of opened objects - \param curKey - map of current objects -*/ -SUIT_DataObject* OB_Browser::storeState( DataObjectMap& selObjs, DataObjectMap& openObjs, - DataObjectKeyMap& selKeys, DataObjectKeyMap& openKeys, - DataObjectKey& curKey ) const -{ - QListView* lv = listView(); - if ( !lv ) - return 0; - - SUIT_DataObject* curObj = dataObject( lv->currentItem() ); - - curKey = objectKey( curObj ); - - for ( QListViewItemIterator it( lv ); it.current(); ++it ) - { - SUIT_DataObject* obj = dataObject( it.current() ); - if ( !obj ) - continue; - - selObjs.insert( obj, lv->isSelected( it.current() ) ); - openObjs.insert( obj, lv->isOpen( it.current() ) ); - if ( lv->isSelected( it.current() ) ) - selKeys.insert( objectKey( obj ), 0 ); - if ( lv->isOpen( it.current() ) ) - openKeys.insert( objectKey( obj ), 0 ); - } - - return curObj; -} - -/*! - Restores states (opened, selected) of current tree items - \param selObjs, selKeys - maps of selected objects - \param openObjs, openKeys - maps of opened objects - \param curKey - map of current objects -*/ -void OB_Browser::restoreState( const DataObjectMap& selObjs, const DataObjectMap& openObjs, - const SUIT_DataObject* curObj, const DataObjectKeyMap& selKeys, - const DataObjectKeyMap& openKeys, const DataObjectKey& curKey ) -{ - QListView* lv = listView(); - if ( !lv ) - return; - - bool block = lv->signalsBlocked(); - lv->blockSignals( true ); - - QListViewItem* curItem = 0; - for ( QListViewItemIterator it( lv ); it.current(); ++it ) - { - QListViewItem* item = it.current(); - SUIT_DataObject* obj = dataObject( item ); - - if ( !obj ) - continue; - - DataObjectKey key = objectKey( obj ); - - if ( selObjs.contains( obj ) ) - { - if ( selObjs[obj] && !lv->isSelected( item ) ) - lv->setSelected( item, true ); - } - else if ( !key.isNull() && selKeys.contains( key ) && !lv->isSelected( item ) ) - lv->setSelected( item, true ); - - if ( openObjs.contains( obj ) ) - { - bool parentOpen = true; - if( item && item->parent() ) - parentOpen = item->parent()->isOpen(); - - if ( openObjs[obj] && parentOpen ) - lv->setOpen( item, true ); - } - else if ( !key.isNull() && openKeys.contains( key ) ) - { - bool parentOpen = true; - if( item && item->parent() ) - parentOpen = item->parent()->isOpen(); - - if( parentOpen ) - lv->setOpen( item, true ); - } - - if ( !curItem && ( curObj == obj || ( !curKey.isNull() && curKey == key )) ) - curItem = item; - } - - if ( curItem ) - lv->setCurrentItem( curItem ); - - lv->blockSignals( block ); -} - -/*! - Creates object key by tree item -*/ -OB_Browser::DataObjectKey OB_Browser::objectKey( QListViewItem* i ) const -{ - return objectKey( dataObject( i ) ); -} - -/*! - Creates object key by SUIT object -*/ -OB_Browser::DataObjectKey OB_Browser::objectKey( SUIT_DataObject* obj ) const -{ - if ( !obj ) - return 0; - - return DataObjectKey( obj->key() ); -} - -/*! - Custom key press event handler, updates tree by F5 -*/ -void OB_Browser::keyPressEvent( QKeyEvent* e ) -{ - if ( e->key() == Qt::Key_F5 ) - updateTree( 0, false ); - - QFrame::keyPressEvent( e ); -} - -/*! - SLOT: called if action "Expand all" is activated -*/ -void OB_Browser::onExpand() -{ - DataObjectList selected; - getSelected( selected ); - for ( DataObjectListIterator itr( selected ); itr.current(); ++itr ) - expand( listViewItem( itr.current() ) ); -} - -/*! - SLOT: called if action "Show/hide column" is activated by popup -*/ -void OB_Browser::onColumnVisible( int id ) -{ - setColumnShown( id, !isColumnVisible( id ) ); -} - -/*! - SLOT: called if SUIT object is destroyed -*/ -void OB_Browser::onDestroyed( SUIT_DataObject* obj ) -{ - removeObject( obj ); -} - -/*! - SLOT: called on finish of drag-n-drop operation - \param items - dragged items - \param item - destination (item on that they were dropped) - \param action - QDropEvent::Action -*/ -void OB_Browser::onDropped( QPtrList items, QListViewItem* item, int action ) -{ - SUIT_DataObject* obj = dataObject( item ); - if ( !obj ) - return; - - DataObjectList lst; - for ( QPtrListIterator it( items ); it.current(); ++it ) - { - SUIT_DataObject* o = dataObject( it.current() ); - if ( o ) - lst.append( o ); - } - - if ( !lst.isEmpty() ) - emit dropped( lst, obj, action ); -} - -/*! - Updates texts of items -*/ -void OB_Browser::updateText() -{ - if ( myColumnIds.isEmpty() ) - return; - - QListView* lv = listView(); - if ( !lv ) - return; - - for ( QListViewItemIterator it( lv ); it.current(); ++it ) - { - SUIT_DataObject* obj = dataObject( it.current() ); - if ( !obj ) - continue; - - for( QMap::iterator itr = myColumnIds.begin(); itr != myColumnIds.end(); ++itr ) - it.current()->setText( itr.data(), obj->text( itr.key() ) ); - } -} - -/*! - \return true if item must be updated - \param item - item to be checked -*/ -bool OB_Browser::needToUpdateTexts( QListViewItem* item ) const -{ - SUIT_DataObject* obj = dataObject( item ); - if ( !obj ) - return false; - - for( QMap::const_iterator it = myColumnIds.begin(); it != myColumnIds.end(); ++it ) - if( item->text( it.data() ) != obj->text( it.key() ) ) - return true; - return false; -} - -/*! - Updates texts of item - \param item - item to be updated -*/ -void OB_Browser::updateText( QListViewItem* item ) -{ - SUIT_DataObject* obj = dataObject( item ); - if ( !obj ) - return; - - for( QMap::iterator it = myColumnIds.begin(); it != myColumnIds.end(); ++it ) - item->setText( it.data(), obj->text( it.key() ) ); -} - -/*! - Custom event filter -*/ -bool OB_Browser::eventFilter( QObject* o, QEvent* e ) -{ - if ( o == myView && e->type() == QEvent::ContextMenu ) - { - QContextMenuEvent* ce = (QContextMenuEvent*)e; - if ( ce->reason() != QContextMenuEvent::Mouse ) - contextMenuRequest( ce ); - return true; - } - if ( o == myView->viewport() && e->type() == QEvent::MouseButtonRelease ) - { - QMouseEvent* me = (QMouseEvent*)e; - if ( me->button() == RightButton ) - { - QContextMenuEvent ce( QContextMenuEvent::Mouse, me->pos(), me->globalPos(), me->state() ); - contextMenuRequest( &ce ); - return true; - } - } - - return QFrame::eventFilter( o, e ); -} - -/*! - Adds custom actions to popup - \param menu - popup menu -*/ -void OB_Browser::contextMenuPopup( QPopupMenu* menu ) -{ -/* QValueList cols; - for ( QMap::ConstIterator it = myColumnIds.begin(); it != myColumnIds.end(); ++it ) - { - if ( appropriateColumn( it.key() ) ) - cols.append( it.key() ); - } - - uint num = menu->count(); - menu->setCheckable( true ); - for ( QValueList::const_iterator iter = cols.begin(); iter != cols.end(); ++iter ) - { - QString name = columnTitle( *iter ); - if ( name.isEmpty() ) - continue; - - int id = menu->insertItem( name, this, SLOT( onColumnVisible( int ) ) ); - menu->setItemChecked( id, isColumnVisible( *iter ) ); - menu->setItemParameter( id, *iter ); - } - if ( menu->count() != num ) - menu->insertSeparator();*/ - - DataObjectList selected; - getSelected( selected ); - - bool closed = false; - for ( DataObjectListIterator itr( selected ); itr.current() && !closed; ++itr ) - closed = hasClosed( listViewItem( itr.current() ) ); - - if ( closed ) - { - menu->insertItem( tr( "MEN_EXPAND_ALL" ), this, SLOT( onExpand() ) ); - menu->insertSeparator(); - } -} - -/*! - Expands item with all it's children -*/ -void OB_Browser::expand( QListViewItem* item ) -{ - if ( !item ) - return; - - item->setOpen( true ); - for ( QListViewItem* child = item->firstChild(); child; child = child->nextSibling() ) - expand( child ); -} - -/*! - \return true if item or one of it's children isn't opened -*/ -bool OB_Browser::hasClosed( QListViewItem* item ) const -{ - if ( !item ) - return false; - - if ( item->childCount() && !item->isOpen() ) - return true; - - bool has = false; - for ( QListViewItem* child = item->firstChild(); child && !has; child = child->nextSibling() ) - has = hasClosed( child ); - - return has; -} - -/*! - Removes SUIT object - \param obj - SUIT object to be removed - \param autoUpd - auto tree updating -*/ -void OB_Browser::removeObject( SUIT_DataObject* obj, const bool autoUpd ) -{ - if ( !obj ) - return; - - // Removing list view items from recursively for all children. - // Otherwise, "delete item" line will destroy all item's children, - // and will contain invalid pointers (see ~QListViewItem() description in Qt docs) - DataObjectList childList; - obj->children( childList, true ); - for ( DataObjectListIterator it( childList ); it.current(); ++it ) - { - it.current()->disconnect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); - myItems.remove( it.current() ); - } - - QListViewItem* item = listViewItem( obj ); - - obj->disconnect( this, SLOT( onDestroyed( SUIT_DataObject* ) ) ); - myItems.remove( obj ); - - if ( obj == myRoot ) - { - // remove all child list view items - setRootObject( 0 ); - return; - } - - if( !autoUpd ) - return; - - if ( isAutoUpdate() ) - { - SUIT_DataObject* pObj = item && item->parent() ? dataObject( item->parent() ) : 0; - updateTree( pObj, false ); - } - - delete item; -} - -/*! - Opens branches from 1 to autoOpenLevel() - \sa autoOpenLevel() -*/ -void OB_Browser::autoOpenBranches() -{ - openLevels(); -} - -/*! - Opens branch - \param item - \param level -*/ -void OB_Browser::openBranch( QListViewItem* item, const int level ) -{ - if ( level < 1 ) - return; - - while ( item ) - { - item->setOpen( true ); - openBranch( item->firstChild(), level - 1 ); - item = item->nextSibling(); - } -} - -/*! - SLOT: called on double click on item, emits signal -*/ -void OB_Browser::onDoubleClicked( QListViewItem* item ) -{ - if ( item ) - emit doubleClicked( dataObject( item ) ); -} - -/*! - Stores time of last modification -*/ -void OB_Browser::setModified() -{ - myModifiedTime = clock(); -} - diff --git a/src/ObjBrowser/OB_Browser.h b/src/ObjBrowser/OB_Browser.h deleted file mode 100755 index 5dfb52b29..000000000 --- a/src/ObjBrowser/OB_Browser.h +++ /dev/null @@ -1,204 +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 -// -#ifndef OB_BROWSER_H -#define OB_BROWSER_H - -#include "OB.h" - -#include - -#include -#include - -#include -#include -#include - -#ifdef WNT -#pragma warning( disable:4251 ) -#endif - -class QToolTip; -class OB_Filter; -class OB_ListView; -class OB_ListItem; - -/*! - \class OB_Browser - Represents object browser. Allows to get/set selection, - to drag-n-drop of objects, to determine item by SUIT object and - vice versa -*/ -class OB_EXPORT OB_Browser : public QFrame, public SUIT_PopupClient -{ - Q_OBJECT - - class ToolTip; - -public: - OB_Browser( QWidget* = 0, SUIT_DataObject* theRoot = 0 ); - virtual ~OB_Browser(); - - virtual QString popupClientType() const { return QString( "ObjectBrowser" ); } - - SUIT_DataObject* getRootObject() const; - virtual void setRootObject( SUIT_DataObject* theRoot = 0 ); - - int numberOfSelected() const; - - DataObjectList getSelected() const; - void getSelected( DataObjectList& ) const; - - virtual void setSelected( const SUIT_DataObject* theObject, const bool = false ); - virtual void setSelected( const DataObjectList& theObjLst, const bool = false ); - - bool isOpen( SUIT_DataObject* theObject ) const; - virtual void setOpen( SUIT_DataObject* theObject, const bool theOpen = true ); - - bool isAutoUpdate() const; - virtual void setAutoUpdate( const bool ); - - bool isAutoDeleteObjects() const; - virtual void setAutoDeleteObjects( const bool ); - - virtual void updateTree( SUIT_DataObject* = 0, const bool = false ); - virtual void replaceTree( SUIT_DataObject*, SUIT_DataObject* ); - - bool isShowToolTips(); - void setShowToolTips( const bool theDisplay ); - - void adjustWidth(); - - SUIT_DataObject* dataObjectAt( const QPoint& ) const; - - OB_Filter* filter() const; - void setFilter( OB_Filter* ); - - bool rootIsDecorated() const; - void setRootIsDecorated( const bool ); - - 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 ); - virtual void removeColumn( const int id ); - - void setNameTitle( const QString& ); - virtual void setNameTitle( const QIconSet&, const QString& ); - void setColumnTitle( const int id, const QString& ); - virtual void setColumnTitle( const int id, const QIconSet&, const QString& ); - - QString nameTitle() const; - QString columnTitle( const int ) const; - - bool isColumnVisible( const int ) const; - virtual void setColumnShown( const int, const bool ); - - virtual void setWidthMode( QListView::WidthMode ); - - QValueList columns() const; - - bool appropriateColumn( const int ) const; - virtual void setAppropriateColumn( const int, const bool ); - - virtual bool eventFilter(QObject* watched, QEvent* e); - - QListView* listView() const; - - virtual void contextMenuPopup( QPopupMenu* ); - - void setModified(); - unsigned long getModifiedTime() { return myModifiedTime; } - -signals: - void selectionChanged(); - void doubleClicked( SUIT_DataObject* ); - void dropped( DataObjectList, SUIT_DataObject*, int ); - -private slots: - void onExpand(); - void onColumnVisible( int ); - void onDestroyed( SUIT_DataObject* ); - void onDoubleClicked ( QListViewItem* ); - void onDropped( QPtrList, QListViewItem*, int ); - -protected: - void adjustWidth( QListViewItem* ); - virtual void updateView( SUIT_DataObject* = 0 ); - virtual void updateText(); - - virtual void keyPressEvent( QKeyEvent* ); - - SUIT_DataObject* dataObject( const QListViewItem* ) const; - QListViewItem* listViewItem( const SUIT_DataObject* ) const; - -private: - typedef QMap ItemMap; - typedef SUIT_DataObjectKeyHandle DataObjectKey; - typedef QMap DataObjectMap; - typedef QMap DataObjectKeyMap; - -private: - void expand( QListViewItem* ); - bool hasClosed( QListViewItem* ) const; - - void autoOpenBranches(); - void openBranch( QListViewItem*, const int ); - - void removeReferences( QListViewItem* ); - void removeConnections( SUIT_DataObject* ); - void createConnections( SUIT_DataObject* ); - void removeObject( SUIT_DataObject*, const bool = true ); - - void updateText( QListViewItem* ); - bool needToUpdateTexts( QListViewItem* ) const; - - DataObjectKey objectKey( QListViewItem* ) const; - DataObjectKey objectKey( SUIT_DataObject* ) const; - - QListViewItem* createTree( const SUIT_DataObject*, QListViewItem*, QListViewItem* = 0, const bool = false ); - QListViewItem* createItem( const SUIT_DataObject*, QListViewItem*, QListViewItem* = 0, const bool = false ); - - SUIT_DataObject* storeState( DataObjectMap&, DataObjectMap&, - DataObjectKeyMap&, DataObjectKeyMap&, DataObjectKey& ) const; - void restoreState( const DataObjectMap&, const DataObjectMap&, const SUIT_DataObject*, - const DataObjectKeyMap&, const DataObjectKeyMap&, const DataObjectKey& ); - -private: - friend class OB_BrowserSync; - - OB_ListView* myView; - SUIT_DataObject* myRoot; - ItemMap myItems; - QToolTip* myTooltip; - QMap myColumnIds; - bool myAutoUpdate; - bool myAutoDelObjs; - bool myShowToolTips; - bool myRootDecorated; - int myAutoOpenLevel; - - friend class OB_Browser::ToolTip; - - unsigned long myModifiedTime; -}; - -#endif diff --git a/src/ObjBrowser/OB_Filter.cxx b/src/ObjBrowser/OB_Filter.cxx deleted file mode 100644 index 99b0e3049..000000000 --- a/src/ObjBrowser/OB_Filter.cxx +++ /dev/null @@ -1,33 +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 "OB_Filter.h" - -/*! - Default constructor -*/ -OB_Filter::OB_Filter() -{ -} - -/*! - Destructor -*/ -OB_Filter::~OB_Filter() -{ -} diff --git a/src/ObjBrowser/OB_Filter.h b/src/ObjBrowser/OB_Filter.h deleted file mode 100644 index a75698d96..000000000 --- a/src/ObjBrowser/OB_Filter.h +++ /dev/null @@ -1,40 +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 -// -#ifndef OB_FILTER_H -#define OB_FILTER_H - -#include "OB.h" - -class SUIT_DataObject; - -/*! - \class OB_Filter - Base class for ObjectBrowser filter. - Filters selected objects by some condition. -*/ -class OB_EXPORT OB_Filter -{ -public: - OB_Filter(); - virtual ~OB_Filter(); - - virtual bool isOk( const SUIT_DataObject* ) const = 0; -}; - -#endif diff --git a/src/ObjBrowser/OB_ListItem.cxx b/src/ObjBrowser/OB_ListItem.cxx deleted file mode 100755 index eac68cd5f..000000000 --- a/src/ObjBrowser/OB_ListItem.cxx +++ /dev/null @@ -1,391 +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 "OB_ListItem.h" - -#include "OB_ListView.h" - -#include - -#include -#include - -#include -using namespace std; - -#ifdef WNT -#define min(a, b) (((a) < (b)) ? (a) : (b)) -#endif - -/*! - Constructor -*/ -template -ListItemF::ListItemF( T* theT, SUIT_DataObject* obj ) : -myT( theT ), -myObject( obj ) -{ -} - -/*! - Paints item -*/ -template -void ListItemF::paintC( QPainter* p, QColorGroup& cg, int c, int w, int align ) -{ -// QColorGroup colorGrp( cg ); - if ( myObject ) - { - if ( myObject->color( SUIT_DataObject::Text ).isValid() ) - cg.setColor( QColorGroup::Text, myObject->color( SUIT_DataObject::Text ) ); - if ( myObject->color( SUIT_DataObject::Base ).isValid() ) - cg.setColor( QColorGroup::Base, myObject->color( SUIT_DataObject::Base ) ); - if ( myObject->color( SUIT_DataObject::Foreground ).isValid() ) - cg.setColor( QColorGroup::Foreground, myObject->color( SUIT_DataObject::Foreground ) ); - if ( myObject->color( SUIT_DataObject::Background ).isValid() ) - cg.setColor( QColorGroup::Background, myObject->color( SUIT_DataObject::Background ) ); - if ( myObject->color( SUIT_DataObject::Highlight ).isValid() ) - cg.setColor( QColorGroup::Highlight, myObject->color( SUIT_DataObject::Highlight ) ); - if ( myObject->color( SUIT_DataObject::HighlightedText ).isValid() ) - cg.setColor( QColorGroup::HighlightedText, myObject->color( SUIT_DataObject::HighlightedText ) ); - } - - - p->fillRect( 0, 0, w, myT->height(), cg.brush( QColorGroup::Base ) ); - //int itemW = myT.width( p->fontMetrics(), myT.listView(), c ); - - //myT.paintCell( p, colorGrp, c, itemW, align ); -} - -/*! - Paints focused item -*/ -template -void ListItemF::paintFoc( QPainter* p, QColorGroup& cg, const QRect& r ) -{ - QRect rect = r; - rect.setWidth( myT->width( p->fontMetrics(), myT->listView(), 0 ) ); - //myT.paintFocus( p, cg, rect ); -} - -/*! - Set selection of item - \param s - selected state -*/ -template -void ListItemF::setSel( bool s ) -{ - QListView* lv = myT->listView(); - if ( s && lv && lv->inherits( "OB_ListView" ) ) - { - OB_ListView* objlv = (OB_ListView*)lv; - s = s && objlv->isOk( myT ); - } - - //myT.setSelected( s ); -} - -/*! - Updates name and pixmap of item -*/ -template -void ListItemF::update() -{ - SUIT_DataObject* obj = dataObject(); - if ( !obj ) - return; - - QString n = obj->name(); - if( myT->text( 0 )!=n ) - myT->setText( 0, n ); - - QPixmap p = obj->icon(); - int aIconW = p.width(); - if( aIconW > 0 ) - { - if( aIconW > 20 ) - { - QWMatrix aM; - double aScale = 20.0 / aIconW; - aM.scale( aScale, aScale ); - myT->setPixmap( 0, p.xForm( aM ) ); - } - else - myT->setPixmap( 0, p ); - } - - myT->setDragEnabled( obj->isDragable() ); - myT->setDropEnabled( true ); -} - -/*! - Constructor -*/ -OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListView* parent ) -: ListItemF( this, obj ), - QListViewItem(parent) -{ - update(); -} - -/*! - Constructor -*/ -OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListViewItem* parent ) -: ListItemF( this, obj ), - QListViewItem(parent) -{ - update(); -} - -/*! - Constructor -*/ -OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListView* parent, QListViewItem* after ) -: ListItemF( this, obj), -QListViewItem(parent, after ) -{ - update(); -} - -/*! - Constructor -*/ -OB_ListItem::OB_ListItem( SUIT_DataObject* obj, QListViewItem* parent, QListViewItem* after ) -: ListItemF( this,obj), -QListViewItem(parent, after ) -{ - update(); -} - -/*! - Destructor -*/ -OB_ListItem::~OB_ListItem() -{ -} - -/*! - Sets selection state of item - \param s - new state -*/ -void OB_ListItem::setSelected( bool s ) -{ - setSel( s ); - QListViewItem::setSelected( s ); -} - -/*! - Paints focus - \param p - painter - \param cg - color group - \param r - focus rectangle -*/ -void OB_ListItem::paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r ) -{ - QColorGroup col_group( cg ); - paintFoc( p, col_group, r ); - - QRect R( r ); - if ( listView() && !listView()->allColumnsShowFocus() ) - R.setWidth( width( p->fontMetrics(), listView(), 0 ) ); - - QListViewItem::paintFocus( p, col_group, R ); -} - -/*! - Paints item - \param p - painter - \param cg - color group - \param c - not used - \param w - width of item - \param align - alignment -*/ -void OB_ListItem::paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align ) -{ - QColorGroup col_group( cg ); - paintC( p, col_group, c ,w, align ); - - int W = w; - if ( listView() && !listView()->allColumnsShowFocus() ) - W = width( p->fontMetrics(), listView(), c ); - - QListViewItem::paintCell( p, col_group, c, min( W, w ), align ); -} - -/*! - \return custom RTTI info -*/ -int OB_ListItem::RTTI() -{ - return 1000; -} - -/*! - \return custom RTTI info -*/ -int OB_ListItem::rtti() const -{ - return RTTI(); -} - -/*! - Sets item text - \param column - column index - \param text - new text -*/ -void OB_ListItem::setText( int column, const QString& text ) -{ - QListViewItem::setText( column, text ); - QFontMetrics fm = listView()->fontMetrics(); - int necessary = width( fm, listView(), column ), - current = listView()->columnWidth( column ); - - if( listView()->columnWidthMode( column )==QListView::Maximum && necessary>current ) - listView()->setColumnWidth( column, necessary ); -} - -/*! - Constructor -*/ -OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListView* parent, Type type ) -: ListItemF( this, obj), -QCheckListItem( parent, "", type ) -{ - update(); -} - -/*! - Constructor -*/ -OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListViewItem* parent, Type type ) -: ListItemF( this, obj), -QCheckListItem( parent, "", type ) -{ - update(); -} - -/*! - Constructor -*/ -OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListView* parent, QListViewItem* after, Type type ) -: ListItemF( this, obj), -#if defined(QT_VERSION) && QT_VERSION >= 0x030101 - QCheckListItem( parent, after, "", type ) -#else - QCheckListItem( parent, "", type ) -#endif -{ - update(); -} - -/*! - Constructor -*/ -OB_CheckListItem::OB_CheckListItem( SUIT_DataObject* obj, QListViewItem* parent, QListViewItem* after, Type type ) -: ListItemF( this, obj), -#if defined(QT_VERSION) && QT_VERSION >= 0x030101 - QCheckListItem( parent, after, "", type ) -#else - QCheckListItem( parent, "", type ) -#endif -{ - update(); -} - -/*! - Destructor -*/ -OB_CheckListItem::~OB_CheckListItem() -{ -} - -/*! - Sets selection state of item - \param s - new state -*/ -void OB_CheckListItem::setSelected( bool s ) -{ - setSel( s ); - QCheckListItem::setSelected( s ); -} - -/*! - Paints focus - \param p - painter - \param cg - color group - \param r - focus rectangle -*/ -void OB_CheckListItem::paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r ) -{ - QColorGroup col_group( cg ); - paintFoc( p, col_group, r ); - - QRect R( r ); - if ( listView() && !listView()->allColumnsShowFocus() ) - R.setWidth( width( p->fontMetrics(), listView(), 0 ) ); - - QCheckListItem::paintFocus( p, col_group, R ); -} - -/*! - Paints item - \param p - painter - \param cg - color group - \param c - not used - \param w - width of item - \param align - alignment -*/ -void OB_CheckListItem::paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align ) -{ - QColorGroup col_group( cg ); - paintC( p, col_group, c ,w, align ); - - int W = w; - if ( listView() && !listView()->allColumnsShowFocus() ) - W = width( p->fontMetrics(), listView(), c ); - - QCheckListItem::paintCell( p, col_group, c, min( W, w ), align ); -} - -/*! - \return custom RTTI info -*/ -int OB_CheckListItem::RTTI() -{ - return OB_ListItem::RTTI() + 1; -} - -/*! - \return custom RTTI info -*/ -int OB_CheckListItem::rtti() const -{ - return RTTI(); -} - -/*! - SLOT: called if checked state is changed, changes corresponding state of SUIT object -*/ -void OB_CheckListItem::stateChange( bool on ) -{ - QCheckListItem::stateChange( on ); - - if ( dataObject() ) - dataObject()->setOn( on ); -} diff --git a/src/ObjBrowser/OB_ListItem.h b/src/ObjBrowser/OB_ListItem.h deleted file mode 100755 index 40f7259e4..000000000 --- a/src/ObjBrowser/OB_ListItem.h +++ /dev/null @@ -1,115 +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 -// - -#ifndef OB_LISTITEM_H -#define OB_LISTITEM_H - -#include "OB.h" - -#include - -class SUIT_DataObject; - -/*! - \class ListItemF - Base template class for ListViewItems and CheckListItems -*/ -template class ListItemF -{ -public: - ListItemF( T*, SUIT_DataObject* ); - /*ListItem( SUIT_DataObject*, QListView* ); - ListItem( SUIT_DataObject*, QListViewItem* ); - ListItem( SUIT_DataObject*, QListView*, QListViewItem* ); - ListItem( SUIT_DataObject*, QListViewItem*, QListViewItem* ); - - ListItem( SUIT_DataObject*, QListView*, int ); - ListItem( SUIT_DataObject*, QListViewItem*, int ); - ListItem( SUIT_DataObject*, QListView*, QListViewItem*, int ); - ListItem( SUIT_DataObject*, QListViewItem*, QListViewItem*, int );*/ - - void setSel( bool s ); - inline SUIT_DataObject* dataObject() const { return myObject; } - void paintFoc( QPainter* p, QColorGroup& cg, const QRect& r ); - void paintC( QPainter* p, QColorGroup& cg, int c, int w, int align ); - -//protected: - void update(); - -protected: - SUIT_DataObject* myObject; - T* myT; -}; - -/*! - \class OB_ListItem - Provides custom list item for Object Browser tree -*/ -class OB_EXPORT OB_ListItem : public ListItemF, public QListViewItem -{ -public: - OB_ListItem( SUIT_DataObject*, QListView* ); - OB_ListItem( SUIT_DataObject*, QListViewItem* ); - OB_ListItem( SUIT_DataObject*, QListView*, QListViewItem* ); - OB_ListItem( SUIT_DataObject*, QListViewItem*, QListViewItem* ); - - virtual ~OB_ListItem(); - - virtual void setSelected( bool s ); - virtual void paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r ); - virtual void paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align ); - - virtual void setText ( int column, const QString & text ); - - virtual int rtti() const; - - static int RTTI(); -}; - -/*! - \class OB_CheckListItem - Provides custom list item with check box -*/ -class OB_EXPORT OB_CheckListItem : public ListItemF, public QCheckListItem -{ -public: - OB_CheckListItem( SUIT_DataObject*, QListView*, Type = CheckBox ); - OB_CheckListItem( SUIT_DataObject*, QListViewItem*, Type = CheckBox ); - OB_CheckListItem( SUIT_DataObject*, QListView*, QListViewItem*, Type = CheckBox ); - OB_CheckListItem( SUIT_DataObject*, QListViewItem*, QListViewItem*, Type = CheckBox ); - - virtual ~OB_CheckListItem(); - - virtual void setSelected( bool s ); - virtual void paintFocus( QPainter* p, const QColorGroup& cg, const QRect& r ); - virtual void paintCell( QPainter* p, const QColorGroup& cg, int c, int w, int align ); - - - virtual int rtti() const; - - static int RTTI(); - -protected: - void stateChange( bool ); - -//private: -// void update(); -}; - -#endif diff --git a/src/ObjBrowser/OB_ListView.cxx b/src/ObjBrowser/OB_ListView.cxx deleted file mode 100755 index 728e12c27..000000000 --- a/src/ObjBrowser/OB_ListView.cxx +++ /dev/null @@ -1,275 +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 "OB_ListView.h" - -#include "OB_Filter.h" -#include "OB_ListItem.h" - -#include - -#include - -/*! - Constructor -*/ -OB_ListView::OB_ListView( QWidget* parent, const char* name, WFlags f ) -: QtxListView( parent, name, f ), -myFilter( 0 ) -{ -} - -/*! - Constructor -*/ -OB_ListView::OB_ListView( const int state, QWidget* parent, const char* name, WFlags f ) -: QtxListView( state, parent, name, f ), -myFilter( 0 ) -{ -} - -/*! - Destructor -*/ -OB_ListView::~OB_ListView() -{ - delete myFilter; -} - -/*! - \return filter -*/ -OB_Filter* OB_ListView::filter() const -{ - return myFilter; -} - -/*! - Changes filter - \param f - new filter -*/ -void OB_ListView::setFilter( OB_Filter* f ) -{ - if ( myFilter == f ) - return; - - delete myFilter; - myFilter = f; -} - -/*! - \return true if item passes filter -*/ -bool OB_ListView::isOk( QListViewItem* item ) const -{ - bool ok = true; - SUIT_DataObject* obj = dataObject( item ); - if ( obj && filter() ) - ok = filter()->isOk( obj ); - return ok; -} - -/*! - Creates new drag object -*/ -QDragObject* OB_ListView::dragObject() -{ - myItems.clear(); - - for ( QListViewItemIterator it( this ); it.current(); ++it ) - if ( it.current()->isSelected() ) - myItems.append( it.current() ); - - return new QTextDrag( "", this ); -} - -/*! - Custom drag enter event filter -*/ -void OB_ListView::dragEnterEvent( QDragEnterEvent* e ) -{ - e->accept(); -} - -/*! - Custom drag move event filter -*/ -void OB_ListView::dragMoveEvent( QDragMoveEvent* e ) -{ - QListViewItem* item = dropItem( e ); - - if ( isDropAccepted( item ) ) - { - setCurrentItem( item ); - e->accept( true ); - } - else - e->accept( false ); -} - -/*! - Custom drop event filter -*/ -void OB_ListView::dropEvent( QDropEvent* e ) -{ - QListViewItem* item = dropItem( e ); - if ( isDropAccepted( item ) ) - { - e->accept(); - emit dropped( myItems, item, e->action() ); - } - myItems.clear(); -} - -/*! - Custom key press event filter -*/ -void OB_ListView::keyPressEvent( QKeyEvent* ke ) -{ - if ( ( ke->key() == Qt::Key_Plus || ke->key() == Qt::Key_Minus ) && ke->state() & ControlButton ) - { - bool isOpen = ke->key() == Qt::Key_Plus; - for ( QListViewItemIterator it( this ); it.current(); ++it ) - if ( it.current()->childCount() ) - it.current()->setOpen( isOpen ); - } - else - QtxListView::keyPressEvent( ke ); -} - -/*! - Finds item, in that dragged objects are dropped by QDropEvent - \return tree item -*/ -QListViewItem* OB_ListView::dropItem( QDropEvent* e ) const -{ - QListViewItem* item = 0; - if ( e ) - item = itemAt( QPoint( e->pos().x() - viewport()->x(), e->pos().y() - viewport()->y() ) ); - - return item; -} - -/*! - \return SUIT object by tree item - \param item - tree item -*/ -SUIT_DataObject* OB_ListView::dataObject( QListViewItem* item ) const -{ - if ( !item ) - return 0; - - SUIT_DataObject* obj = 0; - - if ( dynamic_cast( item ) ) - obj = dynamic_cast( item )->dataObject(); - else if ( dynamic_cast( item ) ) - obj = dynamic_cast( item )->dataObject(); - - return obj; -} - -/*! - \return true if it is possible to drop into item - \param item - tree item to be checked -*/ -bool OB_ListView::isDropAccepted( QListViewItem* item ) const -{ - bool res = true; - - for ( QPtrListIterator it( myItems ); it.current() && res; ++it ) - res = res && isDropAccepted( it.current(), item ); - - return res; -} - -/*! - \return true if it is possible to drop one item into other - \param drag - dragged item - \param drop - destination item -*/ -bool OB_ListView::isDropAccepted( QListViewItem* drag, QListViewItem* drop ) const -{ - SUIT_DataObject* dragObj = dataObject( drag ); - SUIT_DataObject* dropObj = dataObject( drop ); - - if ( !dragObj || !dropObj ) - return false; - - return dropObj->isDropAccepted( dragObj ); -} - -/*! - Sets column width - \param col - column index - \param width - column width -*/ -void OB_ListView::setColumnWidth( int col, int width ) -{ - int max = columnMaxWidth( col ); - if ( max>0 && width>max ) - width = max; - - QtxListView::setColumnWidth( col, width ); -} - -/*! - \return column max width - \param col - column index -*/ -int OB_ListView::columnMaxWidth( const int col ) const -{ - int res = -1; - if( myMaxColWidth.contains( col ) ) - res = myMaxColWidth[col]; - else if( myMaxColRatio.contains( col ) ) - res = int( myMaxColRatio[col]*height() ); - return res; -} - -/*! - Changes column max width - \param col - column index - \param w - column max width -*/ -void OB_ListView::setColumnMaxWidth( const int col, const int w ) -{ - myMaxColWidth.insert( col, w ); -} - -/*! - \return column max ratio - \param col - column index -*/ -double OB_ListView::columnMaxRatio( const int col ) const -{ - double res = 0.0; - if( myMaxColRatio.contains( col ) ) - res = myMaxColRatio[col]; - return res; -} - -/*! - Changes column max ratio - \param col - column index - \param w - column max ratio -*/ -void OB_ListView::setColumnMaxRatio( const int col, const double r ) -{ - myMaxColRatio.insert( col, r ); -} diff --git a/src/ObjBrowser/OB_ListView.h b/src/ObjBrowser/OB_ListView.h deleted file mode 100755 index 7a591e5a2..000000000 --- a/src/ObjBrowser/OB_ListView.h +++ /dev/null @@ -1,90 +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 -// -#ifndef OB_LISTVIEW_H -#define OB_LISTVIEW_H - -#include "OB.h" - - -#include - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include - -class OB_Filter; -class QListViewItem; -class SUIT_DataObject; - -/*! - \class OB_ListView - Special list view for ObjectBrowser. - Allows drag-n-drop, filtering of selected objects, column management. -*/ -class OB_EXPORT OB_ListView : public QtxListView -{ - Q_OBJECT - -public: - OB_ListView( QWidget* = 0, const char* = 0, WFlags = 0 ); - OB_ListView( const int, QWidget* = 0, const char* = 0, WFlags = 0 ); - virtual ~OB_ListView(); - - OB_Filter* filter() const; - void setFilter( OB_Filter* ); - - bool isOk( QListViewItem* ) const; - virtual void setColumnWidth( int, int ); - int columnMaxWidth( const int ) const; - void setColumnMaxWidth( const int, const int ); - double columnMaxRatio( const int ) const; - void setColumnMaxRatio( const int, const double ); - -signals: - void dropped( QPtrList, QListViewItem*, int ); - -protected: - virtual QDragObject* dragObject(); - virtual void dropEvent( QDropEvent* ); - virtual void dragMoveEvent( QDragMoveEvent* ); - virtual void dragEnterEvent( QDragEnterEvent* ); - - virtual void keyPressEvent( QKeyEvent* ); - -private: - void updateHeader(); - QListViewItem* dropItem( QDropEvent* ) const; - SUIT_DataObject* dataObject( QListViewItem* ) const; - bool isDropAccepted( QListViewItem* ) const; - bool isDropAccepted( QListViewItem*, QListViewItem* ) const; - -protected: - QPtrList myItems; - OB_Filter* myFilter; - QMap myMaxColWidth; - QMap myMaxColRatio; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/ObjBrowser/resources/OB_msg_en.po b/src/ObjBrowser/resources/OB_msg_en.po deleted file mode 100755 index 4b18212e9..000000000 --- a/src/ObjBrowser/resources/OB_msg_en.po +++ /dev/null @@ -1,32 +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 -# -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -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" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -msgid "MEN_EXPAND_ALL" -msgstr "Expand All" - diff --git a/src/Plot2d/Makefile.in b/src/Plot2d/Makefile.in deleted file mode 100755 index 73af7206c..000000000 --- a/src/Plot2d/Makefile.in +++ /dev/null @@ -1,96 +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 \ - Plot2d_ToolTip.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 \ - Plot2d_ToolTip.cxx - -LIB_MOC = \ - Plot2d_FitDataDlg.h \ - Plot2d_SetupViewDlg.h \ - Plot2d_ViewFrame.h \ - Plot2d_ViewManager.h \ - Plot2d_ViewModel.h \ - Plot2d_ViewWindow.h \ - Plot2d_SetupCurveDlg.h \ - Plot2d_ToolTip.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.h b/src/Plot2d/Plot2d.h deleted file mode 100755 index 20deb6ec1..000000000 --- a/src/Plot2d/Plot2d.h +++ /dev/null @@ -1,31 +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 -// -#ifdef WNT -#ifdef PLOT2D_EXPORTS -#define PLOT2D_EXPORT __declspec(dllexport) -#else -#define PLOT2D_EXPORT __declspec(dllimport) -#endif -#else -#define PLOT2D_EXPORT -#endif - -#if defined WNT -#pragma warning ( disable: 4251 ) -#endif diff --git a/src/Plot2d/Plot2d_Curve.cxx b/src/Plot2d/Plot2d_Curve.cxx deleted file mode 100755 index bec633fdc..000000000 --- a/src/Plot2d/Plot2d_Curve.cxx +++ /dev/null @@ -1,417 +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 "Plot2d_Curve.h" -#include - -/*! - Constructor -*/ -Plot2d_Curve::Plot2d_Curve() -: myHorTitle( "" ), myVerTitle( "" ), -myHorUnits( "" ), myVerUnits( "" ), -myAutoAssign( true ), myColor( 0,0,0 ), myMarker( Circle ), myLine( Solid ), myLineWidth( 0 ), -myYAxis( QwtPlot::yLeft ) -{ -} - -/*! - Destructor -*/ -Plot2d_Curve::~Plot2d_Curve() -{ -} - -/*! - Copy constructor. Makes deep copy of data. -*/ -Plot2d_Curve::Plot2d_Curve( const Plot2d_Curve& curve ) -{ - myAutoAssign = curve.isAutoAssign(); - myHorTitle = curve.getHorTitle(); - myVerTitle = curve.getVerTitle(); - myHorUnits = curve.getHorUnits(); - myVerUnits = curve.getVerUnits(); - myColor = curve.getColor(); - myMarker = curve.getMarker(); - myLine = curve.getLine(); - myLineWidth = curve.getLineWidth(); - myPoints = curve.getPointList(); -} - -/*! - operator=. Makes deep copy of data. -*/ -Plot2d_Curve& Plot2d_Curve::operator=( const Plot2d_Curve& curve ) -{ - myAutoAssign = curve.isAutoAssign(); - myHorTitle = curve.getHorTitle(); - myVerTitle = curve.getVerTitle(); - myHorUnits = curve.getHorUnits(); - myVerUnits = curve.getVerUnits(); - myColor = curve.getColor(); - myMarker = curve.getMarker(); - myLine = curve.getLine(); - myLineWidth = curve.getLineWidth(); - myPoints = curve.getPointList(); - return *this; -} - -/*! - \return title of table -*/ -QString Plot2d_Curve::getTableTitle() const -{ - return QString(); -} - -/*! - Sets curve's horizontal title -*/ -void Plot2d_Curve::setHorTitle( const QString& title ) -{ - myHorTitle = title; -} - -/*! - Gets curve's horizontal title -*/ -QString Plot2d_Curve::getHorTitle() const -{ - return myHorTitle; -} - -/*! - Sets curve's vertical title -*/ -void Plot2d_Curve::setVerTitle( const QString& title ) -{ - myVerTitle = title; -} - -/*! - Gets curve's vertical title -*/ -QString Plot2d_Curve::getVerTitle() const -{ - return myVerTitle; -} - -/*! - Sets curve's horizontal units -*/ -void Plot2d_Curve::setHorUnits( const QString& units ) -{ - myHorUnits = units; -} - -/*! - Gets curve's horizontal units -*/ -QString Plot2d_Curve::getHorUnits() const -{ - return myHorUnits; -} - -/*! - Sets curve's vertical units -*/ -void Plot2d_Curve::setVerUnits( const QString& units ) -{ - myVerUnits = units; -} - -/*! - Gets curve's vertical units -*/ -QString Plot2d_Curve::getVerUnits() const -{ - return myVerUnits; -} - -/*! - Adds one point for curve. -*/ -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, const QString& txt) -{ - Plot2d_Point aPoint; - aPoint.x = theX; - aPoint.y = theY; - aPoint.text = txt; - - QValueList::iterator aIt; - int aCurrent = 0; - for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) { - if (thePos == aCurrent) { - myPoints.insert(aIt, aPoint); - return; - } - aCurrent++; - } - myPoints.append(aPoint); -} - -/*! - Delete one point for curve on some position. -*/ -void Plot2d_Curve::deletePoint(int thePos) -{ - QValueList::iterator aIt; - int aCurrent = 0; - for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) { - if (thePos == aCurrent) { - myPoints.remove(aIt); - return; - } - aCurrent++; - } -} - -/*! - Remove all points for curve. -*/ -void Plot2d_Curve::clearAllPoints() -{ - myPoints.clear(); -} - -/*! - Gets curve's data : abscissas of points -*/ -pointList Plot2d_Curve::getPointList() const -{ - return myPoints; -} - -/*! - Sets curve's data. -*/ -void Plot2d_Curve::setData( const double* hData, const double* vData, long size, const QStringList& lst ) -{ - clearAllPoints(); - 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 ); -} - -/*! - Gets curve's data : abscissas of points -*/ -double* Plot2d_Curve::horData() const -{ - int aNPoints = nbPoints(); - double* aX = new double[aNPoints]; - for (int i = 0; i < aNPoints; i++) { - aX[i] = myPoints[i].x; - } - return aX; -} - -/*! - Gets curve's data : ordinates of points -*/ -double* Plot2d_Curve::verData() const -{ - int aNPoints = nbPoints(); - double* aY = new double[aNPoints]; - for (int i = 0; i < aNPoints; i++) { - aY[i] = myPoints[i].y; - } - return aY; -} - -/*! - Gets curve's data : number of points -*/ -int Plot2d_Curve::nbPoints() const -{ - return myPoints.count(); -} - -/*! - Returns true if curve has no data -*/ -bool Plot2d_Curve::isEmpty() const -{ - return myPoints.isEmpty(); -} - -/*! - Sets curve's AutoAssign flag - in this case attributes will be set automatically -*/ -void Plot2d_Curve::setAutoAssign( bool on ) -{ - myAutoAssign = on; -} - -/*! - Gets curve's AutoAssign flag state -*/ -bool Plot2d_Curve::isAutoAssign() const -{ - return myAutoAssign; -} - -/*! - Sets curve's color ( and resets AutoAssign flag ) -*/ -void Plot2d_Curve::setColor( const QColor& color ) -{ - myColor = color; - myAutoAssign = false; -} - -/*! - Gets curve's color -*/ -QColor Plot2d_Curve::getColor() const -{ - return myColor; -} - -/*! - Sets curve's marker ( and resets AutoAssign flag ) -*/ -void Plot2d_Curve::setMarker( MarkerType marker ) -{ - myMarker = marker; - myAutoAssign = false; -} - -/*! - Gets curve's marker -*/ -Plot2d_Curve::MarkerType Plot2d_Curve::getMarker() const -{ - return myMarker; -} - -/*! - Sets curve's line type and width ( and resets AutoAssign flag ) - NOTE : A line width of 0 will produce a 1 pixel wide line using a fast algorithm for diagonals. - A line width of 1 will also produce a 1 pixel wide line, but uses a slower more accurate - algorithm for diagonals. - For horizontal and vertical lines a line width of 0 is the same as a line width of 1. -*/ -void Plot2d_Curve::setLine( LineType line, const int lineWidth ) -{ - myLine = line; - myLineWidth = lineWidth; - if ( myLineWidth < 0 ) myLineWidth = 0; - myAutoAssign = false; -} - -/*! - Gets curve's line type -*/ -Plot2d_Curve::LineType Plot2d_Curve::getLine() const -{ - return myLine; -} - -/*! - Gets curve's line width -*/ -int Plot2d_Curve::getLineWidth() const -{ - return myLineWidth; -} - -/*! - Sets curve's y axis -*/ -void Plot2d_Curve::setYAxis(QwtPlot::Axis theYAxis) -{ - if(theYAxis == QwtPlot::yLeft || theYAxis == QwtPlot::yRight) - myYAxis = theYAxis; -} - -/*! - Gets curve's y axis -*/ -QwtPlot::Axis Plot2d_Curve::getYAxis() const -{ - return myYAxis; -} - -/*! - Gets curve's minimal abscissa -*/ -double Plot2d_Curve::getMinX() const -{ - QValueList::const_iterator aIt; - double aMinX = 1e150; - //int aCurrent = 0; - for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) { - if ( (*aIt).x < aMinX ) - aMinX = (*aIt).x; - } - return aMinX; -} - -/*! - Gets curve's minimal ordinate -*/ -double Plot2d_Curve::getMinY() const -{ - QValueList::const_iterator aIt; - double aMinY = 1e150; - //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 deleted file mode 100755 index bd3be97bd..000000000 --- a/src/Plot2d/Plot2d_Curve.h +++ /dev/null @@ -1,112 +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 -// -#ifndef PLOT2D_CURVE_H -#define PLOT2D_CURVE_H - -#include "Plot2d.h" -#include -#include -#include - -class QColor; - -typedef struct -{ - double x; - double y; - QString text; -} Plot2d_Point; - -typedef QValueList pointList; - -class PLOT2D_EXPORT Plot2d_Curve -{ -public: - enum MarkerType { None, Circle, Rectangle, Diamond, - DTriangle, UTriangle, LTriangle, RTriangle, - Cross, XCross }; - enum LineType { NoPen, Solid, Dash, Dot, DashDot, DashDotDot }; - - Plot2d_Curve(); - virtual ~Plot2d_Curve(); - Plot2d_Curve( const Plot2d_Curve& curve ); - Plot2d_Curve& operator= ( const Plot2d_Curve& curve ); - - virtual QString getTableTitle() const; - - void setHorTitle( const QString& title ); - QString getHorTitle() const; - void setVerTitle( const QString& title ); - QString getVerTitle() const; - void setHorUnits( const QString& units ); - QString getHorUnits() const; - void setVerUnits( const QString& units ); - QString getVerUnits() const; - 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, 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; - - void setAutoAssign( bool on ); - bool isAutoAssign() const; - void setColor( const QColor& color ); - QColor getColor() const; - void setMarker( MarkerType marker ); - MarkerType getMarker() const; - void setLine( LineType line, const int lineWidth = 0 ); - LineType getLine() const; - int getLineWidth() const; - void setYAxis(QwtPlot::Axis theYAxis); - QwtPlot::Axis getYAxis() const; - - // Protection against QwtCurve::drawLines() bug in Qwt 0.4.x: - // it crashes if switched to X/Y logarithmic mode, when one or more points have - // non-positive X/Y coordinate - double getMinX() const; - double getMinY() const; - -protected: - bool myAutoAssign; - QString myHorTitle; - QString myVerTitle; - QString myHorUnits; - QString myVerUnits; - QColor myColor; - MarkerType myMarker; - LineType myLine; - int myLineWidth; - QwtPlot::Axis myYAxis; - - pointList myPoints; -}; - -typedef QPtrList curveList; - -#endif diff --git a/src/Plot2d/Plot2d_FitDataDlg.cxx b/src/Plot2d/Plot2d_FitDataDlg.cxx deleted file mode 100755 index 9ff544a07..000000000 --- a/src/Plot2d/Plot2d_FitDataDlg.cxx +++ /dev/null @@ -1,288 +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 : Plot2d_FitDataDlg.cxx -// Author : Vadim SANDLER -// Module : SALOME -// $Header$ - -#include "Plot2d_FitDataDlg.h" -#include -#include -#include -#include -#include -#include -#include - -#define SPACING_SIZE 6 -#define MARGIN_SIZE 11 -#define MIN_EDIT_SIZE 100 - -/*! - Constructor -*/ -Plot2d_FitDataDlg::Plot2d_FitDataDlg( QWidget* parent, bool secondAxisY ) - : QDialog( parent ? parent : 0, - "Plot2d_FitDataDlg", - true, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - myY2MinEdit( 0 ), myY2MaxEdit( 0 ), mySecondAxisY( secondAxisY ) - -{ - setCaption( tr( "FIT_DATA_TLT" ) ); - setSizeGripEnabled( TRUE ); - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setSpacing( SPACING_SIZE ); - topLayout->setMargin( MARGIN_SIZE ); - - // 'Range' group - myRangeGrp = new QButtonGroup( this ); - myRangeGrp->setColumnLayout( 0, Qt::Vertical ); - myRangeGrp->layout()->setSpacing( 0 ); - myRangeGrp->layout()->setMargin( 0 ); - QGridLayout* aGridLayout = new QGridLayout( myRangeGrp->layout() ); - aGridLayout->setAlignment( Qt::AlignTop ); - aGridLayout->setMargin( MARGIN_SIZE ); - aGridLayout->setSpacing( SPACING_SIZE ); - - myModeAllRB = new QRadioButton( tr( "FIT_ALL" ), myRangeGrp ); - myModeHorRB = new QRadioButton( tr( "FIT_HORIZONTAL" ), myRangeGrp ); - myModeVerRB = new QRadioButton( tr( "FIT_VERTICAL" ), myRangeGrp ); - - QDoubleValidator* aValidator = new QDoubleValidator( this ); - myXMinEdit = new QLineEdit( myRangeGrp ); - myXMinEdit->setValidator( aValidator ); - myXMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myXMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - myXMinEdit->setText( "0.0" ); - - myYMinEdit = new QLineEdit( myRangeGrp ); - myYMinEdit->setValidator( aValidator ); - myYMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myYMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - myYMinEdit->setText( "0.0" ); - - myXMaxEdit = new QLineEdit( myRangeGrp ); - myXMaxEdit->setValidator( aValidator ); - myXMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myXMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - myXMaxEdit->setText( "0.0" ); - - myYMaxEdit = new QLineEdit( myRangeGrp ); - myYMaxEdit->setValidator( aValidator ); - myYMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myYMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - myYMaxEdit->setText( "0.0" ); - - if (mySecondAxisY) { - myY2MinEdit = new QLineEdit( myRangeGrp ); - myY2MinEdit->setValidator( aValidator ); - myY2MinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myY2MinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - myY2MinEdit->setText( "0.0" ); - - myY2MaxEdit = new QLineEdit( myRangeGrp ); - myY2MaxEdit->setValidator( aValidator ); - myY2MaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myY2MaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - myY2MaxEdit->setText( "0.0" ); - } - - QFrame* aHLine = new QFrame( myRangeGrp ); - aHLine->setFrameStyle( QFrame::HLine | QFrame::Sunken ); - - QHBoxLayout* aModeLayout = new QHBoxLayout; - aModeLayout->setMargin( 0 ); - aModeLayout->setSpacing( SPACING_SIZE ); - aModeLayout->addWidget( myModeAllRB ); - aModeLayout->addWidget( myModeHorRB ); - aModeLayout->addWidget( myModeVerRB ); - - QLabel* horLab = new QLabel( tr( "HORIZONTAL_AXIS" ), myRangeGrp ); - QLabel* verLab = new QLabel( tr( "VERTICAL_AXIS" ), myRangeGrp ); - if (mySecondAxisY) - verLab->setText( tr( "VERTICAL_LEFT_AXIS" ) ); - - QFont font = horLab->font(); font.setBold( true ); - horLab->setFont( font ); verLab->setFont( font ); - - aGridLayout->addMultiCellLayout( aModeLayout, 0, 0, 0, 4 ); - aGridLayout->addMultiCellWidget( aHLine, 1, 1, 0, 4 ); - aGridLayout->addWidget ( horLab, 2, 0 ); - aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ), - 2, 1 ); - aGridLayout->addWidget ( myXMinEdit, 2, 2 ); - aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ), - 2, 3 ); - aGridLayout->addWidget ( myXMaxEdit, 2, 4 ); - aGridLayout->addWidget ( verLab, 3, 0 ); - aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ), - 3, 1 ); - aGridLayout->addWidget ( myYMinEdit, 3, 2 ); - aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ), - 3, 3 ); - aGridLayout->addWidget ( myYMaxEdit, 3, 4 ); - - if (mySecondAxisY) { - QLabel* ver2Lab = new QLabel(tr( "VERTICAL_RIGHT_AXIS" ), myRangeGrp ); - ver2Lab->setFont( font ); - aGridLayout->addWidget ( ver2Lab, 4, 0 ); - aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ), - 4, 1 ); - aGridLayout->addWidget ( myY2MinEdit, 4, 2 ); - aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ), - 4, 3 ); - aGridLayout->addWidget ( myY2MaxEdit, 4, 4 ); - } - - // OK/Cancel buttons - myOkBtn = new QPushButton( tr( "BUT_OK" ), this, "buttonOk" ); - myOkBtn->setAutoDefault( TRUE ); - myOkBtn->setDefault( TRUE ); - myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this, "buttonCancel" ); - myCancelBtn->setAutoDefault( TRUE ); - - topLayout->addMultiCellWidget( myRangeGrp, 0, 0, 0, 2 ); - topLayout->addWidget( myOkBtn, 1, 0 ); - topLayout->setColStretch( 1, 5 ); - topLayout->addWidget( myCancelBtn, 1, 2 ); - - // connect signals - connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) ); - connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); - connect( myRangeGrp, SIGNAL( clicked( int ) ), this, SLOT( onModeChanged( int ) ) ); - - // initial state - myModeAllRB->setChecked( true ); - onModeChanged( 0 ); -} - -/*! - Sets range -*/ -void Plot2d_FitDataDlg::setRange( const double xMin, - const double xMax, - const double yMin, - const double yMax, - const double y2Min, - const double y2Max) -{ - myXMinEdit->setText( QString::number( xMin ) ); - myXMaxEdit->setText( QString::number( xMax ) ); - myYMinEdit->setText( QString::number( yMin ) ); - myYMaxEdit->setText( QString::number( yMax ) ); - if (mySecondAxisY) { - myY2MinEdit->setText( QString::number( y2Min ) ); - myY2MaxEdit->setText( QString::number( y2Max ) ); - } -} - -/*! - Gets range, returns mode (see getMode()) -*/ -int Plot2d_FitDataDlg::getRange( double& xMin, - double& xMax, - double& yMin, - double& yMax, - double& y2Min, - double& y2Max) -{ - xMin = myXMinEdit->text().toDouble(); - xMax = myXMaxEdit->text().toDouble(); - yMin = myYMinEdit->text().toDouble(); - yMax = myYMaxEdit->text().toDouble(); - if (mySecondAxisY) { - y2Min = myY2MinEdit->text().toDouble(); - y2Max = myY2MaxEdit->text().toDouble(); - } - else { - y2Min = 0; - y2Max = 0; - } - int myMode = 0; - if ( myModeAllRB->isChecked() ) - myMode = 0; - if ( myModeHorRB->isChecked() ) - myMode = 1; - if ( myModeVerRB->isChecked() ) - myMode = 2; - return myMode; -} - -/*! - Gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical -*/ -int Plot2d_FitDataDlg::getMode() -{ - int myMode = 0; - if ( myModeAllRB->isChecked() ) - myMode = 0; - if ( myModeHorRB->isChecked() ) - myMode = 1; - if ( myModeVerRB->isChecked() ) - myMode = 2; - return myMode; -} - -/*! - Called when range mode changed -*/ -void Plot2d_FitDataDlg::onModeChanged(int mode) -{ - bool badFocus; - switch( mode ) { - case 0: // fit all mode - myXMinEdit->setEnabled(true); - myXMaxEdit->setEnabled(true); - myYMinEdit->setEnabled(true); - myYMaxEdit->setEnabled(true); - if (mySecondAxisY) { - myY2MinEdit->setEnabled(true); - myY2MaxEdit->setEnabled(true); - } - break; - case 1: // fit horizontal mode - badFocus = myYMinEdit->hasFocus() || myYMaxEdit->hasFocus(); - myXMinEdit->setEnabled(true); - myXMaxEdit->setEnabled(true); - myYMinEdit->setEnabled(false); - myYMaxEdit->setEnabled(false); - if (mySecondAxisY) { - myY2MinEdit->setEnabled(false); - myY2MaxEdit->setEnabled(false); - } - if (badFocus) - myXMinEdit->setFocus(); - break; - case 2: // fit vertical mode - badFocus = myXMinEdit->hasFocus() || myXMaxEdit->hasFocus(); - myXMinEdit->setEnabled(false); - myXMaxEdit->setEnabled(false); - myYMinEdit->setEnabled(true); - myYMaxEdit->setEnabled(true); - if (mySecondAxisY) { - myY2MinEdit->setEnabled(true); - myY2MaxEdit->setEnabled(true); - } - if (badFocus) - myYMinEdit->setFocus(); - break; - } -} - diff --git a/src/Plot2d/Plot2d_FitDataDlg.h b/src/Plot2d/Plot2d_FitDataDlg.h deleted file mode 100755 index ccecaaa32..000000000 --- a/src/Plot2d/Plot2d_FitDataDlg.h +++ /dev/null @@ -1,75 +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 -// -#ifndef PLOT2D_FITDATADLG_H -#define PLOT2D_FITDATADLG_H - -#include "Plot2d.h" -#include - -class QButtonGroup; -class QRadioButton; -class QLineEdit; -class QPushButton; - -class PLOT2D_EXPORT Plot2d_FitDataDlg : public QDialog -{ - Q_OBJECT - -public: -// constuctor - Plot2d_FitDataDlg( QWidget* parent, bool secondAxisY ); - -// sets range - void setRange(const double xMin, - const double xMax, - const double yMin, - const double yMax, - const double y2Min = 0, - const double y2Max = 0); -// gets range, returns mode (see getMode()) - int getRange(double& xMin, - double& xMax, - double& yMin, - double& yMax, - double& y2Min, - double& y2Max); -// gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical - int getMode(); - -protected slots: -// called when range mode changed - void onModeChanged(int); - -private: - QButtonGroup* myRangeGrp; - QRadioButton* myModeAllRB; - QRadioButton* myModeHorRB; - QRadioButton* myModeVerRB; - QLineEdit* myXMinEdit; - QLineEdit* myYMinEdit; - QLineEdit* myY2MinEdit; - QLineEdit* myXMaxEdit; - QLineEdit* myYMaxEdit; - QLineEdit* myY2MaxEdit; - QPushButton* myOkBtn; - QPushButton* myCancelBtn; - bool mySecondAxisY; -}; - -#endif diff --git a/src/Plot2d/Plot2d_Prs.cxx b/src/Plot2d/Plot2d_Prs.cxx deleted file mode 100755 index 7c3bd0372..000000000 --- a/src/Plot2d/Plot2d_Prs.cxx +++ /dev/null @@ -1,99 +0,0 @@ -// SALOME OCCViewer : build OCC 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.com -// -// -// -// File : Plot2d_Prs.cxx -// Author : Sergey ANIKIN -// Module : SALOME -// $Header$ - -#include -#include "Plot2d_Prs.h" - -/*! - Default constructor -*/ -Plot2d_Prs::Plot2d_Prs( bool theDelete ) -: mySecondY( false) -{ - setAutoDel(theDelete); -} - -/*! - Standard constructor -*/ -Plot2d_Prs::Plot2d_Prs( const Plot2d_Curve* obj, bool theDelete ) -: mySecondY( false) -{ - setAutoDel(theDelete); - AddObject( obj ); -} - -/*! - Destructor -*/ -Plot2d_Prs::~Plot2d_Prs() -{ -} - -/*! - Get curves list -*/ -curveList Plot2d_Prs::getCurves() const -{ - return myCurves; -} - -/*! - Add curve -*/ -void Plot2d_Prs::AddObject( const Plot2d_Curve* obj ) -{ - myCurves.append((Plot2d_Curve*)obj); - - if (obj->getYAxis() == QwtPlot::yRight) - mySecondY = true; -} - -/*! - \return 0 if list of the curves is empty [ Reimplemented from SALOME_Prs ] -*/ -bool Plot2d_Prs::IsNull() const -{ - return myCurves.isEmpty(); -} - -/*! - \return 1 if in the list of curves exist at least one curve with axis Qwt::yRight [ Reimplemented from SALOME_Prs ] -*/ -bool Plot2d_Prs::isSecondY() const -{ - return mySecondY; -} - -/*! - \return 0 if list of the curves is empty [ Reimplemented from SALOME_Prs ] -*/ -void Plot2d_Prs::setAutoDel(bool theDel) -{ - myCurves.setAutoDelete(theDel); -} diff --git a/src/Plot2d/Plot2d_Prs.h b/src/Plot2d/Plot2d_Prs.h deleted file mode 100755 index 2f98aadeb..000000000 --- a/src/Plot2d/Plot2d_Prs.h +++ /dev/null @@ -1,46 +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 -// -#ifndef PLOT2D_PRS_H -#define PLOT2D_PRS_H - -#include "Plot2d.h" -#include "Plot2d_Curve.h" - -class PLOT2D_EXPORT Plot2d_Prs -{ -public: - Plot2d_Prs( bool theDelete = false ); - Plot2d_Prs( const Plot2d_Curve* obj, bool theDelete = false ); - ~Plot2d_Prs(); - - curveList getCurves() const; - void AddObject( const Plot2d_Curve* obj ); - - bool IsNull() const; - - bool isSecondY() const; - - void setAutoDel(bool theDel); - -protected: - curveList myCurves; - bool mySecondY; -}; - -#endif diff --git a/src/Plot2d/Plot2d_SetupCurveDlg.cxx b/src/Plot2d/Plot2d_SetupCurveDlg.cxx deleted file mode 100644 index 4873db496..000000000 --- a/src/Plot2d/Plot2d_SetupCurveDlg.cxx +++ /dev/null @@ -1,217 +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 -// -// SALOME Plot2d : implementation of desktop and GUI kernel -// -// File : Plot2d_SetupCurveDlg.cxx -// Author : Vadim SANDLER -// Module : SALOME -// $Header$ - -#include "Plot2d_SetupCurveDlg.h" -#include "SUIT_Tools.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef WNT -using namespace std; -#endif - -#define MARGIN_SIZE 11 -#define SPACING_SIZE 6 -#define MIN_COMBO_WIDTH 100 -#define MIN_SPIN_WIDTH 50 -#define MAX_LINE_WIDTH 100 - -/*! - Constructor -*/ -Plot2d_SetupCurveDlg::Plot2d_SetupCurveDlg( QWidget* parent ) - : QDialog( parent, "Plot2d_SetupCurveDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) -{ - setCaption( tr("TLT_SETUP_CURVE") ); - setSizeGripEnabled( TRUE ); - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setSpacing( SPACING_SIZE ); - topLayout->setMargin( MARGIN_SIZE ); - - QGroupBox* TopGroup = new QGroupBox( this ); - TopGroup->setColumnLayout( 0, Qt::Vertical ); - TopGroup->layout()->setSpacing( 0 ); TopGroup->layout()->setMargin( 0 ); - QGridLayout* TopGroupLayout = new QGridLayout( TopGroup->layout() ); - TopGroupLayout->setAlignment( Qt::AlignTop ); - TopGroupLayout->setSpacing( SPACING_SIZE ); TopGroupLayout->setMargin( MARGIN_SIZE ); - - QLabel* aLineTypeLab = new QLabel( tr( "CURVE_LINE_TYPE_LAB" ), TopGroup ); - myLineCombo = new QComboBox( false, TopGroup ); - myLineCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myLineCombo->setMinimumWidth( MIN_COMBO_WIDTH ); - myLineCombo->insertItem( tr( "NONE_LINE_LBL" ) ); - myLineCombo->insertItem( tr( "SOLID_LINE_LBL" ) ); - myLineCombo->insertItem( tr( "DASH_LINE_LBL" ) ); - myLineCombo->insertItem( tr( "DOT_LINE_LBL" ) ); - myLineCombo->insertItem( tr( "DASHDOT_LINE_LBL" ) ); - myLineCombo->insertItem( tr( "DAHSDOTDOT_LINE_LBL" ) ); - myLineCombo->setCurrentItem( 1 ); // SOLID by default - - QLabel* aLineWidthLab = new QLabel( tr( "CURVE_LINE_WIDTH_LAB" ), TopGroup ); - myLineSpin = new QSpinBox( 0, MAX_LINE_WIDTH, 1, TopGroup ); - myLineSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myLineSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - myLineSpin->setValue( 0 ); // default width is 0 - - QLabel* aMarkerLab = new QLabel( tr( "CURVE_MARKER_TYPE_LAB" ), TopGroup ); - myMarkerCombo = new QComboBox( false, TopGroup ); - myMarkerCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myMarkerCombo->setMinimumWidth( MIN_COMBO_WIDTH ); - myMarkerCombo->insertItem( tr( "NONE_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "CIRCLE_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "RECTANGLE_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "DIAMOND_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "DTRIANGLE_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "UTRIANGLE_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "LTRIANGLE_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "RTRIANGLE_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "CROSS_MARKER_LBL" ) ); - myMarkerCombo->insertItem( tr( "XCROSS_MARKER_LBL" ) ); - myMarkerCombo->setCurrentItem( 1 ); // CIRCLE by default - - QLabel* aColorLab = new QLabel( tr( "CURVE_COLOR_LAB" ), TopGroup ); - myColorBtn = new QToolButton( TopGroup ); - myColorBtn->setMinimumSize(25, 25); - - TopGroupLayout->addWidget( aLineTypeLab, 0, 0 ); - TopGroupLayout->addMultiCellWidget( myLineCombo, 0, 0, 1, 2 ); - TopGroupLayout->addWidget( aLineWidthLab, 1, 0 ); - TopGroupLayout->addMultiCellWidget( myLineSpin, 1, 1, 1, 2 ); - TopGroupLayout->addWidget( aMarkerLab, 2, 0 ); - TopGroupLayout->addMultiCellWidget( myMarkerCombo, 2, 2, 1, 2 ); - TopGroupLayout->addWidget( aColorLab, 3, 0 ); - TopGroupLayout->addWidget( myColorBtn, 3, 1 ); - TopGroupLayout->setColStretch( 2, 5 ); - - QGroupBox* GroupButtons = new QGroupBox( this ); - GroupButtons->setColumnLayout( 0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); GroupButtons->layout()->setMargin( 0 ); - QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( SPACING_SIZE ); GroupButtonsLayout->setMargin( MARGIN_SIZE ); - - myOkBtn = new QPushButton( tr( "BUT_OK" ), GroupButtons ); - myOkBtn->setAutoDefault( true ); myOkBtn->setDefault( true ); - myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ) , GroupButtons ); - myCancelBtn->setAutoDefault( true ); - - GroupButtonsLayout->addWidget( myOkBtn ); - GroupButtonsLayout->addStretch(); - GroupButtonsLayout->addWidget( myCancelBtn ); - - connect( myColorBtn, SIGNAL( clicked() ), this, SLOT( onColorChanged() ) ); - connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) ); - connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); - setColor( QColor( 0, 0, 0 ) ); - - topLayout->addWidget( TopGroup, 0, 0 ); - topLayout->addWidget( GroupButtons, 1, 0 ); - - SUIT_Tools::centerWidget( this, parent ); -} -/*! - Destructor -*/ -Plot2d_SetupCurveDlg::~Plot2d_SetupCurveDlg() -{ -} -/*! - Sets line style and width -*/ -void Plot2d_SetupCurveDlg::setLine( const int line, const int width ) -{ - myLineCombo->setCurrentItem( line ); - myLineSpin->setValue( width ); -} -/*! - Gets line style -*/ -int Plot2d_SetupCurveDlg::getLine() const -{ - return myLineCombo->currentItem(); -} -/*! - Gets line width -*/ -int Plot2d_SetupCurveDlg::getLineWidth() const -{ - return myLineSpin->value(); -} -/*! - Sets marker style -*/ -void Plot2d_SetupCurveDlg::setMarker( const int marker ) -{ - myMarkerCombo->setCurrentItem( marker ); -} -/*! - Gets marker style -*/ -int Plot2d_SetupCurveDlg::getMarker() const -{ - return myMarkerCombo->currentItem(); -} -/*! - Sets color -*/ -void Plot2d_SetupCurveDlg::setColor( const QColor& color ) -{ - QPalette pal = myColorBtn->palette(); - QColorGroup ca = pal.active(); - ca.setColor( QColorGroup::Button, color ); - QColorGroup ci = pal.inactive(); - ci.setColor( QColorGroup::Button, color ); - pal.setActive( ca ); - pal.setInactive( ci ); - myColorBtn->setPalette( pal ); -} -/*! - Gets color -*/ -QColor Plot2d_SetupCurveDlg::getColor() const -{ - return myColorBtn->palette().active().button(); -} -/*! - button slot, invokes color selection dialog box -*/ -void Plot2d_SetupCurveDlg::onColorChanged() -{ - QColor color = QColorDialog::getColor( getColor() ); - if ( color.isValid() ) { - setColor( color ); - } -} - - - - - diff --git a/src/Plot2d/Plot2d_SetupCurveDlg.h b/src/Plot2d/Plot2d_SetupCurveDlg.h deleted file mode 100644 index 84d530aa6..000000000 --- a/src/Plot2d/Plot2d_SetupCurveDlg.h +++ /dev/null @@ -1,72 +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 -// -// SALOME Plot2d : implementation of desktop and GUI kernel -// -// File : Plot2d_SetupCurveDlg.h -// Author : Vadim SANDLER -// Module : SALOME - -#ifndef Plot2d_SetupCurveDlg_H -#define Plot2d_SetupCurveDlg_H - -#include "Plot2d.h" - -#include - -/*! - \class Plot2d_SetupCurveDlg - Dialog box for setup Plot2d curve -*/ - -class QPushButton; -class QComboBox; -class QSpinBox; -class QToolButton; - -class PLOT2D_EXPORT Plot2d_SetupCurveDlg : public QDialog -{ - Q_OBJECT - -public: - Plot2d_SetupCurveDlg( QWidget* parent = 0 ); - ~Plot2d_SetupCurveDlg(); - -public: - void setLine( const int line, const int width ); - int getLine() const; - int getLineWidth() const; - void setMarker( const int marker ); - int getMarker() const ; - void setColor( const QColor& color ); - QColor getColor() const; - -protected slots: - void onColorChanged(); - -private: - QPushButton* myOkBtn; - QPushButton* myCancelBtn; - QComboBox* myLineCombo; - QSpinBox* myLineSpin; - QComboBox* myMarkerCombo; - QToolButton* myColorBtn; -}; - -#endif // Plot2d_SetupCurveDlg_H - diff --git a/src/Plot2d/Plot2d_SetupViewDlg.cxx b/src/Plot2d/Plot2d_SetupViewDlg.cxx deleted file mode 100755 index 9f1b2f03a..000000000 --- a/src/Plot2d/Plot2d_SetupViewDlg.cxx +++ /dev/null @@ -1,683 +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 : Plot2d_SetupViewDlg.cxx -// Author : Vadim SANDLER -// Module : SALOME -// $Header$ - -#include "Plot2d_SetupViewDlg.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define MARGIN_SIZE 11 -#define SPACING_SIZE 6 -#define MIN_EDIT_WIDTH 200 -#define MIN_COMBO_WIDTH 100 -#define MIN_SPIN_WIDTH 70 - -/*! - Constructor -*/ -Plot2d_SetupViewDlg::Plot2d_SetupViewDlg( QWidget* parent, bool showDefCheck, bool secondAxisY ) - : QDialog( parent, "Plot2d_SetupViewDlg", true, - WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) -{ - mySecondAxisY = secondAxisY; - setCaption( tr("TLT_SETUP_PLOT2D_VIEW") ); - setSizeGripEnabled( TRUE ); - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setSpacing( SPACING_SIZE ); - topLayout->setMargin( MARGIN_SIZE ); - - // main title - myTitleCheck = new QCheckBox( tr( "PLOT2D_ENABLE_MAIN_TITLE" ), this ); - myTitleEdit = new QLineEdit( this ); - myTitleEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myTitleEdit->setMinimumWidth( MIN_EDIT_WIDTH ); - // curve type : points, lines, spline - QLabel* aCurveLab = new QLabel( tr( "PLOT2D_CURVE_TYPE_LBL" ), this ); - myCurveCombo = new QComboBox( false, this ); - myCurveCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myCurveCombo->setMinimumWidth( MIN_COMBO_WIDTH ); - myCurveCombo->insertItem( tr( "PLOT2D_CURVE_TYPE_POINTS" ) ); - myCurveCombo->insertItem( tr( "PLOT2D_CURVE_TYPE_LINES" ) ); - myCurveCombo->insertItem( tr( "PLOT2D_CURVE_TYPE_SPLINE" ) ); - // legend - myLegendCheck = new QCheckBox( tr( "PLOT2D_ENABLE_LEGEND" ), this ); - myLegendCombo = new QComboBox( false, this ); - myLegendCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myLegendCombo->setMinimumWidth( MIN_COMBO_WIDTH ); - myLegendCombo->insertItem( tr( "PLOT2D_LEGEND_POSITION_LEFT" ) ); - myLegendCombo->insertItem( tr( "PLOT2D_LEGEND_POSITION_RIGHT" ) ); - myLegendCombo->insertItem( tr( "PLOT2D_LEGEND_POSITION_TOP" ) ); - myLegendCombo->insertItem( tr( "PLOT2D_LEGEND_POSITION_BOTTOM" ) ); - // marker size - QLabel* aMarkerLab = new QLabel( tr( "PLOT2D_MARKER_SIZE_LBL" ), this ); - myMarkerSpin = new QSpinBox( 0, 100, 1, this ); - myMarkerSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myMarkerSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - - // background color - QLabel* aBGLab = new QLabel( tr( "PLOT2D_BACKGROUND_COLOR_LBL" ), this ); - myBackgroundBtn = new QToolButton( this ); - myBackgroundBtn->setMinimumWidth(20); - - // scale mode - QGroupBox* aScaleGrp = new QGroupBox( tr( "PLOT2D_SCALE_TLT" ), this ); - aScaleGrp->setColumnLayout(0, Qt::Vertical ); - aScaleGrp->layout()->setSpacing( 0 ); aScaleGrp->layout()->setMargin( 0 ); - QGridLayout* aScaleLayout = new QGridLayout( aScaleGrp->layout() ); - aScaleLayout->setMargin( MARGIN_SIZE ); aScaleLayout->setSpacing( SPACING_SIZE ); - - QLabel* xScaleLab = new QLabel( tr( "PLOT2D_SCALE_MODE_HOR" ), aScaleGrp ); - myXModeCombo = new QComboBox( false, aScaleGrp ); - myXModeCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myXModeCombo->setMinimumWidth( MIN_COMBO_WIDTH ); - myXModeCombo->insertItem( tr( "PLOT2D_SCALE_MODE_LINEAR" ) ); - myXModeCombo->insertItem( tr( "PLOT2D_SCALE_MODE_LOGARITHMIC" ) ); - QLabel* yScaleLab = new QLabel( tr( "PLOT2D_SCALE_MODE_VER" ), aScaleGrp ); - myYModeCombo = new QComboBox( false, aScaleGrp ); - myYModeCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myYModeCombo->setMinimumWidth( MIN_COMBO_WIDTH ); - myYModeCombo->insertItem( tr( "PLOT2D_SCALE_MODE_LINEAR" ) ); - myYModeCombo->insertItem( tr( "PLOT2D_SCALE_MODE_LOGARITHMIC" ) ); - - aScaleLayout->addWidget( xScaleLab, 0, 0 ); - aScaleLayout->addWidget( myXModeCombo, 0, 1 ); - aScaleLayout->addWidget( yScaleLab, 0, 2 ); - aScaleLayout->addWidget( myYModeCombo, 0, 3 ); - - // tab widget for choose properties of axis - QTabWidget* aTabWidget = new QTabWidget( this, "tabWidget" ); - - // widget for parameters on Ox - QWidget* aXWidget = new QWidget(aTabWidget); - QGridLayout* aXLayout = new QGridLayout( aXWidget ); - aXLayout->setSpacing( SPACING_SIZE ); - aXLayout->setMargin( MARGIN_SIZE ); - // axis title - myTitleXCheck = new QCheckBox( tr( "PLOT2D_ENABLE_HOR_TITLE" ), aXWidget ); - myTitleXEdit = new QLineEdit( aXWidget ); - myTitleXEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myTitleXEdit->setMinimumWidth( MIN_EDIT_WIDTH ); - aXLayout->addWidget( myTitleXCheck, 1, 0 ); - aXLayout->addMultiCellWidget( myTitleXEdit, 1, 1, 1, 3 ); - // grid - QGroupBox* aGridGrpX = new QGroupBox( tr( "PLOT2D_GRID_TLT" ), aXWidget ); - aGridGrpX->setColumnLayout(0, Qt::Vertical ); - aGridGrpX->layout()->setSpacing( 0 ); aGridGrpX->layout()->setMargin( 0 ); - QGridLayout* aGridLayoutX = new QGridLayout( aGridGrpX->layout() ); - aGridLayoutX->setMargin( MARGIN_SIZE ); aGridLayoutX->setSpacing( SPACING_SIZE ); - myXGridCheck = new QCheckBox( tr( "PLOT2D_GRID_ENABLE_HOR_MAJOR" ), aGridGrpX ); - QLabel* aXMajLbl = new QLabel( tr( "PLOT2D_MAX_INTERVALS" ), aGridGrpX); - myXGridSpin = new QSpinBox( 1, 100, 1, aGridGrpX ); - myXGridSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myXGridSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - myXMinGridCheck = new QCheckBox( tr( "PLOT2D_GRID_ENABLE_HOR_MINOR" ), aGridGrpX ); - QLabel* aXMinLbl = new QLabel( tr( "PLOT2D_MAX_INTERVALS" ), aGridGrpX); - myXMinGridSpin = new QSpinBox( 1, 100, 1, aGridGrpX ); - myXMinGridSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myXMinGridSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - - aGridLayoutX->addWidget( myXGridCheck, 0, 0 ); - aGridLayoutX->addWidget( aXMajLbl, 0, 1 ); - aGridLayoutX->addWidget( myXGridSpin, 0, 2 ); - aGridLayoutX->addWidget( myXMinGridCheck, 1, 0 ); - aGridLayoutX->addWidget( aXMinLbl, 1, 1 ); - aGridLayoutX->addWidget( myXMinGridSpin, 1, 2 ); - aXLayout->addMultiCellWidget( aGridGrpX, 3, 3, 0, 3 ); - - aTabWidget->addTab( aXWidget, tr( "INF_AXES_X" ) ); - - // widget for parameters on Oy - QWidget* aYWidget = new QWidget(aTabWidget); - QGridLayout* aYLayout = new QGridLayout( aYWidget ); - aYLayout->setSpacing( SPACING_SIZE ); - aYLayout->setMargin( MARGIN_SIZE ); - // axis title - myTitleYCheck = new QCheckBox( tr( "PLOT2D_ENABLE_VER_TITLE" ), aYWidget ); - myTitleYEdit = new QLineEdit( aYWidget ); - myTitleYEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myTitleYEdit->setMinimumWidth( MIN_EDIT_WIDTH ); - aYLayout->addWidget( myTitleYCheck, 1, 0 ); - aYLayout->addMultiCellWidget( myTitleYEdit, 1, 1, 1, 3 ); - // grid - QGroupBox* aGridGrpY = new QGroupBox( tr( "PLOT2D_GRID_TLT" ), aYWidget ); - aGridGrpY->setColumnLayout(0, Qt::Vertical ); - aGridGrpY->layout()->setSpacing( 0 ); aGridGrpY->layout()->setMargin( 0 ); - QGridLayout* aGridLayoutY = new QGridLayout( aGridGrpY->layout() ); - aGridLayoutY->setMargin( MARGIN_SIZE ); aGridLayoutY->setSpacing( SPACING_SIZE ); - myYGridCheck = new QCheckBox( tr( "PLOT2D_GRID_ENABLE_VER_MAJOR" ), aGridGrpY ); - QLabel* aYMajLbl = new QLabel( tr( "PLOT2D_MAX_INTERVALS" ), aGridGrpY); - myYGridSpin = new QSpinBox( 1, 100, 1, aGridGrpY ); - myYGridSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myYGridSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - myYMinGridCheck = new QCheckBox( tr( "PLOT2D_GRID_ENABLE_VER_MINOR" ), aGridGrpY ); - QLabel* aYMinLbl = new QLabel( tr( "PLOT2D_MAX_INTERVALS" ), aGridGrpY); - myYMinGridSpin = new QSpinBox( 1, 100, 1, aGridGrpY ); - myYMinGridSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myYMinGridSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - - aGridLayoutY->addWidget( myYGridCheck, 0, 0 ); - aGridLayoutY->addWidget( aYMajLbl, 0, 1 ); - aGridLayoutY->addWidget( myYGridSpin, 0, 2 ); - aGridLayoutY->addWidget( myYMinGridCheck, 1, 0 ); - aGridLayoutY->addWidget( aYMinLbl, 1, 1 ); - aGridLayoutY->addWidget( myYMinGridSpin, 1, 2 ); - aYLayout->addMultiCellWidget( aGridGrpY, 3, 3, 0, 3 ); - - aTabWidget->addTab( aYWidget, tr( "INF_AXES_Y_LEFT" ) ); - - // if exist second axis Oy, addition new tab widget for right axis - if (mySecondAxisY) { - // widget for parameters on Oy - QWidget* aYWidget2 = new QWidget(aTabWidget); - QGridLayout* aYLayout2 = new QGridLayout( aYWidget2 ); - aYLayout2->setSpacing( SPACING_SIZE ); - aYLayout2->setMargin( MARGIN_SIZE ); - // axis title - myTitleY2Check = new QCheckBox( tr( "PLOT2D_ENABLE_VER_TITLE" ), aYWidget2 ); - myTitleY2Edit = new QLineEdit( aYWidget2 ); - myTitleY2Edit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myTitleY2Edit->setMinimumWidth( MIN_EDIT_WIDTH ); - aYLayout2->addWidget( myTitleY2Check, 1, 0 ); - aYLayout2->addMultiCellWidget( myTitleY2Edit, 1, 1, 1, 3 ); - // grid - QGroupBox* aGridGrpY2 = new QGroupBox( tr( "PLOT2D_GRID_TLT" ), aYWidget2 ); - aGridGrpY2->setColumnLayout(0, Qt::Vertical ); - aGridGrpY2->layout()->setSpacing( 0 ); aGridGrpY2->layout()->setMargin( 0 ); - QGridLayout* aGridLayoutY2 = new QGridLayout( aGridGrpY2->layout() ); - aGridLayoutY2->setMargin( MARGIN_SIZE ); aGridLayoutY2->setSpacing( SPACING_SIZE ); - myY2GridCheck = new QCheckBox( tr( "PLOT2D_GRID_ENABLE_VER_MAJOR" ), aGridGrpY2 ); - QLabel* aY2MajLbl = new QLabel( tr( "PLOT2D_MAX_INTERVALS" ), aGridGrpY2); - myY2GridSpin = new QSpinBox( 1, 100, 1, aGridGrpY2 ); - myY2GridSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myY2GridSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - myY2MinGridCheck = new QCheckBox( tr( "PLOT2D_GRID_ENABLE_VER_MINOR" ), aGridGrpY2 ); - QLabel* aY2MinLbl = new QLabel( tr( "PLOT2D_MAX_INTERVALS" ), aGridGrpY2); - myY2MinGridSpin = new QSpinBox( 1, 100, 1, aGridGrpY2 ); - myY2MinGridSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myY2MinGridSpin->setMinimumWidth( MIN_SPIN_WIDTH ); - - aGridLayoutY2->addWidget( myY2GridCheck, 0, 0 ); - aGridLayoutY2->addWidget( aY2MajLbl, 0, 1 ); - aGridLayoutY2->addWidget( myY2GridSpin, 0, 2 ); - aGridLayoutY2->addWidget( myY2MinGridCheck, 1, 0 ); - aGridLayoutY2->addWidget( aY2MinLbl, 1, 1 ); - aGridLayoutY2->addWidget( myY2MinGridSpin, 1, 2 ); - aYLayout2->addMultiCellWidget( aGridGrpY2, 3, 3, 0, 3 ); - - aTabWidget->addTab( aYWidget2, tr( "INF_AXES_Y_RIGHT" ) ); - } - else { - myTitleY2Check = 0; - myTitleY2Edit = 0; - myY2GridCheck = 0; - myY2GridSpin = 0; - myY2MinGridCheck = 0; - myY2MinGridSpin = 0; - myY2ModeCombo = 0; - } - aTabWidget->setCurrentPage( 0 ); - /* "Set as default" check box */ - myDefCheck = new QCheckBox( tr( "PLOT2D_SET_AS_DEFAULT_CHECK" ), this ); - /* OK/Cancel buttons */ - myOkBtn = new QPushButton( tr( "BUT_OK" ), this ); - myOkBtn->setAutoDefault( TRUE ); - myOkBtn->setDefault( TRUE ); - myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this ); - myCancelBtn->setAutoDefault( TRUE ); - QHBoxLayout* btnLayout = new QHBoxLayout; - btnLayout->addWidget( myOkBtn ); - btnLayout->addStretch(); - btnLayout->addWidget( myCancelBtn ); - - // layout widgets - topLayout->addWidget( myTitleCheck, 0, 0 ); - topLayout->addMultiCellWidget( myTitleEdit, 0, 0, 1, 3 ); - topLayout->addWidget( aCurveLab, 1, 0 ); - topLayout->addWidget( myCurveCombo, 1, 1 ); - topLayout->addWidget( myLegendCheck, 1, 2 ); - topLayout->addWidget( myLegendCombo, 1, 3 ); - topLayout->addWidget( aMarkerLab, 2, 0 ); - topLayout->addWidget( myMarkerSpin, 2, 1 ); - QHBoxLayout* bgLayout = new QHBoxLayout; - bgLayout->addWidget( myBackgroundBtn ); bgLayout->addStretch(); - topLayout->addWidget( aBGLab, 2, 2 ); - topLayout->addLayout( bgLayout, 2, 3 ); - topLayout->addMultiCellWidget( aScaleGrp, 3, 3, 0, 3 ); - topLayout->addMultiCellWidget( aTabWidget, 4, 4, 0, 3 ); - topLayout->addMultiCellWidget( myDefCheck, 5, 5, 0, 3 ); - topLayout->setRowStretch( 5, 5 ); - - topLayout->addMultiCellLayout( btnLayout, 6, 6, 0, 3 ); - - if ( !showDefCheck ) - myDefCheck->hide(); - - connect( myTitleCheck, SIGNAL( clicked() ), this, SLOT( onMainTitleChecked() ) ); - connect( myTitleXCheck, SIGNAL( clicked() ), this, SLOT( onXTitleChecked() ) ); - connect( myTitleYCheck, SIGNAL( clicked() ), this, SLOT( onYTitleChecked() ) ); - connect( myBackgroundBtn, SIGNAL( clicked() ), this, SLOT( onBackgroundClicked() ) ); - connect( myLegendCheck, SIGNAL( clicked() ), this, SLOT( onLegendChecked() ) ); - connect( myXGridCheck, SIGNAL( clicked() ), this, SLOT( onXGridMajorChecked() ) ); - connect( myYGridCheck, SIGNAL( clicked() ), this, SLOT( onYGridMajorChecked() ) ); - connect( myXMinGridCheck, SIGNAL( clicked() ), this, SLOT( onXGridMinorChecked() ) ); - connect( myYMinGridCheck, SIGNAL( clicked() ), this, SLOT( onYGridMinorChecked() ) ); - - connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) ); - connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); - - if (mySecondAxisY) { - connect( myTitleY2Check, SIGNAL( clicked() ), this, SLOT( onY2TitleChecked() ) ); - connect( myY2GridCheck, SIGNAL( clicked() ), this, SLOT( onY2GridMajorChecked() ) ); - connect( myY2MinGridCheck, SIGNAL( clicked() ), this, SLOT( onY2GridMinorChecked() ) ); - } - - // init fields - setBackgroundColor( Qt::gray ); - onMainTitleChecked(); - onXTitleChecked(); - onYTitleChecked(); - onLegendChecked(); - onXGridMajorChecked(); - onYGridMajorChecked(); - onXGridMinorChecked(); - if (mySecondAxisY) { - onY2TitleChecked(); - onY2GridMajorChecked(); - onY2GridMinorChecked(); - } -} - -/*! - Destructor -*/ -Plot2d_SetupViewDlg::~Plot2d_SetupViewDlg() -{ -} -/*! - Sets main title attributes -*/ -void Plot2d_SetupViewDlg::setMainTitle( bool enable, const QString& title ) -{ - myTitleCheck->setChecked( enable ); - if ( !title.isNull() ) - myTitleEdit->setText( title ); - onMainTitleChecked(); -} -/*! - Returns TRUE if main title is enabled -*/ -bool Plot2d_SetupViewDlg::isMainTitleEnabled() -{ - return myTitleCheck->isChecked(); -} -/*! - Gets main title -*/ -QString Plot2d_SetupViewDlg::getMainTitle() -{ - return myTitleEdit->text(); -} -/*! - Sets horizontal axis title attributes -*/ -void Plot2d_SetupViewDlg::setXTitle( bool enable, const QString& title ) -{ - myTitleXCheck->setChecked( enable ); - if ( !title.isNull() ) - myTitleXEdit->setText( title ); - onXTitleChecked(); -} -/*! - Returns TRUE if horizontal axis title is enabled -*/ -bool Plot2d_SetupViewDlg::isXTitleEnabled() -{ - return myTitleXCheck->isChecked(); -} -/*! - Gets horizontal axis title -*/ -QString Plot2d_SetupViewDlg::getXTitle() -{ - return myTitleXEdit->text(); -} -/*! - Sets vertical left axis title attributes -*/ -void Plot2d_SetupViewDlg::setYTitle( bool enable, const QString& title ) -{ - myTitleYCheck->setChecked( enable ); - if ( !title.isNull() ) - myTitleYEdit->setText( title ); - onYTitleChecked(); -} -/*! - Sets vertical right axis title attributes -*/ -void Plot2d_SetupViewDlg::setY2Title( bool enable, const QString& title ) -{ - myTitleY2Check->setChecked( enable ); - if ( !title.isNull() ) - myTitleY2Edit->setText( title ); - onY2TitleChecked(); -} -/*! - Returns TRUE if vertical left axis title is enabled -*/ -bool Plot2d_SetupViewDlg::isYTitleEnabled() -{ - return myTitleYCheck->isChecked(); -} -/*! - Returns TRUE if vertical right axis title is enabled -*/ -bool Plot2d_SetupViewDlg::isY2TitleEnabled() -{ - return myTitleY2Check->isChecked(); -} -/*! - Gets vertical left axis title -*/ -QString Plot2d_SetupViewDlg::getYTitle() -{ - return myTitleYEdit->text(); -} -/*! - Gets vertical right axis title -*/ -QString Plot2d_SetupViewDlg::getY2Title() -{ - return myTitleY2Edit->text(); -} -/*! - Sets curve type : 0 - points, 1 - lines, 2 - splines -*/ -void Plot2d_SetupViewDlg::setCurveType( const int type ) -{ - myCurveCombo->setCurrentItem( type ); -} -/*! - Gets curve type : 0 - points, 1 - lines, 2 - splines -*/ -int Plot2d_SetupViewDlg::getCurveType() -{ - return myCurveCombo->currentItem(); -} -/*! - Sets legend attributes : pos = 0 - left, 1 - right, 2 - top, 3 - bottom -*/ -void Plot2d_SetupViewDlg::setLegend( bool enable, int pos ) -{ - myLegendCheck->setChecked( enable ); - myLegendCombo->setCurrentItem( pos ); - onLegendChecked(); -} -/*! - Returns TRUE if legend is enabled -*/ -bool Plot2d_SetupViewDlg::isLegendEnabled() -{ - return myLegendCheck->isChecked(); -} -/*! - Returns legend position -*/ -int Plot2d_SetupViewDlg::getLegendPos() -{ - return myLegendCombo->currentItem(); -} -/*! - Sets marker size -*/ -void Plot2d_SetupViewDlg::setMarkerSize( const int size ) -{ - myMarkerSpin->setValue( size ); -} -/*! - Gets marker size -*/ -int Plot2d_SetupViewDlg::getMarkerSize() -{ - return myMarkerSpin->value(); -} -/*! - Sets background color -*/ -void Plot2d_SetupViewDlg::setBackgroundColor( const QColor& color ) -{ - QPalette pal = myBackgroundBtn->palette(); - QColorGroup ca = pal.active(); - ca.setColor( QColorGroup::Button, color ); - QColorGroup ci = pal.inactive(); - ci.setColor( QColorGroup::Button, color ); - pal.setActive( ca ); - pal.setInactive( ci ); - myBackgroundBtn->setPalette( pal ); -} -/*! - Gets background color -*/ -QColor Plot2d_SetupViewDlg::getBackgroundColor() -{ - return myBackgroundBtn->palette().active().button(); -} -/*! - Sets major grid parameters -*/ -void Plot2d_SetupViewDlg::setMajorGrid( bool enableX, const int divX, - bool enableY, const int divY, - bool enableY2, const int divY2 ) -{ - myXGridCheck->setChecked( enableX ); - myXGridSpin->setValue( divX ); - myYGridCheck->setChecked( enableY ); - myYGridSpin->setValue( divY ); - onXGridMajorChecked(); - onYGridMajorChecked(); - if (mySecondAxisY) { - myY2GridCheck->setChecked( enableY2 ); - myY2GridSpin->setValue( divY2 ); - onY2GridMajorChecked(); - } -} -/*! - Gets major grid parameters -*/ -void Plot2d_SetupViewDlg::getMajorGrid( bool& enableX, int& divX, - bool& enableY, int& divY, - bool& enableY2, int& divY2) -{ - enableX = myXGridCheck->isChecked(); - divX = myXGridSpin->value(); - enableY = myYGridCheck->isChecked(); - divY = myYGridSpin->value(); - if (mySecondAxisY) { - enableY2 = myY2GridCheck->isChecked(); - divY2 = myY2GridSpin->value(); - } - else { - enableY2 = false; - divY2 = 1; - } -} -/*! - Sets minor grid parameters -*/ -void Plot2d_SetupViewDlg::setMinorGrid( bool enableX, const int divX, - bool enableY, const int divY, - bool enableY2, const int divY2) -{ - myXMinGridCheck->setChecked( enableX ); - myXMinGridSpin->setValue( divX ); - myYMinGridCheck->setChecked( enableY ); - myYMinGridSpin->setValue( divY ); - onXGridMinorChecked(); - onYGridMinorChecked(); - if (mySecondAxisY) { - myY2MinGridCheck->setChecked( enableY2 ); - myY2MinGridSpin->setValue( divY2 ); - onY2GridMinorChecked(); - } -} -/*! - Gets minor grid parameters -*/ -void Plot2d_SetupViewDlg::getMinorGrid( bool& enableX, int& divX, - bool& enableY, int& divY, - bool& enableY2, int& divY2) -{ - enableX = myXMinGridCheck->isChecked(); - divX = myXMinGridSpin->value(); - enableY = myYMinGridCheck->isChecked(); - divY = myYMinGridSpin->value(); - if (mySecondAxisY) { - enableY2 = myY2MinGridCheck->isChecked(); - divY2 = myY2MinGridSpin->value(); - } - else { - enableY2 = false; - divY2 = 1; - } -} -/*! - Sets scale mode for hor. and ver. axes : 0 - linear, 1 - logarithmic -*/ -void Plot2d_SetupViewDlg::setScaleMode( const int xMode, const int yMode ) -{ - myXModeCombo->setCurrentItem( xMode ); - myYModeCombo->setCurrentItem( yMode ); -} -/*! - Gets scale mode for hor. axis : 0 - linear, 1 - logarithmic -*/ -int Plot2d_SetupViewDlg::getXScaleMode() -{ - return myXModeCombo->currentItem(); -} -/*! - Gets scale mode for hor. axis : 0 - linear, 1 - logarithmic -*/ -int Plot2d_SetupViewDlg::getYScaleMode() -{ - return myYModeCombo->currentItem(); -} -/*! - Slot, called when user clicks "Show main title" check box -*/ -void Plot2d_SetupViewDlg::onMainTitleChecked() -{ - myTitleEdit->setEnabled( myTitleCheck->isChecked() ); -} -/*! - Slot, called when user clicks "Show horizontal axis title" check box -*/ -void Plot2d_SetupViewDlg::onXTitleChecked() -{ - myTitleXEdit->setEnabled( myTitleXCheck->isChecked() ); -} -/*! - Slot, called when user clicks "Show vertical left axis title" check box -*/ -void Plot2d_SetupViewDlg::onYTitleChecked() -{ - myTitleYEdit->setEnabled( myTitleYCheck->isChecked() ); -} -/*! - Slot, called when user clicks "Show vertical right axis title" check box -*/ -void Plot2d_SetupViewDlg::onY2TitleChecked() -{ - myTitleY2Edit->setEnabled( myTitleY2Check->isChecked() ); -} -/*! - Slot, called when user clicks "Change bacground color" button -*/ -void Plot2d_SetupViewDlg::onBackgroundClicked() -{ - QColor color = QColorDialog::getColor( getBackgroundColor() ); - if ( color.isValid() ) { - setBackgroundColor( color ); - } -} -/*! - Slot, called when user clicks "Show Legend" check box -*/ -void Plot2d_SetupViewDlg::onLegendChecked() -{ - myLegendCombo->setEnabled( myLegendCheck->isChecked() ); -} -/*! - Slot, called when user clicks "Enable hor. major grid" check box -*/ -void Plot2d_SetupViewDlg::onXGridMajorChecked() -{ - myXMinGridCheck->setEnabled( myXGridCheck->isChecked() ); -} -/*! - Slot, called when user clicks "Enable ver. major grid" check box -*/ -void Plot2d_SetupViewDlg::onYGridMajorChecked() -{ - myYMinGridCheck->setEnabled( myYGridCheck->isChecked() ); -} -/*! - Slot, called when user clicks "Enable ver. major grid" check box -*/ -void Plot2d_SetupViewDlg::onY2GridMajorChecked() -{ - myY2MinGridCheck->setEnabled( myY2GridCheck->isChecked() ); -} -/*! - Slot, called when user clicks "Enable hor. minor grid" check box -*/ -void Plot2d_SetupViewDlg::onXGridMinorChecked() -{ -} -/*! - Slot, called when user clicks "Enable ver. minor grid" check box -*/ -void Plot2d_SetupViewDlg::onYGridMinorChecked() -{ -} -/*! - Slot, called when user clicks "Enable ver. minor grid" check box -*/ -void Plot2d_SetupViewDlg::onY2GridMinorChecked() -{ -} -/*! - Retursns true if "Set as default" check box is on -*/ -bool Plot2d_SetupViewDlg::isSetAsDefault() -{ - return myDefCheck->isChecked(); -} diff --git a/src/Plot2d/Plot2d_SetupViewDlg.h b/src/Plot2d/Plot2d_SetupViewDlg.h deleted file mode 100755 index 37db3d641..000000000 --- a/src/Plot2d/Plot2d_SetupViewDlg.h +++ /dev/null @@ -1,124 +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 -// -#ifndef PLOT2D_SETUPVIEWDLG_H -#define PLOT2D_SETUPVIEWDLG_H - -#include "Plot2d.h" -#include - -class QSpinBox; -class QCheckBox; -class QLineEdit; -class QComboBox; -class QToolButton; -class QPushButton; - -class PLOT2D_EXPORT Plot2d_SetupViewDlg : public QDialog -{ - Q_OBJECT - -public: - Plot2d_SetupViewDlg( QWidget* parent = 0, bool showDefCheck = false, bool secondAxisY = false ); - ~Plot2d_SetupViewDlg(); - - void setMainTitle( bool enable, const QString& title = QString::null ); - bool isMainTitleEnabled(); - QString getMainTitle(); - void setXTitle( bool enable, const QString& title = QString::null ); - bool isXTitleEnabled(); - QString getXTitle(); - void setYTitle( bool enable, const QString& title = QString::null ); - void setY2Title( bool enable, const QString& title = QString::null ); - bool isYTitleEnabled(); - bool isY2TitleEnabled(); - QString getYTitle(); - QString getY2Title(); - void setCurveType( const int type ); - int getCurveType(); - void setLegend( bool enable, int pos ); - bool isLegendEnabled(); - int getLegendPos(); - void setMarkerSize( const int size ); - int getMarkerSize(); - void setBackgroundColor( const QColor& color ); - QColor getBackgroundColor(); - void setMajorGrid( bool enableX, const int xdiv, bool enableY, const int divY, - bool enableY2, const int divY2 ); - void getMajorGrid( bool& enableX, int& xdiv, bool& enableY, int& divY, - bool& enableY2, int& divY2); - void setMinorGrid( bool enableX, const int xdiv, bool enableY, const int divY, - bool enableY2, const int divY2); - void getMinorGrid( bool& enableX, int& xdiv, bool& enableY, int& divY, - bool& enableY2, int& divY2); - void setScaleMode( const int xMode, const int yMode ); - int getXScaleMode(); - int getYScaleMode(); - bool isSetAsDefault(); - -protected slots: - void onMainTitleChecked(); - void onXTitleChecked(); - void onYTitleChecked(); - void onY2TitleChecked(); - void onBackgroundClicked(); - void onLegendChecked(); - void onXGridMajorChecked(); - void onYGridMajorChecked(); - void onY2GridMajorChecked(); - void onXGridMinorChecked(); - void onYGridMinorChecked(); - void onY2GridMinorChecked(); - -private: - QCheckBox* myTitleCheck; - QLineEdit* myTitleEdit; - QCheckBox* myTitleXCheck; - QLineEdit* myTitleXEdit; - QCheckBox* myTitleYCheck; - QCheckBox* myTitleY2Check; - QLineEdit* myTitleYEdit; - QLineEdit* myTitleY2Edit; - QToolButton* myBackgroundBtn; - QCheckBox* myXGridCheck; - QSpinBox* myXGridSpin; - QCheckBox* myYGridCheck; - QCheckBox* myY2GridCheck; - QSpinBox* myYGridSpin; - QSpinBox* myY2GridSpin; - QCheckBox* myXMinGridCheck; - QSpinBox* myXMinGridSpin; - QCheckBox* myYMinGridCheck; - QCheckBox* myY2MinGridCheck; - QSpinBox* myYMinGridSpin; - QSpinBox* myY2MinGridSpin; - QComboBox* myCurveCombo; - QCheckBox* myLegendCheck; - QComboBox* myLegendCombo; - QSpinBox* myMarkerSpin; - QComboBox* myXModeCombo; - QComboBox* myYModeCombo; - QComboBox* myY2ModeCombo; - QCheckBox* myDefCheck; - - QPushButton* myOkBtn; - QPushButton* myCancelBtn; - bool mySecondAxisY; -}; - -#endif diff --git a/src/Plot2d/Plot2d_ToolTip.cxx b/src/Plot2d/Plot2d_ToolTip.cxx deleted file mode 100644 index 3cdb1ba8a..000000000 --- a/src/Plot2d/Plot2d_ToolTip.cxx +++ /dev/null @@ -1,93 +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: 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 deleted file mode 100644 index a26c46a83..000000000 --- a/src/Plot2d/Plot2d_ToolTip.h +++ /dev/null @@ -1,50 +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: 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 deleted file mode 100755 index 00ba07afa..000000000 --- a/src/Plot2d/Plot2d_ViewFrame.cxx +++ /dev/null @@ -1,2050 +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 "Plot2d_ViewFrame.h" - -#include "Plot2d_Prs.h" -#include "Plot2d_Curve.h" -#include "Plot2d_FitDataDlg.h" -#include "Plot2d_ViewWindow.h" -#include "Plot2d_SetupViewDlg.h" -#include "Plot2d_ToolTip.h" - -#include "SUIT_Tools.h" -#include "SUIT_Session.h" -#include "SUIT_MessageBox.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Application.h" - -#include "qapplication.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#define DEFAULT_LINE_WIDTH 0 // (default) line width -#define DEFAULT_MARKER_SIZE 9 // default marker size -#define MIN_RECT_SIZE 11 // min sensibility area size - -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 -*/ -Plot2d_ViewFrame::Plot2d_ViewFrame( QWidget* parent, const QString& title ) - : QWidget (parent, title, 0), - myOperation( NoOpId ), - myCurveType( 1 ), - myShowLegend( true ), myLegendPos( 1 ), - myMarkerSize( DEFAULT_MARKER_SIZE ), - myTitle( "" ), myXTitle( "" ), myYTitle( "" ), myY2Title( "" ), - myBackground( white ), - myTitleEnabled( true ), myXTitleEnabled( true ), - myYTitleEnabled( true ), myY2TitleEnabled (true), - myXGridMajorEnabled( true ), myYGridMajorEnabled( true ), myY2GridMajorEnabled( true ), - myXGridMinorEnabled( false ), myYGridMinorEnabled( false ), myY2GridMinorEnabled( false ), - myXGridMaxMajor( 8 ), myYGridMaxMajor( 8 ), myY2GridMaxMajor( 8 ), - myXGridMaxMinor( 5 ), myYGridMaxMinor( 5 ), myY2GridMaxMinor( 5 ), - myXMode( 0 ), myYMode( 0 ), mySecondY( false ) -{ - /* Plot 2d View */ - QVBoxLayout* aLayout = new QVBoxLayout( this ); - myPlot = new Plot2d_Plot2d( this ); - new Plot2d_ToolTip( this, myPlot ); - - aLayout->addWidget( myPlot ); - -// createActions(); - - connect( myPlot, SIGNAL( plotMouseMoved( const QMouseEvent& ) ), - this, SLOT( plotMouseMoved( const QMouseEvent& ) ) ); - connect( myPlot, SIGNAL( plotMousePressed( const QMouseEvent& ) ), - this, SLOT( plotMousePressed( const QMouseEvent& ) ) ); - connect( myPlot, SIGNAL( plotMouseReleased( const QMouseEvent& ) ), - this, SLOT( plotMouseReleased( const QMouseEvent& ) ) ); - //connect( myPlot, SIGNAL( legendClicked( long ) ), - // this, SLOT( onLegendClicked( long ) ) ); - - /* Initial Setup - get from the preferences */ - readPreferences(); - - myPlot->setMargin( 5 ); - setCurveType( myCurveType, false ); - setXGrid( myXGridMajorEnabled, myXGridMaxMajor, myXGridMinorEnabled, myXGridMaxMinor, false ); - setYGrid( myYGridMajorEnabled, myYGridMaxMajor, myYGridMinorEnabled, myYGridMaxMinor, - myY2GridMajorEnabled, myY2GridMaxMajor, myY2GridMinorEnabled, myY2GridMaxMinor, false ); - - setTitle( myTitleEnabled, myTitle, MainTitle, false ); - setTitle( myXTitleEnabled, myXTitle, XTitle, false ); - setTitle( myYTitleEnabled, myYTitle, YTitle, false ); - - if (mySecondY) - setTitle( myY2TitleEnabled, myY2Title, Y2Title, false ); - setHorScaleMode( myXMode, false ); - setVerScaleMode( myYMode, false ); - setBackgroundColor( myBackground ); - setLegendPos( myLegendPos ); - showLegend( myShowLegend, false ); - myPlot->replot(); - - if ( parent ) { - resize( (int)(0.8 * parent->width()), (int)(0.8 * parent->height()) ); - } - QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom ); - QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft ); - myXDistance = xMap.d2() - xMap.d1(); - myYDistance = yMap.d2() - yMap.d1(); - myYDistance2 = 0; - if (mySecondY) { - QwtDiMap yMap2 = myPlot->canvasMap( QwtPlot::yRight ); - myYDistance2 = yMap2.d2() - yMap2.d1(); - } -} -/*! - Destructor -*/ -Plot2d_ViewFrame::~Plot2d_ViewFrame() -{ -} -/*! - Gets window's central widget -*/ -QWidget* Plot2d_ViewFrame::getViewWidget() -{ - return (QWidget*)myPlot; -} -/*! - Actually this method just re-displays all curves which are presented in the viewer -*/ -void Plot2d_ViewFrame::DisplayAll() -{ - QList clist; - getCurves( clist ); - for ( int i = 0; i < (int)clist.count(); i++ ) { - updateCurve( clist.at( i ), false ); - } - myPlot->replot(); -} -/*! - Removes all curves from the view -*/ -void Plot2d_ViewFrame::EraseAll() -{ - myPlot->clear(); - myCurves.clear(); - myPlot->replot(); -} -/*! - Redraws viewframe contents -*/ -void Plot2d_ViewFrame::Repaint() -{ - myPlot->replot(); -} -/*! - Display presentation -*/ -void Plot2d_ViewFrame::Display( const Plot2d_Prs* prs ) -{ - if ( !prs || prs->IsNull() ) - return; - - if (prs->isSecondY()) { - myPlot->enableAxis(QwtPlot::yRight, true); - mySecondY = true; - } - else { - myPlot->enableAxis(QwtPlot::yRight, false); - mySecondY = false; - } - - // display all curves from presentation - curveList aCurves = prs->getCurves(); - displayCurves( aCurves ); - setXGrid( myXGridMajorEnabled, myXGridMaxMajor, myXGridMinorEnabled, myXGridMaxMinor, true ); - setYGrid( myYGridMajorEnabled, myYGridMaxMajor, myYGridMinorEnabled, myYGridMaxMinor, - myY2GridMajorEnabled, myY2GridMaxMajor, myY2GridMinorEnabled, myY2GridMaxMinor, true ); -} - -/*! - Erase presentation -*/ -void Plot2d_ViewFrame::Erase( const Plot2d_Prs* prs, const bool ) -{ - if ( !prs || prs->IsNull() ) - return; - - // erase all curves from presentation - curveList aCurves = prs->getCurves(); - eraseCurves( aCurves ); -} - -/*! - Sets title -*/ -void Plot2d_ViewFrame::setTitle( const QString& title ) -{ - setTitle( myTitleEnabled, title, MainTitle, true ); -} - -/*! - Reads Plot2d view settings from the preferences -*/ -void Plot2d_ViewFrame::readPreferences() -{ - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - - myCurveType = resMgr->integerValue( "Plot2d", "CurveType", myCurveType ); - setCurveType( resMgr->integerValue( "Plot2d", "CurveType", myCurveType ) ); - - myShowLegend = resMgr->booleanValue( "Plot2d", "ShowLegend", myShowLegend ); - myLegendPos = resMgr->integerValue( "Plot2d", "LegendPos", myLegendPos ); - myMarkerSize = resMgr->integerValue( "Plot2d", "MarkerSize", myMarkerSize ); - myBackground = resMgr->colorValue( "Plot2d", "Background", myBackground ); - - myTitleEnabled = resMgr->booleanValue( "Plot2d", "ShowTitle", myTitleEnabled ); - myXTitleEnabled = resMgr->booleanValue( "Plot2d", "ShowHorTitle", myXTitleEnabled ); - myYTitleEnabled = resMgr->booleanValue( "Plot2d", "ShowVerLeftTitle", myYTitleEnabled ); - myY2TitleEnabled = resMgr->booleanValue( "Plot2d", "ShowVerRightTitle", myY2TitleEnabled ); - - myXGridMajorEnabled = resMgr->booleanValue( "Plot2d", "EnableHorMajorGrid", myXGridMajorEnabled ); - myYGridMajorEnabled = resMgr->booleanValue( "Plot2d", "EnableVerMajorGrid", myYGridMajorEnabled ); - myY2GridMajorEnabled = resMgr->booleanValue( "Plot2d", "EnableRightVerMajorGrid", myY2GridMajorEnabled ); - - myXGridMinorEnabled = resMgr->booleanValue( "Plot2d", "EnableHorMinorGrid", myXGridMinorEnabled ); - myYGridMinorEnabled = resMgr->booleanValue( "Plot2d", "EnableVerMinorGrid", myYGridMinorEnabled ); - myY2GridMinorEnabled = resMgr->booleanValue( "Plot2d", "EnableRightVerMinorGrid", myY2GridMinorEnabled ); - - myXGridMaxMajor = resMgr->integerValue( "Plot2d", "HorMajorGridMax", myXGridMaxMajor ); - myYGridMaxMajor = resMgr->integerValue( "Plot2d", "VerMajorGridMax", myYGridMaxMajor ); - if ( mySecondY ) - myY2GridMaxMajor = resMgr->integerValue( "Plot2d", "VerMajorRightGridMax", myY2GridMaxMajor ); - - myXGridMaxMinor = resMgr->integerValue( "Plot2d", "HorMinorGridMax", myXGridMaxMinor ); - myYGridMaxMinor = resMgr->integerValue( "Plot2d", "VerMinorGridMax", myYGridMaxMinor ); - if ( mySecondY ) - myY2GridMaxMinor = resMgr->integerValue( "Plot2d", "VerMinorGridMax", myY2GridMaxMinor ); - - myXMode = resMgr->integerValue( "Plot2d", "HorScaleMode", myXMode ); - myXMode = QMAX( 0, QMIN( 1, myXMode ) ); - - myYMode = resMgr->integerValue( "Plot2d", "VerScaleMode", myYMode ); - myYMode = QMAX( 0, QMIN( 1, myYMode ) ); -} - -/*! - Writes Plot2d view settings to the preferences -*/ -void Plot2d_ViewFrame::writePreferences() -{ - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - - resMgr->setValue( "Plot2d", "CurveType", myCurveType ); - resMgr->setValue( "Plot2d", "ShowLegend", myShowLegend ); - resMgr->setValue( "Plot2d", "LegendPos", myLegendPos ); - resMgr->setValue( "Plot2d", "MarkerSize", myMarkerSize ); - resMgr->setValue( "Plot2d", "Background", myBackground ); - resMgr->setValue( "Plot2d", "ShowTitle", myTitleEnabled ); - resMgr->setValue( "Plot2d", "ShowHorTitle", myXTitleEnabled ); - resMgr->setValue( "Plot2d", "ShowVerLeftTitle", myYTitleEnabled ); - if ( mySecondY ) - resMgr->setValue( "Plot2d", "ShowVerRightTitle", myY2TitleEnabled ); - - resMgr->setValue( "Plot2d", "EnableHorMajorGrid", myXGridMajorEnabled ); - resMgr->setValue( "Plot2d", "EnableVerMajorGrid", myYGridMajorEnabled ); - resMgr->setValue( "Plot2d", "EnableHorMinorGrid", myXGridMinorEnabled ); - resMgr->setValue( "Plot2d", "EnableVerMinorGrid", myYGridMinorEnabled ); - - resMgr->setValue( "Plot2d", "HorMajorGridMax", myXGridMaxMajor ); - resMgr->setValue( "Plot2d", "VerMajorGridMax", myYGridMaxMajor ); - - resMgr->setValue( "Plot2d", "HorMinorGridMax", myXGridMaxMinor ); - resMgr->setValue( "Plot2d", "VerMinorGridMax", myYGridMaxMinor ); - - resMgr->setValue( "Plot2d", "HorScaleMode", myXMode ); - - if ( mySecondY ) - { - resMgr->setValue( "Plot2d", "EnableRightVerMajorGrid", myY2GridMajorEnabled ); - resMgr->setValue( "Plot2d", "EnableRightVerMinorGrid", myY2GridMinorEnabled ); - resMgr->setValue( "Plot2d", "VerRightMajorGridMax", myY2GridMaxMajor ); - resMgr->setValue( "Plot2d", "VerRightMinorGridMax", myY2GridMaxMinor ); - } - - resMgr->setValue( "Plot2d", "VerScaleMode", myYMode ); -} - -/*! - Prints mouse cursor coordinates into string -*/ -QString Plot2d_ViewFrame::getInfo( const QPoint& pnt ) -{ - int i; - bool xFound = false, yFound = false; - double xCoord, yCoord; - const QwtScaleDiv* aXscale = myPlot->axisScale( QwtPlot::xBottom ); - for ( i = 0; i < aXscale->majCnt(); i++ ) { - double majXmark = aXscale->majMark( i ); - int xmark = myPlot->transform( QwtPlot::xBottom, majXmark ); - if ( xmark-2 == pnt.x() ) { - xCoord = majXmark; - xFound = true; - break; - } - } - if ( !xFound ) { - for ( i = 0; i < aXscale->minCnt(); i++ ) { - double minXmark = aXscale->minMark( i ); - int xmark = myPlot->transform( QwtPlot::xBottom, minXmark ); - if ( xmark-2 == pnt.x() ) { - xCoord = minXmark; - xFound = true; - break; - } - } - } - const QwtScaleDiv* aYscale = myPlot->axisScale( QwtPlot::yLeft ); - for ( i = 0; i < aYscale->majCnt(); i++ ) { - double majYmark = aYscale->majMark( i ); - int ymark = myPlot->transform( QwtPlot::yLeft, majYmark ); - if ( ymark-2 == pnt.y() ) { - yCoord = majYmark; - yFound = true; - break; - } - } - if ( !yFound ) { - for ( i = 0; i < aYscale->minCnt(); i++ ) { - double minYmark = aYscale->minMark( i ); - int ymark = myPlot->transform( QwtPlot::yLeft, minYmark ); - if ( ymark-2 == pnt.y() ) { - yCoord = minYmark; - yFound = true; - break; - } - } - } - - QString strX = QString::number( xFound ? xCoord : myPlot->invTransform( QwtPlot::xBottom, pnt.x() ) ).stripWhiteSpace(); - if ( strX == "-0" ) - strX = "0"; - QString strY = QString::number( yFound ? yCoord : myPlot->invTransform( QwtPlot::yLeft, pnt.y() ) ).stripWhiteSpace(); - if ( strY == "-0" ) - strY = "0"; - QString info = ""; - - if (mySecondY) { - bool yFound2 = false; - double yCoord2; - - const QwtScaleDiv* aYscale2 = myPlot->axisScale( QwtPlot::yRight ); - for ( i = 0; i < aYscale2->majCnt(); i++ ) { - double majYmark = aYscale2->majMark( i ); - int ymark = myPlot->transform( QwtPlot::yRight, majYmark ); - if ( ymark-2 == pnt.y() ) { - yCoord2 = majYmark; - yFound2 = true; - break; - } - } - if ( !yFound2 ) { - for ( i = 0; i < aYscale2->minCnt(); i++ ) { - double minYmark = aYscale2->minMark( i ); - int ymark = myPlot->transform( QwtPlot::yRight, minYmark ); - if ( ymark-2 == pnt.y() ) { - yCoord2 = minYmark; - yFound2 = true; - break; - } - } - } - QString strY2 = QString::number( yFound2 ? yCoord2 : - myPlot->invTransform( QwtPlot::yRight, pnt.y() ) ).stripWhiteSpace(); - if ( strY2 == "-0" ) - strY2 = "0"; - info = tr("INF_COORDINATES_SOME_Y").arg( strX ).arg( strY ).arg( strY2 ); - } - else - info = tr("INF_COORDINATES").arg( strX ).arg( strY ); - - return info; -} - -/*! - Converts Plot2d_Curve's marker style to Qwt marker style [ static ] -*/ -static QwtSymbol::Style plot2qwtMarker( Plot2d_Curve::MarkerType m ) -{ - QwtSymbol::Style ms = QwtSymbol::None; - switch ( m ) { - case Plot2d_Curve::Circle: - ms = QwtSymbol::Ellipse; break; - case Plot2d_Curve::Rectangle: - ms = QwtSymbol::Rect; break; - case Plot2d_Curve::Diamond: - ms = QwtSymbol::Diamond; break; - case Plot2d_Curve::DTriangle: - ms = QwtSymbol::DTriangle; break; - case Plot2d_Curve::UTriangle: - ms = QwtSymbol::UTriangle; break; - case Plot2d_Curve::LTriangle: // Qwt confuses LTriangle and RTriangle :((( - ms = QwtSymbol::RTriangle; break; - case Plot2d_Curve::RTriangle: // Qwt confuses LTriangle and RTriangle :((( - ms = QwtSymbol::LTriangle; break; - case Plot2d_Curve::Cross: - ms = QwtSymbol::Cross; break; - case Plot2d_Curve::XCross: - ms = QwtSymbol::XCross; break; - case Plot2d_Curve::None: - default: - ms = QwtSymbol::None; break; - } - return ms; -} - -/*! - Converts Qwt marker style to Plot2d_Curve's marker style [ static ] -*/ -static Plot2d_Curve::MarkerType qwt2plotMarker( QwtSymbol::Style m ) -{ - Plot2d_Curve::MarkerType ms = Plot2d_Curve::None; - switch ( m ) { - case QwtSymbol::Ellipse: - ms = Plot2d_Curve::Circle; break; - case QwtSymbol::Rect: - ms = Plot2d_Curve::Rectangle; break; - case QwtSymbol::Diamond: - ms = Plot2d_Curve::Diamond; break; - case QwtSymbol::DTriangle: - ms = Plot2d_Curve::DTriangle; break; - case QwtSymbol::UTriangle: - ms = Plot2d_Curve::UTriangle; break; - case QwtSymbol::RTriangle: // Qwt confuses LTriangle and RTriangle :((( - ms = Plot2d_Curve::LTriangle; break; - case QwtSymbol::LTriangle: // Qwt confuses LTriangle and RTriangle :((( - ms = Plot2d_Curve::RTriangle; break; - case QwtSymbol::Cross: - ms = Plot2d_Curve::Cross; break; - case QwtSymbol::XCross: - ms = Plot2d_Curve::XCross; break; - case QwtSymbol::None: - default: - ms = Plot2d_Curve::None; break; - } - return ms; -} - -/*! - Converts Plot2d_Curve's line style to Qwt line style [ static ] -*/ -static Qt::PenStyle plot2qwtLine( Plot2d_Curve::LineType p ) -{ - Qt::PenStyle ps = Qt::NoPen; - switch ( p ) { - case Plot2d_Curve::Solid: - ps = Qt::SolidLine; break; - case Plot2d_Curve::Dash: - ps = Qt::DashLine; break; - case Plot2d_Curve::Dot: - ps = Qt::DotLine; break; - case Plot2d_Curve::DashDot: - ps = Qt::DashDotLine; break; - case Plot2d_Curve::DashDotDot: - ps = Qt::DashDotDotLine; break; - case Plot2d_Curve::NoPen: - default: - ps = Qt::NoPen; break; - } - return ps; -} - -/*! - Converts Qwt line style to Plot2d_Curve's line style [ static ] -*/ -static Plot2d_Curve::LineType qwt2plotLine( Qt::PenStyle p ) -{ - Plot2d_Curve::LineType ps = Plot2d_Curve::NoPen; - switch ( p ) { - case Qt::SolidLine: - ps = Plot2d_Curve::Solid; break; - case Qt::DashLine: - ps = Plot2d_Curve::Dash; break; - case Qt::DotLine: - ps = Plot2d_Curve::Dot; break; - case Qt::DashDotLine: - ps = Plot2d_Curve::DashDot; break; - case Qt::DashDotDotLine: - ps = Plot2d_Curve::DashDotDot; break; - case Qt::NoPen: - default: - ps = Plot2d_Curve::NoPen; break; - } - return ps; -} - -/*! - Adds curve into view -*/ -void Plot2d_ViewFrame::displayCurve( Plot2d_Curve* curve, bool update ) -{ - if ( !curve ) - return; - - // san -- Protection against QwtCurve bug in Qwt 0.4.x: - // it crashes if switched to X/Y logarithmic mode, when one or more points have - // non-positive X/Y coordinate - if ( myXMode && curve->getMinX() <= 0. ) - setHorScaleMode( 0, false ); - if ( myYMode && curve->getMinY() <= 0. ) - setVerScaleMode( 0, false ); - - if ( hasCurve( curve ) ) { - updateCurve( curve, update ); - } - else { - long curveKey = myPlot->insertCurve( curve->getVerTitle() ); - myPlot->setCurveYAxis(curveKey, curve->getYAxis()); - - myCurves.insert( curveKey, curve ); - if ( curve->isAutoAssign() ) { - QwtSymbol::Style typeMarker; - QColor color; - Qt::PenStyle typeLine; - myPlot->getNextMarker( typeMarker, color, typeLine ); - myPlot->setCurvePen( curveKey, QPen( color, DEFAULT_LINE_WIDTH, typeLine ) ); - myPlot->setCurveSymbol( curveKey, QwtSymbol( typeMarker, - QBrush( color ), - QPen( color ), - QSize( myMarkerSize, myMarkerSize ) ) ); - curve->setColor( color ); - curve->setLine( qwt2plotLine( typeLine ) ); - curve->setMarker( qwt2plotMarker( typeMarker ) ); - } - else { - Qt::PenStyle ps = plot2qwtLine( curve->getLine() ); - QwtSymbol::Style ms = plot2qwtMarker( curve->getMarker() ); - myPlot->setCurvePen( curveKey, QPen( curve->getColor(), curve->getLineWidth(), ps ) ); - myPlot->setCurveSymbol( curveKey, QwtSymbol( ms, - QBrush( curve->getColor() ), - QPen( curve->getColor() ), - QSize( myMarkerSize, myMarkerSize ) ) ); - } - if ( myCurveType == 0 ) - myPlot->setCurveStyle( curveKey, QwtCurve::NoCurve ); - else if ( myCurveType == 1 ) - myPlot->setCurveStyle( curveKey, QwtCurve::Lines ); - else if ( myCurveType == 2 ) - myPlot->setCurveStyle( curveKey, QwtCurve::Spline ); - myPlot->setCurveData( curveKey, curve->horData(), curve->verData(), curve->nbPoints() ); - } - updateTitles(); - if ( update ) - myPlot->replot(); -} - -/*! - Adds curves into view -*/ -void Plot2d_ViewFrame::displayCurves( const curveList& curves, bool update ) -{ - myPlot->setUpdatesEnabled( false ); - QPtrListIterator it(curves); - Plot2d_Curve* aCurve; - while( (aCurve = it.current()) ) { - displayCurve( aCurve, false ); - ++it; - } - - fitAll(); - myPlot->setUpdatesEnabled( true ); - if ( update ) - myPlot->replot(); -} - -/*! - Erases curve -*/ -void Plot2d_ViewFrame::eraseCurve( Plot2d_Curve* curve, bool update ) -{ - if ( !curve ) - return; - int curveKey = hasCurve( curve ); - if ( curveKey ) { - myPlot->removeCurve( curveKey ); - myCurves.remove( curveKey ); - updateTitles(); - if ( update ) - myPlot->replot(); - } -} - -/*! - Erases curves -*/ -void Plot2d_ViewFrame::eraseCurves( const curveList& curves, bool update ) -{ - QPtrListIterator it(curves); - Plot2d_Curve* aCurve; - while( (aCurve = it.current()) ) { - eraseCurve( aCurve, false ); - ++it; - } -// fitAll(); - if ( update ) - myPlot->replot(); -} - -/*! - Updates curves attributes -*/ -void Plot2d_ViewFrame::updateCurve( Plot2d_Curve* curve, bool update ) -{ - if ( !curve ) - return; - int curveKey = hasCurve( curve ); - if ( curveKey ) { - if ( !curve->isAutoAssign() ) { - Qt::PenStyle ps = plot2qwtLine( curve->getLine() ); - QwtSymbol::Style ms = plot2qwtMarker( curve->getMarker() ); - myPlot->setCurvePen( curveKey, QPen( curve->getColor(), curve->getLineWidth(), ps ) ); - myPlot->setCurveSymbol( curveKey, QwtSymbol( ms, - QBrush( curve->getColor() ), - QPen( curve->getColor() ), - QSize( myMarkerSize, myMarkerSize ) ) ); - myPlot->setCurveData( curveKey, curve->horData(), curve->verData(), curve->nbPoints() ); - } - myPlot->setCurveTitle( curveKey, curve->getVerTitle() ); - myPlot->curve( curveKey )->setEnabled( true ); - if ( update ) - myPlot->replot(); - } -} - -/*! - Returns curve key if is is displayed in the viewer and 0 otherwise -*/ -int Plot2d_ViewFrame::hasCurve( Plot2d_Curve* curve ) -{ - QIntDictIterator it( myCurves ); - for ( ; it.current(); ++it ) { - if ( it.current() == curve ) - return it.currentKey(); - } - return 0; -} - -/*! - Gets lsit of displayed curves -*/ -int Plot2d_ViewFrame::getCurves( QList& clist ) -{ - clist.clear(); - clist.setAutoDelete( false ); - QIntDictIterator it( myCurves ); - for ( ; it.current(); ++it ) { - clist.append( it.current() ); - } - return clist.count(); -} - -/*! - Returns true if the curve is visible -*/ -bool Plot2d_ViewFrame::isVisible( Plot2d_Curve* curve ) -{ - if(curve) { - int key = hasCurve( curve ); - if ( key ) - return myPlot->curve( key )->enabled(); - } - return false; -} - -/*! - update legend -*/ -void Plot2d_ViewFrame::updateLegend( const Plot2d_Prs* prs ) -{ - if ( !prs || prs->IsNull() ) - return; - curveList aCurves = prs->getCurves(); - - QPtrListIterator it(aCurves); - Plot2d_Curve* aCurve; - while( (aCurve = it.current()) ) { - int curveKey = hasCurve( aCurve ); - if ( curveKey ) - myPlot->setCurveTitle( curveKey, aCurve->getVerTitle() ); - ++it; - } -} - -/*! - Fits the view to see all data -*/ -void Plot2d_ViewFrame::fitAll() -{ - QwtDiMap xMap1 = myPlot->canvasMap( QwtPlot::xBottom ); - - myPlot->setAxisAutoScale( QwtPlot::yLeft ); - myPlot->setAxisAutoScale( QwtPlot::xBottom ); - myPlot->replot(); - - // for existing grid - QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom ); - QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft ); - - myPlot->setAxisScale( QwtPlot::xBottom, - myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ), - myPlot->invTransform( QwtPlot::xBottom, xMap.i2() ) ); - myPlot->setAxisScale( QwtPlot::yLeft, - myPlot->invTransform( QwtPlot::yLeft, yMap.i1() ), - myPlot->invTransform( QwtPlot::yLeft, yMap.i2() ) ); - - if (mySecondY) { - myPlot->setAxisAutoScale( QwtPlot::yRight ); - myPlot->replot(); - QwtDiMap yMap2 = myPlot->canvasMap( QwtPlot::yRight ); - myPlot->setAxisScale( QwtPlot::yRight, - myPlot->invTransform( QwtPlot::yRight, yMap2.i1() ), - myPlot->invTransform( QwtPlot::yRight, yMap2.i2() ) ); - } - myPlot->replot(); -} - -/*! - Fits the view to rectangle area (pixels) -*/ -void Plot2d_ViewFrame::fitArea( const QRect& area ) -{ - QRect rect = area.normalize(); - if ( rect.width() < MIN_RECT_SIZE ) { - rect.setWidth( MIN_RECT_SIZE ); - rect.setLeft( rect.left() - MIN_RECT_SIZE/2 ); - } - if ( rect.height() < MIN_RECT_SIZE ) { - rect.setHeight( MIN_RECT_SIZE ); - rect.setTop( rect.top() - MIN_RECT_SIZE/2 ); - } - myPlot->setAxisScale( QwtPlot::yLeft, - myPlot->invTransform( QwtPlot::yLeft, rect.top() ), - myPlot->invTransform( QwtPlot::yLeft, rect.bottom() ) ); - if (mySecondY) - myPlot->setAxisScale( QwtPlot::yRight, - myPlot->invTransform( QwtPlot::yRight, rect.top() ), - myPlot->invTransform( QwtPlot::yRight, rect.bottom() ) ); - myPlot->setAxisScale( QwtPlot::xBottom, - myPlot->invTransform( QwtPlot::xBottom, rect.left() ), - myPlot->invTransform( QwtPlot::xBottom, rect.right() ) ); - myPlot->replot(); -} - -/*! - "Fit Data" command for TUI interface -*/ -void Plot2d_ViewFrame::fitData(const int mode, - const double xMin, const double xMax, - const double yMin, const double yMax, - double y2Min, double y2Max) -{ - if ( mode == 0 || mode == 2 ) { - myPlot->setAxisScale( QwtPlot::yLeft, yMax, yMin ); - if (mySecondY) - myPlot->setAxisScale( QwtPlot::yRight, y2Max, y2Min ); - } - if ( mode == 0 || mode == 1 ) - myPlot->setAxisScale( QwtPlot::xBottom, xMin, xMax ); - myPlot->replot(); -} - -/*! - Gets current fit ranges for view frame -*/ -void Plot2d_ViewFrame::getFitRanges(double& xMin,double& xMax, - double& yMin, double& yMax, - double& y2Min, double& y2Max) -{ - int ixMin = myPlot->canvasMap( QwtPlot::xBottom ).i1(); - int ixMax = myPlot->canvasMap( QwtPlot::xBottom ).i2(); - int iyMin = myPlot->canvasMap( QwtPlot::yLeft ).i1(); - int iyMax = myPlot->canvasMap( QwtPlot::yLeft ).i2(); - xMin = myPlot->invTransform(QwtPlot::xBottom, ixMin); - xMax = myPlot->invTransform(QwtPlot::xBottom, ixMax); - yMin = myPlot->invTransform(QwtPlot::yLeft, iyMin); - yMax = myPlot->invTransform(QwtPlot::yLeft, iyMax); - y2Min = 0; - y2Max = 0; - if (mySecondY) { - int iyMin = myPlot->canvasMap( QwtPlot::yRight ).i1(); - int iyMax = myPlot->canvasMap( QwtPlot::yRight ).i2(); - y2Min = myPlot->invTransform(QwtPlot::yRight, iyMin); - y2Max = myPlot->invTransform(QwtPlot::yRight, iyMax); - } -} - -/*! - Tests if it is necessary to start operation on mouse action -*/ -int Plot2d_ViewFrame::testOperation( const QMouseEvent& me ) -{ - int btn = me.button() | me.state(); - const int zoomBtn = ControlButton | LeftButton; - const int panBtn = ControlButton | MidButton; - const int fitBtn = ControlButton | RightButton; - - switch (btn) - { - case zoomBtn: - { - QPixmap zoomPixmap (imageZoomCursor); - QCursor zoomCursor (zoomPixmap); - myPlot->canvas()->setCursor( zoomCursor ); - return ZoomId; - } - case panBtn: - myPlot->canvas()->setCursor( QCursor( Qt::SizeAllCursor ) ); - return PanId; - case fitBtn: - myPlot->canvas()->setCursor( QCursor( Qt::PointingHandCursor ) ); - return FitAreaId; - default : - return NoOpId; - } -} - -/*! - "Settings" toolbar action slot -*/ -void Plot2d_ViewFrame::onSettings() -{ -#ifdef TEST_AUTOASSIGN - typedef QMap IList; - typedef QMap SList; - IList mars, lins; - SList cols; - cols[ "red-min" ] = 1000; - cols[ "red-max" ] = -1; - cols[ "green-min" ] = 1000; - cols[ "green-max" ] = -1; - cols[ "blue-min" ] = 1000; - cols[ "blue-max" ] = -1; - for ( unsigned i = 0; i < 10000; i++ ) { - QwtSymbol::Style typeMarker; - QColor color; - Qt::PenStyle typeLine; - myPlot->getNextMarker( typeMarker, color, typeLine ); - if ( mars.contains(typeMarker) ) - mars[ typeMarker ] = mars[ typeMarker ]+1; - else - mars[ typeMarker ] = 0; - if ( lins.contains(typeLine) ) - lins[ typeLine ] = lins[ typeLine ]+1; - else - lins[ typeLine ] = 0; - if ( cols[ "red-max" ] < color.red() ) - cols[ "red-max" ] = color.red(); - if ( cols[ "red-min" ] > color.red() ) - cols[ "red-min" ] = color.red(); - if ( cols[ "green-max" ] < color.green() ) - cols[ "green-max" ] = color.green(); - if ( cols[ "green-min" ] > color.green() ) - cols[ "green-min" ] = color.green(); - if ( cols[ "blue-max" ] < color.blue() ) - cols[ "blue-max" ] = color.blue(); - if ( cols[ "blue-min" ] > color.blue() ) - cols[ "blue-min" ] = color.blue(); - } -#endif - - Plot2d_SetupViewDlg* dlg = new Plot2d_SetupViewDlg( this, true, mySecondY ); - dlg->setMainTitle( myTitleEnabled, myTitle ); - dlg->setXTitle( myXTitleEnabled, myXTitle ); - dlg->setYTitle( myYTitleEnabled, myYTitle ); - if (mySecondY) - dlg->setY2Title( myY2TitleEnabled, myY2Title ); - dlg->setCurveType( myCurveType ); - dlg->setLegend( myShowLegend, myLegendPos ); - dlg->setMarkerSize( myMarkerSize ); - dlg->setBackgroundColor( myBackground ); - dlg->setScaleMode(myXMode, myYMode); - // - dlg->setMajorGrid( myXGridMajorEnabled, myPlot->axisMaxMajor( QwtPlot::xBottom ), - myYGridMajorEnabled, myPlot->axisMaxMajor( QwtPlot::yLeft ), - myY2GridMajorEnabled, myPlot->axisMaxMajor( QwtPlot::yRight ) ); - dlg->setMinorGrid( myXGridMinorEnabled, myPlot->axisMaxMinor( QwtPlot::xBottom ), - myYGridMinorEnabled, myPlot->axisMaxMinor( QwtPlot::yLeft ), - myY2GridMinorEnabled, myPlot->axisMaxMinor( QwtPlot::yRight ) ); - if ( dlg->exec() == QDialog::Accepted ) { - // horizontal axis title - setTitle( dlg->isXTitleEnabled(), dlg->getXTitle(), XTitle, false ); - // vertical left axis title - setTitle( dlg->isYTitleEnabled(), dlg->getYTitle(), YTitle, false ); - if (mySecondY) // vertical right axis title - setTitle( dlg->isY2TitleEnabled(), dlg->getY2Title(), Y2Title, false ); - - // main title - setTitle( dlg->isMainTitleEnabled(), dlg->getMainTitle(), MainTitle, true ); - // curve type - if ( myCurveType != dlg->getCurveType() ) { - setCurveType( dlg->getCurveType(), false ); - } - // legend - if ( myShowLegend != dlg->isLegendEnabled() ) { - showLegend( dlg->isLegendEnabled(), false ); - } - if ( myLegendPos != dlg->getLegendPos() ) { - setLegendPos( dlg->getLegendPos() ); - } - // marker size - if ( myMarkerSize != dlg->getMarkerSize() ) { - setMarkerSize( dlg->getMarkerSize(), false ); - } - // background color - if ( myBackground != dlg->getBackgroundColor() ) { - setBackgroundColor( dlg->getBackgroundColor() ); - } - // grid - bool aXGridMajorEnabled, aXGridMinorEnabled, aYGridMajorEnabled, aYGridMinorEnabled, - aY2GridMajorEnabled, aY2GridMinorEnabled; - int aXGridMaxMajor, aXGridMaxMinor, aYGridMaxMajor, aYGridMaxMinor, - aY2GridMaxMajor, aY2GridMaxMinor; - dlg->getMajorGrid( aXGridMajorEnabled, aXGridMaxMajor, aYGridMajorEnabled, aYGridMaxMajor, - aY2GridMajorEnabled, aY2GridMaxMajor); - dlg->getMinorGrid( aXGridMinorEnabled, aXGridMaxMinor, aYGridMinorEnabled, aYGridMaxMinor, - aY2GridMinorEnabled, aY2GridMaxMinor); - setXGrid( aXGridMajorEnabled, aXGridMaxMajor, aXGridMinorEnabled, aXGridMaxMinor, false ); - setYGrid( aYGridMajorEnabled, aYGridMaxMajor, aYGridMinorEnabled, aYGridMaxMinor, - aY2GridMajorEnabled, aY2GridMaxMajor, aY2GridMinorEnabled, aY2GridMaxMinor, false ); - if ( myXMode != dlg->getXScaleMode() ) { - setHorScaleMode( dlg->getXScaleMode() ); - } - if ( myYMode != dlg->getYScaleMode() ) { - setVerScaleMode( dlg->getYScaleMode() ); - } - // update view - myPlot->replot(); - // update preferences - if ( dlg->isSetAsDefault() ) - writePreferences(); - } - delete dlg; -} - -/*! - "Fit Data" command slot -*/ -void Plot2d_ViewFrame::onFitData() -{ - Plot2d_FitDataDlg* dlg = new Plot2d_FitDataDlg( this, mySecondY ); - double xMin,xMax,yMin,yMax,y2Min,y2Max; - getFitRanges(xMin,xMax,yMin,yMax,y2Min,y2Max); - - dlg->setRange( xMin, xMax, yMin, yMax, y2Min, y2Max ); - if ( dlg->exec() == QDialog::Accepted ) { - int mode = dlg->getRange( xMin, xMax, yMin, yMax, y2Min, y2Max ); - fitData(mode,xMin,xMax,yMin,yMax,y2Min,y2Max); - } - delete dlg; -} - -/*! - Change background color -*/ -void Plot2d_ViewFrame::onChangeBackground() -{ - QColor selColor = QColorDialog::getColor ( backgroundColor(), this ); - if ( selColor.isValid() ) { - setBackgroundColor( selColor ); - } -} - -/*! - Sets curve type -*/ -void Plot2d_ViewFrame::setCurveType( int curveType, bool update ) -{ - myCurveType = curveType; - QArray keys = myPlot->curveKeys(); - for ( int i = 0; i < (int)keys.count(); i++ ) { - if ( myCurveType == 0 ) - myPlot->setCurveStyle( keys[i], QwtCurve::Dots );//QwtCurve::NoCurve - else if ( myCurveType == 1 ) - myPlot->setCurveStyle( keys[i], QwtCurve::Lines ); - else if ( myCurveType == 2 ) - myPlot->setCurveStyle( keys[i], QwtCurve::Spline ); - } - if ( update ) - myPlot->replot(); - emit vpCurveChanged(); -} - -/*! - Sets curve title - \param curveKey - curve id - \param title - new title -*/ -void Plot2d_ViewFrame::setCurveTitle( int curveKey, const QString& title ) -{ - if(myPlot) myPlot->setCurveTitle(curveKey, title); -} - -/*! - Shows/hides legend -*/ -void Plot2d_ViewFrame::showLegend( bool show, bool update ) -{ - myShowLegend = show; - myPlot->setAutoLegend( myShowLegend ); - myPlot->enableLegend( myShowLegend ); - if ( update ) - myPlot->replot(); -} - -/*! - Sets legend position : 0 - left, 1 - right, 2 - top, 3 - bottom -*/ -void Plot2d_ViewFrame::setLegendPos( int pos ) -{ - myLegendPos = pos; - switch( pos ) { - case 0: - myPlot->setLegendPos( Qwt::Left ); - break; - case 1: - myPlot->setLegendPos( Qwt::Right ); - break; - case 2: - myPlot->setLegendPos( Qwt::Top ); - break; - case 3: - myPlot->setLegendPos( Qwt::Bottom ); - break; - } -} - -/*! - Sets new marker size -*/ -void Plot2d_ViewFrame::setMarkerSize( const int size, bool update ) -{ - if ( myMarkerSize != size ) - { - myMarkerSize = size; - QArray keys = myPlot->curveKeys(); - for ( int i = 0; i < (int)keys.count(); i++ ) - { - QwtPlotCurve* crv = myPlot->curve( keys[i] ); - if ( crv ) - { - QwtSymbol aSymbol = crv->symbol(); - aSymbol.setSize( myMarkerSize, myMarkerSize ); - myPlot->setCurveSymbol( keys[i], aSymbol ); - } - } - if ( update ) - myPlot->replot(); - } -} - -/*! - Sets background color -*/ -void Plot2d_ViewFrame::setBackgroundColor( const QColor& color ) -{ - myBackground = color; - //myPlot->setCanvasBackground( myBackground ); - myPlot->canvas()->setPalette( myBackground ); - myPlot->setPalette( myBackground ); - QPalette aPal = myPlot->getLegend()->palette(); - for ( int i = 0; i < QPalette::NColorGroups; i++ ) { - QPalette::ColorGroup cg = (QPalette::ColorGroup)i; - aPal.setColor( cg, QColorGroup::Base, myBackground ); - aPal.setColor( cg, QColorGroup::Background, myBackground ); - } - myPlot->getLegend()->setPalette( aPal ); - Repaint(); -} -/*! - Gets background color -*/ -QColor Plot2d_ViewFrame::backgroundColor() const -{ - return myBackground; -} -/*! - Sets hor.axis grid parameters -*/ -void Plot2d_ViewFrame::setXGrid( bool xMajorEnabled, const int xMajorMax, - bool xMinorEnabled, const int xMinorMax, - bool update ) -{ - myXGridMajorEnabled = xMajorEnabled; - myXGridMinorEnabled = xMinorEnabled; - myXGridMaxMajor = xMajorMax; - myXGridMaxMinor = xMinorMax; - myPlot->setAxisMaxMajor( QwtPlot::xBottom, myXGridMaxMajor ); - myPlot->setAxisMaxMinor( QwtPlot::xBottom, myXGridMaxMinor ); - myPlot->setGridXAxis(QwtPlot::xBottom); - myPlot->enableGridX( myXGridMajorEnabled ); - myPlot->enableGridXMin( myXGridMinorEnabled ); - if ( update ) - myPlot->replot(); -} -/*! - Sets ver.axis grid parameters -*/ -void Plot2d_ViewFrame::setYGrid( bool yMajorEnabled, const int yMajorMax, - bool yMinorEnabled, const int yMinorMax, - bool y2MajorEnabled, const int y2MajorMax, - bool y2MinorEnabled, const int y2MinorMax, - bool update ) -{ - myYGridMajorEnabled = yMajorEnabled; - myYGridMinorEnabled = yMinorEnabled; - myYGridMaxMajor = yMajorMax; - myYGridMaxMinor = yMinorMax; - - if (mySecondY) { - myY2GridMajorEnabled = y2MajorEnabled; - myY2GridMinorEnabled = y2MinorEnabled; - myY2GridMaxMajor = y2MajorMax; - myY2GridMaxMinor = y2MinorMax; - } - myPlot->setAxisMaxMajor( QwtPlot::yLeft, myYGridMaxMajor ); - myPlot->setAxisMaxMinor( QwtPlot::yLeft, myYGridMaxMinor ); - - if (mySecondY) { - myPlot->setAxisMaxMajor( QwtPlot::yRight, myY2GridMaxMajor ); - myPlot->setAxisMaxMinor( QwtPlot::yRight, myY2GridMaxMinor ); - } - - myPlot->setGridYAxis(QwtPlot::yLeft); - - if (mySecondY) { - if (myYGridMajorEnabled) { - myPlot->enableGridYMin(myYGridMinorEnabled); - myPlot->enableGridY( myYGridMajorEnabled); - } - else if (myY2GridMajorEnabled) { - myPlot->setGridYAxis(QwtPlot::yRight); - myPlot->enableGridYMin(myY2GridMinorEnabled); - myPlot->enableGridY(myY2GridMajorEnabled); - } - else { - myPlot->enableGridYMin(false); - myPlot->enableGridY(false); - } - } - else { - myPlot->enableGridY( myYGridMajorEnabled ); - myPlot->enableGridYMin( myYGridMinorEnabled ); - } - if ( update ) - myPlot->replot(); -} - -/*! - Sets title for some axis -*/ -void Plot2d_ViewFrame::setTitle( bool enabled, const QString& title, - ObjectType type, bool update ) -{ - switch (type) { - case MainTitle: - myTitleEnabled = enabled; - myTitle = title; - myPlot->setTitle( myTitleEnabled ? myTitle : QString::null ); - break; - case XTitle: - myXTitleEnabled = enabled; - myXTitle = title; - myPlot->setAxisTitle( QwtPlot::xBottom, myXTitleEnabled ? myXTitle : QString::null ); - break; - case YTitle: - myYTitleEnabled = enabled; - myYTitle = title; - myPlot->setAxisTitle( QwtPlot::yLeft, myYTitleEnabled ? myYTitle : QString::null ); - break; - case Y2Title: - myY2TitleEnabled = enabled; - myY2Title = title; - myPlot->setAxisTitle( QwtPlot::yRight, myY2TitleEnabled ? myY2Title : QString::null ); - break; - } - if ( update ) - myPlot->replot(); -} -/*! - Sets title for some axis -*/ -QString Plot2d_ViewFrame::getTitle( ObjectType type ) const -{ - QString title = ""; - switch (type) { - case MainTitle: - title = myTitle; break; - case XTitle: - title = myXTitle; break; - case YTitle: - title = myYTitle; break; - case Y2Title: - title = myY2Title; break; - } - return title; -} -/*! - Sets font for Plot2d object : title or axis -*/ -void Plot2d_ViewFrame::setFont( const QFont& font, ObjectType type, bool update) -{ - switch (type) { - case MainTitle: - myPlot->setTitleFont(font); - break; - case XTitle: - myPlot->setAxisTitleFont(QwtPlot::xBottom, font); break; - case YTitle: - myPlot->setAxisTitleFont(QwtPlot::yLeft, font); break; - case Y2Title: - myPlot->setAxisTitleFont(QwtPlot::yRight, font); break; - case XAxis: - myPlot->setAxisFont(QwtPlot::xBottom, font); break; - case YAxis: - myPlot->setAxisFont(QwtPlot::yLeft, font); break; - case Y2Axis: - myPlot->setAxisFont(QwtPlot::yRight, font); break; - } - if ( update ) - myPlot->replot(); -} -/*! - Sets scale mode for horizontal axis: 0 - linear, 1 - logarithmic -*/ -void Plot2d_ViewFrame::setHorScaleMode( const int mode, bool update ) -{ - // san -- Protection against QwtCurve bug in Qwt 0.4.x: - // it crashes if switched to X/Y logarithmic mode, when one or more points have - // non-positive X/Y coordinate - if ( mode && !isXLogEnabled() ){ - SUIT_MessageBox::warn1(this, tr("WARNING"), tr("WRN_XLOG_NOT_ALLOWED"), tr("BUT_OK")); - return; - } - - myXMode = mode; - - myPlot->changeAxisOptions( QwtPlot::xBottom, QwtAutoScale::Logarithmic, myXMode != 0 ); - - if ( update ) - fitAll(); - emit vpModeHorChanged(); -} -/*! - Sets scale mode for vertical axis: 0 - linear, 1 - logarithmic -*/ -void Plot2d_ViewFrame::setVerScaleMode( const int mode, bool update ) -{ - // san -- Protection against QwtCurve bug in Qwt 0.4.x: - // it crashes if switched to X/Y logarithmic mode, when one or more points have - // non-positive X/Y coordinate - if ( mode && !isYLogEnabled() ){ - SUIT_MessageBox::warn1(this, tr("WARNING"), tr("WRN_YLOG_NOT_ALLOWED"), tr("BUT_OK")); - return; - } - - myYMode = mode; - myPlot->changeAxisOptions( QwtPlot::yLeft, QwtAutoScale::Logarithmic, myYMode != 0 ); - if (mySecondY) - myPlot->changeAxisOptions( QwtPlot::yRight, QwtAutoScale::Logarithmic, myYMode != 0 ); - - if ( update ) - fitAll(); - emit vpModeVerChanged(); -} - -/*! - Return, scale mode for horizontal axis -*/ -bool Plot2d_ViewFrame::isModeHorLinear() -{ - return (myXMode == 0 ? true : false); -} - -/*! - Return, scale mode for vertical axis -*/ -bool Plot2d_ViewFrame::isModeVerLinear() -{ - return (myYMode == 0 ? true : false); -} -/*! - Slot, called when user presses mouse button -*/ -void Plot2d_ViewFrame::plotMousePressed(const QMouseEvent& me ) -{ - Plot2d_ViewWindow* aParent = dynamic_cast(parent()); - if (aParent) - aParent->putInfo(getInfo(me.pos())); - if ( myOperation == NoOpId ) - myOperation = testOperation( me ); - if ( myOperation != NoOpId ) { - myPnt = me.pos(); - if ( myOperation == FitAreaId ) { - myPlot->setOutlineStyle( Qwt::Rect ); - } - else if ( myOperation == GlPanId ) { - myPlot->setAxisScale( QwtPlot::yLeft, - myPlot->invTransform( QwtPlot::yLeft, myPnt.y() ) + myYDistance/2, - myPlot->invTransform( QwtPlot::yLeft, myPnt.y() ) - myYDistance/2 ); - myPlot->setAxisScale( QwtPlot::xBottom, - myPlot->invTransform( QwtPlot::xBottom, myPnt.x() ) - myXDistance/2, - myPlot->invTransform( QwtPlot::xBottom, myPnt.x() ) + myXDistance/2 ); - if (mySecondY) - myPlot->setAxisScale( QwtPlot::yRight, - myPlot->invTransform( QwtPlot::yRight, myPnt.y() ) + myYDistance2/2, - myPlot->invTransform( QwtPlot::yRight, myPnt.y() ) - myYDistance2/2 ); - myPlot->replot(); - } - } - else { - int btn = me.button() | me.state(); - if (btn == RightButton) { - QMouseEvent* aEvent = new QMouseEvent(QEvent::MouseButtonPress, - me.pos(), btn, me.state()); - // QMouseEvent 'me' has the 'MouseButtonDblClick' type. In this case we create new event 'aEvent'. - parent()->eventFilter(this, aEvent); - } - } - setFocus(); -} -/*! - Slot, called when user moves mouse -*/ -void Plot2d_ViewFrame::plotMouseMoved( const QMouseEvent& me ) -{ - int dx = me.pos().x() - myPnt.x(); - int dy = me.pos().y() - myPnt.y(); - - if ( myOperation != NoOpId) { - if ( myOperation == ZoomId ) { - this->incrementalZoom( dx, dy ); - myPnt = me.pos(); - } - else if ( myOperation == PanId ) { - this->incrementalPan( dx, dy ); - myPnt = me.pos(); - } - } - else { - Plot2d_ViewWindow* aParent = dynamic_cast(parent()); - if (aParent) - aParent->putInfo(getInfo(me.pos())); - } -} -/*! - Slot, called when user releases mouse -*/ -void Plot2d_ViewFrame::plotMouseReleased( const QMouseEvent& me ) -{ - if ( myOperation == NoOpId && me.button() == RightButton ) - { - QContextMenuEvent aEvent( QContextMenuEvent::Mouse, - me.pos(), me.globalPos(), - me.state() ); - emit contextMenuRequested( &aEvent ); - } - if ( myOperation == FitAreaId ) { - QRect rect( myPnt, me.pos() ); - fitArea( rect ); - } - myPlot->canvas()->setCursor( QCursor( Qt::CrossCursor ) ); - myPlot->setOutlineStyle( Qwt::Triangle ); - - Plot2d_ViewWindow* aParent = dynamic_cast(parent()); - if (aParent) - aParent->putInfo(tr("INF_READY")); - myOperation = NoOpId; -} -/*! - Slot, called when user wheeling mouse -*/ -void Plot2d_ViewFrame::wheelEvent(QWheelEvent* event) -{ - double aDelta = event->delta(); - double aScale = (aDelta < 0) ? 100./(-aDelta) : aDelta/100.; - - 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() )*aScale ); - myPlot->setAxisScale( QwtPlot::xBottom, - myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ), - myPlot->invTransform( QwtPlot::xBottom, xMap.i2() )*aScale ); - if (mySecondY) { - QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight ); - myPlot->setAxisScale( QwtPlot::yRight, - myPlot->invTransform( QwtPlot::yRight, y2Map.i1() ), - myPlot->invTransform( QwtPlot::yRight, y2Map.i2() )*aScale ); - } - myPlot->replot(); - myPnt = event->pos(); -} -/*! - View operations : Pan view -*/ -void Plot2d_ViewFrame::onViewPan() -{ - QCursor panCursor (Qt::SizeAllCursor); - myPlot->canvas()->setCursor( panCursor ); - myOperation = PanId; - qApp->installEventFilter( this ); -} -/*! - View operations : Zoom view -*/ -void Plot2d_ViewFrame::onViewZoom() -{ - QPixmap zoomPixmap (imageZoomCursor); - QCursor zoomCursor (zoomPixmap); - myPlot->canvas()->setCursor( zoomCursor ); - myOperation = ZoomId; - qApp->installEventFilter( this ); -} -/*! - View operations : Fot All -*/ -void Plot2d_ViewFrame::onViewFitAll() -{ - fitAll(); -} -/*! - View operations : Fit Area -*/ -void Plot2d_ViewFrame::onViewFitArea() -{ - myPlot->canvas()->setCursor( QCursor( Qt::PointingHandCursor ) ); - myOperation = FitAreaId; - qApp->installEventFilter( this ); -} -/*! - View operations : Global panning -*/ -void Plot2d_ViewFrame::onViewGlobalPan() -{ - QPixmap globalPanPixmap (imageCrossCursor); - QCursor glPanCursor (globalPanPixmap); - myPlot->canvas()->setCursor( glPanCursor ); - myPlot->changeAxisOptions( QwtPlot::xBottom, QwtAutoScale::Logarithmic, false ); - myPlot->changeAxisOptions( QwtPlot::yLeft, QwtAutoScale::Logarithmic, false ); - if (mySecondY) - myPlot->changeAxisOptions( QwtPlot::yRight, QwtAutoScale::Logarithmic, false ); - myPlot->replot(); - QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom ); - QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft ); - - myXDistance = xMap.d2() - xMap.d1(); - myYDistance = yMap.d2() - yMap.d1(); - - if (mySecondY) { - QwtDiMap yMap2 = myPlot->canvasMap( QwtPlot::yRight ); - myYDistance2 = yMap2.d2() - yMap2.d1(); - } - fitAll(); - myOperation = GlPanId; - qApp->installEventFilter( this ); -} - -/*! - Precaution for logarithmic X scale -*/ -bool Plot2d_ViewFrame::isXLogEnabled() const -{ - bool allPositive = true; - QIntDictIterator it( myCurves ); - for ( ; allPositive && it.current(); ++it ) { - allPositive = ( it.current()->getMinX() > 0. ); - } - return allPositive; -} - -/*! - Precaution for logarithmic Y scale -*/ -bool Plot2d_ViewFrame::isYLogEnabled() const -{ - bool allPositive = true; - QIntDictIterator it( myCurves ); - for ( ; allPositive && it.current(); ++it ) { - allPositive = ( it.current()->getMinY() > 0. ); - } - return allPositive; -} - -/*! - Constructor -*/ -Plot2d_Plot2d::Plot2d_Plot2d( QWidget* parent ) - : QwtPlot( parent ) -{ - // outline - enableOutline( true ); - setOutlineStyle( Qwt::Triangle ); - setOutlinePen( green ); - // legend - setAutoLegend( false ); - setLegendFrameStyle( QFrame::Box | QFrame::Sunken ); - enableLegend( false ); - // grid - enableGridX( false ); - enableGridXMin( false ); - enableGridY( false ); - enableGridYMin( false ); - // auto scaling by default - setAxisAutoScale( QwtPlot::yLeft ); - setAxisAutoScale( QwtPlot::yRight ); - setAxisAutoScale( QwtPlot::xBottom ); -} -/*! - Recalculates and redraws Plot 2d view -*/ -void Plot2d_Plot2d::replot() -{ - updateLayout(); // to fix bug(?) of Qwt - view is not updated when title is changed - QwtPlot::replot(); -} - -/*! - Checks if two colors are close to each other [ static ] - uses COLOR_DISTANCE variable as max tolerance for comparing of colors -*/ -const long COLOR_DISTANCE = 100; -const int MAX_ATTEMPTS = 10; -static bool closeColors( const QColor& color1, const QColor& color2 ) -{ - long tol = abs( color2.red() - color1.red() ) + - abs( color2.green() - color1.green() ) + - abs( color2.blue() - color1.blue() ); - - return ( tol <= COLOR_DISTANCE ); -} -/*! - Gets new unique marker for item if possible -*/ -void Plot2d_Plot2d::getNextMarker( QwtSymbol::Style& typeMarker, QColor& color, Qt::PenStyle& typeLine ) -{ - bool bOk = false; - int cnt = 1; - while ( !bOk ) { - int aRed = (int)( 256.0 * rand() / RAND_MAX); // generate random color - int aGreen = (int)( 256.0 * rand() / RAND_MAX); // ... - int aBlue = (int)( 256.0 * rand() / RAND_MAX); // ... - int aMarker = (int)( 9.0 * rand() / RAND_MAX) + 1; // 9 markers types ( not including empty ) - int aLine = (int)( 5.0 * rand() / RAND_MAX) + 1; // 5 line types ( not including empty ) - - typeMarker = ( QwtSymbol::Style )aMarker; - color = QColor( aRed, aGreen, aBlue ); - typeLine = ( Qt::PenStyle )aLine; - - cnt++; - if ( cnt == MAX_ATTEMPTS ) - bOk = true; - else - bOk = !existMarker( typeMarker, color, typeLine ); - } -/* - static int aMarker = -1; - static int aColor = -1; - static int aLine = -1; - - if ( myColors.isEmpty() ) { - // creating colors list - myColors.append( Qt::white ); - myColors.append( Qt::blue ); - myColors.append( Qt::gray ); - myColors.append( Qt::darkGreen ); - myColors.append( Qt::magenta ); - myColors.append( Qt::darkGray ); - myColors.append( Qt::red ); - myColors.append( Qt::darkBlue ); - myColors.append( Qt::darkYellow ); - myColors.append( Qt::cyan ); - myColors.append( Qt::darkRed ); - myColors.append( Qt::darkCyan ); - myColors.append( Qt::yellow ); - myColors.append( Qt::darkMagenta ); - myColors.append( Qt::green ); - myColors.append( Qt::black ); - } - - int nbMarkers = 11; // QwtSymbol supports 11 marker types - int nbLines = 6; // Qt supports 6 line types - int nbColors = myColors.count(); // number of default colors supported - - aMarker = ( aMarker + 1 ) % nbMarkers; - if ( aMarker == QwtSymbol::None || aMarker == QwtSymbol::Triangle ) aMarker++; - aColor = ( aColor + 1 ) % nbColors; - aLine = ( aLine + 1 ) % nbLines; - if ( aLine == Qt::NoPen ) aLine++; - - typeMarker = ( QwtSymbol::Style )aMarker; - color = myColors[ aColor ]; - typeLine = ( Qt::PenStyle )aLine; - if ( !existMarker( typeMarker, color, typeLine ) ) - return; - - int i, j, k; - for ( i = 0; i < nbMarkers; i++ ) { - aMarker = ( aMarker + 1 ) % nbMarkers; - if ( aMarker == QwtSymbol::None || aMarker == QwtSymbol::Triangle ) aMarker++; - for ( j = 0; j < nbColors; j++ ) { - aColor = ( aColor + 1 ) % nbColors; - for ( k = 0; k < nbLines; k++ ) { - aLine = ( aLine + 1 ) % nbLines; - if ( aLine == Qt::NoPen ) aLine++; - if ( !existMarker( ( QwtSymbol::Style )aMarker, aColor, ( Qt::PenStyle )aLine ) ) { - typeMarker = ( QwtSymbol::Style )aMarker; - color = myColors[ aColor ]; - typeLine = ( Qt::PenStyle )aLine; - return; - } - } - } - } -*/ -} - -/*! - \return the default layout behavior of the widget -*/ -QSizePolicy Plot2d_Plot2d::sizePolicy() const -{ - return QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); -} - -/*! - \return the recommended size for the widget -*/ -QSize Plot2d_Plot2d::sizeHint() const -{ - return QwtPlot::minimumSizeHint(); -} - -/*! - return minimum size for qwt plot -*/ -QSize Plot2d_Plot2d::minimumSizeHint() const -{ - return QSize( 0, 0 ); -// QSize aSize = QwtPlot::minimumSizeHint(); -// return QSize(aSize.width()*3/4, aSize.height()); -} -/*! - Checks if marker belongs to any enitity -*/ -bool Plot2d_Plot2d::existMarker( const QwtSymbol::Style typeMarker, const QColor& color, const Qt::PenStyle typeLine ) -{ - // getting all curves - QArray keys = curveKeys(); - //QColor aRgbColor; - - if ( closeColors( color, backgroundColor() ) ) - return true; - for ( int i = 0; i < (int)keys.count(); i++ ) - { - QwtPlotCurve* crv = curve( keys[i] ); - if ( crv ) { - QwtSymbol::Style aStyle = crv->symbol().style(); - QColor aColor = crv->pen().color(); - Qt::PenStyle aLine = crv->pen().style(); -// if ( aStyle == typeMarker && aColor == color && aLine == typeLine ) - if ( aStyle == typeMarker && closeColors( aColor,color ) && aLine == typeLine ) - return true; - } - } - return false; -} - -/*! - Creates presentation of object - Default implementation is empty -*/ -Plot2d_Prs* Plot2d_ViewFrame::CreatePrs( const char* /*entry*/ ) -{ - return 0; -} - -/*! - Copies preferences from other viewframe - \param vf - other view frame -*/ -void Plot2d_ViewFrame::copyPreferences( Plot2d_ViewFrame* vf ) -{ - if( !vf ) - return; - - myCurveType = vf->myCurveType; - myShowLegend = vf->myShowLegend; - myLegendPos = vf->myLegendPos; - myMarkerSize = vf->myMarkerSize; - myBackground = vf->myBackground; - myTitle = vf->myTitle; - myXTitle = vf->myXTitle; - myYTitle = vf->myYTitle; - myY2Title = vf->myY2Title; - myTitleEnabled = vf->myTitleEnabled; - myXTitleEnabled = vf->myXTitleEnabled; - myYTitleEnabled = vf->myYTitleEnabled; - myY2TitleEnabled = vf->myY2TitleEnabled; - myXGridMajorEnabled = vf->myXGridMajorEnabled; - myYGridMajorEnabled = vf->myYGridMajorEnabled; - myY2GridMajorEnabled = vf->myY2GridMajorEnabled; - myXGridMinorEnabled = vf->myXGridMinorEnabled; - myYGridMinorEnabled = vf->myYGridMinorEnabled; - myY2GridMinorEnabled = vf->myY2GridMinorEnabled; - myXGridMaxMajor = vf->myXGridMaxMajor; - myYGridMaxMajor = vf->myYGridMaxMajor; - myY2GridMaxMajor = vf->myY2GridMaxMajor; - myXGridMaxMinor = vf->myXGridMaxMinor; - myYGridMaxMinor = vf->myYGridMaxMinor; - myY2GridMaxMinor = vf->myY2GridMaxMinor; - myXMode = vf->myXMode; - myYMode = vf->myYMode; - mySecondY = vf->mySecondY; -} - -/*! - Updates titles according to curves -*/ -#define BRACKETIZE(x) QString( "[ " ) + x + QString( " ]" ) -void Plot2d_ViewFrame::updateTitles() -{ - QIntDictIterator it( myCurves ); - QStringList aXTitles; - QStringList aYTitles; - QStringList aXUnits; - QStringList aYUnits; - QStringList aTables; - int i = 0; - while ( it.current() ) { - // collect titles and units from all curves... - QString xTitle = it.current()->getHorTitle().stripWhiteSpace(); - QString yTitle = it.current()->getVerTitle().stripWhiteSpace(); - QString xUnits = it.current()->getHorUnits().stripWhiteSpace(); - QString yUnits = it.current()->getVerUnits().stripWhiteSpace(); - - aYTitles.append( yTitle ); - if ( aXTitles.find( xTitle ) == aXTitles.end() ) - aXTitles.append( xTitle ); - if ( aXUnits.find( xUnits ) == aXUnits.end() ) - aXUnits.append( xUnits ); - if ( aYUnits.find( yUnits ) == aYUnits.end() ) - aYUnits.append( yUnits ); - - QString aName = it.current()->getTableTitle(); - if( !aName.isEmpty() && aTables.find( aName ) == aTables.end() ) - aTables.append( aName ); - - ++it; - ++i; - } - // ... and update plot 2d view - QString xUnits, yUnits; - if ( aXUnits.count() == 1 && !aXUnits[0].isEmpty() ) - xUnits = BRACKETIZE( aXUnits[0] ); - if ( aYUnits.count() == 1 && !aYUnits[0].isEmpty()) - yUnits = BRACKETIZE( aYUnits[0] ); - QString xTitle, yTitle; - if ( aXTitles.count() == 1 && aXUnits.count() == 1 ) - xTitle = aXTitles[0]; - if ( aYTitles.count() == 1 ) - yTitle = aYTitles[0]; - - if ( !xTitle.isEmpty() && !xUnits.isEmpty() ) - xTitle += " "; - if ( !yTitle.isEmpty() && !yUnits.isEmpty() ) - yTitle += " "; - - setTitle( myXTitleEnabled, xTitle + xUnits, XTitle, true ); - setTitle( myYTitleEnabled, yTitle + yUnits, YTitle, true ); - setTitle( true, aTables.join("; "), MainTitle, true ); -} - -/*! - Outputs content of viewframe to file - \param file - file name - \param format - file format -*/ -bool Plot2d_ViewFrame::print( const QString& file, const QString& format ) const -{ -#ifdef WIN32 - return false; - -#else - bool res = false; - if( myPlot ) - { - QPaintDevice* pd = 0; - if( format=="PS" ) - { - QPrinter* pr = new QPrinter( QPrinter::HighResolution ); - pr->setPageSize( QPrinter::A4 ); - pr->setOutputToFile( true ); - pr->setOutputFileName( file ); - pr->setPrintProgram( "" ); - pd = pr; - } - - if( pd ) - { - myPlot->print( *pd ); - res = true; - delete pd; - } - } - return res; -#endif -} - -/*! - \return string with all visual parameters -*/ -QString Plot2d_ViewFrame::getVisualParameters() -{ - double xmin, xmax, ymin, ymax, y2min, y2max; - getFitRanges( xmin, xmax, ymin, ymax, y2min, y2max ); - QString retStr; - retStr.sprintf( "%d*%d*%d*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e", myXMode, - myYMode, mySecondY, xmin, xmax, ymin, ymax, y2min, y2max ); - return retStr; -} - -/*! - Restores all visual parameters from string -*/ -void Plot2d_ViewFrame::setVisualParameters( const QString& parameters ) -{ - QStringList paramsLst = QStringList::split( '*', parameters, true ); - if ( paramsLst.size() == 9 ) { - double xmin, xmax, ymin, ymax, y2min, y2max; - myXMode = paramsLst[0].toInt(); - myYMode = paramsLst[1].toInt(); - mySecondY = (bool)paramsLst[2].toInt(); - xmin = paramsLst[3].toDouble(); - xmax = paramsLst[4].toDouble(); - ymin = paramsLst[5].toDouble(); - ymax = paramsLst[6].toDouble(); - y2min = paramsLst[7].toDouble(); - y2max = paramsLst[8].toDouble(); - - if (mySecondY) - setTitle( myY2TitleEnabled, myY2Title, Y2Title, false ); - setHorScaleMode( myXMode, /*update=*/false ); - setVerScaleMode( myYMode, /*update=*/false ); - - if (mySecondY) { - QwtDiMap yMap2 = myPlot->canvasMap( QwtPlot::yRight ); - myYDistance2 = yMap2.d2() - yMap2.d1(); - } - - fitData( 0, xmin, xmax, ymin, ymax, y2min, y2max ); - 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 ); -} diff --git a/src/Plot2d/Plot2d_ViewFrame.h b/src/Plot2d/Plot2d_ViewFrame.h deleted file mode 100755 index 6a6aaf171..000000000 --- a/src/Plot2d/Plot2d_ViewFrame.h +++ /dev/null @@ -1,209 +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 -// -#ifndef PLOT2D_VIEWFRAME_H -#define PLOT2D_VIEWFRAME_H - -#include "Plot2d_Curve.h" -#include -#include - -class Plot2d_Plot2d; -class Plot2d_Prs; - -typedef QIntDict CurveDict; - -class PLOT2D_EXPORT Plot2d_ViewFrame : public QWidget -{ - Q_OBJECT - - enum { NoOpId, FitAreaId, ZoomId, PanId, GlPanId, DumpId, - ModeXLinearId, ModeXLogarithmicId, ModeYLinearId, ModeYLogarithmicId, - LegendId, CurvePointsId, CurveLinesId, CurveSplinesId }; -public: - /* Construction/destruction */ - Plot2d_ViewFrame( QWidget* parent, const QString& title = "" ); - virtual ~Plot2d_ViewFrame(); - - enum ObjectType { MainTitle, XTitle, YTitle, Y2Title, XAxis, YAxis, Y2Axis }; - -public: - QWidget* getViewWidget(); - - /* display */ - void DisplayAll(); - void EraseAll(); - void Repaint(); - - void Display( const Plot2d_Prs* ); - void Erase( const Plot2d_Prs*, const bool = false ); - Plot2d_Prs* CreatePrs( const char* entry = 0 ); - - /* operations */ - void updateTitles(); - void setTitle( const QString& title ); - QString getTitle() const { return myTitle; } - void displayCurve( Plot2d_Curve* curve, bool update = false ); - void displayCurves( const curveList& curves, bool update = false ); - void eraseCurve( Plot2d_Curve* curve, bool update = false ); - void eraseCurves( const curveList& curves, bool update = false ); - int getCurves( curveList& clist ); - const CurveDict& getCurves() { return myCurves; } - int hasCurve( Plot2d_Curve* curve ); - bool isVisible( Plot2d_Curve* curve ); - void updateCurve( Plot2d_Curve* curve, bool update = false ); - void updateLegend( const Plot2d_Prs* prs ); - void fitAll(); - void fitArea( const QRect& area ); - void fitData(const int mode, - const double xMin, const double xMax, - const double yMin, const double yMax, - const double y2Min = 0, const double y2Max = 0); - - void getFitRanges(double& xMin, double& xMax, - double& yMin, double& yMax, - double& y2Min, double& y2Max); - - /* view parameters */ - void copyPreferences( Plot2d_ViewFrame* ); - void setCurveType( int curveType, bool update = true ); - int getCurveType() const { return myCurveType; } - void setCurveTitle( int curveKey, const QString& title ); - void showLegend( bool show, bool update = true ); - void setLegendPos( int pos ); - int getLegendPos() const { return myLegendPos; } - void setMarkerSize( const int size, bool update = true ); - int getMarkerSize() const { return myMarkerSize; } - void setBackgroundColor( const QColor& color ); - QColor backgroundColor() const; - void setXGrid( bool xMajorEnabled, const int xMajorMax, - bool xMinorEnabled, const int xMinorMax, bool update = true ); - void setYGrid( bool yMajorEnabled, const int yMajorMax, - bool yMinorEnabled, const int yMinorMax, - bool y2MajorEnabled, const int y2MajorMax, - bool y2MinorEnabled, const int y2MinorMax, bool update = true ); - void setTitle( bool enabled, const QString& title, ObjectType type, bool update = true ); - QString getTitle( ObjectType type ) const; - - void setFont( const QFont& font, ObjectType type, bool update = true ); - void setHorScaleMode( const int mode, bool update = true ); - int getHorScaleMode() const { return myXMode; } - void setVerScaleMode( const int mode, bool update = true ); - int getVerScaleMode() const { return myYMode; } - - bool isModeHorLinear(); - bool isModeVerLinear(); - bool isLegendShow() { return myShowLegend; }; - - // Protection against QwtCurve::drawLines() bug in Qwt 0.4.x: - // it crashes if switched to X/Y logarithmic mode, when one or more points have - // non-positive X/Y coordinate - bool isXLogEnabled() const; - bool isYLogEnabled() const; - - virtual bool print( const QString& file, const QString& format ) const; - - 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(); - void writePreferences(); - QString getInfo( const QPoint& pnt ); - virtual void wheelEvent( QWheelEvent* ); - -public slots: - void onViewPan(); - void onViewZoom(); - void onViewFitAll(); - void onViewFitArea(); - void onViewGlobalPan(); - void onSettings(); - void onFitData(); - void onChangeBackground(); - - void onPanLeft(); - void onPanRight(); - void onPanUp(); - void onPanDown(); - void onZoomIn(); - void onZoomOut(); - -protected slots: - void plotMousePressed( const QMouseEvent& ); - void plotMouseMoved( const QMouseEvent& ); - void plotMouseReleased( const QMouseEvent& ); - -signals: - void vpModeHorChanged(); - void vpModeVerChanged(); - void vpCurveChanged(); - void contextMenuRequested( QContextMenuEvent *e ); - -protected: - Plot2d_Plot2d* myPlot; - int myOperation; - QPoint myPnt; - CurveDict myCurves; - - int myCurveType; - bool myShowLegend; - int myLegendPos; - int myMarkerSize; - QColor myBackground; - QString myTitle, myXTitle, myYTitle, myY2Title; - bool myTitleEnabled, myXTitleEnabled, myYTitleEnabled, myY2TitleEnabled; - bool myXGridMajorEnabled, myYGridMajorEnabled, myY2GridMajorEnabled; - bool myXGridMinorEnabled, myYGridMinorEnabled, myY2GridMinorEnabled; - int myXGridMaxMajor, myYGridMaxMajor, myY2GridMaxMajor; - int myXGridMaxMinor, myYGridMaxMinor, myY2GridMaxMinor; - int myXMode, myYMode; - double myXDistance, myYDistance, myYDistance2; - bool mySecondY; -}; - -class Plot2d_Plot2d : public QwtPlot -{ -public: - Plot2d_Plot2d( QWidget* parent ); - - void replot(); - void getNextMarker( QwtSymbol::Style& typeMarker, QColor& color, Qt::PenStyle& typeLine ); - QwtLegend* getLegend() { -#if QWT_VERSION < 0x040200 - return d_legend; -#else - return legend(); /* mpv: porting to the Qwt 4.2.0 */ -#endif - } - virtual QSize sizeHint() const; - virtual QSizePolicy sizePolicy() const; - virtual QSize minimumSizeHint() const; - -protected: - bool existMarker( const QwtSymbol::Style typeMarker, const QColor& color, const Qt::PenStyle typeLine ); - -protected: - QValueList myColors; -}; - -#endif diff --git a/src/Plot2d/Plot2d_ViewManager.cxx b/src/Plot2d/Plot2d_ViewManager.cxx deleted file mode 100755 index 7681bd3f2..000000000 --- a/src/Plot2d/Plot2d_ViewManager.cxx +++ /dev/null @@ -1,85 +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 "Plot2d_ViewManager.h" -#include "Plot2d_ViewModel.h" -#include "Plot2d_ViewWindow.h" - -/*! - Constructor -*/ -Plot2d_ViewManager::Plot2d_ViewManager( SUIT_Study* study, SUIT_Desktop* desk ) -: SUIT_ViewManager( study, desk, new Plot2d_Viewer() ) -{ - setTitle( tr( "PLOT2D_VIEW_TITLE" ) ); -} - -/*! - Destructor -*/ -Plot2d_ViewManager::~Plot2d_ViewManager() -{ -} - -/*! - \return corresponding viewer -*/ -Plot2d_Viewer* Plot2d_ViewManager::getPlot2dModel() const -{ - return (Plot2d_Viewer*)myViewModel; -} - -/*! - Adds new view - \param theView - view to be added -*/ -bool Plot2d_ViewManager::insertView( SUIT_ViewWindow* theView ) -{ - bool res = SUIT_ViewManager::insertView( theView ); - if ( res ) - { - Plot2d_ViewWindow* view = (Plot2d_ViewWindow*)theView; - connect( view, SIGNAL( cloneView() ), this, SLOT( onCloneView() ) ); - } - return res; -} - -/*! - Creates new view -*/ -void Plot2d_ViewManager::createView() -{ - createViewWindow(); -} - -/*! - SLOT: called if action "Clone view" is activated, emits signal cloneView() -*/ -void Plot2d_ViewManager::onCloneView() -{ - SUIT_ViewWindow* vw = createViewWindow(); - - Plot2d_ViewWindow *newWnd = 0, *clonedWnd = 0; - if( vw && vw->inherits( "Plot2d_ViewWindow" ) ) - newWnd = ( Plot2d_ViewWindow* )vw; - if( sender() && sender()->inherits( "Plot2d_ViewWindow" ) ) - clonedWnd = ( Plot2d_ViewWindow* )sender(); - - if( newWnd && clonedWnd ) - emit cloneView( clonedWnd->getViewFrame(), newWnd->getViewFrame() ); -} diff --git a/src/Plot2d/Plot2d_ViewManager.h b/src/Plot2d/Plot2d_ViewManager.h deleted file mode 100755 index a26b01cb6..000000000 --- a/src/Plot2d/Plot2d_ViewManager.h +++ /dev/null @@ -1,52 +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 -// -#ifndef PLOT2D_VIEWMANAGER_H -#define PLOT2D_VIEWMANAGER_H - -#include "Plot2d.h" -#include "SUIT_ViewManager.h" - -class SUIT_Desktop; -class Plot2d_Viewer; -class Plot2d_ViewFrame; - -class PLOT2D_EXPORT Plot2d_ViewManager : public SUIT_ViewManager -{ - Q_OBJECT - -public: - Plot2d_ViewManager( SUIT_Study*, SUIT_Desktop* ); - ~Plot2d_ViewManager(); - - Plot2d_Viewer* getPlot2dModel() const; - -protected: - bool insertView(SUIT_ViewWindow* theView); - -public slots: - void createView(); - -protected slots: - void onCloneView(); - -signals: - void cloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* ); -}; - -#endif diff --git a/src/Plot2d/Plot2d_ViewModel.cxx b/src/Plot2d/Plot2d_ViewModel.cxx deleted file mode 100755 index e689f6ef5..000000000 --- a/src/Plot2d/Plot2d_ViewModel.cxx +++ /dev/null @@ -1,191 +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 -// -// Plot2d_ViewModel.cxx: implementation of the Plot2d_ViewModel class. - -#include "Plot2d_ViewModel.h" -#include "Plot2d_ViewWindow.h" -#include "Plot2d_ViewManager.h" -#include "Plot2d_ViewFrame.h" -#include "Plot2d_Prs.h" - -#include - -/*! - Constructor -*/ -Plot2d_Viewer::Plot2d_Viewer(bool theAutoDel) -:SUIT_ViewModel() -{ - myPrs = 0; - myAutoDel = theAutoDel; -} - -/*! - Destructor -*/ -Plot2d_Viewer::~Plot2d_Viewer() -{ - if (myPrs) - clearPrs(); -} - -/*! - Create new instance of view window on desktop \a theDesktop. - \retval SUIT_ViewWindow* - created view window pointer. -*/ -SUIT_ViewWindow* Plot2d_Viewer::createView(SUIT_Desktop* theDesktop) -{ - Plot2d_ViewWindow* aPlot2dView = new Plot2d_ViewWindow(theDesktop, this); - if (myPrs) - aPlot2dView->getViewFrame()->Display(myPrs); - return aPlot2dView; -} - -/*! - Adds custom items to popup menu - \param thePopup - popup menu -*/ -void Plot2d_Viewer::contextMenuPopup(QPopupMenu* thePopup) -{ - Plot2d_ViewWindow* aView = (Plot2d_ViewWindow*)(myViewManager->getActiveView()); - if ( aView ) - aView->contextMenuPopup(thePopup); - - if (thePopup->count() > 0) thePopup->insertSeparator(); - thePopup->insertItem( tr( "MNU_DUMP_VIEW" ), this, SLOT(onDumpView())); - thePopup->insertItem( tr( "MEN_PLOT2D_CHANGE_BACKGROUND" ), this, SLOT(onChangeBgColor())); - - if ( aView ) { - if ( !aView->getToolBar()->isVisible() ) { - if (thePopup->count() > 0) thePopup->insertSeparator(); - thePopup->insertItem("Show toolbar", this, SLOT(onShowToolbar())); - } - aView->RefreshDumpImage(); - } -} - -/*! - Sets presentation of viewer - \param thePrs - new presentation -*/ -void Plot2d_Viewer::setPrs(Plot2d_Prs* thePrs) -{ - if (myPrs) - clearPrs(); - myPrs = thePrs; - myPrs->setAutoDel(myAutoDel); -} - -/*! - Updates current viewer -*/ -void Plot2d_Viewer::update() -{ - SUIT_ViewManager* aMgr = getViewManager(); - QPtrVector aViews = aMgr->getViews(); - unsigned int aSize = aViews.size(); - for (uint i = 0; i < aSize; i++) { - Plot2d_ViewWindow* aView = (Plot2d_ViewWindow*)aViews[i]; - if (myPrs && aView) - aView->getViewFrame()->Display(myPrs); - } -} - -/*! - Clear viewer presentation -*/ -void Plot2d_Viewer::clearPrs() -{ - SUIT_ViewManager* aMgr = getViewManager(); - QPtrVector aViews = aMgr->getViews(); - unsigned int aSize = aViews.size(); - for (uint i = 0; i < aSize; i++) { - Plot2d_ViewWindow* aView = (Plot2d_ViewWindow*)aViews[i]; - if (myPrs && aView) - aView->getViewFrame()->Erase(myPrs); - } - if (myAutoDel && myPrs) { - delete myPrs; - } - myPrs = 0; -} - -/*! - Sets "auto delete" state of of presentation - \param theDel - new state -*/ -void Plot2d_Viewer::setAutoDel(bool theDel) -{ - myAutoDel = theDel; - if (myPrs) - myPrs->setAutoDel(theDel); -} - -/*! - SLOT: called when action "Change background" is activated -*/ -void Plot2d_Viewer::onChangeBgColor() -{ - Plot2d_ViewWindow* aView = (Plot2d_ViewWindow*)(myViewManager->getActiveView()); - if( !aView ) - return; - Plot2d_ViewFrame* aViewFrame = aView->getViewFrame(); - aViewFrame->onChangeBackground(); -} - -/*! - SLOT: called when action "Show toolbar" is activated -*/ -void Plot2d_Viewer::onShowToolbar() { - Plot2d_ViewWindow* aView = (Plot2d_ViewWindow*)(myViewManager->getActiveView()); - if ( aView ) - aView->getToolBar()->show(); -} - -/*! - SLOT: called when action "Dump view" is activated -*/ -void Plot2d_Viewer::onDumpView() -{ - Plot2d_ViewWindow* aView = (Plot2d_ViewWindow*)(myViewManager->getActiveView()); - if ( aView ) - aView->onDumpView(); -} - -/*! - SLOT: called when action "Clone view" is activated -*/ -void Plot2d_Viewer::onCloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* ) -{ -} - -/*! - Sets view manager - \param mgr - new view manager -*/ -void Plot2d_Viewer::setViewManager( SUIT_ViewManager* mgr ) -{ - SUIT_ViewModel::setViewManager( mgr ); - if( mgr && mgr->inherits( "Plot2d_ViewManager" ) ) - { - Plot2d_ViewManager* pmgr = ( Plot2d_ViewManager* )mgr; - connect( pmgr, SIGNAL( cloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* ) ), - this, SLOT( onCloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* ) ) ); - } -} diff --git a/src/Plot2d/Plot2d_ViewModel.h b/src/Plot2d/Plot2d_ViewModel.h deleted file mode 100755 index 75445ff9b..000000000 --- a/src/Plot2d/Plot2d_ViewModel.h +++ /dev/null @@ -1,64 +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 -// -#if !defined(_PLOT2D_VIEWMODEL_H) -#define _PLOT2D_VIEWMODEL_H - -#include "Plot2d.h" -#include "SUIT_ViewModel.h" - -class SUIT_ViewWindow; -class SUIT_Desktop; -class Plot2d_ViewFrame; -class Plot2d_Prs; -class QString; -class QPopupMenu; - -class PLOT2D_EXPORT Plot2d_Viewer: public SUIT_ViewModel -{ - Q_OBJECT - -public: - static QString Type() { return "Plot2d"; } - - Plot2d_Viewer(bool theAutoDel = false); - ~Plot2d_Viewer(); - - virtual void setViewManager( SUIT_ViewManager* ); - virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop); - virtual QString getType() const { return Type(); } - virtual void contextMenuPopup(QPopupMenu*); - Plot2d_Prs* getPrs() const { return myPrs; }; - void setPrs(Plot2d_Prs* thePrs); - void update(); - void clearPrs(); - void setAutoDel(bool theDel); - -protected slots: - void onChangeBgColor(); - void onDumpView(); - void onShowToolbar(); - virtual void onCloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* ); - -private: - Plot2d_Prs* myPrs; - bool myAutoDel; -}; - -#endif // !defined(_PLOT2D_VIEWMODEL_H) - diff --git a/src/Plot2d/Plot2d_ViewWindow.cxx b/src/Plot2d/Plot2d_ViewWindow.cxx deleted file mode 100755 index 1fdf78431..000000000 --- a/src/Plot2d/Plot2d_ViewWindow.cxx +++ /dev/null @@ -1,549 +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 -// -// Plot2d_ViewWindow.cxx: implementation of the Plot2d_ViewWindow class. - -#include "Plot2d_ViewWindow.h" -#include "Plot2d_ViewFrame.h" - -#include "SUIT_ViewManager.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Session.h" -#include "SUIT_ToolButton.h" -#include "SUIT_Desktop.h" - -#include "QtxAction.h" - -#include -#include -#include -#include - -/*! - Constructor -*/ -Plot2d_ViewWindow::Plot2d_ViewWindow(SUIT_Desktop* theDesktop, Plot2d_Viewer* theModel) -: SUIT_ViewWindow(theDesktop) -{ - myModel = theModel; - - myDumpImage = QImage(); - - myViewFrame = new Plot2d_ViewFrame(this, "plotView"); - setCentralWidget(myViewFrame); - - myToolBar = new QToolBar(this); - myToolBar->setCloseMode(QDockWindow::Undocked); - myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); - createActions(); - createToolBar(); - - connect(myViewFrame, SIGNAL(vpModeHorChanged()), this, SLOT(onChangeHorMode())); - connect(myViewFrame, SIGNAL(vpModeVerChanged()), this, SLOT(onChangeVerMode())); - connect(myViewFrame, SIGNAL(vpCurveChanged()), this, SLOT(onChangeCurveMode())); - connect(myViewFrame, SIGNAL(contextMenuRequested( QContextMenuEvent * )), - this, SIGNAL(contextMenuRequested( QContextMenuEvent * )) ); - -} - -/*! - Destructor -*/ -Plot2d_ViewWindow::~Plot2d_ViewWindow() -{ -} - -/*! - Puts message to status bar - \param theMsg - message text -*/ -void Plot2d_ViewWindow::putInfo(QString theMsg) -{ - QStatusBar* aStatusBar = myDesktop->statusBar(); - aStatusBar->message(theMsg/*, 3000*/); -} - -/*! - Fills popup menu with custom actions - \param popup - popup menu to be filled with -*/ -void Plot2d_ViewWindow::contextMenuPopup( QPopupMenu* thePopup ) -{ - // scaling - QPopupMenu* scalingPopup = new QPopupMenu( thePopup ); - myActionsMap[ PModeXLinearId ]->addTo( scalingPopup ); - myActionsMap[ PModeXLogarithmicId ]->addTo( scalingPopup ); - onChangeHorMode(); - scalingPopup->insertSeparator(); - myActionsMap[ PModeYLinearId ]->addTo( scalingPopup ); - myActionsMap[ PModeYLogarithmicId ]->addTo( scalingPopup ); - thePopup->insertItem( tr( "SCALING_POPUP" ), scalingPopup ); - onChangeVerMode(); - - thePopup->insertItem(tr("TOT_PLOT2D_FITDATA"), myViewFrame, SLOT(onFitData())); - // curve type - QPopupMenu* curTypePopup = new QPopupMenu( thePopup ); - myActionsMap[ CurvPointsId ]->addTo( curTypePopup ); - myActionsMap[ CurvLinesId ]->addTo( curTypePopup ); - myActionsMap[ CurvSplinesId ]->addTo( curTypePopup ); - thePopup->insertItem( tr( "CURVE_TYPE_POPUP" ), curTypePopup ); - - // legend - myActionsMap[ LegendId ]->addTo(thePopup); - // settings - myActionsMap[ CurvSettingsId ]->addTo(thePopup); -} - -/*! - Custom event filter -*/ -bool Plot2d_ViewWindow::eventFilter(QObject* watched, QEvent* e) -{ - if (watched == myViewFrame) { - int aType = e->type(); - switch(aType) { - case QEvent::MouseButtonPress: - emit mousePressed(this, (QMouseEvent*) e); - return true; - - case QEvent::MouseButtonRelease: - emit mouseReleased(this, (QMouseEvent*) e); - return true; - - case QEvent::MouseMove: - emit mouseMoving(this, (QMouseEvent*) e); - return true; - - default: - break; - } - } - return SUIT_ViewWindow::eventFilter(watched, e); -} - -/*! - Create actions for Plot2d view window -*/ -void Plot2d_ViewWindow::createActions() -{ - if ( !myActionsMap.isEmpty() ) - return; - - QtxAction* aAction; - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - - // Dump view - aAction = new QtxAction(tr("MNU_DUMP_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_DUMP" ) ), - tr( "MNU_DUMP_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_DUMP_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onDumpView())); - myActionsMap[ DumpId ] = aAction; - - // FitAll - aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_FIT_ALL" ) ), - tr( "MNU_FITALL" ), 0, this); - aAction->setStatusTip(tr("DSC_FITALL")); - connect(aAction, SIGNAL(activated()), this, SLOT(onFitAll())); - myActionsMap[ FitAllId ] = aAction; - - // FitRect - aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_FIT_AREA" ) ), - tr( "MNU_FITRECT" ), 0, this); - aAction->setStatusTip(tr("DSC_FITRECT")); - connect(aAction, SIGNAL(activated()), this, SLOT(onFitRect())); - myActionsMap[ FitRectId ] = aAction; - - // Zoom - aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_ZOOM" ) ), - tr( "MNU_ZOOM_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_ZOOM_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onZoom())); - myActionsMap[ ZoomId ] = aAction; - - // Panning - aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_PAN" ) ), - tr( "MNU_PAN_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_PAN_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onPanning())); - myActionsMap[ PanId ] = aAction; - - // Global Panning - aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_GLOBALPAN" ) ), - tr( "MNU_GLOBALPAN_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onGlobalPanning())); - myActionsMap[ GlobalPanId ] = aAction; - - // Curve type - points - aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_POINTS"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_POINTS")), - tr("MEN_PLOT2D_CURVES_POINTS"), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_POINTS")); - connect(aAction, SIGNAL(activated()), this, SLOT(onCurves())); - aAction->setToggleAction(true); - myActionsMap[ CurvPointsId ] = aAction; - - // Curve type - lines - aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_LINES"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_LINES")), - tr("MEN_PLOT2D_CURVES_LINES"), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_LINES")); - connect(aAction, SIGNAL(activated()), this, SLOT(onCurves())); - aAction->setToggleAction(true); - myActionsMap[ CurvLinesId ] = aAction; - - // Curve type - splines - aAction = new QtxAction(tr("TOT_PLOT2D_CURVES_SPLINES"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_CURVES_SPLINES")), - tr("MEN_PLOT2D_CURVES_SPLINES"), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_CURVES_SPLINES")); - connect(aAction, SIGNAL(activated()), this, SLOT(onCurves())); - aAction->setToggleAction(true); - myActionsMap[ CurvSplinesId ] = aAction; - - // Mode for X (linear or logarithmic) - aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_HOR"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_HOR")), - tr("MEN_PLOT2D_MODE_LINEAR_HOR"), 0, this); - aAction->setStatusTip (tr("PRP_PLOT2D_MODE_LINEAR_HOR")); - connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode())); - myActionsMap[ HorId ] = aAction; - - // Mode for Y (linear or logarithmic) - aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_VER"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_VER")), - tr("MEN_PLOT2D_MODE_LINEAR_VER" ), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LINEAR_VER")); - connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode())); - myActionsMap[ VerId ] = aAction; - - // Legend - aAction = new QtxAction(tr("TOT_PLOT2D_SHOW_LEGEND"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_SHOW_LEGEND")), - tr("MEN_PLOT2D_SHOW_LEGEND"), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_SHOW_LEGEND")); - connect(aAction, SIGNAL(activated()), this, SLOT(onLegend())); - aAction->setToggleAction(true); - myActionsMap[ LegendId ] = aAction; - - // Settings - aAction = new QtxAction(tr( "TOT_PLOT2D_SETTINGS"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_SETTINGS")), - tr("MEN_PLOT2D_SETTINGS"), 0, this); - aAction->setStatusTip(tr( "PRP_PLOT2D_SETTINGS")); - connect(aAction, SIGNAL(activated()), myViewFrame, SLOT(onSettings())); - myActionsMap[ CurvSettingsId ] = aAction; - - // Clone - aAction = new QtxAction(tr("MNU_CLONE_VIEW"), aResMgr->loadPixmap( "Plot2d", tr( "ICON_PLOT2D_CLONE_VIEW" ) ), - tr( "MNU_CLONE_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_CLONE_VIEW")); - connect(aAction, SIGNAL(activated()), this, SIGNAL(cloneView())); - myActionsMap[ CloneId ] = aAction; - - /* Popup Actions */ - /* Linear/logarithmic mode */ - // Horizontal axis - aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_HOR"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_HOR")), - tr("MEN_PLOT2D_MODE_LINEAR_HOR"), 0, this); - aAction->setStatusTip (tr("PRP_PLOT2D_MODE_LINEAR_HOR")); - aAction->setToggleAction(true); - myActionsMap[PModeXLinearId] = aAction; - connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode())); - - aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LOGARITHMIC_HOR"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LOGARITHMIC_HOR")), - tr("MEN_PLOT2D_MODE_LOGARITHMIC_HOR"), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LOGARITHMIC_HOR")); - aAction->setToggleAction(true); - myActionsMap[PModeXLogarithmicId] = aAction; - connect(aAction, SIGNAL(activated()), this, SLOT(onViewHorMode())); - - // Vertical axis - aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LINEAR_VER"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LINEAR_VER")), - tr("MEN_PLOT2D_MODE_LINEAR_VER" ), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LINEAR_VER")); - aAction->setToggleAction(true); - myActionsMap[PModeYLinearId] = aAction; - connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode())); - - aAction = new QtxAction(tr("TOT_PLOT2D_MODE_LOGARITHMIC_VER"), - aResMgr->loadPixmap("Plot2d", tr("ICON_PLOT2D_MODE_LOGARITHMIC_VER")), - tr("MEN_PLOT2D_MODE_LOGARITHMIC_VER" ), 0, this); - aAction->setStatusTip(tr("PRP_PLOT2D_MODE_LOGARITHMIC_VER")); - aAction->setToggleAction(true); - myActionsMap[PModeYLogarithmicId] = aAction; - connect(aAction, SIGNAL(activated()), this, SLOT(onViewVerMode())); - -} - -/*! - Create toolbar for Plot2d view window -*/ -void Plot2d_ViewWindow::createToolBar() -{ - myActionsMap[DumpId]->addTo(myToolBar); - - SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar); - aScaleBtn->AddAction(myActionsMap[FitAllId]); - aScaleBtn->AddAction(myActionsMap[FitRectId]); - aScaleBtn->AddAction(myActionsMap[ZoomId]); - - SUIT_ToolButton* aPanBtn = new SUIT_ToolButton(myToolBar); - aPanBtn->AddAction(myActionsMap[PanId]); - aPanBtn->AddAction(myActionsMap[GlobalPanId]); - - myCurveBtn = new SUIT_ToolButton(myToolBar); - myCurveBtn->AddAction(myActionsMap[CurvPointsId]); - myCurveBtn->AddAction(myActionsMap[CurvLinesId]); - myCurveBtn->AddAction(myActionsMap[CurvSplinesId]); - myActionsMap[CurvLinesId]->setOn(true); - onChangeCurveMode(); - - myActionsMap[HorId]->addTo(myToolBar); - onChangeHorMode(); - myActionsMap[VerId]->addTo(myToolBar); - onChangeVerMode(); - - myActionsMap[LegendId]->addTo(myToolBar); - myActionsMap[CurvSettingsId]->addTo(myToolBar); - myActionsMap[CloneId]->addTo(myToolBar); - onChangeLegendMode(); -} - -/*! - SLOT: called if scale mode for horizontal axis is changed -*/ -void Plot2d_ViewWindow::onChangeHorMode() -{ - bool aLinear = myViewFrame->isModeHorLinear(); - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - - myActionsMap[PModeXLinearId]->setOn( aLinear ); - myActionsMap[PModeXLogarithmicId]->setOn( !aLinear ); - - QPixmap pix = aResMgr->loadPixmap( "Plot2d", tr( aLinear ? "ICON_PLOT2D_MODE_LOGARITHMIC_HOR" : - "ICON_PLOT2D_MODE_LINEAR_HOR" ) ); - myActionsMap[HorId]->setIconSet( pix ); - myActionsMap[HorId]->setToolTip( tr( aLinear ? "TOT_PLOT2D_MODE_LOGARITHMIC_HOR" : - "TOT_PLOT2D_MODE_LINEAR_HOR" ) ); - myActionsMap[HorId]->setStatusTip( tr( aLinear ? "PRP_PLOT2D_MODE_LOGARITHMIC_HOR" : - "PRP_PLOT2D_MODE_LINEAR_HOR" ) ); - - myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() ); -} - -/*! - SLOT: called if scale mode for vertical axis is changed -*/ -void Plot2d_ViewWindow::onChangeVerMode() -{ - bool aLinear = myViewFrame->isModeVerLinear(); - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - - myActionsMap[PModeYLinearId]->setOn( aLinear ); - myActionsMap[PModeYLogarithmicId]->setOn( !aLinear ); - - QPixmap pix = aResMgr->loadPixmap( "Plot2d", tr( aLinear ? "ICON_PLOT2D_MODE_LOGARITHMIC_VER" : - "ICON_PLOT2D_MODE_LINEAR_VER" ) ); - myActionsMap[VerId]->setIconSet( pix ); - myActionsMap[VerId]->setToolTip( tr( aLinear ? "TOT_PLOT2D_MODE_LOGARITHMIC_VER" : - "TOT_PLOT2D_MODE_LINEAR_VER" ) ); - myActionsMap[VerId]->setStatusTip( tr( aLinear ? "PRP_PLOT2D_MODE_LOGARITHMIC_VER" : - "PRP_PLOT2D_MODE_LINEAR_VER" ) ); - - myActionsMap[GlobalPanId]->setEnabled( myViewFrame->isModeVerLinear() && myViewFrame->isModeHorLinear() ); -} - -/*! - SLOT: called if curve type is changed -*/ -void Plot2d_ViewWindow::onChangeCurveMode() -{ - int aCurveType = myViewFrame->getCurveType(); - myCurveBtn->SetItem(aCurveType); - - myActionsMap[CurvPointsId]->setOn(aCurveType == 0); - myActionsMap[CurvLinesId]->setOn(aCurveType == 1); - myActionsMap[CurvSplinesId]->setOn(aCurveType == 2); -} - -/*! - SLOT: called if legend mode is changed -*/ -void Plot2d_ViewWindow::onChangeLegendMode() -{ - myActionsMap[ LegendId ]->setOn(myViewFrame->isLegendShow()); -} - -/*! - SLOT: called if action "Fit all" is activated -*/ -void Plot2d_ViewWindow::onFitAll() -{ - myViewFrame->onViewFitAll(); -} - -/*! - SLOT: called if action "Fit rect" is activated -*/ -void Plot2d_ViewWindow::onFitRect() -{ - myViewFrame->onViewFitArea(); -} - -/*! - SLOT: called if action "Zoom" is activated -*/ -void Plot2d_ViewWindow::onZoom() -{ - myViewFrame->onViewZoom(); -} - -/*! - SLOT: called if action "Panning" is activated -*/ -void Plot2d_ViewWindow::onPanning() -{ - myViewFrame->onViewPan(); -} - -/*! - SLOT: called if action "Global panning" is activated -*/ -void Plot2d_ViewWindow::onGlobalPanning() -{ - myViewFrame->onViewGlobalPan(); -} - -/*! - SLOT: called if action of scale mode for horizontal axis changing is activated -*/ -void Plot2d_ViewWindow::onViewHorMode() -{ - if (myViewFrame->isModeHorLinear()) - myViewFrame->setHorScaleMode(1); - else - myViewFrame->setHorScaleMode(0); -} - -/*! - SLOT: called if action of scale mode for vertical axis changing is activated -*/ -void Plot2d_ViewWindow::onViewVerMode() -{ - if (myViewFrame->isModeVerLinear()) - myViewFrame->setVerScaleMode(1); - else - myViewFrame->setVerScaleMode(0); -} - -/*! - SLOT: called if action "Show legend" is activated -*/ -void Plot2d_ViewWindow::onLegend() -{ - myViewFrame->showLegend(!myViewFrame->isLegendShow()); - onChangeLegendMode(); -} - -/*! - SLOT: called if action "Change curve type" is activated -*/ -void Plot2d_ViewWindow::onCurves() -{ - QtxAction* aSender = (QtxAction*) sender(); - if(aSender == myActionsMap[CurvPointsId]) - myViewFrame->setCurveType(0); - else if(aSender == myActionsMap[CurvLinesId]) - myViewFrame->setCurveType(1); - else if(aSender == myActionsMap[CurvSplinesId]) - myViewFrame->setCurveType(2); -} - -/*! - SLOT: called if action "Dump view" is activated -*/ -void Plot2d_ViewWindow::onDumpView() -{ - qApp->postEvent( myViewFrame, new QPaintEvent( QRect( 0, 0, myViewFrame->width(), myViewFrame->height() ), TRUE ) ); - SUIT_ViewWindow::onDumpView(); -} - -/*! - \return QImage, containing all scene rendering in window -*/ -QImage Plot2d_ViewWindow::dumpView() -{ - if ( getToolBar()->hasMouse() || myDumpImage.isNull() ) - { - QPixmap px = QPixmap::grabWindow( myViewFrame->winId() ); - return px.convertToImage(); - } - - return myDumpImage; -} - -/*! - Saves scene rendering in window to file - \param fileName - name of file - \param format - string contains name of format (for example, "BMP"(default) or "JPEG", "JPG") -*/ -bool Plot2d_ViewWindow::dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format ) -{ - bool res = myViewFrame ? myViewFrame->print( fileName, format ) : false; - if( !res ) - res = SUIT_ViewWindow::dumpViewToFormat( img, fileName, format ); - - return res; -} - -/*! - \return filter of image files -*/ -QString Plot2d_ViewWindow::filter() const -{ - return SUIT_ViewWindow::filter() + ";;" + tr( "POSTSCRIPT_FILES" ); -} - -/*! - \return the visual parameters of this view as a formated string - */ -QString Plot2d_ViewWindow::getVisualParameters() -{ - return myViewFrame->getVisualParameters(); -} - -/*! - The method restors visual parameters of this view from a formated string -*/ -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 deleted file mode 100755 index aa1d4dd62..000000000 --- a/src/Plot2d/Plot2d_ViewWindow.h +++ /dev/null @@ -1,109 +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 -// -#ifndef PLOT2D_VIEWWINDOW_H -#define PLOT2D_VIEWWINDOW_H - -#include "Plot2d.h" -#include - -#include - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -class SUIT_Desktop; -class Plot2d_Viewer; -class Plot2d_ViewFrame; -class QtxAction; -class SUIT_ToolButton; - -class PLOT2D_EXPORT Plot2d_ViewWindow : public SUIT_ViewWindow -{ - Q_OBJECT - -public: - Plot2d_ViewWindow( SUIT_Desktop* theDesktop, Plot2d_Viewer* theModel ); - virtual ~Plot2d_ViewWindow(); - - Plot2d_Viewer* getModel() { return myModel; } - void putInfo(QString theMsg); - Plot2d_ViewFrame* getViewFrame() { return myViewFrame; }; - QToolBar* getToolBar() { return myToolBar; }; - void contextMenuPopup( QPopupMenu* thePopup ); - - virtual QString getVisualParameters(); - virtual void setVisualParameters( const QString& parameters ); - - virtual void RefreshDumpImage(); - -protected: - virtual QImage dumpView(); - virtual QString filter() const; - virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format ); - -private: - bool eventFilter(QObject* watched, QEvent* e); - - void createActions(); - void createToolBar(); - -public slots: - void onChangeHorMode(); - void onChangeVerMode(); - void onChangeCurveMode(); - void onChangeLegendMode(); - - void onFitAll(); - void onFitRect(); - void onZoom(); - void onPanning(); - void onGlobalPanning(); - void onViewHorMode(); - void onViewVerMode(); - void onLegend(); - void onCurves(); - - void onDumpView(); - -signals: - void cloneView(); - -protected: - enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, HorId, - VerId, LegendId, CurvPointsId, CurvLinesId, CurvSplinesId, CurvSettingsId, CloneId, - PModeXLinearId, PModeXLogarithmicId, PModeYLinearId, PModeYLogarithmicId }; - typedef QMap ActionsMap; - ActionsMap myActionsMap; - -private: - Plot2d_Viewer* myModel; - Plot2d_ViewFrame* myViewFrame; - QToolBar* myToolBar; - - SUIT_ToolButton* myCurveBtn; - - QImage myDumpImage; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/Plot2d/resources/Plot2d_images.po b/src/Plot2d/resources/Plot2d_images.po deleted file mode 100755 index 59c109033..000000000 --- a/src/Plot2d/resources/Plot2d_images.po +++ /dev/null @@ -1,76 +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 -# -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -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" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -msgid "ICON_PLOT2D_DUMP" -msgstr "plot2d_camera_dump.png" - -msgid "ICON_PLOT2D_FIT_ALL" -msgstr "plot2d_fitall.png" - -msgid "ICON_PLOT2D_FIT_AREA" -msgstr "plot2d_fitarea.png" - -msgid "ICON_PLOT2D_ZOOM" -msgstr "plot2d_zoom.png" - -msgid "ICON_PLOT2D_PAN" -msgstr "plot2d_pan.png" - -msgid "ICON_PLOT2D_GLOBALPAN" -msgstr "plot2d_glpan.png" - -msgid "ICON_PLOT2D_CLONE_VIEW" -msgstr "plot2d_clone.png" - -msgid "ICON_PLOT2D_MODE_LINEAR_HOR" -msgstr "plot2d_linear.png" - -msgid "ICON_PLOT2D_MODE_LOGARITHMIC_HOR" -msgstr "plot2d_log.png" - -msgid "ICON_PLOT2D_MODE_LINEAR_VER" -msgstr "plot2d_linear_y.png" - -msgid "ICON_PLOT2D_MODE_LOGARITHMIC_VER" -msgstr "plot2d_log_y.png" - -msgid "ICON_PLOT2D_SHOW_LEGEND" -msgstr "plot2d_legend.png" - -msgid "ICON_PLOT2D_CURVES_POINTS" -msgstr "plot2d_points.png" - -msgid "ICON_PLOT2D_CURVES_LINES" -msgstr "plot2d_lines.png" - -msgid "ICON_PLOT2D_CURVES_SPLINES" -msgstr "plot2d_splines.png" - -msgid "ICON_PLOT2D_SETTINGS" -msgstr "plot2d_settings.png" diff --git a/src/Plot2d/resources/Plot2d_msg_en.po b/src/Plot2d/resources/Plot2d_msg_en.po deleted file mode 100755 index e0d764da7..000000000 --- a/src/Plot2d/resources/Plot2d_msg_en.po +++ /dev/null @@ -1,411 +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 -# -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -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" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -# ------------------------------------ -# Plot2d_ViewFrame -# ------------------------------------ -msgid "TOT_PLOT2D_MODE_LINEAR_HOR" -msgstr "Horizontal axis: linear" - -msgid "MEN_PLOT2D_MODE_LINEAR_HOR" -msgstr "Horizontal axis: linear" - -msgid "PRP_PLOT2D_MODE_LINEAR_HOR" -msgstr "Switches view to linear scaling mode along horizontal axis" - -msgid "TOT_PLOT2D_MODE_LOGARITHMIC_HOR" -msgstr "Horizontal axis: logarithmic" - -msgid "MEN_PLOT2D_MODE_LOGARITHMIC_HOR" -msgstr "Horizontal axis: logarithmic" - -msgid "PRP_PLOT2D_MODE_LOGARITHMIC_HOR" -msgstr "Switches view to logarithmic scaling mode along horizontal axis" - -msgid "TOT_PLOT2D_MODE_LINEAR_VER" -msgstr "Vertical axis: linear" - -msgid "MEN_PLOT2D_MODE_LINEAR_VER" -msgstr "Vertical axis: linear" - -msgid "PRP_PLOT2D_MODE_LINEAR_VER" -msgstr "Switches view to linear scaling mode along vertical axis" - -msgid "TOT_PLOT2D_MODE_LOGARITHMIC_VER" -msgstr "Vertical axis: logarithmic" - -msgid "MEN_PLOT2D_MODE_LOGARITHMIC_VER" -msgstr "Vertical axis: logarithmic" - -msgid "PRP_PLOT2D_MODE_LOGARITHMIC_VER" -msgstr "Switches view to logarithmic scaling mode along vertical axis" - -msgid "TOT_PLOT2D_SHOW_LEGEND" -msgstr "Show Legend" - -msgid "MEN_PLOT2D_SHOW_LEGEND" -msgstr "Show &Legend" - -msgid "PRP_PLOT2D_SHOW_LEGEND" -msgstr "Enables/disables legend" - -msgid "TOT_PLOT2D_CURVES_POINTS" -msgstr "Draw points" - -msgid "MEN_PLOT2D_CURVES_POINTS" -msgstr "Draw points" - -msgid "PRP_PLOT2D_CURVES_POINTS" -msgstr "Switches view to points mode" - -msgid "TOT_PLOT2D_CURVES_LINES" -msgstr "Draw lines" - -msgid "MEN_PLOT2D_CURVES_LINES" -msgstr "Draw lines" - -msgid "PRP_PLOT2D_CURVES_LINES" -msgstr "Switches view to lines mode" - -msgid "TOT_PLOT2D_CURVES_SPLINES" -msgstr "Draw splines" - -msgid "MEN_PLOT2D_CURVES_SPLINES" -msgstr "Draw splines" - -msgid "PRP_PLOT2D_CURVES_SPLINES" -msgstr "Switches view to splines mode" - -msgid "TOT_PLOT2D_SETTINGS" -msgstr "Settings" - -msgid "MEN_PLOT2D_SETTINGS" -msgstr "&Settings" - -msgid "PRP_PLOT2D_SETTINGS" -msgstr "Setups view properties" - -msgid "TOT_PLOT2D_FITDATA" -msgstr "Fit range" - -msgid "MEN_PLOT2D_FITDATA" -msgstr "Fit &Range" - -msgid "PRP_PLOT2D_FITDATA" -msgstr "Fits view to the given data range" - -msgid "TOT_PLOT2D_CHANGE_BACKGROUND" -msgstr "Change background" - -msgid "MEN_PLOT2D_CHANGE_BACKGROUND" -msgstr "Change background..." - -msgid "PRP_PLOT2D_CHANGE_BACKGROUND" -msgstr "Change background color" - -msgid "SCALING_POPUP" -msgstr "Scaling" - -msgid "CURVE_TYPE_POPUP" -msgstr "Curve type" - -msgid "INF_COORDINATES" -msgstr "Coordinates: X : %1, Y : %2" - -msgid "WARNING" -msgstr "Warning" - -msgid "WRN_XLOG_NOT_ALLOWED" -msgstr "Some points with non-positive abscissa values have been detected.\nLogarithmic scale for abscissa axis is not allowed." - -msgid "WRN_YLOG_NOT_ALLOWED" -msgstr "Some points with non-positive ordinate values have been detected.\nLogarithmic scale for ordinate axis is not allowed." - -msgid "INF_COORDINATES_SOME_Y" -msgstr "Coordinates: X : %1, Y : %2 ( %3 )" - -#msgid "INF_READY" -#msgstr "Ready" - -msgid "PLOT2D_IMAGE_FILES" -msgstr "Images Files (*.bmp *.png *.jpg *.jpeg)" - -msgid "INF_APP_DUMP_VIEW" -msgstr "Dump view" - -msgid "ERR_DOC_CANT_SAVE_FILE" -msgstr "Cannot save file" - -msgid "ERROR" -msgstr "Error" - -#------------------------------------- -# Plot2d_SetupViewDlg -# ------------------------------------ -msgid "TLT_SETUP_PLOT2D_VIEW" -msgstr "Plot 2d View Settings" - -msgid "PLOT2D_ENABLE_MAIN_TITLE" -msgstr "Main title" - -msgid "PLOT2D_ENABLE_HOR_TITLE" -msgstr "Horizontal axis title" - -msgid "INF_AXES_X" -msgstr "Axis X" - -msgid "INF_AXES_Y_LEFT" -msgstr "Axis Y Left" - -msgid "INF_AXES_Y_RIGHT" -msgstr "Axis Y Right" - -msgid "PLOT2D_ENABLE_VER_TITLE" -msgstr "Vertical axis title" - -msgid "PLOT2D_CURVE_TYPE_LBL" -msgstr "Curve type:" - -msgid "PLOT2D_CURVE_TYPE_POINTS" -msgstr "Points" - -msgid "PLOT2D_CURVE_TYPE_LINES" -msgstr "Lines" - -msgid "PLOT2D_CURVE_TYPE_SPLINE" -msgstr "Spline" - -msgid "PLOT2D_ENABLE_LEGEND" -msgstr "Show legend" - -msgid "PLOT2D_LEGEND_POSITION_LEFT" -msgstr "Left" - -msgid "PLOT2D_LEGEND_POSITION_RIGHT" -msgstr "Right" - -msgid "PLOT2D_LEGEND_POSITION_TOP" -msgstr "Top" - -msgid "PLOT2D_LEGEND_POSITION_BOTTOM" -msgstr "Bottom" - -msgid "PLOT2D_MARKER_SIZE_LBL" -msgstr "Marker size:" - -msgid "PLOT2D_BACKGROUND_COLOR_LBL" -msgstr "Background color:" - -msgid "PLOT2D_SCALE_TLT" -msgstr "Scale mode" - -msgid "PLOT2D_SCALE_MODE_HOR" -msgstr "Horizontal axis:" - -msgid "PLOT2D_SCALE_MODE_VER" -msgstr "Vertical axis:" - -msgid "PLOT2D_SCALE_MODE_LINEAR" -msgstr "Linear" - -msgid "PLOT2D_SCALE_MODE_LOGARITHMIC" -msgstr "Logarithmic" - -msgid "PLOT2D_GRID_TLT" -msgstr "Grid / Axes marks" - -msgid "PLOT2D_GRID_ENABLE_HOR_MAJOR" -msgstr "Horizontal major" - -msgid "PLOT2D_GRID_ENABLE_VER_MAJOR" -msgstr "Vertical major" - -msgid "PLOT2D_GRID_ENABLE_HOR_MINOR" -msgstr "Horizontal minor" - -msgid "PLOT2D_GRID_ENABLE_VER_MINOR" -msgstr "Vertical minor" - -msgid "PLOT2D_MAX_INTERVALS" -msgstr "Max intervals" - -msgid "PLOT2D_SET_AS_DEFAULT_CHECK" -msgstr "Save settings as default" - -# ------------------------------------ -# Plot2d_FitDataDlg -# ------------------------------------ -msgid "FIT_DATA_TLT" -msgstr "Fit Data Range" - -msgid "Plot2d_FitDataDlg::FIT_ALL" -msgstr "Fit both" - -msgid "Plot2d_FitDataDlg::FIT_HORIZONTAL" -msgstr "Fit horizontally" - -msgid "Plot2d_FitDataDlg::FIT_VERTICAL" -msgstr "Fit vertically" - -msgid "Plot2d_FitDataDlg::HORIZONTAL_AXIS" -msgstr "Horizontal axis" - -msgid "Plot2d_FitDataDlg::VERTICAL_AXIS" -msgstr "Vertical axis" - -msgid "Plot2d_FitDataDlg::VERTICAL_LEFT_AXIS" -msgstr "Vertical left axis" - -msgid "Plot2d_FitDataDlg::VERTICAL_RIGHT_AXIS" -msgstr "Vertical right axis" - -msgid "Plot2d_FitDataDlg::MIN_VALUE_LAB" -msgstr "Min:" - -msgid "Plot2d_FitDataDlg::MAX_VALUE_LAB" -msgstr "Max:" - -# ------------------------------------ -# Plot2d_ViewWindow -# ------------------------------------ - -msgid "LBL_TOOLBAR_LABEL" -msgstr "View Operations" - -msgid "DSC_DUMP_VIEW" -msgstr "Saves the active view in the image file" - -msgid "MNU_DUMP_VIEW" -msgstr "Dump view..." - -msgid "DSC_FITALL" -msgstr "Fit all objects inside the view frame" - -msgid "MNU_FITALL" -msgstr "Fit All" - -msgid "DSC_FITRECT" -msgstr "Fit area within the view frame" - -msgid "MNU_FITRECT" -msgstr "Fit Area" - -msgid "DSC_ZOOM_VIEW" -msgstr "Zoom the view" - -msgid "MNU_ZOOM_VIEW" -msgstr "Zoom" - -msgid "DSC_PAN_VIEW" -msgstr "Panning the view" - -msgid "MNU_PAN_VIEW" -msgstr "Panning" - -msgid "DSC_GLOBALPAN_VIEW" -msgstr "Selection of a new center of the view" - -msgid "MNU_GLOBALPAN_VIEW" -msgstr "Global Panning" - -msgid "DSC_CLONE_VIEW" -msgstr "Create new OCC viewer for the active scene" - -msgid "MNU_CLONE_VIEW" -msgstr "Clone View" - - -msgid "TLT_SETUP_CURVE" -msgstr "Setup Curve" - -msgid "CURVE_LINE_TYPE_LAB" -msgstr "Line type:" - -msgid "CURVE_LINE_WIDTH_LAB" -msgstr "Line width:" - -msgid "CURVE_MARKER_TYPE_LAB" -msgstr "Marker type:" - -msgid "CURVE_COLOR_LAB" -msgstr "Color:" - -msgid "NONE_LINE_LBL" -msgstr "None" - -msgid "SOLID_LINE_LBL" -msgstr "Solid" - -msgid "DASH_LINE_LBL" -msgstr "Dash" - -msgid "DOT_LINE_LBL" -msgstr "Dot" - -msgid "DASHDOT_LINE_LBL" -msgstr "DashDot" - -msgid "DAHSDOTDOT_LINE_LBL" -msgstr "DashDotDot" - -msgid "NONE_MARKER_LBL" -msgstr "None" - -msgid "CIRCLE_MARKER_LBL" -msgstr "Circle" - -msgid "RECTANGLE_MARKER_LBL" -msgstr "Rectangle" - -msgid "DIAMOND_MARKER_LBL" -msgstr "Diamond" - -msgid "DTRIANGLE_MARKER_LBL" -msgstr "Downward triangle" - -msgid "UTRIANGLE_MARKER_LBL" -msgstr "Upward triangle" - -msgid "LTRIANGLE_MARKER_LBL" -msgstr "Leftward triangle" - -msgid "RTRIANGLE_MARKER_LBL" -msgstr "Rightward triangle" - -msgid "CROSS_MARKER_LBL" -msgstr "Cross" - -msgid "XCROSS_MARKER_LBL" -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_camera_dump.png b/src/Plot2d/resources/plot2d_camera_dump.png deleted file mode 100755 index 8eb63e09be9919e21d4c8e54482127881dfb5d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)4z!7>1uK9(3SAf^^7GunHcs^$cDz)_6(iV({WI4*3It{)u>Xhxj~ti8*H|$zqZ} z5J<)wJji1p0cj{igW)BkJ?%Pv>zOQKhAcmy9|Z{bV&nXriRhkD0mYv?#0>V_!1=*0M=P_N#mTuI*XDD zDJ5oVP*Txqwy4!>IlS;^hIEpWoQ?8%zZa8EQd-RxU+cAeeKbrM3F&eEM51X zf!*F5=A6Sm*rh$|?7AbXz(%uynHuhH?od+YZ|a=GOiey?NmGd`E5Nmlot!6`eYB*L zH19X9_1cPr5NvO4BjpB{0YpI%7DIN*JLpduKl6C+=WZ6B9R&zQh$uddSAl=4-#bmH8`<`*2LJ#707*qo IM6N<$g7~BA;{X5v diff --git a/src/Plot2d/resources/plot2d_clone.png b/src/Plot2d/resources/plot2d_clone.png deleted file mode 100755 index 5b5a8ecc19d058fe30f73531f7764c5dfd04ae38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmV_hdxWz05&vhSGeE0ofr5n86@02!OVO z`c$ho^s>jnm7x5U>F0GPs3TQO7fb$_!m_ zSP=275>Xws>+u`R0Uz27sta5RY6xrv^%F2*+51Jk=?j-7T>be5q0RsR002ovPDHLk FV1jEZX9EBL diff --git a/src/Plot2d/resources/plot2d_fitall.png b/src/Plot2d/resources/plot2d_fitall.png deleted file mode 100755 index c09ff94ad89b32483194de03275ece8844f985da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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$ diff --git a/src/Plot2d/resources/plot2d_glpan.png b/src/Plot2d/resources/plot2d_glpan.png deleted file mode 100755 index c23322a4ae4dc6ffdbbac6af7b397fc35554d750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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#+!$#_8k0000q<_O%b&X~PS@Rh&PK53aiRc&AF+5-asJ9`bIh<#s{<+<1?CEK$vtQ}@Y|s``%z#iB?sWW&-DgXbs+=*j^k+N@AZI)02Fu427qnb-gDMK1GFIn zr-id>99B8{m3IajcSS$Dyww9KB_|@Jl-x?l4X}jVyWtr%ml9(vH{F%Z@zCK+ci1`{ z0^ym%5%g7ubHIPq1+G2}a8cN+(38W`dNIb~ZB7B<-0Um0*n~XN$a&MtB9ggyzEsuq n-oYYQ{{r9>>QznJbl7zd^&y98Uc7U000000NkvXXu0mjfno54V diff --git a/src/Plot2d/resources/plot2d_lines.png b/src/Plot2d/resources/plot2d_lines.png deleted file mode 100755 index 6baf57344cacc7fd22a5e42fa8c5eff44313ecef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 zcmV+`0o4A9P)6Y?_0RXE0JT4_OJT|IN zm=P$_uiT@)Vv5ae6+`d03x@pxz}amxmn^mKnr9P}*-!iyjEDjeeJ#Rp_=bA`$ziJM xV$#u^;(b!4FZb54|K{s!E#|p0jrXqWb^<002ovPDHLkV1f*>eft0a diff --git a/src/Plot2d/resources/plot2d_log.png b/src/Plot2d/resources/plot2d_log.png deleted file mode 100755 index aecca8c13acab4ff9fe724bdd0532f858b60e84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmV+*0pI?KP)yV)cn^ALNr{!zm6}N9f-s*K1ca7l!Ic&+rQHFX z0DzhGSCEL%27Ez3iFbL6y|1-uN{J?4m~%b_`n<&lwMw?-TC3)q(ORP;XrH%uT~~O& zEhVLN2s+DK+kMqOvu1*b z(5N%udAK88j8OwH-muv>x@jahvr-D?c?JOWf6=z(em-aBbs|Eg6aeq;cOAYShx7Eh m)*9uU6@a$Z=)S}LTi^rT50BHSofNhJ000024T;k_?8=a+U^Ie-J8 zx>-@{(9+p2q?EYt8=zQ)y~AEddvY76lz?~lTMqw=3qa1BjE7>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+4U|+y9YLuzxZ27TOjT%-$E$~~7BX~I%V-x@|x@~x2(ZAX9R%KKv zH@MGoC}F@_4I&aE+H70;nddB~-iLY4vel4?gqeRf*SVE8XRlk&HG8<%u8cjSNlV@f Wo_;8|&b^la0000DGCWSsE#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/Plot2d/resources/plot2d_settings.png b/src/Plot2d/resources/plot2d_settings.png deleted file mode 100755 index d291da9dcbeee3eae6c68fbb3cce59d107ae8d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmV-90mlA`P)#4&q426%%9U#yJvcQFmpb-jPz@vDCjNk1TRo9bO7~FmDaAEgfs_?BRl$Z z{J{~B*D*ADZp%(iW>3SJ(I^Wtr zgUl5vb-fG#fb>WJR$lBHZ1^A09Xsld9W@;iQRZq57yw>SO^=j2{5)y<{%mtHr@J^b z^?grYr@S_~r3qMbv>7NOBqG}^)qnuN%#`lwXK1#E<(=B1-Cyh{*-fFAJ}1Tt00000 LNkvXXu0mjfVkmy? diff --git a/src/Plot2d/resources/plot2d_splines.png b/src/Plot2d/resources/plot2d_splines.png deleted file mode 100755 index c39d4321c35c26f3792db5fbdcc42d7a272e36a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmV++0p9+JP)E(pSSm7o4rP5dfTZo0?MBWOjZt-%RW<8)Zs3q} nwMS`wb^9v0Oyz4j$R51`lB<3+1VYzX00000NkvXXu0mjfElqrU diff --git a/src/Plot2d/resources/plot2d_zoom.png b/src/Plot2d/resources/plot2d_zoom.png deleted file mode 100755 index b46573914ded57ddbdbd0fdfdeca02dbe772beca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 "SALOME_Prs.h" - -//#include "utilities.h" - -//using namespace std; - -/*! - Dispatches display operation to proper Display() method of SALOME_View -*/ -void SALOME_OCCPrs::DisplayIn( SALOME_View* v ) const -{ - if ( v ) v->Display( this ); -} - -/*! - Dispatches display operation to proper Erase() method of SALOME_View -*/ -void SALOME_OCCPrs::EraseIn( SALOME_View* v, const bool forced ) const -{ - if ( v ) v->Erase( this, forced ); -} - -/*! - Dispatches operation to proper LocalSelectionIn() method of SALOME_View -*/ -void SALOME_OCCPrs::LocalSelectionIn( SALOME_View* v, const int mode ) const -{ - if ( v ) v->LocalSelection( this, mode ); -} - -/*! - Dispatches update operation to proper Update() method of SALOME_Displayer -*/ -void SALOME_OCCPrs::Update( SALOME_Displayer* d ) -{ - if ( d ) d->Update( this ); -} - -/*! - Dispatches display operation to proper Display() method of SALOME_View -*/ -void SALOME_VTKPrs::DisplayIn( SALOME_View* v ) const -{ - if ( v ) v->Display( this ); -} - -/*! - Dispatches display operation to proper Erase() method of SALOME_View -*/ -void SALOME_VTKPrs::EraseIn( SALOME_View* v, const bool forced ) const -{ - if ( v ) v->Erase( this, forced ); -} - -/*! - Dispatches operation to proper LocalSelectionIn() method of SALOME_View -*/ -void SALOME_VTKPrs::LocalSelectionIn( SALOME_View* v, const int mode ) const -{ - if ( v ) v->LocalSelection( this, mode ); -} - -/*! - Dispatches update operation to proper Update() method of SALOME_Displayer -*/ -void SALOME_VTKPrs::Update( SALOME_Displayer* d ) -{ - if ( d ) d->Update( this ); -} - -/*! - Dispatches display operation to proper Display() method of SALOME_View -*/ -void SALOME_Prs2d::DisplayIn( SALOME_View* v ) const -{ - if ( v ) v->Display( this ); -} - -/*! - Dispatches display operation to proper Erase() method of SALOME_View -*/ -void SALOME_Prs2d::EraseIn( SALOME_View* v, const bool forced ) const -{ - if ( v ) v->Erase( this, forced ); -} - -/*! - Dispatches operation to proper LocalSelectionIn() method of SALOME_View -*/ -void SALOME_Prs2d::LocalSelectionIn( SALOME_View* v, const int mode ) const -{ - if ( v ) v->LocalSelection( this, mode ); -} - -/*! - Dispatches update operation to proper Update() method of SALOME_Displayer -*/ -void SALOME_Prs2d::Update( SALOME_Displayer* d ) -{ - if ( d ) d->Update( this ); -} - -/*! - Gives control to SALOME_Prs object, so that it could perform double dispatch -*/ -void SALOME_View::Display( const SALOME_Prs* prs ) -{ - prs->DisplayIn( this ); -} - -/*! - Gives control to SALOME_Prs object, so that it could perform double dispatch -*/ -void SALOME_View::Erase( const SALOME_Prs* prs, const bool forced ) -{ - prs->EraseIn( this, forced ); -} - -/*! - Gives control to SALOME_Prs object, so that it could perform double dispatch -*/ -void SALOME_View::LocalSelection( const SALOME_Prs* prs, const int mode ) -{ - prs->LocalSelectionIn( this, mode ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::Display( const SALOME_OCCPrs* ) -{ -// MESSAGE( "SALOME_View::Display( const SALOME_OCCPrs& ) called! Probably, presentation is being displayed in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::Display( const SALOME_VTKPrs* ) -{ -// MESSAGE( "SALOME_View::Display( const SALOME_VTKPrs& ) called! Probably, presentation is being displayed in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::Display( const SALOME_Prs2d* ) -{ -// MESSAGE( "SALOME_View::Display( const SALOME_Prs2d& ) called! Probably, presentation is being displayed in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::Erase( const SALOME_OCCPrs*, const bool ) -{ -// MESSAGE( "SALOME_View::Erase( const SALOME_OCCPrs& ) called! Probably, presentation is being erased in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::Erase( const SALOME_VTKPrs*, const bool ) -{ -// MESSAGE( "SALOME_View::Erase( const SALOME_VTKPrs& ) called! Probably, presentation is being erased in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::Erase( const SALOME_Prs2d*, const bool ) -{ -// MESSAGE( "SALOME_View::Erase( const SALOME_Prs2d& ) called! Probably, presentation is being erased in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::EraseAll( const bool ) -{ -// MESSAGE( "SALOME_View::EraseAll() called!" ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::LocalSelection( const SALOME_OCCPrs*, const int ) -{ -// MESSAGE( "SALOME_View::LocalSelection( const SALOME_OCCPrs* ) called! \ -// Probably, selection is being activated in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::LocalSelection( const SALOME_VTKPrs*, const int ) -{ -// MESSAGE( "SALOME_View::LocalSelection( const SALOME_VTKPrs* ) called! \ -// Probably, selection is being activated in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::LocalSelection( const SALOME_Prs2d*, const int ) -{ -// MESSAGE( "SALOME_View::LocalSelection( const SALOME_Prs2d* ) called! \ -// Probably, selection is being activated in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_View::GlobalSelection( const bool ) const -{ -// MESSAGE( "SALOME_View::GlobalSelection() called! \ -// Probably, selection is being activated in uncompatible viewframe." ); -} - -/*! - Gives control to SALOME_Prs object, so that it could perform double dispatch -*/ -void SALOME_Displayer::UpdatePrs( SALOME_Prs* prs ) -{ - prs->Update( this ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_Displayer::Update( SALOME_OCCPrs* ) -{ -// MESSAGE( "SALOME_Displayer::Update( SALOME_OCCPrs* ) called! Probably, presentation is being updated in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_Displayer::Update( SALOME_VTKPrs* ) -{ -// MESSAGE( "SALOME_Displayer::Update( SALOME_VTKPrs* ) called! Probably, presentation is being updated in uncompatible viewframe." ); -} - -/*! - Virtual method, should be reimplemented in successors, by default issues a warning and does nothing. -*/ -void SALOME_Displayer::Update( SALOME_Prs2d* ) -{ -// MESSAGE( "SALOME_Displayer::Update( SALOME_Prs2d* ) called! Probably, presentation is being updated in uncompatible viewframe." ); -} - diff --git a/src/Prs/SALOME_Prs.h b/src/Prs/SALOME_Prs.h deleted file mode 100755 index fa7c62369..000000000 --- a/src/Prs/SALOME_Prs.h +++ /dev/null @@ -1,240 +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 -// -#ifndef SALOME_PRS_H -#define SALOME_PRS_H - -#ifdef WNT -#ifdef PRS_EXPORTS -#define PRS_EXPORT __declspec(dllexport) -#else -#define PRS_EXPORT __declspec(dllimport) -#endif -#else -#define PRS_EXPORT -#endif - -class SALOME_View; -class SALOME_Displayer; -class Handle_SALOME_InteractiveObject; - -/*! - \class SALOME_Prs - Base class for SALOME graphic object wrappers - presentations. - Presentations are temporary objects, so they can be created on the stack. -*/ - -class PRS_EXPORT SALOME_Prs -{ -public: - //! Destructor - virtual ~SALOME_Prs() {} - - //! Key method for double dispatch of display operation - virtual void DisplayIn( SALOME_View* ) const = 0; - - //! Key method for double dispatch of erase operation - virtual void EraseIn( SALOME_View*, const bool = false ) const = 0; - - //! Key method for double dispatch of update operation - virtual void Update( SALOME_Displayer* ) = 0; - - //! Should return true, if this presentation contains a graphic object - virtual bool IsNull() const = 0; - - //! Key method for double dispatch of activation of subshapes selection - virtual void LocalSelectionIn( SALOME_View*, const int ) const = 0; -}; - -/*! - \class SALOME_OCCPrs - Base class for OpenCASCADE graphic object (AIS_InteractiveObject) wrappers. - This intermediate class is necessary to avoid dependencies from OCC libs. -*/ - -class PRS_EXPORT SALOME_OCCPrs : public SALOME_Prs -{ -public: - //! It uses double dispatch in order to \n - //! invoke Display() method corresponding to the actual type of presentation. - virtual void DisplayIn( SALOME_View* ) const; - - //! It uses double dispatch in order to \n - //! invoke Erase() method corresponding to the actual type of presentation. - virtual void EraseIn( SALOME_View*, const bool = false ) const; - - //! It uses double dispatch in order to \n - //! invoke Update() method corresponding to the actual type of presentation. - virtual void Update( SALOME_Displayer* ); - - //! Key method for double dispatch of activation of subshapes selection - virtual void LocalSelectionIn( SALOME_View*, const int ) const; -}; - -/*! - \class SALOME_VTKPrs - Base class for VTK graphic object (vtkActor) wrappers. - This intermediate class is necessary to avoid dependencies from VTK libs. -*/ -class PRS_EXPORT SALOME_VTKPrs : public SALOME_Prs -{ -public: - //! It uses double dispatch in order to \n - //! invoke Display() method corresponding to the actual type of presentation. - virtual void DisplayIn( SALOME_View* ) const; - - //! It uses double dispatch in order to \n - //! invoke Erase() method corresponding to the actual type of presentation. - virtual void EraseIn( SALOME_View*, const bool = false ) const; - - //! It uses double dispatch in order to \n - //! invoke Update() method corresponding to the actual type of presentation. - virtual void Update( SALOME_Displayer* ); - - //! Key method for double dispatch of activation of subshapes selection - virtual void LocalSelectionIn( SALOME_View*, const int ) const; -}; - -/*! - \class SALOME_Prs2d - Base class for Plot2d graphic object (Plot2d_Curve) wrappers. -*/ -class PRS_EXPORT SALOME_Prs2d : public SALOME_Prs -{ -public: - //! It uses double dispatch in order to - //! invoke Display() method corresponding to the actual type of presentation. - virtual void DisplayIn( SALOME_View* ) const; - - //! It uses double dispatch in order to - //! invoke Erase() method corresponding to the actual type of presentation. - virtual void EraseIn( SALOME_View*, const bool = false ) const; - - //! It uses double dispatch in order to - //! invoke Update() method corresponding to the actual type of presentation. - virtual void Update( SALOME_Displayer* ); - - //! Key method for double dispatch of activation of subshapes selection - virtual void LocalSelectionIn( SALOME_View*, const int ) const; -}; - -/*! - Base classes for object wrappers for any other visualization libraries should be added here! -*/ -/*! - \class SALOME_View - Base class for SALOME views (or view frames) -*/ -class PRS_EXPORT SALOME_View -{ -public: - //! Destructor - virtual ~SALOME_View() {} - - //! This Display() method should be called to display given presentation \n - //! created anywhere by anybody. It simply passes control to SALOME_Prs object \n - //! so that it could perform double dispatch. - void Display( const SALOME_Prs* ); - - //! This Erase() method should be called to erase given presentation \n - //! created anywhere by anybody. It simply passes control to SALOME_Prs object \n - //! so that it could perform double dispatch. - void Erase( const SALOME_Prs*, const bool = false ); - - //! This LocalSelection() method should be called to activate sub-shapes selection \n - //! created anywhere by anybody. It simply passes control to SALOME_Prs object \n - //! so that it could perform double dispatch. - void LocalSelection( const SALOME_Prs*, const int ); - - // Interface for derived views - - // Display() methods for ALL kinds of presentation should appear here - virtual void Display( const SALOME_OCCPrs* );//!< Display SALOME_OCCPrs presentation. - virtual void Display( const SALOME_VTKPrs* );//!< Display SALOME_VTKPrs presentation. - virtual void Display( const SALOME_Prs2d* );//!< Display SALOME_Prs2d presentation. - // Add new Display() methods here... - - // Erase() methods for ALL kinds of presentation should appear here - virtual void Erase( const SALOME_OCCPrs*, const bool = false );//!< Erase SALOME_OCCPrs - virtual void Erase( const SALOME_VTKPrs*, const bool = false );//!< Erase SALOME_VTKPrs - virtual void Erase( const SALOME_Prs2d*, const bool = false );//!< Erase SALOME_Prs2d - virtual void EraseAll( const bool = false ); - // Add new Erase() methods here... - - // LocalSelection() methods for ALL kinds of presentation should appear here - virtual void LocalSelection( const SALOME_OCCPrs*, const int );//!< Local selection SALOME_OCCPrs - virtual void LocalSelection( const SALOME_VTKPrs*, const int );//!< Local selection SALOME_VTKPrs - virtual void LocalSelection( const SALOME_Prs2d* , const int );//!< Local selection SALOME_Prs2d - - //! Deactivates selection of sub-shapes (must be redefined with OCC viewer) - virtual void GlobalSelection( const bool = false ) const; - - //! Creates empty presenation of corresponding type - virtual SALOME_Prs* CreatePrs( const char* entry = 0 ) { return 0; } - - // Axiluary methods called before and after displaying of objects - virtual void BeforeDisplay( SALOME_Displayer* d ) {} //!< Null body here - virtual void AfterDisplay ( SALOME_Displayer* d ) {} //!< Null body here - - // New methods (asv) - //! \retval Return false. - virtual bool isVisible( const Handle_SALOME_InteractiveObject& ){ return false; } - virtual void Repaint() {} //!< Null body here. -}; - -/*! - \class SALOME_Displayer - These classes are used to specify type of view VTK, OCC or Plot2d -*/ -class PRS_EXPORT SALOME_OCCViewType {}; -class PRS_EXPORT SALOME_VTKViewType {}; -class PRS_EXPORT SALOME_Plot2dViewType {}; - -/*! - \class SALOME_Displayer - Base class for SALOME displayers -*/ -class PRS_EXPORT SALOME_Displayer -{ -public: - //! Destructor - virtual ~SALOME_Displayer() {/*! Null body here*/} - - //! This Update() method should be called to update given presentation \n - //! created anywhere by anybody. It simply passes control to SALOME_Prs object \n - //! so that it could perform double dispatch. - void UpdatePrs( SALOME_Prs* ); - - // Interface for derived displayers - - // Update() methods for ALL kinds of presentation should appear here - virtual void Update( SALOME_OCCPrs* );//!< Update SALOME_OCCPrs presentation. - virtual void Update( SALOME_VTKPrs* );//!< Update SALOME_VTKPrs presentation. - virtual void Update( SALOME_Prs2d* );//!< Update SALOME_Prs2d presentation. - // Add new Update() methods here... - - // Axiluary methods called before and after displaying of objects - virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCViewType& ){/*! Null body here*/}; - virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCViewType& ){/*! Null body here*/}; - virtual void BeforeDisplay( SALOME_View*, const SALOME_VTKViewType& ){/*! Null body here*/}; - virtual void AfterDisplay ( SALOME_View*, const SALOME_VTKViewType& ){/*! Null body here*/}; - virtual void BeforeDisplay( SALOME_View*, const SALOME_Plot2dViewType& ){/*! Null body here*/}; - virtual void AfterDisplay ( SALOME_View*, const SALOME_Plot2dViewType& ){/*! Null body here*/}; -}; - -#endif diff --git a/src/PythonConsole/Makefile.in b/src/PythonConsole/Makefile.in deleted file mode 100755 index 692b54b3b..000000000 --- a/src/PythonConsole/Makefile.in +++ /dev/null @@ -1,55 +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 : PythonConsole -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= PythonConsole.h \ - PythonConsole_PyConsole.h \ - PythonConsole_PyEditor.h \ - PythonConsole_PyInterp.h - -# Libraries targets -LIB = libPythonConsole.la - -LIB_SRC= PythonConsole_PyConsole.cxx \ - PythonConsole_PyEditor.cxx \ - PythonConsole_PyInterp.cxx - -LIB_MOC = \ - PythonConsole_PyEditor.h \ - PythonConsole_PyConsole.h - -CPPFLAGS+= $(PYTHON_INCLUDES) $(QT_INCLUDES) - -LDFLAGS+= $(PYTHON_LIBS) $(QT_MT_LIBS) - -@CONCLUDE@ - - diff --git a/src/PythonConsole/PythonConsole.h b/src/PythonConsole/PythonConsole.h deleted file mode 100755 index 8b30b261a..000000000 --- a/src/PythonConsole/PythonConsole.h +++ /dev/null @@ -1,61 +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 -// -#if !defined ( _PYTHONCONSOLE_H ) -#define _PYTHONCONSOLE_H - -// ======================================================== -// set dllexport type for Win platform -#ifdef WNT - -#ifdef PYTHONCONSOLE_EXPORTS -#define PYCONSOLE_EXPORT __declspec(dllexport) -#else -#define PYCONSOLE_EXPORT __declspec(dllimport) -#endif - -#else // WNT - -#define PYCONSOLE_EXPORT - -#endif // WNT - -// ======================================================== -// little trick - if we do not have debug python libraries -#ifdef _DEBUG -#ifndef HAVE_DEBUG_PYTHON -#undef _DEBUG -#endif -#endif - -#include - -#ifdef _DEBUG -#ifndef HAVE_DEBUG_PYTHON -#define _DEBUG -#endif -#endif - -// ======================================================== -// avoid warning messages -#ifdef WNT -#pragma warning (disable : 4786) -#pragma warning (disable : 4251) -#endif - -#endif // _PYTHONCONSOLE_H diff --git a/src/PythonConsole/PythonConsole_PyConsole.cxx b/src/PythonConsole/PythonConsole_PyConsole.cxx deleted file mode 100755 index 9eecd0f15..000000000 --- a/src/PythonConsole/PythonConsole_PyConsole.cxx +++ /dev/null @@ -1,85 +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 "PythonConsole_PyConsole.h" -#include "PythonConsole_PyEditor.h" -#include "PyInterp_base.h" - -#include "SUIT_Desktop.h" - -#include - -using namespace std; - -/*! - Constructor -*/ -PythonConsole::PythonConsole(QWidget* parent, PyInterp_base* interp) -: QWidget(parent), myEditor( 0 ) -{ - // create python interpreter - myInterp = interp; - if ( !myInterp ) - myInterp = new PythonConsole_PyInterp(); - - // initialize Python interpretator - myInterp->initialize(); - - // create editor console - QVBoxLayout* lay = new QVBoxLayout( this ); - myEditor = new PythonConsole_PyEditor(myInterp, this,"Python Interpreter"); - lay->addWidget( myEditor ); -} - -/*! - Destructor -*/ -PythonConsole::~PythonConsole() -{ -} - -/*! - Executes command - \param command - string with command and arguments -*/ -void PythonConsole::exec( const QString& command ) -{ - if ( myEditor ) - myEditor->exec( command ); -} - -/*! - Changes font of python console - \param f - new font -*/ -void PythonConsole::setFont( const QFont& f ) -{ - if( myEditor ) - myEditor->setFont( f ); -} - -/*! - \return font of python console -*/ -QFont PythonConsole::font() const -{ - QFont res; - if( myEditor ) - res = myEditor->font(); - return res; -} diff --git a/src/PythonConsole/PythonConsole_PyConsole.h b/src/PythonConsole/PythonConsole_PyConsole.h deleted file mode 100755 index 4978214fb..000000000 --- a/src/PythonConsole/PythonConsole_PyConsole.h +++ /dev/null @@ -1,49 +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 -// -#ifndef PythonConsole_PyConsole_H -#define PythonConsole_PyConsole_H - -#include "PythonConsole.h" - -#include - -class PythonConsole_PyEditor; -class PyInterp_base; - -class PYCONSOLE_EXPORT PythonConsole: public QWidget -{ - Q_OBJECT; - -public: - PythonConsole(QWidget* parent, PyInterp_base* interp = 0 ); - virtual ~PythonConsole(); - - PyInterp_base* getInterp() { return myInterp; } - QFont font() const; - virtual void setFont( const QFont& ); - - void exec( const QString& command ); - -protected: - PyInterp_base* myInterp; - PythonConsole_PyEditor* myEditor; -}; - - -#endif diff --git a/src/PythonConsole/PythonConsole_PyEditor.cxx b/src/PythonConsole/PythonConsole_PyEditor.cxx deleted file mode 100755 index bc31390a3..000000000 --- a/src/PythonConsole/PythonConsole_PyEditor.cxx +++ /dev/null @@ -1,738 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : PythonConsole_PyEditor.cxx -// Author : Nicolas REJNERI -// Module : SALOME - -#include // this include must be first (see PyInterp_base.h)! - -#include - -#include -#include - -#include -#include -#include -#include -#include - -using namespace std; - -//#ifdef _DEBUG_ -//static int MYDEBUG = 1; -//#else -//static int MYDEBUG = 0; -//#endif - - -enum { IdCopy, IdPaste, IdClear, IdSelectAll }; - - -static QString READY_PROMPT = ">>> "; -static QString DOTS_PROMPT = "... "; - -#define PROMPT_SIZE (int)_currentPrompt.length() - -class ExecCommand : public PyInterp_LockRequest -{ -public: - ExecCommand(PyInterp_base* theInterp, const char* theCommand, - PythonConsole_PyEditor* theListener, bool sync = false) - : PyInterp_LockRequest( theInterp, theListener, sync ), - myCommand( theCommand ), myState( PyInterp_Event::OK ) - {} - -protected: - virtual void execute(){ - if(myCommand != ""){ -// 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) - myState = PyInterp_Event::INCOMPLETE; - myError = getInterp()->getverr().c_str(); - myOutput = getInterp()->getvout().c_str(); -// if(MYDEBUG) MESSAGE("*** ExecCommand::execute() finished"); - }else{ - myError = ""; - myOutput = ""; - } - } - - virtual QEvent* createEvent() const - { - return new PyInterp_Event( myState, (PyInterp_Request*)this ); - } - -public: - QString myError; - QString myOutput; - -private: - QString myCommand; - int myState; -}; - - -/*! - Constructor -*/ -PythonConsole_PyEditor::PythonConsole_PyEditor(PyInterp_base* theInterp, QWidget *theParent, const char* theName): - QTextEdit(theParent,theName), - myInterp( 0 ) -{ - QString fntSet( "" ); - QFont aFont = SUIT_Tools::stringToFont( fntSet ); - setFont(aFont); - //setTextFormat(QTextEdit::PlainText); - setUndoRedoEnabled( false ); - - _currentPrompt = READY_PROMPT; - setWordWrap(NoWrap); - - connect(this,SIGNAL(returnPressed()),this,SLOT(handleReturn()) ); - - // san - This is necessary for troubleless initialization - onPyInterpChanged( theInterp ); -} - -/*! - Destructor -*/ -PythonConsole_PyEditor::~PythonConsole_PyEditor() -{ -// if(MYDEBUG) MESSAGE("PythonConsole_PyEditor::~PythonConsole_PyEditor()"); -} - -/*! - Called to insert a string s -*/ -void PythonConsole_PyEditor::setText(QString s) -{ - int para=paragraphs()-1; - int col=paragraphLength(para); - insertAt(s,para,col); - int n = paragraphs()-1; - setCursorPosition( n, paragraphLength(n)); -} - -/*! - Convenient method for executing a Python command, - as if the user typed it manually -*/ -void PythonConsole_PyEditor::exec( const QString& command ) -{ - // Some interactive command is being executed in this editor -> do nothing - if ( isReadOnly() ) - return; - int para=paragraphs()-1; - removeParagraph( para ); - _currentPrompt = READY_PROMPT; - _buf.truncate(0); - _isInHistory = false; - setText( "\n" + _currentPrompt); - setText( command + "\n" ); - handleReturn(); -} - -/*! - Called when an handleReturn -*/ -void PythonConsole_PyEditor::handleReturn() -{ - int para=paragraphs()-2; - _buf.append(text(para).remove(0,PROMPT_SIZE)); - _buf.truncate( _buf.length() - 1 ); - setReadOnly( true ); - viewport()->setCursor( waitCursor ); - - // 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 ) ); -} - -/*! - Processes drop event: paste dragged text -*/ -void PythonConsole_PyEditor::contentsDropEvent( QDropEvent* event ) -{ - event->acceptAction(); - QString text; - if ( QTextDrag::decode( event, text ) ) { - int par, col; - int endLine = paragraphs() -1; - col = charAt( event->pos(), &par ); - - if ( col >= 0 && par >= 0 ) { - if ( par != endLine || col < PROMPT_SIZE ) { - par = endLine; - col = paragraphLength( endLine ); - } - setCursorPosition( par, col ); - insertAt( text, par, col ); - removeSelection(); - } - } -} - -/*! - Processes middle button release event - paste clipboard's contents -*/ -void PythonConsole_PyEditor::contentsMouseReleaseEvent( QMouseEvent* event ) -{ - if ( event->button() == LeftButton ) { - QTextEdit::contentsMouseReleaseEvent(event); - copy(); - } - if ( event->button() == MidButton ) { - if (QApplication::clipboard()->supportsSelection()) { - int par, col; - int endLine = paragraphs() -1; - col = charAt( event->pos(), &par ); - if ( col >= 0 && par >= 0 ) { - // 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 - QTextEdit::contentsMouseReleaseEvent(event); - // PAL12896 <-- - } - } - } - else { - QTextEdit::contentsMouseReleaseEvent(event); - } -} - -/* - Processes own popup menu -*/ -void PythonConsole_PyEditor::mousePressEvent (QMouseEvent* event) -{ - if ( event->button() == RightButton ) { - QPopupMenu *popup = new QPopupMenu( this ); - QMap idMap; - - int para1, col1, para2, col2; - getSelection(¶1, &col1, ¶2, &col2); - bool allSelected = hasSelectedText() && - para1 == 0 && para2 == paragraphs()-1 && col1 == 0 && para2 == paragraphLength(para2); - int id; - id = popup->insertItem( tr( "EDIT_COPY_CMD" ) ); - idMap.insert(IdCopy, id); - id = popup->insertItem( tr( "EDIT_PASTE_CMD" ) ); - idMap.insert(IdPaste, id); - id = popup->insertItem( tr( "EDIT_CLEAR_CMD" ) ); - idMap.insert(IdClear, id); - popup->insertSeparator(); - id = popup->insertItem( tr( "EDIT_SELECTALL_CMD" ) ); - idMap.insert(IdSelectAll, id); - popup->setItemEnabled( idMap[ IdCopy ], hasSelectedText() ); - popup->setItemEnabled( idMap[ IdPaste ], - !isReadOnly() && (bool)QApplication::clipboard()->text().length() ); - popup->setItemEnabled( idMap[ IdSelectAll ], - (bool)text().length() && !allSelected ); - - int r = popup->exec( event->globalPos() ); - delete popup; - - if ( r == idMap[ IdCopy ] ) { - copy(); - } - else if ( r == idMap[ IdPaste ] ) { - paste(); - } - else if ( r == idMap[ IdClear ] ) { - clear(); - setText(myBanner); - _currentPrompt = READY_PROMPT; - setText(_currentPrompt); - } - else if ( r == idMap[ IdSelectAll ] ) { - selectAll(); - } - } - else { - QTextEdit::mousePressEvent(event); - } -} - -/*! - Checks, is the string a command line or not. -*/ - -bool PythonConsole_PyEditor::isCommand( const QString& str) const -{ - // prompt may be '>>> ' or for '... ' - return ( str.find( READY_PROMPT ) == 0 || str.find( DOTS_PROMPT ) == 0 ); -} - - -/*! - Called when a keyPress event -*/ -void PythonConsole_PyEditor::keyPressEvent( QKeyEvent* e ) -{ - // get cursor position - int curLine, curCol; - getCursorPosition(&curLine, &curCol); - - // get last edited line - int endLine = paragraphs() -1; - - // get pressed key code - int aKey = e->key(); - - // check if is pressed - bool ctrlPressed = e->state() & ControlButton; - // check if is pressed - bool shftPressed = e->state() & ShiftButton; - - // process + key-bindings - if ( aKey == Key_C && ctrlPressed ) { - _buf.truncate(0); - setText("\n"); - _currentPrompt = READY_PROMPT; - setText(_currentPrompt); - return; - } - - // check for printed key - aKey = ( aKey < Key_Space || aKey > Key_ydiaeresis ) ? aKey : 0; - - switch ( aKey ) { - case 0 : - // any printed key - { - if ( curLine < endLine || curCol < PROMPT_SIZE ) - moveCursor( QTextEdit::MoveEnd, false ); - QTextEdit::keyPressEvent( e ); - break; - } - case Key_Return: - case Key_Enter: - // key - { - moveCursor( QTextEdit::MoveEnd, false ); - QTextEdit::keyPressEvent( e ); - break; - } - case Key_Up: - // arrow key: process as follows: - // - without , modifiers: previous command in history - // - with modifier key pressed: move cursor one row up without selection - // - with modifier key pressed: move cursor one row up with selection - // - with + modifier keys pressed: scroll one row up - { - if ( ctrlPressed && shftPressed ) { - scrollBy( 0, -QFontMetrics( font() ).lineSpacing() ); - } - else if ( shftPressed ) { - if ( curLine > 0 ) - moveCursor( QTextEdit::MoveUp, true ); - } - 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 ); - } - break; - } - case Key_Down: - // arrow key: process as follows: - // - without , modifiers: next command in history - // - with modifier key pressed: move cursor one row down without selection - // - with modifier key pressed: move cursor one row down with selection - // - with + modifier keys pressed: scroll one row down - { - if ( ctrlPressed && shftPressed ) { - scrollBy( 0, QFontMetrics( font() ).lineSpacing() ); - } - else if ( shftPressed ) { - if ( curLine < endLine ) - moveCursor( QTextEdit::MoveDown, true ); - } - else if ( ctrlPressed ) { - moveCursor( QTextEdit::MoveDown, false ); - } - else { - QString histLine = _currentPrompt; - QString nextCommand = myInterp->getNext(); - if ( nextCommand.compare( TOP_HISTORY_PY ) != 0 ) { - removeParagraph( endLine ); - histLine.append( nextCommand ); - append( histLine ); - } - else { - if (_isInHistory) { - _isInHistory = false; - removeParagraph( endLine ); - histLine.append( _currentCommand ); - append( histLine ); - } - } - moveCursor( QTextEdit::MoveEnd, false ); - } - break; - } - case Key_Left: - // arrow key: process as follows: - // - without , modifiers: move one symbol left (taking into account prompt) - // - with modifier key pressed: move one word left (taking into account prompt) - // - with modifier key pressed: move one symbol left with selection - // - with + modifier keys pressed: move one word left with selection - { - if ( !shftPressed && isCommand( text( curLine ) ) && curCol <= PROMPT_SIZE ) { - setCursorPosition( curLine-1, 0 ); - moveCursor( QTextEdit::MoveLineEnd, false ); - } - else { - QTextEdit::keyPressEvent( e ); - } - break; - } - case Key_Right: - // arrow key: process as follows: - // - without , modifiers: move one symbol right (taking into account prompt) - // - with modifier key pressed: move one word right (taking into account prompt) - // - with modifier key pressed: move one symbol right with selection - // - with + modifier keys pressed: move one word right with selection - { - if ( !shftPressed ) { - if ( curCol < paragraphLength( curLine ) ) { - if ( isCommand( text( curLine ) ) && curCol < PROMPT_SIZE ) { - setCursorPosition( curLine, PROMPT_SIZE ); - break; - } - } - else { - if ( curLine < endLine && isCommand( text( curLine+1 ) ) ) { - setCursorPosition( curLine+1, PROMPT_SIZE ); - break; - } - } - } - QTextEdit::keyPressEvent( e ); - break; - } - case Key_PageUp: - // key: process as follows: - // - without , modifiers: first command in history - // - with modifier key pressed: move cursor one page up without selection - // - with modifier key pressed: move cursor one page up with selection - // - with + modifier keys pressed: scroll one page up - { - if ( ctrlPressed && shftPressed ) { - scrollBy( 0, -visibleHeight() ); - } - else if ( shftPressed ) { - if ( curLine > 0 ) - moveCursor( QTextEdit::MovePgUp, true ); - } - else if ( ctrlPressed ) { - moveCursor( QTextEdit::MovePgUp, false ); - } - else { - QString histLine = _currentPrompt; - if ( ! _isInHistory ) { - _isInHistory = true; - _currentCommand = text( endLine ).remove( 0, PROMPT_SIZE ); - _currentCommand.truncate( _currentCommand.length() - 1 ); - } - QString firstCommand = myInterp->getPrevious(); - QString pcmd; - while ( ( pcmd = QString( myInterp->getPrevious() ) ).compare( BEGIN_HISTORY_PY ) != 0 ) - firstCommand = pcmd; - if ( firstCommand.compare( BEGIN_HISTORY_PY ) != 0 ) { - removeParagraph( endLine ); - histLine.append( firstCommand ); - insertParagraph( histLine, -1 ); - } - moveCursor( QTextEdit::MoveEnd, false ); - } - break; - } - case Key_PageDown: - // key: process as follows: - // - without , modifiers: last command in history - // - with modifier key pressed: move cursor one page down without selection - // - with modifier key pressed: move cursor one page down with selection - // - with + modifier keys pressed: scroll one page down - { - if ( ctrlPressed && shftPressed ) { - scrollBy( 0, visibleHeight() ); - } - else if ( shftPressed ) { - if ( curLine < endLine ) - moveCursor( QTextEdit::MovePgDown, true ); - } - else if ( ctrlPressed ) { - moveCursor( QTextEdit::MovePgDown, false ); - } - else { - if ( _isInHistory ) { - QString histLine = _currentPrompt; - while ( QString( myInterp->getNext() ).compare( TOP_HISTORY_PY ) != 0 ); - _isInHistory = false; - removeParagraph( endLine ); - histLine.append( _currentCommand ); - insertParagraph( histLine, -1 ); - } - moveCursor( QTextEdit::MoveEnd, false ); - } - break; - } - case Key_Home: - // key: process as follows: - // - without , modifiers: move cursor to the beginning of the current line without selection - // - with modifier key pressed: move cursor to the very first symbol without selection - // - with modifier key pressed: move cursor to the beginning of the current line with selection - // - with + modifier keys pressed: move cursor to the very first symbol with selection - { - if ( ctrlPressed ) { - moveCursor( QTextEdit::MoveHome, shftPressed ); - } - else { - if ( isCommand( text( curLine ) ) ) { - int ps1, ps2, cs1, cs2; - bool hasSelection = hasSelectedText(); - if ( hasSelection ) - getSelection( &ps1, &cs1, &ps2, &cs2 ); - removeSelection(); - horizontalScrollBar()->setValue( horizontalScrollBar()->minValue() ); - if ( curCol > PROMPT_SIZE && shftPressed ) - setSelection( curLine, PROMPT_SIZE, curLine, ( hasSelection && ps1 == ps2 && ps1 == curLine && cs2 > PROMPT_SIZE ) ? cs2 : curCol ); - setCursorPosition( curLine, PROMPT_SIZE ); - } - else { - moveCursor( QTextEdit::MoveLineStart, shftPressed ); - } - } - break; - } - case Key_End: - // key: process as follows: - // - without , modifiers: move cursor to the end of the current line without selection - // - with modifier key pressed: move cursor to the very last symbol without selection - // - with modifier key pressed: move cursor to the end of the current line with selection - // - with + modifier keys pressed: move cursor to the very last symbol with selection - { - if ( ctrlPressed ) { - moveCursor( QTextEdit::MoveEnd, shftPressed ); - } - else { - moveCursor( QTextEdit::MoveLineEnd, shftPressed ); - } - break; - } - case Key_Backspace : - // key: process as follows - // - without any modifiers : delete symbol before the cursor / selection (taking into account prompt) - // - with modifier key pressed: delete previous word - // works only for last (command) line - { - if ( curLine == endLine && ( curCol > PROMPT_SIZE || curCol >= PROMPT_SIZE && hasSelectedText() ) ) { - if ( ctrlPressed && !hasSelectedText() ) { - QString txt = text( curLine ); - int ind = curCol-1; - while ( ind > 0 && txt[ ind ] == ' ' ) ind--; - ind = txt.findRev( ' ', ind ) + 1; - if ( ind > PROMPT_SIZE-1 ) { - setSelection( curLine, ind, curLine, curCol ); - removeSelectedText(); - } - else { - QTextEdit::keyPressEvent( e ); - } - } - else { - QTextEdit::keyPressEvent( e ); - } - } - break; - } - case Key_Delete : - // key: process as follows - // - without any modifiers : delete symbol after the cursor / selection (taking into account prompt) - // - with modifier key pressed: delete next word - // works only for last (command) line - { - if ( curLine == endLine && curCol > PROMPT_SIZE-1 ) { - if ( ctrlPressed && !hasSelectedText() ) { - QString txt = text( curLine ); - int ind = curCol; - while ( ind < (int)( txt.length() - 1 ) && txt[ind] == ' ' ) ind++; - ind = txt.find( ' ', ind ); - while ( ind < (int)( txt.length() - 1 ) && txt[ ind ] == ' ' ) ind++; - if ( ind > PROMPT_SIZE-1 ) { - setSelection( curLine, curCol, curLine, ind ); - removeSelectedText(); - } - else { - QTextEdit::keyPressEvent( e ); - } - } - else { - QTextEdit::keyPressEvent( e ); - } - } - break; - } - case Key_Insert : - // key: process as follows - // - with modifier key pressed: copy() - // - with modifier key pressed: paste() to the command line - { - if ( ctrlPressed ) { - copy(); - } - else if ( shftPressed ) { - if ( curLine != endLine || curCol < PROMPT_SIZE ) - moveCursor( QTextEdit::MoveEnd, false ); - paste(); - } - else - QTextEdit::keyPressEvent( e ); - break; - } - } -} - -/*! - Handles notifications coming from Python dispatcher -*/ -void PythonConsole_PyEditor::customEvent(QCustomEvent* e) -{ - switch( e->type() ) { - 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; - setText(_currentPrompt); - viewport()->unsetCursor(); - break; - } - case PyInterp_Event::INCOMPLETE: - { - _buf.append("\n"); - _currentPrompt = DOTS_PROMPT; - setText(_currentPrompt); - viewport()->unsetCursor(); - break; - } - default: - QTextEdit::customEvent( e ); - } - - setReadOnly( false ); - _isInHistory = false; -} - -/*! - Handles Python interpreter change -*/ -void PythonConsole_PyEditor::onPyInterpChanged( PyInterp_base* interp ) -{ - if ( myInterp != interp - // Force read-only state and wait cursor when myInterp is NULL - || !myInterp ){ - myInterp = interp; - if ( myInterp ){ - myBanner = myInterp->getbanner().c_str(); - setText(myBanner); - _buf.truncate(0); - setReadOnly( false ); - _isInHistory = false; - setText(_currentPrompt); - viewport()->unsetCursor(); - } - else { - clear(); - setReadOnly( true ); - viewport()->setCursor( waitCursor ); - } - } -} - -/*! - Creates popup menu -*/ -QPopupMenu* PythonConsole_PyEditor::createPopupMenu( const QPoint& pos ) -{ - QPopupMenu* popup = QTextEdit::createPopupMenu( pos ); - - QValueList ids; - for ( int i = 0; popup && i < (int)popup->count(); i++ ) - { - if ( !popup->isItemEnabled( popup->idAt( i ) ) ) - ids.append( popup->idAt( i ) ); - } - - for ( QValueList::const_iterator it = ids.begin(); it != ids.end(); ++it ) - popup->removeItem( *it ); - - SUIT_Tools::simplifySeparators( popup ); - - if ( !popup->count() ) - { - delete popup; - popup = 0; - } - - return popup; -} diff --git a/src/PythonConsole/PythonConsole_PyEditor.h b/src/PythonConsole/PythonConsole_PyEditor.h deleted file mode 100755 index 004b40021..000000000 --- a/src/PythonConsole/PythonConsole_PyEditor.h +++ /dev/null @@ -1,77 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : PythonConsole_PyEditor.h -// Author : Nicolas REJNERI -// Module : SALOME - -#ifndef PythonConsole_PyEditor_H -#define PythonConsole_PyEditor_H - -#include "PythonConsole_PyInterp.h" // this include must be first (see PyInterp_base.h)! - -#include -#include - -class PythonConsole_PyInterp; - -class PYCONSOLE_EXPORT PythonConsole_PyEditor : public QTextEdit -{ - Q_OBJECT; - -public: - PythonConsole_PyEditor(PyInterp_base* theInterp, QWidget *theParent = 0, const char* theName = ""); - ~PythonConsole_PyEditor(); - - virtual void setText(QString s); - bool isCommand(const QString& str) const; - - virtual void exec( const QString& command ); - -protected: - virtual void contentsDropEvent( QDropEvent* event ); - virtual void contentsMouseReleaseEvent( QMouseEvent* event ); - 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: - QString _buf; - QString _currentCommand; - QString _currentPrompt; - bool _isInHistory; - - PyInterp_base* myInterp; - - QString myBanner; - QString myOutput; - QString myError; -}; - -#endif diff --git a/src/PythonConsole/PythonConsole_PyInterp.cxx b/src/PythonConsole/PythonConsole_PyInterp.cxx deleted file mode 100755 index da23b5f04..000000000 --- a/src/PythonConsole/PythonConsole_PyInterp.cxx +++ /dev/null @@ -1,134 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : PythonConsole_PyInterp.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "PythonConsole_PyInterp.h" -//#include "utilities.h" - -using namespace std; - - -//#ifdef _DEBUG_ -//static int MYDEBUG = 0; -//#else -//static int MYDEBUG = 0; -//#endif - - -/*! - * constructor : multi Python interpreter, one per SALOME study. - * calls initialize method defined in base class, which calls virtual methods - * initstate & initcontext redefined here. - */ -PythonConsole_PyInterp::PythonConsole_PyInterp(): PyInterp_base() -{ -} - -/*! - Destructor -*/ -PythonConsole_PyInterp::~PythonConsole_PyInterp() -{ -} - -/*! - * EDF-CCAR - * When SALOME uses multi Python interpreter feature, - * Every study has its own interpreter and thread state (_tstate = Py_NewInterpreter()) - * This is fine because every study has its own modules (sys.modules) stdout and stderr - * BUT some Python modules must be imported only once. In multi interpreter context Python - * modules (*.py) are imported several times. - * The pyqt module must be imported only once because it registers classes in a C module. - * It's quite the same with omniorb modules (internals and generated with omniidl) - * This problem is handled with "shared modules" defined in salome_shared_modules.py - * These "shared modules" are imported only once and only copied in all the other interpreters - * BUT it's not the only problem. Every interpreter has its own __builtin__ module. That's fine - * but if we have copied some modules and imported others problems may arise with operations that - * are not allowed in restricted execution environment. So we must impose that all interpreters - * have identical __builtin__ module. - * That's all, for the moment ... - */ - -bool PythonConsole_PyInterp::initState() -{ - /* - * The GIL is acquired and will be held on initState output - * It is the caller responsability to release the lock if needed - */ - 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; -} - -/*! - The GIL is assumed to be held - It is the caller responsability caller to acquire the GIL - It will still be held on initContext output -*/ -bool PythonConsole_PyInterp::initContext() -{ - PyObject *m = PyImport_AddModule("__main__"); // interpreter main module (module context) - if(!m){ -// if(MYDEBUG) MESSAGE("problem..."); - PyErr_Print(); -// ASSERT(0); - return false; - } - _g = PyModule_GetDict(m); // get interpreter dictionnary context -// if(MYDEBUG) MESSAGE("PythonConsole_PyInterp::initContext - this = "< // this include must be first (see PyInterp_base.h)! - -class PYCONSOLE_EXPORT PythonConsole_PyInterp : public PyInterp_base -{ -public: - PythonConsole_PyInterp(); - ~PythonConsole_PyInterp(); - -protected: - virtual bool initState(); - virtual bool initContext(); -}; - -#endif diff --git a/src/QDS/Makefile.in b/src/QDS/Makefile.in deleted file mode 100755 index 290054d45..000000000 --- a/src/QDS/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 -# -# File : Makefile.in -# Author : Alexander SOLOVYOV (OCN) -# Module : QDS -# $Header: /home/server/cvs/GUI/GUI_SRC/src/QDS/Makefile.in - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - -@COMMENCE@ - -# header files -EXPORT_HEADERS= QDS.h \ - QDS_CheckBox.h \ - QDS_ComboBox.h \ - QDS_Datum.h \ - QDS_LineEdit.h \ - QDS_SpinBox.h \ - QDS_SpinBoxDbl.h \ - QDS_TextEdit.h \ - QDS_Validator.h - -# Libraries targets -LIB = libQDS.la - -LIB_SRC= QDS.cxx \ - QDS_CheckBox.cxx \ - QDS_ComboBox.cxx \ - QDS_Datum.cxx \ - QDS_LineEdit.cxx \ - QDS_SpinBox.cxx \ - QDS_SpinBoxDbl.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) - -LDFLAGS+=$(QT_MT_LIBS) $(CAS_KERNEL) -lDDS -lqtx - -@CONCLUDE@ - - diff --git a/src/QDS/QDS.cxx b/src/QDS/QDS.cxx deleted file mode 100644 index fb1cdae24..000000000 --- a/src/QDS/QDS.cxx +++ /dev/null @@ -1,252 +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 -// -#include "QDS.h" - -#include "QDS_Datum.h" - -#include - -#include -#include - -#include -#include - -QValueList QDS::_datumList; - -/*! - Convert the OpenCascade ascii string to Qt string. -*/ -QString QDS::toQString( const TCollection_AsciiString& src ) -{ - QTextCodec* codec = QTextCodec::codecForLocale(); - QString res; - if ( !src.IsEmpty() ) - res = codec ? codec->toUnicode( (char*)src.ToCString(), src.Length() ) : - QString( (char*)src.ToCString() ); - return res; -} - -/*! - Convert the OpenCascade unicode string to Qt string. -*/ -QString QDS::toQString( const TCollection_ExtendedString& src ) -{ - if ( src.IsAscii() ) - return toQString( TCollection_AsciiString( src ) ); - else - 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() ) - return QString::null; - else - return toQString( src->String() ); -} - -/*! - Convert the OpenCascade unicode string to Qt string. -*/ -QString QDS::toQString( const Handle(TCollection_HExtendedString)& src ) -{ - if ( src.IsNull() ) - return QString::null; - else - return toQString( src->String() ); -} - -/*! - Convert the Qt string to OpenCascade ascii string. -*/ -TCollection_AsciiString QDS::toAsciiString( const QString& src ) -{ - TCollection_AsciiString res; - if ( src.latin1() ) - { - QTextCodec* codec = QTextCodec::codecForLocale(); - if ( codec ) - { - int len = -1; - QCString str = codec->fromUnicode( src, len ); - res = TCollection_AsciiString( (Standard_CString)(const char*)str, len ); - } - else - res = TCollection_AsciiString( (char*)src.latin1() ); - } - 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; - if ( !src.IsNull() ) - res = toAsciiString( src->String() ); - return res; -} - -/*! - Convert the Qt string to OpenCascade unicode string. -*/ -TCollection_ExtendedString QDS::toExtString( const QString& src ) -{ - if ( src.isEmpty() ) - return TCollection_ExtendedString(); - - Standard_Integer len = src.length(); - Standard_ExtString extStr = new Standard_ExtCharacter[( len + 1 ) * 2]; - memcpy( extStr, src.unicode(), len * 2 ); - extStr[len] = 0; - - TCollection_ExtendedString trg( extStr ); - - delete [] extStr; - - 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() ) - return false; - - 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; - TCollection_AsciiString system = toAsciiString( sys ); - Handle(DDS_Dictionary) dic = DDS_Dictionary::Get(); - if ( !dic.IsNull() ) - lab = toQString( comp.isEmpty() ? dic->GetUnitSystemLabel( system ) : - dic->GetUnitSystemLabel( system, toAsciiString( 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; - Handle(DDS_Dictionary) dic = DDS_Dictionary::Get(); - if ( !dic.IsNull() ) - sys = toQString( comp.isEmpty() ? dic->GetActiveUnitSystem() : - dic->GetActiveUnitSystem( toAsciiString( 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(); - if ( dic.IsNull() ) - return; - - TCollection_AsciiString system = toAsciiString( sys ); - comp.isEmpty() ? dic->SetActiveUnitSystem( system ) : - dic->SetActiveUnitSystem( system, toAsciiString( comp ) ); - - QString unitSys = activeUnitSystem( comp ); - if ( sys == unitSys ) - return; - - TCollection_AsciiString aComp = toAsciiString( comp ); - for ( QValueList::iterator it = _datumList.begin(); it != _datumList.end(); ++it ) - { - QDS_Datum* datum = *it; - if ( !datum ) - continue; - - bool ok = aComp.IsEmpty(); - if ( !ok ) - { - Handle(DDS_DicItem) item = datum->dicItem(); - ok = !item.IsNull() && aComp == item->GetComponent(); - } - - if ( ok ) - datum->unitSystemChanged( unitSys ); - } -} - -/*! - Register given datum \adatum in the static list. - This function invoked by QDS_Datum constructor. -*/ -void QDS::insertDatum( QDS_Datum* datum ) -{ - if ( !datum ) - return; - - _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 ) - return; - - _datumList.remove( datum ); -} diff --git a/src/QDS/QDS.h b/src/QDS/QDS.h deleted file mode 100644 index 6f3fecd85..000000000 --- a/src/QDS/QDS.h +++ /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 -// -#ifndef QDS_H -#define QDS_H - -#ifdef WIN32 -#ifdef QDS_EXPORTS -#define QDS_EXPORT __declspec(dllexport) -#else -#define QDS_EXPORT __declspec(dllimport) -#endif -#else -#define QDS_EXPORT -#endif - -#if defined WIN32 -#pragma warning ( disable:4251 ) -#pragma warning ( disable:4786 ) -#endif - -#include -#include - -#include - -#include - -class QDS_Datum; -class Handle(TCollection_HAsciiString); -class Handle(TCollection_HExtendedString); - -class QDS_EXPORT QDS -{ -public: - /*! 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& ); - - static QString unitSystemLabel( const QString&, - const QString& = QString::null ); - static QString activeUnitSystem( const QString& = QString::null ); - static void setActiveUnitSystem( const QString&, - const QString& = QString::null ); - - static QString toQString( const TCollection_AsciiString& ); - static QString toQString( const TCollection_ExtendedString& ); - static QString toQString( const Handle(TCollection_HAsciiString)& ); - static QString toQString( const Handle(TCollection_HExtendedString)& ); - - static TCollection_AsciiString toAsciiString( const QString& ); - static TCollection_AsciiString toAsciiString( const TCollection_ExtendedString& ); - static TCollection_AsciiString toAsciiString( const Handle(TCollection_HExtendedString)& ); - - static TCollection_ExtendedString toExtString( const QString& ); - static TCollection_ExtendedString toExtString( const TCollection_AsciiString& ); - -protected: - static void insertDatum( QDS_Datum* ); - static void removeDatum( QDS_Datum* ); - -private: - static QValueList _datumList; -}; - -#endif diff --git a/src/QDS/QDS_CheckBox.cxx b/src/QDS/QDS_CheckBox.cxx deleted file mode 100644 index 9713ca5e4..000000000 --- a/src/QDS/QDS_CheckBox.cxx +++ /dev/null @@ -1,150 +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 -// -#include "QDS_CheckBox.h" - -#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. 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 ) -{ -} - -/*! - Destructor. -*/ -QDS_CheckBox::~QDS_CheckBox() -{ -} - -/*! - Sets the state "NoChange" for checkbox. -*/ -void QDS_CheckBox::clear() -{ - setStringValue( "-1" ); -} - -/*! - Returns string from QCheckBox widget. If the check box state is on then 1 returned otherwise 0. -*/ -QString QDS_CheckBox::getString() const -{ - QString val; - if ( checkBox() && checkBox()->state() != QButton::NoChange ) - val = checkBox()->isChecked() ? "1" : "0"; - return val; -} - -/*! - 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 ) -{ - if ( !checkBox() ) - return; - - bool isOk; - int val = (int)txt.toDouble( &isOk ); - if ( isOk && val < 0 ) - { - checkBox()->setTristate(); - checkBox()->setNoChange(); - } - else - checkBox()->setChecked( isOk && val != 0 ); -} - -/*! - Returns pointer to QCheckBox widget. -*/ -QCheckBox* QDS_CheckBox::checkBox() const -{ - return ::qt_cast( controlWidget() ); -} - -/*! - Create QCheckBox widget as control subwidget. -*/ -QWidget* QDS_CheckBox::createControl( QWidget* parent ) -{ - QCheckBox* cb = new QCheckBox( parent ); - connect( cb, SIGNAL( stateChanged( int ) ), SLOT( onParamChanged() ) ); - connect( cb, SIGNAL( toggled( bool ) ), SIGNAL( toggled( bool ) ) ); - connect( cb, SIGNAL( stateChanged( int ) ), this, SLOT( onStateChanged( int ) ) ); - return cb; -} - -/*! - 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_CheckBox.h b/src/QDS/QDS_CheckBox.h deleted file mode 100644 index 9be0dde19..000000000 --- a/src/QDS/QDS_CheckBox.h +++ /dev/null @@ -1,54 +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 -// -#ifndef QDS_CHECKBOX_H -#define QDS_CHECKBOX_H - -#include "QDS_Datum.h" - -class QCheckBox; - -class QDS_EXPORT QDS_CheckBox : public QDS_Datum -{ - Q_OBJECT - -public: - QDS_CheckBox( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); - virtual ~QDS_CheckBox(); - - bool isChecked() const; - void setChecked( const bool ); - - virtual void clear(); - -signals: - void toggled( bool ); - -private slots: - void onParamChanged(); - void onStateChanged( int ); - -protected: - QCheckBox* checkBox() const; - virtual QWidget* createControl( QWidget* ); - - virtual QString getString() const; - virtual void setString( const QString& ); -}; - -#endif diff --git a/src/QDS/QDS_ComboBox.cxx b/src/QDS/QDS_ComboBox.cxx deleted file mode 100644 index ac068735e..000000000 --- a/src/QDS/QDS_ComboBox.cxx +++ /dev/null @@ -1,612 +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 -// -#include "QDS_ComboBox.h" - -#include - -#include -#include -#include - -#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. 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 ) -{ -} - -/*! - Destructor. -*/ -QDS_ComboBox::~QDS_ComboBox() -{ -} - -/*! - Returns true if ComboBox allow to edit current text. -*/ -bool QDS_ComboBox::editable() const -{ - if ( comboBox() && comboBox()->lineEdit() ) - return !comboBox()->lineEdit()->isReadOnly(); - else - return false; -} - -/*! - Sets the possibily of current text editing. -*/ -void QDS_ComboBox::setEditable( const bool on ) -{ - QComboBox* aCombo = comboBox(); - if ( aCombo ) - aCombo->setEditable( on ); - if ( aCombo && aCombo->lineEdit() ) - { - aCombo->lineEdit()->setReadOnly( !on ); - aCombo->clearValidator(); - if ( on ) - aCombo->setValidator( validator() ); - } -} - -/*! - 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 -{ - if ( total ) - return myValue.count(); - else if ( comboBox() ) - return comboBox()->count(); - else - return 0; -} - -/*! - 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 -{ - ids.clear(); - for ( QIntList::const_iterator it = myDataIds.begin(); it != myDataIds.end(); ++it ) - if ( total || ( myState.contains( *it ) && myState[*it] ) ) - ids.append( *it ); -} - -/*! - Returns the current id as integer. Reimplemented. -*/ -int QDS_ComboBox::integerValue() const -{ - QComboBox* cb = comboBox(); - QString cur = getString(); - if ( cb && cb->count() > 0 && cb->currentItem() >= 0 ) - cur = cb->text( cb->currentItem() ); - - if ( cb && cur == getString() ) - return getId( cb->currentItem() ); - else - return getId( getString() ); -} - -/*! - Returns the current id as double. Reimplemented. -*/ -double QDS_ComboBox::doubleValue() const -{ - initDatum(); - - QComboBox* cb = comboBox(); - QString cur = getString(); - if ( cb && cb->count() > 0 && cb->currentItem() >= 0 ) - cur = cb->text( cb->currentItem() ); - - if ( cb && cur == getString() ) - return getId( cb->currentItem() ); - else - return getId( getString() ); -} - -/*! - Set the current item acording to specified id. Reimplemented. -*/ -void QDS_ComboBox::setIntegerValue( const int id ) -{ - initDatum(); - - if ( myValue.contains( id ) ) - setString( myValue[id] ); - else - setString( "" ); -} - -/*! - Get the integer part of specified value and use it as new current identifier. Reimplemented. -*/ -void QDS_ComboBox::setDoubleValue( const double val ) -{ - initDatum(); - - int id = (int)val; - if ( myValue.contains( id ) ) - setString( myValue[id] ); - else if ( id == -1 ) - setString( "" ); -} - -/*! - Returns visible state of item specified by \aid. -*/ -bool QDS_ComboBox::state( const int id ) const -{ - bool state = false; - if ( myState.contains( id ) ) - state = myState[id]; - return state; -} - -/*! - 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 ) -{ - QValueList lst; - if ( id < 0 ) - { - for ( IdStateMap::Iterator it = myState.begin(); it != myState.end(); ++it ) - lst.append( it.key() ); - } - else - lst.append( id ); - - setState( on, lst, append ); -} - -/*! - 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 ) -{ - initDatum(); - - if ( ids.isEmpty() && append ) - return; - - bool changed = false; - - QMap aMap; - for ( uint i = 0; i < ids.count(); i++ ) - aMap.insert( *ids.at( i ), 0 ); - - for ( IdStateMap::Iterator it = myState.begin(); it != myState.end(); ++it ) - { - if ( aMap.contains( it.key() ) ) - { - if ( it.data() != on ) - { - it.data() = on; - changed = true; - } - } - else if ( !append && it.data() == on ) - { - it.data() = !on; - changed = true; - } - } - if ( changed ) - updateComboBox(); -} - -/*! - 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 ) -{ - initDatum(); - - if ( ids.count() != names.count() ) - return; - - myUserIds = ids; - myUserNames = names; -} - -/*! - 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. -*/ -void QDS_ComboBox::setValues( const QStringList& names ) -{ - initDatum(); - - QValueList< int > ids; - for ( int i = 0, n = names.count(); i < n; i++ ) - ids.append( i ); - setValues( ids, names ); -} - -/*! - Sets the active item as item with default id. If default - not defined then first item will be used. -*/ -void QDS_ComboBox::reset() -{ - int id = -1; - QString aDefValue = defaultValue(); - if ( !aDefValue.isEmpty() ) - id = aDefValue.toInt(); - - if ( id == -1 ) - id = getId( 0 ); - - setIntegerValue( id ); -} - -/*! - Returns identifier from given ComboBox string item. -*/ -int QDS_ComboBox::stringToValue( const QString& str ) const -{ - return getId( str ); -} - -/*! - Returns ComboBox string item from given identifier. -*/ -QString QDS_ComboBox::valueToString( const int val ) const -{ - QString str; - if ( myValue.contains( val ) ) - str = myValue[val]; - return str; -} - -/*! - Returns string from QComboBox widget. Reimplemented. -*/ -QString QDS_ComboBox::getString() const -{ - QString res; - QtxComboBox* cb = comboBox(); - if ( cb ) - { - if ( !cb->editable() ) - { - if ( !cb->isCleared() ) - res = cb->currentText(); - } - else - res = cb->lineEdit()->text(); - } - return res; -} - -/*! - Sets the string into QComboBox widget. Reimplemented. -*/ -void QDS_ComboBox::setString( const QString& txt ) -{ - QtxComboBox* cb = comboBox(); - if ( !cb ) - return; - - bool isClear = cb->isCleared(); - - int idx = -1; - for ( int i = 0; i < cb->count() && idx == -1; i++ ) - if ( cb->text( i ) == txt ) - idx = i; - - int old = cb->currentItem(); - if ( idx != -1 ) - cb->setCurrentItem( idx ); - else if ( txt.isEmpty() ) - { - if ( !cb->editable() ) - cb->setCurrentText( txt ); - else - cb->lineEdit()->setText( txt ); - } - if ( isClear != txt.isEmpty() || ( !isClear && old != cb->currentItem() ) ) - { - onParamChanged(); - QString str = getString(); - emit activated( integerValue() ); - emit activated( str ); - emit paramChanged(); - emit paramChanged( str ); - } -} - -/*! - Returns pointer to QtxComboBox widget. -*/ -QtxComboBox* QDS_ComboBox::comboBox() const -{ - return ::qt_cast( controlWidget() ); -} - -/*! - Create QComboBox widget as control subwidget. Reimplemented. -*/ -QWidget* QDS_ComboBox::createControl( QWidget* parent ) -{ - QtxComboBox* cb = new QtxComboBox( parent ); - cb->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Fixed ) ); - connect( cb, SIGNAL( textChanged( const QString& ) ), this, - SLOT( onTextChanged( const QString& ) ) ); - connect( cb, SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) ); - 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 ); - - Handle(TColStd_HArray1OfInteger) anIds; - Handle(TColStd_HArray1OfExtendedString) aValues, anIcons; - - Handle(DDS_DicItem) aDicItem = dicItem(); - if ( !aDicItem.IsNull() ) - aDicItem->GetListOfValues( aValues, anIds, anIcons ); - - myValue.clear(); - myIcons.clear(); - myDataIds.clear(); - - QMap userMap; - QIntList::iterator iIt = myUserIds.begin(); - QStringList::iterator sIt = myUserNames.begin(); - for ( ; iIt != myUserIds.end() && sIt != myUserNames.end(); ++iIt, ++sIt ) - userMap.insert( *iIt, *sIt ); - - if ( !anIds.IsNull() && !aValues.IsNull() && - anIds->Length() == aValues->Length() ) - { - for ( int i = anIds->Lower(); i <= anIds->Upper(); i++ ) - { - QString aValue; - QPixmap aPixmap; - int id = anIds->Value( i ); - if ( userMap.contains( id ) ) - aValue = userMap[id]; - else - { - aValue = toQString( aValues->Value( i ) ); - if ( !anIcons.IsNull() && i <= anIcons->Upper() ) - { - QString anIconId = toQString( anIcons->Value( i ) ); - if ( anIconId != "" ) - aPixmap = QPixmap( anIconId ); - } - } - - myDataIds.append( id ); - myValue.insert( id, aValue ); - myState.insert( id, true ); - if ( !aPixmap.isNull() ) - myIcons.insert( id, aPixmap ); - } - } - - for ( iIt = myUserIds.begin(); iIt != myUserIds.end(); ++iIt ) - { - int id = *iIt; - if ( !myValue.contains( id ) ) - { - myDataIds.append( id ); - myValue.insert( id, userMap[id] ); - } - } - - QIntList del, add; - for ( IdStateMap::Iterator it1 = myState.begin(); it1 != myState.end(); ++it1 ) - if ( !myValue.contains( it1.key() ) ) - del.append( it1.key() ); - - for ( IdValueMap::Iterator it2 = myValue.begin(); it2 != myValue.end(); ++it2 ) - if ( !myState.contains( it2.key() ) ) - add.append( it2.key() ); - - for ( QIntList::iterator iter1 = del.begin(); iter1 != del.end(); ++iter1 ) - myState.remove( *iter1 ); - - for ( QIntList::iterator iter2 = add.begin(); iter2 != add.end(); ++iter2 ) - myState.insert( *iter2, true ); - - updateComboBox(); -} - -/*! - Notify about text changing in line edit of ComboBox. -*/ -void QDS_ComboBox::onTextChanged( const QString& ) -{ - onParamChanged(); - emit paramChanged(); - QString str = getString(); - emit paramChanged( str ); -} - -/*! - Notify about activation combobox item. -*/ -void QDS_ComboBox::onActivated( int idx ) -{ - if ( comboBox() ) - comboBox()->setCurrentItem( comboBox()->currentItem() ); - - int id = getId( idx ); - if ( id != -1 ) - { - onParamChanged(); - QString str = getString(); - emit activated( id ); - emit activated( str ); - emit paramChanged(); - emit paramChanged( str ); - } -} - -/*! - Updates ComboBox after have change of visible state or items have been inserted/removed. -*/ -void QDS_ComboBox::updateComboBox() -{ - QtxComboBox* cb = comboBox(); - - int curId = -1; - - bool isClear = false; - - if ( cb ) - { - isClear = cb->isCleared(); - - curId = getId( cb->currentItem() ); - cb->clear(); - } - - myIndex.clear(); - - int idx = 0; - for ( QIntList::const_iterator it = myDataIds.begin(); it != myDataIds.end(); ++it ) - { - int id = *it; - if ( !myValue.contains( id ) || !myState.contains( id ) || !myState[id] ) - continue; - - myIndex.insert( id, idx++ ); - if ( cb ) - { - if ( myIcons.contains( id ) ) - cb->insertItem( myIcons[id], myValue[id] ); - else - cb->insertItem( myValue[id] ); - } - } - - if ( cb && cb->count() ) - { - cb->setFont( cb->font() ); - cb->updateGeometry(); - - if ( isClear ) - cb->setCurrentText( "" ); - else - { - if ( getIndex( curId ) != -1 ) - cb->setCurrentItem( getIndex( curId ) ); - if ( curId != getId( cb->currentItem() ) ) - onActivated( cb->currentItem() ); - } - } -} - -/*! - Returns index of ComboBox item according to id. -*/ -int QDS_ComboBox::getIndex( const int id ) const -{ - int idx = -1; - if ( myIndex.contains( id ) ) - idx = myIndex[id]; - return idx; -} - -/*! - Returns index of ComboBox item according to string. -*/ -int QDS_ComboBox::getIndex( const QString& str ) const -{ - int idx = -1; - QComboBox* cb = comboBox(); - if ( cb ) - { - for ( int i = 0; i < cb->count() && idx == -1; i++ ) - if ( cb->text( i ) == str ) - idx = i; - } - return idx; -} - -/*! - Returns id according to ComboBox item index. -*/ -int QDS_ComboBox::getId( const int idx ) const -{ - int id = -1; - IdIndexMap::ConstIterator it = myIndex.begin(); - for (; it != myIndex.end() && id == -1; ++it ) - if ( it.data() == idx ) - id = it.key(); - return id; -} - -/*! - Returns id according to ComboBox item string. -*/ -int QDS_ComboBox::getId( const QString& str ) const -{ - int id = -1; - int candidate = -1; - IdValueMap::ConstIterator it = myValue.begin(); - for (; it != myValue.end() && id == -1; ++it ) - { - if ( it.data() == str ) - { - if ( state( it.key() ) ) - id = it.key(); - else - candidate = it.key(); - } - } - if ( id == -1 ) - id = candidate; - - return id; -} diff --git a/src/QDS/QDS_ComboBox.h b/src/QDS/QDS_ComboBox.h deleted file mode 100644 index 2a8791702..000000000 --- a/src/QDS/QDS_ComboBox.h +++ /dev/null @@ -1,110 +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 -// -#ifndef QDS_COMBOBOX_H -#define QDS_COMBOBOX_H - -#include "QDS_Datum.h" - -#include -#include -#include - -#include - -#ifdef WNT -#pragma warning( disable:4251 ) -#endif - -class QDS_EXPORT QDS_ComboBox : public QDS_Datum -{ - Q_OBJECT - -public: - QDS_ComboBox( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); - virtual ~QDS_ComboBox(); - - bool editable() const; - void setEditable( const bool ); - - int count( bool = false ) const; - void values( QValueList&, bool = false ) const; - - virtual int integerValue() const; - virtual double doubleValue() const; - virtual void setIntegerValue( const int ); - virtual void setDoubleValue( const double ); - - bool state( const int ) const; - void setState( const bool, const int, const bool = true ); - void setState( const bool, const QValueList&, const bool = true ); - void setValues( const QValueList&, const QStringList& ); - void setValues( const QStringList& ); - - virtual void reset(); - - int stringToValue( const QString& ) const; - QString valueToString( const int ) const; - -signals: - void activated( int ); - void activated( const QString& ); - -protected slots: - virtual void onActivated( int ); - virtual void onTextChanged( const QString& ); - -protected: - QtxComboBox* comboBox() const; - virtual QWidget* createControl( QWidget* ); - - virtual QString getString() const; - virtual void setString( const QString& ); - - virtual void unitSystemChanged( const QString& ); - -private: - int getId( const int ) const; - int getId( const QString& ) const; - int getIndex( const int ) const; - int getIndex( const QString& ) const; - - void updateComboBox(); - -private: - typedef QMap IdIconsMap; - typedef QMap IdValueMap; - typedef QMap IdStateMap; - typedef QMap IdIndexMap; - -private: - IdValueMap myValue; - IdStateMap myState; - IdIndexMap myIndex; - IdIconsMap myIcons; - - QIntList myDataIds; - QIntList myUserIds; - QStringList myUserNames; -}; - -#ifdef WNT -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/QDS/QDS_Datum.cxx b/src/QDS/QDS_Datum.cxx deleted file mode 100644 index a542a19b4..000000000 --- a/src/QDS/QDS_Datum.cxx +++ /dev/null @@ -1,1626 +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 -// -#include "QDS_Datum.h" - -#include "QDS_Validator.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/*! - class: QDS_Datum::Wrapper - descr: Wrapper widget for sub widgets. [internal] -*/ - -class QDS_Datum::Wrapper : public QWidget -{ -public: - Wrapper( QWidget* = 0 ); - virtual ~Wrapper(); - - QWidget* widget() const; - void setWidget( QWidget* ); - - 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 ) -{ - QHBoxLayout* base = new QHBoxLayout( this ); - base->setAutoAdd( true ); - setFocusPolicy( StrongFocus ); -} - -QDS_Datum::Wrapper::~Wrapper() -{ -} - -QWidget* QDS_Datum::Wrapper::widget() const -{ - return myWid; -} - -void QDS_Datum::Wrapper::setWidget( QWidget* wid ) -{ - if ( myWid == wid ) - return; - - myWid = wid; - - if ( !myWid ) - return; - - if ( myWid->parent() != this ) - myWid->reparent( this, QPoint( 0, 0 ) ); - - setTabOrder( this, myWid ); - setFocusProxy( myWid ); - - myWid->updateGeometry(); - updateGeometry(); -} - -void QDS_Datum::Wrapper::setSizePolicy( QSizePolicy sp ) -{ - QWidget::setSizePolicy( sp ); - - if ( widget() ) - widget()->setSizePolicy( sp ); -} - -void QDS_Datum::Wrapper::setGeometry( int x, int y, int w, int h ) -{ - QWidget::setGeometry( x, y, w, h ); - - if ( widget() && widget()->size() != size() ) - widget()->setGeometry( 0, 0, width(), height() ); -} - -/*! - \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 ), -myLabel( 0 ), -myUnits( 0 ), -myControl( 0 ), -myFlags( flags ), -myInitialised( false ) -{ - if ( myFlags & Label ) - myWrapper.insert( Label, new Wrapper( parent ) ); - if ( myFlags & Control ) - myWrapper.insert( Control, new Wrapper( parent ) ); - if ( myFlags & Units ) - myWrapper.insert( Units, new Wrapper( parent ) ); - - for ( QMap::Iterator it = myWrapper.begin(); it != myWrapper.end(); ++it ) - connect( it.data(), SIGNAL( destroyed( QObject* ) ), this, SLOT( onDestroyed( QObject* ) ) ); - - Handle(DDS_Dictionary) aDict = DDS_Dictionary::Get(); - if ( aDict.IsNull() ) - return; - - TCollection_AsciiString anId = toAsciiString( id ); - TCollection_AsciiString aComp = toAsciiString( comp ); - - if ( aComp.IsEmpty() ) - setDicItem( aDict->GetDicItem( anId ) ); - else - setDicItem( aDict->GetDicItem( anId, aComp ) ); - - QTimer::singleShot( 0, this, SLOT( onInitDatum() ) ); - - if ( parent ) - parent->installEventFilter( this ); - - insertDatum( this ); -} - -/*! - Destructor. Destroy all subwidget. - Datum unregister self from the static list by QDS::removeDatum(). -*/ -QDS_Datum::~QDS_Datum() -{ - removeDatum( this ); - - delete myLabel; - delete myUnits; - delete myControl; -/* - for ( QMap::Iterator it = myWrapper.begin(); it != myWrapper.end(); ++it ) - delete it.data(); -*/ -} - -/*! - 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(); - - return myId; -} - -/*! - Returns the datum type of value. -*/ -int QDS_Datum::type() const -{ - initDatum(); - - int res = DDS_DicItem::Unknown; - if ( !myDicItem.IsNull() ) - res = myDicItem->GetType(); - return res; -} - -/*! - Returns the datum label string. -*/ -QString QDS_Datum::label() const -{ - initDatum(); - - QString labStr; - if ( !myDicItem.IsNull() ) - labStr = toQString( myDicItem->GetLabel() ); - - if ( flags() & NotAccel ) - labStr = removeAccel( labStr ); - - return labStr; -} - -/*! - Returns the datum units string. -*/ -QString QDS_Datum::units() const -{ - initDatum(); - - QString unitStr; - if ( !myDicItem.IsNull() ) - unitStr = toQString( myDicItem->GetUnits() ); - return unitStr; -} - -/*! - Returns the datum value filter string. -*/ -QString QDS_Datum::filter() const -{ - initDatum(); - - QString fltr; - if ( !myDicItem.IsNull() ) - fltr = toQString( myDicItem->GetFilter() ); - return fltr; -} - -/*! - Returns the datum value format string. -*/ -QString QDS_Datum::format() const -{ - initDatum(); - - QString fmtStr; - if ( !myDicItem.IsNull() ) - fmtStr = toQString( myDicItem->GetFormat( false ) ); - return fmtStr; -} - -/*! - Returns the datum default value string. -*/ -QString QDS_Datum::defaultValue() const -{ - initDatum(); - - QString pref = prefix(); - QString suff = suffix(); - - QString def; - if ( !myDicItem.IsNull() ) - def = toQString( myDicItem->GetDefaultValue() ); - - QString aDef = def.stripWhiteSpace(); - if ( !pref.isEmpty() && aDef.left( pref.length() ) == pref ) - aDef = aDef.mid( pref.length() ); - - if ( !suff.isEmpty() && aDef.right( suff.length() ) == suff ) - aDef = aDef.mid( 0, aDef.length() - suff.length() ); - - return aDef; -} - -/*! - Returns the datum minimum value string. -*/ -QString QDS_Datum::minimumValue() const -{ - initDatum(); - - QString min; - if ( !myDicItem.IsNull() && myDicItem->HasData( DDS_DicItem::MinValue ) ) - min = format( format(), type(), myDicItem->GetMinValue() ); - return min; -} - -/*! - Returns the datum maximum value string. -*/ -QString QDS_Datum::maximumValue() const -{ - initDatum(); - - QString max; - if ( !myDicItem.IsNull() && myDicItem->HasData( DDS_DicItem::MaxValue ) ) - max = format( format(), type(), myDicItem->GetMaxValue() ); - return max; -} - -/*! - Returns the datum long description. -*/ -QString QDS_Datum::longDescription() const -{ - initDatum(); - - QString ldStr; - if ( !myDicItem.IsNull() ) - ldStr = toQString( myDicItem->GetLongDescription() ); - return ldStr; -} - -/*! - Returns the datum short description. -*/ -QString QDS_Datum::shortDescription() const -{ - initDatum(); - - QString sdStr; - if ( !myDicItem.IsNull() ) - sdStr = toQString( myDicItem->GetLongDescription() ); - 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; - if ( !isEmpty() ) - val = stringValue(); - return val; -} - -/*! - Returns the datum value as string (QString object). -*/ -QString QDS_Datum::stringValue() const -{ - initDatum(); - - if ( getString() == myTargetValue ) - return mySourceValue; - else - 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(); - - double res = 0; - if ( !myTargetValue.isNull() && myTargetValue == getString() ) - res = mySourceValue.toDouble(); - else - { - res = getString().toDouble(); - if ( !myDicItem.IsNull() ) - res = myDicItem->ToSI( res ); - } - - 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(); - - int res = 0; - if ( !myTargetValue.isNull() && myTargetValue == getString() ) - res = mySourceValue.toInt(); - else - { - double val = getString().toDouble(); - if ( !myDicItem.IsNull() ) - res = (int)myDicItem->ToSI( val ); - } - - return res; -} - -/*! - Returns the text from datum. Text consist of label, string value and units. -*/ -QString QDS_Datum::text() const -{ - initDatum(); - - QString aLabel = label(); - QString aData = stringValue(); - QString aUnits = units(); - - QString res = aLabel; - if ( !res.isEmpty() && !aData.isEmpty() ) - res += QString( ": " ); - - res += aData; - if ( !aUnits.isEmpty() ) - res += QString( " " ) + aUnits; - - 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(); - - mySourceValue = defaultValue(); - setString( format( ( myFlags & NotFormat ) ? (QString) "" : format(), type(), mySourceValue ) ); - invalidateCache(); - - onParamChanged(); - QString str = getString(); - emit paramChanged(); - emit paramChanged( str ); -} - -/*! - Clear the control. -*/ -void QDS_Datum::clear() -{ - initDatum(); - - if ( !getString().isEmpty() ) - { - mySourceValue = ""; - setString( mySourceValue ); - invalidateCache(); - - onParamChanged(); - QString str = getString(); - emit paramChanged(); - emit paramChanged( str ); - } -} - -/*! - Set varian value (QVariant object) into datum. -*/ -void QDS_Datum::setValue( const QVariant& val ) -{ - if ( val.isValid() && val.canCast( QVariant::String ) ) - setStringValue( val.toString() ); - else - clear(); -} - -/*! - Set string value (QString object) into datum. -*/ -void QDS_Datum::setStringValue( const QString& txt ) -{ - initDatum(); - - mySourceValue = txt; - QString aStr = format( ( flags() & NotFormat ) ? (QString) "" : format(), type(), txt ); - setString( aStr ); - myTargetValue = aStr; - - onParamChanged(); - QString str = getString(); - emit paramChanged(); - 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(); - - mySourceValue = QString().setNum( num, 'g', 16 ); - double val = num; - if ( !myDicItem.IsNull() ) - val = myDicItem->FromSI( val ); - - QString aStr = format( ( flags() & NotFormat ) ? (QString) "" : format(), type(), val ); - setString( aStr ); - myTargetValue = aStr; - - onParamChanged(); - QString str = getString(); - emit paramChanged(); - 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(); - - mySourceValue = QString().setNum( num ); - double val = num; - if ( !myDicItem.IsNull() ) - val = myDicItem->FromSI( val ); - - QString aStr = format( ( flags() & NotFormat ) ? (QString) "" : format(), type(), val ); - setString( aStr ); - myTargetValue = aStr; - - onParamChanged(); - QString str = getString(); - emit paramChanged(); - emit paramChanged( str ); -} - -/*! - Returns true if all subwidgets specified by \aelement enabled. -*/ -bool QDS_Datum::isEnabled( const int element ) const -{ - initDatum(); - - bool res = true; - if ( element & Label ) - res = res && labelWidget() && labelWidget()->isEnabled(); - if ( element & Units ) - res = res && unitsWidget() && unitsWidget()->isEnabled(); - if ( element & Control ) - res = res && controlWidget() && controlWidget()->isEnabled(); - return res; -} - -/*! - 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 ) -{ - initDatum(); - - if ( element & Label && labelWidget() ) - labelWidget()->setEnabled( on ); - if ( element & Units && unitsWidget() ) - unitsWidget()->setEnabled( on ); - if ( element & Control && controlWidget() ) - controlWidget()->setEnabled( on ); -} - -/*! - Enable/Disable control. -*/ -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 ) -{ - initDatum(); - - uint flag = Units; - while ( flag ) - { - if ( flags & flag && widget( flag ) ) - widget( flag )->setShown( visible ); - flag = flag >> 1; - } -} - -/*! - Show subwidgets specified by \aelement. - Possible values of \aelement: Label, Control, Units or their combinations. -*/ -void QDS_Datum::show( const int element ) -{ - setShown( true, element ); -} - -/*! - Hide subwidgets specified by \aelement. - Possible values of \aelement: Label, Control, Units or their combinations. -*/ -void QDS_Datum::hide( const int element ) -{ - setShown( false, element ); -} - -/*! - Returns subwidget specified by \aelement. - Possible values of \aelement: Label, Control, Units. -*/ -QWidget* QDS_Datum::widget( const int element ) const -{ - initDatum(); - return wrapper( element ); -} - -/*! - Set the input focus on the control widget. -*/ -void QDS_Datum::setFocus() -{ - initDatum(); - - if ( controlWidget() ) - controlWidget()->setFocus(); -} - -/*! - Returns true if control contains valid value otherwise returns false - and display warning message box if parameter \amsgBox is set. -*/ -bool QDS_Datum::isValid( const bool msgBox, const QString& extMsg, const QString& extLabel ) const -{ - initDatum(); - - if ( type() == DDS_DicItem::String && isDoubleFormat( format() ) ) - return true; - - QString req; - if ( !dicItem().IsNull() ) - req = toQString( dicItem()->GetRequired() ); - - bool aState = true; - QString aStr = getString(); - - if ( aStr.isEmpty() ) - aState = !( req == QString( "yes" ) || req == QString( "true" ) || req.toInt() ); - else - aState = validate( aStr ); - - if ( msgBox && !aState ) - { - QString info; - if ( !label().isEmpty() ) - info += tr( "DATA_INCORRECT_VALUE" ).arg( label() ); - else if ( !extLabel.isEmpty() ) - info += tr( "DATA_INCORRECT_VALUE" ).arg( extLabel ); - - QString typeStr; - switch ( type() ) - { - case DDS_DicItem::String: - typeStr = tr( "DATA_STRING" ); - break; - case DDS_DicItem::Integer: - typeStr = tr( "DATA_INTEGER" ); - break; - case DDS_DicItem::Float: - typeStr = tr( "DATA_FLOAT" ); - break; - default: - typeStr = tr( "DATA_NON_EMPTY" ); - break; - } - info += ( info.isEmpty() ? (QString) "" : QString( "\n" ) ) + - tr( "DATA_SHOULD_BE_VALUE" ).arg( typeStr ); - QString limit; - if ( type() == DDS_DicItem::Float || type() == DDS_DicItem::Integer ) - { - QString aMinValue = minValue(); - QString aMaxValue = maxValue(); - if ( !aMinValue.isEmpty() && !aMaxValue.isEmpty() ) - limit = tr( "DATA_RANGE" ).arg( aMinValue ).arg( aMaxValue ); - else if ( !aMinValue.isEmpty() ) - limit = tr( "DATA_MIN_LIMIT" ).arg( aMinValue ); - else if ( !aMaxValue.isEmpty() ) - limit = tr( "DATA_MAX_LIMIT" ).arg( aMaxValue ); - } - if ( !limit.isEmpty() ) - info += limit; - - info += QString( ".\n" ) + tr( "DATA_INPUT_VALUE" ); - - if ( !extMsg.isEmpty() ) - info += QString( "\n" ) + extMsg; - - QString msg; - for ( uint i = 0; i < info.length(); i++ ) - if ( info.at( i ) == '\n' ) - msg += QString( "
" ); - else - msg += info.at( i ); - - info = QString( "

%1

" ).arg( msg ); - - QMessageBox::critical( controlWidget() ? controlWidget()->topLevelWidget() : 0, - tr( "DATA_ERR_TITLE" ), info, tr( "OK" ) ); - if ( controlWidget() ) - controlWidget()->setFocus(); - } - return aState; -} - -/*! - Add widgets to the vertical box layout. -*/ -void QDS_Datum::addTo( QVBoxLayout* l ) -{ - initDatum(); - - if ( !l ) - return; - - if ( wrapper( Label ) ) - l->addWidget( wrapper( Label ) ); - if ( wrapper( Control ) ) - l->addWidget( wrapper( Control ) ); - if ( wrapper( Units ) ) - l->addWidget( wrapper( Units ) ); -} - -/*! - Add widgets to the horizaontal box layout. -*/ -void QDS_Datum::addTo( QHBoxLayout* l ) -{ - initDatum(); - - if ( !l ) - return; - - if ( wrapper( Label ) ) - l->addWidget( wrapper( Label ) ); - if ( wrapper( Control ) ) - l->addWidget( wrapper( Control ) ); - if ( wrapper( Units ) ) - l->addWidget( unitsWidget() ); -} - -/*! - Add widgets to the grid layout. -*/ -void QDS_Datum::addTo( QGridLayout* theLay, const int theRow, const int theCol, bool vertical ) -{ - initDatum(); - - if ( !theLay ) - return; - - int row = theRow; - int col = theCol; - if ( wrapper( Label ) ) - { - theLay->addWidget( wrapper( Label ), row, col ); - vertical ? row++ : col++; - } - if ( wrapper( Control ) ) - { - theLay->addWidget( wrapper( Control ), row, col ); - vertical ? row++ : col++; - } - if ( wrapper( Units ) ) - theLay->addWidget( wrapper( Units ), row, col ); -} - -/*! - Set the aligment of Label or Units. For Control nothing happens. -*/ -void QDS_Datum::setAlignment( const int align, const int type ) -{ - initDatum(); - - if ( ( type & Label ) && labelWidget() ) - labelWidget()->setAlignment( align ); - if ( ( type & Units ) && unitsWidget() ) - unitsWidget()->setAlignment( align ); -} - -/*! - Perform delayed initialisation. Reimplemented for internal reasons. -*/ -bool QDS_Datum::eventFilter( QObject* o, QEvent* e ) -{ - if ( o == parent() ) - { - if ( e->type() == QEvent::Show || e->type() == QEvent::ShowToParent || - ( e->type() == QEvent::ChildInserted && ((QChildEvent*)e)->child() == this ) ) - initDatum(); - } - return QObject::eventFilter( o, e ); -} - -/*! - Notify about parameter value changing. -*/ -void QDS_Datum::onParamChanged() -{ -} - -/*! - Perform delayed initialization. -*/ -void QDS_Datum::onInitDatum() -{ - initDatum(); -} - -/*! - Notify about subwidgets destroying. Allow to avoid repeated deleting in destructor. -*/ -void QDS_Datum::onDestroyed( QObject* obj ) -{ - myWrapper.remove( wrapperType( (Wrapper*)obj ) ); -} - -/*! - Returns QLabel widget which contains dictionary item label. -*/ -QLabel* QDS_Datum::labelWidget() const -{ - initDatum(); - return myLabel; -} - -/*! - Returns QLabel widget which contains dictionary item units. -*/ -QLabel* QDS_Datum::unitsWidget() const -{ - initDatum(); - return myUnits; -} - -/*! - Returns QWidget which contains user input data. -*/ -QWidget* QDS_Datum::controlWidget() const -{ - initDatum(); - return myControl; -} - -/*! - Returns the dictionary item from the datum. -*/ -Handle(DDS_DicItem) QDS_Datum::dicItem() const -{ - return myDicItem; -} - -/*! - Set the dictionary item in to the datum. -*/ -void QDS_Datum::setDicItem( const Handle(DDS_DicItem)& item ) -{ - myDicItem = item; -} - -/*! - Creates QLabel widget for dictionary item label. -*/ -QLabel* QDS_Datum::createLabel( QWidget* parent ) -{ - return new QLabel( parent ); -} - -/*! - Creates QLabel widget for dictionary item units. -*/ -QLabel* QDS_Datum::createUnits( QWidget* parent ) -{ - return new QLabel( parent ); -} - -/*! - Creates and returns validator accordance to datum type of value. -*/ -QValidator* QDS_Datum::validator( const bool limits ) const -{ - QValidator* aValidator = 0; - - QString fltr = filter(); - - if ( type() == DDS_DicItem::String ) - { - QString aFlags; - QString aFormat = canonicalFormat( format(), aFlags ); - - int len = -1; - int pos = aFormat.find( "." ); - if ( pos != -1 ) - { - QString numStr = aFormat.mid( pos + 1, aFormat.length() - pos - 2 ); - bool ok; - int numVal = numStr.toInt( &ok ); - if ( ok ) - len = numVal; - } - - QDS_StringValidator* aStrVal = new QDS_StringValidator( fltr, aFlags, (QObject*)this ); - aStrVal->setLength( len ); - - aValidator = aStrVal; - } - else if ( type() == DDS_DicItem::Integer ) - { - QDS_IntegerValidator* aIntVal = new QDS_IntegerValidator( fltr, (QObject*)this ); - - bool ok; - int limit; - limit = minValue().toInt( &ok ); - if ( ok && limits ) - aIntVal->setBottom( limit ); - limit = maxValue().toInt( &ok ); - if ( ok && limits ) - aIntVal->setTop( limit ); - - aValidator = aIntVal; - } - else if ( type() == DDS_DicItem::Float ) - { - QDS_DoubleValidator* aFloatVal = new QDS_DoubleValidator( fltr, (QObject*)this ); - - bool ok; - double limit; - limit = minValue().toDouble( &ok ); - if ( ok && limits ) - aFloatVal->setBottom( limit ); - limit = maxValue().toDouble( &ok ); - if ( ok && limits ) - aFloatVal->setTop( limit ); - - aValidator = aFloatVal; - } - - return aValidator; -} - -/*! - Checks the given string are valid or not. -*/ -bool QDS_Datum::validate( const QString& txt ) const -{ - if ( type() == DDS_DicItem::Unknown || - type() == DDS_DicItem::String && isDoubleFormat( format() ) ) - return true; - - QValidator* aValidator = validator( true ); - - if ( !aValidator ) - return true; - - int pos = 0; - QString str( txt ); - bool res = aValidator->validate( str, pos ) == QValidator::Acceptable; - - delete aValidator; - - return res; -} - -/*! - 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. -*/ -void QDS_Datum::initialize() -{ - if ( wrapper( Label ) ) - wrapper( Label )->setWidget( myLabel = createLabel( wrapper( Label ) ) ); - if ( wrapper( Control ) ) - wrapper( Control )->setWidget( myControl = createControl( wrapper( Control ) ) ); - if ( wrapper( Units ) ) - wrapper( Units )->setWidget( myUnits = createUnits( wrapper( Units ) ) ); - - TCollection_AsciiString comp; - Handle(DDS_DicItem) item = dicItem(); - if ( !item.IsNull() ) - comp = item->GetComponent(); - - QString unitSystem; - Handle(DDS_Dictionary) dic = DDS_Dictionary::Get(); - if ( !dic.IsNull() ) - unitSystem = toQString( comp.IsEmpty() ? dic->GetActiveUnitSystem() : - dic->GetActiveUnitSystem( comp ) ); - - unitSystemChanged( unitSystem ); - - QWidget* ctrl = controlWidget(); - if ( ctrl ) - { - QString lDescr = longDescription(); - QString sDescr = shortDescription(); - if ( !sDescr.isEmpty() ) - QToolTip::add( ctrl, sDescr ); - if ( !lDescr.isEmpty() ) - QWhatsThis::add( ctrl, lDescr ); - } - - if ( labelWidget() && ctrl && !( flags() & NotAccel ) ) - labelWidget()->setBuddy( ctrl ); -} - -/*! - Notification about active unit system changing. Update label and units texts. -*/ -void QDS_Datum::unitSystemChanged( const QString& unitSystem ) -{ - QString labText = label(); - QString unitText = unitsToText( units() ); - - if ( flags() & UnitsWithLabel ) - { - if ( labText.isEmpty() ) - labText = unitText; - else if ( !unitText.isEmpty() ) - labText = QString( "%1 (%2)" ).arg( labText ).arg( unitText ); - unitText = QString::null; - } - - if ( labelWidget() ) - labelWidget()->setText( labText ); - - if ( unitsWidget() ) - unitsWidget()->setText( unitText ); - - reset(); -} - -/*! - Covert units into text presentation. -*/ -QString QDS_Datum::unitsToText( const QString& uni ) -{ - int pos = -1; - QString aUnits = uni; - while ( ( pos = aUnits.find( "**" ) ) != -1 ) - { - aUnits = aUnits.mid( 0, pos ) + QString( "" ) + - aUnits.mid( pos + 2, 1 ) + QString( "" ) + - aUnits.mid( pos + 3 ); - } - return aUnits; -} - -/*! - Covert text presentation into internal units format. -*/ -QString QDS_Datum::textToUnits( const QString& txt ) -{ - int pos = -1; - QString aUnits = txt; - while ( ( pos = aUnits.find( "" ) ) != -1 ) - { - aUnits.remove( pos, 5 ); - aUnits.insert( pos, "**" ); - } - while ( ( pos = aUnits.find( "" ) ) != -1 ) - aUnits.remove( pos, 6 ); - return aUnits; -} - -/*! - Format the specified integer as dictionary item value. -*/ -QString QDS_Datum::format( const int num, const QString& id, const bool convert ) -{ - Handle(DDS_DicItem) anItem; - int aNum = num; - QString anUnit; - - QString aFormat; - int aType = DDS_DicItem::Unknown; - Handle(DDS_Dictionary) aDict = DDS_Dictionary::Get(); - if ( !aDict.IsNull() ) - { - anItem = aDict->GetDicItem( toAsciiString( id ) ); - if ( !anItem.IsNull() ) - { - aType = anItem->GetType(); - aFormat = toQString( anItem->GetFormat( false ) ); - if ( convert ) - aNum = ( int )anItem->FromSI( aNum ); - } - } - - return format( aFormat, aType, aNum ); -} - -/*! - Format the specified double as dictionary item value. -*/ -QString QDS_Datum::format( const double num, const QString& id, const bool convert ) -{ - Handle(DDS_DicItem) anItem; - double aNum = num; - QString anUnit; - - QString aFormat; - int aType = DDS_DicItem::Unknown; - Handle(DDS_Dictionary) aDict = DDS_Dictionary::Get(); - if ( !aDict.IsNull() ) - { - anItem = aDict->GetDicItem( toAsciiString( id ) ); - if ( !anItem.IsNull() ) - { - aType = anItem->GetType(); - aFormat = toQString( anItem->GetFormat( false ) ); - if ( convert ) - aNum = anItem->FromSI( aNum ); - } - } - - return format( aFormat, aType, aNum ); -} - -/*! - Format the specified string as dictionary item value. -*/ -QString QDS_Datum::format( const QString& str, const QString& id, const bool convert ) -{ - Handle(DDS_DicItem) anItem; - QString aStr = str; - QString anUnit; - - QString aFormat; - int aType = DDS_DicItem::Unknown; - Handle(DDS_Dictionary) aDict = DDS_Dictionary::Get(); - if ( !aDict.IsNull() ) - { - anItem = aDict->GetDicItem( toAsciiString( id ) ); - if ( !anItem.IsNull() ) - { - aType = anItem->GetType(); - aFormat = toQString( anItem->GetFormat( false ) ); - if ( convert ) - aStr = QString::number( anItem->FromSI( aStr.toDouble() ), 'f', 16 ); - } - } - - return format( aFormat, aType, aStr ); -} - -/*! - Format the given string accordance to dictionary item format. -*/ -QString QDS_Datum::format( const QString& aFormat, const int aType, const int aValue ) -{ - QString txt; - - if ( !aFormat.isEmpty() ) - { - switch ( aType ) - { - case DDS_DicItem::Float: - txt = sprintf( aFormat, (double)aValue ); - txt = txt.stripWhiteSpace(); - break; - case DDS_DicItem::Integer: - txt = sprintf( aFormat, aValue ); - txt = txt.stripWhiteSpace(); - break; - case DDS_DicItem::String: - default: - txt = sprintf( aFormat, aValue ); - break; - } - } - else - txt = QString().setNum( aValue ); - - return txt; -} - -/*! - Format the given string accordance to dictionary item format. -*/ -QString QDS_Datum::format( const QString& aFormat, const int aType, const double aValue ) -{ - QString txt; - - if ( !aFormat.isEmpty() ) - { - switch ( aType ) - { - case DDS_DicItem::Float: - txt = QString().sprintf( aFormat, aValue ); - txt = txt.stripWhiteSpace(); - break; - case DDS_DicItem::Integer: - txt = QString().sprintf( aFormat, (int)aValue ); - txt = txt.stripWhiteSpace(); - break; - case DDS_DicItem::String: - default: - txt = QString().sprintf( aFormat, aValue ); - break; - } - } - else - txt = QString().setNum( aValue, 'g', 16 ); - - return txt; -} - -/*! - Format the given string accordance to dictionary item format. -*/ -QString QDS_Datum::format( const QString& aFormat, const int aType, const QString& aValue ) -{ - QString txt = aValue; - - if ( aType != DDS_DicItem::String ) - txt = txt.stripWhiteSpace(); - - if ( aFormat.isEmpty() || txt.isEmpty() ) - return txt; - - switch ( aType ) - { - case DDS_DicItem::Float: - txt = txt.replace( 'd', 'e' ).replace( 'D', 'E' ); - txt = sprintf( aFormat, txt.toDouble() ); - txt = txt.stripWhiteSpace(); - break; - case DDS_DicItem::Integer: - txt = sprintf( aFormat, txt.toInt() ); - txt = txt.stripWhiteSpace(); - break; - case DDS_DicItem::String: - txt = sprintf( aFormat, txt ); - break; - } - - return txt; -} - -/*! - Wrapper around the standard sprintf function. - Process some non standard flags from format string. -*/ -QString QDS_Datum::sprintf( const QString& fmt, const int val ) -{ - return QString().sprintf( canonicalFormat( fmt ), val ); -} - -/*! - Wrapper around the standard sprintf function. - Process some non standard flags from format string. -*/ -QString QDS_Datum::sprintf( const QString& fmt, const double val ) -{ - return QString().sprintf( canonicalFormat( fmt ), val ); -} - -/*! - Wrapper around the standard sprintf function. - Process some non standard flags from format string. -*/ -QString QDS_Datum::sprintf( const QString& fmt, const QString& val ) -{ - QString aFlags; - QString aFormat = canonicalFormat( fmt, aFlags ); - - QString txt = val; - - QRegExp rx( "^(%[0-9]*.?[0-9]*s)$" ); - if ( aFormat.find( rx ) != -1 ) - { - // QString().sprintf() always expects string in UTF8 encoding, so we cannot use it here - char* buf = new char[txt.length() + 1]; - ::sprintf( buf, aFormat.latin1(), (const char*)(txt.local8Bit()) ); - txt = QString::fromLocal8Bit( buf ); - - delete[] buf; - } - - if ( isDoubleFormat( aFormat ) ) - { - /*bool isOk; - double aVal = txt.toDouble( &isOk ); - if ( isOk ) - { - txt = sprintf( aFormat, aVal ); - txt = txt.replace( 'e', 'D' ); - }*/ - } - - if ( aFlags.contains( "u", false ) ) - txt = txt.upper(); - if ( aFlags.contains( "l", false ) ) - txt = txt.lower(); - - return txt; -} - -/*! - Returns the canonical sprintf format. -*/ -QString QDS_Datum::canonicalFormat( const QString& fmt ) -{ - QString flags; - return canonicalFormat( fmt, flags ); -} - -/*! - Returns the canonical sprintf format and non standard flags. -*/ -QString QDS_Datum::canonicalFormat( const QString& fmt, QString& flags ) -{ - QString newFmt = fmt; - flags = QString::null; - - QRegExp rx( "^(%[0-9]*.?[0-9]*)([a-z,A-Z]+)[g|c|d|i|o|u|x|e|f|n|p|s|X|E|G]$" ); - if ( rx.search( newFmt ) >= 0 ) - { - flags = rx.cap( 2 ); - newFmt.remove( rx.pos( 2 ), flags.length() ); - } - return newFmt; -} - -/*! - Returns displayable units string for given dictionary item id -*/ -QString QDS_Datum::units( const QString& id ) -{ - QString anUnit; - Handle(DDS_DicItem) anItem; - - Handle(DDS_Dictionary) aDict = DDS_Dictionary::Get(); - if ( !aDict.IsNull() ) - { - anItem = aDict->GetDicItem( toAsciiString( id ) ); - if ( !anItem.IsNull() ) - anUnit = unitsToText( toQString( anItem->GetUnits() ) ); - } - return anUnit; -} - -/*! - Get prefix string from format. -*/ -QString QDS_Datum::prefix() const -{ - return QString::null; -} - -/*! - Get suffix string from format. -*/ -QString QDS_Datum::suffix() const -{ - return QString::null; -} - -/*! - Get min value. -*/ -QString QDS_Datum::minValue() const -{ - QString pref = prefix(); - QString suff = suffix(); - - QString aMin = minimumValue().stripWhiteSpace(); - - if ( !pref.isEmpty() && aMin.left( pref.length() ) == pref ) - aMin = aMin.mid( pref.length() ); - - if ( !suff.isEmpty() && aMin.right( suff.length() ) == suff ) - aMin = aMin.mid( 0, aMin.length() - suff.length() ); - - return aMin; -} - -/*! - Get max value. -*/ -QString QDS_Datum::maxValue() const -{ - QString pref = prefix(); - QString suff = suffix(); - - QString aMax = maximumValue().stripWhiteSpace(); - - if ( !pref.isEmpty() && aMax.left( pref.length() ) == pref ) - aMax = aMax.mid( pref.length() ); - - if ( !suff.isEmpty() && aMax.right( suff.length() ) == suff ) - aMax = aMax.mid( 0, aMax.length() - suff.length() ); - - return aMax; -} - -/*! - Reset the numeric value cache. -*/ -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; - - for ( uint i = 0; i < trg.length(); ) - { - if ( trg.mid( i, 2 ) == QString( "&&" ) ) - i += 2; - else if ( trg.at( i ) == '&' ) - trg.remove( i, 1 ); - else - i++; - } - 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 ) - { - QChar c = theFormat[ (int)( theFormat.length() - 1 ) ]; - return c == 'f' || c == 'g' || c == 'e' || c == 'G' || c == 'E'; - } - else - 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 ) - return; - - QDS_Datum* that = (QDS_Datum*)this; - that->myInitialised = true; - that->initialize(); - - if ( parent() ) - parent()->removeEventFilter( this ); -} - -/*! - Return wrapper for specified subwidget. [internal] -*/ -QDS_Datum::Wrapper* QDS_Datum::wrapper( QWidget* wid ) const -{ - if ( !wid ) - return 0; - - Wrapper* wrap = 0; - for ( QMap::ConstIterator it = myWrapper.begin(); it != myWrapper.end() && !wrap; ++it ) - { - if ( it.data() && it.data()->widget() == wid ) - wrap = it.data(); - } - return wrap; -} - -/*! - Return wrapper for specified subwidget name. [internal] -*/ -QDS_Datum::Wrapper* QDS_Datum::wrapper( const int id ) const -{ - Wrapper* wrap = 0; - if ( myWrapper.contains( id ) ) - wrap = myWrapper[id]; - return wrap; -} - -/*! - Return subwidget name for specified wrapper. [internal] -*/ -int QDS_Datum::wrapperType( QDS_Datum::Wrapper* wrap ) const -{ - int id = -1; - for ( QMap::ConstIterator it = myWrapper.begin(); it != myWrapper.end() && id == -1; ++it ) - { - if ( it.data() == wrap ) - id = it.key(); - } - return id; -} diff --git a/src/QDS/QDS_Datum.h b/src/QDS/QDS_Datum.h deleted file mode 100644 index 9ff431f66..000000000 --- a/src/QDS/QDS_Datum.h +++ /dev/null @@ -1,207 +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 -// -#ifndef QDS_DATUM_H -#define QDS_DATUM_H - -#include "QDS.h" - -#include -#include -#include -#include - -#include - -class QLabel; -class QWidget; -class QValidator; -class QVBoxLayout; -class QHBoxLayout; -class QGridLayout; - -class Handle(DDS_Dictionary); - -class QDS_EXPORT QDS_Datum : public QObject, public QDS -{ - Q_OBJECT - - class Wrapper; - -public: - QDS_Datum( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); - virtual ~QDS_Datum(); - - QString id() const; - int type() const; - QString label() const; - QString units() const; - QString filter() const; - QString format() const; - QString longDescription() const; - QString shortDescription() const; - - QString defaultValue() const; - 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; - virtual double doubleValue() const; - virtual int integerValue() const; - - QString text() const; - - virtual bool isEmpty() const; - - virtual void reset(); - virtual void clear(); - - virtual void setValue( const QVariant& ); - - virtual void setStringValue( const QString& ); - virtual void setDoubleValue( const double ); - virtual void setIntegerValue( const int ); - - virtual bool isEnabled( const int = Control ) const; - virtual void setEnabled( const bool, const int ); - - 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(); - - virtual bool isValid( const bool = true, - const QString& = QString::null, - const QString& = QString::null ) const; - virtual QValidator* validator( const bool = false ) const; - - void addTo( QVBoxLayout* ); - void addTo( QHBoxLayout* ); - void addTo( QGridLayout*, const int, const int, const bool = false ); - - virtual void setAlignment( const int, const int = Label ); - - static QString unitsToText( const QString& ); - static QString textToUnits( const QString& ); - - static QString format( const QString&, const QString&, const bool = false ); - static QString format( const int, const QString&, const bool = false ); - static QString format( const double, const QString&, const bool = false ); - static QString units( const QString& ); - - virtual bool eventFilter( QObject*, QEvent* ); - - operator QWidget*() const; - -signals: - void paramChanged(); - void paramChanged( QString& ); - -public slots: - void setEnabled( bool ); - -protected slots: - virtual void onParamChanged(); - -private slots: - void onInitDatum(); - void onDestroyed( QObject* ); - -protected: - QLabel* labelWidget() const; - QLabel* unitsWidget() const; - QWidget* controlWidget() const; - - Handle(DDS_DicItem) dicItem() const; - void setDicItem( const Handle(DDS_DicItem)& ); - - int flags() const; - - void invalidateCache(); - - virtual QLabel* createLabel( QWidget* ); - virtual QLabel* createUnits( QWidget* ); - virtual QWidget* createControl( QWidget* ) = 0; - - virtual QString getString() const = 0; - virtual void setString( const QString& ) = 0; - - virtual bool validate( const QString& ) const; - - QString prefix() const; - QString suffix() const; - virtual QString minValue() const; - virtual QString maxValue() const; - - static QString format( const QString&, const int, const int ); - static QString format( const QString&, const int, const double ); - static QString format( const QString&, const int, const QString& ); - - static QString sprintf( const QString&, const int ); - static QString sprintf( const QString&, const double ); - static QString sprintf( const QString&, const QString& ); - - virtual void unitSystemChanged( const QString& ); - - void initDatum() const; - -private: - void initialize(); - - Wrapper* wrapper( QWidget* ) const; - Wrapper* wrapper( const int ) const; - int wrapperType( Wrapper* ) const; - - static QString removeAccel( const QString& ); - static bool isDoubleFormat( const QString& ); - static QString canonicalFormat( const QString& ); - static QString canonicalFormat( const QString&, QString& ); - -private: - typedef QGuardedPtr GuardedLabel; - typedef QGuardedPtr GuardedWidget; - -private: - QString myId; - int myFlags; - Handle(DDS_DicItem) myDicItem; - QMap myWrapper; - - GuardedLabel myLabel; - GuardedLabel myUnits; - GuardedWidget myControl; - - QString mySourceValue; - QString myTargetValue; - - bool myInitialised; - - friend class QDS; -}; - -#endif diff --git a/src/QDS/QDS_LineEdit.cxx b/src/QDS/QDS_LineEdit.cxx deleted file mode 100644 index cb5ddf148..000000000 --- a/src/QDS/QDS_LineEdit.cxx +++ /dev/null @@ -1,237 +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 -// -#include "QDS_LineEdit.h" - -#include -#include - -/* - class: QDS_LineEdit::Editor - descr: Internal class inherited from line edit -*/ - -class QDS_LineEdit::Editor : public QLineEdit -{ -public: - Editor( QWidget* parent = 0 ) : QLineEdit( parent ), myNumber( 2 ) {}; - virtual ~Editor() {}; - - void setNumber( const int num ) { myNumber = num; }; - - virtual QSize minimumSizeHint() const - { - return QLineEdit::minimumSizeHint(). - expandedTo( QSize( fontMetrics().width( "0" ) * myNumber, 0 ) ); - } - - virtual QSize sizeHint() const - { - return minimumSizeHint(); - } - -private: - int myNumber; -}; - -/* - \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. 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 ) -{ -} - -/*! - Destructor. -*/ -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 ); - - QLineEdit* le = lineEdit(); - if ( !le ) - return; - - delete le->validator(); - le->clearValidator(); - QValidator* valid = validator(); - if ( valid ) - le->setValidator( valid ); - - QString aFormat = format(); - int num = 0; - int pos = aFormat.find( '%' ); - if ( pos != -1 ) - { - pos++; - QString aLen; - while ( pos < (int)aFormat.length() && aFormat.at( pos ).isDigit() ) - aLen += aFormat.at( pos++ ); - if ( pos < (int)aFormat.length() && aFormat.at( pos ) == '.' ) - num += 1; - if ( !aLen.isEmpty() ) - num += aLen.toInt(); - } - - int zeroLen = format( format(), type(), 0 ).length(); - int minLen = format( format(), type(), minValue() ).length(); - int maxLen = format( format(), type(), maxValue() ).length(); - - num = QMAX( QMAX( num, zeroLen ), QMAX( minLen, maxLen ) ); - ((Editor*)le)->setNumber( num ); -} - -/*! - 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 ) -{ - if ( ( type & Control ) && lineEdit() ) - lineEdit()->setAlignment( align ); - - QDS_Datum::setAlignment( align, type ); -} - -/*! - Returns string value from QLineEdit widget. Reimplemented from QDS_Datum. -*/ -QString QDS_LineEdit::getString() const -{ - QString res; - if ( lineEdit() ) - res = lineEdit()->text(); - return res; -} - -/*! - Sets the string value into QLineEdit widget. Reimplemented from QDS_Datum. -*/ -void QDS_LineEdit::setString( const QString& txt ) -{ - if ( lineEdit() ) - lineEdit()->setText( txt ); -} - -/*! - Returns pointer to QLineEdit widget. -*/ -QLineEdit* QDS_LineEdit::lineEdit() const -{ - return ::qt_cast( controlWidget() ); -} - -/*! - Create QLineEdit widget as control subwidget. Reimplemented from QDS_Datum. -*/ -QWidget* QDS_LineEdit::createControl( QWidget* parent ) -{ - Editor* le = new Editor( parent ); - connect( le, SIGNAL( returnPressed() ), this, SIGNAL( returnPressed() ) ); - connect( le, SIGNAL( textChanged( const QString& ) ), this, SLOT( onTextChanged( const QString& ) ) ); - return le; -} - -/*! - Notify about text changing in line edit. -*/ -void QDS_LineEdit::onTextChanged( const QString& ) -{ - invalidateCache(); - - onParamChanged(); - QString str = getString(); - emit paramChanged(); - emit paramChanged( str ); -} - -/*! - Checks the current parameter value on validity. If value is not valid then set text color as red. -*/ -void QDS_LineEdit::onParamChanged() -{ - QLineEdit* anEdit = lineEdit(); - if ( !anEdit ) - return; - - bool aValid = isValid( false ); - - QPalette aPal = anEdit->palette(); - if ( !aValid ) - aPal.setColor( QPalette::Active, QColorGroup::Text, QColor( 255, 0, 0 ) ); - else - aPal.setColor( QPalette::Active, QColorGroup::Text, QColor( 0, 0, 0 ) ); - - anEdit->setPalette( aPal ); -} diff --git a/src/QDS/QDS_LineEdit.h b/src/QDS/QDS_LineEdit.h deleted file mode 100644 index 293e57eed..000000000 --- a/src/QDS/QDS_LineEdit.h +++ /dev/null @@ -1,65 +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 -// -#ifndef QDS_LINEEDIT_H -#define QDS_LINEEDIT_H - -#include "QDS_Datum.h" - -class QLineEdit; - -class QDS_EXPORT QDS_LineEdit : public QDS_Datum -{ - Q_OBJECT - - Q_PROPERTY( bool Selection READ hasSelection WRITE setSelection ) - -protected: - class Editor; - -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(); - -protected slots: - virtual void onParamChanged(); - -private slots: - void onTextChanged( const QString& ); - -protected: - virtual QWidget* createControl( QWidget* ); - QLineEdit* lineEdit() const; - - virtual QString getString() const; - virtual void setString( const QString& ); - - virtual void unitSystemChanged( const QString& ); -}; - -#endif diff --git a/src/QDS/QDS_RadioBox.cxx b/src/QDS/QDS_RadioBox.cxx deleted file mode 100644 index 44771f0fc..000000000 --- a/src/QDS/QDS_RadioBox.cxx +++ /dev/null @@ -1,425 +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 -// -#include "QDS_RadioBox.h" - -#include - -#include -#include -#include - -#include -#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. 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 ) -{ -} - -/*! - Destructor. -*/ -QDS_RadioBox::~QDS_RadioBox() -{ -} - -/*! - 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 -{ - if ( total ) - return myValue.count(); - else - { - QPtrList bList; - buttons( bList ); - return bList.count(); - } -} - -/*! - 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 -{ - ids.clear(); - for ( QIntList::const_iterator it = myDataIds.begin(); it != myDataIds.end(); ++it ) - if ( total || ( myState.contains( *it ) && myState[*it] ) ) - ids.append( *it ); -} - -/*! - Returns visible state of button specified by \aid. -*/ -bool QDS_RadioBox::state( const int id ) const -{ - bool state = false; - if ( myState.contains( id ) ) - state = myState[id]; - return state; -} - -/*! - 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 ) -{ - QValueList lst; - if ( id < 0 ) - { - for ( IdStateMap::Iterator it = myState.begin(); it != myState.end(); ++it ) - lst.append( it.key() ); - } - else - lst.append( id ); - - setState( on, lst, append ); -} - -/*! - 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 ) -{ - if ( ids.isEmpty() && append ) - return; - - bool changed = false; - - QMap aMap; - for ( uint i = 0; i < ids.count(); i++ ) - aMap.insert( *ids.at( i ), 0 ); - - for ( IdStateMap::Iterator it = myState.begin(); it != myState.end(); ++it ) - { - if ( aMap.contains( it.key() ) ) - { - if ( it.data() != on ) - { - it.data() = on; - changed = true; - } - } - else if ( !append && it.data() == on ) - { - it.data() = !on; - changed = true; - } - } - if ( changed ) - updateRadioBox(); -} - -/*! - 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 ) -{ - if ( ids.count() != names.count() ) - return; - - myUserIds = ids; - myUserNames = names; -} - -/*! - 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 -*/ -void QDS_RadioBox::setValues( const QStringList& names ) -{ - QValueList< int > ids; - for ( int i = 0, n = names.count(); i < n; i++ ) - ids.append( i ); - setValues( ids, names ); -} - -/*! - Returns string from radio box. Reimplemented. String which contains identifier of - currently selected button returned. -*/ -QString QDS_RadioBox::getString() const -{ - QString res; - QButtonGroup* bg = buttonGroup(); - if ( bg ) - { - int id = bg->selectedId(); - if ( id != -1 ) - res = QString::number( id ); - } - return res; -} - -/*! - 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 ) -{ - QButtonGroup* bg = buttonGroup(); - if ( !bg ) - return; - - int oldId = bg->selectedId(); - - if ( txt.isEmpty() ) - { - QPtrList bList; - buttons( bList ); - for ( QPtrListIterator it( bList ); it.current(); ++it ) - it.current()->setChecked( false ); - } - else - { - bool ok; - int id = txt.toInt( &ok ); - if ( !ok ) - id = -1; - - bool block = signalsBlocked(); - blockSignals( true ); - bg->setButton( id ); - blockSignals( block ); - } - - int newId = bg->selectedId(); - - if ( oldId != newId ) - { - onParamChanged(); - QString str = getString(); - emit activated( newId ); - emit paramChanged(); - emit paramChanged( str ); - } -} - -/*! - Returns pointer to QButtonGroup widget. -*/ -QButtonGroup* QDS_RadioBox::buttonGroup() const -{ - return ::qt_cast( controlWidget() ); -} - -/*! - Create QButtonGroup widget as control subwidget. -*/ -QWidget* QDS_RadioBox::createControl( QWidget* parent ) -{ - QButtonGroup* bg = new QButtonGroup( 1, Qt::Vertical, "", parent ); - bg->setExclusive( true ); - bg->setRadioButtonExclusive( true ); - 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 ); - - Handle(TColStd_HArray1OfInteger) anIds; - Handle(TColStd_HArray1OfExtendedString) aValues, anIcons; - - Handle(DDS_DicItem) aDicItem = dicItem(); - if ( !aDicItem.IsNull() ) - aDicItem->GetListOfValues( aValues, anIds, anIcons ); - - myValue.clear(); - myDataIds.clear(); - - QMap userMap; - QIntList::iterator iIt = myUserIds.begin(); - QStringList::iterator sIt = myUserNames.begin(); - for ( ; iIt != myUserIds.end() && sIt != myUserNames.end(); ++iIt, ++sIt ) - userMap.insert( *iIt, *sIt ); - - if ( !anIds.IsNull() && !aValues.IsNull() && - anIds->Length() == aValues->Length() ) - { - for ( int i = anIds->Lower(); i <= anIds->Upper(); i++ ) - { - QString aValue; - int id = anIds->Value( i ); - if ( userMap.contains( id ) ) - aValue = userMap[id]; - else - aValue = toQString( aValues->Value( i ) ); - - myDataIds.append( id ); - myValue.insert( id, aValue ); - myState.insert( id, true ); - } - } - - for ( iIt = myUserIds.begin(); iIt != myUserIds.end(); ++iIt ) - { - int id = *iIt; - if ( !myValue.contains( id ) ) - { - myDataIds.append( id ); - myValue.insert( id, userMap[id] ); - } - } - - QIntList del, add; - for ( IdStateMap::Iterator it1 = myState.begin(); it1 != myState.end(); ++it1 ) - if ( !myValue.contains( it1.key() ) ) - del.append( it1.key() ); - - for ( IdValueMap::Iterator it2 = myValue.begin(); it2 != myValue.end(); ++it2 ) - if ( !myState.contains( it2.key() ) ) - add.append( it2.key() ); - - for ( QIntList::iterator iter1 = del.begin(); iter1 != del.end(); ++iter1 ) - myState.remove( *iter1 ); - - for ( QIntList::iterator iter2 = add.begin(); iter2 != add.end(); ++iter2 ) - myState.insert( *iter2, true ); - - QButtonGroup* bg = buttonGroup(); - if ( bg ) - bg->setTitle( label() ); - - updateRadioBox(); -} - -/*! - Notify about activation radio button. -*/ -void QDS_RadioBox::onToggled( bool on ) -{ - if ( !on ) - return; - - onParamChanged(); - emit paramChanged(); - QString str = getString(); - emit paramChanged( str ); -} - -/*! - Updates RadioBox after have change of visible state or buttons have been inserted/removed. -*/ -void QDS_RadioBox::updateRadioBox() -{ - QButtonGroup* bg = buttonGroup(); - if ( !bg ) - return; - - int curId = bg->selectedId(); - - QPtrList bList; - buttons( bList ); - for ( QPtrListIterator itr( bList ); itr.current(); ++itr ) - delete itr.current(); - - for ( QIntList::const_iterator it = myDataIds.begin(); it != myDataIds.end(); ++it ) - { - int id = *it; - if ( !myValue.contains( id ) || !myState.contains( id ) || !myState[id] ) - continue; - - QRadioButton* rb = new QRadioButton( myValue[id], bg ); - bg->insert( rb, id ); - - connect( rb, SIGNAL( toggled( bool ) ), this, SLOT( onToggled( bool ) ) ); - } - - if ( curId != -1 ) - { - int id = curId; - if ( !bg->find( id ) ) - { - QPtrList bList; - buttons( bList ); - if ( !bList.isEmpty() ) - id = bg->id( bList.getFirst() ); - } - - bool block = signalsBlocked(); - blockSignals( true ); - bg->setButton( id ); - blockSignals( block ); - } - - if ( curId != bg->selectedId() ) - { - onParamChanged(); - emit paramChanged(); - emit paramChanged( getString() ); - } -} - -/*! - Returns the list of the radio buttons from the button group. -*/ -void QDS_RadioBox::buttons( QPtrList& lst ) const -{ - lst.setAutoDelete( false ); - lst.clear(); - - QButtonGroup* bg = buttonGroup(); - if ( !bg ) - return; - - QObjectList* objs = bg->queryList( "QRadioButton" ); - if ( objs ) - { - for ( QObjectListIt it( *objs ); it.current(); ++it ) - { - QRadioButton* rb = ::qt_cast( it.current() ); - if ( rb ) - lst.append( rb ); - } - } - delete objs; -} diff --git a/src/QDS/QDS_RadioBox.h b/src/QDS/QDS_RadioBox.h deleted file mode 100644 index 862b6ab4f..000000000 --- a/src/QDS/QDS_RadioBox.h +++ /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 -// -#ifndef QDS_RADIOBOX_H -#define QDS_RADIOBOX_H - -#include "QDS_Datum.h" - -#include - -#include -#include -#include - -#ifdef WNT -#pragma warning( disable:4251 ) -#endif - -class QButtonGroup; -class QRadioButton; - -class QDS_EXPORT QDS_RadioBox : public QDS_Datum -{ - Q_OBJECT - -public: - QDS_RadioBox( const QString&, QWidget* = 0, const int = Control, const QString& = QString::null ); - virtual ~QDS_RadioBox(); - - int count( bool = false ) const; - void values( QValueList&, bool = false ) const; - - int columns() const; - void setColumns( const int ); - - bool state( const int ) const; - void setState( const bool, const int, const bool = true ); - void setState( const bool, const QValueList&, const bool = true ); - void setValues( const QValueList&, const QStringList& ); - void setValues( const QStringList& ); - -signals: - void activated( int ); - -protected slots: - virtual void onToggled( bool ); - -protected: - QButtonGroup* buttonGroup() const; - virtual QWidget* createControl( QWidget* ); - void buttons( QPtrList& ) const; - - virtual QString getString() const; - virtual void setString( const QString& ); - - virtual void unitSystemChanged( const QString& ); - -private: - void updateRadioBox(); - -private: - typedef QMap IdValueMap; - typedef QMap IdStateMap; - -private: - IdValueMap myValue; - IdStateMap myState; - - QIntList myDataIds; - QIntList myUserIds; - QStringList myUserNames; -}; - -#ifdef WNT -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/QDS/QDS_SpinBox.cxx b/src/QDS/QDS_SpinBox.cxx deleted file mode 100644 index 71864cb51..000000000 --- a/src/QDS/QDS_SpinBox.cxx +++ /dev/null @@ -1,151 +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 -// -#include "QDS_SpinBox.h" - -#include - -#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. 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 ) -{ -} - -/*! - Destructor. -*/ -QDS_SpinBox::~QDS_SpinBox() -{ -} - -/*! - Returns string from QSpinBox widget. Reimplemented. -*/ -QString QDS_SpinBox::getString() const -{ - QString res; - QtxIntSpinBox* aSpinBox = spinBox(); - if ( aSpinBox && !aSpinBox->isCleared() ) - { - res = aSpinBox->text(); - if ( !aSpinBox->suffix().isEmpty() ) - res.remove( res.find( aSpinBox->suffix() ), aSpinBox->suffix().length() ); - if ( !aSpinBox->prefix().isEmpty() ) - res.remove( res.find( aSpinBox->prefix() ), aSpinBox->prefix().length() ); - } - return res; -} - -/*! - Sets the string into QSpinBox widget. Reimplemented. -*/ -void QDS_SpinBox::setString( const QString& txt ) -{ - if ( !spinBox() ) - return; - - spinBox()->setCleared( txt.isEmpty() ); - if ( !txt.isEmpty() ) - spinBox()->setValue( txt.toInt() ); -} - -/*! - Returns pointer to QSpinBox widget. -*/ -QtxIntSpinBox* QDS_SpinBox::spinBox() const -{ - return ::qt_cast( controlWidget() ); -} - -/*! - Create QSpinBox widget as control subwidget. Reimplemented. -*/ -QWidget* QDS_SpinBox::createControl( QWidget* parent ) -{ - QtxIntSpinBox* aSpinBox = new QtxIntSpinBox( parent ); - aSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - connect( aSpinBox, SIGNAL( valueChanged( int ) ), this, SLOT( onValueChanged( int ) ) ); - return aSpinBox; -} - -/*! - Notify about value changing in spin box. -*/ -void QDS_SpinBox::onValueChanged( int val ) -{ - onParamChanged(); - QString str = QString::number( val ); - emit paramChanged(); - emit paramChanged( str ); -} - -/*! - Sets the increment step. -*/ -void QDS_SpinBox::setStep( const int step ) -{ - if ( spinBox() ) - spinBox()->setLineStep( step ); -} - -/*! - Returns the increment step. -*/ -int QDS_SpinBox::step() const -{ - int s = 0; - if ( spinBox() ) - s = spinBox()->lineStep(); - return s; -} - -/*! - 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 ) -{ - QDS_Datum::unitSystemChanged( system ); - - QSpinBox* sb = spinBox(); - if ( sb ) - { - delete sb->validator(); - QValidator* valid = validator(); - sb->setValidator( valid ); - - sb->setSuffix( suffix() ); - sb->setPrefix( prefix() ); - sb->setMinValue( minValue().toInt() ); - sb->setMaxValue( maxValue().toInt() ); - } -} diff --git a/src/QDS/QDS_SpinBox.h b/src/QDS/QDS_SpinBox.h deleted file mode 100644 index f0456900e..000000000 --- a/src/QDS/QDS_SpinBox.h +++ /dev/null @@ -1,51 +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 -// -#ifndef QDS_SPINBOX_H -#define QDS_SPINBOX_H - -#include "QDS_Datum.h" - -class QtxIntSpinBox; - -class QDS_EXPORT QDS_SpinBox : public QDS_Datum -{ - Q_OBJECT - -public: - QDS_SpinBox( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); - virtual ~QDS_SpinBox(); - - int step() const; - void setStep( const int ); - -private slots: - void onValueChanged( int ); - -protected: - QtxIntSpinBox* spinBox() const; - - virtual QWidget* createControl( QWidget* ); - - virtual QString getString() const; - virtual void setString( const QString& ); - - virtual void unitSystemChanged( const QString& ); -}; - -#endif diff --git a/src/QDS/QDS_SpinBoxDbl.cxx b/src/QDS/QDS_SpinBoxDbl.cxx deleted file mode 100644 index 0bd7bcf26..000000000 --- a/src/QDS/QDS_SpinBoxDbl.cxx +++ /dev/null @@ -1,171 +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 -// -#include "QDS_SpinBoxDbl.h" - -#include - -#include - -#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. 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 ) -{ -} - -/*! - Destructor. -*/ -QDS_SpinBoxDbl::~QDS_SpinBoxDbl() -{ -} - -/*! - Returns string from QSpinBox widget. Reimplemented. -*/ -QString QDS_SpinBoxDbl::getString() const -{ - QString res; - QtxDblSpinBox* sb = spinBox(); - if ( sb && !sb->isCleared() ) - { - bool hasFocus = sb->hasFocus(); - if ( hasFocus ) - sb->clearFocus(); - - res = sb->text(); - if ( !sb->suffix().isEmpty() ) - res.remove( res.find( sb->suffix() ), sb->suffix().length() ); - if ( !sb->prefix().isEmpty() ) - res.remove( res.find( sb->prefix() ), sb->prefix().length() ); - - if ( hasFocus ) - sb->setFocus(); - } - - return res; -} - -/*! - Sets the string into QSpinBox widget. Reimplemented. -*/ -void QDS_SpinBoxDbl::setString( const QString& txt ) -{ - if ( !spinBox() ) - return; - - spinBox()->setCleared( txt.isEmpty() ); - if ( !txt.isEmpty() ) - spinBox()->setValue( txt.toDouble() ); -} - -/*! - Returns pointer to QtxDblSpinBox widget. -*/ -QtxDblSpinBox* QDS_SpinBoxDbl::spinBox() const -{ - return ::qt_cast( controlWidget() ); -} - -/*! - Create QSpinBox widget as control subwidget. Reimplemented. -*/ -QWidget* QDS_SpinBoxDbl::createControl( QWidget* parent ) -{ - QtxDblSpinBox* aSpinBox = new QtxDblSpinBox( parent ); - aSpinBox->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - connect( aSpinBox, SIGNAL( valueChanged( double ) ), this, SLOT( onValueChanged( double ) ) ); - return aSpinBox; -} - -/*! - Notify about value changing in spin box. -*/ -void QDS_SpinBoxDbl::onValueChanged( double ) -{ - onParamChanged(); - QString str = getString(); - - emit paramChanged(); - emit paramChanged( str ); -} - -/*! - Returns the increment step. -*/ -double QDS_SpinBoxDbl::step() const -{ - double s = 0; - if ( spinBox() ) - s = spinBox()->lineStep(); - return s; -} - -/*! - Sets the increment step. -*/ -void QDS_SpinBoxDbl::setStep( const double step ) -{ - if ( spinBox() ) - 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 ); - - QtxDblSpinBox* sb = spinBox(); - if ( !sb ) - return; - - delete sb->validator(); - QValidator* valid = validator(); - sb->setValidator( valid ); - - sb->setSuffix( suffix() ); - sb->setPrefix( prefix() ); - - Standard_Integer aPreci = 1; - Handle(DDS_DicItem) aDicItem = dicItem(); - if ( !aDicItem.IsNull() ) - aPreci = aDicItem->GetPrecision(); - - sb->setPrecision( aPreci ); - - sb->setLineStep( .1 ); - sb->setMinValue( minValue().isEmpty() ? -DBL_MAX : minValue().toDouble() ); - sb->setMaxValue( maxValue().isEmpty() ? DBL_MAX : maxValue().toDouble() ); -} diff --git a/src/QDS/QDS_SpinBoxDbl.h b/src/QDS/QDS_SpinBoxDbl.h deleted file mode 100644 index 362f75c7c..000000000 --- a/src/QDS/QDS_SpinBoxDbl.h +++ /dev/null @@ -1,50 +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 -// -#ifndef QDS_PINBOXDBL_H -#define QDS_PINBOXDBL_H - -#include "QDS_Datum.h" - -class QtxDblSpinBox; - -class QDS_EXPORT QDS_SpinBoxDbl : public QDS_Datum -{ - Q_OBJECT - -public: - QDS_SpinBoxDbl( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); - virtual ~QDS_SpinBoxDbl(); - - double step() const; - void setStep( const double ); - -private slots: - void onValueChanged( double ); - -protected: - QtxDblSpinBox* spinBox() const; - virtual QWidget* createControl( QWidget* ); - - virtual QString getString() const; - virtual void setString( const QString& ); - - virtual void unitSystemChanged( const QString& ); -}; - -#endif diff --git a/src/QDS/QDS_Table.cxx b/src/QDS/QDS_Table.cxx deleted file mode 100644 index b14e80c8f..000000000 --- a/src/QDS/QDS_Table.cxx +++ /dev/null @@ -1,348 +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 -// - -#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 deleted file mode 100644 index c7d33abf9..000000000 --- a/src/QDS/QDS_Table.h +++ /dev/null @@ -1,99 +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 -// -#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 deleted file mode 100644 index 1eb66dad9..000000000 --- a/src/QDS/QDS_TextEdit.cxx +++ /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 -// -#include "QDS_TextEdit.h" - -#include - -/* - \class QDS_TextEdit - - Datum with control corresponding to text edit. User can enter parameter value in multiple line editor. -*/ - -/*! - 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 ) -{ -} - -/*! - Destructor. -*/ -QDS_TextEdit::~QDS_TextEdit() -{ -} - -/*! - Returns string from QTextEdit widget. Reimplemented from QDS_Datum. -*/ -QString QDS_TextEdit::getString() const -{ - QString res; - if ( textEdit() ) - res = textEdit()->text(); - return res; -} - -/*! - Sets the string into QTextEdit widget. Reimplemented from QDS_Datum. -*/ -void QDS_TextEdit::setString( const QString& txt ) -{ - if ( textEdit() ) - textEdit()->setText( txt ); -} - -/*! - Returns pointer to QTextEdit widget. -*/ -QTextEdit* QDS_TextEdit::textEdit() const -{ - return ::qt_cast( controlWidget() ); -} - -/*! - Create QTextEdit widget as control subwidget. -*/ -QWidget* QDS_TextEdit::createControl( QWidget* parent ) -{ - QTextEdit* te = new QTextEdit( parent ); - connect( te, SIGNAL( textChanged() ), this, SLOT( onTextChanged() ) ); - return te; -} - -/*! - Notify about text changing in text edit. -*/ -void QDS_TextEdit::onTextChanged() -{ - invalidateCache(); - - onParamChanged(); - - QString str = getString(); - - emit paramChanged(); - emit paramChanged( str ); -} diff --git a/src/QDS/QDS_TextEdit.h b/src/QDS/QDS_TextEdit.h deleted file mode 100644 index 469fbaa36..000000000 --- a/src/QDS/QDS_TextEdit.h +++ /dev/null @@ -1,48 +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 -// -#ifndef QDS_TEXTEEDIT_H -#define QDS_TEXTEEDIT_H - -#include "QDS_Datum.h" - -class QTextEdit; - -class QDS_EXPORT QDS_TextEdit : public QDS_Datum -{ - Q_OBJECT - -public: - QDS_TextEdit( const QString&, QWidget* = 0, const int = All, const QString& = QString::null ); - virtual ~QDS_TextEdit(); - -signals: - void returnPressed(); - -private slots: - void onTextChanged(); - -protected: - QTextEdit* textEdit() const; - virtual QWidget* createControl( QWidget* ); - - virtual QString getString() const; - virtual void setString( const QString& ); -}; - -#endif diff --git a/src/QDS/QDS_Validator.cxx b/src/QDS/QDS_Validator.cxx deleted file mode 100644 index 37b2ea658..000000000 --- a/src/QDS/QDS_Validator.cxx +++ /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 -// -#include "QDS_Validator.h" - -/*! - \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; - State ivState = QIntValidator::validate( input, pos ); - if ( ivState != Invalid && !myFilter.isEmpty() ) - rgState = QRegExpValidator( QRegExp( myFilter ), 0 ).validate( input, pos ); - - ivState = QMIN( ivState, rgState ); - - return ivState; -} - -/*! - \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; - State dvState = QDoubleValidator::validate( input, pos ); - if ( dvState != Invalid && !myFilter.isEmpty() ) - rgState = QRegExpValidator( QRegExp( myFilter ), 0 ).validate( input, pos ); - - dvState = QMIN( dvState, rgState ); - - return dvState; -} - -/*! - \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 ), -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 ), -myFilter( ft ), -myFlags( fg ) -{ -} - -/*! - Destructor. -*/ -QDS_StringValidator::~QDS_StringValidator() -{ -} - -/*! - Returns valid string length. If length not specified -1 returned. -*/ -int QDS_StringValidator::length() const -{ - return myLen; -} - -/*! - 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() ) - return Acceptable; - - QString orig = input; - if ( myFlags.contains( 'u', false ) ) - input = input.upper(); - if ( myFlags.contains( 'l', false ) ) - input = input.lower(); - - State rgState = Acceptable; - State svState = orig == input ? Acceptable : Intermediate; - - if ( myLen >= 0 && (int)input.length() > myLen ) - svState = Intermediate; - - if ( !myFilter.isEmpty() ) - rgState = QRegExpValidator( QRegExp( myFilter ), 0 ).validate( input, pos ); - - svState = QMIN( svState, rgState ); - - return svState; -} diff --git a/src/QDS/QDS_Validator.h b/src/QDS/QDS_Validator.h deleted file mode 100644 index e7fed65aa..000000000 --- a/src/QDS/QDS_Validator.h +++ /dev/null @@ -1,80 +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 -// -#ifndef QDS_VALIDATOR_H -#define QDS_VALIDATOR_H - -#include "QDS.h" - -#include - -/*! - class QDS_IntegerValidator -*/ -class QDS_EXPORT QDS_IntegerValidator : public QIntValidator -{ -public: - QDS_IntegerValidator( QObject* p = 0 ); - QDS_IntegerValidator( const QString& f, QObject* p = 0 ); - virtual ~QDS_IntegerValidator(); - - virtual State validate( QString&, int& ) const; - -private: - QString myFilter; -}; - -/*! - class QDS_DoubleValidator -*/ -class QDS_DoubleValidator : public QDoubleValidator -{ -public: - QDS_DoubleValidator( QObject* p = 0 ); - QDS_DoubleValidator( const QString& f, QObject* p = 0 ); - virtual ~QDS_DoubleValidator(); - - virtual State validate( QString&, int& ) const; - -private: - QString myFilter; -}; - -/*! - 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 ); - virtual ~QDS_StringValidator(); - - virtual State validate( QString&, int& ) const; - - int length() const; - void setLength( const int ); - -private: - int myLen; - QString myFlags; - QString myFilter; -}; - -#endif diff --git a/src/QDS/resources/QDS_msg_en.po b/src/QDS/resources/QDS_msg_en.po deleted file mode 100644 index 4fab946b8..000000000 --- a/src/QDS/resources/QDS_msg_en.po +++ /dev/null @@ -1,65 +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 -# -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. "Foo::Bar" -# would be translated to "Pub", not "Foo::Pub". -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" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -# ------------------------------------------------------------- - -msgid "QDS_Datum::DATA_ERR_TITLE" -msgstr "Incorrect parameter value" - -msgid "QDS_Datum::DATA_INCORRECT_VALUE" -msgstr "Value of parameter \"%1\" is incorrect." - -msgid "QDS_Datum::DATA_INPUT_VALUE" -msgstr "Please, input correct value." - -msgid "QDS_Datum::DATA_SHOULD_BE_VALUE" -msgstr "Should be%1 value" - -msgid "QDS_Datum::DATA_FLOAT" -msgstr " real" - -msgid "QDS_Datum::DATA_INTEGER" -msgstr " integer" - -msgid "QDS_Datum::DATA_STRING" -msgstr " non-empty string" - -msgid "QDS_Datum::DATA_NON_EMPTY" -msgstr " non-empty" - -msgid "QDS_Datum::DATA_MIN_LIMIT" -msgstr " is greater than %1" - -msgid "QDS_Datum::DATA_MAX_LIMIT" -msgstr " is less than %1" - -msgid "QDS_Datum::DATA_RANGE" -msgstr " in range [%1, %2]" - -# ------------------------------------------------------------- diff --git a/src/RegistryDisplay/HelpWindow.cxx b/src/RegistryDisplay/HelpWindow.cxx deleted file mode 100755 index a94773105..000000000 --- a/src/RegistryDisplay/HelpWindow.cxx +++ /dev/null @@ -1,105 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : HelpWindow.cxx -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -# include "HelpWindow.hxx" -# include "utilities.h" - -# include -# include -# include -# include - -using namespace std; - -/*! - Constructor -*/ -HelpWindow::HelpWindow(QWidget* parent, const char* name ) - : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose ) -{ - BEGIN_OF("Constructeur HelpWindow"); - - setCaption( tr( "Help" ) ); - - myTextView = new QTextView( this, "myTextView" ); - QPalette pal = myTextView->palette(); - QColorGroup cg = pal.active(); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, Qt::white ); - cg.setColor( QColorGroup::Base, QColor( 255,255,220 ) ); - cg.setColor( QColorGroup::Text, Qt::black ); - pal.setActive ( cg ); - cg = pal.inactive(); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, Qt::white ); - cg.setColor( QColorGroup::Base, QColor( 255,255,220 ) ); - cg.setColor( QColorGroup::Text, Qt::black ); - pal.setInactive( cg ); - cg = pal.disabled(); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, Qt::white ); - cg.setColor( QColorGroup::Base, QColor( 255,255,220 ) ); - cg.setColor( QColorGroup::Text, Qt::black ); - pal.setDisabled( cg ); - myTextView->setPalette( pal ); - - setCentralWidget( myTextView ); - setMinimumSize( 450, 250 ); - - QFile f ( "tmp.txt" ); - if ( f.open( IO_ReadOnly ) ) - { - QTextStream t( &f ); - while ( !t.eof() ) - { - myTextView->append(t.readLine()); - } - } - f.close(); - - END_OF("Constructeur HelpWindow"); -} - -/*! - Destructor -*/ -HelpWindow::~HelpWindow() -{ - BEGIN_OF("Destructeur HelpWindow"); - END_OF("Destructeur HelpWindow"); -}; - -/*! - Sets text -*/ -void HelpWindow::setText( const QString& text ) -{ - myTextView->setText( text ); -} - - diff --git a/src/RegistryDisplay/HelpWindow.hxx b/src/RegistryDisplay/HelpWindow.hxx deleted file mode 100755 index 31f6405de..000000000 --- a/src/RegistryDisplay/HelpWindow.hxx +++ /dev/null @@ -1,52 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : HelpWindow.hxx -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -#ifndef __HELPWINDOW_H__ -#define __HELPWINDOW_H__ - -#include -#include - -class QTextView; - -class HelpWindow : public QMainWindow -{ - Q_OBJECT - -public: - HelpWindow( QWidget* parent = 0, const char* name = 0); - ~HelpWindow(); - - void setText( const QString& text ); - QTextView* textView() const { return myTextView; } - -private: - QTextView* myTextView; -}; - -#endif diff --git a/src/RegistryDisplay/IntervalWindow.cxx b/src/RegistryDisplay/IntervalWindow.cxx deleted file mode 100755 index 780a876b4..000000000 --- a/src/RegistryDisplay/IntervalWindow.cxx +++ /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 -// -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// File : IntervalWindow.cxx -// Author : Oksana TCHEBANOVA -// Module : SALOME - -#include - -#include -#include -#include -#include -# include "utilities.h" - -#define MARGIN_SIZE 11 -#define SPACING_SIZE 6 -#define MIN_SPIN_WIDTH 100 - -/*! - Constructor -*/ -IntervalWindow::IntervalWindow ( QWidget* parent ) - : QDialog( parent, "IntervalWindow" , true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose ) -{ - BEGIN_OF("IntervalWindow constructor") - setCaption( tr( "Refresh Interval" ) ); - setSizeGripEnabled( true ); - - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setSpacing( SPACING_SIZE ); - topLayout->setMargin( MARGIN_SIZE ); - - QGroupBox* intervalGrp = new QGroupBox( this, "intervalGrp" ); - intervalGrp->setColumnLayout( 0, Qt::Horizontal );//Vertical - intervalGrp->layout()->setSpacing( 0 ); - intervalGrp->layout()->setMargin( 0 ); - QGridLayout* intervalGrpLayout = new QGridLayout( intervalGrp->layout() ); - intervalGrpLayout->setAlignment( Qt::AlignTop ); - intervalGrpLayout->setSpacing( SPACING_SIZE ); - intervalGrpLayout->setMargin( MARGIN_SIZE ); - - QHBoxLayout* aBtnLayout = new QHBoxLayout; - aBtnLayout->setSpacing( SPACING_SIZE ); - aBtnLayout->setMargin( 0 ); - - myButtonOk = new QPushButton( this, "buttonOk" ); - myButtonOk->setText( tr( "BUT_OK" ) ); - myButtonOk->setAutoDefault( TRUE ); - myButtonOk->setDefault( TRUE ); - - myButtonCancel = new QPushButton( this, "buttonCancel" ); - myButtonCancel->setText( tr( "BUT_CANCEL" ) ); - myButtonCancel->setAutoDefault( TRUE ); - - QLabel* TextLabel = new QLabel( intervalGrp, "TextLabel" ); - TextLabel->setText( tr( "Please, enter a number of seconds:" ) ); - - mySpinBox = new QSpinBox( 1, 999999999, 1, intervalGrp, "SpinBox" ); - mySpinBox->setValue( 100 ); - mySpinBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - mySpinBox->setMinimumWidth(MIN_SPIN_WIDTH); - - intervalGrpLayout->addWidget(TextLabel, 0, 0); - intervalGrpLayout->addWidget(mySpinBox, 0, 1); - - aBtnLayout->addWidget( myButtonOk ); - aBtnLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aBtnLayout->addWidget( myButtonCancel ); - - topLayout->addWidget( intervalGrp, 0, 0 ); - topLayout->addLayout( aBtnLayout, 1, 0 ); - - END_OF("IntervalWindow constructor") -} - -/*! - Destructor -*/ -IntervalWindow::~IntervalWindow() {} - -/*! - Sets start interval size -*/ -void IntervalWindow::setValue(const int size) -{ - mySpinBox->setValue(size); -} - -/*! - Gets interval size -*/ -int IntervalWindow::getValue() -{ - return mySpinBox->value(); -} - -/*! - gets a pointer to myButtonOk -*/ -QPushButton* IntervalWindow::Ok() -{ - return myButtonOk; -} - -/*! - gets a pointer to myButtonCancel -*/ -QPushButton* IntervalWindow::Cancel() -{ - return myButtonCancel; -} diff --git a/src/RegistryDisplay/IntervalWindow.hxx b/src/RegistryDisplay/IntervalWindow.hxx deleted file mode 100755 index 420ce5a0a..000000000 --- a/src/RegistryDisplay/IntervalWindow.hxx +++ /dev/null @@ -1,57 +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 -// -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// File : IntervalWindow.hxx -// Author : Oksana TCHEBANOVA -// Module : SALOME - -#ifndef IntervalWindow_HeaderFile -#define IntervalWindow_HeaderFile - -# include -# include -# include -# include - -#ifndef WNT -using namespace std; -#endif - -class IntervalWindow : public QDialog -{ - Q_OBJECT - -public: - IntervalWindow( QWidget* parent = 0 ); - ~IntervalWindow(); - - QPushButton* Ok(); - QPushButton* Cancel(); - - int getValue(); - void setValue( int ); - -private: - QSpinBox* mySpinBox; - QPushButton* myButtonOk; - QPushButton* myButtonCancel; -}; - -#endif diff --git a/src/RegistryDisplay/Makefile.in b/src/RegistryDisplay/Makefile.in deleted file mode 100755 index 46b60c25a..000000000 --- a/src/RegistryDisplay/Makefile.in +++ /dev/null @@ -1,59 +0,0 @@ -# SALOME RegistryDisplay : GUI for Registry server implementation -# -# 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@ - -EXPORT_PYSCRIPTS = - -EXPORT_HEADERS= HelpWindow.hxx \ - IntervalWindow.hxx \ - RegWidget.h - -# Libraries targets - -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@ diff --git a/src/RegistryDisplay/RegWidget.cxx b/src/RegistryDisplay/RegWidget.cxx deleted file mode 100755 index 413dca711..000000000 --- a/src/RegistryDisplay/RegWidget.cxx +++ /dev/null @@ -1,820 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : RegWidget.cxx -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# include "SALOME_NamingService.hxx" -# include "ServiceUnreachable.hxx" -# include "Utils_SINGLETON.hxx" -# include "Utils_CommException.hxx" - -# include "utilities.h" -# include "OpUtil.hxx" - -# include "RegWidget.h" -# include "HelpWindow.hxx" -# include "IntervalWindow.hxx" -using namespace std; - -typedef int PIXELS; -RegWidget* RegWidget::myRegWidgetPtr = 0; -QString addSlash( const QString& ); -QString findFile( QString filename ); - -#define BOLD( text ) ( QString( "" ) + QString( text ) + QString( "" ) ) - -static const char* const time_data[] = { -"16 16 6 1", -". c None", -"b c None", -"# c #000000", -"a c #4c4c4c", -"d c #878787", -"c c #ffffff", -".....#####ab....", -"...##cc#dc##ab..", -"..#ccc###dcc#ab.", -".#ccccc#dcccc#a.", -".#ccccc#dcccc#ab", -"#cccccc#dccccc#a", -"#cccccc#dccc#c#a", -"#c##ccc########a", -"#ccddcccdddd#d#a", -"#cccccccccccdc#a", -".#ccccccccccc#aa", -".#ccccc#ccccc#a.", -"..#cccc#dccc#aa.", -"...##cccdc##aa..", -".....#####aaa...", -"......aaaaa....."}; - -static const char* const close_data[] = { -"16 16 6 1", -"d c None", -". c None", -"# c #000000", -"a c #4c4c4c", -"c c #5b5b5b", -"b c #ffffff", -".....#####a.....", -"...##bbbbb##a...", -"..#bbbbbbbbb#a..", -".#b#cbbbbbb#d#a.", -".#bc#cbbbb#cb#a.", -"#bbbc#cbb#cbbb#a", -"#bbbbc#c#cbbbb#a", -"#bbbbbc#cbbbbb#a", -"#bbbbc#c#cbbbb#a", -"#bbb#ccbb##bbb#a", -".#b#c#bbbbc#b#aa", -".#bc#bbbbbb#c#a.", -"..#bbbbbbbbb#aa.", -"...##bbbbb##aa..", -".....#####aaa...", -"......aaaaa....."}; - -static const char* const refresh_data[] = { -"16 16 5 1", -". c None", -"# c #000000", -"a c #4c4c4c", -"c c #878787", -"b c #ffffff", -".....#####a.....", -"...##bb#bb##a...", -"..#bbbbc#bbb#a..", -".#bbbb####cbb#a.", -".#bbb#cc#cbbb#a.", -"#bbb#cb#cbbbbb#a", -"#bb#cbbbbbb#bb#a", -"#bb#cbbbbbb#cb#a", -"#bb#cbbbbbb#cb#a", -"#bbbbbb#bb#cbb#a", -".#bbbb#cb#cbb#aa", -".#bbb####cbbb#a.", -"..#bbb#cbbbb#aa.", -"...##bb#cb##aa..", -".....#####aaa...", -"......aaaaa....."}; - -/*! - Creates components list -*/ - -Registry::Components_var MakeRegistry( CORBA::ORB_var &orb ) -{ - - const char *registryName="Registry" ; - - SALOME_NamingService &naming = *SINGLETON_::Instance() ; - naming.init_orb( 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 ) ; - } - - // Specialisation de l'objet generique - - return Registry::Components::_narrow( object ) ; -} - -/*! - Only one global registry window should exist at the moment - This method creates registry window if necessary and returns it - [ static ] -*/ -RegWidget* RegWidget::GetRegWidget( CORBA::ORB_var &orb , QWidget *parent, const char *name ) -{ - if ( !myRegWidgetPtr ) - myRegWidgetPtr = new RegWidget( orb, parent, name ); - return myRegWidgetPtr; -} - -/*! - Constructor -*/ -RegWidget::RegWidget(CORBA::ORB_var &orb, QWidget *parent, const char *name ) - : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose ), - _VarComponents( MakeRegistry(orb) ), - _clients(0), _history(0), _parent( parent ), - _tabWidget(0), _refresh(0), _interval(0), - myInfoWindow(0), myHelpWindow(0), myIntervalWindow(0) -{ - QString aFile = findFile("default.png"); - /* char* dir = getenv( "CSF_ResourcesDefaults" ); - QString path( "" ); - if ( dir ) { - QDir qDir( dir ); - path = qDir.filePath( "default.png" ); - }*/ - QPixmap pm ( aFile ); - if ( !pm.isNull() ) - setIcon( pm ); - - // pixmap for buttons - QPixmap image_refresh ( ( const char** ) refresh_data ); - QPixmap image_interval( ( const char** ) time_data ); - QPixmap image_close ( ( const char** ) close_data ); - - // Buttons definition - QToolBar* topbar = new QToolBar( tr("Toolbar"), this ); - setDockEnabled( topbar, DockTornOff, false ); - setDockMenuEnabled( false ); - - _refresh = new QPushButton( tr( "Refresh" ), topbar ); - _refresh->setIconSet( image_refresh ); - _refresh->setFocusPolicy( NoFocus ); - connect( _refresh, SIGNAL( clicked() ), this, SLOT( slotListeSelect() ) ); - QToolTip::add( _refresh, "", toolTipGroup(), tr("Immediately updates list of components") ); - - /* PAL5540 - this button is needless - QPushButton* help = new QPushButton( tr( "Help" ), topbar ); - connect( help, SIGNAL( clicked() ), this, SLOT( slotHelp() ) ); - QToolTip::add( help, "", toolTipGroup(), tr("Opens Help window") ); - */ - - _interval = new QPushButton( tr( "Interval" ), topbar ); - _interval->setIconSet( image_interval ); - _interval->setFocusPolicy( NoFocus ); - connect( _interval, SIGNAL( clicked() ), this, SLOT( slotSelectRefresh() ) ); - QToolTip::add( _interval, "", toolTipGroup(), tr("Changes refresh interval") ); - - topbar->addSeparator(); - _close = new QPushButton( tr("Close"), topbar ); - _close->setIconSet( image_close ); - _close->setFocusPolicy( NoFocus ); - connect( _close, SIGNAL( clicked() ), this, SLOT( close() ) ); - QToolTip::add( _close, "", toolTipGroup(), tr("Closes Registry window") ); - - // Display area and associated slots definition - _tabWidget = new QTabWidget( this ); - _clients = new QListView( _tabWidget ); - SetListe(); - _history = new QListView( _tabWidget ); - SetListeHistory(); - - _tabWidget->addTab( _clients, tr( "Running" ) ); - _tabWidget->addTab( _history, tr( "History" ) ); - connect( _tabWidget, SIGNAL( currentChanged( QWidget* )), this, SLOT( slotListeSelect() ) ); - connect( _clients, SIGNAL( clicked( QListViewItem* ) ), this, SLOT( slotClientChanged( QListViewItem* ) ) ); - connect( _history, SIGNAL( clicked( QListViewItem* ) ), this, SLOT( slotHistoryChanged( QListViewItem* ) ) ); - setCentralWidget( _tabWidget ); - - // Timer definition (used to automaticaly refresh the display area) - _counter = new QTimer( this ); - connect( _counter, SIGNAL( timeout() ), this, SLOT( slotListeSelect() ) ); - myRefreshInterval = 10; - _counter->start( myRefreshInterval * 1000 ); - - PIXELS xpos = 160 ; - PIXELS ypos = 100 ; - PIXELS largeur = 800 ; - PIXELS hauteur = 350 ; - setGeometry( xpos, ypos, largeur, hauteur ) ; - setCaption( name ) ; - statusBar()->message(" "); -} - -/*! - Destructor -*/ -RegWidget::~RegWidget() -{ - MESSAGE("Debut du Destructeur"); - _counter->stop(); - myRegWidgetPtr = 0; -}; - -/*! - Event filter -*/ -bool RegWidget::eventFilter( QObject* object, QEvent* event ) -{ - if ( object ) { - if ( object == myHelpWindow && event->type() == QEvent::Close ) { - myHelpWindow = 0; - } - else if ( object == myInfoWindow && event->type() == QEvent::Close ) { - myInfoWindow = 0; - } - else if ( object == myIntervalWindow && event->type() == QEvent::Close ) { - myIntervalWindow = 0; - } - else if ( object == _clients && event->type() == QEvent::KeyPress ) { - QKeyEvent* ke = (QKeyEvent*)event; - if ( ke->key() == Key_Enter || ke->key() == Key_Return ) { - slotClientChanged( _clients->currentItem() ); - } - } - else if ( object == _history && event->type() == QEvent::KeyPress ) { - QKeyEvent* ke = (QKeyEvent*)event; - if ( ke->key() == Key_Enter || ke->key() == Key_Return ) { - slotHistoryChanged( _history->currentItem() ); - } - } - } - return QMainWindow::eventFilter( object, event ); -} - -/*! - Searches item in the list and returns it's index or -1 if not found -*/ -int RegWidget::numitem(const QString &name, const QString &pid, const QString &machine,const Registry::AllInfos *listclient) -{ - BEGIN_OF("numitem"); - for (CORBA::ULong i=0; ilength(); i++) - { - const Registry::Infos & c_info=(*listclient)[i]; - ASSERT( c_info.name!=NULL); - QString b; - b.setNum(int(c_info.pid)); - if ( (name.compare(QString(c_info.name)) == 0) && - (machine.compare(QString(c_info.machine)) == 0) && - (pid.compare(b) == 0) ) - { - END_OF("numitem"); - return i; - } - } - END_OF("numitem"); - return -1; -} - -/*! - Returns text, containing information about client [ static ] -*/ -QString RegWidget::setlongText( const Registry::Infos &c_info) -{ - BEGIN_OF("setlongText"); - ASSERT( c_info.name != NULL ); - QString a = QString( "

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



" ); - a.append( tr( "Process Id" ) + QString( " : " ) ); - a.append( BOLD( QString::number( int( c_info.pid ) ) ) ); - a.append( QString( " " ) + tr( "on machine" ) + QString( " " ) ); - a.append( BOLD( c_info.machine ) ); - a.append( QString( " " ) + tr( "ip address" ) + QString( " : " ) ); - a.append( BOLD( c_info.adip ) ); - a.append( "
" ); - - a.append( tr( "launched by user" ) + QString( " " ) ); - a.append( BOLD( c_info.pwname ) ); - a.append( QString( " ( " ) + tr( "pid" ) + QString( " : " ) ); - a.append( BOLD( QString::number( int( c_info.uid ) ) ) ); - a.append( QString( " )
" ) + tr( "in directory" ) + QString( " " )); - a.append( BOLD( c_info.cdir ) ); - - time_t aTime; - a.append( QString( "
" ) + tr( "begins" ) + QString( " " ) ); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - a.append( BOLD( t1 ) ); - delete [] t1; - a.append( "
" ); - - if (c_info.tc_hello != 0 ) - { - aTime = time_t(c_info.tc_hello); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - a.append( tr( "last signal" ) + QString(" : ") ); - a.append( BOLD( t2 ) ); - a.append( "
" ); - delete [] t2; - } - if ((c_info.tc_end - c_info.difftime) != 0) - { - aTime = time_t(c_info.tc_end); - char * t3 = (char * )duplicate(ctime(&aTime)); - t3 [strlen(t3) -1 ] = ' '; - a.append( tr( "ends" ) + QString( " " ) ); - a.append( BOLD( t3 ) ); - a.append( "
" ); - delete [] t3; - } - else - { - a.append( tr( "still running" ) + QString( "
" ) ); - } - - SCRUTE(c_info.difftime); - if (c_info.difftime!= 0) - { - a.append( QString( "(" ) + tr( "Time on" ) + QString( " " ) ); - a.append( BOLD( c_info.machine ) ); - a.append( QString( " " ) + tr( "differs from server's time. The difference is" ) + QString( " " )); - a.append( BOLD( QString::number( int( c_info.difftime ) ) ) ); - a.append( QString( " " ) + tr( "seconds" ) + QString( ")
" ) ); - } - END_OF("setlongText"); - return a; - -} - -/*! - Close event -*/ -void RegWidget::closeEvent( QCloseEvent *e) -{ - BEGIN_OF("closeEvent"); - if ( myInfoWindow ) - myInfoWindow->close(); - if ( myHelpWindow ) - myHelpWindow->close(); - if (myIntervalWindow) - myIntervalWindow->close(); - e->accept(); - END_OF("closeEvent"); -}; - -/*! - Setups Clients list -*/ -void RegWidget::SetListe() -{ - BEGIN_OF("SetListe"); - _clients->installEventFilter( this ); - _clients->setAllColumnsShowFocus( true ); - _clients->addColumn( tr( "Component" ), -1); - _clients->addColumn( tr( "PID" ), -1 ); - _clients->addColumn( tr( "User Name" ), -1 ); - _clients->addColumn( tr( "Machine" ), -1 ); - _clients->addColumn( tr( "begins" ), -1 ); - _clients->addColumn( tr( "hello" ) , -1 ); - _clients->setColumnAlignment( 1, Qt::AlignRight ); - END_OF("SetListe"); -} - -/*! - Setups History list -*/ -void RegWidget::SetListeHistory() -{ - BEGIN_OF("SetListeHistory") - _history->installEventFilter( this ); - _history->setAllColumnsShowFocus( true ); - _history->addColumn( tr( "Component" ), -1); - _history->addColumn( tr( "PID" ), -1 ); - _history->addColumn( tr( "User Name" ), -1 ); - _history->addColumn( tr( "Machine" ), -1 ); - _history->addColumn( tr( "begins" ), -1 ); - _history->addColumn( tr( "ends" ), -1 ); - _history->setColumnAlignment( 1, Qt::AlignRight ); - END_OF("SetListeHistory") -} - -/*! - Updates History list -*/ -void RegWidget::InfoHistory() -{ - - BEGIN_OF("InfoHistory") - _history->clear(); - try - { - time_t aTime; - _serverhistory = _VarComponents->history(); - for (CORBA::ULong i=0; i<_serverhistory->length(); i++) - { - const Registry::Infos & c_info=(*_serverhistory)[i]; - ASSERT( c_info.name!=NULL); - QString a; - a.setNum(int(c_info.pid)); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - aTime = time_t(c_info.tc_end); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - QListViewItem * item = new QListViewItem(_history, QString(c_info.name),\ - a, QString(c_info.pwname), QString(c_info.machine), \ - QString(t1), QString(t2)); - item=0 ; - delete [] t1; - delete [] t2; - - } - } - catch( ... ) - { - _interval->setDisabled( TRUE ) ; - _refresh->setDisabled( TRUE ) ; - _counter->stop(); - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ; - } - END_OF("InfoHistory") -} - -/*! - Updates clients list -*/ -void RegWidget::InfoReg() -{ - BEGIN_OF("InfoReg") - _clients->clear(); - try - { - time_t aTime; - _serverclients = _VarComponents->getall(); - for (CORBA::ULong i=0; i<_serverclients->length(); i++) - { - const Registry::Infos & c_info=(*_serverclients)[i]; - ASSERT( c_info.name!=NULL); - QString a; - a.setNum(int(c_info.pid)); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - aTime = time_t(c_info.tc_hello); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - QListViewItem * item = new QListViewItem(_clients, QString(c_info.name),\ - a, QString(c_info.pwname), QString(c_info.machine), \ - QString(t1), QString(t2)); - item=0 ; - delete [] t1; - delete [] t2; - - } - } - catch( ... ) - { - _interval->setDisabled( TRUE ) ; - _refresh->setDisabled( TRUE ) ; - _counter->stop(); - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ; - } - END_OF("InfoReg") -} - -/*! - Called when button is clicked -*/ -void RegWidget::slotListeSelect() -{ - try - { - ASSERT(_tabWidget->currentPage() != NULL); - if (_tabWidget->currentPage () == _clients) InfoReg(); - else if (_tabWidget->currentPage () == _history) InfoHistory(); - } - catch( ... ) - { - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ; - } -} - -/*! - Called when button is clicked (changing refresh interval) -*/ -void RegWidget::slotSelectRefresh() -{ - BEGIN_OF("slotSelectRefresh"); - myIntervalWindow = new IntervalWindow(this); - myIntervalWindow->installEventFilter( this ); - myIntervalWindow->setValue(myRefreshInterval); - myIntervalWindow->show(); - connect( myIntervalWindow->Cancel(), SIGNAL( clicked() ), myIntervalWindow, SLOT( close() ) ); - connect( myIntervalWindow->Ok(), SIGNAL( clicked() ), this, SLOT( slotIntervalOk() ) ); - END_OF("slotSelectRefresh"); -} - -/*! - SLOT: called when button OK is clicked in interval window -*/ -void RegWidget::slotIntervalOk() -{ - BEGIN_OF("slotIntervalOk"); - myRefreshInterval = myIntervalWindow->getValue(); - _counter->changeInterval( myRefreshInterval * 1000 ); - SCRUTE(myRefreshInterval); - myIntervalWindow->close(); - END_OF("slotIntervalOk"); -} -/*! - Called when button is clicked -*/ -void RegWidget::slotHelp() -{ - BEGIN_OF("slotHelp()"); - - if ( !myHelpWindow ) { - myHelpWindow = new HelpWindow( this ); - myHelpWindow->installEventFilter( this ); - } - myHelpWindow->show(); - myHelpWindow->raise(); - myHelpWindow->setActiveWindow(); - - END_OF("slotHelp()") ; -} - -/*! - Called when user clicks on item in list -*/ -void RegWidget::slotClientChanged( QListViewItem* item ) -{ - BEGIN_OF("slotClientChanged()") ; - - if ( item <= 0) - return; - - blockSignals( true ); // for sure that item will not be deleted when refreshing - - int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverclients); - SCRUTE(numeroItem) ; - SCRUTE(item->text(1)) ; - - ASSERT(numeroItem>=0) ; - ASSERT((size_t)numeroItem<_serverclients->length()) ; - const Registry::Infos & c_info=(*_serverclients)[numeroItem]; - ASSERT( c_info.name!=NULL); - - if ( !myInfoWindow ) { - myInfoWindow = new InfoWindow( this ); - myInfoWindow->installEventFilter( this ); - } - QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name ); - myInfoWindow->setCaption(a); - myInfoWindow->setText( RegWidget::setlongText( c_info) ); - myInfoWindow->show(); - myInfoWindow->raise(); - myInfoWindow->setActiveWindow(); - - blockSignals( false ); // enabling signals again - - END_OF("slotClientChanged()") ; - return ; -} - -/*! - Called when user clicks on item in list -*/ -void RegWidget::slotHistoryChanged( QListViewItem* item ) -{ - - BEGIN_OF("slotHistoryChanged()") ; - - if ( item <= 0) - return; - - blockSignals( true ); // for sure that item will not be deleted when refreshing - - int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverhistory); - - SCRUTE(numeroItem) ; - SCRUTE(item->text(1)) ; - ASSERT(numeroItem>=0) ; - ASSERT((size_t)numeroItem<_serverhistory->length()) ; - const Registry::Infos & c_info=(*_serverhistory)[numeroItem]; - ASSERT( c_info.name!=NULL); - - if ( !myInfoWindow ) { - myInfoWindow = new InfoWindow( this ); - myInfoWindow->installEventFilter( this ); - } - QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name ); - myInfoWindow->setCaption(a); - myInfoWindow->setText( RegWidget::setlongText( c_info ) ); - myInfoWindow->show(); - myInfoWindow->raise(); - myInfoWindow->setActiveWindow(); - - blockSignals( false ); // enabling signals again - - END_OF("slotHistoryChanged()") ; - return ; -} - -/*! - Constructor -*/ -InfoWindow::InfoWindow( QWidget* parent, const char* name ) - : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose ) -{ - BEGIN_OF("InfoWindow"); - myTextView = new QTextView( this, "myTextView" ); - setCentralWidget( myTextView ); - setMinimumSize( 450, 250 ); - END_OF("InfoWindow"); -} - -/*! - Sets text -*/ -void InfoWindow::setText( const QString& text ) -{ - myTextView->setText( text ); -} - -/*! - Key press event -*/ -void InfoWindow::keyPressEvent( QKeyEvent * e ) -{ - QMainWindow::keyPressEvent( e ); - if ( e->key() == Key_Escape ) - close(); -} - -static const char* SEPARATOR = ":"; - -QString findFile( QString filename ) -{ - QString dir; - char* cenv; - - // Try ${HOME}/.salome/resources directory - cenv = getenv( "HOME" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + ".salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } - // Try ${SALOME_SITE_DIR}/share/salome/resources directory - cenv = getenv( "SALOME_SITE_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - cenv = getenv("SALOME_SITE_NAME"); - if (cenv) dir = dir + cenv; - else dir = dir + "salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } - // Try ${KERNEL_ROOT_DIR}/share/salome/resources directory - cenv = getenv( "KERNEL_ROOT_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - dir = dir + "salome" ; - 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(); - } - } - - //SRN Added support for SALOMEGUI - cenv = getenv( "SALOMEGUI_ROOT_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - dir = dir + "salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } - - // 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(); - } - } - } - return filename; -} -QString addSlash( const QString& 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/RegistryDisplay/RegWidget.h b/src/RegistryDisplay/RegWidget.h deleted file mode 100755 index 3a1431777..000000000 --- a/src/RegistryDisplay/RegWidget.h +++ /dev/null @@ -1,116 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : RegWidget.h -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -# ifndef __REGWIDGET_H__ -# define __REGWIDGET_H__ -# include -# include - -#include -#include CORBA_CLIENT_HEADER(SALOME_Registry) - -#include - -class QTabWidget; -class QListView; -class QListViewItem; -class QWidget; -class QTimer; -class QCloseEvent; -class QTextView; -#if QT_VERSION > 300 -class QPushButton; -#endif -class HelpWindow; -class InfoWindow; - -class RegWidget : public QMainWindow -{ - Q_OBJECT - -public: - RegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 ); - ~RegWidget(); - void SetListe(); - void SetListeHistory(); - void InfoReg(); - void InfoHistory(); - - bool eventFilter( QObject* object, QEvent* event ); - - static RegWidget* GetRegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 ); - -public slots: - void slotHelp(); - void slotListeSelect(); - void slotClientChanged( QListViewItem* ); - void slotHistoryChanged( QListViewItem* ); - void slotSelectRefresh(); - void slotIntervalOk(); -protected: - static QString setlongText( const Registry::Infos &c_info ); - int numitem( const QString& name, const QString& pid, const QString& machine, const Registry::AllInfos* c_info ); - void closeEvent( QCloseEvent *e); - -protected : - QListView* _clients; - QListView* _history; - QWidget* _parent; - QTabWidget* _tabWidget; - QPushButton* _refresh; - QPushButton* _interval; - QPushButton* _close; - QTimer* _counter; - Registry::AllInfos* _serverhistory; - Registry::AllInfos* _serverclients; - InfoWindow* myInfoWindow; - HelpWindow* myHelpWindow; - IntervalWindow* myIntervalWindow; - int myRefreshInterval; - -private: - const Registry::Components_var _VarComponents; - static RegWidget* myRegWidgetPtr; -}; - -class InfoWindow : public QMainWindow { -public: - InfoWindow( QWidget* parent = 0, const char* name = 0); - - void setText( const QString& text ); - QTextView* textView() const { return myTextView; } - -protected: - void keyPressEvent( QKeyEvent * e ); - -private: - QTextView* myTextView; - -}; - -#endif diff --git a/src/RegistryDisplay/RegWidgetFactory.cxx b/src/RegistryDisplay/RegWidgetFactory.cxx deleted file mode 100755 index 7f285e686..000000000 --- a/src/RegistryDisplay/RegWidgetFactory.cxx +++ /dev/null @@ -1,48 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : RegWidgetFactory.cxx -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -# include "RegWidget.h" -# include "utilities.h" - -using namespace std; - -extern "C" -{ - -void OnGUIEvent( CORBA::ORB_var &orb, QWidget *parent, const char *name ) -{ - // N.B. parent can be 0 - RegWidget* ptrRegWidget = RegWidget::GetRegWidget( orb, parent, name ); - //ASSERT ( !ptrRegWidget ); - ptrRegWidget->show(); - ptrRegWidget->raise(); - ptrRegWidget->setActiveWindow(); - return; -} - -} diff --git a/src/ResExporter/Makefile.in b/src/ResExporter/Makefile.in deleted file mode 100755 index e1838e26d..000000000 --- a/src/ResExporter/Makefile.in +++ /dev/null @@ -1,48 +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 : Vadim SANDLER (OCN) -# 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@ - - - - - diff --git a/src/ResExporter/ResourceExporter.cxx b/src/ResExporter/ResourceExporter.cxx deleted file mode 100644 index 7788f8b7c..000000000 --- a/src/ResExporter/ResourceExporter.cxx +++ /dev/null @@ -1,173 +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: ResourceExporter.cxx - Created: 27/06/05 - Author: Vadim SANDLER - Copyright (C) CEA 2005 - - This tool provides command-line interface allowing to modify user preferences. - The tool can be used by the compilation procedures in order to set default preferences for the module. - - Usage: - ResourceExporter - Parameters have the following format: - '
:=' - to set for the user - preference from the
section; - '
:+=[|]' - the is appended to the current value - of the preference from the
section; - separator is used to concatenate old and new values, - by default comma (',') symbol is used - '-
:' - to remove user preference from the
- section. Note that only use preference file is - influenced, you may need to use '
:=""' - option - The number of parameters is limeted only by maximum possible length of the command line. -*/ - -#include "SUIT_ResourceMgr.h" -#include -#include -#include -#include -#include - -/*! - \return the SALOME version number -*/ -static QString salomeVersion() -{ - QString path( ::getenv( "GUI_ROOT_DIR" ) ); - if ( !path.isEmpty() ) - path += QDir::separator(); - path += QString( "bin/salome/VERSION" ); - - QFile vf( path ); - if ( !vf.open( IO_ReadOnly ) ) - return QString::null; - - QString line; - vf.readLine( line, 1024 ); - vf.close(); - - if ( line.isEmpty() ) - return QString::null; - - while ( !line.isEmpty() && line.at( line.length() - 1 ) == QChar( '\n' ) ) - line.remove( line.length() - 1, 1 ); - - QString ver; - int idx = line.findRev( ":" ); - if ( idx != -1 ) - ver = line.mid( idx + 1 ).stripWhiteSpace(); - - return ver; -} - -/*! - print the help information -*/ -static void help() -{ - std::cout << "" << std::endl; - std::cout << "ResourceExporter: provides command-line interface to modify user preferences." << std::endl; - std::cout << "" << std::endl; - std::cout << "Usage:" << std::endl; - std::cout << " ResourceExporter " << std::endl; - std::cout << "Parameters have the following format:" << std::endl; - std::cout << " '
:=' - to set for the user " << std::endl; - std::cout << " preference from the
section;" << std::endl; - std::cout << " '
:+=[|]' - the is appended to the current value " << std::endl; - std::cout << " of the preference from the
section;" << std::endl; - std::cout << " separator is used to concatenate old and new values," << std::endl; - std::cout << " by default comma (',') symbol is used" << std::endl; - std::cout << " '-
:' - to remove user preference from the
" << std::endl; - std::cout << " section. Note that only use preference file is " << std::endl; - std::cout << " influenced, you may need to use '
:=""'" << std::endl; - std::cout << " option" << std::endl; - std::cout << "The number of parameters is limeted only by maximum possible length of the command line." << std::endl; - std::cout << "" << std::endl; -} - -/*! - application main() function -*/ -int main( int argc, char** argv ) -{ - QApplication app( argc, argv ); - if ( argc > 1 ) { - SUIT_ResourceMgr* resMgr = new SUIT_ResourceMgr( QString( "SalomeApp" ), QString( "%1Config" ) ); - resMgr->setVersion( salomeVersion() ); - resMgr->setCurrentFormat( QString( "xml" ) ); - resMgr->loadLanguage(); - for ( int i = 1; i < argc; i ++ ) { - QString anArg = QString( argv[i] ).stripWhiteSpace(); - if ( anArg.startsWith( "-" ) ) { - anArg.remove( 0, 1 ); - if ( anArg.contains( ":" ) ) { - QStringList vals = QStringList::split( ":", anArg ); - QString section = vals[ 0 ].stripWhiteSpace(); - QString param = vals[ 1 ].stripWhiteSpace(); - if ( section.isEmpty() || param.isEmpty() ) continue; - resMgr->remove( section, param ); - } - } - else if ( anArg.contains( "+=" ) ) { - QStringList vals = QStringList::split( "+=", anArg ); - if ( vals[ 0 ].contains( ":" ) ) { - QStringList vals1 = QStringList::split( ":", vals[ 0 ] ); - QString section = vals1[ 0 ].stripWhiteSpace(); - QString param = vals1[ 1 ].stripWhiteSpace(); - QString newValue = vals [ 1 ].stripWhiteSpace(); - QString separ = ","; // default separator - if ( newValue.contains( "|" ) ) { - QStringList vals2 = QStringList::split( "|", newValue ); - newValue = vals2[ 0 ].stripWhiteSpace(); - separ = vals2[ 1 ].stripWhiteSpace(); - } - if ( section.isEmpty() || param.isEmpty() || newValue.isEmpty() || separ.isEmpty() ) continue; - QString value = resMgr->stringValue( section, param ); - QStringList valsOld = QStringList::split( separ, value ); - QStringList valsNew = QStringList::split( separ, newValue ); - 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 ) ); - } - } - else if ( anArg.contains( "=" ) ) { - QStringList vals = QStringList::split( "=", anArg ); - if ( vals[ 0 ].contains( ":" ) ) { - QStringList vals1 = QStringList::split( ":", vals[ 0 ] ); - QString section = vals1[ 0 ].stripWhiteSpace(); - QString param = vals1[ 1 ].stripWhiteSpace(); - QString value = vals [ 1 ].stripWhiteSpace(); - if ( section.isEmpty() || param.isEmpty() ) continue; - resMgr->setValue( section, param, value ); - } - } - } - resMgr->save(); - delete resMgr; - } - else { - help(); - } - return 0; -} diff --git a/src/SALOME_PY/Makefile.in b/src/SALOME_PY/Makefile.in deleted file mode 100755 index d1eb1c2bc..000000000 --- a/src/SALOME_PY/Makefile.in +++ /dev/null @@ -1,52 +0,0 @@ -# SALOME SALOME_PY : binding of VTK graphics and Python -# -# 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@ - -# 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@ diff --git a/src/SALOME_PY/SalomePy.cxx b/src/SALOME_PY/SalomePy.cxx deleted file mode 100755 index 30f556718..000000000 --- a/src/SALOME_PY/SalomePy.cxx +++ /dev/null @@ -1,198 +0,0 @@ -// SALOME SALOME_PY : binding of VTK graphics and Python -// -// 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 : SalomePy.cxx -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -#include -#include - -#include -#include -#include -#include - -#include "SALOME_Event.hxx" - -#include "SUIT_Session.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Study.h" - -#include "SVTK_ViewManager.h" -#include "SVTK_ViewWindow.h" - -using namespace std; - -/*! - 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. -*/ - -static PyObject* GetPyClass(const char* theClassName){ - static PyObject *aVTKModule = NULL; - if(!aVTKModule){ - if (VTK_MAJOR_VERSION > 3) - aVTKModule = PyImport_ImportModule("libvtkRenderingPython"); - else - aVTKModule = PyImport_ImportModule("libVTKGraphicsPython"); - if(PyErr_Occurred()){ - PyErr_Print(); - return NULL; - } - } - PyObject* aVTKDict = PyModule_GetDict(aVTKModule); - char* aClassName = const_cast(theClassName); - PyObject* aPyClass = PyDict_GetItemString(aVTKDict,aClassName); - //Py_DECREF(aVTKModule); - return aPyClass; -} - -static SVTK_ViewWindow* GetVTKViewWindow() { - SVTK_ViewWindow* aVW = NULL; - if ( SUIT_Session::session() ) { - // get application - SalomeApp_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ); - if ( anApp ) { - // get active study - 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 ] ); - } - } - } - } - return aVW; -} - -/*! - Get VTK renderer (opens new VTK window if there is no one opened) -*/ -class TGetRendererEvent: public SALOME_Event { -public: - typedef PyObject* TResult; - TResult myResult; - TGetRendererEvent() : myResult( Py_None ) {} - virtual void Execute() { - if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) { - PyObject* aPyClass = GetPyClass("vtkRenderer"); - vtkRenderer* aVTKObject = aVTKViewWindow->getRenderer(); - myResult = PyVTKObject_New(aPyClass,aVTKObject); - } - } -}; -extern "C" PyObject *libSalomePy_getRenderer(PyObject *self, PyObject *args) -{ - //return ProcessEvent( new TGetRendererEvent() ); - PyObject * aResult; - Py_BEGIN_ALLOW_THREADS // PAL12755 - aResult = ProcessEvent( new TGetRendererEvent() ); - Py_END_ALLOW_THREADS // PAL12755 - return aResult; -} - -/*! - Get VTK render window (opens new VTK window if there is no one opened) -*/ -class TGetRenderWindowEvent: public SALOME_Event { -public: - typedef PyObject* TResult; - TResult myResult; - TGetRenderWindowEvent() : myResult( Py_None ) {} - virtual void Execute() { - if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) { - PyObject* aPyClass = GetPyClass("vtkRenderWindow"); - vtkRenderWindow* aVTKObject = aVTKViewWindow->getRenderWindow(); - myResult = PyVTKObject_New(aPyClass,aVTKObject); - } - } -}; -extern "C" PyObject *libSalomePy_getRenderWindow(PyObject *self, PyObject *args) -{ - //return ProcessEvent( new TGetRenderWindowEvent() ); - PyObject * aResult; - Py_BEGIN_ALLOW_THREADS // PAL12755 - aResult = ProcessEvent( new TGetRenderWindowEvent() ); - Py_END_ALLOW_THREADS // PAL12755 - return aResult; -} - -/*! - Get VTK render window interactor (opens new VTK window if there is no one opened) -*/ -class TGetRenderWindowInteractorEvent: public SALOME_Event { -public: - typedef PyObject* TResult; - TResult myResult; - TGetRenderWindowInteractorEvent() : myResult( Py_None ) {} - virtual void Execute() { - if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) { - PyObject* aPyClass = GetPyClass("vtkRenderWindowInteractor"); - vtkRenderWindowInteractor* aVTKObject = aVTKViewWindow->getInteractor(); - myResult = PyVTKObject_New(aPyClass,aVTKObject); - } - } -}; -extern "C" PyObject *libSalomePy_getRenderWindowInteractor(PyObject *self, PyObject *args) -{ - //return ProcessEvent( new TGetRenderWindowInteractorEvent() ); - PyObject * aResult; - Py_BEGIN_ALLOW_THREADS // PAL12755 - aResult = ProcessEvent( new TGetRenderWindowInteractorEvent() ); - Py_END_ALLOW_THREADS // PAL12755 - return aResult; -} - -/*! - Library initialization -*/ -static PyMethodDef Module_Methods[] = -{ - { "getRenderer", libSalomePy_getRenderer, METH_NOARGS }, - { "getRenderWindow", libSalomePy_getRenderWindow, METH_NOARGS }, - { "getRenderWindowInteractor", libSalomePy_getRenderWindow, METH_NOARGS }, - { NULL, NULL } -}; - -extern "C" void initlibSalomePy() -{ - static char modulename[] = "libSalomePy"; - /*PyObject* aModule = */Py_InitModule(modulename, Module_Methods); - if(PyErr_Occurred()){ - PyErr_Print(); - return; - } -} diff --git a/src/SALOME_PYQT/Makefile.in b/src/SALOME_PYQT/Makefile.in deleted file mode 100755 index f3b93eac7..000000000 --- a/src/SALOME_PYQT/Makefile.in +++ /dev/null @@ -1,37 +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 : Patrick GOLDBRONN (CEA) -# Module : SALOME -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@ - - -@COMMENCE@ - -SUBDIRS = SALOME_PYQT_GUI SalomePyQt - -@MODULE@ diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in b/src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in deleted file mode 100644 index 942c34a4a..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile.in +++ /dev/null @@ -1,100 +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 - -ifeq ($(QT_VERS),Qt_3_3_6) -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 sources -ifeq ($(SIP_VERS),v4_old) -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 -SIP_SRC = SalomePyQtGUIcmodule.cc -SIP_FILES = SALOME_PYQT_GUI.sip -endif -endif - -###################### - -# headers -EXPORT_HEADERS = SALOME_PYQT_GUI.h \ - SALOME_PYQT_PyInterp.h \ - SALOME_PYQT_Module.h - -# Library target -LIB = libSalomePyQtGUI.la - -# library sources -LIB_SRC = SALOME_PYQT_PyInterp.cxx \ - SALOME_PYQT_Module.cxx \ - $(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 - -################################## - -# 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/SALOME_PYQT_GUI/SALOME_PYQT_GUI.h b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_GUI.h deleted file mode 100644 index 8c436985c..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_GUI.h +++ /dev/null @@ -1,45 +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 -// -#if !defined ( SALOME_PYQT_GUI_H ) -#define SALOME_PYQT_GUI_H - -// ======================================================== -// set dllexport type for Win platform -#ifdef WNT - -#ifdef SALOME_PYQT_EXPORTS -#define SALOME_PYQT_EXPORT __declspec(dllexport) -#else -#define SALOME_PYQT_EXPORT __declspec(dllimport) -#endif - -#else // WNT - -#define SALOME_PYQT_EXPORT - -#endif // WNT - -// ======================================================== -// avoid warning messages -#ifdef WNT -#pragma warning (disable : 4786) -#pragma warning (disable : 4251) -#endif - -#endif // SALOME_PYQT_GUI_H diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_GUI.sip b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_GUI.sip deleted file mode 100644 index 2f0543851..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_GUI.sip +++ /dev/null @@ -1,4 +0,0 @@ -%Module SalomePyQtGUI - -%Import qtmod.sip - diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx deleted file mode 100644 index 362a9848f..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.cxx +++ /dev/null @@ -1,1875 +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 "PyInterp_Dispatcher.h" -#include "SALOME_PYQT_Module.h" - - -#include "SUIT_ResourceMgr.h" -#include "STD_MDIDesktop.h" -#include "STD_TabDesktop.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Study.h" - -#include "QtxWorkstack.h" -#include "QtxActionMenuMgr.h" -#include "QtxActionToolMgr.h" -#include -#include - -#include -#include -#include -#include -#include - -#ifndef WIN32 -#include "SALOME_PYQT_SipDefs.h" -#endif -#include "sipAPISalomePyQtGUI.h" - -#include "sipqtQWidget.h" -#include "sipqtQPopupMenu.h" - -#include - -using namespace std; - -/*! - \var __DEFAULT_NAME__ - Default name of the module, replaced at the moment of module creation -*/ -const char* __DEFAULT_NAME__ = "SALOME_PYQT_Module"; - -/*! - \var __DEFAULT_GROUP__ - Default menu group number -*/ -const int __DEFAULT_GROUP__ = 40; - -// If __CALL_OLD_METHODS__ macro is not defined the invoking of obsolete Python -// module's methods like setSetting(), definePopup(), etc. is blocked. -// This macro is defined by default (in Makefile) -#ifdef __CALL_OLD_METHODS__ -const bool IsCallOldMethods = true; -#else -const bool IsCallOldMethods = false; -#endif - -// NB: Python requests. -// General rule for Python requests created by SALOME_PYQT_Module: -// all requests should be executed SYNCHRONOUSLY within the main GUI thread. -// However, it is obligatory that ANY Python call is wrapped with a request object, -// so that ALL Python API calls are serialized with PyInterp_Dispatcher. - -/*! - \class SALOME_PYQT_XmlHandler - The class for parsing of the XML resource files. - Used for backward compatibility with existing Python modules. -*/ -class SALOME_PYQT_XmlHandler -{ -public: - SALOME_PYQT_XmlHandler( SALOME_PYQT_Module* module, const QString& fileName ); - void createActions(); - void clearActions(); - void createPopup ( QPopupMenu* menu, - const QString& context, - const QString& parent, - const QString& object ); - -protected: - void createToolBar ( QDomNode& parentNode ); - void createMenu ( QDomNode& parentNode, - const int parentMenuId = -1, - QPopupMenu* parentPopup = 0 ); - - void insertPopupItems( QDomNode& parentNode, - QPopupMenu* menu ); - -private: - SALOME_PYQT_Module* myModule; - QDomDocument myDoc; - QStringList myMenuItems; - QStringList myCurrentMenu; - bool myMenuCreated; -}; - -// SALOME_PYQT_Module class implementation (implements CAM_Module API for -// all Python-based SALOME module - -// While the SalomePyQtGUI library is not imported in Python it's initialization function -// should be called manually (and only once) in order to initialize global sip data -// and to get C API from sip : sipBuildResult for example -#if defined(SIP_VERS_v4_old) || defined(SIP_VERS_v4_new) -#define INIT_FUNCTION initSalomePyQtGUI -#if defined(SIP_STATIC_MODULE) -extern "C" void INIT_FUNCTION(); -#else -PyMODINIT_FUNC INIT_FUNCTION(); -#endif -#else -#define INIT_FUNCTION initlibSalomePyQtGUIc -extern "C" void INIT_FUNCTION(); -#endif - -/*! - * This function creates an instance of SALOME_PYQT_Module object by request - * of and application object when the module is loaded. - */ -extern "C" { - SALOME_PYQT_EXPORT CAM_Module* createModule() { - static bool alreadyInitialized = false; - if ( !alreadyInitialized ) { - // call only once (see above) ! - PyEval_RestoreThread( KERNEL_PYTHON::_gtstate ); - INIT_FUNCTION(); - PyEval_ReleaseThread( KERNEL_PYTHON::_gtstate ); - alreadyInitialized = !alreadyInitialized; - } - return new SALOME_PYQT_Module(); - } -} - -/*! - * Static variables definition - */ -SALOME_PYQT_Module::InterpMap SALOME_PYQT_Module::myInterpMap; -SALOME_PYQT_Module* SALOME_PYQT_Module::myInitModule = 0; - -/*! - * Little trick : provide an access to being activated Python module from outside; - * needed by the SalomePyQt library :( -*/ -SALOME_PYQT_Module* SALOME_PYQT_Module::getInitModule() -{ - return myInitModule; -} - -/*! - * Constructor - */ -SALOME_PYQT_Module::SALOME_PYQT_Module() - : SalomeApp_Module( __DEFAULT_NAME__ ), - myModule( 0 ), - myXmlHandler ( 0 ) -{ -} - -/*! - * Destructor - */ -SALOME_PYQT_Module::~SALOME_PYQT_Module() -{ - if ( myXmlHandler ) - delete myXmlHandler; -} - -/*! - * Initialization of the module. - * Inherited from CAM_Module. - * - * This method is used for creation of the menus, toolbars and other staff. - * There are two ways: - * - for obsolete modules this method first tries to read _.xml - * resource file which contains a menu, toolbars and popup menus description. - * - new modules can create menus by by calling the corresponding methods of SalomePyQt - * Python API in the Python module's initialize() method which is called from here. - * NOTE: if postponed modules loading is not used, the active study might be not defined - * yet at this stage, so initialize() method should not perform any study-based initialization. - */ -void SALOME_PYQT_Module::initialize( CAM_Application* app ) -{ - MESSAGE( "SALOME_PYQT_Module::initialize" ); - - SalomeApp_Module::initialize( app ); - - // Try to get XML resource file name - SUIT_ResourceMgr* aResMgr = getApp()->resourceMgr(); - QString aLang = aResMgr->stringValue( "language", "language", QString::null ); - if ( aLang.isEmpty() ) aLang = QString( "en" ); - QString aName = name( "" ); - QString aFileName = aName + "_" + aLang + ".xml"; - aFileName = aResMgr->path( "resources", aName, aFileName ); - - // create XML handler instance - if ( !myXmlHandler && !aFileName.isEmpty() && QFile::exists( aFileName ) ) - myXmlHandler = new SALOME_PYQT_XmlHandler( this, aFileName ); - - // perform internal initialization and call module's initialize() method - // InitializeReq: request class for internal init() operation - class InitializeReq : public PyInterp_Request - { - public: - InitializeReq( CAM_Application* _app, - SALOME_PYQT_Module* _obj ) - : PyInterp_Request( 0, true ), // this request should be processed synchronously (sync == true) - myApp( _app ), - myObj( _obj ) {} - - protected: - virtual void execute() - { - myObj->init( myApp ); - } - - private: - CAM_Application* myApp; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new InitializeReq( app, this ) ); -} - -/*! - * Activation of the module. - * Inherited from CAM_Module. - */ -bool SALOME_PYQT_Module::activateModule( SUIT_Study* theStudy ) -{ - MESSAGE( "SALOME_PYQT_Module::activateModule" ); - - bool res = SalomeApp_Module::activateModule( theStudy ); - - if ( !res ) - return res; - - // ActivateReq: request class for internal activate() operation - class ActivateReq : public PyInterp_Request - { - public: - ActivateReq( SUIT_Study* _study, - SALOME_PYQT_Module* _obj ) - : PyInterp_Request( 0, true ), // this request should be processed synchronously (sync == true) - myStudy ( _study ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->activate( myStudy ); - } - - private: - SUIT_Study* myStudy; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new ActivateReq( theStudy, this ) ); - - // activate menus, toolbars, etc - setMenuShown( true ); - setToolShown( true ); - - if ( menuMgr() ) - connect( menuMgr(), SIGNAL( menuHighlighted( int, int ) ), - this, SLOT( onMenuHighlighted( int, int ) ) ); - - // create menus & toolbars from XML file if required - if ( myXmlHandler ) - myXmlHandler->createActions(); - - // CustomizeReq: request class for internal customize() operation - class CustomizeReq : public PyInterp_Request - { - public: - CustomizeReq( SUIT_Study* _study, - SALOME_PYQT_Module* _obj ) - : PyInterp_Request( 0, true ), // this request should be processed synchronously (sync == true) - myStudy ( _study ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->customize( myStudy ); - } - - private: - SUIT_Study* myStudy; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new CustomizeReq( theStudy, this ) ); - - return true; -} - -/*! - * Deactivation of the module. - * Inherited from CAM_Module. - */ -bool SALOME_PYQT_Module::deactivateModule( SUIT_Study* theStudy ) -{ - MESSAGE( "SALOME_PYQT_Module::deactivateModule" ); - - if ( menuMgr() ) - disconnect( menuMgr(), SIGNAL( menuHighlighted( int, int ) ), - this, SLOT( onMenuHighlighted( int, int ) ) ); - - // remove menus & toolbars created from XML file if required - if ( myXmlHandler ) - myXmlHandler->clearActions(); - - // deactivate menus, toolbars, etc - setMenuShown( false ); - setToolShown( false ); - - // DeactivateReq: request class for internal deactivate() operation - class DeactivateReq : public PyInterp_LockRequest - { - public: - DeactivateReq( PyInterp_base* _py_interp, - SUIT_Study* _study, - SALOME_PYQT_Module* _obj ) - : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) - myStudy ( _study ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->deactivate( myStudy ); - } - - private: - SUIT_Study* myStudy; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new DeactivateReq( myInterp, theStudy, this ) ); - - return SalomeApp_Module::deactivateModule( theStudy ); -} - -/*! - * Called when study desktop is activated. - * Used for notifying about changing of the active study. - */ -void SALOME_PYQT_Module::studyActivated() -{ - // StudyChangedReq: request class for internal studyChanged() operation - class StudyChangedReq : public PyInterp_Request - { - public: - StudyChangedReq( SUIT_Study* _study, - SALOME_PYQT_Module* _obj ) - : PyInterp_Request( 0, true ), // this request should be processed synchronously (sync == true) - myStudy ( _study ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->studyChanged( myStudy ); - } - - private: - SUIT_Study* myStudy; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new StudyChangedReq( application()->activeStudy(), this ) ); -} - -/*! - * Processes GUI action (from main menu, toolbar or context popup menu) - */ -void SALOME_PYQT_Module::onGUIEvent() -{ - // get sender action - const QObject* obj = sender(); - if ( !obj || !obj->inherits( "QAction" ) ) - return; - QAction* action = (QAction*)obj; - - // get action ID - int id = actionId( action ); - MESSAGE( "SALOME_PYQT_Module::onGUIEvent: id = " << id ); - - // perform synchronous request to Python event dispatcher - class GUIEvent : public PyInterp_LockRequest - { - public: - GUIEvent( PyInterp_base* _py_interp, - SALOME_PYQT_Module* _obj, - int _id ) - : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) - myId ( _id ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->guiEvent( myId ); - } - - private: - int myId; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new GUIEvent( myInterp, this, id ) ); -} - -/*! - * Processes GUI action (from context popup menu, only for XML-based actions!) - */ -void SALOME_PYQT_Module::onGUIEvent( int id ) -{ - // perform synchronous request to Python event dispatcher - class GUIEvent : public PyInterp_LockRequest - { - public: - GUIEvent( PyInterp_base* _py_interp, - SALOME_PYQT_Module* _obj, - int _id ) - : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) - myId ( _id ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->guiEvent( myId ); - } - - private: - int myId; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new GUIEvent( myInterp, this, id ) ); -} - -/*! - * Menu highlight processing - */ -void SALOME_PYQT_Module::onMenuHighlighted( int menu, int submenu ) -{ - if ( !action( menu ) && registered( menu, submenu ) ) { - // perform synchronous request to Python event dispatcher - class MenuHighlightEvent : public PyInterp_LockRequest - { - public: - MenuHighlightEvent( PyInterp_base* _py_interp, - SALOME_PYQT_Module* _obj, - int _menu, - int _submenu ) - : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) - myMenu ( _menu ), - mySubMenu( _submenu ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->menuHighlight( myMenu, mySubMenu ); - } - - private: - int myMenu; - int mySubMenu; - SALOME_PYQT_Module* myObj; - }; - - // Posting the request - PyInterp_Dispatcher::Get()->Exec( new MenuHighlightEvent( myInterp, this, menu, submenu ) ); - } -} - -/*! - Context popup menu request. - Called when user activates popup menu in some window (view, object browser, etc). - */ -void SALOME_PYQT_Module::contextMenuPopup( const QString& theContext, QPopupMenu* thePopupMenu, QString& /*title*/ ) -{ - MESSAGE( "SALOME_PYQT_Module::contextMenuPopup : " << theContext.latin1() ); - // perform synchronous request to Python event dispatcher - class PopupMenuEvent : public PyInterp_LockRequest - { - public: - PopupMenuEvent( PyInterp_base* _py_interp, - SALOME_PYQT_Module* _obj, - const QString& _context, - QPopupMenu* _popup ) - : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true) - myContext( _context ), - myPopup ( _popup ), - myObj ( _obj ) {} - - protected: - virtual void execute() - { - myObj->contextMenu( myContext, myPopup ); - } - - private: - SALOME_PYQT_Module* myObj; - QString myContext; - QPopupMenu* myPopup; - }; - - // Posting the request only if dispatcher is not busy! - // Executing the request synchronously - if ( !PyInterp_Dispatcher::Get()->IsBusy() ) - PyInterp_Dispatcher::Get()->Exec( new PopupMenuEvent( myInterp, this, theContext, thePopupMenu ) ); -} - -/*! - * Defines the dockable window associated with the module. - * To fill the list of windows the correspondind Python module's windows() - * method is called from SALOME_PYQT_Module::init() method. - * By default, ObjectBrowser, PythonConsole and LogWindow are provided. - */ -void SALOME_PYQT_Module::windows( QMap& mappa ) const -{ - // First clear the output parameters - QMap::ConstIterator it; - for ( it = myWindowsMap.begin(); it != myWindowsMap.end(); ++it ) { - mappa[ it.key() ] = it.data(); - } -} - -/*! - * Defines the compatible views which should be opened on module activation. - * To fill the list of views the correspondind Python module's views() - * method is called from SALOME_PYQT_Module::init() method. - * By default, the list is empty. - */ -void SALOME_PYQT_Module::viewManagers( QStringList& listik ) const -{ - for ( QStringList::ConstIterator it = myViewMgrList.begin(); it != myViewMgrList.end(); ++it ) { - listik.append( *it ); - } -} - -/*! - * Performs internal initialization - * - initializes/gets the Python interpreter (one per study) - * - imports the Python module - * - passes the workspace widget to the Python module - * - calls Python module's initialize() method - * - calls Python module's windows() method - * - calls Python module's views() method - */ -void SALOME_PYQT_Module::init( CAM_Application* app ) -{ - // reset interpreter to NULL - myInterp = NULL; - - // get study Id - SalomeApp_Application* anApp = dynamic_cast( app ); - if ( !anApp ) - return; - - SalomeApp_Study* aStudy = dynamic_cast( app->activeStudy() ); - if ( !aStudy ) - return; - int aStudyId = aStudy ? aStudy->studyDS()->StudyId() : 0; - - // initialize Python subinterpreter (on per study) and put it in variable - initInterp( aStudyId ); - if ( !myInterp ) - return; // Error - - // import Python GUI module - importModule(); - if ( !myModule ) - return; // Error - - myInitModule = this; - - // then call Python module's initialize() method - // ... first get python lock - PyLockWrapper aLock = myInterp->GetLockWrapper(); - // ... (the Python module is already imported) - // ... finally call Python module's initialize() method - if(PyObject_HasAttrString(myModule , "initialize")){ - PyObjWrapper res( PyObject_CallMethod( myModule, "initialize", "" ) ); - if( !res ) { - PyErr_Print(); - } - } - - // get the windows list from the Python module by calling windows() method - // ... 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 ); - - if(PyObject_HasAttrString(myModule , "windows")){ - PyObjWrapper res1( PyObject_CallMethod( myModule, "windows", "" ) ); - if( !res1 ) { - PyErr_Print(); - } - else { - myWindowsMap.clear(); - if ( PyDict_Check( res1 ) ) { - PyObject* key; - PyObject* value; - int pos = 0; - while ( PyDict_Next( res1, &pos, &key, &value ) ) { - // parse the return value - // it should be a map: {integer:integer} - int aKey, aValue; - if( key && PyInt_Check( key ) && value && PyInt_Check( value ) ) { - aKey = PyInt_AsLong( key ); - aValue = PyInt_AsLong( value ); - myWindowsMap[ aKey ] = aValue; - } - } - } - } - } - // get the windows list from the Python module by calling views() method - if(PyObject_HasAttrString(myModule , "views")){ - PyObjWrapper res2( PyObject_CallMethod( myModule, "views", "" ) ); - if( !res2 ) { - PyErr_Print(); - } - else { - // parse the return value - // result can be one string... - if ( PyString_Check( res2 ) ) { - myViewMgrList.append( PyString_AsString( res2 ) ); - } - // ... or list of strings - else if ( PyList_Check( res2 ) ) { - int size = PyList_Size( res2 ); - for ( int i = 0; i < size; i++ ) { - PyObject* value = PyList_GetItem( res2, i ); - if( value && PyString_Check( value ) ) { - myViewMgrList.append( PyString_AsString( value ) ); - } - } - } - } - } - myInitModule = 0; -} - -/*! - * Performs internal activation: - * - initializes/gets the Python interpreter (one per study) - * - imports the Python GUI module - * - calls Python module's activate() method (for new modules) - */ -void SALOME_PYQT_Module::activate( SUIT_Study* theStudy ) -{ - // get study Id - SalomeApp_Study* aStudy = dynamic_cast( theStudy ); - int aStudyId = aStudy ? aStudy->studyDS()->StudyId() : 0; - - // initialize Python subinterpreter (on per study) and put it in variable - initInterp( aStudyId ); - if ( !myInterp ) - return; // Error - - // import Python GUI module - importModule(); - if ( !myModule ) - return; // Error - - // get python lock - PyLockWrapper aLock = myInterp->GetLockWrapper(); - - // call Python module's activate() method (for the new modules) - if(PyObject_HasAttrString(myModule , "activate")){ - PyObjWrapper res1( PyObject_CallMethod( myModule, "activate", "" ) ); - if( !res1 ) { - PyErr_Print(); - } - } -} - -/*! - * Performs additional customization after module is activated: - * - gets the Python interpreter (one per study) - * - imports the Python GUI module - * - calls Python module's setSettings() method (obsolete function, used for compatibility with old code) - */ -void SALOME_PYQT_Module::customize ( SUIT_Study* theStudy ) -{ - // get study Id - SalomeApp_Study* aStudy = dynamic_cast( theStudy ); - int aStudyId = aStudy ? aStudy->studyDS()->StudyId() : 0; - - // initialize Python subinterpreter (on per study) and put it in variable - initInterp( aStudyId ); - if ( !myInterp ) - return; // Error - - // import Python GUI module - importModule(); - if ( !myModule ) - return; // Error - - if ( IsCallOldMethods ) { // __CALL_OLD_METHODS__ - // call Python module's setWorkspace() method - setWorkSpace(); - } //__CALL_OLD_METHODS__ - - // get python lock - PyLockWrapper aLock = myInterp->GetLockWrapper(); - - if ( IsCallOldMethods ) { //__CALL_OLD_METHODS__ - // call Python module's setSettings() method (obsolete) - if(PyObject_HasAttrString(myModule , "setSettings")){ - PyObjWrapper res( PyObject_CallMethod( myModule, "setSettings", "" ) ); - if( !res ) { - PyErr_Print(); - } - } - } //__CALL_OLD_METHODS__ -} - -/*! - * Performs internal deactivation: - * - calls Python module's deactivate() method - */ -void SALOME_PYQT_Module::deactivate( SUIT_Study* theStudy ) -{ - // check if the subinterpreter is initialized and Python module is imported - if ( !myInterp || !myModule ) { - // Error! Python subinterpreter should be initialized and module should be imported first! - return; - } - // then call Python module's deactivate() method - if(PyObject_HasAttrString(myModule , "deactivate")){ - PyObjWrapper res( PyObject_CallMethod( myModule, "deactivate", "" ) ); - if( !res ) { - PyErr_Print(); - } - } -} - -/*! - * Called when active the study is actived (user brings its desktop to top) - * - initializes/gets the Python interpreter (one per study) - * - imports the Python GUI module - * - calls Python module's activeStudyChanged() method - */ -void SALOME_PYQT_Module::studyChanged( SUIT_Study* theStudy ) -{ - // get study Id - SalomeApp_Study* aStudy = dynamic_cast( theStudy ); - int aStudyId = aStudy ? aStudy->studyDS()->StudyId() : 0; - - // initialize Python subinterpreter (on per study) and put it in variable - initInterp( aStudyId ); - if ( !myInterp ) - return; // Error - - // import Python GUI module - importModule(); - if ( !myModule ) - return; // Error - - if ( IsCallOldMethods ) { // __CALL_OLD_METHODS__ - // call Python module's setWorkspace() method - setWorkSpace(); - } //__CALL_OLD_METHODS__ - - // get python lock - PyLockWrapper aLock = myInterp->GetLockWrapper(); - - // call Python module's activeStudyChanged() method - if(PyObject_HasAttrString(myModule , "activeStudyChanged")){ - PyObjWrapper res( PyObject_CallMethod( myModule, "activeStudyChanged", "i", aStudyId ) ); - if( !res ) { - PyErr_Print(); - } - } -} - -/*! - * Get module engine, returns nil var if engine is not found in LifeCycleCORBA - */ -Engines::Component_var SALOME_PYQT_Module::getEngine() const -{ - Engines::Component_var comp; - // temporary solution - try { - comp = getApp()->lcc()->FindOrLoad_Component( "FactoryServerPy", name( "" ) ); - } - catch (CORBA::Exception&) { - } - return comp; -} - -/*! - * Get module engine IOR, returns empty string if engine is not found in LifeCycleCORBA - */ -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( "" ); -} - -/*! - * Processes context popup menu request - * - calls Python module's definePopup(...) method (obsolete function, used for compatibility with old code) - * to define the popup menu context - * - parses XML resourses file (if exists) and fills the popup menu with the items) - * - calls Python module's customPopup(...) method (obsolete function, used for compatibility with old code) - * to allow module to customize the popup menu - * - for new modules calls createPopupMenu() function to allow the modules to build the popup menu - * by using insertItem(...) Qt functions. - */ -void SALOME_PYQT_Module::contextMenu( const QString& theContext, QPopupMenu* thePopupMenu ) -{ - // Python interpreter should be initialized and Python module should be - // import first - if ( !myInterp || !myModule ) - return; - - QString aContext( "" ), aObject( "" ), aParent( theContext ); - - if ( IsCallOldMethods && PyObject_HasAttrString(myModule , "definePopup") ) { //__CALL_OLD_METHODS__ - // call definePopup() Python module's function - // this is obsolete function, used only for compatibility reasons - PyObjWrapper res(PyObject_CallMethod( myModule, - "definePopup", - "sss", - aContext.latin1(), - aObject.latin1(), - aParent.latin1() ) ); - if( !res ) { - PyErr_Print(); - } - else { - // parse return value - char *co, *ob, *pa; - if( PyArg_ParseTuple( res, "sss", &co, &ob, &pa ) ) { - aContext = co; - aObject = ob; - aParent = pa; - } - } - } //__CALL_OLD_METHODS__ - - // first try to create menu via XML parser: - // we create popup menus without help of QtxPopupMgr - if ( myXmlHandler ) - myXmlHandler->createPopup( thePopupMenu, aContext, aParent, aObject ); - - PyObjWrapper sipPopup( sipBuildResult( 0, "M", thePopupMenu, sipClass_QPopupMenu ) ); - - // then call Python module's createPopupMenu() method (for new modules) - if ( PyObject_HasAttrString(myModule , "createPopupMenu") ) { - PyObjWrapper res1( PyObject_CallMethod( myModule, - "createPopupMenu", - "Os", - sipPopup.get(), - aContext.latin1() ) ); - if( !res1 ) { - PyErr_Print(); - } - } - - if ( IsCallOldMethods && PyObject_HasAttrString(myModule , "customPopup") ) { //__CALL_OLD_METHODS__ - // call customPopup() Python module's function - // this is obsolete function, used only for compatibility reasons - PyObjWrapper res2( PyObject_CallMethod( myModule, - "customPopup", - "Osss", - sipPopup.get(), - aContext.latin1(), - aObject.latin1(), - aParent.latin1() ) ); - if( !res2 ) { - PyErr_Print(); - } - } //__CALL_OLD_METHODS__ -} - -/*! - * Processes GUI event - * - calls Python module's OnGUIEvent() method - */ -void SALOME_PYQT_Module::guiEvent( const int theId ) -{ - // Python interpreter should be initialized and Python module should be - // import first - if ( !myInterp || !myModule ) - return; - - if ( PyObject_HasAttrString(myModule , "OnGUIEvent") ) { - PyObjWrapper res( PyObject_CallMethod( myModule, "OnGUIEvent", "i", theId ) ); - if( !res ) { - PyErr_Print(); - } - } -} - -/*! - * Menu highlight processing - * - calls Python module's menuActivated(int,int) method - */ -void SALOME_PYQT_Module::menuHighlight( const int menu, const int submenu ) -{ - // Python interpreter should be initialized and Python module should be - // import first - if ( !myInterp || !myModule ) - return; - - if ( PyObject_HasAttrString(myModule , "menuHighlight") ) { - PyObjWrapper res( PyObject_CallMethod( myModule, "menuHighlight", "ii", menu, submenu ) ); - if( !res ) { - PyErr_Print(); - } - } -} - -/*! - * Initialises python subinterpreter (one per study) - */ -void SALOME_PYQT_Module::initInterp( int theStudyId ) -{ - // check study Id - if ( !theStudyId ) { - // Error! Study Id must not be 0! - myInterp = NULL; - return; - } - // try to find the subinterpreter - if( myInterpMap.find( theStudyId ) != myInterpMap.end() ) { - // found! - myInterp = myInterpMap[ theStudyId ]; - return; - } - // not found - create a new one! - /////////////////////////////////////////////////////////////////// - // Attention: the creation of Python interpretor must be protected - // by a C++ Lock because of C threads - /////////////////////////////////////////////////////////////////// - myInterp = new SALOME_PYQT_PyInterp(); - myInterp->initialize(); - myInterpMap[ theStudyId ] = myInterp; - - // import 'salome' module and call 'salome_init' method; - // do it only once on interpreter creation - // ... first get python lock - PyLockWrapper aLock = myInterp->GetLockWrapper(); - // ... then import a module - PyObjWrapper aMod = PyImport_ImportModule( "salome" ); - if( !aMod ) { - // Error! - PyErr_Print(); - return; - } - // ... then call a method - int embedded = 1; - PyObjWrapper aRes( PyObject_CallMethod( aMod, "salome_init", "ii", theStudyId, embedded ) ); - if( !aRes ) { - // Error! - PyErr_Print(); - return; - } -} - -/*! - * Imports Python GUI module and remember the reference to the module - * !!! initInterp() should be called first!!! - */ -void SALOME_PYQT_Module::importModule() -{ - // check if the subinterpreter is initialized - if ( !myInterp ) { - // Error! Python subinterpreter should be initialized first! - myModule = 0; - return; - } - // import Python GUI module and puts it in attribute - // ... first get python lock - PyLockWrapper aLock = myInterp->GetLockWrapper(); - // ... then import a module - QString aMod = QString( name("") ) + "GUI"; - myModule = PyImport_ImportModule( (char*)( aMod.latin1() ) ); - if( !myModule ) { - // Error! - PyErr_Print(); - return; - } -} - -/*! - * Calls .setWorkSpace() method with PyQt QWidget object to use with - * interpreter. - * !!! initInterp() and importModule() should be called first!!! - */ -void SALOME_PYQT_Module::setWorkSpace() -{ - // check if the subinterpreter is initialized and Python module is imported - if ( !myInterp || !myModule ) { - // Error! Python subinterpreter should be initialized and module should be imported first! - return; - } - - // call setWorkspace() method - // ... first get python lock - PyLockWrapper aLock = myInterp->GetLockWrapper(); - - // ... then try to import SalomePyQt module. If it's not possible don't go on. - PyObjWrapper aQtModule( PyImport_ImportModule( "SalomePyQt" ) ); - if( !aQtModule ) { - // Error! - PyErr_Print(); - return; - } - - if ( IsCallOldMethods ) { //__CALL_OLD_METHODS__ - // ... then get workspace object - QWidget* aWorkspace = 0; - if ( getApp()->desktop()->inherits( "STD_MDIDesktop" ) ) { - STD_MDIDesktop* aDesktop = dynamic_cast( getApp()->desktop() ); - if ( aDesktop ) - aWorkspace = aDesktop->workspace(); - } - else if ( getApp()->desktop()->inherits( "STD_TabDesktop" ) ) { - STD_TabDesktop* aDesktop = dynamic_cast( getApp()->desktop() ); - if ( aDesktop ) - aWorkspace = aDesktop->workstack(); - } - PyObjWrapper pyws( sipBuildResult( 0, "M", aWorkspace, sipClass_QWidget ) ); - // ... and finally call Python module's setWorkspace() method (obsolete) - if ( PyObject_HasAttrString(myModule , "setWorkSpace") ) { - PyObjWrapper res( PyObject_CallMethod( myModule, "setWorkSpace", "O", pyws.get() ) ); - if( !res ) { - PyErr_Print(); - } - } - } //__CALL_OLD_METHODS__ -} - -/*! - * Returns default menu group - */ -int SALOME_PYQT_Module::defaultMenuGroup() -{ - return __DEFAULT_GROUP__; -} - -/*! - * The next methods call the parent implementation. - * This is done to open protected methods from CAM_Module class. - * Also these methods are used to register created from outside menus - * in order to enable dynamic menus handling. - */ - - -/*! Create tool bar with name \a name, if it was't created before. - * \retval -1 - if tool manager was't be created. - */ -int SALOME_PYQT_Module::createTool( const QString& name ) -{ - return SalomeApp_Module::createTool( name ); -} -/*! Create tool. - * Insert QAction with id \a id from action map(myActionMap) to tool manager. - *\param id - integer - *\param tBar - integer - *\param idx - integer - *\retval integer id of new action in tool manager. - *\retval Return -1 if something wrong. - */ -int SALOME_PYQT_Module::createTool( const int id, const int tBar, const int idx ) -{ - return SalomeApp_Module::createTool( id, tBar, idx ); -} -/*! Create tool. - * Insert QAction with id \a id from action map(myActionMap) to tool manager. - *\param id - integer - *\param tBar - QString& - *\param idx - integer - *\retval integer id of new action in tool manager. - *\retval Return -1 if something wrong. - */ -int SALOME_PYQT_Module::createTool( const int id, const QString& tBar, const int idx ) -{ - return SalomeApp_Module::createTool( id, tBar, idx ); -} -/*! Create tool. Register action \a a with id \a id. - * Insert QAction to tool manager. - *\param a - QAction - *\param tBar - integer - *\param id - integer - *\param idx - integer - *\retval integer id of new action in tool manager. - *\retval Return -1 if something wrong. - */ -int SALOME_PYQT_Module::createTool( QAction* a, const int tBar, const int id, const int idx ) -{ - return SalomeApp_Module::createTool( a, tBar, id, idx ); -} -/*! Create tool. Register action \a a with id \a id. - * Insert QAction to tool manager. - *\param a - QAction - *\param tBar - QString& - *\param id - integer - *\param idx - integer - *\retval integer id of new action in tool manager. - *\retval Return -1 if something wrong. - */ -int SALOME_PYQT_Module::createTool( QAction* a, const QString& tBar, const int id, const int idx ) -{ - return SalomeApp_Module::createTool( a, tBar, id, idx ); -} - -int SALOME_PYQT_Module::createMenu( const QString& subMenu, const int menu, const int id, const int group, const int idx, const bool constantMenu ) -{ - bool exists = hasMenu( subMenu, menu ); - int regId = SalomeApp_Module::createMenu( subMenu, menu, id, group, idx, true ); - if ( !exists ) - registerMenu( regId, menu, constantMenu ); - return regId; -} - -int SALOME_PYQT_Module::createMenu( const QString& subMenu, const QString& menu, const int id, const int group, const int idx, const bool constantMenu ) -{ - QStringList menus = QStringList::split( "|", menu, false ); - int pid = -1; - for (int i = 0; i < menus.count(); i++ ) { - pid = createMenu( menus[i], pid, -1, -1, -1, constantMenu ); - if ( pid == -1 ) break; - } - if ( pid != -1 ) - pid = createMenu( subMenu, pid, id, group, idx, constantMenu ); - return pid; -} - -int SALOME_PYQT_Module::createMenu( const int id, const int menu, const int group, const int idx, const bool constantMenu ) -{ - int regId = SalomeApp_Module::createMenu( id, menu, group, idx ); - if ( regId != -1 ) - registerMenu( regId, menu, constantMenu ); - return regId; -} - -int SALOME_PYQT_Module::createMenu( const int id, const QString& menu, const int group, const int idx, const bool constantMenu ) -{ - QStringList menus = QStringList::split( "|", menu, false ); - int pid = -1; - for (int i = 0; i < menus.count(); i++ ) { - pid = createMenu( menus[i], pid, -1, -1, -1, constantMenu ); - if ( pid == -1 ) break; - } - if ( pid != -1 ) - pid = createMenu( id, pid, group, idx, constantMenu ); - return pid; -} - -int SALOME_PYQT_Module::createMenu( QAction* a, const int menu, const int id, const int group, const int idx, const bool constantMenu ) -{ - int regId = SalomeApp_Module::createMenu( a, menu, id, group, idx ); - if ( regId != -1 ) - registerMenu( regId, menu, constantMenu ); - return regId; -} - -int SALOME_PYQT_Module::createMenu( QAction* a, const QString& menu, const int id, const int group, const int idx, const bool constantMenu ) -{ - QStringList menus = QStringList::split( "|", menu, false ); - int pid = -1; - for (int i = 0; i < menus.count(); i++ ) { - pid = createMenu( menus[i], pid, -1, -1, -1, constantMenu ); - if ( pid == -1 ) break; - } - if ( pid != -1 ) - pid = createMenu( a, pid, id, group, idx, constantMenu ); - return pid; -} - -QAction* SALOME_PYQT_Module::createSeparator() -{ - return SalomeApp_Module::separator(); -} - -QAction* SALOME_PYQT_Module::action( const int id ) const -{ - return SalomeApp_Module::action( id ); -} - -int SALOME_PYQT_Module::actionId( const QAction* a ) const -{ - return SalomeApp_Module::actionId( a ); -} - -QAction* SALOME_PYQT_Module::createAction( const int id, const QString& text, const QString& icon, - const QString& menu, const QString& tip, const int key, - const bool toggle ) -{ - QIconSet anIcon = loadIcon( icon ); - QAction* a = action( id ); - if ( a ) { - if ( a->text().isEmpty() && !text.isEmpty() ) a->setText( text ); - if ( a->menuText().isEmpty() && !menu.isEmpty() ) a->setMenuText( menu ); - if ( a->iconSet().isNull() && !anIcon.isNull() ) a->setIconSet( anIcon ); - if ( a->statusTip().isEmpty() && !tip.isNull() ) a->setStatusTip( tip ); - if ( a->accel().isEmpty() && key ) a->setAccel( key ); - if ( a->isToggleAction() != toggle ) a->setToggleAction( toggle ); - disconnect( a, SIGNAL( activated() ), this, SLOT( onGUIEvent() ) ); - connect( a, SIGNAL( activated() ), this, SLOT( onGUIEvent() ) ); - } - else { - a = SalomeApp_Module::createAction( id, text, anIcon, menu, tip, key, getApp()->desktop(), toggle, this, SLOT( onGUIEvent() ) ); - } - return a; -} -/*! - * Load icon from resource file - */ -QIconSet SALOME_PYQT_Module::loadIcon( const QString& fileName ) -{ - QIconSet anIcon; - if ( !fileName.isEmpty() ) { - QPixmap pixmap = getApp()->resourceMgr()->loadPixmap( name(""), tr( fileName ) ); - if ( !pixmap.isNull() ) - anIcon = QIconSet( pixmap ); - } - return anIcon; -} - -/*! - * Returns TRUE if menu already exists - */ -bool SALOME_PYQT_Module::hasMenu( const QString& subMenu, const int menu ) -{ - return menuMgr() && menuMgr()->containsMenu( subMenu, menu ); -} - -/*! - * Register the menu - */ -void SALOME_PYQT_Module::registerMenu( const int id, const int menu, const bool constantMenu ) -{ - QAction* a = action( id ); - QAction* s = separator(); - if ( a && a == s ) - return; - if ( !registered( id, menu ) ) - myMenus[menu].append( MenuId( id, constantMenu ) ); -} - -/*! - * Unregister the menu - */ -void SALOME_PYQT_Module::unregisterMenu( const int id, const int menu ) -{ - if ( myMenus.find( menu ) != myMenus.end() ) { - MenuIdList::iterator lit; - for ( lit = myMenus[menu].begin(); lit != myMenus[menu].end(); ++lit ) { - if ( (*lit).id == id ) { - myMenus[menu].remove( lit ); - return; - } - } - } -} - -/*! - * Returns TRUE if the menu is registered - */ -bool SALOME_PYQT_Module::registered( const int id, const int menu ) -{ - MenuMap::iterator mit; - for ( mit = myMenus.begin(); mit != myMenus.end(); ++mit ) { - MenuIdList::iterator lit; - for ( lit = mit.data().begin(); lit != mit.data().end(); ++lit ) { - if ( (*lit).id == id && ( menu == 0 || mit.key() == menu ) ) - return true; - } - } - return false; -} - -/*! - * Returns TRUE if the menu is constant (not removed by clearMenu()). - * This concerns the menus which are created from XML files. - */ -bool SALOME_PYQT_Module::isConstantMenu( const int id, const int menu ) -{ - if ( myMenus.find( menu ) != myMenus.end() ) { - MenuIdList& l = myMenus[ menu ]; - MenuIdList::iterator lit; - for ( lit = l.begin(); lit != l.end(); ++lit ) { - if ( (*lit).id == id && (*lit).constantMenu ) - return true; - } - } - return false; -} - -/*! - * Displays/hides the module's menus. - */ -void SALOME_PYQT_Module::setMenuShown( const bool show ) -{ - QtxActionMenuMgr* mMgr = menuMgr(); - if ( !mMgr ) - return; - - bool upd = mMgr->isUpdatesEnabled(); - mMgr->setUpdatesEnabled( false ); - - SalomeApp_Module::setMenuShown( show ); - - for ( MenuMap::iterator mit = myMenus.begin(); mit != myMenus.end(); ++mit ) { - MenuIdList::iterator lit; - for ( lit = mit.data().begin(); lit != mit.data().end(); ++lit ) - if ( !action( (*lit).id ) ) - mMgr->setShown( (*lit).id, show ); - } - - mMgr->setUpdatesEnabled( upd ); - if ( upd ) - mMgr->update(); -} - -/*! - * Displays/hides the module's toolbars. - */ -void SALOME_PYQT_Module::setToolShown( const bool show ) -{ - SalomeApp_Module::setToolShown( show ); -} - -/*! - * Clears the given menu. - * If = 0 : clear all items in the menu - * If = 0 : clear all menus recursively starting from top-level. - * If = 0 : also unregister all removed actions (not delete!). - */ -bool SALOME_PYQT_Module::clearMenu( const int id, const int menu, const bool removeActions ) -{ - QAction* a = action( id ); - QAction* s = separator(); - typedef QValueList IntList; - if ( a && a != s ) { - // action - IntList menus; - if ( menu != 0 ) { - if ( registered( id, menu ) ) menus.append( menu ); - } - else { - MenuMap::iterator mit; - for ( mit = myMenus.begin(); mit != myMenus.end(); ++mit ) - if ( registered( id, mit.key() ) ) menus.append( mit.key() ); - } - for ( int i = 0; i < menus.count(); i++ ) { - if ( !isConstantMenu( id, menus[i] ) ) { - menuMgr()->remove( menuMgr()->actionId( a ), menus[ i ] ); - unregisterMenu( id, menus[i] ); - } - } - if ( !registered( id ) && removeActions ) - unregisterAction( id ); - } - else { - // menu - if ( id == 0 ) { - if ( menu == 0 ) { - // clear all menus recursively starting from top-level (main menu) - IntList l = myMenus.keys(); - IntList::iterator lit; - for ( lit = l.begin(); lit != l.end(); ++lit ) - clearMenu( 0, *lit, removeActions ); - } - else { - if ( myMenus.find( menu ) != myMenus.end() ) { - // remove all items in the parent menu - IntList l; - MenuIdList::iterator lit; - for ( lit = myMenus[menu].begin(); lit != myMenus[menu].end(); ++lit ) - l.append( (*lit).id ); - for ( int i = 0; i < l.count(); i++ ) - clearMenu( l[i], menu, removeActions ); - if ( myMenus[menu].empty() ) - myMenus.remove( menu ); - } - } - } - else { - MenuMap::iterator mit; - for ( mit = myMenus.begin(); mit != myMenus.end(); ++mit ) { - MenuIdList::iterator lit; - for ( lit = mit.data().begin(); lit != mit.data().end(); ++lit ) { - if ( (*lit).id == id && ( menu == 0 || mit.key() == menu ) ) { - clearMenu( 0, id, removeActions ); // first remove all sub-menus - if ( !isConstantMenu( id, mit.key() ) ) { - menuMgr()->remove( id, mit.key() ); - mit.data().remove( lit ); - break; - } - } - } - } - } - } - return false; -} - -// SALOME_PYQT_XmlHandler class implementation - -// gets an tag name for the dom element [ static ] -// returns an empty string if the element does not have tag name -static QString tagName( const QDomElement& element ) { - return element.tagName().stripWhiteSpace(); -} - -// gets an attribute by it's name for the dom element [ static ] -// returns an empty string if the element does not have such attribute -static QString attribute( const QDomElement& element, const QString& attName ) { - return element.attribute( attName ).stripWhiteSpace(); -} - -// checks the given value for the boolean value [ static ] -// returns TRUE if string represents boolean value: -// - "true", "yes" or "1" for true -// - "false", "no" or "0" for false -// second parameter allows to check certain boolean value -// - 1: true -// - 0: false -// - other value is not taken into account -static bool checkBool( const QString& value, const int check = -1 ) { - QString v = value.lower(); - if ( ( v == "true" || v == "yes" || v == "1" ) && ( check != 0 ) ) - return true; - if ( ( v == "false" || v == "no" || v == "0" ) && ( check != 1 ) ) - return true; - return false; -} - -// checks the given value for the integer value [ static ] -// returns -1 if item is empty or presents and invalid number -static int checkInt( const QString& value, const int def = -1, const int shift = -1 ) -{ - bool bOk; - int val = value.toInt( &bOk ); - if ( !bOk ) val = def; - if ( shift > 0 && bOk && val < 0 ) - val += shift; - return val; -} - -/*! - * Constructor - */ -SALOME_PYQT_XmlHandler::SALOME_PYQT_XmlHandler( SALOME_PYQT_Module* module, - const QString& fileName ) - : myModule( module ), - myMenuCreated( false ) -{ - if (fileName.isEmpty() ) - return; - QFile aFile( fileName ); - if ( !aFile.open( IO_ReadOnly ) ) - return; - if ( !myDoc.setContent( &aFile ) ) { - aFile.close(); - return; - } - aFile.close(); -} - -/*! - * Called by SALOME_PYQT_Module::activate() in order to create actions - * (menus, toolbars, popup menus) - */ -void SALOME_PYQT_XmlHandler::createActions() -{ - // check flag : are menus already created? - if ( myMenuCreated && !IsCallOldMethods ) - return; - - // get document element - QDomElement aDocElem = myDoc.documentElement(); - - // create main menu actions - QDomNodeList aMenuList = aDocElem.elementsByTagName( "menu-item" ); - for ( int i = 0; i < aMenuList.count(); i++ ) { - QDomNode n = aMenuList.item( i ); - createMenu( n ); - } - - // create toolbars actions - QDomNodeList aToolsList = aDocElem.elementsByTagName( "toolbar" ); - for ( int i = 0; i < aToolsList.count(); i++ ) { - QDomNode n = aToolsList.item( i ); - createToolBar( n ); - } - // set flag : menus are already created - myMenuCreated = true; -} - -/*! - * Called by SALOME_PYQT_Module::deactivate() in order to remove actions - * (menus, toolbars, popup menus) - */ -void SALOME_PYQT_XmlHandler::clearActions() -{ - for ( uint i = 0; i < myMenuItems.count(); i++ ) { - QMenuData* md = dynamic_cast( myModule->getApp()->desktop()->menuBar() ); - QStringList menus = QStringList::split( ":", myMenuItems[ i ] ); - for ( uint j = 0; j < menus.count(); j++) { - int id = menus[ j ].toInt(); - QMenuData* smd; - QMenuItem* mi = md->findItem( id, &smd ); - if ( mi && md == smd ) { - if ( j == menus.count()-1 || !mi->popup() ) { // last item or not popup - md->removeItem( id ); - break; - } - else if ( mi->popup() ) - md = dynamic_cast( mi->popup() ); - } - else - break; - } - } - myMenuItems.clear(); -} - -/*! - * Creates popup menu - */ -void SALOME_PYQT_XmlHandler::createPopup( QPopupMenu* menu, - const QString& context, - const QString& parent, - const QString& object ) -{ - // get document element - QDomElement aDocElem = myDoc.documentElement(); - - // get popup menus actions - QDomNodeList aPopupList = aDocElem.elementsByTagName( "popupmenu" ); - for ( int i = 0; i < aPopupList.count(); i++ ) { - QDomNode n = aPopupList.item( i ); - if ( !n.isNull() && n.isElement() ) { - QDomElement e = n.toElement(); - QString lab = attribute( e, "label-id" ); - QString ctx = attribute( e, "context-id" ); - QString prt = attribute( e, "parent-id" ); - QString obj = attribute( e, "object-id" ); - if ( ctx == context && prt == parent && obj == object ) { - insertPopupItems( n, menu ); - break; - } - } - } -} - -/*! - Create main menu with child actions - */ -void SALOME_PYQT_XmlHandler::createMenu( QDomNode& parentNode, - const int parentMenuId, - QPopupMenu* parentPopup ) -{ - if ( !myModule ) - return; - - if ( parentNode.isNull() ) - return; - - QDomElement parentElement = parentNode.toElement(); - if ( !parentElement.isNull() ) { - QString plabel = attribute( parentElement, "label-id" ); - int pid = checkInt( attribute( parentElement, "item-id" ) ); - int ppos = checkInt( attribute( parentElement, "pos-id" ) ); - int group = checkInt( attribute( parentElement, "group-id" ), - myModule->defaultMenuGroup() ); - if ( !plabel.isEmpty() ) { - QPopupMenu* popup = 0; - int menuId = -1; - // create menu - if ( IsCallOldMethods ) { // __CALL_OLD_METHODS__ - SUIT_Desktop* desktop = myModule->getApp()->desktop(); - if ( parentMenuId == -1 ) { // top-level menu - QMenuBar* mb = desktop->menuBar(); - QMenuItem* mi = mb->findItem( pid ); - if ( mi ) popup = mi->popup(); - if ( !popup ) { - popup = new QPopupMenu( desktop ); - ppos = checkInt( attribute( parentElement, "pos-id" ), -1, mb->count() ); - menuId = mb->insertItem( plabel, popup, pid, ppos ); - myCurrentMenu.push_back( QString::number( menuId ) ); - myMenuItems.append( myCurrentMenu.join( ":" ) ); - } - else { - menuId = pid; - myCurrentMenu.push_back( QString::number( menuId ) ); - } - } - else { - // parentPopup should not be 0 here! - QMenuItem* mi = parentPopup->findItem( pid ); - if ( mi ) popup = mi->popup(); - if ( !popup ) { - popup = new QPopupMenu( desktop ); - ppos = checkInt( attribute( parentElement, "pos-id" ), -1, popup->count() ); - menuId = parentPopup->insertItem( plabel, popup, pid, ppos ); - myCurrentMenu.push_back( QString::number( menuId ) ); - myMenuItems.append( myCurrentMenu.join( ":" ) ); - } - else { - menuId = pid; - myCurrentMenu.push_back( QString::number( menuId ) ); - } - } - } - else { //!__CALL_OLD_METHODS__ - menuId = myModule->createMenu( plabel, // label - parentMenuId, // parent menu ID, should be -1 for main menu - pid, // ID - group, // group ID - ppos, // position - true ); // create constant menu (not removed by clearMenu()) - } // __CALL_OLD_METHODS__ - QDomNode node = parentNode.firstChild(); - while ( !node.isNull() ) { - if ( node.isElement() ) { - QDomElement elem = node.toElement(); - QString aTagName = tagName( elem ); - if ( aTagName == "popup-item" ) { - int id = checkInt( attribute( elem, "item-id" ) ); - int pos = checkInt( attribute( elem, "pos-id" ) ); - int group = checkInt( attribute( elem, "group-id" ), - myModule->defaultMenuGroup() ); - QString label = attribute( elem, "label-id" ); - QString icon = attribute( elem, "icon-id" ); - QString tooltip = attribute( elem, "tooltip-id" ); - QString accel = attribute( elem, "accel-id" ); - bool toggle = checkBool( attribute( elem, "toggle-id" ) ); - ////QString execute = attribute( elem, "execute-action" ); // not used - - // -1 action ID is not allowed : it means that attribute is missed in the XML file! - // also check if the action with given ID is already created - if ( id != -1 ) { - if ( IsCallOldMethods ) { // __CALL_OLD_METHODS__ - QIconSet iconSet = myModule->loadIcon( icon ); - pos = checkInt( attribute( elem, "pos-id" ), -1, popup->count() ); - int aid = iconSet.isNull() ? popup->insertItem( label, - myModule, - SLOT( onGUIEvent(int) ), - QKeySequence( accel ), - id, - pos ) : - popup->insertItem( iconSet, - label, - myModule, - SLOT( onGUIEvent(int) ), - QKeySequence( accel ), - id, - pos ); - myCurrentMenu.push_back( QString::number( aid ) ); - myMenuItems.append( myCurrentMenu.join( ":" ) ); - myCurrentMenu.pop_back(); - if ( toggle ) - popup->setItemChecked( aid, checkBool( attribute( elem, "toggle-id" ), 1 ) ); - } - else { //!__CALL_OLD_METHODS__ - // create menu action - QAction* action = myModule->createAction( id, // ID - tooltip, // tooltip - icon, // icon - label, // menu text - tooltip, // status-bar text - QKeySequence( accel ), // keyboard accelerator - toggle ); // toogled action - myModule->createMenu( action, // action - menuId, // parent menu ID - id, // ID (same as for createAction()) - group, // group ID - pos, // position - true ); // create constant menu (not removed by clearMenu()) - } // __CALL_OLD_METHODS__ - } - } - else if ( aTagName == "submenu" ) { - // create sub-menu - createMenu( node, menuId, popup ); - } - else if ( aTagName == "separator" ) { - // create menu separator - int id = checkInt( attribute( elem, "item-id" ) ); // separator can have ID - int pos = checkInt( attribute( elem, "pos-id" ) ); - int group = checkInt( attribute( elem, "group-id" ), - myModule->defaultMenuGroup() ); - if ( IsCallOldMethods ) { // __CALL_OLD_METHODS__ - pos = checkInt( attribute( elem, "pos-id" ), -1, popup->count() ); - int sid = popup->insertSeparator( pos ); - myCurrentMenu.push_back( QString::number( sid ) ); - myMenuItems.append( myCurrentMenu.join( ":" ) ); - myCurrentMenu.pop_back(); - } - else { //!__CALL_OLD_METHODS__ - QAction* action = myModule->createSeparator(); - myModule->createMenu( action, // separator action - menuId, // parent menu ID - id, // ID - group, // group ID - pos, // position - true ); // create constant menu (not removed by clearMenu()) - } // __CALL_OLD_METHODS__ - } - } - node = node.nextSibling(); - } - myCurrentMenu.pop_back(); - } - } -} - -/*! - Create a toolbar with child actions - */ -void SALOME_PYQT_XmlHandler::createToolBar( QDomNode& parentNode ) -{ - if ( !myModule ) - return; - - if ( parentNode.isNull() ) - return; - - QDomElement parentElement = parentNode.toElement(); - if ( !parentElement.isNull() ) { - QString aLabel = attribute( parentElement, "label-id" ); - if ( !aLabel.isEmpty() ) { - // create toolbar - int tbId = myModule->createTool( aLabel ); - QDomNode node = parentNode.firstChild(); - while ( !node.isNull() ) { - if ( node.isElement() ) { - QDomElement elem = node.toElement(); - QString aTagName = tagName( elem ); - if ( aTagName == "toolbutton-item" ) { - int id = checkInt( attribute( elem, "item-id" ) ); - int pos = checkInt( attribute( elem, "pos-id" ) ); - QString label = attribute( elem, "label-id" ); - QString icon = attribute( elem, "icon-id" ); - QString tooltip = attribute( elem, "tooltip-id" ); - QString accel = attribute( elem, "accel-id" ); - bool toggle = checkBool( attribute( elem, "toggle-id" ) ); - ////QString execute = attribute( elem, "execute-action" ); // not used - - // -1 action ID is not allowed : it means that attribute is missed in the XML file! - // also check if the action with given ID is already created - if ( id != -1 ) { - // create toolbar action - QAction* action = myModule->createAction( id, // ID - tooltip, // tooltip - icon, // icon - label, // menu text - tooltip, // status-bar text - QKeySequence( accel ), // keyboard accelerator - toggle ); // toogled action - myModule->createTool( action, tbId, -1, pos ); - } - } - else if ( aTagName == "separatorTB" || aTagName == "separator" ) { - // create toolbar separator - int pos = checkInt( attribute( elem, "pos-id" ) ); - QAction* action = myModule->createSeparator(); - myModule->createTool( action, tbId, -1, pos ); - } - } - node = node.nextSibling(); - } - } - } -} - -/*! - * Fill popup menu with items - */ -void SALOME_PYQT_XmlHandler::insertPopupItems( QDomNode& parentNode, QPopupMenu* menu ) -{ - if ( !myModule ) - return; - - if ( parentNode.isNull() ) - return; - - // we create popup menus without help of QtxPopupMgr - QDomNode node = parentNode.firstChild(); - while ( !node.isNull() ) { - if ( node.isElement() ) { - QDomElement elem = node.toElement(); - QString aTagName = tagName( elem ); - if ( aTagName == "popup-item" ) { - // insert a command item - int id = checkInt( attribute( elem, "item-id" ) ); - int pos = checkInt( attribute( elem, "pos-id" ) ); - QString label = attribute( elem, "label-id" ); - QString icon = attribute( elem, "icon-id" ); - /////QString tooltip = attribute( elem, "tooltip-id" ); // not used - QString accel = attribute( elem, "accel-id" ); - /////bool toggle = checkBool( attribute( elem, "toggle-id" ) ); // not used - /////QString execute = attribute( elem, "execute-action" ); // not used - - QIconSet anIcon; - if ( !icon.isEmpty() ) { - QPixmap pixmap = myModule->getApp()->resourceMgr()->loadPixmap( myModule->name(""), icon ); - if ( !pixmap.isNull() ) - anIcon = QIconSet( pixmap ); - } - - // -1 action ID is not allowed : it means that attribute is missed in the XML file! - // also check if the action with given ID is already created - if ( id != -1 ) { - menu->insertItem( anIcon, label, myModule, SLOT( onGUIEvent(int) ), QKeySequence( accel ), id, pos ); - } - } - else if ( aTagName == "submenu" ) { - // create sub-menu - int id = checkInt( attribute( elem, "item-id" ) ); - int pos = checkInt( attribute( elem, "pos-id" ) ); - QString label = attribute( elem, "label-id" ); - QString icon = attribute( elem, "icon-id" ); - - QIconSet anIcon; - if ( !icon.isEmpty() ) { - QPixmap pixmap = myModule->getApp()->resourceMgr()->loadPixmap( myModule->name(""), icon ); - if ( !pixmap.isNull() ) - anIcon = QIconSet( pixmap ); - } - - QPopupMenu* newPopup = new QPopupMenu( menu, label ); - menu->insertItem( anIcon, label, newPopup, id, pos ); - insertPopupItems( node, newPopup ); - } - else if ( aTagName == "separator" ) { - // create menu separator - int pos = checkInt( attribute( elem, "pos-id" ) ); - menu->insertSeparator( pos ); - } - } - node = node.nextSibling(); - } -} diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h deleted file mode 100644 index 7d20a3400..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_Module.h +++ /dev/null @@ -1,208 +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 -// - -#ifndef SALOME_PYQT_MODULE_H -#define SALOME_PYQT_MODULE_H - -#include "SALOME_PYQT_GUI.h" - -#include "SALOME_PYQT_PyInterp.h" // this include must be first (see PyInterp_base.h)! -#include "SalomeApp_Module.h" -#include -#include -#include -#include -#include - -#include -#include CORBA_CLIENT_HEADER(SALOME_Component) - -class SALOME_PYQT_XmlHandler; - -class SALOME_PYQT_EXPORT SALOME_PYQT_Module: public SalomeApp_Module -{ - Q_OBJECT; - - /****************************** - * Data - ******************************/ - -private: - typedef std::map InterpMap; - - /* study-to-subinterpreter map */ - static InterpMap myInterpMap; - /* current Python subinterpreter */ - SALOME_PYQT_PyInterp* myInterp; - /* Python GUI module loaded */ - PyObjWrapper myModule; - /* Python GUI being initialized (not zero only during the initialization)*/ - static SALOME_PYQT_Module* myInitModule; - - /* own menus list */ - struct MenuId - { - int id; - bool constantMenu; - MenuId() : id( -1 ), constantMenu( false ) {} - MenuId( const int _id, const bool _constantMenu ) - : id( _id ), constantMenu( _constantMenu ) {} - }; - typedef QValueList MenuIdList; - typedef QMap MenuMap; - MenuMap myMenus; - - /* XML resource file parser */ - SALOME_PYQT_XmlHandler* myXmlHandler; - /* windows map*/ - QMap myWindowsMap; - /* compatible view managers list */ - QStringList myViewMgrList; - - /****************************** - * Construction/destruction - ******************************/ - -public: - /* constructor */ - SALOME_PYQT_Module(); - /* destructor */ - ~SALOME_PYQT_Module(); - - /* get module engine */ - Engines::Component_var getEngine() const; - - /****************************** - * Inherited from SalomeApp_Module - ******************************/ - -public: - /* little trick : provide an access to being activated Python module from outside; - needed by the SalomePyQt library :( - */ - static SALOME_PYQT_Module* getInitModule(); - - /* initialization */ - void initialize ( CAM_Application* ); - - /* getting windows list */ - void windows ( QMap& ) const; - /* getting compatible viewer managers list */ - void viewManagers( QStringList& ) const; - - /* context popup menu request */ - void contextMenuPopup( const QString&, QPopupMenu*, QString& ); - - /* get module engine IOR */ - virtual QString engineIOR() const; - - /* called when study desktop is activated */ - virtual void studyActivated(); - - /* returns default menu group */ - static int defaultMenuGroup(); - - /* working with toolbars : open protected methods */ - int createTool( const QString& ); - int createTool( const int, const int, const int = -1 ); - int createTool( const int, const QString&, const int = -1 ); - int createTool( QAction*, const int, const int = -1, const int = -1 ); - int createTool( QAction*, const QString&, const int = -1, const int = -1 ); - - /* working with menus : open protected methods */ - int createMenu( const QString&, const int, const int = -1, const int = -1, const int = -1, const bool = false ); - int createMenu( const QString&, const QString&, const int = -1, const int = -1, const int = -1, const bool = false ); - int createMenu( const int, const int, const int = -1, const int = -1, const bool = false ); - int createMenu( const int, const QString&, const int = -1, const int = -1, const bool = false ); - int createMenu( QAction*, const int, const int = -1, const int = -1, const int = -1, const bool = false ); - int createMenu( QAction*, const QString&, const int = -1, const int = -1, const int = -1, const bool = false ); - - /* clear given menu */ - bool clearMenu( const int = 0, const int = 0, const bool = true ); - - /* create separator : open protected method */ - QAction* createSeparator(); - - /* working with actions : open protected methods */ - QAction* action( const int ) const; - int actionId( const QAction* ) const; - QAction* createAction( const int, const QString&, const QString&, const QString&, - const QString&, const int, const bool = false ); - /* load icon from resource file */ - QIconSet loadIcon( const QString& fileName ); - - /* Show/hide menus/toolbars */ - void setMenuShown( const bool ); - void setToolShown( const bool ); - -public slots: - /* activation */ - virtual bool activateModule( SUIT_Study* ); - /* deactivation */ - virtual bool deactivateModule( SUIT_Study* ); - - /****************************** - * Internal methods - ******************************/ - -public slots: - /* GUI action processing slots */ - void onGUIEvent(); - void onGUIEvent( int ); - -protected: - /* Menu processing */ - bool hasMenu( const QString&, const int ); - void registerMenu( const int, const int, const bool = false ); - void unregisterMenu( const int, const int ); - bool registered( const int, const int = 0 ); - bool isConstantMenu( const int, const int ); - -protected slots: - void onMenuHighlighted( int, int ); - -private: - /* internal initizalition */ - void init ( CAM_Application* ); - /* internal activation */ - void activate ( SUIT_Study* ); - /* internal deactivation */ - void deactivate ( SUIT_Study* ); - /* customization */ - void customize ( SUIT_Study* ); - /* study activation */ - void studyChanged( SUIT_Study* ); - /* context popup menu processing */ - void contextMenu( const QString&, QPopupMenu* ); - /* GUI event processing */ - void guiEvent( const int ); - /* Menu highlight processing */ - void menuHighlight( const int, const int ); - - /* initialize a Python subinterpreter */ - void initInterp ( int ); - /* import a Python GUI module */ - void importModule(); - /* set workspace to Python GUI module */ - void setWorkSpace(); - - friend class SALOME_PYQT_XmlHandler; -}; - -#endif // SALOME_PYQT_MODULE_H diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.cxx b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.cxx deleted file mode 100644 index f25a2ca05..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.cxx +++ /dev/null @@ -1,97 +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 -// -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// File : SALOME_PYQT_PyInterp.cxx -// Author : Christian CAREMOLI, Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -#include "SALOME_PYQT_PyInterp.h" // this include must be first (see PyInterp_base.h)! -#include "utilities.h" -#include "Container_init_python.hxx" - -using namespace std; - - -/*! - * constructor : the main SALOME Python interpreter is used for PyQt GUI. - * calls initialize method defined in base class, which calls virtual methods - * initstate & initcontext redefined here - */ -SALOME_PYQT_PyInterp::SALOME_PYQT_PyInterp(): PyInterp_base() -{ -} - -SALOME_PYQT_PyInterp::~SALOME_PYQT_PyInterp() -{ -} - -bool SALOME_PYQT_PyInterp::initState() -{ - /* - * The GIL is assumed to not be held on the call - * The GIL is acquired in initState and will be held on initState exit - * It is the caller responsability to release the lock on exit if needed - */ - SCRUTE(KERNEL_PYTHON::_gtstate); - _tstate = KERNEL_PYTHON::_gtstate; - PyEval_AcquireThread(_tstate); - SCRUTE(_tstate); - PyEval_ReleaseThread(_tstate); - return true; -} - -bool SALOME_PYQT_PyInterp::initContext() -{ - /* - * The GIL is assumed to be held - * It is the caller responsability to acquire the GIL before calling initContext - * It will still be held on initContext exit - */ - _g = PyDict_New(); // create interpreter dictionnary context - PyObject *bimod = PyImport_ImportModule("__builtin__"); - PyDict_SetItemString(_g, "__builtins__", bimod); - Py_DECREF(bimod); - return true; -} - -int SALOME_PYQT_PyInterp::run(const char *command) -{ - MESSAGE("compile"); - PyObject *code = Py_CompileString((char *)command,"PyGUI",Py_file_input); - if(!code){ - // Une erreur s est produite en general SyntaxError - PyErr_Print(); - return -1; - } - //#if PY_VERSION_HEX < 0x02040000 // python version earlier than 2.4.0 - // PyObject *r = PyEval_EvalCode(code,_g,_g); - //#else - PyObject *r = PyEval_EvalCode((PyCodeObject *)code,_g,_g); - //#endif - Py_DECREF(code); - if(!r){ - // Une erreur s est produite a l execution - PyErr_Print(); - return -1 ; - } - Py_DECREF(r); - return 0; -} diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.h b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.h deleted file mode 100644 index 42ac5d2d7..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_PyInterp.h +++ /dev/null @@ -1,40 +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 -// - -#ifndef SALOME_PYQT_PYINTERP_H -#define SALOME_PYQT_PYINTERP_H - -#include "SALOME_PYQT_GUI.h" - -#include "PyInterp_base.h" // this include must be first (see PyInterp_base.h)! - -class SALOME_PYQT_EXPORT SALOME_PYQT_PyInterp : public PyInterp_base -{ - public: - SALOME_PYQT_PyInterp(); - ~SALOME_PYQT_PyInterp(); - - int run(const char *command); - - protected: - virtual bool initState(); - virtual bool initContext(); -}; - -#endif // SALOME_PYQT_PYINTERP_H diff --git a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_SipDefs.h.in b/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_SipDefs.h.in deleted file mode 100644 index 2a427ce4c..000000000 --- a/src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_SipDefs.h.in +++ /dev/null @@ -1 +0,0 @@ -#define SIP_VERS_@SIP_VERS@ diff --git a/src/SALOME_PYQT/SalomePyQt/Makefile.in b/src/SALOME_PYQT/SalomePyQt/Makefile.in deleted file mode 100644 index 406187890..000000000 --- a/src/SALOME_PYQT/SalomePyQt/Makefile.in +++ /dev/null @@ -1,132 +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 -ifeq ($(QT_VERS),Qt_3_3_6) -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 deleted file mode 100644 index d76d0bd1d..000000000 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.cxx +++ /dev/null @@ -1,1366 +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 "SALOME_PYQT_Module.h" // this include must be first!!! -#include "SalomePyQt.h" - -#include -#include -#include -#include -#include -#include - -#include "SALOME_Event.hxx" - -#include "SUIT_Session.h" -#include "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Tools.h" -#include "STD_MDIDesktop.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Study.h" -#include "LightApp_SelectionMgr.h" -#include "OB_Browser.h" -#include "QtxAction.h" - -using namespace std; - -/*! - \return active application object [ static ] -*/ -static SalomeApp_Application* getApplication() { - if ( SUIT_Session::session() ) - return dynamic_cast( SUIT_Session::session()->activeApplication() ); - return NULL; -} - -/*! - \return active study or 0 if there is no study opened [ static ] -*/ -static SalomeApp_Study* getActiveStudy() -{ - if ( getApplication() ) - return dynamic_cast( getApplication()->activeStudy() ); - return 0; -} - -static QMap SelMap; - -/*! - Creates or finds the selection object (one per study). -*/ -SALOME_Selection* SALOME_Selection::GetSelection( SalomeApp_Application* app ) -{ - SALOME_Selection* sel = 0; - if ( app && SelMap.find( app ) != SelMap.end() ) - sel = SelMap[ app ]; - else - sel = SelMap[ app ] = new SALOME_Selection( app ); - return sel; -} - -/*! - Selection constructor. -*/ -SALOME_Selection::SALOME_Selection( QObject* p ) : QObject( p ), mySelMgr( 0 ) -{ - SalomeApp_Application* app = dynamic_cast( p ); - if ( app ) { - mySelMgr = app->selectionMgr(); - connect( mySelMgr, SIGNAL( selectionChanged() ), this, SIGNAL( currentSelectionChanged() ) ); - connect( mySelMgr, SIGNAL( destroyed() ), this, SLOT ( onSelMgrDestroyed() ) ); - } -} -/*! - Selection destructor. Removes selection object from the map. -*/ -SALOME_Selection::~SALOME_Selection() -{ - SalomeApp_Application* app = dynamic_cast( parent() ); - if ( app && SelMap.find( app ) != SelMap.end() ) - SelMap.remove( app ); -} - -/*! - Watches for the selection manager destroying when study is closed. -*/ -void SALOME_Selection::onSelMgrDestroyed() -{ - mySelMgr = 0; -} - -/*! - Clears the selection. -*/ -void SALOME_Selection::Clear() -{ - class TEvent: public SALOME_Event { - LightApp_SelectionMgr* mySelMgr; - public: - TEvent( LightApp_SelectionMgr* selMgr ) - : mySelMgr( selMgr ) {} - virtual void Execute() { - if ( mySelMgr ) - mySelMgr->clearSelected(); - } - }; - ProcessVoidEvent( new TEvent( mySelMgr ) ); -} - -/*! - Clears the selection. -*/ -void SALOME_Selection::ClearIObjects() -{ - Clear(); -} - -/*! - Removes all selection filters. -*/ -void SALOME_Selection::ClearFilters() -{ - class TEvent: public SALOME_Event { - LightApp_SelectionMgr* mySelMgr; - public: - TEvent( LightApp_SelectionMgr* selMgr ) - : mySelMgr( selMgr ) {} - virtual void Execute() { - if ( mySelMgr ) - mySelMgr->clearFilters(); - } - }; - ProcessVoidEvent( new TEvent( mySelMgr ) ); -} - -/*! - \return desktop (0 if error) -*/ -class TGetDesktopEvent: public SALOME_Event { -public: - typedef QWidget* TResult; - TResult myResult; - TGetDesktopEvent() : myResult( 0 ) {} - virtual void Execute() { - if ( getApplication() ) - myResult = (QWidget*)( getApplication()->desktop() ); - } -}; - -/*! - \return desktop -*/ -QWidget* SalomePyQt::getDesktop() -{ - return ProcessEvent( new TGetDesktopEvent() ); -} - -/*! - \return workspace widget (0 if error) -*/ -class TGetMainFrameEvent: public SALOME_Event { -public: - typedef QWidget* TResult; - TResult myResult; - TGetMainFrameEvent() : myResult( 0 ) {} - virtual void Execute() { - if ( getApplication() ) { - SUIT_Desktop* aDesktop = getApplication()->desktop(); - myResult = (QWidget*)( aDesktop->centralWidget() ); - } - } -}; - -/*! - \return workspace widget (0 if error) -*/ -QWidget* SalomePyQt::getMainFrame() -{ - return ProcessEvent( new TGetMainFrameEvent() ); -} - -/*! - SalomePyQt::getMainMenuBar - Gets main menu. Returns 0 in error. -*/ -class TGetMainMenuBarEvent: public SALOME_Event { -public: - typedef QMenuBar* TResult; - TResult myResult; - TGetMainMenuBarEvent() : myResult( 0 ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - myResult = anApp->desktop()->menuBar(); - } - } -}; - -/*! - \return main menu - \retval 0 in error. -*/ -QMenuBar* SalomePyQt::getMainMenuBar() -{ - return ProcessEvent( new TGetMainMenuBarEvent() ); -} - -/*! - SalomePyQt::getPopupMenu - Gets an main menu's child popup menu by its id -*/ -class TGetPopupMenuEvent: public SALOME_Event { -public: - typedef QPopupMenu* TResult; - TResult myResult; - MenuName myMenuName; - TGetPopupMenuEvent( const MenuName menu ) : myResult( 0 ), myMenuName( menu ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - QMenuBar* menuBar = anApp->desktop()->menuBar(); - if ( menuBar ) { - QString menu; - switch( myMenuName) { - case File: - menu = QObject::tr( "MEN_DESK_FILE" ); break; - case View: - menu = QObject::tr( "MEN_DESK_VIEW" ); break; - case Edit: - menu = QObject::tr( "MEN_DESK_EDIT" ); break; - case Preferences: - menu = QObject::tr( "MEN_DESK_PREFERENCES" ); break; - case Tools: - menu = QObject::tr( "MEN_DESK_TOOLS" ); break; - case Window: - menu = QObject::tr( "MEN_DESK_WINDOW" ); break; - case Help: - menu = QObject::tr( "MEN_DESK_HELP" ); break; - } - for ( int i = 0; i < menuBar->count() && !myResult; i++ ) { - QMenuItem* item = menuBar->findItem( menuBar->idAt( i ) ); - if ( item && item->text() == menu && item->popup() ) - myResult = item->popup(); - } - } - } - } -}; - -/*! - \return popup menu - \param menu - menu name -*/ -QPopupMenu* SalomePyQt::getPopupMenu( const MenuName menu ) -{ - return ProcessEvent( new TGetPopupMenuEvent( menu ) ); -} - -/*! - SalomePyQt::getStudyId - Returns active study's ID or 0 if there is no active study. -*/ -class TGetStudyIdEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - TGetStudyIdEvent() : myResult( 0 ) {} - virtual void Execute() { - if ( SalomeApp_Study* aStudy = getActiveStudy() ) { - myResult = aStudy->studyDS()->StudyId(); - } - } -}; - -/*! - SalomePyQt::getStudyId - Returns active study's ID or 0 if there is no active study. -*/ -int SalomePyQt::getStudyId() -{ - return ProcessEvent( new TGetStudyIdEvent() ); -} - -/*! - SalomePyQt::getSelection - Creates a Selection object (to provide a compatibility with previous SALOME GUI). -*/ -class TGetSelectionEvent: public SALOME_Event { -public: - typedef SALOME_Selection* TResult; - TResult myResult; - TGetSelectionEvent() : myResult( 0 ) {} - virtual void Execute() { - myResult = SALOME_Selection::GetSelection( getApplication() ); - } -}; - -/*! - Creates a Selection object (to provide a compatibility with previous SALOME GUI). - \return just created selection object -*/ -SALOME_Selection* SalomePyQt::getSelection() -{ - return ProcessEvent( new TGetSelectionEvent() ); -} - -/*! - SalomePyQt::putInfo - Puts an information message to the desktop's status bar - (with optional delay parameter given in seconds) -*/ -class TPutInfoEvent: public SALOME_Event { - QString myMsg; - int mySecs; -public: - TPutInfoEvent( const QString& msg, const int sec = 0 ) : myMsg( msg ), mySecs( sec ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - anApp->putInfo( myMsg, mySecs * 1000 ); - } - } -}; - -/*! - Puts an information message to the desktop's status bar - (with optional delay parameter given in seconds) - \param msg - message text - \param sec - delay in seconds -*/ -void SalomePyQt::putInfo( const QString& msg, const int sec ) -{ - ProcessVoidEvent( new TPutInfoEvent( msg, sec ) ); -} - -/*! - SalomePyQt::getActiveComponent - Returns an active component name or empty string if there is no active component -*/ -class TGetActiveComponentEvent: public SALOME_Event { -public: - typedef QString TResult; - TResult myResult; - TGetActiveComponentEvent() {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - if ( CAM_Module* mod = anApp->activeModule() ) { - myResult = mod->name(""); - } - } - } -}; - -/*! - \return an active component name or empty string if there is no active component -*/ -const QString SalomePyQt::getActiveComponent() -{ - return ProcessEvent( new TGetActiveComponentEvent() ); -} - -/*! - SalomePyQt::updateObjBrowser - Updates an Object Browser of a given study. - If <= 0 the active study's object browser is updated. - parameter is obsolete parameter and currently not used. To be removed lately. -*/ -void SalomePyQt::updateObjBrowser( const int studyId, bool updateSelection ) -{ - class TEvent: public SALOME_Event { - int myStudyId; - bool myUpdateSelection; - public: - TEvent( const int studyId, bool updateSelection ) - : myStudyId( studyId ), myUpdateSelection( updateSelection ) {} - virtual void Execute() { - if ( SUIT_Session::session() ) { - if ( getActiveStudy() && myStudyId <= 0 ) - myStudyId = getActiveStudy()->id(); - if ( myStudyId > 0 ) { - QPtrList apps = SUIT_Session::session()->applications(); - QPtrListIterator it( apps ); - for( ; it.current(); ++it ) { - SalomeApp_Application* anApp = dynamic_cast( it.current() ); - if ( anApp && anApp->activeStudy() && anApp->activeStudy()->id() == myStudyId ) - anApp->updateObjectBrowser(); - } - } - } - } - }; - ProcessVoidEvent( new TEvent( studyId, updateSelection ) ); -} - -const char* DEFAULT_SECTION = "SalomePyQt"; - -/*! - SalomePyQt::addStringSetting - Adds a string 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::addStringSetting( const QString& name, const QString& value, bool autoValue ) -{ - class TEvent: public SALOME_Event { - QString myName; - QString myValue; - bool myAutoValue; - public: - TEvent( const QString& name, const QString& 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::addIntSetting - Adds an integer 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::addIntSetting( const QString& name, const int value, bool autoValue) -{ - class TEvent: public SALOME_Event { - QString myName; - int myValue; - bool myAutoValue; - public: - TEvent( const QString& name, const int 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::addDoubleSetting - Adds an double 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::addDoubleSetting( const QString& name, const double value, bool autoValue ) -{ - class TEvent: public SALOME_Event { - QString myName; - double myValue; - bool myAutoValue; - public: - TEvent( const QString& name, const double 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 - This function is obsolete. Use removeSetting() instead. -*/ -void SalomePyQt::removeSettings( const QString& name ) -{ - class TEvent: public SALOME_Event { - QString myName; - public: - TEvent( const QString& name ) : myName( name ) {} - 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->remove( _sec, _nam ); - } - } - }; - ProcessVoidEvent( new TEvent( name ) ); -} - -/*! - SalomePyQt::getSetting - Gets a setting value (as string) - This function is obsolete. Use stringSetting(), integerSetting(), - boolSetting(), stringSetting() or colorSetting() instead. -*/ -class TGetSettingEvent: public SALOME_Event { -public: - typedef QString TResult; - TResult myResult; - QString myName; - TGetSettingEvent( const QString& name ) : myName( name ) {} - 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( "" ); - myResult = ( !_sec.isEmpty() && !_nam.isEmpty() ) ? resMgr->stringValue( _sec, _nam, "" ) : QString( "" ); - } - } -}; - -/*! - \return a setting value (as string) - This function is obsolete. Use stringSetting(), integerSetting(), - boolSetting(), stringSetting() or colorSetting() instead. -*/ -QString SalomePyQt::getSetting( const QString& name ) -{ - return ProcessEvent( new TGetSettingEvent( name ) ); -} - -/*! - SalomePyQt::addSetting - Adds a double setting to the application preferences -*/ -void SalomePyQt::addSetting( const QString& section, const QString& name, const double value ) -{ - class TEvent: public SALOME_Event { - QString mySection; - QString myName; - double myValue; - public: - TEvent( const QString& section, const QString& name, double 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 an integer setting to the application preferences -*/ -void SalomePyQt::addSetting( const QString& section, const QString& name, const int value ) -{ - class TEvent: public SALOME_Event { - QString mySection; - QString myName; - int myValue; - public: - TEvent( const QString& section, const QString& name, int 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 -*/ -void SalomePyQt::addSetting( const QString& section, const QString& name, const QString& value ) -{ - class TEvent: public SALOME_Event { - QString mySection; - QString myName; - QString myValue; - public: - TEvent( const QString& section, const QString& name, const QString& 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 color setting to the application preferences -*/ -void SalomePyQt::addSetting( const QString& section, const QString& name, const QColor& value ) -{ - class TEvent: public SALOME_Event { - QString mySection; - QString myName; - QColor myValue; - public: - TEvent( const QString& section, const QString& name, const QColor& 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::integerSetting - Gets an integer setting from the application preferences -*/ -class TGetIntSettingEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - QString mySection; - QString myName; - TResult myDefault; - TGetIntSettingEvent( const QString& section, const QString& name, const int def ) - : mySection( section ), myName( name ), myDefault( def ) {} - virtual void Execute() { - if ( SUIT_Session::session() ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - myResult = ( !mySection.isEmpty() && !myName.isEmpty() ) ? resMgr->integerValue( mySection, myName, myDefault ) : myDefault; - } - } -}; - -/*! - \return an integer setting from the application preferences -*/ -int SalomePyQt::integerSetting( const QString& section, const QString& name, const int def ) -{ - return ProcessEvent( new TGetIntSettingEvent( section, name, def ) ); -} - -/*! - SalomePyQt::doubleSetting - Gets a double setting from the application preferences -*/ -class TGetDblSettingEvent: public SALOME_Event { -public: - typedef double TResult; - TResult myResult; - QString mySection; - QString myName; - TResult myDefault; - TGetDblSettingEvent( const QString& section, const QString& name, const double def ) - : mySection( section ), myName( name ), myDefault( def ) {} - virtual void Execute() { - if ( SUIT_Session::session() ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - myResult = ( !mySection.isEmpty() && !myName.isEmpty() ) ? resMgr->doubleValue( mySection, myName, myDefault ) : myDefault; - } - } -}; - -/*! - \return an double setting from the application preferences -*/ -double SalomePyQt::doubleSetting( const QString& section, const QString& name, const int def ) -{ - return ProcessEvent( new TGetDblSettingEvent( section, name, def ) ); -} - -/*! - SalomePyQt::boolSetting - Gets a boolean setting from the application preferences -*/ -class TGetBoolSettingEvent: public SALOME_Event { -public: - typedef bool TResult; - TResult myResult; - QString mySection; - QString myName; - TResult myDefault; - TGetBoolSettingEvent( const QString& section, const QString& name, const bool def ) - : mySection( section ), myName( name ), myDefault( def ) {} - virtual void Execute() { - if ( SUIT_Session::session() ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - myResult = ( !mySection.isEmpty() && !myName.isEmpty() ) ? resMgr->booleanValue( mySection, myName, myDefault ) : myDefault; - } - } -}; - -/*! - \return an boolean setting from the application preferences -*/ -bool SalomePyQt::boolSetting( const QString& section, const QString& name, const bool def ) -{ - return ProcessEvent( new TGetBoolSettingEvent( section, name, def ) ); -} - -/*! - SalomePyQt::stringSetting - Gets a string setting from the application preferences -*/ -class TGetStrSettingEvent: public SALOME_Event { -public: - typedef QString TResult; - TResult myResult; - QString mySection; - QString myName; - TResult myDefault; - TGetStrSettingEvent( const QString& section, const QString& name, const QString& def ) - : mySection( section ), myName( name ), myDefault( def ) {} - virtual void Execute() { - if ( SUIT_Session::session() ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - myResult = ( !mySection.isEmpty() && !myName.isEmpty() ) ? resMgr->stringValue( mySection, myName, myDefault ) : myDefault; - } - } -}; - -/*! - \return an string setting from the application preferences -*/ -QString SalomePyQt::stringSetting( const QString& section, const QString& name, const QString& def ) -{ - return ProcessEvent( new TGetStrSettingEvent( section, name, def ) ); -} - -/*! - SalomePyQt::colorSetting - Gets a color setting from the application preferences -*/ -class TGetColorSettingEvent: public SALOME_Event { -public: - typedef QColor TResult; - TResult myResult; - QString mySection; - QString myName; - TResult myDefault; - TGetColorSettingEvent( const QString& section, const QString& name, const QColor& def ) - : mySection( section ), myName( name ), myDefault( def ) {} - virtual void Execute() { - if ( SUIT_Session::session() ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - myResult = ( !mySection.isEmpty() && !myName.isEmpty() ) ? resMgr->colorValue( mySection, myName, myDefault ) : myDefault; - } - } -}; - -/*! - \return a color setting from the application preferences -*/ -QColor SalomePyQt::colorSetting ( const QString& section, const QString& name, const QColor& def ) -{ - return ProcessEvent( new TGetColorSettingEvent( section, name, def ) ); -} - -/*! - SalomePyQt::removeSetting - Removes a setting from the application preferences -*/ -void SalomePyQt::removeSetting( const QString& section, const QString& name ) -{ - class TEvent: public SALOME_Event { - QString mySection; - QString myName; - public: - TEvent( const QString& section, const QString& name ) : mySection( section ), myName( name ) {} - virtual void Execute() { - if ( SUIT_Session::session() ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - if ( !mySection.isEmpty() && !myName.isEmpty() ) - resMgr->remove( mySection, myName ); - } - } - }; - ProcessVoidEvent( new TEvent( section, name ) ); -} - -/*! - SalomePyQt::getFileName - Displays 'Open/Save file' dialog box and returns a user's choice (file name) -*/ -class TGetFileNameEvent: public SALOME_Event { -public: - typedef QString TResult; - TResult myResult; - QWidget* myParent; - QString myInitial; - QStringList myFilters; - QString myCaption; - bool myOpen; - TGetFileNameEvent( QWidget* parent, - const QString& initial, - const QStringList& filters, - const QString& caption, - bool open ) - : myParent ( parent ), - myInitial( initial ), - myFilters( filters ), - myCaption( caption ), - myOpen ( open ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - myResult = anApp->getFileName( myOpen, myInitial, myFilters.join(";;"), myCaption, myParent ); - } - } -}; - -/*! - Displays 'Open/Save file' dialog box and returns a user's choice (file name) -*/ -QString SalomePyQt::getFileName( QWidget* parent, - const QString& initial, - const QStringList& filters, - const QString& caption, - bool open ) -{ - return ProcessEvent( new TGetFileNameEvent( parent, initial, filters, caption, open ) ); -} - -/*! - SalomePyQt::getOpenFileNames - Displays 'Open files' dialog box and returns a user's choice (a list of file names) -*/ -class TGetOpenFileNamesEvent: public SALOME_Event { -public: - typedef QStringList TResult; - TResult myResult; - QWidget* myParent; - QString myInitial; - QStringList myFilters; - QString myCaption; - TGetOpenFileNamesEvent( QWidget* parent, - const QString& initial, - const QStringList& filters, - const QString& caption ) - : myParent ( parent ), - myInitial( initial ), - myFilters( filters ), - myCaption( caption ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - myResult = anApp->getOpenFileNames( myInitial, myFilters.join(";;"), myCaption, myParent ); - } - } -}; - -/*! - Displays 'Open files' dialog box and returns a user's choice (a list of file names) -*/ -QStringList SalomePyQt::getOpenFileNames( QWidget* parent, - const QString& initial, - const QStringList& filters, - const QString& caption ) -{ - return ProcessEvent( new TGetOpenFileNamesEvent( parent, initial, filters, caption ) ); -} - -/*! - SalomePyQt::getExistingDirectory - Displays 'Get Directory' dialog box and returns a user's choice (a directory name) -*/ -class TGetExistingDirectoryEvent: public SALOME_Event { -public: - typedef QString TResult; - TResult myResult; - QWidget* myParent; - QString myInitial; - QString myCaption; - TGetExistingDirectoryEvent( QWidget* parent, - const QString& initial, - const QString& caption ) - : myParent ( parent ), - myInitial( initial ), - myCaption( caption ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - myResult = anApp->getDirectory( myInitial, myCaption, myParent ); - } - } -}; - -/*! - Displays 'Get Directory' dialog box and returns a user's choice (a directory name) -*/ -QString SalomePyQt::getExistingDirectory( QWidget* parent, - const QString& initial, - const QString& caption ) -{ - return ProcessEvent( new TGetExistingDirectoryEvent( parent, initial, caption ) ); -} - -/*! - SalomePyQt::helpContext - Opens external browser to display 'context help' information - current implementation does nothing. -*/ -void SalomePyQt::helpContext( const QString& source, const QString& context ) { - class TEvent: public SALOME_Event { - QString mySource; - QString myContext; - public: - TEvent( const QString& source, const QString& context ) - : mySource( source ), myContext( context ) {} - virtual void Execute() { - if ( /*SalomeApp_Application* anApp =*/ getApplication() ) { - // VSR: TODO - // anApp->helpContext( mySource, myContext ); - } - } - }; - ProcessVoidEvent( new TEvent( source, context ) ); -} - -/*! - SalomePyQt::dumpView - Dumps the contents of the currently active view to the image file - in the given format (JPEG, PNG, BMP are supported) -*/ -class TDumpViewEvent: public SALOME_Event { -public: - typedef bool TResult; - TResult myResult; - QString myFileName; - TDumpViewEvent( const QString& filename ) - : myResult ( false ), myFileName( filename ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SUIT_ViewManager* vm = anApp->activeViewManager(); - if ( vm ) { - SUIT_ViewWindow* vw = vm->getActiveView(); - if ( vw ) { - QImage im = vw->dumpView(); - if ( !im.isNull() && !myFileName.isEmpty() ) { - QString fmt = SUIT_Tools::extension( myFileName ).upper(); - if ( fmt.isEmpty() ) fmt = QString( "BMP" ); // default format - if ( fmt == "JPG" ) fmt = "JPEG"; - myResult = im.save( myFileName, fmt.latin1() ); - } - } - } - } - } -}; - -/*! - Dumps the contents of the currently active view to the image file - in the given format (JPEG, PNG, BMP are supported) -*/ -bool SalomePyQt::dumpView( const QString& filename ) -{ - return ProcessEvent( new TDumpViewEvent( filename ) ); -} - -/*! - SalomePyQt::defaultMenuGroup - Returns default menu group -*/ -class TDefMenuGroupEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - TDefMenuGroupEvent() : myResult( -1 ) {} - virtual void Execute() { - myResult = SALOME_PYQT_Module::defaultMenuGroup(); - } -}; - -/*! - \return default menu group -*/ -int SalomePyQt::defaultMenuGroup() -{ - return ProcessEvent( new TDefMenuGroupEvent() ); -} - -/*! - SalomePyQt::createTool - These methods allow operating with the toolbars: - - create a new toolbar or get the existing one (the toolbar name is passed as parameter); - this method returns an id of the toolbar; - - add action with given id (must be created previously) and optional index to the existing toolbar - (toobar is identified either by its id or by its name) - these methods return an id of the action. - If error occurs, the -1 value is returned. -*/ -class CrTool -{ -public: - CrTool( const QString& tBar ) - : myCase( 0 ), myTbName( tBar ) {} - CrTool( const int id, const int tBar, const int idx ) - : myCase( 1 ), myId( id ), myTbId( tBar ), myIndex( idx ) {} - CrTool( const int id, const QString& tBar, const int idx ) - : myCase( 2 ), myId( id ), myTbName( tBar ), myIndex( idx ) {} - CrTool( QtxAction* action, const int tbId, const int id, const int idx ) - : myCase( 3 ), myAction( action ), myTbId( tbId ), myId( id ), myIndex( idx ) {} - CrTool( QtxAction* action, const QString& tBar, const int id, const int idx ) - : myCase( 4 ), myAction( action ), myTbName( tBar ), myId( id ), myIndex( idx ) {} - - int execute( SALOME_PYQT_Module* module ) const - { - if ( module ) { - switch ( myCase ) { - case 0: - return module->createTool( myTbName ); - case 1: - return module->createTool( myId, myTbId, myIndex ); - case 2: - return module->createTool( myId, myTbName, myIndex ); - case 3: - return module->createTool( myAction, myTbId, myId, myIndex ); - case 4: - return module->createTool( myAction, myTbName, myId, myIndex ); - } - } - return -1; - } -private: - int myCase; - QString myTbName; - int myTbId; - QtxAction* myAction; - int myId; - int myIndex; -}; -class TCreateToolEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - const CrTool& myCrTool; - TCreateToolEvent( const CrTool& crTool ) - : myResult( -1 ), myCrTool( crTool ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); - if ( !module ) - module = dynamic_cast( anApp->activeModule() ); - myResult = myCrTool.execute( module ); - } - } -}; - -/*! - create new toolbar or get existing by name -*/ -int SalomePyQt::createTool( const QString& tBar ) -{ - return ProcessEvent( new TCreateToolEvent( CrTool( tBar ) ) ); -} -/*! add action with id and index to the existing tollbar -*/ -int SalomePyQt::createTool( const int id, const int tBar, const int idx ) -{ - return ProcessEvent( new TCreateToolEvent( CrTool( id, tBar, idx ) ) ); -} -/*! add action with id and index to the existing tollbar -*/ -int SalomePyQt::createTool( const int id, const QString& tBar, const int idx ) -{ - return ProcessEvent( new TCreateToolEvent( CrTool( id, tBar, idx ) ) ); -} -/*! add action with id and index to the existing tollbar -*/ -int SalomePyQt::createTool( QtxAction* a, const int tBar, const int id, const int idx ) -{ - return ProcessEvent( new TCreateToolEvent( CrTool( a, tBar, id, idx ) ) ); -} -/*! add action with id and index to the existing tollbar -*/ -int SalomePyQt::createTool( QtxAction* a, const QString& tBar, const int id, const int idx ) -{ - return ProcessEvent( new TCreateToolEvent( CrTool( a, tBar, id, idx ) ) ); -} - -/*! - SalomePyQt::createMenu - These methods allow operating with the main menu: - - create a new menu or submenu or get the existing one (the parent menu name or id is passed as parameter, - if it is empty or -1, it means that main menu is created, otherwise submenu is created); - this method returns an id of the menu/submenu; - - add action with given id (must be created previously) and optional index and group number to the existing menu - or submenu (menu name or id us passed as parameter) - these methods return an id of the action. - If error occurs, the -1 value is returned. -*/ -class CrMenu -{ -public: - CrMenu( const QString& subMenu, const int menu, const int id, const int group, const int idx ) - : myCase( 0 ), mySubMenuName( subMenu ), myMenuId( menu ), myId( id ), myGroup( group ), myIndex( idx ) {} - CrMenu( const QString& subMenu, const QString& menu, const int id, const int group, const int idx ) - : myCase( 1 ), mySubMenuName( subMenu ), myMenuName( menu ), myId( id ), myGroup( group ), myIndex( idx ) {} - CrMenu( const int id, const int menu, const int group, const int idx ) - : myCase( 2 ), myId( id ), myMenuId( menu ), myGroup( group ), myIndex( idx ) {} - CrMenu( const int id, const QString& menu, const int group, const int idx ) - : myCase( 3 ), myId( id ), myMenuName( menu ), myGroup( group ), myIndex( idx ) {} - CrMenu( QtxAction* action, const int menu, const int id, const int group, const int idx ) - : myCase( 4 ), myAction( action ), myMenuId( menu ), myId( id ), myGroup( group ), myIndex( idx ) {} - CrMenu( QtxAction* action, const QString& menu, const int id, const int group, const int idx ) - : myCase( 5 ), myAction( action ), myMenuName( menu ), myId( id ), myGroup( group ), myIndex( idx ) {} - - int execute( SALOME_PYQT_Module* module ) const - { - if ( module ) { - switch ( myCase ) { - case 0: - return module->createMenu( mySubMenuName, myMenuId, myId, myGroup, myIndex ); - case 1: - return module->createMenu( mySubMenuName, myMenuName, myId, myGroup, myIndex ); - case 2: - return module->createMenu( myId, myMenuId, myGroup, myIndex ); - case 3: - return module->createMenu( myId, myMenuName, myGroup, myIndex ); - case 4: - return module->createMenu( myAction, myMenuId, myId, myGroup, myIndex ); - case 5: - return module->createMenu( myAction, myMenuName, myId, myGroup, myIndex ); - } - } - return -1; - } -private: - int myCase; - QString myMenuName; - int myMenuId; - QString mySubMenuName; - int myGroup; - QtxAction* myAction; - int myId; - int myIndex; -}; -class TCreateMenuEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - const CrMenu& myCrMenu; - TCreateMenuEvent( const CrMenu& crMenu ) - : myResult( -1 ), myCrMenu( crMenu ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule(); - if ( !module ) - module = dynamic_cast( anApp->activeModule() ); - myResult = myCrMenu.execute( module ); - } - } -}; -int SalomePyQt::createMenu( const QString& subMenu, const int menu, const int id, const int group, const int idx ) -{ - return ProcessEvent( new TCreateMenuEvent( CrMenu( subMenu, menu, id, group, idx ) ) ); -} - -int SalomePyQt::createMenu( const QString& subMenu, const QString& menu, const int id, const int group, const int idx ) -{ - return ProcessEvent( new TCreateMenuEvent( CrMenu( subMenu, menu, id, group, idx ) ) ); -} - -int SalomePyQt::createMenu( const int id, const int menu, const int group, const int idx ) -{ - return ProcessEvent( new TCreateMenuEvent( CrMenu( id, menu, group, idx ) ) ); -} - -int SalomePyQt::createMenu( const int id, const QString& menu, const int group, const int idx ) -{ - return ProcessEvent( new TCreateMenuEvent( CrMenu( id, menu, group, idx ) ) ); -} - -int SalomePyQt::createMenu( QtxAction* a, const int menu, const int id, const int group, const int idx ) -{ - return ProcessEvent( new TCreateMenuEvent( CrMenu( a, menu, id, group, idx ) ) ); -} - -int SalomePyQt::createMenu( QtxAction* a, const QString& menu, const int id, const int group, const int idx ) -{ - return ProcessEvent( new TCreateMenuEvent( CrMenu( a, menu, id, group, idx ) ) ); -} - -/*! - SalomePyQt::createSeparator - Create a separator action which can be then used in the menu or toolbar. -*/ -class TCreateSepEvent: public SALOME_Event { -public: - typedef QtxAction* TResult; - TResult myResult; - TCreateSepEvent() - : myResult( 0 ) {} - 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 = (QtxAction*)module->createSeparator(); - } - } -}; -QtxAction* SalomePyQt::createSeparator() -{ - return ProcessEvent( new TCreateSepEvent() ); -} - -/*! - SalomePyQt::createAction - Create an action which can be then used in the menu or toolbar: - - id : the unique id action to be registered to; - - menuText : action text which should appear in menu; - - tipText : text which should appear in the tooltip; - - statusText : text which should appear in the status bar when action is activated; - - icon : the name of the icon file (the actual icon file name can be coded in the translation files); - - key : the key accelrator for the action - - toggle : if true the action is checkable -*/ -class TCreateActionEvent: public SALOME_Event { -public: - typedef QtxAction* TResult; - TResult myResult; - int myId; - QString myMenuText; - QString myTipText; - QString myStatusText; - QString myIcon; - int myKey; - bool myToggle; - TCreateActionEvent( const int id, const QString& menuText, const QString& tipText, - const QString& statusText, const QString& icon, const int key, const bool toggle ) - : myResult( 0 ), myId( id ), myMenuText( menuText ), myTipText( tipText ), - myStatusText( statusText ), myIcon( icon ), myKey( key ), myToggle( toggle ) {} - 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 = (QtxAction*)module->createAction( myId, myTipText, myIcon, myMenuText, myStatusText, myKey, myToggle ); - } - } -}; -QtxAction* SalomePyQt::createAction( const int id, const QString& menuText, - const QString& tipText, const QString& statusText, - const QString& icon, const int key, const bool toggle ) -{ - return ProcessEvent( new TCreateActionEvent( id, menuText, tipText, statusText, icon, key, toggle ) ); -} - -/*! - SalomePyQt::action - Get an action by its id. Returns 0 if the action with such id was not registered. -*/ -class TActionEvent: public SALOME_Event { -public: - typedef QtxAction* TResult; - TResult myResult; - int myId; - TActionEvent( const int id ) - : myResult( 0 ), myId( id ) {} - 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 = (QtxAction*)module->action( myId ); - } - } -}; -QtxAction* SalomePyQt::action( const int id ) -{ - return ProcessEvent( new TActionEvent( id ) ); -} - -/*! - SalomePyQt::actionId - Get an action id. Returns -1 if the action was not registered. -*/ -class TActionIdEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - const QtxAction* myAction; - TActionIdEvent( const QtxAction* action ) - : myResult( -1 ), myAction( action ) {} - 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->actionId( myAction ); - } - } -}; -int SalomePyQt::actionId( const QtxAction* a ) -{ - return ProcessEvent( new TActionIdEvent( a ) ); -} - -/*! - SalomePyQt::clearMenu - Clears given menu (recursively if necessary) -*/ -class TClearMenuEvent: public SALOME_Event { -public: - typedef bool TResult; - TResult myResult; - int myId; - int myMenu; - bool myRemoveActions; - TClearMenuEvent( const int id, const int menu, const bool removeActions ) - : myResult( false ), myId( id ), myMenu( menu ), myRemoveActions( removeActions ) {} - 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->clearMenu( myId, myMenu, myRemoveActions ); - } - } -}; -bool SalomePyQt::clearMenu( const int id, const int menu, const bool removeActions ) -{ - return ProcessEvent( new TClearMenuEvent( id, menu, removeActions ) ); -} - diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h deleted file mode 100644 index b656cd1c0..000000000 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.h +++ /dev/null @@ -1,148 +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 -// - -#ifndef SALOME_PYQT_H -#define SALOME_PYQT_H - -#include -#include -#include - -#include - -class LightApp_SelectionMgr; -class SalomeApp_Application; -class QMenuBar; -class QPopupMenu; -class QWidget; -class QtxAction; - -class SALOME_Selection : public QObject -{ - Q_OBJECT - -public: - ~SALOME_Selection(); - static SALOME_Selection* GetSelection( SalomeApp_Application* ); - - void Clear(); - void ClearIObjects(); - void ClearFilters(); - -signals: - void currentSelectionChanged(); - -private slots: - void onSelMgrDestroyed(); - -private: - LightApp_SelectionMgr* mySelMgr; - SALOME_Selection( QObject* ); -}; - -enum MenuName { - File = 1, - View = 2, - Edit = 3, - Preferences = 4, - Tools = 5, - Window = 6, - Help = 7 -}; - -enum { - WT_ObjectBrowser = LightApp_Application::WT_ObjectBrowser, - WT_PyConsole = LightApp_Application::WT_PyConsole, - WT_LogWindow = LightApp_Application::WT_LogWindow, - WT_User = LightApp_Application::WT_User -}; - -class SalomePyQt -{ -public: - static QWidget* getDesktop(); - static QWidget* getMainFrame(); - static QMenuBar* getMainMenuBar(); - static QPopupMenu* getPopupMenu( const MenuName ); - static SALOME_Selection* getSelection(); - static int getStudyId(); - static void putInfo( const QString&, const int = 0 ); - static const QString getActiveComponent(); - static void updateObjBrowser( const int = 0, bool = true ); - - static QString getFileName ( QWidget*, const QString&, const QStringList&, const QString&, bool ); - static QStringList getOpenFileNames ( QWidget*, const QString&, const QStringList&, const QString& ); - static QString getExistingDirectory( QWidget*, const QString&, const QString& ); - - static void helpContext( const QString&, const QString& ); - - static bool dumpView( const QString& ); - - static int defaultMenuGroup(); - - 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 createMenu( const QString&, const int = -1, - const int = -1, const int = -1, const int = -1 ); - static int createMenu( const QString&, const QString& = QString::null, - const int = -1, const int = -1, const int = -1 ); - static int createMenu( const int, const int = -1, - const int = -1, const int = -1 ); - static int createMenu( const int, const QString& = QString::null, - const int = -1, const int = -1 ); - static int createMenu( QtxAction*, const int, const int = -1, - const int = -1, const int = -1 ); - static int createMenu( QtxAction*, const QString&, const int = -1, - const int = -1, const int = -1 ); - - static QtxAction* createSeparator(); - - 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 ); - - static QtxAction* action( const int ); - static int actionId( const QtxAction* ); - - 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 ); - 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 = 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& ); - // 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& ); -}; - -#endif // SALOME_PYQT_H diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip b/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip deleted file mode 100644 index dcb650178..000000000 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt.sip +++ /dev/null @@ -1,134 +0,0 @@ -//============================================================================= -// File : SalomePyQt.sip -// Created : 25/04/05 -// Author : Vadim SANDLER -// Project : SALOME -// Copyright : 2003-2005 CEA/DEN, EDF R&D -// $Header : $ -//============================================================================= - -%Module SalomePyQt - -%Import qtmod.sip - -class SALOME_Selection : QObject -{ -%HeaderCode -#include -%End - -public: - void Clear(); - void ClearIObjects(); - void ClearFilters(); - -private: - SALOME_Selection( QObject* /TransferThis/ ); - -signals: - void currentSelectionChanged(); -}; - -enum MenuName { - File = 1, - View = 2, - Edit = 3, - Preferences = 4, - Tools = 5, - Window = 6, - Help = 7 -}; - -enum WindowType { - WT_ObjectBrowser, - WT_PyConsole, - WT_LogWindow, - WT_User -}; - -class QtxAction : QAction -{ -%TypeHeaderCode -#include -%End - -private: - QtxAction(const QtxAction &); -}; - -class SalomePyQt -{ -%HeaderCode -#include -%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&, int = 0 ); - static const QString getActiveComponent(); - static void updateObjBrowser( int = 0, bool = true ); - - static QString getFileName ( QWidget*, const QString&, const QStringList&, const QString&, bool ); - static QStringList getOpenFileNames ( QWidget*, const QString&, const QStringList&, const QString& ); - static QString getExistingDirectory( QWidget*, const QString&, const QString& ); - - static void helpContext( const QString&, const QString& ); - - static bool dumpView( const QString& ); - - static int defaultMenuGroup(); - - static int createTool( const QString& ); - static int createTool( const int, const int, int = -1 ); - static int createTool( const int, const QString&, int = -1 ); - static int createTool( QtxAction*, const int, int = -1, int = -1 ); - static int createTool( QtxAction*, const QString&, int = -1, int = -1 ); - - static int createMenu( const QString&, const int, - int = -1, int = -1, int = -1 ); - static int createMenu( const QString&, const QString&, - int = -1, int = -1, int = -1 ); - static int createMenu( const int, const int, - int = -1, int = -1 ); - static int createMenu( const int, const QString&, - int = -1, int = -1 ); - static int createMenu( QtxAction*, const int, int = -1, - int = -1, int = -1 ); - static int createMenu( QtxAction*, const QString&, int = -1, - int = -1, int = -1 ); - - static QtxAction* createSeparator(); - - static QtxAction* createAction( const int, const QString&, - const QString& = QString::null, const QString& = QString::null, - const QString& = QString::null, int = 0, bool = false ); - - static QtxAction* action( const int ); - static int actionId( const QtxAction* ); - - static bool clearMenu( int = 0, int = 0, - 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&, int = 0 ); - static double doubleSetting ( const QString&, const QString&, int = 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& ); - -// 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& ); -}; diff --git a/src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip b/src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip deleted file mode 100644 index a1a1c046a..000000000 --- a/src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip +++ /dev/null @@ -1,133 +0,0 @@ -//============================================================================= -// File : SalomePyQt_v4.sip -// Created : 25/04/05 -// Author : Vadim SANDLER -// Project : SALOME -// Copyright : 2003-2005 CEA/DEN, EDF R&D -// $Header : $ -//============================================================================= - -%Module SalomePyQt - -%Import qtmod.sip - -class SALOME_Selection : QObject -{ -%TypeHeaderCode -#include -%End - -public: - void Clear() /ReleaseGIL/ ; - void ClearIObjects() /ReleaseGIL/ ; - void ClearFilters() /ReleaseGIL/ ; - -private: - SALOME_Selection( QObject* /TransferThis/ ); - -signals: - void currentSelectionChanged(); -}; - -enum MenuName { - File = 1, - View = 2, - Edit = 3, - Preferences = 4, - Tools = 5, - Window = 6, - Help = 7 -}; - -enum WindowType { - WT_ObjectBrowser, - WT_PyConsole, - WT_LogWindow, - WT_User -}; - -class QtxAction : QAction -{ -%TypeHeaderCode -#include -%End - -private: - QtxAction(const QtxAction &); -}; - -class SalomePyQt -{ -%TypeHeaderCode -#include -%End - -public: - 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& ) /ReleaseGIL/ ; - - static bool dumpView( const QString& ) /ReleaseGIL/ ; - - static int defaultMenuGroup() /ReleaseGIL/ ; - - 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 ) /ReleaseGIL/ ; - static int createMenu( const QString&, const QString&, - const int = -1, const int = -1, const int = -1 ) /ReleaseGIL/ ; - static int createMenu( const int, const int, - const int = -1, const int = -1 ) /ReleaseGIL/ ; - static int createMenu( const int, const QString&, - const int = -1, const int = -1 ) /ReleaseGIL/ ; - static int createMenu( QtxAction*, const int, 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 ) /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 ) /ReleaseGIL/ ; - - static QtxAction* action( const int ) /ReleaseGIL/ ; - static int actionId( const QtxAction* ) /ReleaseGIL/ ; - - static bool clearMenu( const int = 0, const int = 0, - 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 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 int = 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/ ; - -// obsolete - 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 removeSettings ( const QString& ) /ReleaseGIL/ ; - static QString getSetting ( const QString& ) /ReleaseGIL/ ; -}; diff --git a/src/SALOME_SWIG/Help.py b/src/SALOME_SWIG/Help.py deleted file mode 100755 index 404ee4dfc..000000000 --- a/src/SALOME_SWIG/Help.py +++ /dev/null @@ -1,141 +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.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.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 deleted file mode 100755 index 3e0133d89..000000000 --- a/src/SALOME_SWIG/PyInterp.py +++ /dev/null @@ -1,102 +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.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 deleted file mode 100644 index 9f8e1e20c..000000000 --- a/src/SALOME_SWIG/SALOMEGUI_Swig.cxx +++ /dev/null @@ -1,571 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOMEGUI_Swig.cxx -// Author : Vadim SANDLER -// Module : SALOME -// $Header$ - -#include "SALOMEGUI_Swig.hxx" - -#include "SUIT_Session.h" -#include "SUIT_Desktop.h" -#include "SUIT_DataObjectIterator.h" -#include "OB_Browser.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Study.h" -#include "SalomeApp_Module.h" -#include "SalomeApp_DataObject.h" -#include "LightApp_SelectionMgr.h" -#include "SALOME_Prs.h" -#include "SOCC_ViewModel.h" -#include "SVTK_ViewModel.h" - -#include "SALOME_Event.hxx" -#include "SALOME_ListIO.hxx" -#include "SALOME_InteractiveObject.hxx" -#include "SALOME_ListIteratorOfListIO.hxx" - -//#include "utilities.h" - -#include -#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) - -using namespace std; - -/*! - asv : 3.12.04 : added checking for NULL GUI objects in almost all methods. - In the scope of fixing bug PAL6869. - - (PR : modify comments) - Instance of this class is created every time "import salome" line is typed - - in IAPP embedded Python interpretor (SALOME_Session_Server executable), - - in inline Python nodes in Supervisor (in SALOME_Container executable), - - in stand-alone Python console outside any executable. - SALOME GUI(desktop and other objects) is only available in SALOME_Session_Server - - VSR : 19.04.05 : Reimplemented for new SALOME GUI (SUIT-based) - All methods are implemeted using Event mechanism. - Display/Erase methods use SALOME_Prs/SALOME_View mechanism. It is currently - implemented only for OCC and VTK viewers. -*/ - -/*! - getApplication() - Returns active application object [ static ] -*/ -static SalomeApp_Application* getApplication() { - if ( SUIT_Session::session() ) - return dynamic_cast( SUIT_Session::session()->activeApplication() ); - return NULL; -} - -/*! - getActiveStudy() - Gets active study or 0 if there is no study opened [ static ] -*/ -static SalomeApp_Study* getActiveStudy() -{ - if ( getApplication() ) - return dynamic_cast( getApplication()->activeStudy() ); - return 0; -} - -/*! - SALOMEGUI_Swig::SALOMEGUI_Swig - Constructor -*/ -SALOMEGUI_Swig::SALOMEGUI_Swig() -{ -} - -/*! - SALOMEGUI_Swig::~SALOMEGUI_Swig - Destructor -*/ -SALOMEGUI_Swig::~SALOMEGUI_Swig() -{ -} - -/*! - SALOMEGUI_Swig::hasDesktop - Returns TRUE if GUI is available. -*/ -class THasDesktopEvent: public SALOME_Event { -public: - typedef bool TResult; - TResult myResult; - THasDesktopEvent() : myResult( false ) {} - virtual void Execute() { - myResult = (bool)( getApplication() && getApplication()->desktop() ); - } -}; - -/*! - \return true if GUI is available. -*/ -bool SALOMEGUI_Swig::hasDesktop() -{ - return ProcessEvent( new THasDesktopEvent() ); -} - -/*! - SALOMEGUI_Swig::updateObjBrowser - Updates active study's Object Browser. - VSR: updateSelection parameter is currently not used. Will be implemented or removed lately. -*/ -void SALOMEGUI_Swig::updateObjBrowser( bool /*updateSelection*/ ) -{ - class TEvent: public SALOME_Event { - public: - TEvent() {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - anApp->updateObjectBrowser(); - anApp->updateActions(); //SRN: added in order to update the toolbar - } - } - }; - ProcessVoidEvent( new TEvent() ); -} - -/*! - SALOMEGUI_Swig::getActiveStudyId - Returns active study's ID or 0 if there is no active study. -*/ -class TGetActiveStudyIdEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - TGetActiveStudyIdEvent() : myResult( 0 ) {} - virtual void Execute() { - if ( SalomeApp_Study* aStudy = getActiveStudy() ) { - myResult = aStudy->studyDS()->StudyId(); - } - } -}; - -/*! - \return active study's ID or 0 if there is no active study. -*/ -int SALOMEGUI_Swig::getActiveStudyId() -{ - return ProcessEvent( new TGetActiveStudyIdEvent() ); -} - -/*! - SALOMEGUI_Swig::getActiveStudyName - Returns active study's name or NULL if there is no active study. -*/ -class TGetActiveStudyNameEvent: public SALOME_Event { -public: - typedef string TResult; - TResult myResult; - TGetActiveStudyNameEvent() {} - virtual void Execute() { - if ( SalomeApp_Study* aStudy = getActiveStudy() ) { - myResult = aStudy->studyDS()->Name(); - } - } -}; - -/*! - \return active study's name or NULL if there is no active study. -*/ -const char* SALOMEGUI_Swig::getActiveStudyName() -{ - string result = ProcessEvent( new TGetActiveStudyNameEvent() ); - return result.empty() ? NULL : result.c_str(); -} - -/*! - SALOMEGUI_Swig::getComponentName - Returns the name of the component by its user name. -*/ -class TGetModulCatalogEvent: public SALOME_Event { -public: - typedef CORBA::Object_var TResult; - TResult myResult; - TGetModulCatalogEvent() : myResult(CORBA::Object::_nil()) {} - virtual void Execute() { - if (SalomeApp_Application* anApp = getApplication()) - myResult = anApp->namingService()->Resolve("/Kernel/ModulCatalog"); - } -}; - -/*! - \return the name of the component by its user name. -*/ -const char* SALOMEGUI_Swig::getComponentName( const char* componentUserName ) -{ - CORBA::Object_var anObject = ProcessEvent(new TGetModulCatalogEvent()); - if (!CORBA::is_nil(anObject)) { - SALOME_ModuleCatalog::ModuleCatalog_var aCatalogue = - SALOME_ModuleCatalog::ModuleCatalog::_narrow( anObject ); - SALOME_ModuleCatalog::ListOfIAPP_Affich_var aModules = aCatalogue->GetComponentIconeList(); - for ( unsigned int ind = 0; ind < aModules->length(); ind++ ) { - CORBA::String_var aModuleName = aModules[ ind ].modulename; - CORBA::String_var aModuleUserName = aModules[ ind ].moduleusername; - if ( strcmp(componentUserName, aModuleUserName.in()) == 0 ) - return aModuleName._retn(); - } - } - return 0; -} - -/*! - SALOMEGUI_Swig::getComponentUserName - Returns the user name of the component by its name. -*/ -const char* SALOMEGUI_Swig::getComponentUserName( const char* componentName ) -{ - CORBA::Object_var anObject = ProcessEvent(new TGetModulCatalogEvent()); - if (!CORBA::is_nil(anObject)) { - SALOME_ModuleCatalog::ModuleCatalog_var aCatalogue = - SALOME_ModuleCatalog::ModuleCatalog::_narrow( anObject ); - SALOME_ModuleCatalog::ListOfIAPP_Affich_var aModules = aCatalogue->GetComponentIconeList(); - for ( unsigned int ind = 0; ind < aModules->length(); ind++ ) { - CORBA::String_var aModuleName = aModules[ ind ].modulename; - CORBA::String_var aModuleUserName = aModules[ ind ].moduleusername; - if ( strcmp(componentName, aModuleName.in()) == 0 ) - return aModuleUserName._retn(); - } - } - return 0; -} - -/*! - SALOMEGUI_Swig::SelectedCount - Returns the number of selected objects. -*/ -class TSelectedCountEvent: public SALOME_Event { -public: - typedef int TResult; - TResult myResult; - TSelectedCountEvent() : myResult( 0 ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); // for sure! - LightApp_SelectionMgr* aSelMgr = anApp->selectionMgr(); - if ( aStudy && aSelMgr ) { - SALOME_ListIO anIOList; - aSelMgr->selectedObjects( anIOList ); - myResult = anIOList.Extent(); - } - } - } -}; - -/*! - \return the number of selected objects. -*/ -int SALOMEGUI_Swig::SelectedCount() -{ - return ProcessEvent( new TSelectedCountEvent() ); -} - -/*! - SALOMEGUI_Swig::getSelected - Returns the selected object entry by the given index. -*/ -class TGetSelectedEvent: public SALOME_Event { -public: - typedef QString TResult; - TResult myResult; - int myIndex; - TGetSelectedEvent( int theIndex ) : myIndex( theIndex ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); // for sure! - LightApp_SelectionMgr* aSelMgr = anApp->selectionMgr(); - if ( aStudy && aSelMgr ) { - SALOME_ListIO anIOList; - aSelMgr->selectedObjects( anIOList ); - if ( myIndex < anIOList.Extent() ) { - int index = 0; - SALOME_ListIteratorOfListIO anIter( anIOList ); - for( ; anIter.More(); anIter.Next(), index++ ) { - Handle(SALOME_InteractiveObject) anIO = anIter.Value(); - if ( myIndex == index ) { - myResult = anIO->getEntry(); - return; - } - } - } - } - } - } -}; - -/*! - \return the selected object entry by the given index. -*/ -const char* SALOMEGUI_Swig::getSelected( int index ) -{ - QString result = ProcessEvent( new TGetSelectedEvent( index ) ); - return result.isEmpty() ? NULL : strdup(result.latin1()); -} - -/*! - Adds an object with the given entry to the selection. -*/ -void SALOMEGUI_Swig::AddIObject( const char* theEntry ) -{ - class TEvent: public SALOME_Event { - public: - QString myEntry; - TEvent( const char* theEntry ) : myEntry( theEntry ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); // for sure! - LightApp_SelectionMgr* aSelMgr = anApp->selectionMgr(); - if ( aStudy && aSelMgr ) { - SALOME_ListIO anIOList; - anIOList.Append( new SALOME_InteractiveObject( myEntry, "", "" ) ); - aSelMgr->setSelectedObjects( anIOList, true ); - } - } - } - }; - ProcessVoidEvent( new TEvent( theEntry ) ); -} - -/*! - Removes the object with the given entry from the selection. -*/ -void SALOMEGUI_Swig::RemoveIObject( const char* theEntry ) -{ - class TEvent: public SALOME_Event { - public: - QString myEntry; - TEvent( const char* theEntry ) : myEntry( theEntry ) {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); // for sure! - LightApp_SelectionMgr* aSelMgr = anApp->selectionMgr(); - if ( aStudy && aSelMgr ) { - SALOME_ListIO anIOList; - // VSR: temporary solution, until LightApp_SelectionMgr::unsetSelectedObjects() method appears - // Lately this should be replaced by the following: - // anIOList.Append( new SALOME_InteractiveObject( myEntry, "", "" ) ); - // aSelMgr->unsetSelectedObjects( anIOList ); - /////////////////////////////////////////////// - aSelMgr->selectedObjects( anIOList ); - SALOME_ListIteratorOfListIO anIter( anIOList ); - for( ; anIter.More(); anIter.Next() ) { - if ( anIter.Value()->isSame( new SALOME_InteractiveObject( myEntry, "", "" ) ) ) { - anIOList.Remove( anIter ); - aSelMgr->setSelectedObjects( anIOList, true ); - return; - } - } - } - } - } - }; - ProcessVoidEvent( new TEvent( theEntry ) ); -} - -/*! - Clears selection. -*/ -void SALOMEGUI_Swig::ClearIObjects() -{ - class TEvent: public SALOME_Event { - public: - TEvent() {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); // for sure! - LightApp_SelectionMgr* aSelMgr = anApp->selectionMgr(); - if ( aStudy && aSelMgr ) - aSelMgr->clearSelected(); - } - } - }; - ProcessVoidEvent( new TEvent() ); -} - -/*! - Displays an object in the current view window - (the presentable object should be previously created and displayed in this viewer). - VSR: For the current moment implemented for OCC and VTK viewers only. -*/ -void SALOMEGUI_Swig::Display( const char* theEntry ) -{ - class TEvent: public SALOME_Event { - QString myEntry; - public: - TEvent( const char* theEntry ) : myEntry( theEntry ) {} - 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->Display( view->CreatePrs( myEntry ) ); - } - } - } - }; - ProcessVoidEvent( new TEvent( theEntry ) ); -} - -/*! - Displays an object in the current view window and erases all other - (the presentable object should be previously created and displayed in this viewer). - VSR: For the current moment implemented for OCC and VTK viewers only. -*/ -void SALOMEGUI_Swig::DisplayOnly( const char* theEntry ) -{ - class TEvent: public SALOME_Event { - QString myEntry; - public: - TEvent( const char* theEntry ) : myEntry( theEntry ) {} - 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->EraseAll( false ); - view->Display( view->CreatePrs( myEntry ) ); - } - } - } - } - }; - ProcessVoidEvent( new TEvent( theEntry ) ); -} - -/*! - Erases an object in the current view window - (the presentable object should be previously created and displayed in this viewer). - VSR: For the current moment implemented for OCC and VTK viewers only. -*/ -void SALOMEGUI_Swig::Erase( const char* theEntry ) -{ - class TEvent: public SALOME_Event { - QString myEntry; - public: - TEvent( const char* theEntry ) : myEntry( theEntry ) {} - 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->Erase( view->CreatePrs( myEntry ) ); - } - } - } - }; - ProcessVoidEvent( new TEvent( theEntry ) ); -} - -/*! - Displays all active module's child objects in the current view window - (the presentable objects should be previously created and displayed in this viewer). - VSR: For the current moment implemented for OCC and VTK viewers only. -*/ -void SALOMEGUI_Swig::DisplayAll() -{ - class TEvent: public SALOME_Event { - public: - TEvent() {} - virtual void Execute() { - if ( SalomeApp_Application* anApp = getApplication() ) { - SalomeApp_Study* study = dynamic_cast( anApp->activeStudy() ); // for sure! - SUIT_ViewWindow* window = anApp->desktop()->activeWindow(); - SalomeApp_Module* activeModule = dynamic_cast( anApp->activeModule() ); - if ( study && window && activeModule ) { - SALOME_View* view = dynamic_cast( window->getViewManager()->getViewModel() ); - if ( view ) { - for ( SUIT_DataObjectIterator it( activeModule->dataModel()->root(), SUIT_DataObjectIterator::DepthLeft ); it.current(); ++it ) { - SalomeApp_DataObject* obj = dynamic_cast( it.current() ); - if ( obj && !obj->entry().isEmpty() ) - view->Display( view->CreatePrs( obj->entry() ) ); - } - } - } - } - } - }; - ProcessVoidEvent( new TEvent() ); -} - -/*! - Erases all objects from the current view window - VSR: For the current moment implemented for OCC and VTK viewers only. -*/ -void SALOMEGUI_Swig::EraseAll() -{ - 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->EraseAll( false ); - } - } - } - }; - ProcessVoidEvent( new TEvent() ); -} - -/*! - Returns TRUE if the object with given entry is in the current viewer. - VSR: For the current moment implemented for OCC and VTK viewers only. -*/ -class TIsInViewerEvent: public SALOME_Event { - QString myEntry; -public: - typedef bool TResult; - TResult myResult; - TIsInViewerEvent( const char* theEntry ) : myEntry( theEntry ), myResult( false ) {} - 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 ) { - SALOME_Prs* aPrs = view->CreatePrs( myEntry ); - myResult = !aPrs->IsNull(); - } - } - } - } -}; - -/*! - \return TRUE if the object with given entry is in the current viewer. - VSR: For the current moment implemented for OCC and VTK viewers only. -*/ -bool SALOMEGUI_Swig::IsInCurrentView( const char* theEntry ) -{ - return ProcessEvent( new TIsInViewerEvent( theEntry ) ); -} diff --git a/src/SALOME_SWIG/SALOMEGUI_Swig.hxx b/src/SALOME_SWIG/SALOMEGUI_Swig.hxx deleted file mode 100644 index 456211227..000000000 --- a/src/SALOME_SWIG/SALOMEGUI_Swig.hxx +++ /dev/null @@ -1,69 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOMEGUI_Swig.hxx -// Author : Vadim SANDLER -// Module : SALOME -// $Header$ - -#ifndef SALOMEGUI_SWIG_HXX -#define SALOMEGUI_SWIG_HXX - -class SALOMEGUI_Swig -{ -public: - /* construction/destruction */ - SALOMEGUI_Swig(); - ~SALOMEGUI_Swig(); - - /* check GUI */ - bool hasDesktop(); - - /* update object browser*/ - void updateObjBrowser( bool updateSelection ); - - /* get active study */ - int getActiveStudyId(); - const char* getActiveStudyName(); - - /* selection processing */ - int SelectedCount(); - const char* getSelected(int i); - void AddIObject( const char *Entry ); - void RemoveIObject( const char *Entry ); - void ClearIObjects(); - - /* display/erase */ - void Display( const char *Entry ); - void DisplayOnly( const char *Entry ); - void Erase( const char *Entry ); - void DisplayAll(); - void EraseAll(); - bool IsInCurrentView( const char *Entry ); - - /* get component name/username */ - const char* getComponentName( const char* ComponentUserName ); - const char* getComponentUserName( const char* ComponentName ); -}; - -#endif // SALOMEGUI_SWIG_HXX diff --git a/src/SALOME_SWIG/SALOMEGUI_Swig.i b/src/SALOME_SWIG/SALOMEGUI_Swig.i deleted file mode 100644 index 7820811c9..000000000 --- a/src/SALOME_SWIG/SALOMEGUI_Swig.i +++ /dev/null @@ -1,87 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOMEGUI_Swig.i -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -%{ -#include "SALOMEGUI_Swig.hxx" -%} - -%include "pointer.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 -{ - public: -/* construction/destruction */ - SALOMEGUI_Swig(); - ~SALOMEGUI_Swig(); - -/* check GUI */ - bool hasDesktop(); - -/* update object browser*/ - void updateObjBrowser(bool); - -/* get active study */ - int getActiveStudyId(); - const char *getActiveStudyName(); - -/* selection processing */ - int SelectedCount(); - const char *getSelected(int i); - void AddIObject(const char *Entry); - void RemoveIObject(const char *Entry); - void ClearIObjects(); - -/* display/erase */ - void Display(const char *Entry); - void DisplayOnly(const char *Entry); - void Erase(const char *Entry); - void DisplayAll(); - void EraseAll(); - bool IsInCurrentView(const char *Entry); - -/* get component name/username */ - const char* getComponentName( const char* ComponentUserName ); - const char* getComponentUserName( const char* ComponentName ); -}; diff --git a/src/SALOME_SWIG/SALOMEGUI_shared_modules.py b/src/SALOME_SWIG/SALOMEGUI_shared_modules.py deleted file mode 100755 index 25170ebfd..000000000 --- a/src/SALOME_SWIG/SALOMEGUI_shared_modules.py +++ /dev/null @@ -1,34 +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 -# -""" - -""" - -import SALOME_Session_idl - -from import_hook import register_name -register_name("SalomePyQt") - -# this function is required - -def init_shared_modules(): - """ - This function initializes shared modules that need to be - """ - pass diff --git a/src/SALOME_SWIG/examplevtk1.py b/src/SALOME_SWIG/examplevtk1.py deleted file mode 100755 index e214bedf8..000000000 --- a/src/SALOME_SWIG/examplevtk1.py +++ /dev/null @@ -1,40 +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 : examplevtk1.py -# Module : SALOME - -import libSalomePy -ren=libSalomePy.renderer -#iren=libSalomePy.interactor - -from libVTKCommonPython import * -from libVTKGraphicsPython import * -cone = vtkConeSource() -cone.SetResolution(8) -coneMapper = vtkPolyDataMapper() -coneMapper.SetInput(cone.GetOutput()) -coneActor = vtkActor() -coneActor.SetMapper(coneMapper) - -ren.AddActor(coneActor) -iren = vtkRenderWindowInteractor() - diff --git a/src/SALOME_SWIG/libSALOME_Swig.i b/src/SALOME_SWIG/libSALOME_Swig.i deleted file mode 100755 index a96601f7e..000000000 --- a/src/SALOME_SWIG/libSALOME_Swig.i +++ /dev/null @@ -1,31 +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 : libSALOME_Swig.i -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -%module libSALOME_Swig - -//%include "SALOME_NamingService.i" -%include "SALOMEGUI_Swig.i" - diff --git a/src/SALOME_SWIG/salome.py b/src/SALOME_SWIG/salome.py deleted file mode 100755 index 9d45865db..000000000 --- a/src/SALOME_SWIG/salome.py +++ /dev/null @@ -1,157 +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.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 7e7591262..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/superv/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() - -# 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/superv/newsupervisionexample.xml") - -print " " -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/supervisionexample.py.in b/src/SALOME_SWIG/supervisionexample.py.in deleted file mode 100755 index 66974aeb6..000000000 --- a/src/SALOME_SWIG/supervisionexample.py.in +++ /dev/null @@ -1,85 +0,0 @@ -#============================================================================== -# 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/superv/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() - -# 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/superv/newsupervisionexample.xml") - -print " " -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/supervisiongeomexample.py.in b/src/SALOME_SWIG/supervisiongeomexample.py.in deleted file mode 100755 index 8c56bb1f2..000000000 --- a/src/SALOME_SWIG/supervisiongeomexample.py.in +++ /dev/null @@ -1,103 +0,0 @@ - -# 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/test_big_table.py b/src/SALOME_SWIG/test_big_table.py deleted file mode 100755 index 78fa2e347..000000000 --- a/src/SALOME_SWIG/test_big_table.py +++ /dev/null @@ -1,68 +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 : test_big_table.py -# Author : Vadim SANDLER -# Module : SALOME -# $Header$ - -import salome -import math -import SALOMEDS - -# >>> Getting study builder ================================================== -myStudy = salome.myStudy -myBuilder = myStudy.NewBuilder() - -# >>> Creating virtual component ============================================= -myComponent = myStudy.FindComponent("VirtualComponent") -if not myComponent: - myComponent = myBuilder.NewComponent("VirtualComponent") - aName = myBuilder.FindOrCreateAttribute(myComponent, "AttributeName") - aName.SetValue("VirtualComponent") - -# >>> Creating object with Table of real[ 200 * 20 ] ======================== -myTRealObject = myBuilder.NewObject(myComponent) -AName = myBuilder.FindOrCreateAttribute(myTRealObject, "AttributeName") -AName.SetValue("Table Of Real") -ARealTable = myBuilder.FindOrCreateAttribute(myTRealObject, "AttributeTableOfReal") -myHorNb = 10 -myVerNb = 200 - -k={} -for j in range(0,myHorNb): - k[j] = j*10+1 -ARealTable.AddRow(k.values()) -ARealTable.SetRowTitle(1, "Frequency") -ARealTable.SetRowUnit(1, "Hz") - -for i in range(1,myVerNb+1): - for j in range(0,myHorNb): - if j % 2 == 1: - k[j] = math.log10(j*30*math.pi/180) * 20 + i * 15 + j*5 - else: - k[j] = math.sin(j*30*math.pi/180) * 20 + i * 15 + j*5 - ARealTable.AddRow(k.values()) - ARealTable.SetRowTitle(i+1, "Power " + str(i)) - ARealTable.SetRowUnit(i+1, "Wt") -ARealTable.SetTitle("Very useful data") - -# >>> Updating Object Browser ================================================ -salome.sg.updateObjBrowser(1) - -# ============================================================================ diff --git a/src/SALOME_SWIG/test_many_objects.py b/src/SALOME_SWIG/test_many_objects.py deleted file mode 100755 index 98de03f1e..000000000 --- a/src/SALOME_SWIG/test_many_objects.py +++ /dev/null @@ -1,88 +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 : visu_many_objects.py -# Author : Vadim SANDLER -# Module : SALOME -# $Header$ - -import salome -import SALOMEDS - -# >>> Getting study builder ================================================== -myStudy = salome.myStudy -myBuilder = myStudy.NewBuilder() - -# >>> Creating virtual component ============================================= -myComponent = myBuilder.NewComponent("VIRTUAL") -AName = myBuilder.FindOrCreateAttribute(myComponent, "AttributeName") -AName.SetValue("Virtual") -ACmt = myBuilder.FindOrCreateAttribute(myComponent, "AttributeComment") -ACmt.SetValue("Virtual") - -# >>> Creating objects ======================================================= -# TO CHANGE TOTAL NUMBER OF OBJECTS, SET PROPER , , -# IF YOU DON'T WANT TO ADD REFERENCES, SET = 0 -myNb1 = 20 -myNb2 = 5 -myNb3 = 3 -myAddRef = 1 - -if myAddRef == 1: - myContainer = myBuilder.NewObject(myComponent) - AName = myBuilder.FindOrCreateAttribute(myContainer, "AttributeName") - AName.SetValue("References") - ACmt = myBuilder.FindOrCreateAttribute(myContainer, "AttributeComment") - ACmt.SetValue("Container for objects") - -for i in range(0,myNb1): - myObject1 = myBuilder.NewObject(myComponent) - AName = myBuilder.FindOrCreateAttribute(myObject1, "AttributeName") - AName.SetValue("Object "+str(i)) - ACmt = myBuilder.FindOrCreateAttribute(myObject1, "AttributeComment") - ACmt.SetValue("Virtual object "+str(i)) - if myAddRef == 1: - myRefObject = myBuilder.NewObject(myContainer) - myBuilder.Addreference(myRefObject,myObject1); - - for j in range(0,myNb2): - myObject2 = myBuilder.NewObject(myObject1) - AName = myBuilder.FindOrCreateAttribute(myObject2, "AttributeName") - AName.SetValue("Object "+str(i)+"-"+str(j)) - ACmt = myBuilder.FindOrCreateAttribute(myObject2, "AttributeComment") - ACmt.SetValue("Virtual object "+str(i)+"-"+str(j)) - if myAddRef == 1: - myRefObject = myBuilder.NewObject(myContainer) - myBuilder.Addreference(myRefObject,myObject2); - - for k in range(0,myNb3): - myObject3 = myBuilder.NewObject(myObject2) - AName = myBuilder.FindOrCreateAttribute(myObject3, "AttributeName") - AName.SetValue("Object "+str(i)+"-"+str(j)+"-"+str(k)) - ACmt = myBuilder.FindOrCreateAttribute(myObject3, "AttributeComment") - ACmt.SetValue("Virtual object "+str(i)+"-"+str(j)+"-"+str(k)) - if myAddRef == 1: - myRefObject = myBuilder.NewObject(myContainer) - myBuilder.Addreference(myRefObject,myObject3); - -# >>> Updating Object Browser ================================================ -salome.sg.updateObjBrowser(1) - -# ============================================================================ - - diff --git a/src/SALOME_SWIG/test_remove_ref.py b/src/SALOME_SWIG/test_remove_ref.py deleted file mode 100755 index dcc18c922..000000000 --- a/src/SALOME_SWIG/test_remove_ref.py +++ /dev/null @@ -1,49 +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 : test_remove_ref.py -# Module : SALOMEDS - -from salome import * - -myBuilder = myStudy.NewBuilder() - - -obj1 = myStudy.FindObjectID("0:1") -if obj1 is None: print "Is null obj1 " -else: print obj1.GetID() - -obj2 = myBuilder.NewObject(obj1) -print "Obj2 ID = "+obj2.GetID() - -myBuilder.Addreference(obj1, obj2) - -(f, obj3) = obj1.ReferencedObject() - -print "Ref obj ID = "+obj3.GetID() - - -myBuilder.RemoveReference(obj1) - -(f, obj4) = obj1.ReferencedObject() - -print "Ref is found ", f - \ No newline at end of file diff --git a/src/SALOME_SWIG/test_table.py b/src/SALOME_SWIG/test_table.py deleted file mode 100755 index 0727594ce..000000000 --- a/src/SALOME_SWIG/test_table.py +++ /dev/null @@ -1,114 +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 : test_table.py -# Author : Vadim SANDLER -# Module : SALOME -# $Header$ - -import salome -import math -import SALOMEDS - -# >>> Getting study builder ================================================== -myStudy = salome.myStudy -myBuilder = myStudy.NewBuilder() - -# >>> Creating virtual component ============================================= -myComponent = myStudy.FindComponent("VirtualComponent") -if not myComponent: - myComponent = myBuilder.NewComponent("VirtualComponent") - aName = myBuilder.FindOrCreateAttribute(myComponent, "AttributeName") - aName.SetValue("VirtualComponent") - -# >>> Creating object with Table of integer ================================== -myTIntObject = myBuilder.NewObject(myComponent) -AName = myBuilder.FindOrCreateAttribute(myTIntObject, "AttributeName") -AName.SetValue("Table Of Integer") -AIntTable = myBuilder.FindOrCreateAttribute(myTIntObject, "AttributeTableOfInteger") - -a=[1,2,3,4,5,6,7,8,9,10] -AIntTable.AddRow(a) -a=[110,120,130,140,150,160,170,180,190,200] -AIntTable.AddRow(a) -a=[-1,272,0,0,-642,10000,13,578,-578,99] -AIntTable.AddRow(a) -AIntTable.SetTitle("TEST table of integer") -AIntTable.SetRowTitle(1,"FR") -AIntTable.SetRowUnit(1,"m/h") -AIntTable.SetRowTitle(2,"SR") -AIntTable.SetRowUnit(2,"s") -AIntTable.SetRowTitle(3,"TR") -AIntTable.SetRowUnit(3,"$") -c=["C1","C2","C3","C4","C5","C6","C7","C8","C9","C10"] -AIntTable.SetColumnTitles(c) - -# >>> Creating object with Table of real ===================================== -myTRealObject = myBuilder.NewObject(myComponent) -AName = myBuilder.FindOrCreateAttribute(myTRealObject, "AttributeName") -AName.SetValue("Table Of Real") -ARealTable = myBuilder.FindOrCreateAttribute(myTRealObject, "AttributeTableOfReal") - -k={} -l={} -for j in range(0,20): - k[j] = j*10+1 - l[j] = "C"+str(j+1) -ARealTable.AddRow(k.values()) -ARealTable.SetRowTitle(1, "Row 0") -ARealTable.SetRowUnit(1, "Hz") -ARealTable.SetColumnTitles(l.values()) -for i in range(1,11): - for j in range(1,21): - if j % 2 == 1: - k[j] = math.log10(j*30*math.pi/180) * 20 + i * 15 + j*5 - else: - k[j] = math.sin(j*30*math.pi/180) * 20 + i * 15 + j*5 - ARealTable.AddRow(k.values()) - ARealTable.SetRowTitle(i+1, "Row " + str(i)) - ARealTable.SetRowUnit(i+1, "Wt") -ARealTable.SetTitle("TEST table of real") - -# >>> Creating object with integer attribute ================================= -myIntObject = myBuilder.NewObject(myComponent) -AName = myBuilder.FindOrCreateAttribute(myIntObject, "AttributeName") -AName.SetValue("Integer") -AInt = myBuilder.FindOrCreateAttribute(myIntObject, "AttributeInteger") -AInt.SetValue(123) - -# >>> Creating object with real attribute ==================================== -myRealObject = myBuilder.NewObject(myComponent) -AName = myBuilder.FindOrCreateAttribute(myRealObject, "AttributeName") -AName.SetValue("Real") -AReal = myBuilder.FindOrCreateAttribute(myRealObject, "AttributeReal") -AReal.SetValue(-56.9634) - -# >>> Creating object with comment attribute ================================= -myCmtObject = myBuilder.NewObject(myComponent) -AName = myBuilder.FindOrCreateAttribute(myCmtObject, "AttributeName") -AName.SetValue("Comment") -ACmt = myBuilder.FindOrCreateAttribute(myCmtObject, "AttributeComment") -ACmt.SetValue("Just a comment") - -# >>> Updating Object Browser ================================================ -salome.sg.updateObjBrowser(1) - -# ============================================================================ - - - 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.in deleted file mode 100755 index f1ad96778..000000000 --- a/src/SOCC/Makefile.in +++ /dev/null @@ -1,53 +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 : Alexander Solovyov(OCN) -# 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@ - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= SOCC.h \ - SOCC_ViewModel.h \ - SOCC_Prs.h \ - SOCC_ViewWindow.h - -# Libraries targets -LIB = libSOCC.la - -LIB_SRC= SOCC_ViewModel.cxx \ - SOCC_Prs.cxx \ - SOCC_ViewWindow.cxx - -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@ diff --git a/src/SOCC/SOCC.h b/src/SOCC/SOCC.h deleted file mode 100755 index 99e77291a..000000000 --- a/src/SOCC/SOCC.h +++ /dev/null @@ -1,31 +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 -// -#ifdef WNT -#ifdef SOCC_EXPORTS -#define SOCC_EXPORT __declspec(dllexport) -#else -#define SOCC_EXPORT __declspec(dllimport) -#endif -#else -#define SOCC_EXPORT -#endif - -#if defined WNT -#pragma warning ( disable: 4251 ) -#endif diff --git a/src/SOCC/SOCC_Prs.cxx b/src/SOCC/SOCC_Prs.cxx deleted file mode 100644 index eb2cb6821..000000000 --- a/src/SOCC/SOCC_Prs.cxx +++ /dev/null @@ -1,92 +0,0 @@ -// SALOME OCCViewer : build OCC 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.com -// -// -// -// File : SOCC_Prs.cxx -// Author : Sergey ANIKIN -// Module : SALOME -// $Header$ - -#include "SOCC_Prs.h" -using namespace std; - -/*! - Default constructor -*/ -SOCC_Prs::SOCC_Prs() -{ - myToActivate = true; -} - -/*! - Standard constructor -*/ -SOCC_Prs::SOCC_Prs( const Handle(AIS_InteractiveObject)& obj ) -{ - AddObject( obj ); -} - -/*! - Destructor -*/ -SOCC_Prs::~SOCC_Prs() -{ - myObjects.Clear(); -} - -/*! - Get interactive objects list -*/ -void SOCC_Prs::GetObjects( AIS_ListOfInteractive& list ) const -{ - list = myObjects; -} - -/*! - Add interactive object -*/ -void SOCC_Prs::AddObject( const Handle(AIS_InteractiveObject)& obj ) -{ - myObjects.Append( obj ); -} - -/*! - \return 0 if list of the interactive objects is empty [ Reimplemented from SALOME_Prs ] -*/ -bool SOCC_Prs::IsNull() const -{ - return myObjects.IsEmpty() == Standard_True; -} - -/*! - This method is used for activisation/deactivisation of - objects in the moment of displaying -*/ -void SOCC_Prs::SetToActivate( const bool toActivate ) -{ - myToActivate = toActivate; -} - -bool SOCC_Prs::ToActivate() const -{ - return myToActivate; -} diff --git a/src/SOCC/SOCC_Prs.h b/src/SOCC/SOCC_Prs.h deleted file mode 100644 index 06fbce141..000000000 --- a/src/SOCC/SOCC_Prs.h +++ /dev/null @@ -1,71 +0,0 @@ -// SALOME OCCViewer : build OCC 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.com -// -// -// -// File : SOCC_Prs.h -// Author : Sergey ANIKIN -// Module : SALOME -// $Header$ - -#ifndef SOCC_Prs_H -#define SOCC_Prs_H - -#include "SOCC.h" - -#include - -#include -#include - -class SOCC_EXPORT SOCC_Prs : public SALOME_OCCPrs -{ -public: - SOCC_Prs(); - // Default constructor - SOCC_Prs( const Handle(AIS_InteractiveObject)& obj ); - // Standard constructor - ~SOCC_Prs(); - // Destructor - - void GetObjects( AIS_ListOfInteractive& list ) const; - // Get interactive objects list - void AddObject( const Handle(AIS_InteractiveObject)& obj ); - // Add interactive object - - bool IsNull() const; - // Reimplemented from SALOME_Prs - - /* This method is used for activisation/deactivisation of - objects in the moment of displaying */ - void SetToActivate( const bool ); - bool ToActivate() const; - -private: - AIS_ListOfInteractive myObjects; // list of interactive objects - bool myToActivate; -}; - -#endif - - - - diff --git a/src/SOCC/SOCC_ViewModel.cxx b/src/SOCC/SOCC_ViewModel.cxx deleted file mode 100755 index 999c2dd85..000000000 --- a/src/SOCC/SOCC_ViewModel.cxx +++ /dev/null @@ -1,701 +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 "SOCC_ViewModel.h" - -#include "SOCC_Prs.h" -#include "SOCC_ViewWindow.h" - -#include "SUIT_Session.h" -#include "SUIT_Application.h" - -//#include "ToolsGUI.h" - -// Temporarily commented to avoid awful dependecy on SALOMEDS -// TODO: better mechanism of storing display/erse status in a study -// should be provided... -//#include -//#include CORBA_CLIENT_HEADER(SALOMEDS) - -#include -#include - -#include -#include - -// Temporarily commented to avoid awful dependecy on SALOMEDS -// TODO: better mechanism of storing display/erse status in a study -// should be provided... -//#include -//#include -//#include -//#include - -//#include "SALOMEDSClient.hxx" -//#include "SALOMEDS_StudyManager.hxx" - -#include - -// in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study. -// SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from -// SALOMEDS::StudyManager - no linkage with SalomeApp. - -// Temporarily commented to avoid awful dependecy on SALOMEDS -// TODO: better mechanism of storing display/erse status in a study -// should be provided... -//static _PTR(Study) getStudyDS() -//{ -// SALOMEDSClient_Study* aStudy = NULL; -// _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() ); - - // get id of SUIT_Study, if it's a SalomeApp_Study, it will return - // id of its underlying SALOMEDS::Study -// SUIT_Application* app = SUIT_Session::session()->activeApplication(); -// if ( !app ) return _PTR(Study)(aStudy); -// SUIT_Study* stud = app->activeStudy(); -// if ( !stud ) return _PTR(Study)(aStudy); -// const int id = stud->id(); // virtual method, must return SALOMEDS_Study id - // get SALOMEDS_Study with this id from StudyMgr -// return aMgr->GetStudyByID( id ); -//} - -/*! - Constructor - \param DisplayTrihedron - is trihedron displayed -*/ -SOCC_Viewer::SOCC_Viewer( bool DisplayTrihedron ) -: OCCViewer_Viewer( DisplayTrihedron ) -{ -} - -/*! - Destructor -*/ -SOCC_Viewer::~SOCC_Viewer() -{ -} - -/*! - Hilights/unhilights object in viewer - \param obj - object to be updated - \param hilight - if it is true, object will be hilighted, otherwise it will be unhilighted - \param update - update current viewer -*/ -bool SOCC_Viewer::highlight( const Handle(SALOME_InteractiveObject)& obj, - bool hilight, bool upd ) -{ - bool isInLocal = getAISContext()->HasOpenedContext(); - //SUIT_Study* ActiveStudy = SUIT_Application::getDesktop()->getActiveStudy(); - //SALOME_Selection* Sel = SALOME_Selection::Selection( ActiveStudy->getSelection() ); - - AIS_ListOfInteractive List; - getAISContext()->DisplayedObjects(List); - - AIS_ListIteratorOfListOfInteractive ite(List); - for ( ; ite.More(); ite.Next() ) - { - Handle(SALOME_InteractiveObject) anObj = - Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); - - if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) ) - { - if ( !isInLocal ) - OCCViewer_Viewer::highlight( ite.Value(), hilight, false ); - // highlight subshapes only when local selection is active - else - { - /*if ( ite.Value()->IsKind( STANDARD_TYPE( SALOME_AISShape ) ) ) - { - Handle(SALOME_AISShape) aSh = Handle(SALOME_AISShape)::DownCast( ite.Value() ); - TColStd_IndexedMapOfInteger MapIndex; - Sel->GetIndex( IObject, MapIndex ); - aSh->highlightSubShapes( MapIndex, highlight ); - }*/ - } - break; - } - } - - if( upd ) - update(); - - return false; -} - -/*! - \return true if object is in viewer or in collector - \param obj - object to be checked - \param onlyInViewer - search object only in viewer (so object must be displayed) -*/ -bool SOCC_Viewer::isInViewer( const Handle(SALOME_InteractiveObject)& obj, - bool onlyInViewer ) -{ - AIS_ListOfInteractive List; - getAISContext()->DisplayedObjects(List); - - if( !onlyInViewer ) { - AIS_ListOfInteractive List1; - getAISContext()->ObjectsInCollector(List1); - List.Append(List1); - } - - AIS_ListIteratorOfListOfInteractive ite(List); - for ( ; ite.More(); ite.Next() ) - { - Handle(SALOME_InteractiveObject) anObj = - Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); - - if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) ) - return true; - } - return false; -} - -/*! - \return true if object is displayed in viewer - \param obj - object to be checked -*/ -bool SOCC_Viewer::isVisible( const Handle(SALOME_InteractiveObject)& obj ) -{ - AIS_ListOfInteractive List; - getAISContext()->DisplayedObjects( List ); - - AIS_ListIteratorOfListOfInteractive ite( List ); - for ( ; ite.More(); ite.Next() ) - { - Handle(SALOME_InteractiveObject) anObj = - Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); - - if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) ) - return getAISContext()->IsDisplayed( ite.Value() ); - } - - return false; -} - -/*! - Sets color of object - \param obj - object to be updated - \param color - new color - \param update - update current viewer -*/ -void SOCC_Viewer::setColor( const Handle(SALOME_InteractiveObject)& obj, - const QColor& color, bool update ) -{ - AIS_ListOfInteractive List; - getAISContext()->DisplayedObjects(List); - - AIS_ListIteratorOfListOfInteractive ite(List); - for ( ; ite.More(); ite.Next() ) - { - Handle(SALOME_InteractiveObject) anObj = - Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); - - if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) ) - { - OCCViewer_Viewer::setColor( ite.Value(), color, update ); - return; - } - } -} - -/*! - Changes display mode of object - \param obj - object to be processed - \param mode - new display mode - \param update - update current viewer -*/ -void SOCC_Viewer::switchRepresentation( const Handle(SALOME_InteractiveObject)& obj, - int mode, bool update ) -{ - AIS_ListOfInteractive List; - getAISContext()->DisplayedObjects(List); - - AIS_ListIteratorOfListOfInteractive ite(List); - for ( ; ite.More(); ite.Next() ) - { - Handle(SALOME_InteractiveObject) anObj = - Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); - - if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) ) - { - OCCViewer_Viewer::switchRepresentation( ite.Value(), mode, update ); - return; - } - } -} - -/*! - Changes transparency of object - \param obj - object to be processed - \param trans - new transparency - \param update - update current viewer -*/ -void SOCC_Viewer::setTransparency( const Handle(SALOME_InteractiveObject)& obj, - float trans, bool update ) -{ - AIS_ListOfInteractive List; - getAISContext()->DisplayedObjects( List ); - - AIS_ListIteratorOfListOfInteractive ite( List ); - for ( ; ite.More(); ite.Next() ) - { - Handle(SALOME_InteractiveObject) anObj = - Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); - - if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( obj ) ) - { - OCCViewer_Viewer::setTransparency( ite.Value(), trans, update ); - return; - } - } -} - -/*! - Changes name of object - \param obj - object to be renamed - \param name - new name -*/ -void SOCC_Viewer::rename( const Handle(SALOME_InteractiveObject)& obj, - const QString& name ) -{ - AIS_ListOfInteractive List; - getAISContext()->DisplayedObjects(List); - - AIS_ListIteratorOfListOfInteractive ite(List); - while (ite.More()) - { - if (ite.Value()->IsKind(STANDARD_TYPE(SALOME_AISShape))) - { - Handle(SALOME_AISShape) aSh = Handle(SALOME_AISShape)::DownCast(ite.Value()); - - if ( aSh->hasIO() ) - { - Handle(SALOME_InteractiveObject) IO = aSh->getIO(); - if ( IO->isSame( obj ) ) - { - aSh->setName( (char*)name.latin1() ); - break; - } - } - } - else if ( ite.Value()->IsKind( STANDARD_TYPE( SALOME_AISObject ) ) ) - { - Handle(SALOME_AISObject) aSh = Handle(SALOME_AISObject)::DownCast( ite.Value() ); - - // Add code here, if someone create a MODULE_AISObject. - } - ite.Next(); - } -} - - -/*! - Display presentation - \param prs - presentation -*/ -void SOCC_Viewer::Display( const SALOME_OCCPrs* prs ) -{ - // try do downcast object - const SOCC_Prs* anOCCPrs = dynamic_cast( prs ); - if ( !anOCCPrs || anOCCPrs->IsNull() ) - return; - - // get SALOMEDS Study - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - // _PTR(Study) study(getStudyDS()); - - // get context - Handle (AIS_InteractiveContext) ic = getAISContext(); - - // get all displayed objects - AIS_ListOfInteractive List; - ic->DisplayedObjects( List ); - // get objects in the collector - AIS_ListOfInteractive ListCollector; - ic->ObjectsInCollector( ListCollector ); - - // get objects to be displayed - AIS_ListOfInteractive anAISObjects; - anOCCPrs->GetObjects( anAISObjects ); - - AIS_ListIteratorOfListOfInteractive aIter( anAISObjects ); - for ( ; aIter.More(); aIter.Next() ) - { - Handle(AIS_InteractiveObject) anAIS = aIter.Value(); - if ( !anAIS.IsNull() ) - { - // try to find presentation in the viewer - bool bDisplayed = false; - AIS_ListIteratorOfListOfInteractive ite( List ); - for ( ; ite.More(); ite.Next() ) - { - // compare presentations by handles - // if the object is already displayed - nothing to do more - if ( ite.Value() == anAIS ) - { - // Deactivate object if necessary - if ( !anOCCPrs->ToActivate() ) - ic->Deactivate( anAIS ); - bDisplayed = true; - break; - } - } - - if ( bDisplayed ) - continue; - - // then try to find presentation in the collector - bDisplayed = false; - ite.Initialize( ListCollector ); - for ( ; ite.More(); ite.Next() ) - { - // compare presentations by handles - // if the object is in collector - display it - if ( ite.Value() == anAIS ) - { - ic->DisplayFromCollector( anAIS, false ); - - // Deactivate object if necessary - if ( !anOCCPrs->ToActivate() ) - ic->Deactivate( anAIS ); - bDisplayed = true; - - // Set visibility flag - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //Handle(SALOME_InteractiveObject) anObj = - // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() ); - //if ( !anObj.IsNull() && anObj->hasEntry() ) - //{ - // if ( study ) - // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this ); - //} - break; - } - } - if ( bDisplayed ) - continue; - - // if object is not displayed and not found in the collector - display it - if ( anAIS->IsKind( STANDARD_TYPE(AIS_Trihedron) ) ) - { - Handle(AIS_Trihedron) aTrh = Handle(AIS_Trihedron)::DownCast( anAIS ); - double aNewSize = 100, aSize = 100; - getTrihedronSize( aNewSize, aSize ); - aTrh->SetSize( aTrh == getTrihedron() ? aNewSize : 0.5 * aNewSize ); - } - - ic->Display( anAIS, false ); - - // Set visibility flag - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //Handle(SALOME_InteractiveObject) anObj = - // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() ); - //if ( !anObj.IsNull() && anObj->hasEntry() ) - //{ - // if ( study ) - // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this ); - //} - - // Deactivate object if necessary - if ( !anOCCPrs->ToActivate() ) - ic->Deactivate( anAIS ); - } - } -} - - -/*! - Erase presentation - \param prs - presentation - \param forced - removes object from context -*/ -void SOCC_Viewer::Erase( const SALOME_OCCPrs* prs, const bool forced ) -{ - // try do downcast object - const SOCC_Prs* anOCCPrs = dynamic_cast( prs ); - if ( !anOCCPrs || anOCCPrs->IsNull() ) - return; - - // get SALOMEDS Study - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - // _PTR(Study) study(getStudyDS()); - - // get context - Handle(AIS_InteractiveContext) ic = getAISContext(); - - // get objects to be erased - AIS_ListOfInteractive anAISObjects; - anOCCPrs->GetObjects( anAISObjects ); - - AIS_ListIteratorOfListOfInteractive aIter( anAISObjects ); - for ( ; aIter.More(); aIter.Next() ) { - Handle(AIS_InteractiveObject) anAIS = aIter.Value(); - if ( !anAIS.IsNull() ) { - // erase the object from context : move it to collector - ic->Erase( anAIS, false, forced ? false : true ); - - // Set visibility flag if necessary - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //if ( !forced ) - //{ - // Handle(SALOME_InteractiveObject) anObj = - // Handle(SALOME_InteractiveObject)::DownCast( anAIS->GetOwner() ); - // if ( !anObj.IsNull() && anObj->hasEntry() ) - // { - // if ( study ) - // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this ); - // } - //} - } - } -} - - -/*! - Erase all presentations - \param forced - removes all objects from context -*/ -void SOCC_Viewer::EraseAll( const bool forced ) -{ - // get SALOMEDS Study - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - // _PTR(Study) study(getStudyDS()); - - // get context - Handle(AIS_InteractiveContext) ic = getAISContext(); - - // check if trihedron is displayed - Standard_Boolean isTrihedronDisplayed = ic->IsDisplayed( getTrihedron() ); - - // get objects to be erased (all currently displayed objects) - AIS_ListOfInteractive aList; - ic->DisplayedObjects( aList ); - AIS_ListIteratorOfListOfInteractive anIter( aList ); - for ( ; anIter.More(); anIter.Next() ) { - if ( isTrihedronDisplayed && anIter.Value()->DynamicType() == STANDARD_TYPE( AIS_Trihedron ) ) - continue; - - // erase an object - Handle(AIS_InteractiveObject) anIO = anIter.Value(); - ic->Erase( anIO, false, forced ? false : true ); - - // Set visibility flag if necessary - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //if ( !forced ) { - // Handle(SALOME_InteractiveObject) anObj = - // Handle(SALOME_InteractiveObject)::DownCast( anIO->GetOwner() ); - - // if ( !anObj.IsNull() && anObj->hasEntry() ) { - // if ( study ) - // ToolsGUI::SetVisibility( study, anObj->getEntry(), true, this ); - // } - //} - } - - // display trihedron if necessary - if ( isTrihedronDisplayed ) - getAISContext()->Display( getTrihedron() ); - else - Repaint(); -} - -/*! - Create presentation corresponding to the entry - \param entry - entry -*/ -SALOME_Prs* SOCC_Viewer::CreatePrs( const char* entry ) -{ - SOCC_Prs* prs = new SOCC_Prs(); - if ( entry ) - { - // get context - Handle(AIS_InteractiveContext) ic = getAISContext(); - - // get displayed objects - AIS_ListOfInteractive List; - ic->DisplayedObjects( List ); - // get objects in the collector - AIS_ListOfInteractive ListCollector; - ic->ObjectsInCollector( ListCollector ); - List.Append( ListCollector ); - - AIS_ListIteratorOfListOfInteractive ite( List ); - for ( ; ite.More(); ite.Next() ) - { - Handle(SALOME_InteractiveObject) anObj = - Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); - - if ( !anObj.IsNull() && anObj->hasEntry() && strcmp( anObj->getEntry(), entry ) == 0 ) - prs->AddObject( ite.Value() ); - } - } - return prs; -} - -/*! - Activates selection of sub shapes -*/ -void SOCC_Viewer::LocalSelection( const SALOME_OCCPrs* thePrs, const int theMode ) -{ - Handle(AIS_InteractiveContext) ic = getAISContext(); - - const SOCC_Prs* anOCCPrs = dynamic_cast( thePrs ); - if ( ic.IsNull() ) - return; - - // Open local context if there is no one - bool allObjects = thePrs == 0 || thePrs->IsNull(); - if ( !ic->HasOpenedContext() ) { - ic->ClearCurrents( false ); - ic->OpenLocalContext( allObjects, true, true ); - } - - AIS_ListOfInteractive anObjs; - // Get objects to be activated - if ( allObjects ) - ic->DisplayedObjects( anObjs ); - else - anOCCPrs->GetObjects( anObjs ); - - // Activate selection of objects from prs - AIS_ListIteratorOfListOfInteractive aIter( anObjs ); - for ( ; aIter.More(); aIter.Next() ) { - Handle(AIS_InteractiveObject) anAIS = aIter.Value(); - if ( !anAIS.IsNull() ) - { - if ( anAIS->IsKind( STANDARD_TYPE( AIS_Shape ) ) ) - { - ic->Load( anAIS, -1, false ); - ic->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)theMode ) ); - } - else if ( anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron) ) - { - ic->Load( anAIS, -1, false ); - ic->Activate( anAIS, theMode ); - } - } - } -} - -/*! - Deactivates selection of sub shapes -*/ -void SOCC_Viewer::GlobalSelection( const bool update ) const -{ - Handle(AIS_InteractiveContext) ic = getAISContext(); - if ( !ic.IsNull() ) - { - ic->CloseAllContexts( false ); - if ( update ) - ic->CurrentViewer()->Redraw(); - } -} - -/*! - Auxiliary method called before displaying of objects -*/ -void SOCC_Viewer::BeforeDisplay( SALOME_Displayer* d ) -{ - d->BeforeDisplay( this, SALOME_OCCViewType() ); -} - -/*! - Auxiliary method called after displaying of objects -*/ -void SOCC_Viewer::AfterDisplay( SALOME_Displayer* d ) -{ - d->AfterDisplay( this, SALOME_OCCViewType() ); -} - -/*! - Get new and current trihedron size corresponding to the current model size -*/ -bool SOCC_Viewer::getTrihedronSize( double& theNewSize, double& theSize ) -{ - theNewSize = 100; - theSize = 100; - - //SRN: BUG IPAL8996, a usage of method ActiveView without an initialization - Handle(V3d_Viewer) viewer = getViewer3d(); - viewer->InitActiveViews(); - if(!viewer->MoreActiveViews()) return false; - - Handle(V3d_View) view3d = viewer->ActiveView(); - //SRN: END of fix - - if ( view3d.IsNull() ) - return false; - - double Xmin = 0, Ymin = 0, Zmin = 0, Xmax = 0, Ymax = 0, Zmax = 0; - double aMaxSide; - - view3d->View()->MinMaxValues( Xmin, Ymin, Zmin, Xmax, Ymax, Zmax ); - - if ( Xmin == RealFirst() || Ymin == RealFirst() || Zmin == RealFirst() || - Xmax == RealLast() || Ymax == RealLast() || Zmax == RealLast() ) - return false; - - aMaxSide = Xmax - Xmin; - if ( aMaxSide < Ymax -Ymin ) aMaxSide = Ymax -Ymin; - if ( aMaxSide < Zmax -Zmin ) aMaxSide = Zmax -Zmin; - - float aSizeInPercents = SUIT_Session::session()->resourceMgr()->doubleValue("Viewer","TrihedronSize", 105.); - - static double EPS = 5.0E-3; - theSize = getTrihedron()->Size(); - theNewSize = aMaxSide*aSizeInPercents / 100.0; - - return fabs( theNewSize - theSize ) > theSize * EPS || - fabs( theNewSize - theSize) > theNewSize * EPS; -} - - -/*! - Updates current viewer -*/ -void SOCC_Viewer::Repaint() -{ -// onAdjustTrihedron(); - getViewer3d()->Update(); -} - - -/*! - create SOCC_ViewWindow -*/ -SUIT_ViewWindow* SOCC_Viewer::createView( SUIT_Desktop* theDesktop ) -{ - SOCC_ViewWindow* view = new SOCC_ViewWindow(theDesktop, this); - initView( view ); - return view; -} diff --git a/src/SOCC/SOCC_ViewModel.h b/src/SOCC/SOCC_ViewModel.h deleted file mode 100755 index 6d2d04025..000000000 --- a/src/SOCC/SOCC_ViewModel.h +++ /dev/null @@ -1,72 +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 -// -#ifndef SOCC_VIEWMODEL_H -#define SOCC_VIEWMODEL_H - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include "SOCC.h" -#include "SALOME_Prs.h" -#include "OCCViewer_ViewModel.h" -#include "SALOME_InteractiveObject.hxx" - -class SOCC_EXPORT SOCC_Viewer: public OCCViewer_Viewer, public SALOME_View -{ - Q_OBJECT - -public: - SOCC_Viewer( bool DisplayTrihedron = true ); - virtual ~SOCC_Viewer(); - - /* Selection management */ - bool highlight( const Handle(SALOME_InteractiveObject)&, bool, bool=true ); - bool isInViewer( const Handle(SALOME_InteractiveObject)&, bool=false ); - - void setColor( const Handle(SALOME_InteractiveObject)&, const QColor&, bool=true ); - void switchRepresentation( const Handle(SALOME_InteractiveObject)&, int, bool=true ); - void setTransparency( const Handle(SALOME_InteractiveObject)&, float, bool=true ); - - void rename( const Handle(SALOME_InteractiveObject)&, const QString& ); - - virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop); - - /* Reimplemented from SALOME_View */ - virtual void Display( const SALOME_OCCPrs* ); - virtual void Erase( const SALOME_OCCPrs*, const bool = false ); - virtual void EraseAll( const bool = false ); - virtual SALOME_Prs* CreatePrs( const char* entry = 0 ); - virtual void BeforeDisplay( SALOME_Displayer* d ); - virtual void AfterDisplay ( SALOME_Displayer* d ); - virtual void LocalSelection( const SALOME_OCCPrs*, const int ); - virtual void GlobalSelection( const bool = false ) const; - virtual bool isVisible( const Handle(SALOME_InteractiveObject)& ); - virtual void Repaint(); - - // a utility function, used by SALOME_View_s methods - bool getTrihedronSize( double& theNewSize, double& theSize ); - -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SOCC/SOCC_ViewWindow.cxx b/src/SOCC/SOCC_ViewWindow.cxx deleted file mode 100644 index 2e519687b..000000000 --- a/src/SOCC/SOCC_ViewWindow.cxx +++ /dev/null @@ -1,103 +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 "SOCC_ViewWindow.h" - -#include "OCCViewer_ViewPort3d.h" - -#include "SUIT_Accel.h" - -/*! - Constructor -*/ -SOCC_ViewWindow -::SOCC_ViewWindow( SUIT_Desktop* theDesktop, - OCCViewer_Viewer* theModel) - : OCCViewer_ViewWindow( theDesktop, theModel ) -{ -} - -/*! - Destructor -*/ -SOCC_ViewWindow -::~SOCC_ViewWindow() -{ -} - -/*! - Performs action - \param theAction - type of action -*/ -bool -SOCC_ViewWindow -::action( const int theAction ) -{ - const int inc = 10; - int cx, cy; - if ( theAction == SUIT_Accel::ZoomIn || theAction == SUIT_Accel::ZoomOut || - theAction == SUIT_Accel::RotateLeft || theAction == SUIT_Accel::RotateRight || - theAction == SUIT_Accel::RotateUp || theAction == SUIT_Accel::RotateDown ) { - cx = myViewPort->width() / 2; - cy = myViewPort->height() / 2; - } - switch ( theAction ) { - case SUIT_Accel::PanLeft : - myViewPort->pan( -inc, 0 ); - break; - case SUIT_Accel::PanRight : - myViewPort->pan( inc, 0 ); - break; - case SUIT_Accel::PanUp : - myViewPort->pan( 0, inc ); - break; - case SUIT_Accel::PanDown : - myViewPort->pan( 0, -inc ); - break; - case SUIT_Accel::ZoomIn : - myViewPort->zoom( cx, cy, cx + inc, cy + inc ); - break; - case SUIT_Accel::ZoomOut : - myViewPort->zoom( cx, cy, cx - inc, cy - inc ); - break; - case SUIT_Accel::ZoomFit : - myViewPort->fitAll(); - break; - case SUIT_Accel::RotateLeft : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx - inc, cy ); - myViewPort->endRotation(); - break; - case SUIT_Accel::RotateRight : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx + inc, cy ); - myViewPort->endRotation(); - break; - case SUIT_Accel::RotateUp : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx, cy - inc ); - myViewPort->endRotation(); - break; - case SUIT_Accel::RotateDown : - myViewPort->startRotation( cx, cy ); - myViewPort->rotate( cx, cy + inc ); - myViewPort->endRotation(); - break; - } - return true; -} diff --git a/src/SOCC/SOCC_ViewWindow.h b/src/SOCC/SOCC_ViewWindow.h deleted file mode 100644 index e30afe511..000000000 --- a/src/SOCC/SOCC_ViewWindow.h +++ /dev/null @@ -1,46 +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 -// -#ifndef SOCC_VIEWWINDOW_H -#define SOCC_VIEWWINDOW_H - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include "SOCC.h" -#include "OCCViewer_ViewWindow.h" - -class SOCC_EXPORT SOCC_ViewWindow : public OCCViewer_ViewWindow -{ - Q_OBJECT; - -public: - SOCC_ViewWindow( SUIT_Desktop*, OCCViewer_Viewer* ); - virtual ~SOCC_ViewWindow(); - -protected: - virtual bool action( const int ); - -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SPlot2d/Makefile.in b/src/SPlot2d/Makefile.in deleted file mode 100644 index 7e9240945..000000000 --- a/src/SPlot2d/Makefile.in +++ /dev/null @@ -1,60 +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 \ - SPlot2d_ViewWindow.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 \ - SPlot2d_ViewWindow.cxx - -LIB_MOC = \ - SPlot2d_ViewModel.h \ - SPlot2d_ViewWindow.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.h b/src/SPlot2d/SPlot2d.h deleted file mode 100644 index 39e4c1245..000000000 --- a/src/SPlot2d/SPlot2d.h +++ /dev/null @@ -1,31 +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 -// -#ifdef WNT -#ifdef SPLOT2D_EXPORTS -#define SPLOT2D_EXPORT __declspec(dllexport) -#else -#define SPLOT2D_EXPORT __declspec(dllimport) -#endif -#else -#define SPLOT2D_EXPORT -#endif - -#if defined WNT -#pragma warning ( disable: 4251 ) -#endif diff --git a/src/SPlot2d/SPlot2d_Curve.cxx b/src/SPlot2d/SPlot2d_Curve.cxx deleted file mode 100644 index 87439441f..000000000 --- a/src/SPlot2d/SPlot2d_Curve.cxx +++ /dev/null @@ -1,139 +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 : SPlot2d_Curve.cxx -// Author : Sergey RUIN -// Module : SUIT - -#include "SPlot2d_Curve.h" -using namespace std; - -/*! - Constructor -*/ -SPlot2d_Curve::SPlot2d_Curve() -:Plot2d_Curve() -{ -} - -/*! - Destructor -*/ -SPlot2d_Curve::~SPlot2d_Curve() -{ -} - -/*! - Copy constructor. Makes deep copy of data. -*/ -SPlot2d_Curve::SPlot2d_Curve( const SPlot2d_Curve& curve ) -{ - myAutoAssign = curve.isAutoAssign(); - myHorTitle = curve.getHorTitle(); - myVerTitle = curve.getVerTitle(); - myHorUnits = curve.getHorUnits(); - myVerUnits = curve.getVerUnits(); - myColor = curve.getColor(); - myMarker = curve.getMarker(); - myLine = curve.getLine(); - myLineWidth = curve.getLineWidth(); - myPoints = curve.getPointList(); - myIO = curve.getIO(); - myTableIO = curve.getTableIO(); -} - -/*! - operator=. Makes deep copy of data. -*/ -SPlot2d_Curve& SPlot2d_Curve::operator=( const SPlot2d_Curve& curve ) -{ - myAutoAssign = curve.isAutoAssign(); - myHorTitle = curve.getHorTitle(); - myVerTitle = curve.getVerTitle(); - myHorUnits = curve.getHorUnits(); - myVerUnits = curve.getVerUnits(); - myColor = curve.getColor(); - myMarker = curve.getMarker(); - myLine = curve.getLine(); - myLineWidth = curve.getLineWidth(); - myPoints = curve.getPointList(); - myIO = curve.getIO(); - myTableIO = curve.getTableIO(); - return *this; -} - -/*! - \return corresponding SALOME_InteractiveObject -*/ -Handle(SALOME_InteractiveObject) SPlot2d_Curve::getIO() const -{ - return myIO; -} - -/*! - Sets corresponding SALOME_InteractiveObject - \param io - SALOME_InteractiveObject -*/ -void SPlot2d_Curve::setIO( const Handle(SALOME_InteractiveObject)& io ) -{ - myIO = io; -} - -/*! - \return true if curve has table interactive object -*/ -bool SPlot2d_Curve::hasTableIO() const -{ - return !myTableIO.IsNull(); -} - -/*! - \return table interactive object of curve -*/ -Handle(SALOME_InteractiveObject) SPlot2d_Curve::getTableIO() const -{ - return myTableIO; -} - -/*! - Sets table interactive object of curve - \param io - SALOME_InteractiveObject -*/ -void SPlot2d_Curve::setTableIO( const Handle(SALOME_InteractiveObject)& io ) -{ - myTableIO = io; -} - -/*! - \return SALOME_InteractiveObject -*/ -bool SPlot2d_Curve::hasIO() const -{ - return !myIO.IsNull(); -} - -/*! - \return table title -*/ -QString SPlot2d_Curve::getTableTitle() const -{ - QString title; - if( hasTableIO() ) - title = getTableIO()->getName(); - return title; -} diff --git a/src/SPlot2d/SPlot2d_Curve.h b/src/SPlot2d/SPlot2d_Curve.h deleted file mode 100644 index f75519ead..000000000 --- a/src/SPlot2d/SPlot2d_Curve.h +++ /dev/null @@ -1,64 +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 : SPlot2d_Curve.h -// Author : Sergey RUIN -// Module : SUIT - -#ifndef SPlot2d_Curve_h -#define SPlot2d_Curve_h - -#include "SPlot2d.h" - -#include "Plot2d_Curve.h" - -#include -#include -#include -#ifndef _Handle_SALOME_InteractiveObject_HeaderFile -#include -#endif -#include "SALOME_InteractiveObject.hxx" - -class SPLOT2D_EXPORT SPlot2d_Curve : public Plot2d_Curve -{ -public: - - SPlot2d_Curve(); - virtual ~SPlot2d_Curve(); - SPlot2d_Curve( const SPlot2d_Curve& curve ); - SPlot2d_Curve& operator= ( const SPlot2d_Curve& curve ); - - virtual QString getTableTitle() const; - - virtual bool hasIO() const; - virtual Handle(SALOME_InteractiveObject) getIO() const; - virtual void setIO( const Handle(SALOME_InteractiveObject)& ); - - virtual bool hasTableIO() const; - virtual Handle(SALOME_InteractiveObject) getTableIO() const; - virtual void setTableIO( const Handle(SALOME_InteractiveObject)& ); - -private: - Handle(SALOME_InteractiveObject) myIO; - Handle(SALOME_InteractiveObject) myTableIO; -}; - -#endif // SPlot2d_Curve_h - - diff --git a/src/SPlot2d/SPlot2d_Prs.cxx b/src/SPlot2d/SPlot2d_Prs.cxx deleted file mode 100644 index 68739a0c6..000000000 --- a/src/SPlot2d/SPlot2d_Prs.cxx +++ /dev/null @@ -1,60 +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 : SPlot2d_Prs.cxx -// Author : Sergey RUIN -// Module : SUIT - -#include "SPlot2d_Prs.h" -#ifndef WNT -using namespace std; -#endif - -/*! - Default constructor -*/ -SPlot2d_Prs::SPlot2d_Prs() -:Plot2d_Prs() -{ -} - -/*! - Standard constructor -*/ -SPlot2d_Prs::SPlot2d_Prs( const Plot2d_Curve* obj ) -:Plot2d_Prs(obj) -{ -} - -/*! - Standard constructor -*/ -SPlot2d_Prs::SPlot2d_Prs( const Plot2d_Prs* prs ) -{ - mySecondY = prs->isSecondY(); - myCurves = prs->getCurves(); -} - -/*! - Destructor -*/ -SPlot2d_Prs::~SPlot2d_Prs() -{ -} - - diff --git a/src/SPlot2d/SPlot2d_Prs.h b/src/SPlot2d/SPlot2d_Prs.h deleted file mode 100644 index 77e878172..000000000 --- a/src/SPlot2d/SPlot2d_Prs.h +++ /dev/null @@ -1,57 +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 : SPlot2d_Prs.h -// Author : Sergey RUIN -// Module : SUIT - -#ifndef SPLOT2D_PRS_H -#define SPLOT2D_PRS_H - -#include "SPlot2d.h" -#include "SALOME_Prs.h" -#include "Plot2d_Prs.h" - -#include - -class Plot2d_Curve; - -class SPLOT2D_EXPORT SPlot2d_Prs : public SALOME_Prs2d, public Plot2d_Prs -{ -public: - - // Default constructor - SPlot2d_Prs(); - - // Standard constructor - SPlot2d_Prs( const Plot2d_Curve* obj ); - - SPlot2d_Prs( const Plot2d_Prs* prs ); - - // Destructor - ~SPlot2d_Prs(); - - virtual bool IsNull() const { return Plot2d_Prs::IsNull(); } - - // Get curves list - // Note: Depricated method, use method getCurves - curveList GetObjects() const { return getCurves(); } - -}; - -#endif diff --git a/src/SPlot2d/SPlot2d_ViewModel.cxx b/src/SPlot2d/SPlot2d_ViewModel.cxx deleted file mode 100644 index 527a8a135..000000000 --- a/src/SPlot2d/SPlot2d_ViewModel.cxx +++ /dev/null @@ -1,394 +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 : SPlot2d_Viewer.cxx -// Author : Sergey RUIN -// Module : SUIT - -#include "SPlot2d_ViewModel.h" - -#include "SPlot2d_ViewWindow.h" - -#include "SPlot2d_Prs.h" -#include "SUIT_Session.h" -#include "SUIT_Application.h" - -//#include "utilities.h" -#include "qapplication.h" -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -//ASL: Temporary commented in order to avoir dependency on SALOMEDS - -//#include "SALOMEDSClient.hxx" -//#include "SALOMEDS_StudyManager.hxx" - -// in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study. -// SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from -// SALOMEDS::StudyManager - no linkage with SalomeApp. - -/*static _PTR(Study) getStudyDS() -{ - SALOMEDSClient_Study* aStudy = NULL; - _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() ); - - // get id of SUIT_Study, if it's a SalomeApp_Study, it will return - // id of its underlying SALOMEDS::Study - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( !app ) return _PTR(Study)(aStudy); - SUIT_Study* stud = app->activeStudy(); - if ( !stud ) return _PTR(Study)(aStudy); - const int id = stud->id(); // virtual method, must return SALOMEDS_Study id - // get SALOMEDS_Study with this id from StudyMgr - return aMgr->GetStudyByID( id ); -} */ - -/*! - Constructor -*/ -SPlot2d_Viewer::SPlot2d_Viewer( bool theAutoDel ) -: Plot2d_Viewer( theAutoDel ) -{ -} - -/*! - Destructor -*/ -SPlot2d_Viewer::~SPlot2d_Viewer() -{ -} - -/*! - Renames curve if it is found -*/ -void SPlot2d_Viewer::rename( const Handle(SALOME_InteractiveObject)& IObject, - const QString& newName, Plot2d_ViewFrame* fr ) -{ - Plot2d_ViewFrame* aViewFrame = fr ? fr : getActiveViewFrame(); - if( !aViewFrame ) - return; - - QIntDictIterator it( aViewFrame->getCurves() ); - for( ; it.current(); ++it ) - { - SPlot2d_Curve* aCurve = dynamic_cast( it.current() ); - if( aCurve && aCurve->hasIO() && aCurve->getIO()->isSame( IObject ) ) - { - aCurve->setVerTitle( newName ); - int key = aViewFrame->hasCurve( aCurve ); - if( key ) - aViewFrame->setCurveTitle( key, newName ); - } - - if( aCurve && aCurve->hasTableIO() && aCurve->getTableIO()->isSame( IObject ) ) - aCurve->getTableIO()->setName( newName.latin1() ); - } - aViewFrame->updateTitles(); -} - -/*! - Renames all copies of object in all view windows - \param IObj - object to be renamed - \param name - new name -*/ -void SPlot2d_Viewer::renameAll( const Handle(SALOME_InteractiveObject)& IObj, const QString& name ) -{ - SUIT_ViewManager* vm = getViewManager(); - if ( vm ) - { - const QPtrVector& wnds = vm->getViews(); - for ( uint i = 0; i < wnds.size(); i++ ) - { - Plot2d_ViewWindow* pwnd = dynamic_cast( wnds.at( i ) ); - rename( IObj, name, pwnd->getViewFrame() ); - } - } -} - -/*! - Returns true if interactive object is presented in the viewer -*/ -bool SPlot2d_Viewer::isInViewer( const Handle(SALOME_InteractiveObject)& IObject ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame == NULL) return 0; - - if( getCurveByIO( IObject ) != NULL ) - return 1; - else{ - if(!IObject.IsNull()){ - QIntDictIterator it(aViewFrame->getCurves()); - for(; it.current();++it) { - SPlot2d_Curve* aCurve = dynamic_cast(it.current()); - if(aCurve->hasIO() && aCurve->getTableIO()->isSame(IObject)) - return 1; - } - } - } - return 0; -} - - -/*! - Actually this method just re-displays curves which refers to the -*/ -void SPlot2d_Viewer::Display( const Handle(SALOME_InteractiveObject)& IObject, bool update ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame == NULL) return; - - SPlot2d_Curve* curve = getCurveByIO( IObject ); - if ( curve ) - aViewFrame->updateCurve( curve, update ); -} - -/*! - Actually this method just erases all curves which don't refer to - and re-displays curve which is of -*/ -void SPlot2d_Viewer::DisplayOnly( const Handle(SALOME_InteractiveObject)& IObject ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame == NULL) return; - - Plot2d_Curve* curve = getCurveByIO( IObject ); - QIntDictIterator it( aViewFrame->getCurves() ); - for ( ; it.current(); ++it ) { - if(it.current() != curve) - aViewFrame->eraseCurve( curve ); - else - aViewFrame->updateCurve( curve, false ); - } - - aViewFrame->Repaint(); -} - -/*! - Removes from the viewer the curves which refer to -*/ -void SPlot2d_Viewer::Erase( const Handle(SALOME_InteractiveObject)& IObject, bool update ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame == NULL) return; - - SPlot2d_Curve* curve = getCurveByIO( IObject ); - if ( curve ) - aViewFrame->eraseCurve( curve, update ); - - // it can be table or container object selected - //ASL: Temporary commented in order to avoid dependency on SALOMEDS -/* _PTR(Study) aStudy = getStudyDS(); - _PTR(SObject) aSO = aStudy->FindObjectID(IObject->getEntry()); - if ( aSO ) { - _PTR(ChildIterator) aIter = aStudy->NewChildIterator( aSO ); - for ( ; aIter->More(); aIter->Next() ) { - _PTR(SObject) aChildSO = aIter->Value(); - _PTR(SObject) refSO; - if ( aChildSO->ReferencedObject( refSO ) && refSO ) - aChildSO = refSO; - curve = getCurveByIO( new SALOME_InteractiveObject( aChildSO->GetID().c_str(), "") ); - if ( curve ) - aViewFrame->eraseCurve( curve, update ); - } - } -*/ - -} - -/*! - Removes all curves from the view -*/ -void SPlot2d_Viewer::EraseAll(const bool /*forced*/) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame) aViewFrame->EraseAll(); -} - -/*! - Redraws Viewer contents -*/ -void SPlot2d_Viewer::Repaint() -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame) aViewFrame->Repaint(); -} - -/*! - Display presentation -*/ -void SPlot2d_Viewer::Display( const SALOME_Prs2d* prs ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - Plot2d_Prs* aPrs = dynamic_cast(const_cast(prs)); - if(aViewFrame && aPrs) aViewFrame->Display(aPrs); -} - -/*! - Erase presentation -*/ -void SPlot2d_Viewer::Erase( const SALOME_Prs2d* prs, const bool ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - Plot2d_Prs* aPrs = dynamic_cast(const_cast(prs)); - if(aViewFrame && aPrs) aViewFrame->Erase(aPrs); -} - -/*! - Create presentation by entry -*/ -SALOME_Prs* SPlot2d_Viewer::CreatePrs( const char* entry ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame) - { - Plot2d_Prs* prs = aViewFrame->CreatePrs(entry); - if( prs ) - return new SPlot2d_Prs( prs ); - } - - return NULL; -} - -/*! - Axiluary method called before displaying of objects -*/ -void SPlot2d_Viewer::BeforeDisplay( SALOME_Displayer* d ) -{ - d->BeforeDisplay( this, SALOME_Plot2dViewType() ); -} - -/*! - Axiluary method called after displaying of objects -*/ -void SPlot2d_Viewer::AfterDisplay( SALOME_Displayer* d ) -{ - d->AfterDisplay( this, SALOME_Plot2dViewType() ); -} - -/*! - Returns true if interactive object is presented in the viewer and displayed -*/ -bool SPlot2d_Viewer::isVisible( const Handle(SALOME_InteractiveObject)& IObject ) -{ - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame == NULL) return false; - - SPlot2d_Curve* curve = getCurveByIO( IObject ); - return aViewFrame->isVisible( curve ); -} - -/*! - Return interactive obeject if is presented in the viewer -*/ -Handle(SALOME_InteractiveObject) SPlot2d_Viewer::FindIObject( const char* Entry ) -{ - Handle(SALOME_InteractiveObject) anIO; - Plot2d_ViewFrame* aViewFrame = getActiveViewFrame(); - if(aViewFrame == NULL) return anIO; - - QIntDictIterator it( aViewFrame->getCurves() ); - for ( ; it.current(); ++it ) { - SPlot2d_Curve* aCurve = dynamic_cast(it.current()); - if ( aCurve->hasIO() && !strcmp( aCurve->getIO()->getEntry(), Entry ) ) { - anIO = aCurve->getIO(); - break; - } - } - return anIO; -} - -/*! - Returns an active Plot2d ViewFrame or NULL -*/ -Plot2d_ViewFrame* SPlot2d_Viewer::getActiveViewFrame() -{ - SUIT_ViewManager* aViewMgr = getViewManager(); - if(aViewMgr) { - Plot2d_ViewWindow* aViewWnd = dynamic_cast(aViewMgr->getActiveView()); - if(aViewWnd) - return aViewWnd->getViewFrame(); - } - - return NULL; -} - -/*! - \return curve by object and viewframe - \param theIObject - object - \param fr - viewframe -*/ -SPlot2d_Curve* SPlot2d_Viewer::getCurveByIO( const Handle(SALOME_InteractiveObject)& theIObject, - Plot2d_ViewFrame* fr ) -{ - if ( !theIObject.IsNull() ) { - Plot2d_ViewFrame* aViewFrame = fr ? fr : getActiveViewFrame(); - if(aViewFrame) { - QIntDictIterator it( aViewFrame->getCurves() ); - for ( ; it.current(); ++it ) { - SPlot2d_Curve* aCurve = dynamic_cast(it.current()); - if(aCurve) { - if ( aCurve->hasIO() && aCurve->getIO()->isSame( theIObject ) ) - return aCurve; - } - } - } - } - return NULL; -} - -/*! - SLOT: called when action "Clone view" is activated -*/ -void SPlot2d_Viewer::onCloneView( Plot2d_ViewFrame* clonedVF, Plot2d_ViewFrame* newVF ) -{ - if( !clonedVF || !newVF ) - return; - - // 1) Copy all properties of view - - newVF->copyPreferences( clonedVF ); - - // 2) Display all curves displayed in cloned view - - QList aCurves; - clonedVF->getCurves( aCurves ); - QList::const_iterator anIt = aCurves.begin(), aLast = aCurves.end(); - - for( ; anIt!=aLast; anIt++ ) - if( clonedVF->isVisible( *anIt ) ) - 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 deleted file mode 100644 index 7182def58..000000000 --- a/src/SPlot2d/SPlot2d_ViewModel.h +++ /dev/null @@ -1,88 +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 : SPlot2d_ViewModel.h -// Author : Sergey RUIN -// Module : SUIT - -#ifndef SPlot2d_ViewModel_H -#define SPlot2d_ViewModel_H - -#include "SPlot2d.h" - -#include "SALOME_Prs.h" -#include "Plot2d_ViewModel.h" -#include "SALOME_InteractiveObject.hxx" -#include "Plot2d_ViewFrame.h" -#include "Plot2d_ViewWindow.h" -#include "SPlot2d_Curve.h" - -class SPLOT2D_EXPORT SPlot2d_Viewer : public Plot2d_Viewer, public SALOME_View -{ - Q_OBJECT - -public: - static QString Type() { return "Plot2d"; } - - /* Construction/destruction */ - SPlot2d_Viewer( bool theAutoDel = false ); - virtual ~SPlot2d_Viewer(); - -public: - virtual QString getType() const { return Type(); } - - /* interactive object management */ - void highlight( const Handle(SALOME_InteractiveObject)& IObject, bool highlight, bool update = true ) {} - void unHighlightAll() {} - 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 ); - void DisplayOnly( const Handle(SALOME_InteractiveObject)& IObject ); - void Erase( const Handle(SALOME_InteractiveObject)& IObject, bool update = true ); - - /* Reimplemented from SALOME_View */ - void Display( const SALOME_Prs2d* ); - void Erase( const SALOME_Prs2d*, const bool = false ); - virtual void EraseAll(const bool = false); - virtual void Repaint(); - virtual SALOME_Prs* CreatePrs( const char* entry = 0 ); - virtual void BeforeDisplay( SALOME_Displayer* d ); - virtual void AfterDisplay ( SALOME_Displayer* d ); - virtual bool isVisible( const Handle(SALOME_InteractiveObject)& IObject ); - - - /* operations */ - SPlot2d_Curve* getCurveByIO( const Handle(SALOME_InteractiveObject)&, Plot2d_ViewFrame* = 0 ); - Plot2d_ViewFrame* getActiveViewFrame(); - Handle(SALOME_InteractiveObject) FindIObject( const char* Entry ); - -protected slots: - virtual void onCloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* ); -}; - - -#endif // SPlot2d_ViewModel_H - - - - diff --git a/src/SPlot2d/SPlot2d_ViewWindow.cxx b/src/SPlot2d/SPlot2d_ViewWindow.cxx deleted file mode 100644 index 0e0a376b2..000000000 --- a/src/SPlot2d/SPlot2d_ViewWindow.cxx +++ /dev/null @@ -1,75 +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 "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 deleted file mode 100644 index a11b45a64..000000000 --- a/src/SPlot2d/SPlot2d_ViewWindow.h +++ /dev/null @@ -1,46 +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 -// -#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/SPlot2d_msg_en.po deleted file mode 100644 index b5ec921be..000000000 --- a/src/SPlot2d/SPlot2d_msg_en.po +++ /dev/null @@ -1,30 +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 -# -# This is a Qt message file in .po format. Each msgid starts with -# a scope. This scope should *NOT* be translated - eg. translating -# from French to English, "Foo::Bar" would be translated to "Pub", -# not "Foo::Pub". -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2005-06-16 12:01:13 PM MSD\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - 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.cxx b/src/SUPERVGraph/SUPERVGraph.cxx deleted file mode 100755 index d570c614a..000000000 --- a/src/SUPERVGraph/SUPERVGraph.cxx +++ /dev/null @@ -1,51 +0,0 @@ -// SALOME SUPERVGraph : 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 -// -// -// -// File : SUPERVGraph.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "SUPERVGraph.h" -#include "SUPERVGraph_ViewFrame.h" - -using namespace std; - -/*! - Creates view -*/ -SUIT_ViewWindow* SUPERVGraph::createView(SUIT_Desktop* parent) -{ - return new SUPERVGraph_ViewFrame( parent/*, "vtkView"*/ ); -} - -extern "C" -{ - /*! - Creates view - */ - SUIT_ViewWindow* createView(SUIT_Desktop* parent) - { - return SUPERVGraph::createView(parent); - } -} diff --git a/src/SUPERVGraph/SUPERVGraph.h b/src/SUPERVGraph/SUPERVGraph.h deleted file mode 100755 index eef17b998..000000000 --- a/src/SUPERVGraph/SUPERVGraph.h +++ /dev/null @@ -1,59 +0,0 @@ -// SALOME SUPERVGraph : 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 -// -// -// -// File : SUPERVGraph.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef SUPERVGraph_HeaderFile -#define SUPERVGraph_HeaderFile - -#include "SUIT_Desktop.h" -#include "SUIT_ViewWindow.h" - -#ifdef WNT -#ifdef SUPERVGRAPH_EXPORTS -#define SUPERVGRAPH_EXPORT __declspec(dllexport) -#else -#define SUPERVGRAPH_EXPORT __declspec(dllimport) -#endif -#else -#define SUPERVGRAPH_EXPORT -#endif - -#if defined WNT -#pragma warning ( disable: 4251 ) -#endif - -class SUPERVGRAPH_EXPORT SUPERVGraph : public QObject -{ - Q_OBJECT - -public : - - /*Standard_EXPORT*/ static SUIT_ViewWindow* createView ( SUIT_Desktop* parent); - -}; - -#endif diff --git a/src/SUPERVGraph/SUPERVGraph_ViewFrame.cxx b/src/SUPERVGraph/SUPERVGraph_ViewFrame.cxx deleted file mode 100755 index e20b59768..000000000 --- a/src/SUPERVGraph/SUPERVGraph_ViewFrame.cxx +++ /dev/null @@ -1,362 +0,0 @@ -// SALOME SUPERVGraph : 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 -// -// -// -// File : SUPERVGraph_ViewFrame.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "SUPERVGraph_ViewFrame.h" - -#include -#include - -//QT Include -#include -#include - -using namespace std; - - -/*! - Constructor -*/ -SUPERVGraph_View::SUPERVGraph_View( QWidget* theParent ): QWidget( theParent ) -{ - init(theParent); -} - -/*! - Constructor -*/ -SUPERVGraph_View::SUPERVGraph_View( SUPERVGraph_View* theParent ): QWidget( theParent ) -{ - init(theParent); -} - -/*! - Builds popup for SUPERVGraph viewer -*/ -void SUPERVGraph_View::contextMenuPopup( QPopupMenu* ) -{ - // to be implemented -} - -/*! - Initialization -*/ -void SUPERVGraph_View::init( QWidget* theParent ) -{ - if ( theParent->inherits( "QMainWindow" ) ) { - ( ( QMainWindow* )theParent )->setCentralWidget( this ); - } - else { - QBoxLayout* layout = new QVBoxLayout( theParent ); - layout->addWidget( this ); - } - -} - -/*! - Constructor -*/ -SUPERVGraph_ViewFrame::SUPERVGraph_ViewFrame( SUIT_Desktop* theDesktop ) - : SUIT_ViewWindow( theDesktop ) -{ - myView = 0; - - //myView = new SUPERVGraph_View(this); - // Set BackgroundColor - /* - int R = QAD_CONFIG->getSetting("SUPERVGraph:BackgroundColorRed").toInt(); - int G = QAD_CONFIG->getSetting("SUPERVGraph:BackgroundColorGreen").toInt(); - int B = QAD_CONFIG->getSetting("SUPERVGraph:BackgroundColorBlue").toInt(); - setBackgroundColor(QColor(R,G,B));*/ - - myToolBar = new QToolBar(this); - myToolBar->setCloseMode(QDockWindow::Undocked); - myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); - createActions(); - createToolBar(); -} - -/*! - Creates actions of SUPERVGraph view window -*/ -void SUPERVGraph_ViewFrame::createActions() -{ - if (!myActionsMap.isEmpty()) return; - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - QAction* aAction; - - // Panning - aAction = new QAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "SUPERVGraph", tr( "ICON_SUPERVGraph_PAN" ) ), - tr( "MNU_PAN_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_PAN_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onViewPan())); - myActionsMap[ PanId ] = aAction; - - // Reset - aAction = new QAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "SUPERVGraph", tr( "ICON_SUPERVGraph_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 SUPERVGraph view window -*/ -void SUPERVGraph_ViewFrame::createToolBar() -{ - myActionsMap[PanId]->addTo(myToolBar); - myActionsMap[ResetId]->addTo(myToolBar); -} - -/*! - Destructor -*/ -SUPERVGraph_ViewFrame::~SUPERVGraph_ViewFrame() {} - -/*! - Returns widget containing 3D-Viewer -*/ -SUPERVGraph_View* SUPERVGraph_ViewFrame::getViewWidget() -{ - return myView; -} - - -/*! - Sets new view widget - \param theView - new view widget -*/ -void SUPERVGraph_ViewFrame::setViewWidget( SUPERVGraph_View* theView ) -{ - myView = theView; -} - - -/*! - Display/hide Trihedron -*/ -void SUPERVGraph_ViewFrame::onViewTrihedron() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewTrihedron" ) -} - -/*! - Provides top projection of the active view -*/ -void SUPERVGraph_ViewFrame::onViewTop() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewTop" ) -} - -/*! - Provides bottom projection of the active view -*/ -void SUPERVGraph_ViewFrame::onViewBottom() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewBottom" ) -} - -/*! - Provides left projection of the active view -*/ -void SUPERVGraph_ViewFrame::onViewLeft() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewLeft" ) -} - -/*! - Provides right projection of the active view -*/ -void SUPERVGraph_ViewFrame::onViewRight() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewRight" ) -} - -/*! - Provides back projection of the active view -*/ -void SUPERVGraph_ViewFrame::onViewBack() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewBack" ) -} - -/*! - Provides front projection of the active view -*/ -void SUPERVGraph_ViewFrame::onViewFront() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewFront" ) -} - -/*! - Reset the active view -*/ -void SUPERVGraph_ViewFrame::onViewReset() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewReset" ) - if (myView) - myView->ResetView(); -} - -/*! - Rotates the active view -*/ -void SUPERVGraph_ViewFrame::onViewRotate() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewRotate" ) -} - -/*! - Sets a new center of the active view -*/ -void SUPERVGraph_ViewFrame::onViewGlobalPan() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewGlobalPan" ) -} - -/*! - Zooms the active view -*/ -void SUPERVGraph_ViewFrame::onViewZoom() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewZoom" ) -} - -/*! - Moves the active view -*/ -void SUPERVGraph_ViewFrame::onViewPan() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewPan" ) - if (myView != NULL) - myView->ActivatePanning(); -} - -/*! - Fits all obejcts within a rectangular area of the active view -*/ -void SUPERVGraph_ViewFrame::onViewFitArea() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewFitArea" ) -} - -/*! - Fits all objects in the active view -*/ -void SUPERVGraph_ViewFrame::onViewFitAll() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onViewFitAll" ) -} - -/*! - Set background of the viewport -*/ -void SUPERVGraph_ViewFrame::setBackgroundColor( const QColor& color ) -{ - if (myView) - myView->setPaletteBackgroundColor(color); -} - -/*! - Returns background of the viewport -*/ -QColor SUPERVGraph_ViewFrame::backgroundColor() const -{ - if (myView) - return myView->paletteBackgroundColor(); - return QMainWindow::backgroundColor(); -} - -/*! -*/ -void SUPERVGraph_ViewFrame::onAdjustTrihedron() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::onAdjustTrihedron" ) -} - -/*! - Changes name of object - \param obj - object to be renamed - \param name - new name -*/ -void SUPERVGraph_ViewFrame::rename( const Handle(SALOME_InteractiveObject)& IObject, - QString newName ) -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::rename" ) -} - -/*! - Unhilights all object in viewer - \param updateviewer - update current viewer -*/ -void SUPERVGraph_ViewFrame::unHighlightAll() -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::unHighlightAll" ) -} - -/*! - Hilights/unhilights object in viewer - \param obj - object to be updated - \param hilight - if it is true, object will be hilighted, otherwise it will be unhilighted - \param update - update current viewer -*/ -void SUPERVGraph_ViewFrame::highlight( const Handle(SALOME_InteractiveObject)& IObject, - bool highlight, bool immediatly ) -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::highlight" ) -} - -/*! - \return true if object is in viewer or in collector - \param obj - object to be checked - \param onlyInViewer - search object only in viewer (so object must be displayed) -*/ -bool SUPERVGraph_ViewFrame::isInViewer( const Handle(SALOME_InteractiveObject)& IObject ) -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::isInViewer" ) - return false; -} - -/*! - \return true if object is displayed in viewer - \param obj - object to be checked -*/ -bool SUPERVGraph_ViewFrame::isVisible( const Handle(SALOME_InteractiveObject)& IObject ) -{ -// MESSAGE ( "SUPERVGraph_ViewFrame::isVisible" ) - return false; -} - -/*! - Custom resize event handler -*/ -void SUPERVGraph_ViewFrame::resizeEvent( QResizeEvent* theEvent ) -{ - QMainWindow::resizeEvent( theEvent ); - if ( myView ) myView->resizeView( theEvent ); -} diff --git a/src/SUPERVGraph/SUPERVGraph_ViewFrame.h b/src/SUPERVGraph/SUPERVGraph_ViewFrame.h deleted file mode 100755 index 2a5e7f03b..000000000 --- a/src/SUPERVGraph/SUPERVGraph_ViewFrame.h +++ /dev/null @@ -1,140 +0,0 @@ -// SALOME SUPERVGraph : 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 -// -// -// -// File : SUPERVGraph_ViewFrame.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef SUPERVGraph_ViewFrame_H -#define SUPERVGraph_ViewFrame_H - -#include "SUPERVGraph.h" - -#include "SALOME_InteractiveObject.hxx" -#include "SUIT_PopupClient.h" -#include "SUIT_ViewWindow.h" - -#include - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -class SUPERVGRAPH_EXPORT SUPERVGraph_View: public QWidget, public SUIT_PopupClient { - Q_OBJECT; - public: - static QString Type() { return "SUPERVGraphViewer"; } - - SUPERVGraph_View(QWidget* theParent); - SUPERVGraph_View(SUPERVGraph_View* theParent); - - virtual void ActivatePanning() = 0; - virtual void ResetView() = 0; - - /* redefine functions from SUIT_PopupClient */ - virtual QString popupClientType() const { return Type(); } - virtual void contextMenuPopup( QPopupMenu* ); - - virtual void resizeView( QResizeEvent* theEvent ) {}; - - protected: - void init(QWidget* theParent); - -}; - -class SUPERVGRAPH_EXPORT SUPERVGraph_ViewFrame : public SUIT_ViewWindow { - Q_OBJECT - - public: - SUPERVGraph_ViewFrame(SUIT_Desktop* theDesktop ); - ~SUPERVGraph_ViewFrame(); - - SUPERVGraph_View* getViewWidget(); - void setViewWidget(SUPERVGraph_View* theView); - - void setBackgroundColor( const QColor& ); - QColor backgroundColor() const; - - void onAdjustTrihedron( ); - - /* interactive object management */ - void highlight( const Handle(SALOME_InteractiveObject)& IObject, - bool highlight, bool immediatly = true ); - void unHighlightAll(); - void rename( const Handle(SALOME_InteractiveObject)& IObject, - QString newName ); - bool isInViewer( const Handle(SALOME_InteractiveObject)& IObject ); - bool isVisible( const Handle(SALOME_InteractiveObject)& IObject ); - - /* selection */ - Handle(SALOME_InteractiveObject) FindIObject(const char* Entry) { Handle(SALOME_InteractiveObject) o; return o; }; - - /* display */ - void Display(const Handle(SALOME_InteractiveObject)& IObject, bool immediatly = true){}; - void DisplayOnly(const Handle(SALOME_InteractiveObject)& IObject){}; - void Erase(const Handle(SALOME_InteractiveObject)& IObject, bool immediatly = true){}; - void DisplayAll(){}; - void EraseAll(){}; - void Repaint() {}; - - QToolBar* getToolBar() { return myToolBar; } - - public slots: - void onViewPan(); - void onViewZoom(); - void onViewFitAll(); - void onViewFitArea(); - void onViewGlobalPan(); - void onViewRotate(); - void onViewReset(); - void onViewFront(); - void onViewBack(); - void onViewRight(); - void onViewLeft(); - void onViewBottom(); - void onViewTop(); - void onViewTrihedron(); - - protected: - void resizeEvent( QResizeEvent* theEvent ); - - private: - void createActions(); - void createToolBar(); - - //! Actions ID - enum { PanId, ResetId }; - typedef QMap ActionsMap; - - ActionsMap myActionsMap; - QToolBar* myToolBar; - - SUPERVGraph_View* myView; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/SUPERVGraph/SUPERVGraph_ViewManager.cxx b/src/SUPERVGraph/SUPERVGraph_ViewManager.cxx deleted file mode 100644 index 0f890c4b5..000000000 --- a/src/SUPERVGraph/SUPERVGraph_ViewManager.cxx +++ /dev/null @@ -1,59 +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 "SUPERVGraph_ViewManager.h" - -int SUPERVGraph_ViewManager::myMaxId = 0; - -/*! - Constructor -*/ -SUPERVGraph_ViewManager::SUPERVGraph_ViewManager( SUIT_Study* theStudy, - SUIT_Desktop* theDesktop, - SUIT_ViewModel* theViewModel ) - : SUIT_ViewManager( theStudy, theDesktop, theViewModel ) -{ - myId = ++myMaxId; -} - -/*! - Destructor -*/ -SUPERVGraph_ViewManager::~SUPERVGraph_ViewManager() -{ -} - -/*! - Sets view name - \param theView - view to assign name -*/ -void SUPERVGraph_ViewManager::setViewName(SUIT_ViewWindow* theView) -{ - int aPos = myViews.find(theView); - theView->setCaption( QString( "SUPERVISION scene:%1 - viewer:%2" ).arg( myId ).arg(aPos+1)); -} - -/*! - Fills popup menu with custom actions - \param popup - popup menu to be filled with -*/ -void SUPERVGraph_ViewManager::contextMenuPopup( QPopupMenu* thePopup) -{ - SUIT_ViewManager::contextMenuPopup( thePopup ); - // to be implemented -} diff --git a/src/SUPERVGraph/SUPERVGraph_ViewManager.h b/src/SUPERVGraph/SUPERVGraph_ViewManager.h deleted file mode 100644 index 94c5a850d..000000000 --- a/src/SUPERVGraph/SUPERVGraph_ViewManager.h +++ /dev/null @@ -1,48 +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 -// -#ifndef SUPERVGRAPH_VIEWMANAGER_H -#define SUPERVGRAPH_VIEWMANAGER_H - -#include "SUPERVGraph.h" - -#include "SUPERVGraph_ViewModel.h" -#include "SUIT_ViewManager.h" - -class SUIT_Desktop; - -class SUPERVGRAPH_EXPORT SUPERVGraph_ViewManager : public SUIT_ViewManager -{ - Q_OBJECT - -public: - SUPERVGraph_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop, SUIT_ViewModel* theViewModel = 0 ); - ~SUPERVGraph_ViewManager(); - - virtual void contextMenuPopup( QPopupMenu* thePopup ); - -protected: - void setViewName(SUIT_ViewWindow* theView); - -private: - static int myMaxId; - int myId; - -}; - -#endif diff --git a/src/SUPERVGraph/SUPERVGraph_ViewModel.cxx b/src/SUPERVGraph/SUPERVGraph_ViewModel.cxx deleted file mode 100644 index a9911da3e..000000000 --- a/src/SUPERVGraph/SUPERVGraph_ViewModel.cxx +++ /dev/null @@ -1,47 +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 "SUPERVGraph_ViewModel.h" -#include "SUPERVGraph_ViewFrame.h" -#include "SUIT_Desktop.h" -#include "SUIT_ViewWindow.h" - -/*! - Constructor -*/ -SUPERVGraph_Viewer::SUPERVGraph_Viewer() -:SUIT_ViewModel() -{ -} - -/*! - Destructor -*/ -SUPERVGraph_Viewer::~SUPERVGraph_Viewer() -{ -} - -/*! - Creates new view window - \param theDesktop - main window of application -*/ -SUIT_ViewWindow* SUPERVGraph_Viewer::createView(SUIT_Desktop* theDesktop) -{ - SUPERVGraph_ViewFrame* aRes = new SUPERVGraph_ViewFrame( theDesktop ); - return aRes; -} diff --git a/src/SUPERVGraph/SUPERVGraph_ViewModel.h b/src/SUPERVGraph/SUPERVGraph_ViewModel.h deleted file mode 100644 index 9de2ffa50..000000000 --- a/src/SUPERVGraph/SUPERVGraph_ViewModel.h +++ /dev/null @@ -1,41 +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 -// -#ifndef SUPERVGRAPH_VIEWMODEL_H -#define SUPERVGRAPH_VIEWMODEL_H - -#include "SUPERVGraph.h" - -#include "SUIT_ViewModel.h" - -class SUPERVGRAPH_EXPORT SUPERVGraph_Viewer: public SUIT_ViewModel -{ - Q_OBJECT - -public: - static QString Type() { return "SUPERVGraphViewer"; } - - SUPERVGraph_Viewer(); - virtual ~SUPERVGraph_Viewer(); - - virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop); - virtual QString getType() const { return Type(); } - -}; - -#endif diff --git a/src/SUPERVGraph/resources/SUPERVGraph_images.po b/src/SUPERVGraph/resources/SUPERVGraph_images.po deleted file mode 100644 index 97cab3fd6..000000000 --- a/src/SUPERVGraph/resources/SUPERVGraph_images.po +++ /dev/null @@ -1,29 +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: SUPERVGraph_images.po -// Created: 11/22/2005 10:52:37 PM -// Author: Margarita Karpunina -// Copyright (C) CEA 2005 - -msgid "ICON_SUPERVGraph_PAN" -msgstr "view_pan.png" - -msgid "ICON_SUPERVGraph_RESET" -msgstr "view_reset.png" - diff --git a/src/SUPERVGraph/resources/SUPERVGraph_msg_en.po b/src/SUPERVGraph/resources/SUPERVGraph_msg_en.po deleted file mode 100644 index 1bad63bd6..000000000 --- a/src/SUPERVGraph/resources/SUPERVGraph_msg_en.po +++ /dev/null @@ -1,37 +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: SUPERVGraph_msg_en.po -// Created: 11/22/2005 10:55:36 PM -// Author: Margarita Karpunina -// Copyright (C) CEA 2005 - -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" diff --git a/src/SUPERVGraph/resources/view_pan.png b/src/SUPERVGraph/resources/view_pan.png deleted file mode 100644 index 50db458282a6e86810830ade6ad681c47bb3da5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j|KP)3|H!%haNC+54I`pq#B?&{{PlTD)QF{7N+1D|jfiZ7wH6!NZpvwvwzmPuKswJ; zRjzNwB=e-x0TN2v2K*3gTI*NWS&qw6+|`y{$-Z&L4j|dYO|Z+eb0_C^a$3TmSx%Q9U?o4 iu=O+)-;YPgn)Mr%Jmx0D9RHjE0000)L_t(|oUN3x zY8ycihQAG0%)u3FNMSunLOSCnA%&zW7U@hXk*9D-A1jsZCT1_y$q*wqMpeMCqQ;;t z4sHs;rdaNDj)}4f9yl0o=DwYOW^N6EC$(o!i~C1l;O}~pfh{aRSl%u}fbQw%nWP>X z!rjk1Uc7qA{Hj7#5fMhiF#z+c3dsZ!NdWdTLI7i;?@EU)EU(|bp}cgEfh}x$h1I-b zG#vBwbOylm;}lmq0GhfXmmDc1y@#sW`FnN`fTMR4M1;JEFv)~06$nvo2-66AAK#6J zW6JNY>tS+*lcNdMyyD{Q9Ak)m11`?aY3c^uL|?z zVhdGObfXKj>H7`u*6>9cu9K8pQ*Kx;eKMpbEayAmnZ z0ox(8azA}ONrv?8f#jR(1>SpB_bVXYD7oZFCjSQ%5u^|X3}|%w!?!z@V!r@)0Iy12 SiY3SZ0000 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -using namespace std; - -#if defined __GNUC__ - #if __GNUC__ == 2 - #define __GNUC_2__ - #endif -#endif - -int SALOME_POINT_SIZE = 5; -int SALOME_LINE_WIDTH = 3; - -namespace -{ - int - GetEdgeId(SALOME_Actor* theActor, - vtkPicker* thePicker, - int theObjId) - { - int anEdgeId = 0; - if (vtkCell* aPickedCell = theActor->GetElemCell(theObjId)) { - vtkFloatingPointType aPickPosition[3]; - thePicker->GetPickPosition(aPickPosition); - vtkFloatingPointType aMinDist = 1000000.0, aDist = 0; - for (int i = 0, iEnd = aPickedCell->GetNumberOfEdges(); i < iEnd; i++){ - if(vtkLine* aLine = vtkLine::SafeDownCast(aPickedCell->GetEdge(i))){ - int subId; - vtkFloatingPointType pcoords[3], closestPoint[3], weights[3]; - aLine->EvaluatePosition(aPickPosition,closestPoint,subId,pcoords,aDist,weights); - if (aDist < aMinDist) { - aMinDist = aDist; - anEdgeId = -1 - i; - } - } - } - } - return anEdgeId; - } - - inline - bool - CheckDimensionId(Selection_Mode theMode, - SALOME_Actor *theActor, - vtkIdType theObjId) - { - switch(theMode){ - case CellSelection: - return true; - case EdgeSelection: - return ( theActor->GetObjDimension( theObjId ) == 1 ); - case FaceSelection: - return ( theActor->GetObjDimension( theObjId ) == 2 ); - case VolumeSelection: - return ( theActor->GetObjDimension( theObjId ) == 3 ); - }; - return false; - } - -} - - -vtkStandardNewMacro(SALOME_Actor); - -/*! - Constructor -*/ -SALOME_Actor -::SALOME_Actor(): - myRenderer(NULL), - myInteractor(NULL), - mySelectionMode(ActorSelection), - myPreHighlightActor(SVTK_Actor::New()), - myHighlightActor(SVTK_Actor::New()), - myOutline(vtkOutlineSource::New()), - myOutlineActor(VTKViewer_Actor::New()) -{ - myPreHighlightActor->Delete(); - myPreHighlightActor->Initialize(); - myPreHighlightActor->PickableOff(); - myPreHighlightActor->SetVisibility( false ); - - myHighlightActor->Delete(); - myHighlightActor->Initialize(); - myHighlightActor->PickableOff(); - myHighlightActor->SetVisibility( false ); - - myOutline->Delete(); - - vtkPolyDataMapper* anOutlineMapper = vtkPolyDataMapper::New(); - anOutlineMapper->SetInput(myOutline->GetOutput()); - - myOutlineActor->Delete(); - myOutlineActor->SetMapper( anOutlineMapper ); - anOutlineMapper->Delete(); - - myOutlineActor->PickableOff(); - myOutlineActor->DragableOff(); - myOutlineActor->GetProperty()->SetColor(1.0,0.0,0.0); - myOutlineActor->GetProperty()->SetAmbient(1.0); - myOutlineActor->GetProperty()->SetDiffuse(0.0); - myOutlineActor->SetVisibility( false ); -} - -/*! - Destructor -*/ -SALOME_Actor -::~SALOME_Actor() -{} - - -/*! - \return true if the SALOME_Actor has a reference to SALOME_InteractiveObject -*/ -Standard_Boolean -SALOME_Actor -::hasIO() -{ - return !myIO.IsNull(); -} - -/*! - \return correspoinding reference to SALOME_InteractiveObject -*/ -const Handle(SALOME_InteractiveObject)& -SALOME_Actor -::getIO() -{ - return myIO; -} - -/*! - Sets reference to SALOME_InteractiveObject - \param theIO - new SALOME_InteractiveObject -*/ -void -SALOME_Actor -::setIO(const Handle(SALOME_InteractiveObject)& theIO) -{ - myIO = theIO; -} - -/*! - Sets name the SALOME_Actor - \param theName - new name -*/ -void -SALOME_Actor -::setName(const char* theName) -{ - if(hasIO()) - myIO->setName(theName); - Superclass::setName(theName); -} - - -/*! - Publishes the actor in all its internal devices -*/ -void -SALOME_Actor -::AddToRender(vtkRenderer* theRenderer) -{ - Superclass::AddToRender(theRenderer); - - myRenderer = theRenderer; - - theRenderer->AddActor( myPreHighlightActor.GetPointer() ); - theRenderer->AddActor( myHighlightActor.GetPointer() ); - theRenderer->AddActor( myOutlineActor.GetPointer() ); -} - -/*! - Removes the actor from all its internal devices -*/ -void -SALOME_Actor -::RemoveFromRender(vtkRenderer* theRenderer) -{ - Superclass::RemoveFromRender(theRenderer); - - theRenderer->RemoveActor( myPreHighlightActor.GetPointer() ); - theRenderer->RemoveActor( myHighlightActor.GetPointer() ); - theRenderer->RemoveActor( myOutlineActor.GetPointer() ); -} - -/*! - \return reference on renderer where it is published -*/ -vtkRenderer* -SALOME_Actor -::GetRenderer() -{ - return myRenderer; -} - -/*! - Sets interactor in order to use vtkInteractorObserver devices - \param theInteractor - new interactor -*/ -void -SALOME_Actor -::SetInteractor(vtkRenderWindowInteractor* theInteractor) -{ - myInteractor = theInteractor; -} - -/*! - Put a request to redraw the view -*/ -void -SALOME_Actor -::Update() -{ - myInteractor->CreateTimer(VTKI_TIMER_UPDATE); -} - -/*! - Apply view transformation - \param theTransform - transformation -*/ -void -SALOME_Actor -::SetTransform(VTKViewer_Transform* theTransform) -{ - Superclass::SetTransform(theTransform); - - myPreHighlightActor->SetTransform(theTransform); - myHighlightActor->SetTransform(theTransform); - myOutlineActor->SetTransform(theTransform); -} - -/*! - Apply additional position -*/ -void -SALOME_Actor -::SetPosition(vtkFloatingPointType _arg1, - vtkFloatingPointType _arg2, - vtkFloatingPointType _arg3) -{ - Superclass::SetPosition(_arg1,_arg2,_arg3); - - myPreHighlightActor->SetPosition(_arg1,_arg2,_arg3); - myHighlightActor->SetPosition(_arg1,_arg2,_arg3); - myOutlineActor->SetPosition(_arg1,_arg2,_arg3); -} - -/*! - Apply additional position -*/ -void -SALOME_Actor -::SetPosition(vtkFloatingPointType _arg[3]) -{ - SetPosition(_arg[0],_arg[1],_arg[2]); -} - -/*! - Shows/hides actor - \param theVisibility - new visibility state -*/ -void -SALOME_Actor -::SetVisibility( int theVisibility ) -{ - Superclass::SetVisibility( theVisibility ); - - myOutlineActor->SetVisibility( theVisibility && isHighlighted() && !hasHighlight() ); - - myPreHighlightActor->SetVisibility( theVisibility && myIsPreselected ); - - if(mySelector.GetPointer() && hasIO()){ - if(mySelector->SelectionMode() != ActorSelection){ - int aHasIndex = mySelector->HasIndex( getIO() ); - myHighlightActor->SetVisibility( theVisibility && isHighlighted() && aHasIndex); - } - } -} - -/*! - Set selector in order to the actor at any time can restore current selection - \param theSelector - new selector -*/ -void -SALOME_Actor -::SetSelector(SVTK_Selector* theSelector) -{ - mySelector = theSelector; -} - -/*! - To map current selection to VTK representation -*/ -void -SALOME_Actor -::Highlight(bool theIsHighlight) -{ - mySelectionMode = mySelector->SelectionMode(); - myHighlightActor->SetVisibility( false ); - myOutlineActor->SetVisibility( false ); - - if(mySelector.GetPointer()){ - if(mySelectionMode != ActorSelection){ - TColStd_IndexedMapOfInteger aMapIndex; - mySelector->GetIndex( getIO(), aMapIndex ); - switch( mySelectionMode ){ - case NodeSelection: - myHighlightActor->GetProperty()->SetRepresentationToPoints(); - myHighlightActor->MapPoints( this, aMapIndex ); - break; - case EdgeOfCellSelection: - myHighlightActor->GetProperty()->SetRepresentationToWireframe(); - myHighlightActor->MapEdge( this, aMapIndex ); - break; - case CellSelection: - case EdgeSelection: - case FaceSelection: - case VolumeSelection: - myHighlightActor->GetProperty()->SetRepresentationToSurface(); - myHighlightActor->MapCells( this, aMapIndex ); - break; - } - myHighlightActor->SetVisibility( GetVisibility() && theIsHighlight ); - } - } - - highlight(theIsHighlight); -} - -/*! - Updates visibility of the highlight devices -*/ -void -SALOME_Actor -::highlight(bool theIsHighlight) -{ - vtkFloatingPointType aBounds[6]; - GetInput()->GetBounds(aBounds); - myOutline->SetBounds(aBounds); - myOutlineActor->SetVisibility( GetVisibility() && theIsHighlight ); - - Superclass::highlight(theIsHighlight); -} - - -/*! - To process prehighlight (called from SVTK_InteractorStyle) -*/ -bool -SALOME_Actor -::PreHighlight(vtkInteractorStyle *theInteractorStyle, - SVTK_SelectionEvent* theSelectionEvent, - bool theIsHighlight) -{ - if ( !GetPickable() ) - return false; - - vtkRenderer *aRenderer = theInteractorStyle->GetCurrentRenderer(); - // - myPreHighlightActor->SetVisibility( false ); - bool anIsPreselected = myIsPreselected; - - Selection_Mode aSelectionMode = theSelectionEvent->mySelectionMode; - bool anIsChanged = (mySelectionMode != aSelectionMode); - - vtkFloatingPointType x = theSelectionEvent->myX; - vtkFloatingPointType y = theSelectionEvent->myY; - vtkFloatingPointType z = 0.0; - - if( !theIsHighlight ) { - SetPreSelected( false ); - vtkActorCollection* theActors = aRenderer->GetActors(); - theActors->InitTraversal(); - while( vtkActor *ac = theActors->GetNextActor() ) - if( SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( ac ) ) - if( anActor->hasIO() && myIO->isSame( anActor->getIO() ) ) - anActor->SetPreSelected( false ); - - }else{ - switch(aSelectionMode){ - case NodeSelection: - { - myPointPicker->Pick( x, y, z, aRenderer ); - - int aVtkId = myPointPicker->GetPointId(); - if( aVtkId >= 0 && mySelector->IsValid( this, aVtkId, true ) ) { - int anObjId = GetNodeObjId( aVtkId ); - myIsPreselected = (anObjId >= 0); - if(myIsPreselected){ - const TColStd_IndexedMapOfInteger& aMapIndex = myPreHighlightActor->GetMapIndex(); - int anExtent = aMapIndex.Extent(); - anIsChanged |= (anExtent == 0 || anExtent > 0 && anObjId != aMapIndex(1)); - if(anIsChanged){ - TColStd_IndexedMapOfInteger aMapIndex; - aMapIndex.Add( anObjId ); - - myPreHighlightActor->GetProperty()->SetRepresentationToPoints(); - myPreHighlightActor->MapPoints( this, aMapIndex ); - } - myPreHighlightActor->SetVisibility( true ); - } - } - break; - } - case CellSelection: - case EdgeSelection: - case FaceSelection: - case VolumeSelection: - { - myCellPicker->Pick( x, y, z, aRenderer ); - - int aVtkId = myCellPicker->GetCellId(); - if ( aVtkId >= 0 && mySelector->IsValid( this, aVtkId ) && hasIO() ) { - int anObjId = GetElemObjId (aVtkId ); - if ( anObjId >= 0 ) { - myIsPreselected = CheckDimensionId(aSelectionMode,this,anObjId); - if(myIsPreselected){ - const TColStd_IndexedMapOfInteger& aMapIndex = myPreHighlightActor->GetMapIndex(); - int anExtent = aMapIndex.Extent(); - anIsChanged |= (anExtent == 0 || anExtent > 0 && anObjId != aMapIndex(1)); - if(anIsChanged){ - TColStd_IndexedMapOfInteger aMapIndex; - aMapIndex.Add( anObjId ); - - myPreHighlightActor->GetProperty()->SetRepresentationToSurface(); - myPreHighlightActor->MapCells( this, aMapIndex ); - } - myPreHighlightActor->SetVisibility( true ); - } - } - } - break; - } - case EdgeOfCellSelection: - { - myCellPicker->Pick( x, y, z, aRenderer ); - - int aVtkId = myCellPicker->GetCellId(); - if ( aVtkId >= 0 && mySelector->IsValid( this, aVtkId )) { - int anObjId = GetElemObjId( aVtkId ); - if ( anObjId >= 0 ) { - int anEdgeId = GetEdgeId(this,myCellPicker.GetPointer(),anObjId); - myIsPreselected = anEdgeId < 0; - if(myIsPreselected){ - const TColStd_IndexedMapOfInteger& aMapIndex = myPreHighlightActor->GetMapIndex(); - int anExtent = aMapIndex.Extent(); - anIsChanged |= (anExtent == 0); - anIsChanged |= (anExtent == 2 && (anObjId != aMapIndex(1) || anEdgeId != aMapIndex(2))); - if(anIsChanged){ - TColStd_IndexedMapOfInteger aMapIndex; - aMapIndex.Add( anObjId ); - aMapIndex.Add( anEdgeId ); - - myPreHighlightActor->GetProperty()->SetRepresentationToWireframe(); - myPreHighlightActor->MapEdge( this, aMapIndex ); - } - myPreHighlightActor->SetVisibility( true ); - } - } - } - break; - } - case ActorSelection : - { - if( !mySelector->IsSelected( myIO ) ) { - SetPreSelected( true ); - - vtkActorCollection* theActors = aRenderer->GetActors(); - theActors->InitTraversal(); - while( vtkActor *anAct = theActors->GetNextActor() ) { - if( anAct != this ) - if( SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( anAct ) ) - if( anActor->hasIO() && myIO->isSame( anActor->getIO() ) ) - anActor->SetPreSelected( true ); - } - } - } - default: - break; - } - } - - mySelectionMode = aSelectionMode; - anIsChanged |= (anIsPreselected != myIsPreselected); - - return anIsChanged; -} - -/*! - To process highlight (called from SVTK_InteractorStyle) -*/ -bool -SALOME_Actor -::Highlight(vtkInteractorStyle *theInteractorStyle, - SVTK_SelectionEvent* theSelectionEvent, - bool theIsHighlight) -{ - if ( !GetPickable() ) - return false; - - myOutlineActor->SetVisibility( false ); - myHighlightActor->SetVisibility( false ); - - vtkRenderer *aRenderer = theInteractorStyle->GetCurrentRenderer(); - // - Selection_Mode aSelectionMode = theSelectionEvent->mySelectionMode; - bool anIsShift = theSelectionEvent->myIsShift; - if( !anIsShift || !theIsHighlight ) { - mySelector->RemoveIObject( this ); - } - - if ( !theIsHighlight ) - return true; - - vtkFloatingPointType x = theSelectionEvent->myX; - vtkFloatingPointType y = theSelectionEvent->myY; - vtkFloatingPointType z = 0.0; - - if( !theSelectionEvent->myIsRectangle ) { - switch(aSelectionMode){ - case NodeSelection: { - myPointPicker->Pick( x, y, z, aRenderer ); - - int aVtkId = myPointPicker->GetPointId(); - if( aVtkId >= 0 && mySelector->IsValid( this, aVtkId, true ) ) { - int anObjId = GetNodeObjId( aVtkId ); - if( anObjId >= 0 ) { - mySelector->AddOrRemoveIndex( myIO, anObjId, anIsShift ); - mySelector->AddIObject( this ); - } - } - break; - } - case CellSelection: - case EdgeSelection: - case FaceSelection: - case VolumeSelection: - { - myCellPicker->Pick( x, y, z, aRenderer ); - - int aVtkId = myCellPicker->GetCellId(); - if( aVtkId >= 0 && mySelector->IsValid( this, aVtkId ) ) { - int anObjId = GetElemObjId( aVtkId ); - if( anObjId >= 0 ) { - if ( CheckDimensionId(aSelectionMode,this,anObjId) ) { - mySelector->AddOrRemoveIndex( myIO, anObjId, anIsShift ); - mySelector->AddIObject( this ); - } - } - } - break; - } - case EdgeOfCellSelection: - { - myCellPicker->Pick( x, y, z, aRenderer ); - - int aVtkId = myCellPicker->GetCellId(); - if( aVtkId >= 0 && mySelector->IsValid( this, aVtkId ) ) { - int anObjId = GetElemObjId( aVtkId ); - if( anObjId >= 0 ) { - int anEdgeId = GetEdgeId(this,myCellPicker.GetPointer(),anObjId); - if( anEdgeId < 0 ) { - mySelector->AddOrRemoveIndex( myIO, anObjId, false ); - mySelector->AddOrRemoveIndex( myIO, anEdgeId, true ); - mySelector->AddIObject( this ); - } - } - } - break; - } - case ActorSelection : - { - if( mySelector->IsSelected( myIO ) && anIsShift ) - mySelector->RemoveIObject( this ); - else { - mySelector->AddIObject( this ); - } - break; - } - default: - break; - } - }else{ - vtkFloatingPointType xLast = theSelectionEvent->myLastX; - vtkFloatingPointType yLast = theSelectionEvent->myLastY; - vtkFloatingPointType zLast = 0.0; - - vtkFloatingPointType x1 = x < xLast ? x : xLast; - vtkFloatingPointType y1 = y < yLast ? y : yLast; - vtkFloatingPointType z1 = z < zLast ? z : zLast; - vtkFloatingPointType x2 = x > xLast ? x : xLast; - vtkFloatingPointType y2 = y > yLast ? y : yLast; - vtkFloatingPointType z2 = z > zLast ? z : zLast; - - switch(aSelectionMode){ - case NodeSelection: { - myPointRectPicker->InitializePickList(); - myPointRectPicker->AddPickList(this); - myPointRectPicker->Pick( x1, y1, z1, x2, y2, z2, aRenderer ); - - const SVTK_RectPicker::TVectorIdsMap& aVectorIdsMap = myPointRectPicker->GetPointIdsMap(); - SVTK_RectPicker::TVectorIdsMap::const_iterator aMapIter = aVectorIdsMap.find(this); - TColStd_MapOfInteger anIndexes; - if(aMapIter != aVectorIdsMap.end()){ - const SVTK_RectPicker::TVectorIds& aVectorIds = aMapIter->second; - vtkIdType anEnd = aVectorIds.size(); - for(vtkIdType anId = 0; anId < anEnd; anId++ ) { - int aPointId = aVectorIds[anId]; - if( aPointId >= 0 && mySelector->IsValid( this, aPointId, true ) ) { - int anObjId = GetNodeObjId( aPointId ); - anIndexes.Add( anObjId ); - } - } - } - - if( !anIndexes.IsEmpty() ) { - mySelector->AddOrRemoveIndex( myIO, anIndexes, anIsShift ); - mySelector->AddIObject( this ); - anIndexes.Clear(); - } - else - mySelector->RemoveIObject( this ); - - break; - } - case ActorSelection : - { - vtkFloatingPointType aPnt[3]; - vtkFloatingPointType* aBounds = GetBounds(); - - bool anIsPicked = true; - for( int i = 0; i <= 1; i++ ) { - for( int j = 2; j <= 3; j++ ) { - for( int k = 4; k <= 5; k++ ) { - aRenderer->SetWorldPoint( aBounds[ i ], aBounds[ j ], aBounds[ k ], 1.0 ); - aRenderer->WorldToDisplay(); - aRenderer->GetDisplayPoint( aPnt ); - - if( aPnt[0] < x1 || aPnt[0] > x2 || aPnt[1] < y1 || aPnt[1] > y2 ) { - anIsPicked = false; - break; - } - } - } - } - - if( anIsPicked ) - mySelector->AddIObject(this); - - break; - } - case CellSelection: - case EdgeSelection: - case FaceSelection: - case VolumeSelection: - { - myCellRectPicker->InitializePickList(); - myCellRectPicker->AddPickList(this); - myCellRectPicker->Pick( x1, y1, z1, x2, y2, z2, aRenderer ); - - const SVTK_RectPicker::TVectorIdsMap& aVectorIdsMap = myCellRectPicker->GetCellIdsMap(); - SVTK_RectPicker::TVectorIdsMap::const_iterator aMapIter = aVectorIdsMap.find(this); - TColStd_MapOfInteger anIndexes; - if(aMapIter != aVectorIdsMap.end()){ - const SVTK_RectPicker::TVectorIds& aVectorIds = aMapIter->second; - vtkIdType anEnd = aVectorIds.size(); - for(vtkIdType anId = 0; anId < anEnd; anId++ ) { - int aCellId = aVectorIds[anId]; - if ( !mySelector->IsValid( this, aCellId ) ) - continue; - - int anObjId = GetElemObjId( aCellId ); - if( anObjId != -1 ) - if ( CheckDimensionId(aSelectionMode,this,anObjId) ) { - anIndexes.Add(anObjId); - } - } - } - mySelector->AddOrRemoveIndex( myIO, anIndexes, anIsShift ); - mySelector->AddIObject( this ); - } - default: - break; - } - } - - mySelectionMode = aSelectionMode; - - return true; -} - -/*! - To set up a picker for nodal selection (initialized by SVTK_Renderer::AddActor) - \param thePointPicker - new picker -*/ -void -SALOME_Actor -::SetPointPicker(vtkPointPicker* thePointPicker) -{ - myPointPicker = thePointPicker; -} - -/*! - To set up a picker for cell selection (initialized by SVTK_Renderer::AddActor) - \param theCellPicker - new picker -*/ -void -SALOME_Actor -::SetCellPicker(vtkCellPicker* theCellPicker) -{ - myCellPicker = theCellPicker; -} - -/*! - To set up a picker for point rectangle selection (initialized by SVTK_Renderer::AddActor) - \param theRectPicker - new picker -*/ -void -SALOME_Actor -::SetPointRectPicker(SVTK_RectPicker* theRectPicker) -{ - myPointRectPicker = theRectPicker; -} - -/*! - To set up a picker for cell rectangle selection (initialized by SVTK_Renderer::AddActor) - \param theRectPicker - new picker -*/ -void -SALOME_Actor -::SetCellRectPicker(SVTK_RectPicker* theRectPicker) -{ - myCellRectPicker = theRectPicker; -} - -/*! - To set up a prehighlight property (initialized by SVTK_Renderer::AddActor) -*/ -void -SALOME_Actor -::SetPreHighlightProperty(vtkProperty* theProperty) -{ - myPreHighlightActor->SetProperty(theProperty); -} - -/*! - To set up a highlight property (initialized by SVTK_Renderer::AddActor) -*/ -void -SALOME_Actor -::SetHighlightProperty(vtkProperty* theProperty) -{ - myHighlightActor->SetProperty(theProperty); -} diff --git a/src/SVTK/SALOME_Actor.h b/src/SVTK/SALOME_Actor.h deleted file mode 100644 index a44acc9fd..000000000 --- a/src/SVTK/SALOME_Actor.h +++ /dev/null @@ -1,238 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_Actor.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef SALOME_ACTOR_H -#define SALOME_ACTOR_H - -#include "SVTK_SelectionEvent.h" -#include "SVTK_Selector.h" -#include "SVTK.h" - -#include "SALOME_InteractiveObject.hxx" - -// undefining min and max because CASCADE's defines them and -// it clashes with std::min(), std::max() -#undef min -#undef max - -#include "VTKViewer_Actor.h" - -#include - -class vtkPointPicker; -class vtkCellPicker; -class vtkOutlineSource; -class vtkInteractorStyle; -class vtkRenderWindowInteractor; - -class SVTK_Actor; -class SVTK_RectPicker; -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, - common way to publish and remove VTK presentation, - mapping of VTK and object IDs and so on. - */ -class SVTK_EXPORT SALOME_Actor : public VTKViewer_Actor -{ - public: - static SALOME_Actor* New(); - - vtkTypeMacro(SALOME_Actor,VTKViewer_Actor); - - //---------------------------------------------------------------------------- - //! To check, if the #SALOME_Actor has a reference to #SALOME_InteractiveObject - virtual - Standard_Boolean - hasIO(); - - //! Get correspoinding reference to #SALOME_InteractiveObject - virtual - const Handle(SALOME_InteractiveObject)& - getIO(); - - //! Set reference to #SALOME_InteractiveObject - virtual - void - setIO(const Handle(SALOME_InteractiveObject)& theIO); - - //! Name the #SALOME_Actor - virtual - void - setName(const char* theName); - - //---------------------------------------------------------------------------- - //! Apply view transformation - virtual - void - SetTransform(VTKViewer_Transform* theTransform); - - //! Apply additional position - virtual - void - SetPosition(vtkFloatingPointType _arg1, - vtkFloatingPointType _arg2, - vtkFloatingPointType _arg3); - - //! Apply additional position - virtual - void - SetPosition(vtkFloatingPointType _arg[3]); - - //---------------------------------------------------------------------------- - //! Visibility management - virtual - void - SetVisibility( int ); - - //---------------------------------------------------------------------------- - //! To publish the actor an all its internal devices - virtual - void - AddToRender(vtkRenderer* theRendere); - - //! To remove the actor an all its internal devices - virtual - void - RemoveFromRender(vtkRenderer* theRendere); - - //! Get reference on renderer where it is published - vtkRenderer* - GetRenderer(); - - //---------------------------------------------------------------------------- - //! To set interactor in order to use #vtkInteractorObserver devices - virtual - void - SetInteractor(vtkRenderWindowInteractor* theInteractor); - - //! Put a request to redraw the view - virtual - void - Update(); - - //---------------------------------------------------------------------------- - //! Set selector in order to the actor at any time can restore current selection - virtual - void - SetSelector(SVTK_Selector* theSelector); - - //! Just to update visibility of the highlight devices - virtual - void - highlight(bool theHighlight); - - //! To map current selection to VTK representation - virtual - void - Highlight(bool theHighlight); - - //---------------------------------------------------------------------------- - //! To process prehighlight (called from #SVTK_InteractorStyle) - virtual - bool - PreHighlight(vtkInteractorStyle* theInteractorStyle, - SVTK_SelectionEvent* theSelectionEvent, - bool theIsHighlight); - - //! To process highlight (called from #SVTK_InteractorStyle) - virtual - bool - Highlight(vtkInteractorStyle* theInteractorStyle, - SVTK_SelectionEvent* theSelectionEvent, - bool theIsHighlight); - - //---------------------------------------------------------------------------- - //! To set up a picker for nodal selection (initialized by #SVTK_Renderer::AddActor) - void - SetPointPicker(vtkPointPicker* thePointPicker); - - //! To set up a picker for cell selection (initialized by #SVTK_Renderer::AddActor) - void - SetCellPicker(vtkCellPicker* theCellPicker); - - //! To set up a picker for point rectangle selection (initialized by #SVTK_Renderer::AddActor) - void - SetPointRectPicker(SVTK_RectPicker* theRectPicker); - - //! To set up a picker for cell rectangle selection (initialized by #SVTK_Renderer::AddActor) - void - SetCellRectPicker(SVTK_RectPicker* theRectPicker); - - //---------------------------------------------------------------------------- - //! To set up a prehighlight property (initialized by #SVTK_Renderer::AddActor) - void - SetPreHighlightProperty(vtkProperty* theProperty); - - //! To set up a highlight property (initialized by #SVTK_Renderer::AddActor) - void - SetHighlightProperty(vtkProperty* theProperty); - - protected: - //---------------------------------------------------------------------------- - vtkRenderWindowInteractor* myInteractor; - vtkRenderer* myRenderer; - - Handle(SALOME_InteractiveObject) myIO; - - SALOME_Actor(); - ~SALOME_Actor(); - - protected: - Selection_Mode mySelectionMode; - vtkSmartPointer mySelector; - - //---------------------------------------------------------------------------- - // Highlight/ Prehighlight devices - vtkSmartPointer myPointPicker; - vtkSmartPointer myCellPicker; - - vtkSmartPointer myPointRectPicker; - vtkSmartPointer myCellRectPicker; - - vtkSmartPointer myPreHighlightActor; - vtkSmartPointer myHighlightActor; - - vtkSmartPointer myOutlineActor; - vtkSmartPointer myOutline; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif // SALOME_ACTOR_H diff --git a/src/SVTK/SVTK.cxx b/src/SVTK/SVTK.cxx deleted file mode 100644 index 674714f77..000000000 --- a/src/SVTK/SVTK.cxx +++ /dev/null @@ -1,60 +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 : -// Author : -// Module : -// $Header$ - -#include "SVTK.h" -#include "SVTK_Prs.h" -#include "SVTK_Actor.h" -#include "SALOME_Actor.h" -#include "SVTK_RectPicker.h" -#include "SVTK_DeviceActor.h" -#include "SVTK_CubeAxesActor2D.h" -#include "SVTK_Functor.h" -#include "SVTK_View.h" -#include "SVTK_MainWindow.h" -#include "SVTK_MainWindow.h" -#include "SVTK_NonIsometricDlg.h" -#include "SVTK_CubeAxesDlg.h" -#include "SVTK_FontWidget.h" -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Renderer.h" -#include "SVTK_InteractorStyle.h" -#include "SVTK_RenderWindowInteractor.h" -#include "SVTK_GenericRenderWindowInteractor.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SVTK_SelectionEvent.h" -#include "SVTK_SpaceMouse.h" -#include "SVTK_Event.h" -#include "SVTK_ViewModelBase.h" - -int -main(int argc, char** argv) -{ - return 0; -} diff --git a/src/SVTK/SVTK.h b/src/SVTK/SVTK.h deleted file mode 100755 index b07763c0b..000000000 --- a/src/SVTK/SVTK.h +++ /dev/null @@ -1,39 +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 -// -#ifndef SVTK_H -#define SVTK_H - -#include "VTKViewer.h" - -#ifdef WNT -# ifdef SVTK_EXPORTS -# define SVTK_EXPORT __declspec(dllexport) -# else -# define SVTK_EXPORT __declspec(dllimport) -# endif -#else -# define SVTK_EXPORT -#endif - -#if defined WNT -#pragma warning ( disable: 4251 ) -#pragma warning ( disable: 4786 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_Actor.cxx b/src/SVTK/SVTK_Actor.cxx deleted file mode 100644 index 1d32a1c2b..000000000 --- a/src/SVTK/SVTK_Actor.cxx +++ /dev/null @@ -1,199 +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 - -#include "SVTK_Actor.h" -#include "SALOME_Actor.h" - -// VTK Includes -#include -#include -#include -#include - -#include -#include - -using namespace std; - - -static -void -CopyPoints(vtkUnstructuredGrid* theGrid, vtkDataSet *theSourceDataSet) -{ - vtkPoints *aPoints = vtkPoints::New(); - vtkIdType iEnd = theSourceDataSet->GetNumberOfPoints(); - aPoints->SetNumberOfPoints(iEnd); - for(vtkIdType i = 0; i < iEnd; i++){ - aPoints->SetPoint(i,theSourceDataSet->GetPoint(i)); - } - theGrid->SetPoints(aPoints); - aPoints->Delete(); -} - -vtkStandardNewMacro(SVTK_Actor); - -/*! - Constructor -*/ -SVTK_Actor -::SVTK_Actor(): - myUnstructuredGrid(vtkUnstructuredGrid::New()) -{ - myIsShaded = true; - myIsResolveCoincidentTopology = false; - - Visibility = Pickable = false; - - myUnstructuredGrid->Delete(); - myUnstructuredGrid->Allocate(); -} - -void -SVTK_Actor -::Initialize() -{ - SetInput(GetSource()); -} - -void -SVTK_Actor -::SetSource(vtkUnstructuredGrid* theUnstructuredGrid) -{ - if(GetSource() == theUnstructuredGrid) - return; - - myUnstructuredGrid = theUnstructuredGrid; - - SetInput(theUnstructuredGrid); -} - -vtkUnstructuredGrid* -SVTK_Actor -::GetSource() -{ - return myUnstructuredGrid.GetPointer(); -} - -/*! - Destructor -*/ -SVTK_Actor -::~SVTK_Actor() -{ -} - -const TColStd_IndexedMapOfInteger& -SVTK_Actor -::GetMapIndex() const -{ - return myMapIndex; -} - -void -SVTK_Actor -::MapCells(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex) -{ - myUnstructuredGrid->Initialize(); - myUnstructuredGrid->Allocate(); - - vtkDataSet *aSourceDataSet = theMapActor->GetInput(); - CopyPoints(GetSource(),aSourceDataSet); - - int aNbOfParts = theMapIndex.Extent(); - for(int ind = 1; ind <= aNbOfParts; ind++){ - int aPartId = theMapIndex( ind ); - if(vtkCell* aCell = theMapActor->GetElemCell(aPartId)) - myUnstructuredGrid->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds()); - } - - UnShrink(); - if(theMapActor->IsShrunk()){ - SetShrinkFactor(theMapActor->GetShrinkFactor()); - SetShrink(); - } - - myMapIndex = theMapIndex; -} - -void -SVTK_Actor -::MapPoints(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex) -{ - myUnstructuredGrid->Initialize(); - myUnstructuredGrid->Allocate(); - - if(int aNbOfParts = theMapIndex.Extent()){ - vtkPoints *aPoints = vtkPoints::New(); - aPoints->SetNumberOfPoints(aNbOfParts); - for(int i = 0; i < aNbOfParts; i++){ - int aPartId = theMapIndex( i+1 ); - if(vtkFloatingPointType* aCoord = theMapActor->GetNodeCoord(aPartId)){ - aPoints->SetPoint(i,aCoord); - myUnstructuredGrid->InsertNextCell(VTK_VERTEX,1,&i); - } - } - myUnstructuredGrid->SetPoints(aPoints); - aPoints->Delete(); - } - - UnShrink(); - - myMapIndex = theMapIndex; -} - -void -SVTK_Actor -::MapEdge(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex) -{ - myUnstructuredGrid->Initialize(); - myUnstructuredGrid->Allocate(); - - vtkDataSet *aSourceDataSet = theMapActor->GetInput(); - CopyPoints(GetSource(),aSourceDataSet); - - - if(theMapIndex.Extent() == 2){ - int anEdgeId = theMapIndex(1) < 0 ? theMapIndex(1) : theMapIndex(2); - int aCellId = theMapIndex(1) < 0 ? theMapIndex(2) : theMapIndex(1); - - if(aCellId > 0){ - if(vtkCell* aCell = theMapActor->GetElemCell(aCellId)){ - if(anEdgeId < 0){ - anEdgeId = -anEdgeId - 1; - int aNbOfEdges = aCell->GetNumberOfEdges(); - if(0 <= anEdgeId || anEdgeId < aNbOfEdges){ - if(vtkCell* anEdge = aCell->GetEdge(anEdgeId)) - myUnstructuredGrid->InsertNextCell(VTK_LINE,anEdge->GetPointIds()); - } - } - } - } - } - - UnShrink(); - if(theMapActor->IsShrunk()){ - SetShrinkFactor(theMapActor->GetShrinkFactor()); - SetShrink(); - } - - myMapIndex = theMapIndex; -} diff --git a/src/SVTK/SVTK_Actor.h b/src/SVTK/SVTK_Actor.h deleted file mode 100644 index e0a8afc02..000000000 --- a/src/SVTK/SVTK_Actor.h +++ /dev/null @@ -1,93 +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 - -#ifndef SVTK_ACTOR_H -#define SVTK_ACTOR_H - -#include - -class vtkRenderer; -class vtkShrinkFilter; -class vtkDataSetMapper; -class vtkUnstructuredGrid; - -#include "SVTK.h" -#include "SVTK_DeviceActor.h" - -#include - -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 -{ -public: - static SVTK_Actor* New(); - - vtkTypeMacro(SVTK_Actor,SVTK_DeviceActor); - - //! Initialiaze the instance completely - void - Initialize(); - - //! Allows to set an external source - void - SetSource(vtkUnstructuredGrid* theUnstructuredGrid); - - //! Get its internal data set - vtkUnstructuredGrid* - GetSource(); - - //! Allow to recostruct selected cells from source SALOME_Actor and map of subindexes - void - MapCells(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex); - - //! Allow to recostruct selected points from source SALOME_Actor and map of subindexes - void - MapPoints(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex); - - //! Allow to recostruct selected edges from source SALOME_Actor and map of subindexes - void - MapEdge(SALOME_Actor* theMapActor, - const TColStd_IndexedMapOfInteger& theMapIndex); - - const TColStd_IndexedMapOfInteger& - GetMapIndex() const; - - protected: - TColStd_IndexedMapOfInteger myMapIndex; - - vtkSmartPointer myUnstructuredGrid; - - SVTK_Actor(); - virtual - ~SVTK_Actor(); -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_CubeAxesActor2D.cxx b/src/SVTK/SVTK_CubeAxesActor2D.cxx deleted file mode 100644 index 823c07224..000000000 --- a/src/SVTK/SVTK_CubeAxesActor2D.cxx +++ /dev/null @@ -1,673 +0,0 @@ -// SALOME OBJECT : kernel of SALOME component -// -// 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 : SVTK_CubeAxesActor2D.cxx -// Author : Eugeny Nikolaev -// Module : SALOME -// $Header$ - -#include "SVTK_CubeAxesActor2D.h" -#include "VTKViewer_Transform.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -vtkCxxRevisionMacro(SVTK_CubeAxesActor2D, "$Revision$"); -vtkStandardNewMacro(SVTK_CubeAxesActor2D); - -// Instantiate this object. -SVTK_CubeAxesActor2D::SVTK_CubeAxesActor2D() -{ - this->wireActorXY = vtkActor::New(); - this->wireActorYZ = vtkActor::New(); - this->wireActorXZ = vtkActor::New(); - - this->planeXY = vtkRectilinearGridGeometryFilter::New(); - this->planeYZ = vtkRectilinearGridGeometryFilter::New(); - this->planeXZ = vtkRectilinearGridGeometryFilter::New(); - - this->rgridMapperXY = vtkPolyDataMapper::New(); - this->rgridMapperYZ = vtkPolyDataMapper::New(); - this->rgridMapperXZ = vtkPolyDataMapper::New(); - - this->rgridMapperXY->SetInput(this->planeXY->GetOutput()); - this->rgridMapperYZ->SetInput(this->planeYZ->GetOutput()); - this->rgridMapperXZ->SetInput(this->planeXZ->GetOutput()); - - this->wireActorXY->SetMapper(rgridMapperXY); - this->wireActorYZ->SetMapper(rgridMapperYZ); - this->wireActorXZ->SetMapper(rgridMapperXZ); - - this->wireActorXY->GetProperty()->SetRepresentationToWireframe(); - this->wireActorYZ->GetProperty()->SetRepresentationToWireframe(); - this->wireActorXZ->GetProperty()->SetRepresentationToWireframe(); - - // setting ambient to 1 (if no - incorrect reaction on light) - this->wireActorXY->GetProperty()->SetAmbient(1); - this->wireActorYZ->GetProperty()->SetAmbient(1); - this->wireActorXZ->GetProperty()->SetAmbient(1); - - this->XAxis->SetTitle(this->XLabel); - this->YAxis->SetTitle(this->YLabel); - this->ZAxis->SetTitle(this->ZLabel); - - this->XAxis->SetNumberOfLabels(this->NumberOfLabels); - this->YAxis->SetNumberOfLabels(this->NumberOfLabels); - this->ZAxis->SetNumberOfLabels(this->NumberOfLabels); - - this->XAxis->SetLabelFormat(this->LabelFormat); - this->YAxis->SetLabelFormat(this->LabelFormat); - this->ZAxis->SetLabelFormat(this->LabelFormat); - - this->XAxis->SetFontFactor(this->FontFactor); - this->YAxis->SetFontFactor(this->FontFactor); - this->ZAxis->SetFontFactor(this->FontFactor); - - this->XAxis->SetProperty(this->GetProperty()); - this->YAxis->SetProperty(this->GetProperty()); - this->ZAxis->SetProperty(this->GetProperty()); - - vtkTextProperty* aTLProp = vtkTextProperty::New(); - aTLProp->SetBold(0); - aTLProp->SetItalic(0); - aTLProp->SetShadow(0); - aTLProp->SetFontFamilyToArial(); - aTLProp->SetColor(1,0,0); - if (this->XAxis->GetLabelTextProperty()) - this->XAxis->GetLabelTextProperty()->ShallowCopy(aTLProp); - aTLProp->SetColor(0,1,0); - if (this->YAxis->GetLabelTextProperty()) - this->YAxis->GetLabelTextProperty()->ShallowCopy(aTLProp); - aTLProp->SetColor(0,0,1); - if (this->ZAxis->GetLabelTextProperty()) - this->ZAxis->GetLabelTextProperty()->ShallowCopy(aTLProp);; - - aTLProp->SetColor(1,0,0); - if (this->XAxis->GetLabelTextProperty()) - this->XAxis->GetTitleTextProperty()->ShallowCopy(aTLProp); - aTLProp->SetColor(0,1,0); - if (this->YAxis->GetLabelTextProperty()) - this->YAxis->GetTitleTextProperty()->ShallowCopy(aTLProp); - aTLProp->SetColor(0,0,1); - if (this->ZAxis->GetLabelTextProperty()) - this->ZAxis->GetTitleTextProperty()->ShallowCopy(aTLProp); - - aTLProp->Delete(); - -} - -SVTK_CubeAxesActor2D::~SVTK_CubeAxesActor2D() -{ - this->wireActorXY->Delete(); - this->wireActorYZ->Delete(); - this->wireActorXZ->Delete(); - - this->planeXY->Delete(); - this->planeYZ->Delete(); - this->planeXZ->Delete(); - - this->rgridMapperXY->Delete(); - this->rgridMapperYZ->Delete(); - this->rgridMapperXZ->Delete(); -} - -// Static variable describes connections in cube. -static int Conn[8][3] = {{1,2,4}, {0,3,5}, {3,0,6}, {2,1,7}, - {5,6,0}, {4,7,1}, {7,4,2}, {6,5,3}}; - -// Project the bounding box and compute edges on the border of the bounding -// cube. Determine which parts of the edges are visible via intersection -// with the boundary of the viewport (minus borders). -int SVTK_CubeAxesActor2D::RenderOverlay(vtkViewport *viewport) -{ - int renderedSomething=0; - - // Initialization - if ( ! this->RenderSomething ) - { - return 0; - } - - //Render the axes - if ( this->XAxisVisibility ) - { - renderedSomething += this->XAxis->RenderOverlay(viewport); - } - if ( this->YAxisVisibility ) - { - renderedSomething += this->YAxis->RenderOverlay(viewport); - } - if ( this->ZAxisVisibility ) - { - renderedSomething += this->ZAxis->RenderOverlay(viewport); - } - - bool RX=false,RY=false; - if (this->XAxisVisibility){ - this->wireActorXY->RenderOverlay(viewport); - this->wireActorXZ->RenderOverlay(viewport); - RX = true; - } - if (this->YAxisVisibility){ - if(!RX) this->wireActorXY->RenderOverlay(viewport); - this->wireActorYZ->RenderOverlay(viewport); - RY = true; - } - if (this->ZAxisVisibility){ - if(!RX) this->wireActorXZ->RenderOverlay(viewport); - if(!RY) this->wireActorYZ->RenderOverlay(viewport); - } - - return renderedSomething; -} - -static void ChangeValues(vtkFloatingPointType* aArray1, - vtkFloatingPointType* aArray2, - vtkFloatingPointType *aRange1, - vtkFloatingPointType* aRange2, - bool theY) -{ - vtkFloatingPointType tmp=-1000; - if (!theY){ - for (int i=0; i<4; i++){ - tmp = aArray1[i]; aArray1[i] = aArray2[i]; aArray2[i] = tmp; - } -#ifndef WNT - for(int i=0;i<2; i++){ -#else - for(i=0;i<2; i++){ -#endif - tmp = aRange1[i]; aRange1[i] = aRange2[i]; aRange2[i] = tmp; - } - } - else{ - tmp = aArray1[2]; aArray1[2] = aArray2[0]; aArray2[0] = tmp; - tmp = aArray1[3]; aArray1[3] = aArray2[1]; aArray2[1] = tmp; - tmp = aArray1[0]; aArray1[0] = aArray2[2]; aArray2[2] = tmp; - tmp = aArray1[1]; aArray1[1] = aArray2[3]; aArray2[3] = tmp; - - tmp = aRange1[0]; aRange1[0] = aRange2[1]; aRange2[1] = tmp; - tmp = aRange1[1]; aRange1[1] = aRange2[0]; aRange2[0] = tmp; - } -} - -static void ChangeArrays(vtkFloatingPointType* xCoords, - vtkFloatingPointType* yCoords, - vtkFloatingPointType* zCoords, - vtkFloatingPointType* xRange, - vtkFloatingPointType* yRange, - vtkFloatingPointType* zRange, - const int xAxes, - const int yAxes, - const int zAxes) -{ - if ( xAxes == 0 && yAxes == 2 && zAxes == 1) - ChangeValues(yCoords,zCoords,yRange,zRange,true); - else if (xAxes == 1 && yAxes == 0 && zAxes == 2) - ChangeValues(xCoords,yCoords,xRange,yRange,true); - else if (xAxes == 1 && yAxes == 2 && zAxes == 0){ - ChangeValues(xCoords,zCoords,xRange,zRange,false); - // xAxes == 0 && yAxes == 2 && zAxes == 1 - ChangeValues(yCoords,zCoords,yRange,zRange,true); - } else if (xAxes == 2 && yAxes == 0 && zAxes == 1){ - ChangeValues(xCoords,yCoords,xRange,yRange,true); - // xAxes == 0 && yAxes == 2 && zAxes == 1 - ChangeValues(zCoords,yCoords,zRange,yRange,true); - } else if (xAxes == 2 && yAxes == 1 && zAxes == 0) - ChangeValues(zCoords,xCoords,zRange,xRange,false); -} - -// Project the bounding box and compute edges on the border of the bounding -// cube. Determine which parts of the edges are visible via intersection -// with the boundary of the viewport (minus borders). -int SVTK_CubeAxesActor2D::RenderOpaqueGeometry(vtkViewport *viewport) -{ - vtkFloatingPointType bounds[6], slope = 0.0, minSlope, num, den; - vtkFloatingPointType pts[8][3], d2, d2Min, min; - int i, idx = 0; - int xIdx, yIdx = 0, zIdx = 0, zIdx2, renderedSomething=0; - int xAxes = 0, yAxes, zAxes; - - // Initialization - if ( !this->Camera ) - { - vtkErrorMacro(<<"No camera!"); - this->RenderSomething = 0; - return 0; - } - - this->RenderSomething = 1; - - // determine the bounds to use - this->GetBounds(bounds); - - // Build the axes (almost always needed so we don't check mtime) - // Transform all points into display coordinates - this->TransformBounds(viewport, bounds, pts); - - // Find the portion of the bounding box that fits within the viewport, - if ( this->ClipBounds(viewport, pts, bounds) == 0 ) - { - this->RenderSomething = 0; - return 0; - } - - // Take into account the inertia. Process only so often. - if ( this->RenderCount++ == 0 || !(this->RenderCount % this->Inertia) ) - { - // Okay, we have a bounding box, maybe clipped and scaled, that is visible. - // We setup the axes depending on the fly mode. - if ( this->FlyMode == VTK_FLY_CLOSEST_TRIAD ) - { - // Loop over points and find the closest point to the camera - min = VTK_LARGE_FLOAT; - for (i=0; i < 8; i++) - { - if ( pts[i][2] < min ) - { - idx = i; - min = pts[i][2]; - } - } - - // Setup the three axes to be drawn - xAxes = 0; - xIdx = Conn[idx][0]; - yAxes = 1; - yIdx = Conn[idx][1]; - zAxes = 2; - zIdx = idx; - zIdx2 = Conn[idx][2]; - } - else - { - vtkFloatingPointType e1[2], e2[2], e3[2]; - - // Find distance to origin - d2Min = VTK_LARGE_FLOAT; - for (i=0; i < 8; i++) - { - d2 = pts[i][0]*pts[i][0] + pts[i][1]*pts[i][1]; - if ( d2 < d2Min ) - { - d2Min = d2; - idx = i; - } - } - - // find minimum slope point connected to closest point and on - // right side (in projected coordinates). This is the first edge. - minSlope = VTK_LARGE_FLOAT; - for (xIdx=0, i=0; i<3; i++) - { - num = (pts[Conn[idx][i]][1] - pts[idx][1]); - den = (pts[Conn[idx][i]][0] - pts[idx][0]); - if ( den != 0.0 ) - { - slope = num / den; - } - if ( slope < minSlope && den > 0 ) - { - xIdx = Conn[idx][i]; - yIdx = Conn[idx][(i+1)%3]; - zIdx = Conn[idx][(i+2)%3]; - xAxes = i; - minSlope = slope; - } - } - - // find edge (connected to closest point) on opposite side - for ( i=0; i<2; i++) - { - e1[i] = (pts[xIdx][i] - pts[idx][i]); - e2[i] = (pts[yIdx][i] - pts[idx][i]); - e3[i] = (pts[zIdx][i] - pts[idx][i]); - } - vtkMath::Normalize2D(e1); - vtkMath::Normalize2D(e2); - vtkMath::Normalize2D(e3); - - if ( vtkMath::Dot2D(e1,e2) < vtkMath::Dot2D(e1,e3) ) - { - yAxes = (xAxes + 1) % 3; - } - else - { - yIdx = zIdx; - yAxes = (xAxes + 2) % 3; - } - - // Find the final point by determining which global x-y-z axes have not - // been represented, and then determine the point closest to the viewer. - zAxes = (xAxes != 0 && yAxes != 0 ? 0 : - (xAxes != 1 && yAxes != 1 ? 1 : 2)); - if ( pts[Conn[xIdx][zAxes]][2] < pts[Conn[yIdx][zAxes]][2] ) - { - zIdx = xIdx; - zIdx2 = Conn[xIdx][zAxes]; - } - else - { - zIdx = yIdx; - zIdx2 = Conn[yIdx][zAxes]; - } - }//else boundary edges fly mode - this->InertiaAxes[0] = idx; - this->InertiaAxes[1] = xIdx; - this->InertiaAxes[2] = yIdx; - this->InertiaAxes[3] = zIdx; - this->InertiaAxes[4] = zIdx2; - this->InertiaAxes[5] = xAxes; - this->InertiaAxes[6] = yAxes; - this->InertiaAxes[7] = zAxes; - } //inertia - else - { - idx = this->InertiaAxes[0]; - xIdx = this->InertiaAxes[1]; - yIdx = this->InertiaAxes[2]; - zIdx = this->InertiaAxes[3]; - zIdx2 = this->InertiaAxes[4]; - xAxes = this->InertiaAxes[5]; - yAxes = this->InertiaAxes[6]; - zAxes = this->InertiaAxes[7]; - } - - // Setup the axes for plotting - vtkFloatingPointType xCoords[4], yCoords[4], zCoords[4], xRange[2], yRange[2], zRange[2]; - this->AdjustAxes(pts, bounds, idx, xIdx, yIdx, zIdx, zIdx2, - xAxes, yAxes, zAxes, - xCoords, yCoords, zCoords, xRange, yRange, zRange); - - // Upate axes - this->Labels[0] = this->XLabel; - this->Labels[1] = this->YLabel; - this->Labels[2] = this->ZLabel; - - // correct XAxis, YAxis, ZAxis, which must be - // parallel OX, OY, OZ system coordinates - // if xAxes=0 yAxes=1 zAxes=2 - good situation - if (!(xAxes == 0 && yAxes == 1 && zAxes == 2)) - ChangeArrays(xCoords,yCoords,zCoords, - xRange,yRange,zRange, - xAxes,yAxes,zAxes); - - double aTScale[3]; - if(m_Transform.GetPointer() != NULL) - m_Transform->GetMatrixScale(aTScale); - - this->XAxis->GetPositionCoordinate()->SetValue(xCoords[0], xCoords[1]); - this->XAxis->GetPosition2Coordinate()->SetValue(xCoords[2], xCoords[3]); - if(m_Transform.GetPointer() != NULL) this->XAxis->SetRange(xRange[0]/aTScale[0], xRange[1]/aTScale[0]); - else this->XAxis->SetRange(xRange[0], xRange[1]); - - this->YAxis->GetPositionCoordinate()->SetValue(yCoords[2], yCoords[3]); - this->YAxis->GetPosition2Coordinate()->SetValue(yCoords[0], yCoords[1]); - if(m_Transform.GetPointer() != NULL) this->YAxis->SetRange(yRange[1]/aTScale[1], yRange[0]/aTScale[1]); - else this->YAxis->SetRange(yRange[1], yRange[0]); - - this->ZAxis->GetPositionCoordinate()->SetValue(zCoords[0], zCoords[1]); - this->ZAxis->GetPosition2Coordinate()->SetValue(zCoords[2], zCoords[3]); - if(m_Transform.GetPointer() != NULL) this->ZAxis->SetRange(zRange[0]/aTScale[2], zRange[1]/aTScale[2]); - else this->ZAxis->SetRange(zRange[0], zRange[1]); - - int numOfLabelsX = this->XAxis->GetNumberOfLabels(); - int numOfLabelsY = this->YAxis->GetNumberOfLabels(); - int numOfLabelsZ = this->ZAxis->GetNumberOfLabels(); - - // XCoords coordinates for X grid - vtkFloatArray *XCoords = vtkFloatArray::New(); -#ifndef WNT - for(int i=0;iInsertNextValue(val); - } - // YCoords coordinates for Y grid - vtkFloatArray *YCoords = vtkFloatArray::New(); -#ifndef WNT - for(int i=0;iInsertNextValue(val); - } - // ZCoords coordinates for Z grid - vtkFloatArray *ZCoords = vtkFloatArray::New(); -#ifndef WNT - for(int i=0;iInsertNextValue(val); - } - - vtkRectilinearGrid *rgrid = vtkRectilinearGrid::New(); - rgrid->SetDimensions(numOfLabelsX,numOfLabelsY,numOfLabelsZ); - rgrid->SetXCoordinates(XCoords); - rgrid->SetYCoordinates(YCoords); - rgrid->SetZCoordinates(ZCoords); - - this->planeXY->SetInput(rgrid); - this->planeYZ->SetInput(rgrid); - this->planeXZ->SetInput(rgrid); - - rgrid->Delete(); - - vtkFloatingPointType aCPosition[3]; - vtkFloatingPointType aCDirection[3]; - this->Camera->GetPosition(aCPosition); - this->Camera->GetDirectionOfProjection(aCDirection); - - // culculate placement of XY - bool replaceXY=false; - bool replaceYZ=false; - bool replaceXZ=false; - vtkFloatingPointType p[6][3]; // centers of planes - vtkFloatingPointType vecs[6][3]; // 6 vectors from camera position to centers - - vtkFloatingPointType aMiddleX = (XCoords->GetValue(0) + XCoords->GetValue(numOfLabelsX-1))/2; - vtkFloatingPointType aMiddleY = (YCoords->GetValue(0) + YCoords->GetValue(numOfLabelsY-1))/2; - vtkFloatingPointType aMiddleZ = (ZCoords->GetValue(0) + ZCoords->GetValue(numOfLabelsZ-1))/2; - - // plane XY - p[0][0] = aMiddleX; // plane X=0.5 Y=0.5 Z=0 - p[0][1] = aMiddleY; - p[0][2] = ZCoords->GetValue(0); - - p[1][0] = aMiddleX; // plane X=0.5 Y=0.5 Z=1 - p[1][1] = aMiddleY; - p[1][2] = ZCoords->GetValue(numOfLabelsZ-1); - - // plane YZ - p[2][0] = XCoords->GetValue(0); // plane X=0 Y=0.5 Z=0.5 - p[2][1] = aMiddleY; - p[2][2] = aMiddleZ; - - p[3][0] = XCoords->GetValue(numOfLabelsX-1); - p[3][1] = aMiddleY; - p[3][2] = aMiddleZ; - - // plane XZ - p[4][0] = aMiddleX; // plane X=0.5 Y=0 Z=0.5 - p[4][1] = YCoords->GetValue(0); - p[4][2] = aMiddleZ; - - p[5][0] = aMiddleX; // plane X=0.5 Y=1 Z=0.5 - p[5][1] = YCoords->GetValue(numOfLabelsY-1); - p[5][2] = aMiddleZ; - -#ifndef WNT - for(int i=0;i<3;i++) -#else - for(i=0;i<3;i++) -#endif - for(int j=0;j<6;j++) vecs[j][i] = p[j][i] - aCPosition[i]; - - if ( vtkMath::Dot(vecs[0],aCDirection) < vtkMath::Dot(vecs[1],aCDirection)) - replaceXY = true; - if ( vtkMath::Dot(vecs[2],aCDirection) < vtkMath::Dot(vecs[3],aCDirection)) - replaceYZ = true; - if ( vtkMath::Dot(vecs[4],aCDirection) < vtkMath::Dot(vecs[5],aCDirection)) - replaceXZ = true; - - if(replaceXY) this->planeXY->SetExtent(0,numOfLabelsX, 0,numOfLabelsY, numOfLabelsZ,numOfLabelsZ); - else this->planeXY->SetExtent(0,numOfLabelsX, 0,numOfLabelsY, 0,0); - - if(replaceYZ) this->planeYZ->SetExtent(numOfLabelsX,numOfLabelsX, 0,numOfLabelsY, 0,numOfLabelsZ); - else this->planeYZ->SetExtent(0,0, 0,numOfLabelsY, 0,numOfLabelsZ); - - if(replaceXZ) this->planeXZ->SetExtent(0,numOfLabelsX, numOfLabelsY,numOfLabelsY, 0,numOfLabelsZ); - else this->planeXZ->SetExtent(0,numOfLabelsX, 0,0, 0,numOfLabelsZ); - - XCoords->Delete(); - YCoords->Delete(); - ZCoords->Delete(); - - vtkFloatingPointType color[3]; - - this->GetProperty()->GetColor(color); - this->wireActorXY->GetProperty()->SetColor(color); - this->wireActorYZ->GetProperty()->SetColor(color); - this->wireActorXZ->GetProperty()->SetColor(color); - - /* - // Rebuid text props - // Perform shallow copy here since each individual axis can be - // accessed through the class API (i.e. each individual axis text prop - // can be changed). Therefore, we can not just assign pointers otherwise - // each individual axis text prop would point to the same text prop. - - if (this->AxisLabelTextProperty && - this->AxisLabelTextProperty->GetMTime() > this->BuildTime) - { - if (this->XAxis->GetLabelTextProperty()) - { - this->XAxis->GetLabelTextProperty()->ShallowCopy( - this->AxisLabelTextProperty); - } - if (this->YAxis->GetLabelTextProperty()) - { - this->YAxis->GetLabelTextProperty()->ShallowCopy( - this->AxisLabelTextProperty); - } - if (this->ZAxis->GetLabelTextProperty()) - { - this->ZAxis->GetLabelTextProperty()->ShallowCopy( - this->AxisLabelTextProperty); - } - } - - if (this->AxisTitleTextProperty && - this->AxisTitleTextProperty->GetMTime() > this->BuildTime) - { - if (this->XAxis->GetLabelTextProperty()) - { - this->XAxis->GetTitleTextProperty()->ShallowCopy( - this->AxisTitleTextProperty); - } - if (this->YAxis->GetLabelTextProperty()) - { - this->YAxis->GetTitleTextProperty()->ShallowCopy( - this->AxisTitleTextProperty); - } - if (this->ZAxis->GetLabelTextProperty()) - { - this->ZAxis->GetTitleTextProperty()->ShallowCopy( - this->AxisTitleTextProperty); - } - } - */ - this->BuildTime.Modified(); - - //Render the axes - if ( this->XAxisVisibility ) - { - renderedSomething += this->XAxis->RenderOpaqueGeometry(viewport); - } - if ( this->YAxisVisibility ) - { - renderedSomething += this->YAxis->RenderOpaqueGeometry(viewport); - } - if ( this->ZAxisVisibility ) - { - renderedSomething += this->ZAxis->RenderOpaqueGeometry(viewport); - } - - bool RX=false,RY=false; - if (this->XAxisVisibility){ - this->wireActorXY->RenderOpaqueGeometry(viewport); - this->wireActorXZ->RenderOpaqueGeometry(viewport); - RX = true; - } - if (this->YAxisVisibility){ - if(!RX) this->wireActorXY->RenderOpaqueGeometry(viewport); - this->wireActorYZ->RenderOpaqueGeometry(viewport); - RY = true; - } - if (this->ZAxisVisibility){ - if(!RX) this->wireActorXZ->RenderOpaqueGeometry(viewport); - if(!RY) this->wireActorYZ->RenderOpaqueGeometry(viewport); - } - - return renderedSomething; -} - -// Release any graphics resources that are being consumed by this actor. -// The parameter window could be used to determine which graphic -// resources to release. -void SVTK_CubeAxesActor2D::ReleaseGraphicsResources(vtkWindow *win) -{ - this->XAxis->ReleaseGraphicsResources(win); - this->YAxis->ReleaseGraphicsResources(win); - this->ZAxis->ReleaseGraphicsResources(win); - - this->wireActorXY->ReleaseGraphicsResources(win); - this->wireActorYZ->ReleaseGraphicsResources(win); - this->wireActorXZ->ReleaseGraphicsResources(win); -} - -void SVTK_CubeAxesActor2D::SetTransform(VTKViewer_Transform* theTransform){ - this->m_Transform = theTransform; -} - -VTKViewer_Transform* SVTK_CubeAxesActor2D::GetTransform(){ - return (this->m_Transform.GetPointer()); -} diff --git a/src/SVTK/SVTK_CubeAxesActor2D.h b/src/SVTK/SVTK_CubeAxesActor2D.h deleted file mode 100644 index 445f6d71e..000000000 --- a/src/SVTK/SVTK_CubeAxesActor2D.h +++ /dev/null @@ -1,117 +0,0 @@ -// SALOME OBJECT : kernel of SALOME component -// -// 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 : SVTK_CubeAxesActor2D.h -// Author : Eugeny Nikolaev -// Module : SALOME -// $Header$ - -#ifndef __SVTK_CubeAxesActor2D_h -#define __SVTK_CubeAxesActor2D_h - -#include -#include - -class vtkActor; -class vtkAxisActor2D; -class vtkCamera; -class vtkDataSet; -class vtkTextProperty; -class vtkPolyDataMapper; -class vtkRectilinearGridGeometryFilter; -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 -class SVTK_EXPORT SVTK_CubeAxesActor2D : public vtkCubeAxesActor2D -#endif -{ -public: - vtkTypeRevisionMacro(SVTK_CubeAxesActor2D,vtkCubeAxesActor2D); - - // Description: - // Instantiate object with bold, italic, and shadow enabled; font family - // set to Arial; and label format "6.3g". The number of labels per axis - // is set to 3. - static SVTK_CubeAxesActor2D *New(); - - // Description: - // Draw the axes as per the vtkProp superclass' API. - int RenderOverlay(vtkViewport*); - int RenderOpaqueGeometry(vtkViewport*); - - // Description: - // Release any graphics resources that are being consumed by this actor. - // The parameter window could be used to determine which graphic - // resources to release. - void ReleaseGraphicsResources(vtkWindow *); - - // Description: - - vtkActor* GetWireActorXY(){return this->wireActorXY;} - vtkActor* GetWireActorYZ(){return this->wireActorYZ;} - vtkActor* GetWireActorXZ(){return this->wireActorXZ;} - - void SetTransform(VTKViewer_Transform* theTransform); - VTKViewer_Transform* GetTransform(); - -protected: - SVTK_CubeAxesActor2D(); - ~SVTK_CubeAxesActor2D(); - - vtkActor* wireActorXY; - vtkActor* wireActorYZ; - vtkActor* wireActorXZ; - -private: - // hide the superclass' ShallowCopy() from the user and the compiler. - void ShallowCopy(vtkProp *prop) { this->vtkProp::ShallowCopy( prop ); }; - - vtkRectilinearGridGeometryFilter *planeXY; // rectilinear grid XY - vtkPolyDataMapper *rgridMapperXY; - - vtkRectilinearGridGeometryFilter *planeYZ; // rectilinear grid YZ - vtkPolyDataMapper *rgridMapperYZ; - - vtkRectilinearGridGeometryFilter *planeXZ; // rectilinear grid XZ - vtkPolyDataMapper *rgridMapperXZ; - - vtkSmartPointer m_Transform; -private: - SVTK_CubeAxesActor2D(const SVTK_CubeAxesActor2D&); // Not implemented. - void operator=(const SVTK_CubeAxesActor2D&); // Not implemented. -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_CubeAxesDlg.cxx b/src/SVTK/SVTK_CubeAxesDlg.cxx deleted file mode 100644 index 94e4af88f..000000000 --- a/src/SVTK/SVTK_CubeAxesDlg.cxx +++ /dev/null @@ -1,512 +0,0 @@ -// VISU VISUGUI : GUI for SMESH component -// -// 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 : SVTK_CubeAxesDlg.cxx -// Author : Sergey LITONIN -// Module : VISU - -#include "SVTK_CubeAxesDlg.h" - -#include "SVTK_MainWindow.h" -#include "SVTK_FontWidget.h" - -#include "SVTK_CubeAxesActor2D.h" - -#include "QtxAction.h" -#include "QtxIntSpinBox.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -/*! - * Class : AxisWg - * Description : Tab of dialog - */ - -/*! - Constructor -*/ -SVTK_AxisWidget::SVTK_AxisWidget (QWidget* theParent) -: QFrame(theParent) -{ - QValueList< QLabel* > aLabels; - - // "Name" grp - - myNameGrp = new QGroupBox(3, Qt::Vertical, tr("AXIS_NAME"), this); - myIsNameVisible = new QCheckBox(tr("IS_VISIBLE"), myNameGrp); - - QHBox* aHBox = new QHBox(myNameGrp); - aHBox->setSpacing(5); - QLabel* aLabel = new QLabel(tr("NAME"), aHBox); - myAxisName = new QLineEdit(aHBox); - aLabels.append(aLabel); - - aHBox = new QHBox(myNameGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("FONT"), aHBox); - myNameFont = new SVTK_FontWidget(aHBox); - aLabels.append(aLabel); - - - // "Labels" grp - - myLabelsGrp = new QGroupBox(4, Qt::Vertical, tr("LABELS"), this); - myIsLabelsVisible = new QCheckBox(tr("IS_VISIBLE"), myLabelsGrp); - - aHBox = new QHBox(myLabelsGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("NUMBER"), aHBox); - myLabelNumber = new QtxIntSpinBox(0,25,1,aHBox,"SpinBoxLabelNumber"); - aLabels.append(aLabel); - - aHBox = new QHBox(myLabelsGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("OFFSET"), aHBox); - myLabelOffset = new QtxIntSpinBox(0,100,1,aHBox,"SpinBoxLabellOffset"); - aLabels.append(aLabel); - - aHBox = new QHBox(myLabelsGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("FONT"), aHBox); - myLabelsFont = new SVTK_FontWidget(aHBox); - aLabels.append(aLabel); - - // "Tick marks" grp - - myTicksGrp = new QGroupBox(2, Qt::Vertical, tr("TICK_MARKS"), this); - myIsTicksVisible = new QCheckBox(tr("IS_VISIBLE"), myTicksGrp); - - aHBox = new QHBox(myTicksGrp); - aHBox->setSpacing(5); - aLabel = new QLabel(tr("LENGTH"), aHBox); - myTickLength = new QtxIntSpinBox(0,100,1,aHBox,"SpinBoxTickLength"); - - aLabels.append(aLabel); - - // Layout - - QVBoxLayout* aLay = new QVBoxLayout(this, 0, 5); - aLay->addWidget(myNameGrp); - aLay->addWidget(myLabelsGrp); - aLay->addWidget(myTicksGrp); - - // init - myIsNameVisible->setChecked(true); - myIsLabelsVisible->setChecked(true); - myIsTicksVisible->setChecked(true); - updateControlState(); - - // Adjust label widths - QValueList< QLabel* >::iterator anIter; - int aMaxWidth = 0; - for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) - aMaxWidth = QMAX(aMaxWidth, (*anIter)->sizeHint().width()); - for (anIter = aLabels.begin(); anIter != aLabels.end(); anIter++) - (*anIter)->setFixedWidth(aMaxWidth); - - // connect signals and slots - connect(myIsNameVisible, SIGNAL(stateChanged(int)), SLOT(onNameChecked())); - connect(myIsLabelsVisible, SIGNAL(stateChanged(int)), SLOT(onLabelsChecked())); - connect(myIsTicksVisible, SIGNAL(stateChanged(int)), SLOT(onTicksChecked())); -} - -/*! - Destructor -*/ -SVTK_AxisWidget::~SVTK_AxisWidget() -{ -} - -void SVTK_AxisWidget::updateControlState() -{ - onNameChecked(); - onLabelsChecked(); - onTicksChecked(); -} - -void SVTK_AxisWidget::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("QHBox")) - ((QHBox*)anObj)->setEnabled(theState); -} - -void SVTK_AxisWidget::onLabelsChecked() -{ - setEnabled(myLabelsGrp, myIsLabelsVisible->isChecked()); -} - -void SVTK_AxisWidget::onTicksChecked() -{ - setEnabled(myTicksGrp, myIsTicksVisible->isChecked()); -} - -void SVTK_AxisWidget::onNameChecked() -{ - setEnabled(myNameGrp, myIsNameVisible->isChecked()); -} - -void SVTK_AxisWidget::UseName(const bool toUse) -{ - myIsNameVisible->setChecked(toUse); -} - -void SVTK_AxisWidget::SetName(const QString& theName) -{ - myAxisName->setText(theName); -} - -void SVTK_AxisWidget::SetNameFont(const QColor& theColor, - const int theFont, - const bool theIsBold, - const bool theIsItalic, - const bool theIsShadow) -{ - myNameFont->SetData(theColor, theFont, theIsBold, theIsItalic, theIsShadow); -} - -bool SVTK_AxisWidget::ReadData(vtkAxisActor2D* theActor) -{ - if (theActor == 0) - return false; - - // Name - - bool useName = theActor->GetTitleVisibility(); - QString aTitle(theActor->GetTitle()); - - QColor aTitleColor(255, 255, 255); - int aTitleFontFamily = VTK_ARIAL; - bool isTitleBold = false; - bool isTitleItalic = false; - bool isTitleShadow = false; - - vtkTextProperty* aTitleProp = theActor->GetTitleTextProperty(); - if (aTitleProp !=0) - { - vtkFloatingPointType c[ 3 ]; - aTitleProp->GetColor(c); - aTitleColor.setRgb((int)(c[ 0 ] * 255), (int)(c[ 1 ] * 255), (int)(c[ 2 ] * 255)); - aTitleFontFamily = aTitleProp->GetFontFamily(); - isTitleBold = aTitleProp->GetBold() ? true : false; - isTitleItalic = aTitleProp->GetItalic() ? true : false; - isTitleShadow = aTitleProp->GetShadow() ? true : false; - } - - myIsNameVisible->setChecked(useName); - myAxisName->setText(aTitle); - myNameFont->SetData(aTitleColor, aTitleFontFamily, isTitleBold, isTitleItalic, isTitleShadow); - - // Labels - - bool useLabels = theActor->GetLabelVisibility(); - int nbLabels = theActor->GetNumberOfLabels(); - int anOffset = theActor->GetTickOffset(); - - QColor aLabelsColor(255, 255, 255); - int aLabelsFontFamily = VTK_ARIAL; - bool isLabelsBold = false; - bool isLabelsItalic = false; - bool isLabelsShadow = false; - - vtkTextProperty* aLabelsProp = theActor->GetLabelTextProperty(); - if (aLabelsProp !=0) - { - vtkFloatingPointType c[ 3 ]; - aLabelsProp->GetColor(c); - aLabelsColor.setRgb((int)(c[ 0 ] * 255), (int)(c[ 1 ] * 255), (int)(c[ 2 ] * 255)); - aLabelsFontFamily = aLabelsProp->GetFontFamily(); - isLabelsBold = aLabelsProp->GetBold() ? true : false; - isLabelsItalic = aLabelsProp->GetItalic() ? true : false; - isLabelsShadow = aLabelsProp->GetShadow() ? true : false; - } - - myIsLabelsVisible->setChecked(useLabels); - myLabelNumber->setValue(nbLabels); - myLabelOffset->setValue(anOffset); - myLabelsFont->SetData(aLabelsColor, aLabelsFontFamily, isLabelsBold, isLabelsItalic, isLabelsShadow); - - // Tick marks - bool useTickMarks = theActor->GetTickVisibility(); - int aTickLength = theActor->GetTickLength(); - - myIsTicksVisible->setChecked(useTickMarks); - myTickLength->setValue(aTickLength); - - return true; -} - -bool SVTK_AxisWidget::Apply(vtkAxisActor2D* theActor) -{ - if (theActor == 0) - return false; - - // Name - - theActor->SetTitleVisibility(myIsNameVisible->isChecked() ? 1 : 0); - theActor->SetTitle(myAxisName->text().latin1()); - - QColor aTitleColor(255, 255, 255); - int aTitleFontFamily = VTK_ARIAL; - bool isTitleBold = false; - bool isTitleItalic = false; - bool isTitleShadow = false; - - myNameFont->GetData(aTitleColor, aTitleFontFamily, isTitleBold, isTitleItalic, isTitleShadow); - vtkTextProperty* aTitleProp = theActor->GetTitleTextProperty(); - if (aTitleProp) - { - aTitleProp->SetColor(aTitleColor.red() / 255., - aTitleColor.green() / 255., - aTitleColor.blue() / 255.); - aTitleProp->SetFontFamily(aTitleFontFamily); - - aTitleProp->SetBold(isTitleBold ? 1 : 0); - aTitleProp->SetItalic(isTitleItalic ? 1 : 0); - aTitleProp->SetShadow(isTitleShadow ? 1 : 0); - - theActor->SetTitleTextProperty(aTitleProp); - } - - // Labels - - theActor->SetLabelVisibility(myIsLabelsVisible->isChecked() ? 1 : 0); - - int nbLabels = myLabelNumber->value(); - theActor->SetNumberOfLabels(nbLabels); - - int anOffset = myLabelOffset->value(); - theActor->SetTickOffset(anOffset); - - QColor aLabelsColor(255, 255, 255); - int aLabelsFontFamily = VTK_ARIAL; - bool isLabelsBold = false; - bool isLabelsItalic = false; - bool isLabelsShadow = false; - - myLabelsFont->GetData(aLabelsColor, aLabelsFontFamily, isLabelsBold, isLabelsItalic, isLabelsShadow); - vtkTextProperty* aLabelsProp = theActor->GetLabelTextProperty(); - if (aLabelsProp) - { - aLabelsProp->SetColor(aLabelsColor.red() / 255., - aLabelsColor.green() / 255., - aLabelsColor.blue() / 255.); - aLabelsProp->SetFontFamily(aLabelsFontFamily); - - aLabelsProp->SetBold(isLabelsBold ? 1 : 0); - aLabelsProp->SetItalic(isLabelsItalic ? 1 : 0); - aLabelsProp->SetShadow(isLabelsShadow ? 1 : 0); - - aLabelsProp->Modified(); - theActor->SetLabelTextProperty(aLabelsProp); - } - - - // Tick marks - theActor->SetTickVisibility(myIsTicksVisible->isChecked()); - int aTickLength = myTickLength->value(); - theActor->SetTickLength(aTickLength); - - return true; -} - -/* - Class : SVTK_CubeAxesDlg - Description : Dialog for specifynig cube axes properties -*/ - -/*! - Constructor -*/ -SVTK_CubeAxesDlg::SVTK_CubeAxesDlg(QtxAction* theAction, - SVTK_MainWindow* theParent, - const char* theName): - SVTK_DialogBase(theAction, - theParent, - theName), - myMainWindow(theParent) -{ - setCaption(tr("CAPTION")); - - QVBoxLayout* aLay = new QVBoxLayout(this, 5, 5); - aLay->addWidget(createMainFrame(this)); - aLay->addWidget(createButtonFrame(this)); - - connect(theParent, SIGNAL(Show( QShowEvent * )), this, SLOT(onParentShow())); - connect(theParent, SIGNAL(Hide( QHideEvent * )), this, SLOT(onParentHide())); -} - -/*! - Create frame containing dialog's input fields -*/ -QWidget* SVTK_CubeAxesDlg::createMainFrame(QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - - myTabWg = new QTabWidget(aFrame); - - myAxes[ 0 ] = new SVTK_AxisWidget(myTabWg); - myAxes[ 1 ] = new SVTK_AxisWidget(myTabWg); - myAxes[ 2 ] = new SVTK_AxisWidget(myTabWg); - - myTabWg->addTab(myAxes[ 0 ], tr("X_AXIS")); - myTabWg->addTab(myAxes[ 1 ], tr("Y_AXIS")); - myTabWg->addTab(myAxes[ 2 ], tr("Z_AXIS")); - - myTabWg->setMargin(5); - - myIsVisible = new QCheckBox(tr("IS_VISIBLE"), aFrame); - - QVBoxLayout* aLay = new QVBoxLayout(aFrame, 0, 5); - aLay->addWidget(myTabWg); - aLay->addWidget(myIsVisible); - - return aFrame; -} - -/*! - Create frame containing buttons -*/ -QWidget* SVTK_CubeAxesDlg::createButtonFrame(QWidget* theParent) -{ - QFrame* aFrame = new QFrame(theParent); - aFrame->setFrameStyle(QFrame::Box | QFrame::Sunken); - - myOkBtn = new QPushButton(tr("BUT_OK"), aFrame); - myApplyBtn = new QPushButton(tr("BUT_APPLY"), aFrame); - myCloseBtn = new QPushButton(tr("BUT_CLOSE"), aFrame); - - QSpacerItem* aSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum); - - QHBoxLayout* aLay = new QHBoxLayout(aFrame, 5, 5); - - aLay->addWidget(myOkBtn); - aLay->addWidget(myApplyBtn); - aLay->addItem(aSpacer); - aLay->addWidget(myCloseBtn); - - connect(myOkBtn, SIGNAL(clicked()), SLOT(onOk())); - connect(myApplyBtn, SIGNAL(clicked()), SLOT(onApply())); - connect(myCloseBtn, SIGNAL(clicked()), SLOT(onClose())); - - return aFrame; -} - -/*! - Destructor -*/ -SVTK_CubeAxesDlg::~SVTK_CubeAxesDlg() -{ -} - -/*! - Update dialog fields, connect signals and slots, show dialog -*/ -void SVTK_CubeAxesDlg::Update() -{ - myActor = myMainWindow->GetCubeAxes(); - - myAxes[ 0 ]->ReadData(myActor->GetXAxisActor2D()); - myAxes[ 1 ]->ReadData(myActor->GetYAxisActor2D()); - myAxes[ 2 ]->ReadData(myActor->GetZAxisActor2D()); - - myIsVisible->setChecked(myActor->GetVisibility() ? true : false); -} - -/*! - Verify validity of entry data -*/ -bool SVTK_CubeAxesDlg::isValid() const -{ - return true; -} - -/*! - Verify validity of entry data -*/ -bool SVTK_CubeAxesDlg::onApply() -{ - bool isOk = true; - - try - { - QWidget *aCurrWid = this->focusWidget(); - aCurrWid->clearFocus(); - aCurrWid->setFocus(); - - isOk = isOk && myAxes[ 0 ]->Apply(myActor->GetXAxisActor2D()); - isOk = isOk && myAxes[ 1 ]->Apply(myActor->GetYAxisActor2D()); - isOk = isOk && myAxes[ 2 ]->Apply(myActor->GetZAxisActor2D()); - - - //myActor->SetXLabel(myAxes[ 0 ]->myAxisName->text()); - //myActor->SetYLabel(myAxes[ 1 ]->myAxisName->text()); - //myActor->SetZLabel(myAxes[ 2 ]->myAxisName->text()); - - //myActor->SetNumberOfLabels(myActor->GetXAxisActor2D()->GetNumberOfLabels()); - if (myIsVisible->isChecked()) - myActor->VisibilityOn(); - else - myActor->VisibilityOff(); - - if (isOk) - myMainWindow->Repaint(); - } - catch(...) - { - isOk = false; - } - - return isOk; -} - -/*! - SLOT called when "Ok" button pressed. -*/ -void SVTK_CubeAxesDlg::onOk() -{ - if (onApply()) - onClose(); -} - -/*! - SLOT: called when "Close" button pressed. Close dialog -*/ -void SVTK_CubeAxesDlg::onClose() -{ - reject(); -} diff --git a/src/SVTK/SVTK_CubeAxesDlg.h b/src/SVTK/SVTK_CubeAxesDlg.h deleted file mode 100644 index c4277db69..000000000 --- a/src/SVTK/SVTK_CubeAxesDlg.h +++ /dev/null @@ -1,140 +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 : SVTK_CubeAxesDlg.h -// Author : Sergey LITONIN -// Module : VISU - - -#ifndef SVTK_CubeAxesDlg_H -#define SVTK_CubeAxesDlg_H - -#include "SVTK_DialogBase.h" - -#include - -class QWidget; -class QFrame; -class QPushButton; -class QTabWidget; -class QCheckBox; -class QLineEdit; -class QGroupBox; - -class QtxAction; -class QtxIntSpinBox; - -class vtkAxisActor2D; -class SVTK_CubeAxesActor2D; - -class SVTK_FontWidget; -class SVTK_AxisWidget; -class SVTK_MainWindow; - -/*! - * Class : SVTK_CubeAxesDlg - * Description : Dialog for specifynig cube axes properties - */ -class SVTK_CubeAxesDlg : public SVTK_DialogBase -{ - Q_OBJECT - -public: - SVTK_CubeAxesDlg(QtxAction* theAction, - SVTK_MainWindow* theParent, - const char* theName); - virtual ~SVTK_CubeAxesDlg(); - - void Update(); - -private slots: - void onOk(); - bool onApply(); - void onClose(); - -private: - QWidget* createButtonFrame( QWidget* ); - QWidget* createMainFrame ( QWidget* ); - bool isValid() const; - -private: - SVTK_MainWindow *myMainWindow; - SVTK_CubeAxesActor2D* myActor; - - QTabWidget* myTabWg; - QCheckBox* myIsVisible; - - QPushButton* myOkBtn; - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; - SVTK_AxisWidget* myAxes[ 3 ]; -}; - -/*! - * Class : SVTK_AxisWidget - * Description : Tab of dialog - */ -class SVTK_AxisWidget : public QFrame -{ - Q_OBJECT - -public: - SVTK_AxisWidget( QWidget* ); - ~SVTK_AxisWidget(); - - void UseName( const bool ); - void SetName( const QString& ); - void SetNameFont( const QColor&, const int, const bool, const bool, const bool ); - bool ReadData( vtkAxisActor2D* ); - bool Apply( vtkAxisActor2D* ); - -private slots: - void onNameChecked(); - void onLabelsChecked(); - void onTicksChecked(); - -private: - void updateControlState(); - void setEnabled( QGroupBox*, const bool ); - -private: - // name - QGroupBox* myNameGrp; - QCheckBox* myIsNameVisible; - QLineEdit* myAxisName; - SVTK_FontWidget* myNameFont; - - // labels - QGroupBox* myLabelsGrp; - QCheckBox* myIsLabelsVisible; - QtxIntSpinBox* myLabelNumber; - QtxIntSpinBox* myLabelOffset; - SVTK_FontWidget* myLabelsFont; - - // tick marks - QGroupBox* myTicksGrp; - QCheckBox* myIsTicksVisible; - QtxIntSpinBox* myTickLength; - - friend class SVTK_CubeAxesDlg; -}; - -#endif diff --git a/src/SVTK/SVTK_DeviceActor.cxx b/src/SVTK/SVTK_DeviceActor.cxx deleted file mode 100644 index c543127bf..000000000 --- a/src/SVTK/SVTK_DeviceActor.cxx +++ /dev/null @@ -1,499 +0,0 @@ -// SVTK OBJECT : interactive object for SVTK visualization -// -// 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 : SVTK_DeviceActor.cxx -// Author : -// Module : -// $Header$ - - -#include "SVTK_DeviceActor.h" - -#include "VTKViewer_Transform.h" -#include "VTKViewer_TransformFilter.h" -#include "VTKViewer_PassThroughFilter.h" -#include "VTKViewer_GeometryFilter.h" - -// VTK Includes -#include -#include - -#include -#include - -#include -#include - -using namespace std; - -vtkStandardNewMacro(SVTK_DeviceActor); - -/*! - Constructor -*/ -SVTK_DeviceActor -::SVTK_DeviceActor() -{ - myIsShrunk = false; - myIsShrinkable = true; - - myIsShaded = true; - myProperty = vtkProperty::New(); - myRepresentation = SVTK::Representation::Surface; - - myIsResolveCoincidentTopology = true; - vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, - myPolygonOffsetUnits); - - myMapper = vtkDataSetMapper::New(); - - myShrinkFilter = vtkShrinkFilter::New(); - - myGeomFilter = VTKViewer_GeometryFilter::New(); - - myTransformFilter = VTKViewer_TransformFilter::New(); - - for(int i = 0; i < 6; i++) - myPassFilter.push_back(VTKViewer_PassThroughFilter::New()); -} - -/*! - Destructor -*/ -SVTK_DeviceActor -::~SVTK_DeviceActor() -{ - myMapper->Delete(); - - myProperty->Delete(); - - myGeomFilter->Delete(); - - myTransformFilter->Delete(); - - myShrinkFilter->Delete(); - - for(int i = 0, iEnd = myPassFilter.size(); i < iEnd; i++) - myPassFilter[i]->Delete(); -} - -/*! - To insert some additional filters and then sets the given vtkMapper -*/ -void -SVTK_DeviceActor -::SetMapper(vtkMapper* theMapper) -{ - InitPipeLine(theMapper); -} - -/*! - To initialize internal pipeline -*/ -void -SVTK_DeviceActor -::InitPipeLine(vtkMapper* theMapper) -{ - if(theMapper){ - int anId = 0; - myPassFilter[ anId ]->SetInput( theMapper->GetInput() ); - myPassFilter[ anId + 1]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 1 - myGeomFilter->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 2 - myPassFilter[ anId ]->SetInput( myGeomFilter->GetOutput() ); - myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 3 - myTransformFilter->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); - - anId++; // 4 - myPassFilter[ anId ]->SetInput( myTransformFilter->GetOutput() ); - myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 5 - if(vtkDataSetMapper* aMapper = dynamic_cast(theMapper)){ - aMapper->SetInput(myPassFilter[anId]->GetOutput()); - }else if(vtkPolyDataMapper* aMapper = dynamic_cast(theMapper)){ - aMapper->SetInput(myPassFilter[anId]->GetPolyDataOutput()); - } - }else - myPassFilter[ 0 ]->SetInput( NULL ); - Superclass::SetMapper(theMapper); -} - -/*! - Allows to get initial vtkDataSet -*/ -vtkDataSet* -SVTK_DeviceActor -::GetInput() -{ - return myPassFilter.front()->GetOutput(); -} - -/*! - Allows to set initial vtkDataSet -*/ -void -SVTK_DeviceActor -::SetInput(vtkDataSet* theDataSet) -{ - myMapper->SetInput(theDataSet); - InitPipeLine(myMapper); -} - -/*! - To provide VTK to Object and backward mapping -*/ -void -SVTK_DeviceActor:: -SetStoreMapping(bool theStoreMapping) -{ - myGeomFilter->SetStoreMapping(theStoreMapping); -} - - -/*! - \return time of modification -*/ -unsigned long int -SVTK_DeviceActor -::GetMTime() -{ - unsigned long mTime = this->Superclass::GetMTime(); - - mTime = max(mTime,myGeomFilter->GetMTime()); - - mTime = max(mTime,myTransformFilter->GetMTime()); - - if(myIsShrunk) - mTime = max(mTime,myShrinkFilter->GetMTime()); - - for(int i = 0, iEnd = myPassFilter.size(); i < iEnd; i++) - max(mTime,myPassFilter[i]->GetMTime()); - - return mTime; -} - -/*! - Apply a view transformation - \param theTransform - transformation -*/ -void -SVTK_DeviceActor -::SetTransform(VTKViewer_Transform* theTransform) -{ - myTransformFilter->SetTransform(theTransform); -} - -/*! - \return true if actor is shrinkable -*/ -bool -SVTK_DeviceActor -::IsShrunkable() -{ - return myIsShrinkable; -} - -/*! - Changes shrinkable state of actor - theIsShrinkable - new shrinkable state -*/ -void -SVTK_DeviceActor -::SetShrinkable(bool theIsShrinkable) -{ - myIsShrinkable = theIsShrinkable; -} - -/*! - \return true if actor is shrunkable -*/ -bool -SVTK_DeviceActor -::IsShrunk() -{ - return myIsShrunk; -} - -/*! - Insert shrink filter into pipeline -*/ -void -SVTK_DeviceActor -::SetShrink() -{ - 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; - } -} - -/*! - Remove shrink filter from pipeline -*/ -void -SVTK_DeviceActor -::UnShrink() -{ - if ( !myIsShrunk ) return; - if ( vtkDataSet* aDataSet = myPassFilter[ 0 ]->GetOutput() ) - { - myPassFilter[ 1 ]->SetInput( aDataSet ); - myIsShrunk = false; - } -} - -/*! - \return shrink factor -*/ -vtkFloatingPointType -SVTK_DeviceActor -::GetShrinkFactor() -{ - return myShrinkFilter->GetShrinkFactor(); -} - -/*! - Changes shrink factor - \param theValue - new shrink factor -*/ -void -SVTK_DeviceActor -::SetShrinkFactor(vtkFloatingPointType theValue) -{ - myShrinkFilter->SetShrinkFactor(theValue); -} - - -/*! - Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on) - param theMode - new mode -*/ -void -SVTK_DeviceActor -::SetRepresentation(SVTK::Representation::Type theMode) -{ - using namespace SVTK::Representation; - if(IsShaded()){ - switch(myRepresentation){ - case Points : - case Surface : - myProperty->DeepCopy(GetProperty()); - } - - switch(theMode){ - case Points : - case Surface : - GetProperty()->DeepCopy(myProperty); - break; - default: - GetProperty()->SetAmbient(1.0); - GetProperty()->SetDiffuse(0.0); - GetProperty()->SetSpecular(0.0); - } - } - - switch(theMode){ - case Insideframe : - myGeomFilter->SetInside(true); - myGeomFilter->SetWireframeMode(true); - GetProperty()->SetRepresentation(VTK_WIREFRAME); - break; - case Points : - GetProperty()->SetPointSize(GetDefaultPointSize()); - GetProperty()->SetRepresentation(VTK_POINTS); - myGeomFilter->SetWireframeMode(false); - myGeomFilter->SetInside(false); - break; - case Wireframe : - GetProperty()->SetRepresentation(VTK_WIREFRAME); - myGeomFilter->SetWireframeMode(true); - myGeomFilter->SetInside(false); - break; - case Surface : - GetProperty()->SetRepresentation(VTK_SURFACE); - myGeomFilter->SetWireframeMode(false); - myGeomFilter->SetInside(false); - break; - } - - myRepresentation = theMode; -} - -/*! - \return current representation mode -*/ -SVTK::Representation::Type -SVTK_DeviceActor -::GetRepresentation() -{ - return myRepresentation; -} - -/*! - \return default point size -*/ -vtkFloatingPointType -SVTK_DeviceActor -::GetDefaultPointSize() -{ - return 5; -} - -/*! - \return default line width -*/ -vtkFloatingPointType -SVTK_DeviceActor -::GetDefaultLineWidth() -{ - return 3; -} - -/*! - \return true if actor is shaded -*/ -bool -SVTK_DeviceActor -::IsShaded() -{ - return myIsShaded; -} - -/*! - Sets shaded state of actor - \param theShaded - new shaded state -*/ -void -SVTK_DeviceActor -::SetShaded(bool theShaded) -{ - myIsShaded = theShaded; -} - -/*! - Maps VTK index of a node to corresponding object index -*/ -int -SVTK_DeviceActor -::GetNodeObjId(int theVtkID) -{ - return theVtkID; -} - -/*! - Get coordinates of a node for given object index -*/ -vtkFloatingPointType* -SVTK_DeviceActor -::GetNodeCoord(int theObjID) -{ - return GetInput()->GetPoint(theObjID); -} - - -/*! - Get corresponding #vtkCell for given object index -*/ -vtkCell* -SVTK_DeviceActor -::GetElemCell(int theObjID) -{ - return GetInput()->GetCell(theObjID); -} - -/*! - Maps VTK index of a cell to corresponding object index -*/ -int -SVTK_DeviceActor -::GetElemObjId(int theVtkID) -{ - return theVtkID; -} - -/*! - Renders actor -*/ -void -SVTK_DeviceActor -::Render(vtkRenderer *ren, vtkMapper* m) -{ - if(myIsResolveCoincidentTopology){ - int aResolveCoincidentTopology = vtkMapper::GetResolveCoincidentTopology(); - vtkFloatingPointType aFactor, aUnit; - vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(aFactor,aUnit); - - vtkMapper::SetResolveCoincidentTopologyToPolygonOffset(); - vtkMapper::SetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, - myPolygonOffsetUnits); - Superclass::Render(ren,m); - - vtkMapper::SetResolveCoincidentTopologyPolygonOffsetParameters(aFactor,aUnit); - vtkMapper::SetResolveCoincidentTopology(aResolveCoincidentTopology); - }else{ - Superclass::Render(ren,m); - } -} - -/*! - Set polygon offset parameters - \param factor, units - Opengl polygon offset parameters -*/ -void -SVTK_DeviceActor -::SetPolygonOffsetParameters(vtkFloatingPointType factor, - vtkFloatingPointType units) -{ - myPolygonOffsetFactor = factor; - myPolygonOffsetUnits = units; -} - -/*! - Get polygon offset parameters - \param factor, units - Opengl polygon offset parameters -*/ -void -SVTK_DeviceActor -::GetPolygonOffsetParameters(vtkFloatingPointType& factor, - vtkFloatingPointType& units) -{ - factor = myPolygonOffsetFactor; - units = myPolygonOffsetUnits; -} diff --git a/src/SVTK/SVTK_DeviceActor.h b/src/SVTK/SVTK_DeviceActor.h deleted file mode 100644 index e537a46e1..000000000 --- a/src/SVTK/SVTK_DeviceActor.h +++ /dev/null @@ -1,218 +0,0 @@ -// SVTK OBJECT : interactive object for SVTK visualization -// -// 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 : SVTK_DeviceActor.h -// Author : -// Module : -// $Header$ - -#ifndef SVTK_DEVICE_ACTOR_H -#define SVTK_DEVICE_ACTOR_H - -#include "SVTK.h" -#include "VTKViewer.h" - -#include - -#include -#include - -class VTKViewer_Transform; -class VTKViewer_TransformFilter; -class VTKViewer_PassThroughFilter; -class VTKViewer_GeometryFilter; - -class vtkCell; -class vtkDataSet; -class vtkShrinkFilter; -class vtkDataSetMapper; - -namespace SVTK -{ - namespace Representation - { - typedef int Type; - const Type Points = VTK_POINTS; - const Type Wireframe = VTK_WIREFRAME; - const Type Surface = VTK_SURFACE; - const Type Insideframe = Surface + 1; - } -} - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor -{ - public: - vtkTypeMacro(SVTK_DeviceActor,vtkLODActor); - - static - SVTK_DeviceActor* - New(); - - //! Apply a view transformation - virtual - void - SetTransform(VTKViewer_Transform* theTransform); - - //! To insert some additional filters and then sets the given #vtkMapper - virtual - void - SetMapper(vtkMapper* theMapper); - - //! Allows to get initial #vtkDataSet - virtual - vtkDataSet* - GetInput(); - - //! Allows to set initial #vtkDataSet - virtual - void - SetInput(vtkDataSet* theDataSet); - - /** @name For selection mapping purpose */ - //@{ - virtual - int - GetNodeObjId(int theVtkID); - - virtual - vtkFloatingPointType* - GetNodeCoord(int theObjID); - - virtual - int - GetElemObjId(int theVtkID); - - virtual - vtkCell* - GetElemCell(int theObjID); - - //! To provide VTK to Object and backward mapping - virtual - void - SetStoreMapping(bool theStoreMapping); - //@} - - virtual - unsigned long int - GetMTime(); - - /** @name For shrink mamnagement purpose */ - //@{ - vtkFloatingPointType - GetShrinkFactor(); - - virtual - void - SetShrinkFactor(vtkFloatingPointType value); - - virtual - void - SetShrinkable(bool theIsShrinkable); - - bool - IsShrunkable(); - - bool - IsShrunk(); - - virtual - void - SetShrink(); - - virtual - void - UnShrink(); - //@} - - /** @name For representation mamnagement purpose */ - virtual - void - SetRepresentation(SVTK::Representation::Type theMode); - - SVTK::Representation::Type - GetRepresentation(); - - virtual - vtkFloatingPointType - GetDefaultPointSize(); - - virtual - vtkFloatingPointType - GetDefaultLineWidth(); - - bool - IsShaded(); - - void - SetShaded(bool theShaded); - //@} - - virtual - void - Render(vtkRenderer *, vtkMapper *); - - protected: - SVTK::Representation::Type myRepresentation; - vtkProperty *myProperty; - bool myIsShaded; - - //! To initialize internal pipeline - void - InitPipeLine(vtkMapper* theMapper); - - VTKViewer_GeometryFilter *myGeomFilter; - VTKViewer_TransformFilter *myTransformFilter; - std::vector myPassFilter; - vtkShrinkFilter* myShrinkFilter; - vtkDataSetMapper* myMapper; - - bool myIsShrinkable; - bool myIsShrunk; - - bool myIsResolveCoincidentTopology; - vtkFloatingPointType myPolygonOffsetFactor; - vtkFloatingPointType myPolygonOffsetUnits; - - void SetPolygonOffsetParameters(vtkFloatingPointType factor, - vtkFloatingPointType units); - void GetPolygonOffsetParameters(vtkFloatingPointType& factor, - vtkFloatingPointType& units); - - SVTK_DeviceActor(); - ~SVTK_DeviceActor(); - - private: - SVTK_DeviceActor(const SVTK_DeviceActor&); // Not implemented - void operator=(const SVTK_DeviceActor&); // Not implemented - -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif //SVTK_DEVICE_ACTOR_H diff --git a/src/SVTK/SVTK_DialogBase.cxx b/src/SVTK/SVTK_DialogBase.cxx deleted file mode 100644 index 9cf3432bf..000000000 --- a/src/SVTK/SVTK_DialogBase.cxx +++ /dev/null @@ -1,84 +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 : -// Author : -// Module : SALOME -// $Header$ - -#include "SVTK_DialogBase.h" - -#include "QtxAction.h" - -/*! - Constructor -*/ -SVTK_DialogBase -::SVTK_DialogBase(QtxAction* theAction, - QWidget* theParent, - const char* theName, - bool theModal, - WFlags theWFalgs): - QDialog(theParent, - theName, - theModal, - theWFalgs | WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), - myAction(theAction) -{ - connect(theParent, SIGNAL(Show( QShowEvent * )), this, SLOT(onParentShow())); - connect(theParent, SIGNAL(Hide( QHideEvent * )), this, SLOT(onParentHide())); -} - -/* - * Destroys the object and frees any allocated resources - */ -SVTK_DialogBase -::~SVTK_DialogBase() -{ - // no need to delete child widgets, Qt does it all for us -} - -void -SVTK_DialogBase -::onParentShow() -{ - if(myAction->isOn()) - show(); - else - hide(); -} - -void -SVTK_DialogBase -::onParentHide() -{ - hide(); -} - -void -SVTK_DialogBase -::done( int r ) -{ - myAction->setOn( false ); - QDialog::done( r ); -} diff --git a/src/SVTK/SVTK_DialogBase.h b/src/SVTK/SVTK_DialogBase.h deleted file mode 100644 index 5c0b87eb5..000000000 --- a/src/SVTK/SVTK_DialogBase.h +++ /dev/null @@ -1,60 +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 : -// Author : -// Module : SALOME -// $Header$ - -#ifndef SVTK_DIALOGBASE_H -#define SVTK_DIALOGBASE_H - -#include "SVTK.h" - -#include - -class QtxAction; - -class SVTK_EXPORT SVTK_DialogBase : public QDialog -{ - Q_OBJECT; - -public: - SVTK_DialogBase(QtxAction* theAction, - QWidget* theParent, - const char* theName = "", - bool theModal = FALSE, - WFlags theWFalgs = 0); - - ~SVTK_DialogBase(); - -protected slots: - void onParentShow(); - void onParentHide(); - virtual void done( int ); - -protected: - QtxAction* myAction; -}; - -#endif // SVTK_DIALOGBASE_H diff --git a/src/SVTK/SVTK_Event.h b/src/SVTK/SVTK_Event.h deleted file mode 100644 index fa415ab83..000000000 --- a/src/SVTK/SVTK_Event.h +++ /dev/null @@ -1,68 +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 : -// Author : Alexander SLADKOV -// Module : SALOME -// $Header$ - -#ifndef SVTK_Event_h -#define SVTK_Event_h - -#include - -namespace SVTK -{ - enum Event - { - SpaceMouseMoveEvent = vtkCommand::UserEvent + 1000, - SpaceMouseButtonEvent, - PanLeftEvent, - PanRightEvent, - PanUpEvent, - PanDownEvent, - ZoomInEvent, - ZoomOutEvent, - RotateLeftEvent, - RotateRightEvent, - RotateUpEvent, - RotateDownEvent, - PlusSpeedIncrementEvent, - MinusSpeedIncrementEvent, - SetSpeedIncrementEvent, - - SetSMDecreaseSpeedEvent, - SetSMIncreaseSpeedEvent, - SetSMDominantCombinedSwitchEvent, - - StartZoom, - StartPan, - StartRotate, - StartGlobalPan, - StartFitArea, - - LastEvent - }; -} - -#endif diff --git a/src/SVTK/SVTK_Extension.cxx b/src/SVTK/SVTK_Extension.cxx deleted file mode 100755 index a26dac111..000000000 --- a/src/SVTK/SVTK_Extension.cxx +++ /dev/null @@ -1,44 +0,0 @@ -// 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 deleted file mode 100755 index 0b39e59f2..000000000 --- a/src/SVTK/SVTK_Extension.h +++ /dev/null @@ -1,35 +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/ -// -#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.cxx b/src/SVTK/SVTK_FontWidget.cxx deleted file mode 100644 index 4269b5b6b..000000000 --- a/src/SVTK/SVTK_FontWidget.cxx +++ /dev/null @@ -1,127 +0,0 @@ -// VISU VISUGUI : GUI for SMESH component -// -// 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 : Sergey LITONIN -// Module : - -#include "SVTK_FontWidget.h" - -#include -#include -#include -#include - -#include - -/*! - * Class : SVTK_FontWidget - * Description : Dialog for specifynig font - */ - -/*! - Constructor -*/ -SVTK_FontWidget::SVTK_FontWidget( QWidget* theParent ) -: QHBox( theParent ) -{ - setSpacing( 5 ); - myColorBtn = new QToolButton( this ); - myColorBtn->setMinimumWidth( 20 ); - - myFamily = new QComboBox( this ); - myFamily->insertItem( tr( "ARIAL" ) ); - myFamily->insertItem( tr( "COURIER" ) ); - myFamily->insertItem( tr( "TIMES" ) ); - - myBold = new QCheckBox( tr( "BOLD" ), this ); - myItalic = new QCheckBox( tr( "ITALIC" ), this ); - myShadow = new QCheckBox( tr( "SHADOW" ), this ); - - connect( myColorBtn, SIGNAL( clicked() ), SLOT( onColor() ) ); -} - -/*! - Destructor -*/ -SVTK_FontWidget::~SVTK_FontWidget() -{ -} - -void SVTK_FontWidget::SetColor( const QColor& theColor ) -{ - myColorBtn->setPaletteBackgroundColor( theColor ); -} - -QColor SVTK_FontWidget::GetColor() const -{ - return myColorBtn->paletteBackgroundColor(); -} - -void SVTK_FontWidget::onColor() -{ - QColor aColor = QColorDialog::getColor( GetColor(), this ); - if ( aColor.isValid() ) - SetColor( aColor ); -} - -void SVTK_FontWidget::SetData( const QColor& theColor, - const int theFamily, - const bool theBold, - const bool theItalic, - const bool theShadow ) -{ - SetColor( theColor ); - - if ( theFamily == VTK_ARIAL ) - myFamily->setCurrentItem( 0 ); - else if ( theFamily == VTK_COURIER ) - myFamily->setCurrentItem( 1 ); - else - myFamily->setCurrentItem( 2 ); - - myBold->setChecked( theBold ); - myItalic->setChecked( theItalic ); - myShadow->setChecked( theShadow ); -} - -void SVTK_FontWidget::GetData( QColor& theColor, - int& theFamily, - bool& theBold, - bool& theItalic, - bool& theShadow ) const -{ - theColor = GetColor(); - - int anItem =myFamily->currentItem(); - if ( anItem == 0 ) - theFamily = VTK_ARIAL; - else if ( anItem == 1 ) - theFamily = VTK_COURIER; - else - theFamily = VTK_TIMES; - - theBold = myBold->isChecked(); - theItalic = myItalic->isChecked(); - theShadow = myShadow->isChecked(); -} diff --git a/src/SVTK/SVTK_FontWidget.h b/src/SVTK/SVTK_FontWidget.h deleted file mode 100644 index 953072a94..000000000 --- a/src/SVTK/SVTK_FontWidget.h +++ /dev/null @@ -1,70 +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 : -// Author : Sergey LITONIN -// Module : - - -#ifndef SVTK_FontWidget_H -#define SVTK_FontWidget_H - -#include "SVTK.h" - -#include - -class QToolButton; -class QComboBox; -class QCheckBox; -class QColor; - - -/*! - * Class : SVTK_FontWidget - * Description : Dialog for specifynig font - */ -class SVTK_EXPORT SVTK_FontWidget : public QHBox -{ - Q_OBJECT - -public: - SVTK_FontWidget( QWidget* ); - virtual ~SVTK_FontWidget(); - - void SetColor( const QColor& ); - QColor GetColor() const; - - void SetData( const QColor&, const int, const bool, const bool, const bool ); - - void GetData( QColor&, int&, bool&, bool&, bool& ) const; - -private slots: - void onColor(); - -private: - QToolButton* myColorBtn; - QComboBox* myFamily; - QCheckBox* myBold; - QCheckBox* myItalic; - QCheckBox* myShadow; -}; - -#endif diff --git a/src/SVTK/SVTK_Functor.h b/src/SVTK/SVTK_Functor.h deleted file mode 100644 index d76a93548..000000000 --- a/src/SVTK/SVTK_Functor.h +++ /dev/null @@ -1,109 +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 -// -#ifndef SVTK_Functor_H -#define SVTK_Functor_H - -#include - -#include - -#include - -#include "SALOME_InteractiveObject.hxx" - -/*! - \file SVTK_Functor.h - This file contains numbers of functors that allows user to perform corresponding operations with existing presentations. - Combination with algorithms it gives powerful, flexible and simple to extend way to introduce new type of operation. -*/ - -namespace SVTK -{ - using namespace VTK; - - //! This functor check, if the actor have pointed entry - template - struct TIsSameEntry - { - std::string myEntry; - //! To construct the functor - TIsSameEntry(const char* theEntry): - myEntry(theEntry) - {} - //! To calculate the functor - bool operator()(TActor* theActor) - { - if ( theActor->hasIO() ) - { - Handle(SALOME_InteractiveObject) anIO = theActor->getIO(); - if ( anIO->hasEntry() ) - return myEntry == anIO->getEntry(); - } - return false; - } - }; - - - //---------------------------------------------------------------- - //! This functor check, if the actor point to the same #SALOME_InteractiveObject - template - struct TIsSameIObject - { - Handle(SALOME_InteractiveObject) myIObject; - //! To construct the functor - TIsSameIObject(const Handle(SALOME_InteractiveObject)& theIObject): - myIObject(theIObject) - {} - //! To calculate the functor - bool operator()(TActor* theActor) - { - if(theActor->hasIO()) - { - Handle(SALOME_InteractiveObject) anIO = theActor->getIO(); - return myIObject->isSame(anIO); - } - return false; - } - }; - - - //---------------------------------------------------------------- - /*! - This highlight every input actor - */ - template - struct THighlight - { - bool myIsHighlight; - //! To construct the functor - THighlight(bool theIsHighlight): - myIsHighlight( theIsHighlight ) - {} - //! To calculate the functor - void operator()(TActor* theActor) - { - if(theActor->GetVisibility() && theActor->GetMapper()) - theActor->highlight( myIsHighlight ); - } - }; - -} - - -#endif diff --git a/src/SVTK/SVTK_GenericRenderWindowInteractor.cxx b/src/SVTK/SVTK_GenericRenderWindowInteractor.cxx deleted file mode 100644 index ecb406b1b..000000000 --- a/src/SVTK/SVTK_GenericRenderWindowInteractor.cxx +++ /dev/null @@ -1,168 +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 : -// Author : -// Module : SALOME -// $Header$ - -#include "SVTK_GenericRenderWindowInteractor.h" -#include "SVTK_Selector.h" - -#include -#include - -#include - -using namespace std; - -vtkStandardNewMacro(QVTK_GenericRenderWindowInteractor); - -/*! - Constructor -*/ -QVTK_GenericRenderWindowInteractor -::QVTK_GenericRenderWindowInteractor() -{ - myTimer = new QTimer( ) ; - connect(myTimer, SIGNAL(timeout()), this, SLOT(OnTimeOut())) ; -} - -/*! - Destructor -*/ -QVTK_GenericRenderWindowInteractor -::~QVTK_GenericRenderWindowInteractor() -{ - delete myTimer; -} - -/*! - The slot connects to QTimer::timeout signal to invoke vtkCommand::TimerEvent -*/ -void -QVTK_GenericRenderWindowInteractor -::OnTimeOut() -{ - if( GetEnabled() ) { - this->InvokeEvent(vtkCommand::TimerEvent,NULL); - } -} - -/*! - Starts the QTimer instance on defined microseconds -*/ -int -QVTK_GenericRenderWindowInteractor -::CreateTimer(int vtkNotUsed(timertype)) -{ - // - // Start a one-shot timer for ms. - // - static int DELAY = 1; - myTimer->start(DELAY,TRUE); - return 1; -} - -/*! - Stops the QTimer instance -*/ -int -QVTK_GenericRenderWindowInteractor -::DestroyTimer(void) -{ - // - // :TRICKY: Tue May 2 00:17:32 2000 Pagey - // - // QTimer will automatically expire after 10ms. So - // we do not need to do anything here. In fact, we - // should not even Stop() the QTimer here because doing - // this will skip some of the processing that the TimerFunc() - // does and will result in undesirable effects. For - // example, this will result in vtkLODActor to leave - // the models in low-res mode after the mouse stops - // moving. - // - return 1; -} - - -vtkStandardNewMacro(SVTK_GenericRenderWindowInteractor); - -/*! - Constructor -*/ -SVTK_GenericRenderWindowInteractor -::SVTK_GenericRenderWindowInteractor(): - myRenderWidget(NULL) -{ -} - -/*! - Destructor -*/ -SVTK_GenericRenderWindowInteractor -::~SVTK_GenericRenderWindowInteractor() -{ -} - -/*! - To get access to SVTK_Selector -*/ -SVTK_Selector* -SVTK_GenericRenderWindowInteractor -::GetSelector() -{ - return mySelector.GetPointer(); -} - -/*! - To initialize mySelector field - \param theSelector - new selector -*/ -void -SVTK_GenericRenderWindowInteractor -::SetSelector(SVTK_Selector* theSelector) -{ - mySelector = theSelector; -} - -/*! - To get access to QWidget, where vtkRenderWindow maps to. -*/ -QWidget* -SVTK_GenericRenderWindowInteractor -::GetRenderWidget() -{ - return myRenderWidget; -} - -/*! - To initialize myRenderWidget field. -*/ -void -SVTK_GenericRenderWindowInteractor -::SetRenderWidget(QWidget* theRenderWidget) -{ - myRenderWidget = theRenderWidget; -} diff --git a/src/SVTK/SVTK_GenericRenderWindowInteractor.h b/src/SVTK/SVTK_GenericRenderWindowInteractor.h deleted file mode 100644 index ff5b6cb71..000000000 --- a/src/SVTK/SVTK_GenericRenderWindowInteractor.h +++ /dev/null @@ -1,133 +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 : -// Author : -// Module : SALOME -// $Header$ - -#ifndef SVTK_GenericRenderWindowInteractor_h -#define SVTK_GenericRenderWindowInteractor_h - -#include "SVTK.h" - -#include -#include -#include - -class QTimer; -class QWidget; - -class SVTK_Selector; -class SVTK_Renderer; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*! - \class QVTK_GenericRenderWindowInteractor - Introduction of the class is intended to implement Qt based #CreateTimer and #DestroyTimer functionality. - The class intendes to implement platform indepenedant subclass of vtkRenderWindowInteractor. - This is done by usage of Qt library. - \note - The Signal/Slot mechanism used by Qt requires that QObject - appear as the first class when using multiple inheritance. - Hence the order of the two classes QObject and vtkRenderWindowInteractor - matters here. So, be careful, not to change the sequence of the inheritance by accident. -*/ -class SVTK_EXPORT QVTK_GenericRenderWindowInteractor: - public QObject, - public vtkGenericRenderWindowInteractor -{ - Q_OBJECT; - - public: - static QVTK_GenericRenderWindowInteractor* New(); - vtkTypeMacro(QVTK_GenericRenderWindowInteractor,vtkGenericRenderWindowInteractor); - - //! Starts the QTimer instance on defined microseconds - virtual - int - CreateTimer( int ) ; - - //! Stops the QTimer instance - virtual - int - DestroyTimer() ; - - protected slots: - //! The slot connects to QTimer::timeout signal to invoke vtkCommand::TimerEvent - void - OnTimeOut(); - - protected: - QVTK_GenericRenderWindowInteractor(); //!< Instatiate QTimer - ~QVTK_GenericRenderWindowInteractor(); //!< Destroy the instance of QTimer - - QTimer* myTimer; //!< Qt timer device -}; - - -/*! - \class SVTK_GenericRenderWindowInteractor - This class introduce SALOME specific to the base one - In this class new members is added (#mySelector and #myRenderWidget). - They are used for initialization of #SVTK_InteractorStyle by redefinition of - #SVTK_InteractorStyle::SetInteractor method -*/ -class SVTK_EXPORT SVTK_GenericRenderWindowInteractor: public QVTK_GenericRenderWindowInteractor -{ - public: - static SVTK_GenericRenderWindowInteractor* New(); - vtkTypeMacro(SVTK_GenericRenderWindowInteractor,QVTK_GenericRenderWindowInteractor); - - //! To get access to SVTK_Selector - SVTK_Selector* - GetSelector(); - - //! To initialize mySelector field - void - SetSelector(SVTK_Selector* theSelector); - - //! To get access to QWidget, where vtkRenderWindow maps to. - QWidget* - GetRenderWidget(); - - //! To initialize myRenderWidget field. - void - SetRenderWidget(QWidget* theRenderWidget); - - protected: - SVTK_GenericRenderWindowInteractor(); - ~SVTK_GenericRenderWindowInteractor(); - - vtkSmartPointer mySelector; //!< Keeps a pointer to SVTK_Selector - 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 deleted file mode 100644 index 4f8dfaa60..000000000 --- a/src/SVTK/SVTK_InteractorStyle.cxx +++ /dev/null @@ -1,1496 +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 : -// Author : -// Module : SALOME -// $Header$ - - -#include "SVTK_InteractorStyle.h" - -#include "VTKViewer_Utilities.h" -#include "SVTK_GenericRenderWindowInteractor.h" - -#include "SVTK_Selection.h" -#include "SVTK_Event.h" -#include "SVTK_Selector.h" -#include "SVTK_Functor.h" - -#include "VTKViewer_Algorithm.h" -#include "SVTK_Functor.h" - -#include "SALOME_Actor.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -//VRV: porting on Qt 3.0.5 -#if QT_VERSION >= 0x030005 -#include -#endif -//VRV: porting on Qt 3.0.5 -#include - -using namespace std; - -namespace -{ - inline - void - GetEventPosition(vtkRenderWindowInteractor* theInteractor, - int& theX, - int& theY) - { - 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()), - myLastHighlitedActor(NULL), - myLastPreHighlitedActor(NULL), - myControllerIncrement(SVTK_ControllerIncrement::New()), - myControllerOnKeyDown(SVTK_ControllerOnKeyDown::New()) -{ - myPicker->Delete(); - - this->MotionFactor = 10.0; - this->State = VTK_INTERACTOR_STYLE_CAMERA_NONE; - this->RadianToDegree = 180.0 / vtkMath::Pi(); - this->ForcedState = VTK_INTERACTOR_STYLE_CAMERA_NONE; - - loadCursors(); - - // set custom event handling function (to handle 3d space mouse events) - EventCallbackCommand->SetCallback( SVTK_InteractorStyle::ProcessEvents ); - - // set default values of properties. user may edit them in preferences. - mySMDecreaseSpeedBtn = 1; - mySMIncreaseSpeedBtn = 2; - mySMDominantCombinedSwitchBtn = 9; - // - myControllerIncrement->Delete(); - myControllerOnKeyDown->Delete(); -} - -/*! - Destructor -*/ -SVTK_InteractorStyle -::~SVTK_InteractorStyle() -{ -} - -/*! - \return widget for rendering -*/ -QWidget* -SVTK_InteractorStyle -::GetRenderWidget() -{ - return myInteractor->GetRenderWidget(); -} - -/*! - \return selector -*/ -SVTK_Selector* -SVTK_InteractorStyle -::GetSelector() -{ - return myInteractor->GetSelector(); -} - -/*! - Generate special SVTK_SelectionEvent -*/ -SVTK_SelectionEvent* -SVTK_InteractorStyle -::GetSelectionEvent() -{ - mySelectionEvent->mySelectionMode = GetSelector()->SelectionMode(); - - mySelectionEvent->myIsCtrl = Interactor->GetControlKey(); - mySelectionEvent->myIsShift = Interactor->GetShiftKey(); - - mySelectionEvent->myLastX = mySelectionEvent->myX; - mySelectionEvent->myLastY = mySelectionEvent->myY; - - GetEventPosition( this->Interactor, mySelectionEvent->myX, mySelectionEvent->myY ); - - return mySelectionEvent.get(); -} - -/*! - Generate special SVTK_SelectionEvent with flipped Y coordinate -*/ -SVTK_SelectionEvent* -SVTK_InteractorStyle -::GetSelectionEventFlipY() -{ - mySelectionEvent->mySelectionMode = GetSelector()->SelectionMode(); - - mySelectionEvent->myIsCtrl = Interactor->GetControlKey(); - mySelectionEvent->myIsShift = Interactor->GetShiftKey(); - - mySelectionEvent->myLastX = mySelectionEvent->myX; - mySelectionEvent->myLastY = mySelectionEvent->myY; - - this->Interactor->GetEventPosition(mySelectionEvent->myX, mySelectionEvent->myY); - - return mySelectionEvent.get(); -} - -void -SVTK_InteractorStyle -::RotateXY(int dx, int dy) -{ - if(GetCurrentRenderer() == NULL) - return; - - int *size = GetCurrentRenderer()->GetRenderWindow()->GetSize(); - double aDeltaElevation = -20.0 / size[1]; - double aDeltaAzimuth = -20.0 / size[0]; - - double rxf = double(dx) * aDeltaAzimuth * this->MotionFactor; - double ryf = double(dy) * aDeltaElevation * this->MotionFactor; - - vtkCamera *cam = GetCurrentRenderer()->GetActiveCamera(); - cam->Azimuth(rxf); - cam->Elevation(ryf); - cam->OrthogonalizeViewUp(); - - GetCurrentRenderer()->ResetCameraClippingRange(); - - this->Render(); -} - -void -SVTK_InteractorStyle -::PanXY(int x, int y, int oldX, int oldY) -{ - TranslateView(x, y, oldX, oldY); - this->Render(); -} - - -void -SVTK_InteractorStyle -::DollyXY(int dx, int dy) -{ - if (GetCurrentRenderer() == NULL) - return; - - double dxf = this->MotionFactor * (double)(dx) / (double)(GetCurrentRenderer()->GetCenter()[1]); - double dyf = this->MotionFactor * (double)(dy) / (double)(GetCurrentRenderer()->GetCenter()[1]); - - double zoomFactor = pow((double)1.1, dxf + dyf); - - vtkCamera *aCam = GetCurrentRenderer()->GetActiveCamera(); - if (aCam->GetParallelProjection()) - aCam->SetParallelScale(aCam->GetParallelScale()/zoomFactor); - else{ - aCam->Dolly(zoomFactor); - GetCurrentRenderer()->ResetCameraClippingRange(); - } - - this->Render(); -} - -void -SVTK_InteractorStyle -::SpinXY(int x, int y, int oldX, int oldY) -{ - vtkCamera *cam; - - if (GetCurrentRenderer() == NULL) - return; - - double newAngle = atan2((double)(y - GetCurrentRenderer()->GetCenter()[1]), - (double)(x - GetCurrentRenderer()->GetCenter()[0])); - double oldAngle = atan2((double)(oldY -GetCurrentRenderer()->GetCenter()[1]), - (double)(oldX - GetCurrentRenderer()->GetCenter()[0])); - - newAngle *= this->RadianToDegree; - oldAngle *= this->RadianToDegree; - - cam = GetCurrentRenderer()->GetActiveCamera(); - cam->Roll(newAngle - oldAngle); - cam->OrthogonalizeViewUp(); - - this->Render(); -} - - -/*! - To reset reset view -*/ -void -SVTK_InteractorStyle -::OnConfigure() -{ - this->FindPokedRenderer(0,0); - this->GetCurrentRenderer()->InvokeEvent(vtkCommand::ConfigureEvent,NULL); -} - -/*! - To handle mouse move event -*/ -void -SVTK_InteractorStyle -::OnMouseMove() -{ - int x, y; - GetEventPosition( this->Interactor, x, y ); - this->OnMouseMove( this->Interactor->GetControlKey(), - this->Interactor->GetShiftKey(), - x, y ); -} - -/*! - To handle left mouse button down event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnLeftButtonDown() -{ - int x, y; - GetEventPosition( this->Interactor, x, y ); - this->OnLeftButtonDown( this->Interactor->GetControlKey(), - this->Interactor->GetShiftKey(), - x, y ); -} - -/*! - To handle left mouse button up event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnLeftButtonUp() -{ - int x, y; - GetEventPosition( this->Interactor, x, y ); - this->OnLeftButtonUp( this->Interactor->GetControlKey(), - this->Interactor->GetShiftKey(), - x, y ); -} - -/*! - To handle middle mouse button down event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnMiddleButtonDown() -{ - int x, y; - GetEventPosition( this->Interactor, x, y ); - this->OnMiddleButtonDown( this->Interactor->GetControlKey(), - this->Interactor->GetShiftKey(), - x, y ); -} - -/*! - To handle middle mouse button up event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnMiddleButtonUp() -{ - int x, y; - GetEventPosition( this->Interactor, x, y ); - this->OnMiddleButtonUp( this->Interactor->GetControlKey(), - this->Interactor->GetShiftKey(), - x, y ); -} - -/*! - To handle right mouse button down event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnRightButtonDown() -{ - int x, y; - GetEventPosition( this->Interactor, x, y ); - this->OnRightButtonDown( this->Interactor->GetControlKey(), - this->Interactor->GetShiftKey(), - x, y ); -} - -/*! - To handle right mouse button up event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnRightButtonUp() -{ - int x, y; - GetEventPosition( this->Interactor, x, y ); - this->OnRightButtonUp( this->Interactor->GetControlKey(), - this->Interactor->GetShiftKey(), - x, y ); -} - -/*! - To handle mouse move event -*/ -void -SVTK_InteractorStyle -::OnMouseMove(int vtkNotUsed(ctrl), - int shift, - int x, int y) -{ - myShiftState = shift; - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - onOperation(QPoint(x, y)); - else if (ForcedState == VTK_INTERACTOR_STYLE_CAMERA_NONE) - onCursorMove(QPoint(x, y)); -} - -/*! - To handle left mouse button down event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnLeftButtonDown(int ctrl, int shift, - int x, int y) -{ - this->FindPokedRenderer(x, y); - if(GetCurrentRenderer() == NULL) - return; - - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - myOtherPoint = myPoint = QPoint(x, y); - if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - startOperation(ForcedState); - } else { - if (ctrl) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_ZOOM); - else - startOperation(VTK_INTERACTOR_STYLE_CAMERA_SELECT); - } - return; -} - -/*! - To handle left mouse button up event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnLeftButtonUp(int vtkNotUsed(ctrl), - int shift, - int vtkNotUsed(x), - int vtkNotUsed(y)) -{ - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } -} - -/*! - To handle middle mouse button down event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnMiddleButtonDown(int ctrl, - int shift, - int x, int y) -{ - this->FindPokedRenderer(x, y); - if(GetCurrentRenderer() == NULL) - return; - - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - myOtherPoint = myPoint = QPoint(x, y); - if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - startOperation(ForcedState); - } - else { - if (ctrl) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_PAN); - } -} - - -/*! - To handle middle mouse button up event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnMiddleButtonUp(int vtkNotUsed(ctrl), - int shift, - int vtkNotUsed(x), - int vtkNotUsed(y)) -{ - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } -} - - -/*! - To handle right mouse button down event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnRightButtonDown(int ctrl, - int shift, - int x, int y) -{ - this->FindPokedRenderer(x, y); - if(GetCurrentRenderer() == NULL) - return; - - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - myOtherPoint = myPoint = QPoint(x, y); - if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - startOperation(ForcedState); - } - else { - if (ctrl) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_ROTATE); - } -} - -/*! - To handle right mouse button up event (reimplemented from vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::OnRightButtonUp(int vtkNotUsed(ctrl), - int shift, - int vtkNotUsed(x), - int vtkNotUsed(y)) -{ - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } -} - -/* XPM */ -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* imageRotateCursor[] = { -"32 32 3 1", -". c None", -"a c #000000", -"# c #ffffff", -"................................", -"................................", -"................................", -"................................", -"........#.......................", -".......#.a......................", -"......#######...................", -".......#aaaaa#####..............", -"........#..##.a#aa##........##..", -".........a#.aa..#..a#.....##.aa.", -".........#.a.....#...#..##.aa...", -".........#a.......#..###.aa.....", -"........#.a.......#a..#aa.......", -"........#a.........#..#a........", -"........#a.........#a.#a........", -"........#a.........#a.#a........", -"........#a.........#a.#a........", -".........#.........#a#.a........", -"........##a........#a#a.........", -"......##.a#.......#.#.a.........", -"....##.aa..##.....##.a..........", -"..##.aa.....a#####.aa...........", -"...aa.........aaa#a.............", -"................#.a.............", -"...............#.a..............", -"..............#.a...............", -"...............a................", -"................................", -"................................", -"................................", -"................................", -"................................"}; - - -/*! - loads cursors for viewer operations - zoom, pan, etc... -*/ -void -SVTK_InteractorStyle -::loadCursors() -{ - myDefCursor = QCursor(Qt::ArrowCursor); - myHandCursor = QCursor(Qt::PointingHandCursor); - myPanCursor = QCursor(Qt::SizeAllCursor); - myZoomCursor = QCursor(QPixmap(imageZoomCursor)); - myRotateCursor = QCursor(QPixmap(imageRotateCursor)); - mySpinCursor = QCursor(QPixmap(imageRotateCursor)); // temporarly !!!!!! - myGlobalPanCursor = QCursor(Qt::CrossCursor); - myCursorState = false; -} - - -/*! - Starts Zoom operation (e.g. through menu command) -*/ -void -SVTK_InteractorStyle -::startZoom() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_ZOOM); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_ZOOM; -} - - -/*! - Starts Pan operation (e.g. through menu command) -*/ -void -SVTK_InteractorStyle -::startPan() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_PAN); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_PAN; -} - -/*! - Starts Rotate operation (e.g. through menu command) -*/ -void -SVTK_InteractorStyle -::startRotate() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_ROTATE); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_ROTATE; -} - - -/*! - Starts Spin operation (e.g. through menu command) -*/ -void -SVTK_InteractorStyle -::startSpin() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_SPIN); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_SPIN; -} - - - -/*! - Starts Fit Area operation (e.g. through menu command) -*/ -void -SVTK_InteractorStyle -::startFitArea() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_FIT); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_FIT; -} - - -/*! - Starts Global Panning operation (e.g. through menu command) -*/ -void -SVTK_InteractorStyle -::startGlobalPan() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN; - - // store current zoom scale - myScale = GetCurrentRenderer()->GetActiveCamera()->GetParallelScale(); - - GetCurrentRenderer()->ResetCamera(); - - this->Render(); -} - - -/*! - Fits viewer contents to rect -*/ -void -SVTK_InteractorStyle -::fitRect(const int left, - const int top, - const int right, - const int bottom) -{ - if (GetCurrentRenderer() == NULL) - return; - - // move camera - int x = (left + right)/2; - int y = (top + bottom)/2; - int *aSize = GetCurrentRenderer()->GetRenderWindow()->GetSize(); - int oldX = aSize[0]/2; - int oldY = aSize[1]/2; - TranslateView(oldX, oldY, x, y); - - // zoom camera - double dxf = right == left ? 1.0 : (double)(aSize[0]) / (double)(abs(right - left)); - double dyf = bottom == top ? 1.0 : (double)(aSize[1]) / (double)(abs(bottom - top)); - double zoomFactor = (dxf + dyf)/2 ; - - vtkCamera *aCam = GetCurrentRenderer()->GetActiveCamera(); - if(aCam->GetParallelProjection()) - aCam->SetParallelScale(aCam->GetParallelScale()/zoomFactor); - else{ - aCam->Dolly(zoomFactor); - GetCurrentRenderer()->ResetCameraClippingRange(); - } - - this->Render(); -} - - -/*! - Starts viewer operation (!internal usage!) -*/ -void -SVTK_InteractorStyle -::startOperation(int operation) -{ - switch(operation) - { - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - State = operation; - if (State != VTK_INTERACTOR_STYLE_CAMERA_SELECT) - setCursor(operation); - onStartOperation(); - break; - case VTK_INTERACTOR_STYLE_CAMERA_NONE: - default: - setCursor(VTK_INTERACTOR_STYLE_CAMERA_NONE); - State = ForcedState = VTK_INTERACTOR_STYLE_CAMERA_NONE; - break; - } -} - - -/*! - Sets proper cursor for window when viewer operation is activated -*/ -void -SVTK_InteractorStyle -::setCursor(const int operation) -{ - if (!GetRenderWidget()) return; - switch (operation) - { - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - GetRenderWidget()->setCursor(myZoomCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - GetRenderWidget()->setCursor(myPanCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - GetRenderWidget()->setCursor(myRotateCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - GetRenderWidget()->setCursor(mySpinCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - GetRenderWidget()->setCursor(myGlobalPanCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - GetRenderWidget()->setCursor(myHandCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_NONE: - default: - GetRenderWidget()->setCursor(myDefCursor); - myCursorState = false; - break; - } -} - - -/*! - Called when viewer operation started (!put necessary initialization here!) -*/ -void -SVTK_InteractorStyle -::onStartOperation() -{ - if (!GetRenderWidget()) - return; - - vtkRenderWindowInteractor *aRWI = this->Interactor; - vtkRenderWindow *aRenWin = aRWI->GetRenderWindow(); - aRenWin->SetDesiredUpdateRate(aRWI->GetDesiredUpdateRate()); - - switch (State) { - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - { - QPainter p(GetRenderWidget()); - p.setPen(Qt::lightGray); - p.setRasterOp(Qt::XorROP); - p.drawRect(QRect(myPoint, myOtherPoint)); - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - break; - } -} - - -/*! - Called when viewer operation finished (!put necessary post-processing here!) -*/ -void -SVTK_InteractorStyle -::onFinishOperation() -{ - if (!GetRenderWidget()) - return; - - vtkRenderWindowInteractor *aRWI = this->Interactor; - vtkRenderWindow *aRenWin = aRWI->GetRenderWindow(); - aRenWin->SetDesiredUpdateRate(aRWI->GetStillUpdateRate()); - - SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY(); - - switch (State) { - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - { - QPainter aPainter(GetRenderWidget()); - aPainter.setPen(Qt::lightGray); - aPainter.setRasterOp(Qt::XorROP); - QRect aRect(myPoint, myOtherPoint); - aPainter.drawRect(aRect); - aRect = aRect.normalize(); - - if (State == VTK_INTERACTOR_STYLE_CAMERA_FIT) { - // making fit rect opeation - int w, h; - Interactor->GetSize(w, h); - int x1 = aRect.left(); - int y1 = h - aRect.top() - 1; - int x2 = aRect.right(); - int y2 = h - aRect.bottom() - 1; - 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 ); - } - } - } - } - } - Interactor->EndPickCallback(); - GetSelector()->EndPickCallback(); - } - } - break; - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - break; - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - { - int w, h, x, y; - Interactor->GetSize(w, h); - x = myPoint.x(); - y = h - myPoint.y() - 1; - Place(x, y); - } - break; - } - - this->Render(); -} - - -/*! - Called during viewer operation when user moves mouse (!put necessary processing here!) -*/ -void -SVTK_InteractorStyle -::onOperation(QPoint mousePos) -{ - if (!GetRenderWidget()) - return; - - switch (State) { - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - { - this->PanXY(mousePos.x(), myPoint.y(), myPoint.x(), mousePos.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - { - this->DollyXY(mousePos.x() - myPoint.x(), mousePos.y() - myPoint.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - { - this->RotateXY(mousePos.x() - myPoint.x(), myPoint.y() - mousePos.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - { - this->SpinXY(mousePos.x(), mousePos.y(), myPoint.x(), myPoint.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - { - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - { - if (!myCursorState) - setCursor(VTK_INTERACTOR_STYLE_CAMERA_SELECT); - } - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - { - QPainter p(GetRenderWidget()); - p.setPen(Qt::lightGray); - p.setRasterOp(Qt::XorROP); - p.drawRect(QRect(myPoint, myOtherPoint)); - myOtherPoint = mousePos; - p.drawRect(QRect(myPoint, myOtherPoint)); - break; - } - } -} - -/*! - Called when user moves mouse inside viewer window and there is no active viewer operation - (!put necessary processing here!) -*/ -void -SVTK_InteractorStyle -::onCursorMove(QPoint mousePos) -{ - // processing highlighting - 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 = GetFirstSALOMEActor(myPicker.GetPointer()); - if (anActor){ - anIsChanged |= anActor->PreHighlight( this, aSelectionEvent, true ); - } - - if(myLastPreHighlitedActor.GetPointer() && myLastPreHighlitedActor.GetPointer() != anActor) - anIsChanged |= myLastPreHighlitedActor->PreHighlight( this, aSelectionEvent, false ); - - myLastPreHighlitedActor = anActor; - - if(anIsChanged) - this->Render(); -} - -/*! - Called on finsh GlobalPan operation -*/ -void -SVTK_InteractorStyle -::Place(const int theX, const int theY) -{ - if (GetCurrentRenderer() == NULL) - return; - - //translate view - int *aSize = GetCurrentRenderer()->GetRenderWindow()->GetSize(); - int centerX = aSize[0]/2; - int centerY = aSize[1]/2; - - TranslateView(centerX, centerY, theX, theY); - - // restore zoom scale - vtkCamera *cam = GetCurrentRenderer()->GetActiveCamera(); - cam->SetParallelScale(myScale); - GetCurrentRenderer()->ResetCameraClippingRange(); - - this->Render(); -} - - - -/*! - Translates view from Point to Point -*/ -void -SVTK_InteractorStyle -::TranslateView(int toX, int toY, int fromX, int fromY) -{ - vtkCamera *cam = GetCurrentRenderer()->GetActiveCamera(); - double viewFocus[4], focalDepth, viewPoint[3]; - vtkFloatingPointType newPickPoint[4], oldPickPoint[4], motionVector[3]; - cam->GetFocalPoint(viewFocus); - - this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], - viewFocus[2], viewFocus); - focalDepth = viewFocus[2]; - - this->ComputeDisplayToWorld(double(toX), double(toY), - focalDepth, newPickPoint); - this->ComputeDisplayToWorld(double(fromX),double(fromY), - focalDepth, oldPickPoint); - - // camera motion is reversed - motionVector[0] = oldPickPoint[0] - newPickPoint[0]; - motionVector[1] = oldPickPoint[1] - newPickPoint[1]; - motionVector[2] = oldPickPoint[2] - newPickPoint[2]; - - cam->GetFocalPoint(viewFocus); - cam->GetPosition(viewPoint); - cam->SetFocalPoint(motionVector[0] + viewFocus[0], - motionVector[1] + viewFocus[1], - motionVector[2] + viewFocus[2]); - cam->SetPosition(motionVector[0] + viewPoint[0], - motionVector[1] + viewPoint[1], - motionVector[2] + viewPoint[2]); -} - -void -SVTK_InteractorStyle -::IncrementalPan( const int incrX, const int incrY ) -{ - this->PanXY( incrX, incrY, 0, 0 ); -} - -void -SVTK_InteractorStyle -::IncrementalZoom( const int incr ) -{ - this->DollyXY( incr, incr ); -} - -void -SVTK_InteractorStyle -::IncrementalRotate( const int incrX, const int incrY ) -{ - this->RotateXY( incrX, -incrY ); -} - -/*! - Redefined in order to add an observer (callback) for custorm event (space mouse event) -*/ -void -SVTK_InteractorStyle -::SetInteractor( vtkRenderWindowInteractor* theInteractor ) -{ - // register EventCallbackCommand as observer of standard events (keypress, mousemove, etc) - Superclass::SetInteractor( theInteractor ); - - myInteractor = dynamic_cast(theInteractor); - - if(theInteractor) { - // register EventCallbackCommand as observer of custorm event (3d space mouse event) - theInteractor->AddObserver( SVTK::SpaceMouseMoveEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::SpaceMouseButtonEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::PanLeftEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::PanRightEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::PanUpEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::PanDownEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::ZoomInEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::ZoomOutEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::RotateLeftEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::RotateRightEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::RotateUpEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::RotateDownEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::PlusSpeedIncrementEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::MinusSpeedIncrementEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::SetSpeedIncrementEvent, EventCallbackCommand, Priority ); - - theInteractor->AddObserver( SVTK::SetSMDecreaseSpeedEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::SetSMIncreaseSpeedEvent, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::SetSMDominantCombinedSwitchEvent, EventCallbackCommand, Priority ); - - theInteractor->AddObserver( SVTK::StartZoom, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::StartPan, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::StartRotate, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::StartGlobalPan, EventCallbackCommand, Priority ); - theInteractor->AddObserver( SVTK::StartFitArea, EventCallbackCommand, Priority ); - } -} - -/*! - To implement cached rendering -*/ -void -SVTK_InteractorStyle -::OnTimer() -{ - //vtkInteractorStyle::OnTimer(); - this->Interactor->Render(); -} - -/*! - To invoke #vtkRenderWindowInteractor::CreateTimer -*/ -void -SVTK_InteractorStyle -::Render() -{ - this->Interactor->CreateTimer(VTKI_TIMER_FIRST); -} - -void -SVTK_InteractorStyle -::onSpaceMouseMove( double* data ) -{ - // general things, do SetCurrentRenderer() within FindPokedRenderer() - int x, y; - GetEventPosition( this->Interactor, x, y ); // current mouse position (from last mouse move event or any other event) - FindPokedRenderer( x, y ); // calls SetCurrentRenderer - - IncrementalZoom( (int)data[2] ); // 1. push toward / pull backward = zoom out / zoom in - IncrementalPan( (int)data[0], (int)data[1] );// 2. pull up / push down = pan up / down, 3. move left / right = pan left / right - IncrementalRotate( 0, (int)data[4] ); // 4. twist the control = rotate around Y axis - IncrementalRotate( (int)data[3], 0 ); // 5. tilt the control forward/backward = rotate around X axis (Z axis of local coordinate system of space mouse) -} - -void -SVTK_InteractorStyle -::onSpaceMouseButton( int button ) -{ - if( mySMDecreaseSpeedBtn == button ) { - ControllerIncrement()->Decrease(); - } - if( mySMIncreaseSpeedBtn == button ) { - ControllerIncrement()->Increase(); - } - if( mySMDominantCombinedSwitchBtn == button ) - DominantCombinedSwitch(); -} - -void -SVTK_InteractorStyle -::DominantCombinedSwitch() -{ - printf( "\n--DominantCombinedSwitch() NOT IMPLEMENTED--\n" ); -} - -/*! - Main process event method (reimplemented from #vtkInteractorStyle) -*/ -void -SVTK_InteractorStyle -::ProcessEvents( vtkObject* object, - unsigned long event, - void* clientData, - void* callData ) -{ - if ( clientData ) { - vtkObject* anObject = reinterpret_cast( clientData ); - SVTK_InteractorStyle* self = dynamic_cast( anObject ); - int aSpeedIncrement=self->ControllerIncrement()->Current(); - if ( self ) { - switch ( event ) { - case SVTK::SpaceMouseMoveEvent : - self->onSpaceMouseMove( (double*)callData ); - return; - case SVTK::SpaceMouseButtonEvent : - self->onSpaceMouseButton( *((int*)callData) ); - return; - case SVTK::PanLeftEvent: - self->IncrementalPan(-aSpeedIncrement, 0); - return; - case SVTK::PanRightEvent: - self->IncrementalPan(aSpeedIncrement, 0); - return; - case SVTK::PanUpEvent: - self->IncrementalPan(0, aSpeedIncrement); - return; - case SVTK::PanDownEvent: - self->IncrementalPan(0, -aSpeedIncrement); - return; - case SVTK::ZoomInEvent: - self->IncrementalZoom(aSpeedIncrement); - return; - case SVTK::ZoomOutEvent: - self->IncrementalZoom(-aSpeedIncrement); - return; - case SVTK::RotateLeftEvent: - self->IncrementalRotate(-aSpeedIncrement, 0); - return; - case SVTK::RotateRightEvent: - self->IncrementalRotate(aSpeedIncrement, 0); - return; - case SVTK::RotateUpEvent: - self->IncrementalRotate(0, -aSpeedIncrement); - return; - case SVTK::RotateDownEvent: - self->IncrementalRotate(0, aSpeedIncrement); - return; - case SVTK::PlusSpeedIncrementEvent: - self->ControllerIncrement()->Increase(); - return; - case SVTK::MinusSpeedIncrementEvent: - self->ControllerIncrement()->Decrease(); - return; - case SVTK::SetSpeedIncrementEvent: - self->ControllerIncrement()->SetStartValue(*((int*)callData)); - return; - - case SVTK::SetSMDecreaseSpeedEvent: - self->mySMDecreaseSpeedBtn = *((int*)callData); - return; - case SVTK::SetSMIncreaseSpeedEvent: - self->mySMIncreaseSpeedBtn = *((int*)callData); - return; - case SVTK::SetSMDominantCombinedSwitchEvent: - self->mySMDominantCombinedSwitchBtn = *((int*)callData); - return; - - case SVTK::StartZoom: - self->startZoom(); - return; - case SVTK::StartPan: - self->startPan(); - return; - case SVTK::StartRotate: - self->startRotate(); - return; - case SVTK::StartGlobalPan: - self->startGlobalPan(); - return; - case SVTK::StartFitArea: - self->startFitArea(); - return; - } - } - } - - Superclass::ProcessEvents( object, event, clientData, callData ); -} - -/*! - To handle keyboard event (reimplemented from #vtkInteractorStyle) -*/ -void SVTK_InteractorStyle::OnChar() -{ -} - -/*! - Redefined vtkInteractorStyle::OnKeyDown -*/ -void SVTK_InteractorStyle::OnKeyDown() -{ - bool bInvokeSuperclass=myControllerOnKeyDown->OnKeyDown(this); - if (bInvokeSuperclass){ - Superclass::OnKeyDown(); - } -} - -/*! - Provide instructions for Picking -*/ -void SVTK_InteractorStyle::ActionPicking() -{ - int x, y; - Interactor->GetEventPosition( x, y ); - FindPokedRenderer( x, y ); - - myOtherPoint = myPoint = QPoint(x, y); - - startOperation(VTK_INTERACTOR_STYLE_CAMERA_SELECT); - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); -} - -/*! - To set current increment controller -*/ -void SVTK_InteractorStyle::SetControllerOnKeyDown(SVTK_ControllerOnKeyDown* theController) -{ - myControllerOnKeyDown=theController; -} - -/*! - To get current OnKeyDown controller -*/ -SVTK_ControllerOnKeyDown* SVTK_InteractorStyle::ControllerOnKeyDown() -{ - return myControllerOnKeyDown.GetPointer(); -} - -/*! - To get current increment controller -*/ -void SVTK_InteractorStyle::SetControllerIncrement(SVTK_ControllerIncrement* theController) -{ - myControllerIncrement=theController; -} - -/*! - To get current increment controller -*/ -SVTK_ControllerIncrement* SVTK_InteractorStyle::ControllerIncrement() -{ - return myControllerIncrement.GetPointer(); -} - -vtkStandardNewMacro(SVTK_ControllerIncrement); -SVTK_ControllerIncrement::SVTK_ControllerIncrement() -{ - myIncrement=10; -} -SVTK_ControllerIncrement::~SVTK_ControllerIncrement() -{ -} -void SVTK_ControllerIncrement::SetStartValue(const int theValue) -{ - myIncrement=theValue; -} -int SVTK_ControllerIncrement::Current()const -{ - return myIncrement; -} -int SVTK_ControllerIncrement::Increase() -{ - ++myIncrement; - return myIncrement; -} -int SVTK_ControllerIncrement::Decrease() -{ - if (myIncrement>1){ - --myIncrement; - } - return myIncrement; -} - -vtkStandardNewMacro(SVTK_ControllerOnKeyDown); - -/*! - Constructor -*/ -SVTK_ControllerOnKeyDown::SVTK_ControllerOnKeyDown() -{ -} - -/*! - Destructor -*/ -SVTK_ControllerOnKeyDown::~SVTK_ControllerOnKeyDown() -{ -} - -bool SVTK_ControllerOnKeyDown::OnKeyDown(vtkInteractorStyle* theIS) -{ - return true; -} diff --git a/src/SVTK/SVTK_InteractorStyle.h b/src/SVTK/SVTK_InteractorStyle.h deleted file mode 100644 index 90057f5a8..000000000 --- a/src/SVTK/SVTK_InteractorStyle.h +++ /dev/null @@ -1,334 +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 : SVTK_InteractorStyle.h -// Author : Christophe ATTANASIO -// Module : SALOME -// $Header$ - -#ifndef __SVTK_InteractorStyle_h -#define __SVTK_InteractorStyle_h - -#include "SVTK.h" - -#include "SVTK_SelectionEvent.h" - -#include - -#include -#include - -#include -#include - -#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_EXPORT SVTK_ControllerIncrement : public vtkObject{ - public: - vtkTypeMacro(SVTK_ControllerIncrement, vtkObject); - static SVTK_ControllerIncrement* New(); - - //! Set start value of increment - void SetStartValue(const int ); - - //! Get current value of increment - int Current()const; - - //! Increace the increment value by add 1 - virtual int Increase(); - - //! Decreace the increment value by subtract 1 - virtual int Decrease(); - protected: - SVTK_ControllerIncrement(); - virtual ~SVTK_ControllerIncrement(); - protected: - int myIncrement; - private: - SVTK_ControllerIncrement(const SVTK_ControllerIncrement&);//Not implemented - void operator=(const SVTK_ControllerIncrement&); //Not implemented -}; -// -//! Control the behaviour of KeyDown event in SALOME way. -/*! - This class controls the behaviour of KeyDown event - in SALOME way -*/ -class SVTK_EXPORT SVTK_ControllerOnKeyDown : public vtkObject{ - public: - vtkTypeMacro(SVTK_ControllerOnKeyDown, vtkObject); - static SVTK_ControllerOnKeyDown* New(); - - //! Provides the action on event - virtual bool OnKeyDown(vtkInteractorStyle* ); - - protected: - SVTK_ControllerOnKeyDown(); - virtual ~SVTK_ControllerOnKeyDown(); - - private: - SVTK_ControllerOnKeyDown(const SVTK_ControllerOnKeyDown&);//Not implemented - void operator=(const SVTK_ControllerOnKeyDown&); //Not implemented -}; - -class vtkCell; -class vtkPicker; - -class SALOME_Actor; - -class SVTK_Selector; -class SVTK_GenericRenderWindowInteractor; - -#define VTK_INTERACTOR_STYLE_CAMERA_NONE 0 -#define VTK_INTERACTOR_STYLE_CAMERA_ROTATE 1 -#define VTK_INTERACTOR_STYLE_CAMERA_PAN 2 -#define VTK_INTERACTOR_STYLE_CAMERA_ZOOM 3 -#define VTK_INTERACTOR_STYLE_CAMERA_SPIN 4 -#define VTK_INTERACTOR_STYLE_CAMERA_FIT 5 -#define VTK_INTERACTOR_STYLE_CAMERA_SELECT 6 -#define VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN 7 - -//! Introduce SALOME way of user interaction -/*! - This class defines SALOME way of user interaction for VTK viewer, as well, - as introduce a new selection mechanism -*/ -class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle -{ - public: - static SVTK_InteractorStyle *New(); - vtkTypeMacro(SVTK_InteractorStyle, vtkInteractorStyle); - - typedef boost::shared_ptr PSelectionEvent; - - - - //! Generate special #SVTK_SelectionEvent - virtual - SVTK_SelectionEvent* - GetSelectionEvent(); - - //! Generate special #SVTK_SelectionEvent with flipped Y coordinate - virtual - SVTK_SelectionEvent* - GetSelectionEventFlipY(); - - //! Redefined in order to add an observer (callback) for custom event (space mouse event) - virtual - void - SetInteractor( vtkRenderWindowInteractor* ); - - //! To invoke #vtkRenderWindowInteractor::CreateTimer - virtual - void - Render(); - - //! To implement cached rendering - virtual - void - OnTimer(); - - //! To reset reset view - virtual - void - OnConfigure(); - - //! To handle mouse move event - virtual - void - OnMouseMove(); - - //! To handle left mouse button down event (reimplemented from #vtkInteractorStyle) - virtual - void - OnLeftButtonDown(); - - //! To handle left mouse button up event (reimplemented from #vtkInteractorStyle) - virtual - void - OnLeftButtonUp(); - - //! To handle middle mouse button down event (reimplemented from #vtkInteractorStyle) - virtual - void - OnMiddleButtonDown(); - - //! To handle middle mouse button up event (reimplemented from #vtkInteractorStyle) - virtual - void - OnMiddleButtonUp(); - - //! To handle right mouse button down event (reimplemented from #vtkInteractorStyle) - virtual - void - OnRightButtonDown(); - - //! To handle right mouse button up event (reimplemented from #vtkInteractorStyle) - virtual - void - OnRightButtonUp(); - - //! To handle keyboard event (reimplemented from #vtkInteractorStyle) - virtual - void - OnChar(); - - //! To set current increment controller - void SetControllerIncrement(SVTK_ControllerIncrement*); - - //! To get current increment controller - SVTK_ControllerIncrement* ControllerIncrement(); - - //! Redefine vtkInteractorStyle::OnKeyDown - virtual void OnKeyDown(); - - //! Provide instructions for Picking - void ActionPicking(); - - //! To set current OnKeyDown controller - void SetControllerOnKeyDown(SVTK_ControllerOnKeyDown*); - - //! To get current OnKeyDown controller - SVTK_ControllerOnKeyDown* ControllerOnKeyDown(); - - SVTK_Selector* GetSelector(); - - protected: - SVTK_InteractorStyle(); - ~SVTK_InteractorStyle(); - - QWidget* - GetRenderWidget(); - - // Generic event bindings must be overridden in subclasses - virtual void OnMouseMove (int ctrl, int shift, int x, int y); - virtual void OnLeftButtonDown(int ctrl, int shift, int x, int y); - virtual void OnLeftButtonUp (int ctrl, int shift, int x, int y); - virtual void OnMiddleButtonDown(int ctrl, int shift, int x, int y); - virtual void OnMiddleButtonUp (int ctrl, int shift, int x, int y); - virtual void OnRightButtonDown(int ctrl, int shift, int x, int y); - virtual void OnRightButtonUp (int ctrl, int shift, int x, int y); - - void RotateXY(int dx, int dy); - void PanXY(int x, int y, int oldX, int oldY); - void DollyXY(int dx, int dy); - void SpinXY(int dx, int dy, int oldX, int oldY); - void fitRect(const int left, const int top, const int right, const int bottom); - void Place(const int theX, const int theY); - void TranslateView(int toX, int toY, int fromX, int fromY); - - void - IncrementalPan( const int incrX, const int incrY ); - - void - IncrementalZoom( const int incr ); - - void - IncrementalRotate( const int incrX, const int incrY ); - - // Main process event method (reimplemented from #vtkInteractorStyle) - static - void - ProcessEvents(vtkObject* object, - unsigned long event, - void* clientData, - void* callData ); - - float MotionFactor; - float RadianToDegree; // constant: for conv from deg to rad - double myScale; - - protected: - void startZoom(); - void startPan(); - void startGlobalPan(); - void startRotate(); - void startFitArea(); - void startSpin(); - - protected: - void loadCursors(); - void startOperation(int operation); - void onStartOperation(); - virtual void onFinishOperation(); - void onOperation(QPoint mousePos); - void onCursorMove(QPoint mousePos); - void setCursor(const int operation); - - void onSpaceMouseMove( double* data ); - virtual void onSpaceMouseButton( int button ); - - void DominantCombinedSwitch(); - - protected: - QCursor myDefCursor; - QCursor myPanCursor; - QCursor myZoomCursor; - QCursor myRotateCursor; - QCursor mySpinCursor; - QCursor myHandCursor; - QCursor myGlobalPanCursor; - QPoint myPoint; - QPoint myOtherPoint; - bool myCursorState; - bool myShiftState; - int ForcedState; - - vtkSmartPointer myLastHighlitedActor; - vtkSmartPointer myLastPreHighlitedActor; - - //! "Increment" controller for pan/rotate/zoom operations - vtkSmartPointer myControllerIncrement; - - //!controls the behaviour of KeyDown event in SALOME way - vtkSmartPointer myControllerOnKeyDown; - - // SpaceMouse short cuts - int mySMDecreaseSpeedBtn; - int mySMIncreaseSpeedBtn; - int mySMDominantCombinedSwitchBtn; - - vtkSmartPointer myInteractor; - - PSelectionEvent mySelectionEvent; - - vtkSmartPointer myPicker; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_MainWindow.cxx b/src/SVTK/SVTK_MainWindow.cxx deleted file mode 100644 index 8493b1721..000000000 --- a/src/SVTK/SVTK_MainWindow.cxx +++ /dev/null @@ -1,837 +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 : -// Author : -// Module : SALOME -// $Header$ - -#include "SALOME_Actor.h" - -#include -#include - -#include "QtxAction.h" - -#include "SUIT_ToolButton.h" -#include "SUIT_MessageBox.h" -#include "SUIT_ViewWindow.h" - -#include "SUIT_Tools.h" -#include "SUIT_ResourceMgr.h" -#include "SVTK_NonIsometricDlg.h" -#include "SVTK_UpdateRateDlg.h" -#include "SVTK_CubeAxesDlg.h" - -#include "SVTK_MainWindow.h" -#include "SVTK_Event.h" -#include "SVTK_Renderer.h" -#include "SVTK_RenderWindowInteractor.h" - -#include "SVTK_Selector.h" - -#include - -/*! - Constructor -*/ -SVTK_MainWindow -::SVTK_MainWindow(QWidget* theParent, - const char* theName, - SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow) : - QMainWindow(theParent,theName,0), - myViewWindow(theViewWindow) -{ - myToolBar = new QToolBar(this); - myToolBar->setCloseMode(QDockWindow::Undocked); - myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); - - createActions(theResourceMgr); - createToolBar(); -} - -/*! - To initialize the class -*/ -void -SVTK_MainWindow -::Initialize(SVTK_RenderWindowInteractor* theInteractor) -{ - myInteractor = theInteractor; - SetEventDispatcher(myInteractor->GetDevice()); - - setCentralWidget(myInteractor); - myInteractor->setBackgroundMode(Qt::NoBackground); - - myInteractor->setFocusPolicy(StrongFocus); - myInteractor->setFocus(); - setFocusProxy(myInteractor); - - 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"); -} - -/*! - Destructor -*/ -SVTK_MainWindow -::~SVTK_MainWindow() -{ -} - -/*! - \return used SVTK_RenderWindowInteractor -*/ -SVTK_RenderWindowInteractor* -SVTK_MainWindow -::GetInteractor() -{ - return myInteractor; -} - -/*! - \return used #vtkRenderWindowInteractor (obsolete) -*/ -vtkRenderWindowInteractor* -SVTK_MainWindow -::getInteractor() -{ - return GetInteractor()->GetDevice(); -} - -/*! - \return used vtkRenderWindow (obsolete) -*/ -vtkRenderWindow* -SVTK_MainWindow -::getRenderWindow() -{ - return GetInteractor()->getRenderWindow(); -} - -/*! - To repaint the view - \param theUpdateTrihedron - adjust trihedron -*/ -void -SVTK_MainWindow -::Repaint(bool theUpdateTrihedron) -{ - if(theUpdateTrihedron) - GetRenderer()->OnAdjustTrihedron(); - - GetInteractor()->update(); -} - -/*! - To invoke a VTK event on SVTK_RenderWindowInteractor instance -*/ -void -SVTK_MainWindow -::InvokeEvent(unsigned long theEvent, void* theCallData) -{ - GetInteractor()->InvokeEvent(theEvent,theCallData); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::GetInteractorStyle -*/ -vtkInteractorStyle* -SVTK_MainWindow -::GetInteractorStyle() -{ - return GetInteractor()->GetInteractorStyle(); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::PushInteractorStyle -*/ -void -SVTK_MainWindow -::PushInteractorStyle(vtkInteractorStyle* theStyle) -{ - GetInteractor()->PushInteractorStyle(theStyle); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::PopInteractorStyle -*/ -void -SVTK_MainWindow -::PopInteractorStyle() -{ - GetInteractor()->PopInteractorStyle(); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::GetSelector -*/ -SVTK_Selector* -SVTK_MainWindow -::GetSelector() -{ - return GetInteractor()->GetSelector(); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::SelectionMode -*/ -Selection_Mode -SVTK_MainWindow -::SelectionMode() -{ - return GetSelector()->SelectionMode(); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::SetSelectionMode -*/ -void -SVTK_MainWindow -::SetSelectionMode(Selection_Mode theMode) -{ - GetSelector()->SetSelectionMode(theMode); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::GetRenderer -*/ -SVTK_Renderer* -SVTK_MainWindow -::GetRenderer() -{ - return GetInteractor()->GetRenderer(); -} - -/*! - Redirect the request to SVTK_RenderWindowInteractor::getRenderer -*/ -vtkRenderer* -SVTK_MainWindow -::getRenderer() -{ - return GetInteractor()->getRenderer(); -} - -/*! - Sets background color of the view - \param theColor - new background color -*/ -void -SVTK_MainWindow -::SetBackgroundColor(const QColor& theColor) -{ - getRenderer()->SetBackground(theColor.red()/255.0, - theColor.green()/255.0, - theColor.blue()/255.0); -} - -/*! - \return background color of the view -*/ -QColor -SVTK_MainWindow -::BackgroundColor() -{ - vtkFloatingPointType aBackgroundColor[3]; - getRenderer()->GetBackground(aBackgroundColor); - return QColor(int(aBackgroundColor[0]*255), - int(aBackgroundColor[1]*255), - int(aBackgroundColor[2]*255)); -} - -/*! - Redirect the request to SVTK_Renderer::GetScale -*/ -void -SVTK_MainWindow -::GetScale( double theScale[3] ) -{ - GetRenderer()->GetScale( theScale ); -} - -/*! - Redirect the request to SVTK_Renderer::SetScale -*/ -void -SVTK_MainWindow -::SetScale( double theScale[3] ) -{ - GetRenderer()->SetScale( theScale ); - Repaint(); -} - -/*! - Redirect the request to SVTK_Renderer::AddActor -*/ -void -SVTK_MainWindow -::AddActor(VTKViewer_Actor* theActor, - bool theIsUpdate) -{ - GetRenderer()->AddActor(theActor); - if(theIsUpdate) - Repaint(); -} - -/*! - Redirect the request to SVTK_Renderer::RemoveActor -*/ -void -SVTK_MainWindow -::RemoveActor(VTKViewer_Actor* theActor, - bool theIsUpdate) -{ - GetRenderer()->RemoveActor(theActor); - if(theIsUpdate) - Repaint(); -} - -/*! - Redirect the request to SVTK_Renderer::GetTrihedronSize -*/ -vtkFloatingPointType -SVTK_MainWindow -::GetTrihedronSize() -{ - return GetRenderer()->GetTrihedronSize(); -} - -/*! - Redirect the request to SVTK_Renderer::SetTrihedronSize -*/ -void -SVTK_MainWindow -::SetTrihedronSize( const vtkFloatingPointType theSize, const bool theRelative ) -{ - GetRenderer()->SetTrihedronSize(theSize, theRelative); - Repaint(); -} - - -/*! If parameter theIsForcedUpdate is true, recalculate parameters for - * trihedron and cube axes, even if trihedron and cube axes is invisible. - */ -void -SVTK_MainWindow -::AdjustActors() -{ - GetRenderer()->AdjustActors(); - Repaint(); -} - -/*! - Redirect the request to SVTK_Renderer::IsTrihedronDisplayed -*/ -bool -SVTK_MainWindow -::IsTrihedronDisplayed() -{ - return GetRenderer()->IsTrihedronDisplayed(); -} - -/*! - Redirect the request to SVTK_Renderer::IsCubeAxesDisplayed -*/ -bool -SVTK_MainWindow -::IsCubeAxesDisplayed() -{ - return GetRenderer()->IsCubeAxesDisplayed(); -} - -/*! - Redirect the request to SVTK_Renderer::GetTrihedron -*/ -VTKViewer_Trihedron* -SVTK_MainWindow -::GetTrihedron() -{ - return GetRenderer()->GetTrihedron(); -} - -/*! - Redirect the request to SVTK_Renderer::GetCubeAxes -*/ -SVTK_CubeAxesActor2D* -SVTK_MainWindow -::GetCubeAxes() -{ - return GetRenderer()->GetCubeAxes(); -} - -/*! - \return toolbar of svtk main window -*/ -QToolBar* -SVTK_MainWindow -::getToolBar() -{ - return myToolBar; -} - -void -SVTK_MainWindow -::SetEventDispatcher(vtkObject* theDispatcher) -{ - myEventDispatcher = theDispatcher; -} - -#if defined(WIN32) && !defined(_DEBUG) -#pragma optimize( "", off ) -#endif - -/*! - Creates all actions of svtk main window -*/ -void -SVTK_MainWindow -::createActions(SUIT_ResourceMgr* theResourceMgr) -{ - if(!myActionsMap.isEmpty()) - return; - - QtxAction* anAction; - - // Dump view - anAction = new QtxAction(tr("MNU_DUMP_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_DUMP" ) ), - tr( "MNU_DUMP_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_DUMP_VIEW")); - connect(anAction, SIGNAL(activated()), myViewWindow, SLOT(onDumpView())); - myActionsMap[ DumpId ] = anAction; - - // FitAll - anAction = new QtxAction(tr("MNU_FITALL"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FITALL" ) ), - tr( "MNU_FITALL" ), 0, this); - anAction->setStatusTip(tr("DSC_FITALL")); - connect(anAction, SIGNAL(activated()), this, SLOT(onFitAll())); - myActionsMap[ FitAllId ] = anAction; - - // FitRect - anAction = new QtxAction(tr("MNU_FITRECT"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FITAREA" ) ), - tr( "MNU_FITRECT" ), 0, this); - anAction->setStatusTip(tr("DSC_FITRECT")); - connect(anAction, SIGNAL(activated()), this, SLOT(activateWindowFit())); - myActionsMap[ FitRectId ] = anAction; - - // Zoom - anAction = new QtxAction(tr("MNU_ZOOM_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ZOOM" ) ), - tr( "MNU_ZOOM_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_ZOOM_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(activateZoom())); - myActionsMap[ ZoomId ] = anAction; - - // Panning - anAction = new QtxAction(tr("MNU_PAN_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_PAN" ) ), - tr( "MNU_PAN_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_PAN_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(activatePanning())); - myActionsMap[ PanId ] = anAction; - - // Global Panning - anAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_GLOBALPAN" ) ), - tr( "MNU_GLOBALPAN_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning())); - myActionsMap[ GlobalPanId ] = anAction; - - // Rotation - anAction = new QtxAction(tr("MNU_ROTATE_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ROTATE" ) ), - tr( "MNU_ROTATE_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_ROTATE_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(activateRotation())); - myActionsMap[ RotationId ] = anAction; - - // Projections - anAction = new QtxAction(tr("MNU_FRONT_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FRONT" ) ), - tr( "MNU_FRONT_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_FRONT_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(onFrontView())); - myActionsMap[ FrontId ] = anAction; - - anAction = new QtxAction(tr("MNU_BACK_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BACK" ) ), - tr( "MNU_BACK_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_BACK_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(onBackView())); - myActionsMap[ BackId ] = anAction; - - anAction = new QtxAction(tr("MNU_TOP_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TOP" ) ), - tr( "MNU_TOP_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_TOP_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(onTopView())); - myActionsMap[ TopId ] = anAction; - - anAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BOTTOM" ) ), - tr( "MNU_BOTTOM_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_BOTTOM_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(onBottomView())); - myActionsMap[ BottomId ] = anAction; - - anAction = new QtxAction(tr("MNU_LEFT_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_LEFT" ) ), - tr( "MNU_LEFT_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_LEFT_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(onLeftView())); - myActionsMap[ LeftId ] = anAction; - - anAction = new QtxAction(tr("MNU_RIGHT_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RIGHT" ) ), - tr( "MNU_RIGHT_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_RIGHT_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(onRightView())); - myActionsMap[ RightId ] = anAction; - - // Reset - anAction = new QtxAction(tr("MNU_RESET_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RESET" ) ), - tr( "MNU_RESET_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_RESET_VIEW")); - connect(anAction, SIGNAL(activated()), this, SLOT(onResetView())); - myActionsMap[ ResetId ] = anAction; - - // onViewTrihedron: Shows - Hides Trihedron - anAction = new QtxAction(tr("MNU_SHOW_TRIHEDRON"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TRIHEDRON" ) ), - tr( "MNU_SHOW_TRIHEDRON" ), 0, this); - anAction->setStatusTip(tr("DSC_SHOW_TRIHEDRON")); - connect(anAction, SIGNAL(activated()), this, SLOT(onViewTrihedron())); - myActionsMap[ ViewTrihedronId ] = anAction; - - // onNonIsometric: Manage non-isometric params - anAction = new QtxAction(tr("MNU_SVTK_SCALING"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_SCALING" ) ), - tr( "MNU_SVTK_SCALING" ), 0, this); - anAction->setStatusTip(tr("DSC_SVTK_SCALING")); - anAction->setToggleAction(true); - connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onNonIsometric(bool))); - myActionsMap[ NonIsometric ] = anAction; - - // onGraduatedAxes: Manage graduated axes params - anAction = new QtxAction(tr("MNU_SVTK_GRADUATED_AXES"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_GRADUATED_AXES" ) ), - tr( "MNU_SVTK_GRADUATED_AXES" ), 0, this); - anAction->setStatusTip(tr("DSC_SVTK_GRADUATED_AXES")); - anAction->setToggleAction(true); - connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onGraduatedAxes(bool))); - myActionsMap[ GraduatedAxes ] = anAction; - - // onGraduatedAxes: Manage graduated axes params - anAction = new QtxAction(tr("MNU_SVTK_UPDATE_RATE"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_UPDATE_RATE" ) ), - tr( "MNU_SVTK_UPDATE_RATE" ), 0, this); - anAction->setStatusTip(tr("DSC_SVTK_UPDATE_RATE")); - anAction->setToggleAction(true); - connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onUpdateRate(bool))); - myActionsMap[ UpdateRate ] = anAction; -} - -#if defined(WIN32) && !defined(_DEBUG) -#pragma optimize( "", on ) -#endif - -/*! - Creates toolbar of svtk main window -*/ -void -SVTK_MainWindow -::createToolBar() -{ - myActionsMap[DumpId]->addTo(myToolBar); - myActionsMap[ViewTrihedronId]->addTo(myToolBar); - - SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar); - aScaleBtn->AddAction(myActionsMap[FitAllId]); - aScaleBtn->AddAction(myActionsMap[FitRectId]); - aScaleBtn->AddAction(myActionsMap[ZoomId]); - - SUIT_ToolButton* aPanningBtn = new SUIT_ToolButton(myToolBar); - aPanningBtn->AddAction(myActionsMap[PanId]); - aPanningBtn->AddAction(myActionsMap[GlobalPanId]); - - myActionsMap[RotationId]->addTo(myToolBar); - - SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar); - aViewsBtn->AddAction(myActionsMap[FrontId]); - aViewsBtn->AddAction(myActionsMap[BackId]); - aViewsBtn->AddAction(myActionsMap[TopId]); - aViewsBtn->AddAction(myActionsMap[BottomId]); - aViewsBtn->AddAction(myActionsMap[LeftId]); - aViewsBtn->AddAction(myActionsMap[RightId]); - - myActionsMap[ResetId]->addTo(myToolBar); - - myActionsMap[UpdateRate]->addTo(myToolBar); - myActionsMap[NonIsometric]->addTo(myToolBar); - myActionsMap[GraduatedAxes]->addTo(myToolBar); -} - -/*! - Custom show event handler -*/ -void -SVTK_MainWindow -::showEvent( QShowEvent * theEvent ) -{ - emit Show( theEvent ); -} - -/*! - Custom hide event handler -*/ -void -SVTK_MainWindow -::hideEvent( QHideEvent * theEvent ) -{ - emit Hide( theEvent ); -} - -/*! - Starts zoom transformation -*/ -void -SVTK_MainWindow -::activateZoom() -{ - myEventDispatcher->InvokeEvent(SVTK::StartZoom,0); -} - -/*! - Starts panning transformation -*/ -void -SVTK_MainWindow -::activatePanning() -{ - myEventDispatcher->InvokeEvent(SVTK::StartPan,0); -} - -/*! - Starts rotation transformation -*/ -void -SVTK_MainWindow -::activateRotation() -{ - myEventDispatcher->InvokeEvent(SVTK::StartRotate,0); -} - -/*! - Starts global panning transformation -*/ -void -SVTK_MainWindow -::activateGlobalPanning() -{ - myEventDispatcher->InvokeEvent(SVTK::StartGlobalPan,0); -} - -/*! - Starts window fit transformation -*/ -void -SVTK_MainWindow -::activateWindowFit() -{ - myEventDispatcher->InvokeEvent(SVTK::StartFitArea,0); -} - -/*! - Processes transformation "front view" -*/ -void -SVTK_MainWindow -::onFrontView() -{ - GetRenderer()->OnFrontView(); - Repaint(); -} - -/*! - Processes transformation "back view" -*/ -void -SVTK_MainWindow -::onBackView() -{ - GetRenderer()->OnBackView(); - Repaint(); -} - -/*! - Processes transformation "top view" -*/ -void -SVTK_MainWindow -::onTopView() -{ - GetRenderer()->OnTopView(); - Repaint(); -} - -/*! - Processes transformation "bottom view" -*/ -void -SVTK_MainWindow -::onBottomView() -{ - GetRenderer()->OnBottomView(); - Repaint(); -} - -/*! - Processes transformation "left view" -*/ -void -SVTK_MainWindow -::onLeftView() -{ - GetRenderer()->OnLeftView(); - Repaint(); -} - -/*! - Processes transformation "right view" -*/ -void -SVTK_MainWindow -::onRightView() -{ - GetRenderer()->OnRightView(); - Repaint(); -} - -/*! - Processes transformation "reset view": sets default orientation of viewport camera -*/ -void -SVTK_MainWindow -::onResetView() -{ - GetRenderer()->OnResetView(); - Repaint(); -} - -/*! - Processes transformation "fit all" -*/ -void -SVTK_MainWindow -::onFitAll() -{ - GetRenderer()->OnFitAll(); - Repaint(); -} - -/*! - Shows trihedron -*/ -void -SVTK_MainWindow -::onViewTrihedron() -{ - GetRenderer()->OnViewTrihedron(); - Repaint(); -} - -/*! - Shows cube axes -*/ -void -SVTK_MainWindow -::onViewCubeAxes() -{ - GetRenderer()->OnViewCubeAxes(); - Repaint(); -} - -void -SVTK_MainWindow -::onUpdateRate(bool theIsActivate) -{ - if(theIsActivate){ - myUpdateRateDlg->Update(); - myUpdateRateDlg->show(); - }else - myUpdateRateDlg->hide(); -} - -void -SVTK_MainWindow -::onNonIsometric(bool theIsActivate) -{ - if(theIsActivate){ - myNonIsometricDlg->Update(); - myNonIsometricDlg->show(); - }else - myNonIsometricDlg->hide(); -} - -void -SVTK_MainWindow -::onGraduatedAxes(bool theIsActivate) -{ - if(theIsActivate){ - myCubeAxesDlg->Update(); - myCubeAxesDlg->show(); - }else - myCubeAxesDlg->hide(); -} - -void -SVTK_MainWindow -::onAdjustTrihedron() -{ - GetRenderer()->OnAdjustTrihedron(); -} - -void -SVTK_MainWindow -::onAdjustCubeAxes() -{ - GetRenderer()->OnAdjustCubeAxes(); -} - -/*! - \return QImage, containing all scene rendering in window -*/ -QImage -SVTK_MainWindow -::dumpView() -{ - QPixmap px = QPixmap::grabWindow( GetInteractor()->winId() ); - return px.convertToImage(); -} diff --git a/src/SVTK/SVTK_MainWindow.h b/src/SVTK/SVTK_MainWindow.h deleted file mode 100644 index 6533ff8cb..000000000 --- a/src/SVTK/SVTK_MainWindow.h +++ /dev/null @@ -1,265 +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 -// -#ifndef SVTK_MAINWINDOW_H -#define SVTK_MAINWINDOW_H - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include "SVTK.h" -#include "SVTK_Selection.h" - -#include - -#include - -class QtxAction; - -class vtkObject; -class vtkRenderer; -class vtkRenderWindow; -class vtkInteractorStyle; -class vtkRenderWindowInteractor; - -class SUIT_ResourceMgr; -class SUIT_ViewWindow; - -class SVTK_RenderWindowInteractor; -class SVTK_NonIsometricDlg; -class SVTK_UpdateRateDlg; -class SVTK_CubeAxesActor2D; -class SVTK_CubeAxesDlg; - -class VTKViewer_Trihedron; -class VTKViewer_Transform; -class VTKViewer_Actor; - -class SVTK_Renderer; -class SVTK_Selector; - - -//! The class is a container for #SVTK_RenderWindowInteractor. -/*! - The class contains #SVTK_RenderWindowInteractor instance and - adds predefined viewer actions and toolbar for user interaction. -*/ -class SVTK_EXPORT SVTK_MainWindow: public QMainWindow -{ - Q_OBJECT; - -public: - SVTK_MainWindow(QWidget* theParent, - const char* theName, - SUIT_ResourceMgr* theResourceMgr, - SUIT_ViewWindow* theViewWindow); - - //! To initialize the class - virtual - void - Initialize(SVTK_RenderWindowInteractor* theInteractor); - - virtual - ~SVTK_MainWindow(); - - //---------------------------------------------------------------------------- - //! Get used #SVTK_RenderWindowInteractor - SVTK_RenderWindowInteractor* - GetInteractor(); - - //! Get used #vtkRenderWindowInteractor (obsolete) - vtkRenderWindowInteractor* - getInteractor(); - - //! Get used #vtkRenderWindow (obsolete) - vtkRenderWindow* - getRenderWindow(); - - //! To repaint the view - void - Repaint(bool theUpdateTrihedron = true); - - //! To invoke a VTK event on #SVTK_RenderWindowInteractor instance - void - InvokeEvent(unsigned long theEvent, void* theCallData); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_RenderWindowInteractor::GetInteractorStyle - vtkInteractorStyle* - GetInteractorStyle(); - - //! Redirect the request to #SVTK_RenderWindowInteractor::PushInteractorStyle - void - PushInteractorStyle(vtkInteractorStyle* theStyle); - - //! Redirect the request to #SVTK_RenderWindowInteractor::PopInteractorStyle - void - PopInteractorStyle(); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_RenderWindowInteractor::GetSelector - SVTK_Selector* - GetSelector(); - - //! Redirect the request to #SVTK_RenderWindowInteractor::SelectionMode - Selection_Mode - SelectionMode(); - - //! Redirect the request to #SVTK_RenderWindowInteractor::SetSelectionMode - void - SetSelectionMode(Selection_Mode theMode); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_RenderWindowInteractor::GetRenderer - SVTK_Renderer* - GetRenderer(); - - //! Redirect the request to #SVTK_RenderWindowInteractor::getRenderer - vtkRenderer* - getRenderer(); - - //! Set background color to the view - void - SetBackgroundColor(const QColor& theColor); - - //! Get background color of the view - QColor - BackgroundColor(); - - //! Redirect the request to #SVTK_Renderer::SetScale - void - SetScale(double theScale[3]); - - //! Redirect the request to #SVTK_Renderer::GetScale - void - GetScale(double theScale[3]); - - //! Redirect the request to #SVTK_Renderer::AddActor - virtual - void - AddActor(VTKViewer_Actor* theActor, - bool theIsUpdate = false); - - //! Redirect the request to #SVTK_Renderer::RemoveActor - virtual - void - RemoveActor(VTKViewer_Actor* theActor, - bool theIsUpdate = false); - - //! Redirect the request to #SVTK_Renderer::GetTrihedronSize - vtkFloatingPointType - GetTrihedronSize(); - - //! Redirect the request to #SVTK_Renderer::SetTrihedronSize - void - SetTrihedronSize(const vtkFloatingPointType theSize, const bool theRelative = true); - - //! Redirect the request to #SVTK_Renderer::AdjustActors - void - AdjustActors(); - - //! Redirect the request to #SVTK_Renderer::IsTrihedronDisplayed - bool - IsTrihedronDisplayed(); - - //! Redirect the request to #SVTK_Renderer::IsCubeAxesDisplayed - bool - IsCubeAxesDisplayed(); - - //! Redirect the request to #SVTK_Renderer::GetTrihedron - VTKViewer_Trihedron* - GetTrihedron(); - - //! Redirect the request to #SVTK_Renderer::GetCubeAxes - SVTK_CubeAxesActor2D* - GetCubeAxes(); - - //---------------------------------------------------------------------------- - QToolBar* getToolBar(); - - signals: - void Show( QShowEvent * ); - void Hide( QHideEvent * ); - - public slots: - virtual void showEvent( QShowEvent * ); - virtual void hideEvent( QHideEvent * ); - - void activateZoom(); - void activateWindowFit(); - void activateRotation(); - void activatePanning(); - void activateGlobalPanning(); - - void onFrontView(); - void onBackView(); - void onTopView(); - void onBottomView(); - void onRightView(); - void onLeftView(); - - void onResetView(); - void onFitAll(); - - void onViewTrihedron(); - void onViewCubeAxes(); - - void onUpdateRate(bool theIsActivate); - void onNonIsometric(bool theIsActivate); - void onGraduatedAxes(bool theIsActivate); - - void onAdjustTrihedron(); - void onAdjustCubeAxes(); - - public: - QImage dumpView(); - - protected: - void - createActions(SUIT_ResourceMgr* theResourceMgr); - - void - createToolBar(); - - void - SetEventDispatcher(vtkObject* theDispatcher); - - enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, RotationId, - FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, - ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate}; - typedef QMap TActionsMap; - - SUIT_ViewWindow* myViewWindow; - - SVTK_NonIsometricDlg* myNonIsometricDlg; - SVTK_UpdateRateDlg* myUpdateRateDlg; - SVTK_CubeAxesDlg* myCubeAxesDlg; - - vtkSmartPointer myEventDispatcher; - TActionsMap myActionsMap; - QToolBar* myToolBar; - - SVTK_RenderWindowInteractor* myInteractor; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_NonIsometricDlg.cxx b/src/SVTK/SVTK_NonIsometricDlg.cxx deleted file mode 100644 index 7b99f2c9c..000000000 --- a/src/SVTK/SVTK_NonIsometricDlg.cxx +++ /dev/null @@ -1,192 +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 : -// Author : -// Module : SALOME -// $Header$ - -#include "SVTK_NonIsometricDlg.h" -#include "SVTK_MainWindow.h" -#include "SVTK_Renderer.h" - -#include "QtxDblSpinBox.h" -#include "QtxAction.h" - -#include -#include -#include -#include - -using namespace std; - -/*! - Constructor -*/ -SVTK_NonIsometricDlg -::SVTK_NonIsometricDlg(QtxAction* theAction, - SVTK_MainWindow* theParent, - const char* theName): - SVTK_DialogBase(theAction, - theParent, - theName), - m_MainWindow(theParent) -{ - setCaption(tr("DLG_TITLE")); - setSizeGripEnabled(TRUE); - - // Create layout for this dialog - QGridLayout* layoutDlg = new QGridLayout (this); - layoutDlg->setSpacing(6); - layoutDlg->setMargin(11); - - // Create croup box with grid layout - QGroupBox* aGroupBox = new QGroupBox(this, "GroupBox"); - QHBoxLayout* aHBoxLayout = new QHBoxLayout(aGroupBox); - aHBoxLayout->setMargin(11); - aHBoxLayout->setSpacing(6); - - // "X" scaling - QLabel* TextLabelX = new QLabel (tr("LBL_X"), aGroupBox, "TextLabelX"); - TextLabelX->setFixedWidth(15); - m_sbXcoeff = new QtxDblSpinBox(-VTK_LARGE_FLOAT, VTK_LARGE_FLOAT, 0.1, aGroupBox); - m_sbXcoeff->setMinimumWidth(80); - m_sbXcoeff->setValue(1.0); - - // "Y" scaling - QLabel* TextLabelY = new QLabel (tr("LBL_Y"), aGroupBox, "TextLabelY"); - TextLabelY->setFixedWidth(15); - m_sbYcoeff = new QtxDblSpinBox(-VTK_LARGE_FLOAT, VTK_LARGE_FLOAT, 0.1, aGroupBox); - m_sbYcoeff->setMinimumWidth(80); - m_sbYcoeff->setValue(1.0); - - // "Z" scaling - QLabel* TextLabelZ = new QLabel (tr("LBL_Z"), aGroupBox, "TextLabelZ"); - TextLabelZ->setFixedWidth(15); - m_sbZcoeff = new QtxDblSpinBox(-VTK_LARGE_FLOAT, VTK_LARGE_FLOAT, 0.1, aGroupBox); - m_sbZcoeff->setMinimumWidth(80); - m_sbZcoeff->setValue(1.0); - - // Create button - m_bReset = new QPushButton(tr("&Reset"), aGroupBox, "m_bReset"); - - // Layout widgets in the group box - aHBoxLayout->addWidget(TextLabelX); - aHBoxLayout->addWidget(m_sbXcoeff); - aHBoxLayout->addWidget(TextLabelY); - aHBoxLayout->addWidget(m_sbYcoeff); - aHBoxLayout->addWidget(TextLabelZ); - aHBoxLayout->addWidget(m_sbZcoeff); - //aHBoxLayout->addStretch(); - aHBoxLayout->addWidget(m_bReset); - - // OK, CANCEL, Apply button - QGroupBox* aGroupBox2 = new QGroupBox(this); - QHBoxLayout* aHBoxLayout2 = new QHBoxLayout(aGroupBox2); - aHBoxLayout2->setMargin(11); - aHBoxLayout2->setSpacing(6); - // Create button - QPushButton* m_bOk = new QPushButton(tr("O&K"), aGroupBox2, "m_bOk"); - m_bOk->setDefault(TRUE); - m_bOk->setAutoDefault(TRUE); - // Create button - QPushButton* m_bApply = new QPushButton(tr("&Apply"), aGroupBox2, "m_bApply"); - m_bApply->setAutoDefault(TRUE); - // Create button - QPushButton* m_bCancel = new QPushButton(tr("&Cancel"), aGroupBox2, "m_bCancel"); - m_bCancel->setAutoDefault(TRUE); - - // Layout buttons - aHBoxLayout2->addWidget(m_bOk); - aHBoxLayout2->addWidget(m_bApply); - aHBoxLayout2->addStretch(); - aHBoxLayout2->addWidget(m_bCancel); - - // Layout top level widgets - layoutDlg->addWidget(aGroupBox,0,0); - layoutDlg->addWidget(aGroupBox2,1,0); - - // signals and slots connections - connect(m_bCancel, SIGNAL(clicked()), this, SLOT(onClickClose())); - connect(m_bOk, SIGNAL(clicked()), this, SLOT(onClickOk())); - connect(m_bApply, SIGNAL(clicked()), this, SLOT(onClickApply())); - connect(m_bReset, SIGNAL(clicked()), this, SLOT(onClickReset())); - - this->resize(100, this->sizeHint().height()); -} - -/* - * Destroys the object and frees any allocated resources - */ -SVTK_NonIsometricDlg -::~SVTK_NonIsometricDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -void -SVTK_NonIsometricDlg -::Update() -{ - // Get values from the VTK view - double aScaleFactor[3]; - m_MainWindow->GetScale(aScaleFactor); - m_sbXcoeff->setValue(aScaleFactor[0]); - m_sbYcoeff->setValue(aScaleFactor[1]); - m_sbZcoeff->setValue(aScaleFactor[2]); -} - -void -SVTK_NonIsometricDlg -::onClickOk() -{ - //apply changes - onClickApply(); - //Close dialog - accept(); -} - -void -SVTK_NonIsometricDlg -::onClickApply() -{ - double aScale[3] = {m_sbXcoeff->value(), m_sbYcoeff->value(), m_sbZcoeff->value()}; - m_MainWindow->SetScale(aScale); -} - -void -SVTK_NonIsometricDlg -::onClickReset() -{ - m_bReset->setFocus(); - m_sbXcoeff->setValue(1.0); - m_sbYcoeff->setValue(1.0); - m_sbZcoeff->setValue(1.0); -} - -void -SVTK_NonIsometricDlg -::onClickClose() -{ - reject(); -} diff --git a/src/SVTK/SVTK_NonIsometricDlg.h b/src/SVTK/SVTK_NonIsometricDlg.h deleted file mode 100644 index 66be82a39..000000000 --- a/src/SVTK/SVTK_NonIsometricDlg.h +++ /dev/null @@ -1,70 +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 : -// Author : -// Module : SALOME -// $Header$ - -#ifndef SVTK_NONISOMETRICDLG_H -#define SVTK_NONISOMETRICDLG_H - -#include "SVTK_DialogBase.h" - -class SVTK_MainWindow; - -class QtxDblSpinBox; -class QtxAction; - -class QPushButton; - - -class SVTK_NonIsometricDlg : public SVTK_DialogBase -{ - Q_OBJECT; - -public: - SVTK_NonIsometricDlg(QtxAction* theAction, - SVTK_MainWindow* theParent, - const char* theName); - - ~SVTK_NonIsometricDlg(); - - void Update(); - -protected: - SVTK_MainWindow *m_MainWindow; - - QtxDblSpinBox* m_sbXcoeff; - QtxDblSpinBox* m_sbYcoeff; - QtxDblSpinBox* m_sbZcoeff; - QPushButton* m_bReset; - -protected slots: - void onClickApply(); - void onClickReset(); - void onClickOk(); - void onClickClose(); -}; - -#endif // SVTK_NONISOMETRICDLG_H diff --git a/src/SVTK/SVTK_Prs.cxx b/src/SVTK/SVTK_Prs.cxx deleted file mode 100644 index 11e4b20f5..000000000 --- a/src/SVTK/SVTK_Prs.cxx +++ /dev/null @@ -1,79 +0,0 @@ -// 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.com -// -// -// -// File : SVTK_Prs.cxx -// Author : Sergey ANIKIN -// Module : SALOME -// $Header$ - -#include "SVTK_Prs.h" -using namespace std; - -/*! - Default constructor -*/ -SVTK_Prs::SVTK_Prs() : myObjects( 0 ) -{ -} - -/*! - Standard constructor -*/ -SVTK_Prs::SVTK_Prs( const vtkActor* obj ) -{ - AddObject( obj ); -} - -/*! - Destructor -*/ -SVTK_Prs:: ~SVTK_Prs() -{ - if ( myObjects ) myObjects->Delete(); -} - -/*! - \return actors list -*/ -vtkActorCollection* SVTK_Prs::GetObjects() const -{ - return myObjects; -} - -/*! - Add actor -*/ -void SVTK_Prs::AddObject( const vtkActor* obj ) -{ - if ( !myObjects) - myObjects = vtkActorCollection::New(); - myObjects->AddItem( (vtkActor*)obj ); -} - -/*! - \return 0 if list of the actors is empty [ Reimplemented from SALOME_Prs ] -*/ -bool SVTK_Prs::IsNull() const -{ - return !myObjects || myObjects->GetNumberOfItems() <= 0; -} diff --git a/src/SVTK/SVTK_Prs.h b/src/SVTK/SVTK_Prs.h deleted file mode 100644 index 218a9f101..000000000 --- a/src/SVTK/SVTK_Prs.h +++ /dev/null @@ -1,59 +0,0 @@ -// 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.com -// -// -// -// File : SVTK_Prs.h -// Author : Sergey ANIKIN -// Module : SALOME -// $Header$ - -#ifndef SVTK_Prs_H -#define SVTK_Prs_H - -#include -#include "SALOME_Prs.h" - -#include - -class SVTK_EXPORT SVTK_Prs : public SALOME_VTKPrs -{ -public: - SVTK_Prs(); - // Default constructor - SVTK_Prs( const vtkActor* obj ); - // Standard constructor - ~SVTK_Prs(); - // Destructor - - vtkActorCollection* GetObjects() const; - // Get actors list - void AddObject( const vtkActor* obj ); - // Add actor - - bool IsNull() const; - // Reimplemented from SALOME_Prs - -private: - vtkActorCollection* myObjects; // list of actors -}; - -#endif diff --git a/src/SVTK/SVTK_RectPicker.cxx b/src/SVTK/SVTK_RectPicker.cxx deleted file mode 100644 index 9aaad409e..000000000 --- a/src/SVTK/SVTK_RectPicker.cxx +++ /dev/null @@ -1,492 +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 : SVTK_RectPicker.cxx -// Author : -// Module : SALOME - -#include "SVTK_RectPicker.h" - -#include - -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - //---------------------------------------------------------------------------- - inline - vtkFloatingPointType - GetZ(float* theZPtr, - int theSelection[4], - int theDX, - int theDY) - { - return theZPtr[theDX - theSelection[0] + (theDY - theSelection[1])*(theSelection[2] - theSelection[0] + 1)]; - } - - - //---------------------------------------------------------------------------- - inline - int - Check(float* theZPtr, - int theSelection[4], - vtkFloatingPointType theTolerance, - vtkFloatingPointType theDZ, - int theDX, - int theDY) - { - int aRet = 0; - vtkFloatingPointType aZ = -1.0; - if(theDX >= theSelection[0] && theDX <= theSelection[2] && - theDY >= theSelection[1] && theDY <= theSelection[3]) - { - // Access the value from the captured zbuffer. Note, we only - // captured a portion of the zbuffer, so we need to offset dx by - // the selection window. - aZ = GetZ(theZPtr,theSelection,theDX,theDY); - if(aZ > theTolerance && aZ < 1.0 - theTolerance){ - aRet = fabs(aZ - theDZ) <= theTolerance; - } - } - - //cout<<"\tCheck = {"<GetNumberOfPoints(); - if(aNumPts < 1) - return; - - theVisibleIds.reserve(aNumPts/2 + 1); - theInVisibleIds.reserve(aNumPts/2 + 1); - - // Grab the composite perspective transform. This matrix is used to convert - // each point to view coordinates. vtkRenderer provides a WorldToView() - // method but it computes the composite perspective transform each time - // 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)); - - // 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 = {"<GetPoint(aPntId,aX); - - vtkFloatingPointType aView[4]; - aMatrix->MultiplyPoint(aX,aView); - if(aView[3] == 0.0) - continue; - theRenderer->SetViewPoint(aView[0]/aView[3], - aView[1]/aView[3], - aView[2]/aView[3]); - theRenderer->ViewToDisplay(); - - vtkFloatingPointType aDX[3]; - theRenderer->GetDisplayPoint(aDX); - - // check whether visible and in selection window - if(aDX[0] >= theSelection[0] && aDX[0] <= theSelection[2] && - aDX[1] >= theSelection[1] && aDX[1] <= theSelection[3]) - { - //cout<<"aPntId "< 0) - goto ADD_VISIBLE; - if(aRet < 0) - goto ADD_INVISIBLE; - - static int aMaxRadius = 5; - for(int aRadius = 1; aRadius < aMaxRadius; aRadius++){ - int aStartDX[2] = {aDX0 - aRadius, aDX1 - aRadius}; - for(int i = 0; i <= aRadius; i++){ - int aRet = Check(aZPtr,theSelection,theTolerance,aDX[2],aStartDX[0]++,aStartDX[1]); - if(aRet > 0) - goto ADD_VISIBLE; - if(aRet < 0) - goto ADD_INVISIBLE; - } - for(int i = 0; i <= aRadius; i++){ - int aRet = Check(aZPtr,theSelection,theTolerance,aDX[2],aStartDX[0],aStartDX[1]++); - if(aRet > 0) - goto ADD_VISIBLE; - if(aRet < 0) - goto ADD_INVISIBLE; - } - for(int i = 0; i <= aRadius; i++){ - int aRet = Check(aZPtr,theSelection,theTolerance,aDX[2],aStartDX[0]--,aStartDX[1]); - if(aRet > 0) - goto ADD_VISIBLE; - if(aRet < 0) - goto ADD_INVISIBLE; - } - for(int i = 0; i <= aRadius; i++){ - int aRet = Check(aZPtr,theSelection,theTolerance,aDX[2],aStartDX[0],aStartDX[1]--); - if(aRet > 0) - goto ADD_VISIBLE; - if(aRet < 0) - goto ADD_INVISIBLE; - } - } - if(false) - ADD_VISIBLE : theVisibleIds.push_back(aPntId); - if(false) - ADD_INVISIBLE : theInVisibleIds.push_back(aPntId); - } - }//for all points - - aMatrix->Delete(); - - if(aZPtr) - delete [] aZPtr; - } - - - //---------------------------------------------------------------------------- - inline - void - GetCenter(const vtkFloatingPointType theBounds[6], - vtkFloatingPointType theCenter[3]) - { - theCenter[0] = (theBounds[1] + theBounds[0]) / 2.0; - theCenter[1] = (theBounds[3] + theBounds[2]) / 2.0; - theCenter[2] = (theBounds[5] + theBounds[4]) / 2.0; - } - - void - SelectVisibleCells(int theSelection[4], - vtkRenderer *theRenderer, - vtkDataSet *theInput, - SVTK_RectPicker::TVectorIds& theVectorIds, - vtkFloatingPointType theTolerance) - { - theVectorIds.clear(); - - vtkIdType aNumCells = theInput->GetNumberOfCells(); - if(aNumCells < 1) - return; - - theVectorIds.reserve(aNumCells/2 + 1); - - SVTK_RectPicker::TVectorIds aVisiblePntIds; - SVTK_RectPicker::TVectorIds anInVisiblePntIds; - SelectVisiblePoints(theSelection, - theRenderer, - theInput, - aVisiblePntIds, - anInVisiblePntIds, - theTolerance); - - typedef std::set TIdsSet; - TIdsSet aVisibleIds(aVisiblePntIds.begin(),aVisiblePntIds.end()); - TIdsSet anInVisibleIds(anInVisiblePntIds.begin(),anInVisiblePntIds.end()); - - // Grab the composite perspective transform. This matrix is used to convert - // each point to view coordinates. vtkRenderer provides a WorldToView() - // method but it computes the composite perspective transform each time - // 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)); - - for(vtkIdType aCellId = 0; aCellId < aNumCells; aCellId++){ - vtkCell* aCell = theInput->GetCell(aCellId); - - vtkFloatingPointType aBounds[6]; - aCell->GetBounds(aBounds); - - vtkFloatingPointType aCenter[3]; - GetCenter(aBounds,aCenter); - - vtkFloatingPointType aView[4]; - vtkFloatingPointType aX[4] = {aCenter[0], aCenter[1], aCenter[2], 1.0}; - aMatrix->MultiplyPoint(aX,aView); - - if(aView[3] == 0.0) - continue; - - theRenderer->SetViewPoint(aView[0]/aView[3], - aView[1]/aView[3], - aView[2]/aView[3]); - theRenderer->ViewToDisplay(); - - vtkFloatingPointType aDX[3]; - theRenderer->GetDisplayPoint(aDX); - - // check whether visible and in selection window - if(aDX[0] >= theSelection[0] && aDX[0] <= theSelection[2] && - aDX[1] >= theSelection[1] && aDX[1] <= theSelection[3]) - { - - //cout<<"aCellId = "<GetNumberOfPoints(); - bool anIsVisible = true; - for(vtkIdType anId = 0; anId < aNumPts; anId++){ - vtkIdType aPntId = aCell->GetPointId(anId); - //cout<SetDisplayPoint(theSelectionX, theSelectionY, theSelectionZ); - theRenderer->DisplayToWorld(); - vtkFloatingPointType* aWorldCoords = theRenderer->GetWorldPoint(); - if ( aWorldCoords[3] != 0.0 ) { - for (int i=0; i < 3; i++) { - thePickPosition[i] = aWorldCoords[i] / aWorldCoords[3]; - } - } - } -} - -vtkStandardNewMacro(SVTK_RectPicker); - -SVTK_RectPicker -::SVTK_RectPicker() -{ - this->Tolerance = 0.005; - this->PickPoints = 1; -} - -SVTK_RectPicker -::~SVTK_RectPicker() -{} - -int -SVTK_RectPicker -::Pick(vtkFloatingPointType, - vtkFloatingPointType, - vtkFloatingPointType, - vtkRenderer*) -{ - return 0; -} - -int -SVTK_RectPicker -::Pick(vtkFloatingPointType theSelection[3], - vtkFloatingPointType theSelection2[3], - vtkRenderer *theRenderer) -{ - return Pick(theSelection[0], theSelection[1], theSelection[2], - theSelection2[0], theSelection2[1], theSelection2[2], - theRenderer); -} - -int -SVTK_RectPicker -::Pick(vtkFloatingPointType theSelectionX, - vtkFloatingPointType theSelectionY, - vtkFloatingPointType theSelectionZ, - vtkFloatingPointType theSelectionX2, - vtkFloatingPointType theSelectionY2, - vtkFloatingPointType theSelectionZ2, - vtkRenderer *theRenderer) -{ - // Initialize picking process - this->Initialize(); - myCellIdsMap.clear(); - myPointIdsMap.clear(); - this->Renderer = theRenderer; - - // Get camera focal point and position. Convert to display (screen) - // coordinates. We need a depth value for z-buffer. - // - vtkCamera* aCamera = theRenderer->GetActiveCamera(); - - vtkFloatingPointType aCameraFP[4]; - aCamera->GetFocalPoint(aCameraFP); - aCameraFP[3] = 1.0; - - theRenderer->SetWorldPoint(aCameraFP); - theRenderer->WorldToDisplay(); - vtkFloatingPointType* aDisplayCoords = theRenderer->GetDisplayPoint(); - vtkFloatingPointType aSelectionZ = aDisplayCoords[2]; - - this->SelectionPoint[0] = theSelectionX; - this->SelectionPoint[1] = theSelectionY; - this->SelectionPoint[2] = theSelectionZ; - - // Convert the selection point into world coordinates. - // - CalculatePickPosition(theRenderer, - theSelectionX, - theSelectionY, - aSelectionZ, - this->PickPosition); - - this->SelectionPoint2[0] = theSelectionX2; - this->SelectionPoint2[1] = theSelectionY2; - this->SelectionPoint2[2] = theSelectionZ2; - - // Convert the selection point into world coordinates. - // - CalculatePickPosition(theRenderer, - theSelectionX2, - theSelectionY2, - aSelectionZ, - this->PickPosition2); - - // Invoke start pick method if defined - this->InvokeEvent(vtkCommand::StartPickEvent,NULL); - - vtkPropCollection *aProps; - if ( this->PickFromList ) - aProps = this->GetPickList(); - else - aProps = theRenderer->GetProps(); - - aProps->InitTraversal(); - while ( vtkProp* aProp = aProps->GetNextProp() ) { - aProp->InitPathTraversal(); - while ( vtkAssemblyPath* aPath = aProp->GetNextPath() ) { - vtkMapper *aMapper = NULL; - bool anIsPickable = false; - vtkActor* anActor = NULL; - vtkProp *aPropCandidate = aPath->GetLastNode()->GetProp(); - if ( aPropCandidate->GetPickable() && aPropCandidate->GetVisibility() ) { - anIsPickable = true; - anActor = vtkActor::SafeDownCast(aPropCandidate); - if ( anActor ) { - aMapper = anActor->GetMapper(); - if ( anActor->GetProperty()->GetOpacity() <= 0.0 ) - anIsPickable = false; - } - } - if ( anIsPickable && aMapper && aMapper->GetInput()) { - int aSelectionPoint[4] = {int(theSelectionX), - int(theSelectionY), - int(theSelectionX2), - int(theSelectionY2)}; - if ( this->PickPoints ) { - TVectorIds& aVisibleIds = myPointIdsMap[anActor]; - TVectorIds anInVisibleIds; - SelectVisiblePoints(aSelectionPoint, - theRenderer, - aMapper->GetInput(), - aVisibleIds, - anInVisibleIds, - this->Tolerance); - if ( aVisibleIds.empty() ) { - myPointIdsMap.erase(myPointIdsMap.find(anActor)); - } - } else { - TVectorIds& aVectorIds = myCellIdsMap[anActor]; - SelectVisibleCells(aSelectionPoint, - theRenderer, - aMapper->GetInput(), - aVectorIds, - this->Tolerance); - if ( aVectorIds.empty() ) { - myCellIdsMap.erase(myCellIdsMap.find(anActor)); - } - } - } - } - } - - // Invoke end pick method if defined - this->InvokeEvent(vtkCommand::EndPickEvent,NULL); - - return myPointIdsMap.empty() || myCellIdsMap.empty(); -} - - -const SVTK_RectPicker::TVectorIdsMap& -SVTK_RectPicker -::GetPointIdsMap() const -{ - return myPointIdsMap; -} - -const SVTK_RectPicker::TVectorIdsMap& -SVTK_RectPicker -::GetCellIdsMap() const -{ - return myCellIdsMap; -} - diff --git a/src/SVTK/SVTK_RectPicker.h b/src/SVTK/SVTK_RectPicker.h deleted file mode 100644 index 3a6576edb..000000000 --- a/src/SVTK/SVTK_RectPicker.h +++ /dev/null @@ -1,130 +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 : SVTK_RectPicker.h -// Author : -// Module : SALOME - -#ifndef __SVTK_RectPicker_h -#define __SVTK_RectPicker_h - -#include "SVTK.h" -#include "VTKViewer.h" - -#include -#include - -#include - -class vtkRenderer; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*! \class vtkAbstractPropPicker - * \brief For more information see VTK documentation - */ -/*! \class SVTK_RectPicker - * \brief Rectangular picker class. - */ -class SVTK_EXPORT SVTK_RectPicker : public vtkAbstractPropPicker -{ - public: - static - SVTK_RectPicker *New(); - - vtkTypeMacro(SVTK_RectPicker,vtkAbstractPropPicker); - - /*! - Specify tolerance for performing pick operation. Tolerance is specified - as fraction of rendering window size. (Rendering window size is measured - across diagonal.) - */ - vtkSetMacro(Tolerance,vtkFloatingPointType); - vtkGetMacro(Tolerance,vtkFloatingPointType); - - //! Use these methods to pick points or points and cells - vtkSetMacro(PickPoints,int); - vtkGetMacro(PickPoints,int); - vtkBooleanMacro(PickPoints,int); - - virtual - int - Pick(vtkFloatingPointType theSelectionX, - vtkFloatingPointType theSelectionY, - vtkFloatingPointType theSelectionZ, - vtkFloatingPointType theSelectionX2, - vtkFloatingPointType theSelectionY2, - vtkFloatingPointType theSelectionZ2, - vtkRenderer *theRenderer); - - int - Pick(vtkFloatingPointType theSelection[3], - vtkFloatingPointType theSelection2[3], - vtkRenderer *theRenderer); - - typedef std::vector TVectorIds; - typedef std::map TVectorIdsMap; - - const TVectorIdsMap& - GetPointIdsMap() const; - - const TVectorIdsMap& - GetCellIdsMap() const; - - protected: - SVTK_RectPicker(); - ~SVTK_RectPicker(); - - //! tolerance for computation (% of window) - vtkFloatingPointType Tolerance; - - //! use the following to control picking mode - int PickPoints; - - //! second rectangle selection point in window (pixel) coordinates - vtkFloatingPointType SelectionPoint2[3]; - - //! second rectangle selection point in world coordinates - vtkFloatingPointType PickPosition2[3]; - - TVectorIdsMap myPointIdsMap; - TVectorIdsMap myCellIdsMap; - - private: - virtual - int - Pick(vtkFloatingPointType, - vtkFloatingPointType, - vtkFloatingPointType, - vtkRenderer*); -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif - - diff --git a/src/SVTK/SVTK_RenderWindowInteractor.cxx b/src/SVTK/SVTK_RenderWindowInteractor.cxx deleted file mode 100644 index 647fbc554..000000000 --- a/src/SVTK/SVTK_RenderWindowInteractor.cxx +++ /dev/null @@ -1,783 +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 : -// Author : -// Module : SALOME -// $Header$ - -#include "SVTK_RenderWindowInteractor.h" -#include "SVTK_GenericRenderWindowInteractor.h" - -#include "SVTK_InteractorStyle.h" -#include "SVTK_Renderer.h" -#include "SVTK_Functor.h" -#include "SALOME_Actor.h" - -#include "SVTK_SpaceMouse.h" -#include "SVTK_Event.h" - -#include "VTKViewer_Algorithm.h" - -// VTK Includes -#include -#include -#include -#include -#include -#include -#include -#include - -// QT Includes -#include -#include -#include -#include - -using namespace std; - -static bool GENERATE_SUIT_EVENTS = false; -static bool FOCUS_UNDER_MOUSE = false; - - -/*! - Constructor -*/ -QVTK_RenderWindowInteractor -::QVTK_RenderWindowInteractor(QWidget* theParent, - const char* theName): - QWidget(theParent,theName,Qt::WNoAutoErase), - myRenderWindow(vtkRenderWindow::New()) -{ - setMouseTracking(true); - - myRenderWindow->Delete(); - myRenderWindow->DoubleBufferOn(); - -#ifndef WNT - myRenderWindow->SetDisplayId((void*)x11Display()); -#endif - myRenderWindow->SetWindowId((void*)winId()); -} - -/*! - To initialize by vtkGenericRenderWindowInteractor instance -*/ -void -QVTK_RenderWindowInteractor -::Initialize(vtkGenericRenderWindowInteractor* theDevice) -{ - if ( GetDevice() ) - myDevice->SetRenderWindow( NULL ); - - myDevice = theDevice; - - if ( theDevice ) - theDevice->SetRenderWindow( getRenderWindow() ); -} - -/*! - Destructor -*/ -QVTK_RenderWindowInteractor -::~QVTK_RenderWindowInteractor() -{ -#ifndef WIN32 - SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance(); - if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() ) - aSpaceMouse->close( x11Display() ); -#endif -} - - -/*! - \return corresponding render window interactor -*/ -vtkGenericRenderWindowInteractor* -QVTK_RenderWindowInteractor -::GetDevice() -{ - return myDevice.GetPointer(); -} - -/*! - \return corresponding render window -*/ -vtkRenderWindow* -QVTK_RenderWindowInteractor -::getRenderWindow() -{ - return myRenderWindow.GetPointer(); -} - -/*! - Just to simplify usage of its device (vtkGenericRenderWindowInteractor) -*/ -void -QVTK_RenderWindowInteractor -::InvokeEvent(unsigned long theEvent, void* theCallData) -{ - GetDevice()->InvokeEvent(theEvent,theCallData); -} - -/*! - Need for initial contents display on Win32 -*/ -void -QVTK_RenderWindowInteractor -::show() -{ - QWidget::show(); - update(); // needed for initial contents display on Win32 -} - -/*! - To implement final initialization, just before the widget is displayed -*/ -void -QVTK_RenderWindowInteractor -::polish() -{ - // Final initialization just before the widget is displayed - GetDevice()->SetSize(width(),height()); - if(!GetDevice()->GetInitialized() && GetDevice()->GetRenderWindow()){ - GetDevice()->Initialize(); - GetDevice()->ConfigureEvent(); - } -} - -/*! - To adjust widget and vtkRenderWindow size -*/ -void -QVTK_RenderWindowInteractor -::resize(int w, int h) -{ - GetDevice()->UpdateSize(w,h); -} - -/*! - Custom paint event handler -*/ -void -QVTK_RenderWindowInteractor -::paintEvent( QPaintEvent* theEvent ) -{ - GetDevice()->CreateTimer(VTKI_TIMER_FIRST); -} - - -/*! - Custom resize event handler -*/ -void -QVTK_RenderWindowInteractor -::resizeEvent( QResizeEvent* theEvent ) -{ - int* aSize = getRenderWindow()->GetSize(); - int aWidth = aSize[0]; - int aHeight = aSize[1]; - - GetDevice()->UpdateSize(width(),height()); - - if(isVisible() && aWidth && aHeight){ - if( aWidth != width() || aHeight != height() ) { - vtkRendererCollection * aRenderers = getRenderWindow()->GetRenderers(); - aRenderers->InitTraversal(); - double aCoeff = 1.0; - if(vtkRenderer *aRenderer = aRenderers->GetNextItem()) { - vtkCamera *aCamera = aRenderer->GetActiveCamera(); - double aScale = aCamera->GetParallelScale(); - if((aWidth - width())*(aHeight - height()) > 0) - aCoeff = sqrt(double(aWidth)/double(width())*double(height())/double(aHeight)); - else - aCoeff = double(aWidth)/double(width()); - aCamera->SetParallelScale(aScale*aCoeff); - } - } - } - - update(); -} - - - -/*! - Custom context menu event handler -*/ -void -QVTK_RenderWindowInteractor -::contextMenuEvent( QContextMenuEvent* event ) -{} - -/*! - Custom mouse move event handler -*/ -void -QVTK_RenderWindowInteractor -::mouseMoveEvent( QMouseEvent* event ) -{ - GetDevice()->SetEventInformationFlipY(event->x(), - event->y(), - event->state() & ControlButton, - event->state() & ShiftButton); - GetDevice()->MouseMoveEvent(); -} - - -/*! - Custom mouse press event handler -*/ -void -QVTK_RenderWindowInteractor -::mousePressEvent( QMouseEvent* event ) -{ - GetDevice()->SetEventInformationFlipY(event->x(), - event->y(), - event->state() & ControlButton, - event->state() & ShiftButton); - if( event->button() & LeftButton ) - GetDevice()->LeftButtonPressEvent(); - else if( event->button() & MidButton ) - GetDevice()->MiddleButtonPressEvent(); - else if( event->button() & RightButton ) - GetDevice()->RightButtonPressEvent(); -} - - -/*! - Custom mouse release event handler -*/ -void -QVTK_RenderWindowInteractor -::mouseReleaseEvent( QMouseEvent *event ) -{ - GetDevice()->SetEventInformationFlipY(event->x(), - event->y(), - event->state() & ControlButton, - event->state() & ShiftButton); - - if( event->button() & LeftButton ) - GetDevice()->LeftButtonReleaseEvent(); - else if( event->button() & MidButton ) - GetDevice()->MiddleButtonReleaseEvent(); - else if( event->button() & RightButton ) - GetDevice()->RightButtonReleaseEvent(); -} - - -/*! - Custom mouse double click event handler -*/ -void -QVTK_RenderWindowInteractor -::mouseDoubleClickEvent( QMouseEvent* event ) -{} - - -/*! - Custom mouse wheel event handler -*/ -void -QVTK_RenderWindowInteractor -::wheelEvent( QWheelEvent* event ) -{ - setActiveWindow(); - setFocus(); -} - - -/*! - Custom key press event handler -*/ -void -QVTK_RenderWindowInteractor -::keyPressEvent( QKeyEvent* event ) -{ - GetDevice()->SetKeyEventInformation(event->state() & ControlButton, - event->state() & ShiftButton, - event->key()); - GetDevice()->KeyPressEvent(); - GetDevice()->CharEvent(); -} - -/*! - Custom key release event handler -*/ -void -QVTK_RenderWindowInteractor -::keyReleaseEvent( QKeyEvent * event ) -{ - GetDevice()->SetKeyEventInformation(event->state() & ControlButton, - event->state() & ShiftButton, - event->key()); - GetDevice()->KeyReleaseEvent(); -} - - -/*! - Custom enter event handler -*/ -void -QVTK_RenderWindowInteractor -::enterEvent( QEvent* event ) -{ - if(FOCUS_UNDER_MOUSE){ - setActiveWindow(); - setFocus(); - } - GetDevice()->EnterEvent(); -} - -/*! - Custom leave event handler -*/ -void -QVTK_RenderWindowInteractor -::leaveEvent( QEvent * ) -{ - GetDevice()->LeaveEvent(); -} - -/*! - Reimplemented from QWidget in order to set window - receiver - of space mouse events. -*/ -void -QVTK_RenderWindowInteractor -::focusInEvent( QFocusEvent* event ) -{ - QWidget::focusInEvent( event ); - -#ifndef WIN32 - // register set space mouse events receiver - 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 -} - -/*! - Reimplemented from QWidget in order to set window - receiver - of space mouse events. -*/ -void -QVTK_RenderWindowInteractor -::focusOutEvent ( QFocusEvent* event ) -{ - QWidget::focusOutEvent( event ); - -#ifndef WIN32 - // unregister set space mouse events receiver - 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) -*/ -bool -QVTK_RenderWindowInteractor -::x11Event( XEvent *xEvent ) -{ - // handle 3d space mouse events - 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; - } - return true; // stop handling the event - } - } - - return QWidget::x11Event( xEvent ); -} - -#endif - -/*! - Constructor -*/ -SVTK_RenderWindowInteractor -::SVTK_RenderWindowInteractor(QWidget* theParent, - const char* theName): - QVTK_RenderWindowInteractor(theParent,theName), - myEventCallbackCommand(vtkCallbackCommand::New()) -{ - myEventCallbackCommand->Delete(); - - myEventCallbackCommand->SetClientData(this); - myPriority = 0.0; - - myEventCallbackCommand->SetCallback(SVTK_RenderWindowInteractor::ProcessEvents); -} - -/*! - To initialize properly the class -*/ -void -SVTK_RenderWindowInteractor -::Initialize(vtkGenericRenderWindowInteractor* theDevice, - SVTK_Renderer* theRenderer, - SVTK_Selector* theSelector) -{ - QVTK_RenderWindowInteractor::Initialize(theDevice); - SetRenderer(theRenderer); - SetSelector(theSelector); -} - -/*! - Destructor -*/ -SVTK_RenderWindowInteractor -::~SVTK_RenderWindowInteractor() -{ - // Sequence of the destruction call are fixed and should be changed. - // vtkRenderWindow instance should be destroyed after all vtkRenderer's - GetDevice()->SetInteractorStyle(NULL); - while(!myInteractorStyles.empty()){ - const PInteractorStyle& aStyle = myInteractorStyles.top(); - aStyle->SetInteractor(NULL); - myInteractorStyles.pop(); - } - - SetRenderer(NULL); - - GetDevice()->SetRenderWindow(NULL); -} - -/*! - To get corresponding SVTK_Renderer instance -*/ -SVTK_Renderer* -SVTK_RenderWindowInteractor -::GetRenderer() -{ - return myRenderer.GetPointer(); -} - -/*! - To get corresponding SVTK_Renderer device (just to simplify collobaration with SVTK_Renderer) -*/ -vtkRenderer* -SVTK_RenderWindowInteractor -::getRenderer() -{ - return GetRenderer()->GetDevice(); -} - -/*! - Changes renderer - \param theRenderer - new renderer -*/ -void -SVTK_RenderWindowInteractor -::SetRenderer(SVTK_Renderer* theRenderer) -{ - if(theRenderer == myRenderer.GetPointer()) - return; - - if(GetRenderer()) - myRenderWindow->RemoveRenderer(getRenderer()); - - myRenderer = theRenderer; - - if(GetRenderer()) - myRenderWindow->AddRenderer(getRenderer()); -} - - -/*! - Changes interactor style - \param theStyle - new interactor style -*/ -void -SVTK_RenderWindowInteractor -::InitInteractorStyle(vtkInteractorStyle* theStyle) -{ - GetDevice()->SetInteractorStyle(theStyle); -} - -/*! - To change current interactor style by pushing the new one into the container -*/ -void -SVTK_RenderWindowInteractor -::PushInteractorStyle(vtkInteractorStyle* theStyle) -{ - myInteractorStyles.push(PInteractorStyle(theStyle)); - InitInteractorStyle(theStyle); -} - -/*! - To restore previous interactor style -*/ -void -SVTK_RenderWindowInteractor -::PopInteractorStyle() -{ - if(GetInteractorStyle()) - myInteractorStyles.pop(); - - if(GetInteractorStyle()) - InitInteractorStyle(GetInteractorStyle()); -} - -/*! - To get current interactor style -*/ -vtkInteractorStyle* -SVTK_RenderWindowInteractor -::GetInteractorStyle() -{ - return myInteractorStyles.empty() ? 0 : myInteractorStyles.top().GetPointer(); -} - - -/*! - To get current selector -*/ -SVTK_Selector* -SVTK_RenderWindowInteractor -::GetSelector() -{ - return mySelector.GetPointer(); -} - - -/*! - Changes selector - \param theSelector - new selector -*/ -void -SVTK_RenderWindowInteractor -::SetSelector(SVTK_Selector* theSelector) -{ - if(mySelector.GetPointer()) - mySelector->RemoveObserver(myEventCallbackCommand.GetPointer()); - - mySelector = theSelector; - - if(mySelector.GetPointer()) - mySelector->AddObserver(vtkCommand::EndPickEvent, - myEventCallbackCommand.GetPointer(), - myPriority); -} - -/*! - Main process VTK event method -*/ -void -SVTK_RenderWindowInteractor -::ProcessEvents(vtkObject* vtkNotUsed(theObject), - unsigned long theEvent, - void* theClientData, - void* vtkNotUsed(theCallData)) -{ - SVTK_RenderWindowInteractor* self = reinterpret_cast(theClientData); - - switch(theEvent){ - case vtkCommand::EndPickEvent: - self->onEmitSelectionChanged(); - break; - } -} - -/*! - To change selection mode (just to simplify collobaration with SVTK_Selector) -*/ -void -SVTK_RenderWindowInteractor -::SetSelectionMode(Selection_Mode theMode) -{ - mySelector->SetSelectionMode(theMode); -} - -/*! - To get current selection mode (just to simplify collobaration with SVTK_Selector) -*/ -Selection_Mode -SVTK_RenderWindowInteractor -::SelectionMode() const -{ - return mySelector->SelectionMode(); -} - - -/*! - Emits signal selectionChanged() -*/ -void -SVTK_RenderWindowInteractor -::onEmitSelectionChanged() -{ - return emit selectionChanged(); -} - - -/*! - Custom mouse move event handler -*/ -void -SVTK_RenderWindowInteractor -::mouseMoveEvent( QMouseEvent* event ) -{ - QVTK_RenderWindowInteractor::mouseMoveEvent(event); - - if(GENERATE_SUIT_EVENTS) - emit MouseMove( event ); -} - - -/*! - Custom mouse press event handler -*/ -void -SVTK_RenderWindowInteractor -::mousePressEvent( QMouseEvent* event ) -{ - QVTK_RenderWindowInteractor::mousePressEvent(event); - - if(GENERATE_SUIT_EVENTS) - emit MouseButtonPressed( event ); -} - - -/*! - Custom mouse release event handler -*/ -void -SVTK_RenderWindowInteractor -::mouseReleaseEvent( QMouseEvent *event ) -{ - QVTK_RenderWindowInteractor::mouseReleaseEvent(event); - - if(GENERATE_SUIT_EVENTS) - emit MouseButtonReleased( event ); -} - - -/*! - Custom mouse double click event handler -*/ -void -SVTK_RenderWindowInteractor -::mouseDoubleClickEvent( QMouseEvent* event ) -{ - QVTK_RenderWindowInteractor::mouseDoubleClickEvent(event); - - if(GENERATE_SUIT_EVENTS) - emit MouseDoubleClicked( event ); -} - - -/*! - Custom mouse wheel event handler -*/ -void -SVTK_RenderWindowInteractor -::wheelEvent( QWheelEvent* event ) -{ - QVTK_RenderWindowInteractor::wheelEvent(event); - - if(event->delta() > 0) - GetDevice()->InvokeEvent(SVTK::ZoomInEvent,NULL); - else - GetDevice()->InvokeEvent(SVTK::ZoomOutEvent,NULL); - - if(GENERATE_SUIT_EVENTS) - emit WheelMoved( event ); -} - -/*! - Custom key press event handler -*/ -void -SVTK_RenderWindowInteractor -::keyPressEvent( QKeyEvent* event ) -{ - QVTK_RenderWindowInteractor::keyPressEvent(event); - - if(GENERATE_SUIT_EVENTS) - emit KeyPressed( event ); -} - -/*! - Custom key release event handler -*/ -void -SVTK_RenderWindowInteractor -::keyReleaseEvent( QKeyEvent * event ) -{ - QVTK_RenderWindowInteractor::keyReleaseEvent(event); - - if(GENERATE_SUIT_EVENTS) - emit KeyReleased( event ); -} - -/*! - Custom context menu event handler -*/ -void -SVTK_RenderWindowInteractor -::contextMenuEvent( QContextMenuEvent* event ) -{ - if( !( event->state() & KeyButtonMask ) ) - emit contextMenuRequested( event ); -} diff --git a/src/SVTK/SVTK_RenderWindowInteractor.h b/src/SVTK/SVTK_RenderWindowInteractor.h deleted file mode 100644 index dd6a52502..000000000 --- a/src/SVTK/SVTK_RenderWindowInteractor.h +++ /dev/null @@ -1,264 +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 : -// Author : -// Module : SALOME -// $Header$ - -#ifndef SVTK_RenderWindowInteractor_h -#define SVTK_RenderWindowInteractor_h - -#include "SVTK.h" -#include "SVTK_Selection.h" - -#include -#include - -// undefining min and max because CASCADE's defines them and -// it clashes with std::min(), std::max() -#undef min -#undef max - -#include - -class vtkGenericRenderWindowInteractor; -class vtkInteractorStyle; -class vtkCallbackCommand; -class vtkRenderWindow; -class vtkRenderer; -class vtkObject; - -class SVTK_Selector; -class SVTK_Renderer; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*! - \class QVTK_RenderWindowInteractor - Implements Qt based vtkRenderWindowInteractor. - The class inherits #QWidget class in order to be possible process Qt events. - It invokes corresponding VTK events through usage of its device - a #vtkGenericRenderWindowInteractor. - Also, it creates, initialize and holds vtkRenderWindow instance. -*/ -class SVTK_EXPORT QVTK_RenderWindowInteractor: public QWidget -{ - Q_OBJECT; - - public: - QVTK_RenderWindowInteractor(QWidget* theParent, - const char* theName); - - ~QVTK_RenderWindowInteractor(); - - //! To initialize by #vtkGenericRenderWindowInteractor instance - virtual - void - Initialize(vtkGenericRenderWindowInteractor* theDevice); - - vtkGenericRenderWindowInteractor* - GetDevice(); - - vtkRenderWindow* - getRenderWindow(); - - //! Just to simplify usage of its device (#vtkGenericRenderWindowInteractor) - virtual - void - InvokeEvent(unsigned long theEvent, void* theCallData); - - public slots: - //! Need for initial contents display on Win32 - virtual void show(); - - //! To implement final initialization, just before the widget is displayed - virtual void polish(); - - //! To adjust widget and vtkRenderWindow size - virtual void resize(int w, int h); - - protected: - virtual void paintEvent( QPaintEvent* ); - virtual void resizeEvent( QResizeEvent* ); - - virtual void mouseMoveEvent( QMouseEvent* ); - virtual void mousePressEvent( QMouseEvent* ); - virtual void mouseReleaseEvent( QMouseEvent* ); - virtual void mouseDoubleClickEvent( QMouseEvent* ); - virtual void wheelEvent( QWheelEvent* ); - virtual void keyPressEvent( QKeyEvent* ); - virtual void keyReleaseEvent( QKeyEvent* ); - virtual void enterEvent( QEvent * ); - virtual void leaveEvent( QEvent * ); - - virtual void contextMenuEvent( QContextMenuEvent * e ); - - // reimplemented from QWidget in order to set window - receiver - // of space mouse events. - virtual void focusInEvent( QFocusEvent* ); - virtual void focusOutEvent( QFocusEvent* ); - - //! 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; -}; - - -//! Extends QVTK_RenderWindowInteractor functionality. -/*! - \class SVTK_RenderWindowInteractor - Implements such features as - support of selection, - run-time interactor style management, - one render window per one renderer collaboration and - SUIT_ViewWindow events invocation. -*/ -class SVTK_EXPORT SVTK_RenderWindowInteractor: public QVTK_RenderWindowInteractor -{ - Q_OBJECT; - - public: - SVTK_RenderWindowInteractor(QWidget* theParent, - const char* theName); - - ~SVTK_RenderWindowInteractor(); - - //! To initialize properly the class - virtual - void - Initialize(vtkGenericRenderWindowInteractor* theDevice, - SVTK_Renderer* theRenderer, - SVTK_Selector* theSelector); - - //---------------------------------------------------------------------------- - //! To get corresponding SVTK_Renderer instance - SVTK_Renderer* - GetRenderer(); - - //! To get corresponding SVTK_Renderer device (just to simplify collobaration with SVTK_Renderer) - vtkRenderer* - getRenderer(); - - //---------------------------------------------------------------------------- - //! To get current interactor style - vtkInteractorStyle* - GetInteractorStyle(); - - //! To change current interactor style by pushing the new one into the container - void - PushInteractorStyle(vtkInteractorStyle* theStyle); - - //! To restore previous interactor style - void - PopInteractorStyle(); - - //---------------------------------------------------------------------------- - //! To get corresponding SVTK_Selector - SVTK_Selector* - GetSelector(); - - //! To get current selection mode (just to simplify collobaration with SVTK_Selector) - Selection_Mode - SelectionMode() const; - - //! To change selection mode (just to simplify collobaration with SVTK_Selector) - void - SetSelectionMode(Selection_Mode theMode); - - public: - //! To transform vtkCommand::EndPickEvent to Qt selectionChanged signal - void - onEmitSelectionChanged(); - - public: - signals: - void MouseMove( QMouseEvent* ); - void MouseButtonPressed( QMouseEvent* ); - void MouseButtonReleased( QMouseEvent* ); - void MouseDoubleClicked( QMouseEvent* ); - void ButtonPressed(const QMouseEvent *event); - void ButtonReleased(const QMouseEvent *event); - void WheelMoved( QWheelEvent* ); - void KeyPressed( QKeyEvent* ); - void KeyReleased( QKeyEvent* ); - void contextMenuRequested( QContextMenuEvent *e ); - - void selectionChanged(); - - protected: - virtual void mouseMoveEvent( QMouseEvent* ); - virtual void mousePressEvent( QMouseEvent* ); - virtual void mouseReleaseEvent( QMouseEvent* ); - virtual void mouseDoubleClickEvent( QMouseEvent* ); - virtual void wheelEvent( QWheelEvent* ); - virtual void keyPressEvent( QKeyEvent* ); - virtual void keyReleaseEvent( QKeyEvent* ); - virtual void contextMenuEvent( QContextMenuEvent * e ); - - void - SetRenderer(SVTK_Renderer *theRenderer); - - void - SetSelector(SVTK_Selector* theSelector); - - void - InitInteractorStyle(vtkInteractorStyle* theStyle); - - //---------------------------------------------------------------- - // Main process VTK event method - static - void - ProcessEvents(vtkObject* theObject, - unsigned long theEvent, - void* theClientData, - void* theCallData); - - // Used to process VTK events - vtkSmartPointer myEventCallbackCommand; - - // Priority at which events are processed - float myPriority; - - //---------------------------------------------------------------- - vtkSmartPointer mySelector; - - vtkSmartPointer myRenderer; - - typedef vtkSmartPointer PInteractorStyle; - typedef std::stack TInteractorStyles; - TInteractorStyles myInteractorStyles; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_Renderer.cxx b/src/SVTK/SVTK_Renderer.cxx deleted file mode 100644 index d3020f1c1..000000000 --- a/src/SVTK/SVTK_Renderer.cxx +++ /dev/null @@ -1,751 +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 : -// Author : -// Module : -// $Header$ - -#include "SVTK_Renderer.h" - -#include "SVTK_Trihedron.h" -#include "SVTK_CubeAxesActor2D.h" -#include "SVTK_RectPicker.h" - -#include "SALOME_Actor.h" -#include "VTKViewer_Actor.h" -#include "VTKViewer_Transform.h" -#include "VTKViewer_Utilities.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -// undefining min and max because CASCADE's defines them and -// it clashes with std::min(), std::max() included in utilities.h -#undef min -#undef max - - -vtkStandardNewMacro(SVTK_Renderer); - -/*! - Constructor -*/ -SVTK_Renderer -::SVTK_Renderer(): - myDevice(vtkRenderer::New()), - myInteractor(NULL), - myPriority(0.0), - myEventCallbackCommand(vtkCallbackCommand::New()), - myPointPicker(vtkPointPicker::New()), - myCellPicker(vtkCellPicker::New()), - myPointRectPicker(SVTK_RectPicker::New()), - myCellRectPicker(SVTK_RectPicker::New()), - myPreHighlightProperty(vtkProperty::New()), - myHighlightProperty(vtkProperty::New()), - myTransform(VTKViewer_Transform::New()), - myCubeAxes(SVTK_CubeAxesActor2D::New()), - myTrihedron(SVTK_Trihedron::New()), - myTrihedronSize(105), - myIsTrihedronRelative(true) -{ - myDevice->Delete(); - myTransform->Delete(); - - SetSelectionTolerance(); - - myPointPicker->Delete(); - myCellPicker->Delete(); - - myPointRectPicker->Delete(); - myPointRectPicker->PickFromListOn(); - - myCellRectPicker->Delete(); - myCellRectPicker->PickFromListOn(); - myCellRectPicker->PickPointsOff(); - - //SetPreselectionProp(); - myPreHighlightProperty->Delete(); - myPreHighlightProperty->SetColor(0,1,1); - myPreHighlightProperty->SetPointSize(SALOME_POINT_SIZE+2); - myPreHighlightProperty->SetLineWidth(SALOME_LINE_WIDTH+2); - myPreHighlightProperty->SetRepresentationToPoints(); - - //SetSelectionProp(); - myHighlightProperty->Delete(); - myHighlightProperty->SetColor(1,1,0); - myHighlightProperty->SetPointSize(SALOME_POINT_SIZE+2); - myHighlightProperty->SetLineWidth(SALOME_LINE_WIDTH+2); - myHighlightProperty->SetRepresentationToPoints(); - - myTrihedron->Delete(); - myCubeAxes->Delete(); - myEventCallbackCommand->Delete(); - - myTrihedron->AddToRender(GetDevice()); - GetDevice()->AddProp(GetCubeAxes()); - - myBndBox[0] = myBndBox[2] = myBndBox[4] = 0; - myBndBox[1] = myBndBox[3] = myBndBox[5] = myTrihedron->GetSize(); - - myCubeAxes->SetBounds(myBndBox); - myCubeAxes->SetCamera(GetDevice()->GetActiveCamera()); - - myCubeAxes->SetLabelFormat("%6.4g"); - myCubeAxes->SetFlyModeToOuterEdges(); // ENK remarks: it must bee - myCubeAxes->SetFontFactor(0.8); - myCubeAxes->SetCornerOffset(0); - myCubeAxes->SetScaling(0); - myCubeAxes->SetNumberOfLabels(5); - myCubeAxes->VisibilityOff(); - myCubeAxes->SetTransform(GetTransform()); - - vtkTextProperty* aTextProp = vtkTextProperty::New(); - aTextProp->SetColor(1, 1, 1); - aTextProp->ShadowOn(); - myCubeAxes->SetAxisTitleTextProperty(aTextProp); - myCubeAxes->SetAxisLabelTextProperty(aTextProp); - aTextProp->Delete(); - - GetDevice()->GetActiveCamera()->ParallelProjectionOn(); - GetDevice()->LightFollowCameraOn(); - GetDevice()->TwoSidedLightingOn(); - - myEventCallbackCommand->SetClientData(this); - myEventCallbackCommand->SetCallback(SVTK_Renderer::ProcessEvents); - GetDevice()->AddObserver(vtkCommand::ConfigureEvent, - myEventCallbackCommand.GetPointer(), - myPriority); - GetDevice()->AddObserver(vtkCommand::ResetCameraEvent, - myEventCallbackCommand.GetPointer(), - myPriority); - GetDevice()->AddObserver(vtkCommand::ResetCameraClippingRangeEvent, - myEventCallbackCommand.GetPointer(), - myPriority); -} - -/*! - Destructor -*/ -SVTK_Renderer -::~SVTK_Renderer() -{ - vtkActorCollection* anActors = GetDevice()->GetActors(); - vtkActorCollection* anActors2 = vtkActorCollection::New(); - - anActors->InitTraversal(); - while(vtkActor* anAct = anActors->GetNextActor()){ - if(SALOME_Actor* anActor = dynamic_cast(anAct)){ - anActors2->AddItem(anActor); - } - } - - anActors2->InitTraversal(); - while(vtkActor* anAct = anActors2->GetNextActor()){ - if(SALOME_Actor* anActor = dynamic_cast(anAct)){ - RemoveActor(anActor); - } - } - - anActors2->Delete(); -} - - -/*! - Main process event method -*/ -void -SVTK_Renderer -::ProcessEvents(vtkObject* vtkNotUsed(theObject), - unsigned long theEvent, - void* theClientData, - void* vtkNotUsed(theCallData)) -{ - SVTK_Renderer* self = reinterpret_cast(theClientData); - - switch(theEvent){ - case vtkCommand::ConfigureEvent: - self->OnResetView(); - break; - case vtkCommand::ResetCameraEvent: - self->OnFitAll(); - break; - case vtkCommand::ResetCameraClippingRangeEvent: - self->OnResetClippingRange(); - break; - } -} - -/*! - \return renderer's device -*/ -vtkRenderer* -SVTK_Renderer -::GetDevice() -{ - return myDevice.GetPointer(); -} - -/*! - Initialize renderer -*/ -void -SVTK_Renderer -::Initialize(vtkRenderWindowInteractor* theInteractor, - SVTK_Selector* theSelector) -{ - myInteractor = theInteractor; - mySelector = theSelector; -} - -/*! - Publishes pointed actor into the renderer -*/ -void -SVTK_Renderer -::AddActor(VTKViewer_Actor* theActor) -{ - if(SALOME_Actor* anActor = dynamic_cast(theActor)){ - anActor->SetInteractor(myInteractor); - anActor->SetTransform(GetTransform()); - anActor->SetSelector(mySelector.GetPointer()); - - anActor->SetPointPicker(myPointPicker.GetPointer()); - anActor->SetCellPicker(myCellPicker.GetPointer()); - - anActor->SetPointRectPicker(myPointRectPicker.GetPointer()); - anActor->SetCellRectPicker(myCellRectPicker.GetPointer()); - - anActor->SetPreHighlightProperty(myPreHighlightProperty.GetPointer()); - anActor->SetHighlightProperty(myHighlightProperty.GetPointer()); - - anActor->AddToRender(GetDevice()); - AdjustActors(); - } -} - -/*! - Removes pointed actor from the renderer -*/ -void -SVTK_Renderer -::RemoveActor(VTKViewer_Actor* theActor) -{ - if(SALOME_Actor* anActor = dynamic_cast(theActor)){ - // Order of the calls are important because VTKViewer_Actor::RemoveFromRender - // can leads do destruction of the actor - anActor->SetInteractor(NULL); - anActor->SetTransform(NULL); - anActor->SetSelector(NULL); - - anActor->SetPointPicker(NULL); - anActor->SetCellPicker(NULL); - - anActor->SetPointRectPicker(NULL); - anActor->SetCellRectPicker(NULL); - - anActor->SetPreHighlightProperty(NULL); - anActor->SetHighlightProperty(NULL); - - anActor->RemoveFromRender(GetDevice()); - AdjustActors(); - } -} - -/*! - Get special container that keeps scaling of the scene -*/ -VTKViewer_Transform* -SVTK_Renderer -::GetTransform() -{ - return myTransform.GetPointer(); -} - -/*! - Allows to get a scale that is applied on the whole scene -*/ -void -SVTK_Renderer -::GetScale( double theScale[3] ) -{ - myTransform->GetMatrixScale( theScale ); -} - -/*! - Allows to apply a scale on the whole scene -*/ -void -SVTK_Renderer -::SetScale( double theScale[3] ) -{ - myTransform->SetMatrixScale( theScale[0], theScale[1], theScale[2] ); - AdjustActors(); -} - -/*! - Applies color and size (PointSize and LineWidth) of primitives in selection mode -*/ -void -SVTK_Renderer -::SetSelectionProp(const double& theRed, - const double& theGreen, - const double& theBlue, - const int& theWidth) -{ - myHighlightProperty->SetColor( theRed, theGreen, theBlue ); - myHighlightProperty->SetLineWidth( theWidth ); - myHighlightProperty->SetPointSize( theWidth ); -} - -/*! - Applies color and size (PointSize and LineWidth) of primitives in preselection mode -*/ -void -SVTK_Renderer -::SetPreselectionProp(const double& theRed, - const double& theGreen, - const double& theBlue, - const int& theWidth) -{ - myPreHighlightProperty->SetColor( theRed, theGreen, theBlue ); - myPreHighlightProperty->SetLineWidth( theWidth ); - myPreHighlightProperty->SetPointSize( theWidth ); -} - -/*! - Setup requested tolerance for the picking -*/ -void -SVTK_Renderer -::SetSelectionTolerance(const double& theTolNodes, - const double& theTolCell) -{ - myPointPicker->SetTolerance( theTolNodes ); - myCellPicker->SetTolerance( theTolCell ); - - myPointRectPicker->SetTolerance( theTolNodes ); - myCellRectPicker->SetTolerance( theTolCell ); -} - - -/*! If parameter theIsForcedUpdate is true, recalculate parameters for - * trihedron and cube axes, even if trihedron and cube axes is invisible. - */ - -inline -bool -CheckBndBox(const vtkFloatingPointType theBounds[6]) -{ - if(theBounds[0] > -VTK_LARGE_FLOAT && theBounds[1] < VTK_LARGE_FLOAT && - theBounds[2] > -VTK_LARGE_FLOAT && theBounds[3] < VTK_LARGE_FLOAT && - theBounds[4] > -VTK_LARGE_FLOAT && theBounds[5] < VTK_LARGE_FLOAT) - return true; - return false; -} - -/*! - Adjusts size of actors -*/ -bool -SVTK_Renderer -::OnAdjustActors() -{ - bool aTDisplayed = IsTrihedronDisplayed(); - bool aCDisplayed = IsCubeAxesDisplayed(); - - vtkFloatingPointType aNewBndBox[6]; - aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_LARGE_FLOAT; - aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_LARGE_FLOAT; - - int aVisibleNum = myTrihedron->GetVisibleActorCount(GetDevice()); - if(aVisibleNum){ - if(aTDisplayed) - myTrihedron->VisibilityOff(); - - if(aCDisplayed) - myCubeAxes->VisibilityOff(); - - // if the new trihedron size have sufficient difference, then apply the value - vtkFloatingPointType aSize = myTrihedron->GetSize(); - if ( IsTrihedronRelative() ) - { - ComputeTrihedronSize(GetDevice(),aSize,aSize,myTrihedronSize); - myTrihedron->SetSize(aSize); - } - else - myTrihedron->SetSize( myTrihedronSize ); - - // iterate through displayed objects and set size if necessary - vtkActorCollection* anActors = GetDevice()->GetActors(); - anActors->InitTraversal(); - while(vtkActor* anAct = anActors->GetNextActor()){ - if(SALOME_Actor* anActor = dynamic_cast(anAct)){ - if(anActor->IsResizable()) - anActor->SetSize(0.5*aSize); - if(anActor->GetVisibility() && !anActor->IsInfinitive()){ - vtkFloatingPointType *aBounds = anActor->GetBounds(); - if(CheckBndBox(aBounds)) - 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]; - } - } - } - } - - if(aTDisplayed) - myTrihedron->VisibilityOn(); - - if(aCDisplayed) - myCubeAxes->VisibilityOn(); - - }else{ - double aSize = myTrihedron->GetSize(); - aNewBndBox[0] = aNewBndBox[2] = aNewBndBox[4] = 0; - aNewBndBox[1] = aNewBndBox[3] = aNewBndBox[5] = aSize; - } - - if(CheckBndBox(aNewBndBox)){ - for(int i = 0; i < 6; i++) - myBndBox[i] = aNewBndBox[i]; - myCubeAxes->SetBounds(myBndBox); - return true; - } - - return false; -} - -/*! - Adjusts size of actors -*/ -void -SVTK_Renderer -::AdjustActors() -{ - if(OnAdjustActors()) - ::ResetCameraClippingRange(GetDevice()); -} - -/*! - Set size of the trihedron - \param theSize - new size - \param theRelative - if it is true, then size is mesured in percents from bounding box of the scene, - otherwise - in viewer units -*/ -void -SVTK_Renderer -::SetTrihedronSize(vtkFloatingPointType theSize, const bool theRelative) -{ - if(myTrihedronSize != theSize || myIsTrihedronRelative != theRelative){ - myTrihedronSize = theSize; - myIsTrihedronRelative = theRelative; - AdjustActors(); - } -} - -/*! - \return size of the trihedron in percents from bounding box of the scene -*/ -vtkFloatingPointType -SVTK_Renderer -::GetTrihedronSize() const -{ - return myTrihedronSize; -} - -/*! - \return true if the size of the trihedron is relative -*/ -bool -SVTK_Renderer -::IsTrihedronRelative() const -{ - return myIsTrihedronRelative; -} - -/*! - \return trihedron control -*/ -VTKViewer_Trihedron* -SVTK_Renderer -::GetTrihedron() -{ - return myTrihedron.GetPointer(); -} - -/*! - \return true if trihedron is displayed -*/ -bool -SVTK_Renderer -::IsTrihedronDisplayed() -{ - return myTrihedron->GetVisibility() == VTKViewer_Trihedron::eOn; -} - -/*! - Toggle trihedron visibility -*/ -void -SVTK_Renderer -::OnViewTrihedron() -{ - if(IsTrihedronDisplayed()) - myTrihedron->VisibilityOff(); - else - myTrihedron->VisibilityOn(); -} - -/*! - Adjust size of the trihedron to the bounding box of the scene -*/ -void -SVTK_Renderer -::OnAdjustTrihedron() -{ - AdjustActors(); -} - -/*! - \return graduated rules control -*/ -SVTK_CubeAxesActor2D* -SVTK_Renderer -::GetCubeAxes() -{ - return myCubeAxes.GetPointer(); -} - -/*! - \return true if graduated rules displayed -*/ -bool -SVTK_Renderer -::IsCubeAxesDisplayed() -{ - return myCubeAxes->GetVisibility() == 1; -} - -/*! - Toggle graduated rules visibility -*/ -void -SVTK_Renderer -::OnViewCubeAxes() -{ - if(IsCubeAxesDisplayed()) - myCubeAxes->VisibilityOff(); - else - myCubeAxes->VisibilityOn(); -} - -/*! - Adjust size of the graduated rules to the bounding box of the scene -*/ -void -SVTK_Renderer -::OnAdjustCubeAxes() -{ - AdjustActors(); -} - -/*! - Sets camera into predefined state -*/ -void -SVTK_Renderer -::OnResetView() -{ - int aTrihedronIsVisible = IsTrihedronDisplayed(); - int aCubeAxesIsVisible = IsCubeAxesDisplayed(); - - myTrihedron->SetVisibility( VTKViewer_Trihedron::eOnlyLineOn ); - myCubeAxes->SetVisibility(0); - - ::ResetCamera(GetDevice(),true); - vtkCamera* aCamera = GetDevice()->GetActiveCamera(); - aCamera->SetPosition(1,-1,1); - aCamera->SetViewUp(0,0,1); - ::ResetCamera(GetDevice(),true); - - if(aTrihedronIsVisible) - myTrihedron->VisibilityOn(); - else - myTrihedron->VisibilityOff(); - - if(aCubeAxesIsVisible) - myCubeAxes->VisibilityOn(); - else - myCubeAxes->VisibilityOff(); - - static vtkFloatingPointType aCoeff = 3.0; - aCamera->SetParallelScale(aCoeff*aCamera->GetParallelScale()); -} - -/*! - Fit all presentation in the scene into the window -*/ -void -SVTK_Renderer -::OnFitAll() -{ - int aTrihedronWasVisible = false; - int aCubeAxesWasVisible = false; - - aTrihedronWasVisible = IsTrihedronDisplayed(); - if(aTrihedronWasVisible) - myTrihedron->VisibilityOff(); - - aCubeAxesWasVisible = IsCubeAxesDisplayed(); - if(aCubeAxesWasVisible) - myCubeAxes->VisibilityOff(); - - if(myTrihedron->GetVisibleActorCount(GetDevice())){ - myTrihedron->VisibilityOff(); - myCubeAxes->VisibilityOff(); - ::ResetCamera(GetDevice()); - }else{ - myTrihedron->SetVisibility(VTKViewer_Trihedron::eOnlyLineOn); - myCubeAxes->SetVisibility(2); - ::ResetCamera(GetDevice(),true); - } - - if(aTrihedronWasVisible) - myTrihedron->VisibilityOn(); - else - myTrihedron->VisibilityOff(); - - if(aCubeAxesWasVisible) - myCubeAxes->VisibilityOn(); - else - myCubeAxes->VisibilityOff(); - - ::ResetCameraClippingRange(GetDevice()); -} - -/*! - Reset camera clipping range to adjust the range to the bounding box of the scene -*/ -void -SVTK_Renderer -::OnResetClippingRange() -{ - return; - ::ResetCameraClippingRange(GetDevice()); -} - -/*! - To reset direction of the camera to front view -*/ -void -SVTK_Renderer -::OnFrontView() -{ - vtkCamera* aCamera = GetDevice()->GetActiveCamera(); - aCamera->SetPosition(1,0,0); - aCamera->SetViewUp(0,0,1); - aCamera->SetFocalPoint(0,0,0); - this->OnFitAll(); -} - -/*! - To reset direction of the camera to back view -*/ -void -SVTK_Renderer -::OnBackView() -{ - vtkCamera* aCamera = GetDevice()->GetActiveCamera(); - aCamera->SetPosition(-1,0,0); - aCamera->SetViewUp(0,0,1); - aCamera->SetFocalPoint(0,0,0); - this->OnFitAll(); -} - -/*! - To reset direction of the camera to top view -*/ -void -SVTK_Renderer -::OnTopView() -{ - vtkCamera* aCamera = GetDevice()->GetActiveCamera(); - aCamera->SetPosition(0,0,1); - aCamera->SetViewUp(0,1,0); - aCamera->SetFocalPoint(0,0,0); - this->OnFitAll(); -} - -/*! - To reset direction of the camera to bottom view -*/ -void -SVTK_Renderer -::OnBottomView() -{ - vtkCamera* aCamera = GetDevice()->GetActiveCamera(); - aCamera->SetPosition(0,0,-1); - aCamera->SetViewUp(0,1,0); - aCamera->SetFocalPoint(0,0,0); - this->OnFitAll(); -} - -/*! - To reset direction of the camera to left view -*/ -void -SVTK_Renderer -::OnLeftView() -{ - vtkCamera* aCamera = GetDevice()->GetActiveCamera(); - aCamera->SetPosition(0,-1,0); - aCamera->SetViewUp(0,0,1); - aCamera->SetFocalPoint(0,0,0); - this->OnFitAll(); -} - -/*! - To reset direction of the camera to right view -*/ -void -SVTK_Renderer -::OnRightView() -{ - vtkCamera* aCamera = GetDevice()->GetActiveCamera(); - aCamera->SetPosition(0,1,0); - aCamera->SetViewUp(0,0,1); - aCamera->SetFocalPoint(0,0,0); - this->OnFitAll(); -} diff --git a/src/SVTK/SVTK_Renderer.h b/src/SVTK/SVTK_Renderer.h deleted file mode 100644 index 3e44d5fe4..000000000 --- a/src/SVTK/SVTK_Renderer.h +++ /dev/null @@ -1,258 +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 : -// Author : -// Module : SALOME -// $Header$ - -#ifndef SVTK_Renderer_h -#define SVTK_Renderer_h - -#include "SVTK.h" -#include "VTKViewer.h" - -#include -#include - -class vtkRenderer; -class vtkCallbackCommand; -class vtkRenderWindowInteractor; - -class vtkPicker; -class vtkPointPicker; -class vtkCellPicker; -class vtkProperty; - -class SVTK_RectPicker; - -class VTKViewer_Trihedron; -class VTKViewer_Transform; -class SVTK_CubeAxesActor2D; -class VTKViewer_Actor; -class SVTK_Selector; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*! - \class SVTK_Renderer - The class is a container for #vtkRenderer instance. - Main goal of the class is to apply common behaviour to all #SALOME_Actor, like - selection and preselection colors. - Also, the class is responsible for management of internal actors like trihedron an so on. - */ -class SVTK_EXPORT SVTK_Renderer : public vtkObject -{ - public: - vtkTypeMacro(SVTK_Renderer,vtkObject); - static SVTK_Renderer* New(); - - //---------------------------------------------------------------------------- - //! Get its device - vtkRenderer* - GetDevice(); - - //! Initialize the class - virtual - void - Initialize(vtkRenderWindowInteractor* theInteractor, - SVTK_Selector* theSelector); - - //---------------------------------------------------------------------------- - //! Publishes pointed actor into the renderer - virtual - void - AddActor(VTKViewer_Actor* theActor); - - //! Removes pointed actor from the renderer - virtual - void - RemoveActor(VTKViewer_Actor* theActor); - - //! Get special container that keeps scaling of the scene - VTKViewer_Transform* - GetTransform(); - - //! Allows to apply a scale on the whole scene - virtual - void - SetScale( double theScale[3] ); - - //! Allows to get a scale that is applied on the whole scene - void - GetScale( double theScale[3] ); - - //---------------------------------------------------------------------------- - //! Applies color and size (PointSize and LineWidth) of primitives in selection mode - void - SetSelectionProp(const double& theRed = 1, - const double& theGreen = 1, - const double& theBlue = 0, - const int& theWidth = 5); - - //! Applies color and size (PointSize and LineWidth) of primitives in preselection mode - void - SetPreselectionProp(const double& theRed = 0, - const double& theGreen = 1, - const double& theBlue = 1, - const int& theWidth = 5); - - //! Setup requested tolerance for the picking - void - SetSelectionTolerance(const double& theTolNodes = 0.025, - const double& theTolCell = 0.001); - - //---------------------------------------------------------------------------- - //! Adjust all intenal actors (trihedron and graduated rules) to the scene - void - AdjustActors(); - - //! Set size of the trihedron in percents from bounding box of the scene - void - SetTrihedronSize(vtkFloatingPointType theSize, const bool theRelative = true); - - //! Get size of the trihedron in percents from bounding box of the scene - vtkFloatingPointType - GetTrihedronSize() const; - - //! Shows if the size of the trihedron is relative - bool - IsTrihedronRelative() const; - - //---------------------------------------------------------------------------- - //! Get trihedron control - VTKViewer_Trihedron* - GetTrihedron(); - - //! Is trihedron displayed - bool - IsTrihedronDisplayed(); - - //! Toggle trihedron visibility - void - OnViewTrihedron(); - - //! Adjust size of the trihedron to the bounding box of the scene - void - OnAdjustTrihedron(); - - //---------------------------------------------------------------------------- - //! Get graduated rules control - SVTK_CubeAxesActor2D* - GetCubeAxes(); - - //! Is graduated rules displayed - bool - IsCubeAxesDisplayed(); - - //! Toggle graduated rules visibility - void - OnViewCubeAxes(); - - //! Adjust size of the graduated rules to the bounding box of the scene - void - OnAdjustCubeAxes(); - - //---------------------------------------------------------------------------- - //! Fit all presentation in the scene into the window - void OnFitAll(); - - //! Set camera into predefined state - void OnResetView(); - - //! Reset camera clipping range to adjust the range to the bounding box of the scene - void OnResetClippingRange(); - - //! To reset direction of the camera to front view - void OnFrontView(); - - //! To reset direction of the camera to back view - void OnBackView(); - - //! To reset direction of the camera to top view - void OnTopView(); - - //! To reset direction of the camera to bottom view - void OnBottomView(); - - //! To reset direction of the camera to right view - void OnRightView(); - - //! To reset direction of the camera to left view - void OnLeftView(); - - protected: - SVTK_Renderer(); - ~SVTK_Renderer(); - - virtual - bool - OnAdjustActors(); - - //---------------------------------------------------------------------------- - // 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); - - vtkSmartPointer myDevice; - vtkRenderWindowInteractor* myInteractor; - vtkSmartPointer mySelector; - - //---------------------------------------------------------------------------- - vtkSmartPointer myTransform; - - //---------------------------------------------------------------------------- - // Highlight/ Prehighlight devices - vtkSmartPointer myPointPicker; - vtkSmartPointer myCellPicker; - - vtkSmartPointer myPointRectPicker; - vtkSmartPointer myCellRectPicker; - - vtkSmartPointer myPreHighlightProperty; - vtkSmartPointer myHighlightProperty; - - //---------------------------------------------------------------------------- - vtkSmartPointer myCubeAxes; - vtkSmartPointer myTrihedron; - vtkFloatingPointType myTrihedronSize; - bool myIsTrihedronRelative; - vtkFloatingPointType myBndBox[6]; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_Selection.h b/src/SVTK/SVTK_Selection.h deleted file mode 100644 index 4b0b4f55d..000000000 --- a/src/SVTK/SVTK_Selection.h +++ /dev/null @@ -1,45 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Selection.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef SVTK_SELECTION_H -#define SVTK_SELECTION_H - - -//! It is possible to introduce new type of selection -typedef int Selection_Mode; - -const Selection_Mode NodeSelection = 0; -const Selection_Mode CellSelection = 1; -const Selection_Mode EdgeOfCellSelection = 2; -const Selection_Mode EdgeSelection = 3; -const Selection_Mode FaceSelection = 4; -const Selection_Mode VolumeSelection = 5; -const Selection_Mode ActorSelection = 6; - - -#endif diff --git a/src/SVTK/SVTK_SelectionEvent.h b/src/SVTK/SVTK_SelectionEvent.h deleted file mode 100644 index 75d01316f..000000000 --- a/src/SVTK/SVTK_SelectionEvent.h +++ /dev/null @@ -1,55 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SVTK_SelectionEvent.h -// Author : -// Module : SALOME -// $Header$ - -#ifndef SVTK_SELECTIONEVENT_H -#define SVTK_SELECTIONEVENT_H - -#include "SVTK_Selection.h" - -//! The structure is used for passing all infromation necessary for claculation of the selection. -/*! - The SVTK_SelectionEvent is generated by #SVTK_InteractorStyle. - In its turn the #SVTK_InteractorStyle uses for it generation #vtkRenderWindowInteractor and - #SVTK_Selector instances. - */ -struct SVTK_SelectionEvent -{ - //! Through usage of the parameter any new type of selection can be introduced - Selection_Mode mySelectionMode; - int myX; //!< Current X position of the mouse - int myY; //!< Current Y position of the mouse - int myLastX; //!< Last X position of the mouse before starting any complex operation (like rectangle selection) - int myLastY; //!< Last Y position of the mouse before starting any complex operation - bool myIsRectangle; //!< A flag to define is it necessary provide rectangle selection for current #Selection_Mode - bool myIsCtrl; //!< Is Ctrl key are pressed - bool myIsShift; //!< Is Shift key are pressed - int myKeyCode; //!< Code of the pressed key - int myRepeatCount; //!< Number of repetion of the key pressing -}; - -#endif diff --git a/src/SVTK/SVTK_Selector.cxx b/src/SVTK/SVTK_Selector.cxx deleted file mode 100644 index d93bd4b44..000000000 --- a/src/SVTK/SVTK_Selector.cxx +++ /dev/null @@ -1,517 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Selection.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - - -#include "SVTK_SelectorDef.h" - -#include "SALOME_Actor.h" - -#include -#include - -#include - -/*! - \return new SVTK_Selector -*/ -SVTK_Selector* -SVTK_Selector -::New() -{ - return new SVTK_SelectorDef(); -} - -/*! - Default constructor -*/ -SVTK_SelectorDef -::SVTK_SelectorDef() -{ - mySelectionMode = ActorSelection; -} - -/*! - Destructor -*/ -SVTK_SelectorDef -::~SVTK_SelectorDef() -{ -} - -/*! - To invoke selectionChanged signals -*/ -void -SVTK_SelectorDef -::StartPickCallback() -{ - this->InvokeEvent(vtkCommand::StartPickEvent,NULL); -} - -/*! - To invoke selectionChanged signals -*/ -void -SVTK_SelectorDef -::EndPickCallback() -{ - this->InvokeEvent(vtkCommand::EndPickEvent,NULL); -} - -/*! - To change current Selection_Mode (as outside effect, it invokes selectionChange signal) -*/ -void -SVTK_SelectorDef -::SetSelectionMode(Selection_Mode theMode) -{ - if(mySelectionMode != theMode){ - mySelectionMode = theMode; - myMapIOSubIndex.clear(); - this->EndPickCallback(); - } -} - -/*! - Clear selection -*/ -void -SVTK_SelectorDef -::ClearIObjects() -{ - myIO2Actors.clear(); - myIObjects.clear(); - myMapIOSubIndex.clear(); -} - -/*! - \return true if the SALOME_InteractiveObject presents into selection -*/ -bool -SVTK_SelectorDef -::IsSelected(const Handle(SALOME_InteractiveObject)& theIO) const -{ - return !theIO.IsNull() && (myIObjects.find(theIO) != myIObjects.end()); -} - -/*! - \return true if the SALOME_Actor presents into selection -*/ -bool -SVTK_SelectorDef -::IsSelected(SALOME_Actor* theActor) const -{ - const Handle(SALOME_InteractiveObject) anIO = theActor->getIO(); - return IsSelected(anIO) && myIO2Actors.find(anIO) != myIO2Actors.end(); -} - -/*! - \return corresponding SALOME_Actor for SALOME_InteractiveObject - \param theIO - SALOME_InteractiveObject -*/ -SALOME_Actor* -SVTK_SelectorDef -::GetActor(const Handle(SALOME_InteractiveObject)& theIO) const -{ - TIO2Actors::const_iterator anIter = myIO2Actors.find(theIO); - if(anIter != myIO2Actors.end()) - return anIter->second.GetPointer(); - return NULL; -} - -/*! - Adds SALOME_InteractiveObject into selection - \param theIO - SALOME_InteractiveObject -*/ -bool -SVTK_SelectorDef -::AddIObject(const Handle(SALOME_InteractiveObject)& theIO) -{ - if(!IsSelected(theIO)){ - myIObjects.insert(theIO); - return true; - } - return false; -} - -/*! - Adds SALOME_Actor into selection - \param theActor - SALOME_Actor -*/ -bool -SVTK_SelectorDef -::AddIObject(SALOME_Actor* theActor) -{ - const Handle(SALOME_InteractiveObject) anIO = theActor->getIO(); - - bool anIsIOBound = IsSelected(anIO); - if(!anIsIOBound) - myIObjects.insert(anIO); - - bool anIsActorBound = myIO2Actors.find(anIO) != myIO2Actors.end(); - if(!anIsActorBound) - myIO2Actors[anIO] = theActor; - - return !anIsIOBound || !anIsActorBound; -} - -/*! - Removes SALOME_InteractiveObject from selection - \param theIO - SALOME_InteractiveObject -*/ -bool -SVTK_SelectorDef -::RemoveIObject(const Handle(SALOME_InteractiveObject)& theIO) -{ - bool anIsIOBound = myIObjects.find(theIO) != myIObjects.end(); - - myIObjects.erase(theIO); - myIO2Actors.erase(theIO); - myMapIOSubIndex.erase(theIO); - - return anIsIOBound; -} - -/*! - Removes SALOME_Actor from selection - \param theActor - SALOME_Actor -*/ -bool -SVTK_SelectorDef -::RemoveIObject(SALOME_Actor* theActor) -{ - const Handle(SALOME_InteractiveObject) anIO = theActor->getIO(); - - bool anIsActorBound = myIO2Actors.find(anIO) != myIO2Actors.end(); - if(anIsActorBound) - myIO2Actors.erase(anIO); - - return RemoveIObject(anIO) || anIsActorBound; -} - -/*! - \return list of all SALOME_InteractiveObject presenting in selection -*/ -const SALOME_ListIO& -SVTK_SelectorDef -::StoredIObjects() const -{ - myIObjectList.Clear(); - TIObjects::const_iterator anIter = myIObjects.begin(); - TIObjects::const_iterator anIterEnd = myIObjects.end(); - for(; anIter != anIterEnd; anIter++) - myIObjectList.Append(*anIter); - - return myIObjectList; -} - -/*! - \return number of selected objects -*/ -int -SVTK_SelectorDef -::IObjectCount() const -{ - return myIObjects.size(); -} - -/*! - \return true if the SALOME_InteractiveObject has a subselection - \param theIO - SALOME_InteractiveObject -*/ -bool -SVTK_SelectorDef -::HasIndex( const Handle(SALOME_InteractiveObject)& theIO) const -{ - return myMapIOSubIndex.find(theIO) != myMapIOSubIndex.end(); -} - -/*! - Gets indices of subselection for SALOME_InteractiveObject - \param theIO - SALOME_InteractiveObject -*/ -void -SVTK_SelectorDef -::GetIndex( const Handle(SALOME_InteractiveObject)& theIO, - TColStd_IndexedMapOfInteger& theIndex) -{ - TMapIOSubIndex::const_iterator anIter = myMapIOSubIndex.find(theIO); - if(anIter != myMapIOSubIndex.end()) - theIndex = anIter->second.myMap; - else - theIndex.Clear(); -} - -/*! - \return true if the index presents in subselection - \param theIO - SALOME_InteractiveObject - \param theIndex - index -*/ -bool -SVTK_SelectorDef -::IsIndexSelected(const Handle(SALOME_InteractiveObject)& theIO, - int theIndex) const -{ - TMapIOSubIndex::const_iterator anIter = myMapIOSubIndex.find(theIO); - if(anIter != myMapIOSubIndex.end()){ - const TColStd_IndexedMapOfInteger& aMapIndex = anIter->second.myMap; - return aMapIndex.Contains( theIndex ) == Standard_True; - } - - return false; -} - -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){ - // only the last key can be removed - int aLastId = theMapIndex.FindKey(theMapIndex.Extent()); - if(aLastId == anId) - theMapIndex.RemoveLast(); - else{ - TColStd_IndexedMapOfInteger aNewMap; - aNewMap.ReSize(theMapIndex.Extent()-1); - for(int j = 1; j <= theMapIndex.Extent(); j++){ - int anIndex = theMapIndex(j); - if ( anIndex != theIndex ) - aNewMap.Add( anIndex ); - } - theMapIndex = aNewMap; - } - } - return anId != 0; -} - -/*! - Changes indices of subselection for SALOME_InteractiveObject - \param theIO - SALOME_InteractiveObject - \param theIndices - indices - \param theIsModeShift - if it is false, then map will be cleared before indices are added -*/ -bool -SVTK_SelectorDef -::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_IndexedMapOfInteger& theIndices, - bool theIsModeShift) -{ - TMapIOSubIndex::iterator aMapIter = myMapIOSubIndex.find(theIO); - if(aMapIter == myMapIOSubIndex.end()){ - TIndexedMapOfInteger anEmpty; - aMapIter = myMapIOSubIndex. - insert(TMapIOSubIndex::value_type(theIO,anEmpty)).first; - } - TColStd_IndexedMapOfInteger& aMapIndex = aMapIter->second.myMap; - - if(!theIsModeShift) - aMapIndex.Clear(); - - for(int i = 1, iEnd = theIndices.Extent(); i <= iEnd; i++) - aMapIndex.Add(theIndices(i)); - - if(aMapIndex.IsEmpty()) { - myMapIOSubIndex.erase(theIO); - return false; - } - - return true; -} - - -/*! - Changes indices of subselection for SALOME_InteractiveObject - \param theIO - SALOME_InteractiveObject - \param theIndices - indices - \param theIsModeShift - if it is false, then map will be cleared before indices are added -*/ -bool -SVTK_SelectorDef -::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_MapOfInteger& theIndices, - bool theIsModeShift) -{ - TMapIOSubIndex::iterator aMapIter = myMapIOSubIndex.find(theIO); - if(aMapIter == myMapIOSubIndex.end()){ - TIndexedMapOfInteger anEmpty; - aMapIter = myMapIOSubIndex. - insert(TMapIOSubIndex::value_type(theIO,anEmpty)).first; - } - TColStd_IndexedMapOfInteger& aMapIndex = aMapIter->second.myMap; - - if(!theIsModeShift) - aMapIndex.Clear(); - - TColStd_MapIteratorOfMapOfInteger anIter(theIndices); - for(; anIter.More(); anIter.Next()) - aMapIndex.Add(anIter.Key()); - - if(aMapIndex.IsEmpty()) { - myMapIOSubIndex.erase(theIO); - return false; - } - - return true; -} - - -/*! - Changes indices of subselection for SALOME_InteractiveObject - \param theIO - SALOME_InteractiveObject - \param theIndex - index - \param theIsModeShift - if it is false, then map will be cleared before indices are added -*/ -bool -SVTK_SelectorDef -::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex, - bool theIsModeShift) -{ - TMapIOSubIndex::iterator anIter = myMapIOSubIndex.find(theIO); - if(anIter == myMapIOSubIndex.end()){ - TIndexedMapOfInteger anEmpty; - anIter = myMapIOSubIndex. - insert(TMapIOSubIndex::value_type(theIO,anEmpty)).first; - } - TColStd_IndexedMapOfInteger& aMapIndex = anIter->second.myMap; - - bool anIsConatains = aMapIndex.Contains( theIndex ) == Standard_True; - if ( anIsConatains ) - removeIndex( aMapIndex, theIndex ); - - if ( !theIsModeShift ) - aMapIndex.Clear(); - - if ( !anIsConatains ) - aMapIndex.Add( theIndex ); - - if ( aMapIndex.IsEmpty() ) - myMapIOSubIndex.erase( theIO ); - - return false; -} - - -/*! - Removes index of subselection for SALOME_InteractiveObject - \param theIO - SALOME_InteractiveObject - \param theIndex - index -*/ -void -SVTK_SelectorDef -::RemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex) -{ - if(IsIndexSelected(theIO,theIndex)){ - TMapIOSubIndex::iterator anIter = myMapIOSubIndex.find(theIO); - TColStd_IndexedMapOfInteger& aMapIndex = anIter->second.myMap; - removeIndex(aMapIndex,theIndex); - } -} - -/*! - Clears all indices of subselection -*/ -void -SVTK_SelectorDef -::ClearIndex() -{ - myMapIOSubIndex.clear(); -} - -/*! - To apply a filter on the selection - \param theFilter - new filter -*/ -void -SVTK_SelectorDef -::SetFilter(const Handle(VTKViewer_Filter)& theFilter) -{ - myFilters.insert(TFilters::value_type(theFilter->GetId(),theFilter)); -} - -/*! - \return true if filter with given number is applyed - \param theId - filter id -*/ -bool -SVTK_SelectorDef -::IsFilterPresent(const TFilterID theId) const -{ - return myFilters.find(theId) != myFilters.end(); -} - -/*! - To remove a filter from the selection - \param theId - filter id -*/ -void -SVTK_SelectorDef -::RemoveFilter(const TFilterID theId) -{ - if(IsFilterPresent(theId)) - myFilters.erase(theId); -} - -/*! - \return true if the index satisfy installed filters - \param theActor - actor - \param theId - filter id - \param theIsNode - whether it is node -*/ -bool -SVTK_SelectorDef -::IsValid(SALOME_Actor* theActor, - const TFilterID theId, - const bool theIsNode) const -{ - TFilters::const_iterator anIter = myFilters.begin(); - for(; anIter != myFilters.end(); ++anIter){ - const Handle(VTKViewer_Filter)& aFilter = anIter->second; - if(theIsNode == aFilter->IsNodeFilter() && - !aFilter->IsValid(theActor,theId)) - return false; - } - return true; -} - -/*! - \return filter by it's id - \param theId - filter id -*/ -Handle(VTKViewer_Filter) -SVTK_SelectorDef -::GetFilter(const TFilterID theId) const -{ - TFilters::const_iterator anIter = myFilters.find(theId); - if(anIter != myFilters.end()){ - const Handle(VTKViewer_Filter)& aFilter = anIter->second; - return aFilter; - } - return Handle(VTKViewer_Filter)(); -} - diff --git a/src/SVTK/SVTK_Selector.h b/src/SVTK/SVTK_Selector.h deleted file mode 100644 index 380e28b31..000000000 --- a/src/SVTK/SVTK_Selector.h +++ /dev/null @@ -1,211 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Selection.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef SVTK_SELECTOR_H -#define SVTK_SELECTOR_H - -#include "SVTK.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" -#include "VTKViewer_Filter.h" -#include "SALOME_InteractiveObject.hxx" - -#include -#include - -#include - -class SALOME_Actor; - -//! Define an abstract interface for selection in SVTK package -/*! - The class implements selection functionality through storing corresponding - references to #SALOME_InteractiveObject. For implementation of subselection - modes it keeps a corresponding map of sub indexes. - \note - Also, for each #SALOME_InteractiveObject it tries to keep corresponding refenrence to #SALOME_Actor - */ -class SVTK_EXPORT SVTK_Selector: public vtkObject -{ -public: - static SVTK_Selector* New(); - - vtkTypeMacro(SVTK_Selector,vtkObject); - - //! To change current Selection_Mode (as outside effect, it invokes selectionChange signal) - virtual - void - SetSelectionMode(Selection_Mode theMode) = 0; - - //! Get current Selection_Mode - virtual - Selection_Mode - SelectionMode() const = 0; - - //! Clear selection - virtual - void - ClearIObjects() = 0; - - //! Try to find corresponding #SALOME_Actor for given reference on #SALOME_InteractiveObject - virtual - SALOME_Actor* - GetActor(const Handle(SALOME_InteractiveObject)& theIO) const = 0; - - //! Check, is the #SALOME_InteractiveObject is present into selection - virtual - bool - IsSelected(const Handle(SALOME_InteractiveObject)& theIO) const = 0; - - //! Check, is the #SALOME_Actor is present into selection - virtual - bool - IsSelected(SALOME_Actor* theActor) const = 0; - - //! Modify the selection by adding new reference on #SALOME_InteractiveObject - virtual - bool - AddIObject(const Handle(SALOME_InteractiveObject)& theIO) = 0; - - //! Modify the selection by adding new reference on #SALOME_Actor - virtual - bool - AddIObject(SALOME_Actor* theActor) = 0; - - //! Modify the selection by removing a reference on #SALOME_InteractiveObject - virtual - bool - RemoveIObject(const Handle(SALOME_InteractiveObject)& theIO) = 0; - - //! Modify the selection by removing a reference on #SALOME_Actor - virtual - bool - RemoveIObject(SALOME_Actor* theActor) = 0; - - //! Get all #SALOME_InteractiveObject references that is present into selection - virtual - const SALOME_ListIO& - StoredIObjects() const = 0; - - //! Get number of selected objects - virtual - int - IObjectCount() const = 0; - - //! Check, if the #SALOME_InteractiveObject has a subselection - virtual - bool - HasIndex(const Handle(SALOME_InteractiveObject)& theIO ) const = 0; - - //! Get indexes of subslection for given #SALOME_InteractiveObject - virtual - void - GetIndex( const Handle(SALOME_InteractiveObject)& theIO, - TColStd_IndexedMapOfInteger& theIndex ) = 0; - - //! Change indices of subselection for given #SALOME_InteractiveObject - virtual - bool - AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_IndexedMapOfInteger& theIndices, - bool theIsModeShift) = 0; - - //! Change indexes of subslection for given #SALOME_InteractiveObject - virtual - bool - AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_MapOfInteger& theIndices, - bool theIsModeShift) = 0; - - //! Change index of subslection for given #SALOME_InteractiveObject - virtual - bool - AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex, - bool theIsModeShift) = 0; - - //! Change index of subslection for given #SALOME_InteractiveObject - virtual - void - RemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex) = 0; - - //! Check, if the given index is present in subselection - virtual - bool - IsIndexSelected(const Handle(SALOME_InteractiveObject)& theIO, - int theIndex) const = 0; - - //! Clear subselection - virtual - void - ClearIndex() = 0; - - //---------------------------------------------------------------------------- - typedef int TFilterID; - - //! To apply a filter on the selection - virtual - void - SetFilter(const Handle(VTKViewer_Filter)& theFilter) = 0; - - //! To get a section filter by its number - virtual - Handle(VTKViewer_Filter) - GetFilter(const TFilterID theId) const = 0; - - //! Check, if a filter with given number is applyed - virtual - bool - IsFilterPresent(const TFilterID theId) const = 0; - - //! To remove a filter from the selection - virtual - void - RemoveFilter(const TFilterID theId) = 0; - - //! Check, if the index satisfy to the installed filters - virtual - bool - IsValid(SALOME_Actor* theActor, - const int theId, - const bool theIsNode = false) const = 0; - - //---------------------------------------------------------------------------- - virtual - void - StartPickCallback() = 0; - - //! To invoke selectionChanged signals - virtual - void - EndPickCallback() = 0; -}; - - -#endif diff --git a/src/SVTK/SVTK_SelectorDef.h b/src/SVTK/SVTK_SelectorDef.h deleted file mode 100644 index e20d764ec..000000000 --- a/src/SVTK/SVTK_SelectorDef.h +++ /dev/null @@ -1,211 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOME_Selection.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef SVTK_SELECTORDEF_H -#define SVTK_SELECTORDEF_H - -#include -#include - -#include -#include -#include - -#include "SVTK_Selector.h" - -class SALOME_Actor; - -class SVTK_Viewer; -class SVTK_ViewWindow; - -class SVTK_SelectorDef: public SVTK_Selector -{ -public: - SVTK_SelectorDef(); - virtual ~SVTK_SelectorDef(); - - virtual - void - SetSelectionMode(Selection_Mode theMode); - - virtual - Selection_Mode - SelectionMode() const { return mySelectionMode; } - - virtual - void - ClearIObjects(); - - virtual - SALOME_Actor* - GetActor(const Handle(SALOME_InteractiveObject)& theIO) const; - - virtual - bool - IsSelected(const Handle(SALOME_InteractiveObject)& theIO) const; - - virtual - bool - IsSelected(SALOME_Actor* theActor) const; - - virtual - bool - AddIObject(const Handle(SALOME_InteractiveObject)& theIO); - - virtual - bool - AddIObject(SALOME_Actor* theActor); - - virtual - bool - RemoveIObject(const Handle(SALOME_InteractiveObject)& theIO); - - virtual - bool - RemoveIObject(SALOME_Actor* theActor); - - virtual - const SALOME_ListIO& - StoredIObjects() const; - - virtual - int - IObjectCount() const; - - virtual - bool - HasIndex(const Handle(SALOME_InteractiveObject)& theIO ) const; - - virtual - void - GetIndex( const Handle(SALOME_InteractiveObject)& theIO, - TColStd_IndexedMapOfInteger& theIndex ); - - virtual - bool - AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_IndexedMapOfInteger& theIndices, - bool theIsModeShift); - virtual - bool - AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - const TColStd_MapOfInteger& theIndices, - bool theIsModeShift); - virtual - bool - AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex, - bool theIsModeShift); - virtual - void - RemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, - int theIndex); - virtual - bool - IsIndexSelected(const Handle(SALOME_InteractiveObject)& theIO, - int theIndex) const; - virtual - void - ClearIndex(); - - //---------------------------------------------------------------------------- - virtual - void - SetFilter(const Handle(VTKViewer_Filter)& theFilter); - - virtual - Handle(VTKViewer_Filter) - GetFilter(const TFilterID theId) const; - - virtual - bool - IsFilterPresent(const TFilterID theId) const; - - virtual - void - RemoveFilter(const int theId); - - virtual - bool - IsValid(SALOME_Actor* theActor, - const TFilterID theId, - const bool theIsNode = false) const; - - //---------------------------------------------------------------------------- - virtual - void - StartPickCallback(); - - virtual - void - EndPickCallback(); - -private: - int mySelectionMode; - - struct TIOLessThan - { - bool - operator()(const Handle(SALOME_InteractiveObject)& theRightIO, - const Handle(SALOME_InteractiveObject)& theLeftIO) const - { - return strcmp(theRightIO->getEntry(),theLeftIO->getEntry()) < 0; - } - }; - - struct TIndexedMapOfInteger - { - TColStd_IndexedMapOfInteger myMap; - TIndexedMapOfInteger() - {} - TIndexedMapOfInteger(const TIndexedMapOfInteger& theIndexedMapOfInteger) - { - myMap = theIndexedMapOfInteger.myMap; - } - }; - - mutable SALOME_ListIO myIObjectList; - typedef std::set TIObjects; - TIObjects myIObjects; - - typedef std::map, - TIOLessThan> TIO2Actors; - TIO2Actors myIO2Actors; - - typedef std::map TMapIOSubIndex; - TMapIOSubIndex myMapIOSubIndex; - - typedef std::map TFilters; - TFilters myFilters; -}; - -#endif diff --git a/src/SVTK/SVTK_SpaceMouse.cxx b/src/SVTK/SVTK_SpaceMouse.cxx deleted file mode 100644 index 7d858a780..000000000 --- a/src/SVTK/SVTK_SpaceMouse.cxx +++ /dev/null @@ -1,213 +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 : SVTK_SpaceMouse.cxx -// Author : Alexander SLADKOV -// Module : SALOME -// $Header$ - -#include -#include -#include - -#ifndef WIN32 -#include -#include -#include -#include -#include -#endif - -#include "SVTK_SpaceMouse.h" - -SVTK_SpaceMouse* SVTK_SpaceMouse::myInstance = 0; - -/*! - \return shared instance of object (creates if there is no one) -*/ -SVTK_SpaceMouse* SVTK_SpaceMouse::getInstance() -{ - if ( !myInstance ) - myInstance = new SVTK_SpaceMouse(); - return myInstance; -} - -/*! - Constructor -*/ -SVTK_SpaceMouse::SVTK_SpaceMouse() -{ -#ifndef WIN32 - win = InputFocus; -#endif - spaceMouseOn = 0; -} - -#ifndef WIN32 - -/*! - Initialization -*/ -int SVTK_SpaceMouse::initialize( Display *display, Window window ) -{ - XMotionEvent = XInternAtom( display, "MotionEvent", 1 ); - XButtonPressEvent = XInternAtom( display, "ButtonPressEvent", 1 ); - XButtonReleaseEvent = XInternAtom( display, "ButtonReleaseEvent", 1 ); - XCommandEvent = XInternAtom( display, "CommandEvent", 1 ); - - spaceMouseOn = (XMotionEvent != 0) && - (XButtonPressEvent != 0) && - (XButtonReleaseEvent != 0) && - (XCommandEvent != 0); - if ( !spaceMouseOn ) - return 0; - - spaceMouseOn = setWindow( display, window ); - if ( !spaceMouseOn ) - return 0; - - return spaceMouseOn; -} - -static int errorCallback( Display *display, XErrorEvent *Error ) -{ - char msg[ 128 ]; - if ( Error->error_code != BadWindow ) { - XGetErrorText( display,Error->error_code,msg,sizeof( msg ) ); - fprintf( stderr, "SpaceMouse reported error = %s. Exit ... \n", msg ); - } - return 0; -} - -/*! - Initialize by window -*/ -int SVTK_SpaceMouse::setWindow( Display *display, Window window ) -{ - XTextProperty winName; - XEvent xEvent; - Atom type; - int format; - unsigned long NItems, BytesReturn; - unsigned char *PropReturn; - Window root; - int result; - int (*errorHandler)(Display *,XErrorEvent *); - - result = 1; - errorHandler = XSetErrorHandler( errorCallback ); - - root = RootWindow( display, DefaultScreen(display) ); - - PropReturn = NULL; - XGetWindowProperty( display, root, XCommandEvent, 0,1, 0, - AnyPropertyType, &type, &format, &NItems, - &BytesReturn, &PropReturn ); - - win = InputFocus; - if ( PropReturn != NULL ) { - win = *(Window *) PropReturn; - XFree( PropReturn ); - } - else - return result = 0; - - if ( XGetWMName( display, win, &winName ) == 0 ) - return result = 0; - - if ( strcmp( (char *) "Magellan Window", (char *) winName.value) != 0 ) - return result = 0; - - xEvent.type = ClientMessage; - xEvent.xclient.format = 16; - xEvent.xclient.send_event = 0; - xEvent.xclient.display = display; - xEvent.xclient.window = win; - xEvent.xclient.message_type = XCommandEvent; - - xEvent.xclient.data.s[0] = (short) ((window>>16)&0x0000FFFF); - xEvent.xclient.data.s[1] = (short) (window&0x0000FFFF); - xEvent.xclient.data.s[2] = 27695; - - if ( XSendEvent( display, win, 0, 0x0000, &xEvent ) == 0 ) - return result = 0; - - XFlush( display ); - - XSetErrorHandler( errorHandler ); - return result; -} - -/*! - Close -*/ -int SVTK_SpaceMouse::close(Display *display) -{ - initialize( display, (Window)InputFocus ); - spaceMouseOn = 0; - - return 1; -} - -/*! - Custom event handler -*/ -int SVTK_SpaceMouse::translateEvent( Display* display, XEvent* xEvent, MoveEvent* spaceMouseEvent, - double scale, double rScale ) -{ - if ( !spaceMouseOn ) - return 0; - - if ( xEvent->type == ClientMessage ) { - if ( xEvent->xclient.message_type == XMotionEvent ) { - spaceMouseEvent->type = SpaceMouseMove; - spaceMouseEvent->data[ x ] = - xEvent->xclient.data.s[2] * scale; - spaceMouseEvent->data[ y ] = - xEvent->xclient.data.s[3] * scale; - spaceMouseEvent->data[ z ] = - xEvent->xclient.data.s[4] * scale; - spaceMouseEvent->data[ a ] = - xEvent->xclient.data.s[5] * rScale; - spaceMouseEvent->data[ b ] = - xEvent->xclient.data.s[6] * rScale; - spaceMouseEvent->data[ c ] = - xEvent->xclient.data.s[7] * rScale; - spaceMouseEvent->period = xEvent->xclient.data.s[8]; - return 1; - } - else if ( xEvent->xclient.message_type == XButtonPressEvent ) { - spaceMouseEvent->type = SpaceButtonPress; - spaceMouseEvent->button = xEvent->xclient.data.s[2]; - return 2; - } - else if ( xEvent->xclient.message_type == XButtonReleaseEvent ) { - spaceMouseEvent->type = SpaceButtonRelease; - spaceMouseEvent->button = xEvent->xclient.data.s[2]; - return 3; - } - } - return (!display); -} - -#endif diff --git a/src/SVTK/SVTK_SpaceMouse.h b/src/SVTK/SVTK_SpaceMouse.h deleted file mode 100644 index f920bf44a..000000000 --- a/src/SVTK/SVTK_SpaceMouse.h +++ /dev/null @@ -1,81 +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 : SVTK_SpaceMouse.h -// Author : Alexander SLADKOV -// Module : SALOME -// $Header$ - -#ifndef SVTK_SpaceMouse_h -#define SVTK_SpaceMouse_h - -#ifndef WIN32 -extern "C" -{ -#include -#include -} -#endif - -class SVTK_SpaceMouse -{ - public: - - // access to SpaceMouse utility class - static SVTK_SpaceMouse* getInstance(); - - enum MoveData { x, y, z, a, b, c }; - enum EventType { SpaceMouseMove = 1, SpaceButtonPress, SpaceButtonRelease }; - - typedef struct { - int type; - int button; - double data[6]; - int period; - } MoveEvent; - - 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; -}; - -#endif diff --git a/src/SVTK/SVTK_Trihedron.cxx b/src/SVTK/SVTK_Trihedron.cxx deleted file mode 100644 index ac0bbd4d8..000000000 --- a/src/SVTK/SVTK_Trihedron.cxx +++ /dev/null @@ -1,54 +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 "SVTK_Trihedron.h" -#include "SALOME_Actor.h" - -#include -#include -#include - -vtkStandardNewMacro(SVTK_Trihedron); - -/*! - Constructor -*/ -SVTK_Trihedron -::SVTK_Trihedron() -{ -} - -/*! - \return count of visible actors - \param theRenderer - renderer to be checked -*/ -int -SVTK_Trihedron -::GetVisibleActorCount(vtkRenderer* theRenderer) -{ - vtkActorCollection* aCollection = theRenderer->GetActors(); - aCollection->InitTraversal(); - int aCount = 0; - while(vtkActor* aProp = aCollection->GetNextActor()) { - if(aProp->GetVisibility()) - if(SALOME_Actor* anActor = SALOME_Actor::SafeDownCast(aProp)) - if(!anActor->IsInfinitive()) - aCount++; - } - return aCount; -} diff --git a/src/SVTK/SVTK_Trihedron.h b/src/SVTK/SVTK_Trihedron.h deleted file mode 100644 index 3f410cde1..000000000 --- a/src/SVTK/SVTK_Trihedron.h +++ /dev/null @@ -1,41 +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 -// -#ifndef SVTK_TRIHEDRON_H -#define SVTK_TRIHEDRON_H - -#include "SVTK.h" - -#include "VTKViewer_Trihedron.h" - -class SVTK_EXPORT SVTK_Trihedron : public VTKViewer_Trihedron -{ -protected: - SVTK_Trihedron(); - SVTK_Trihedron(const SVTK_Trihedron&); // Not implemented - void operator = (const SVTK_Trihedron&); // Not implemented - -public: - vtkTypeMacro(SVTK_Trihedron,VTKViewer_Trihedron); - static SVTK_Trihedron *New(); - - virtual int GetVisibleActorCount(vtkRenderer* theRenderer); -}; - - -#endif diff --git a/src/SVTK/SVTK_UpdateRateDlg.cxx b/src/SVTK/SVTK_UpdateRateDlg.cxx deleted file mode 100644 index 7f31fb2b9..000000000 --- a/src/SVTK/SVTK_UpdateRateDlg.cxx +++ /dev/null @@ -1,380 +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 : -// Author : -// Module : SALOME -// $Header$ - -#include "SVTK_UpdateRateDlg.h" - -#include "SVTK_MainWindow.h" -#include "SVTK_RenderWindowInteractor.h" -#include "VTKViewer_Algorithm.h" -#include "SALOME_Actor.h" - -#include "QtxDblSpinBox.h" -#include "QtxAction.h" - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -static vtkFloatingPointType OFF_UPDATE_RATE = 0.00001; -static vtkFloatingPointType FLOAT_TOLERANCE = 1.0 / VTK_LARGE_FLOAT; - -using namespace std; - -namespace -{ - //---------------------------------------------------------------------------- - inline - QString - GetUpdateRate(SVTK_RenderWindowInteractor* theRWInteractor) - { - if(vtkRenderer *aRenderer = theRWInteractor->getRenderer()){ - vtkFloatingPointType aLastRenderTimeInSeconds = aRenderer->GetLastRenderTimeInSeconds(); - if(aLastRenderTimeInSeconds > FLOAT_TOLERANCE){ - std::ostringstream aStr; - vtkFloatingPointType aFPS = 1.0 / aLastRenderTimeInSeconds; - aStr<GetVisibility()){ - myVTKMultiplier += theActor->GetAllocatedRenderTime(); - if(dynamic_cast(theActor)) - mySALOMEMultiplier += theActor->GetAllocatedRenderTime(); - } - } - }; - - - //---------------------------------------------------------------------------- - inline - vtkFloatingPointType - AdjustUpdateRate(SVTK_RenderWindowInteractor* theRWInteractor, - vtkFloatingPointType theUpdateRate) - { - if(vtkRenderer *aRenderer = theRWInteractor->getRenderer()){ - if(vtkActorCollection *anActorCollection = aRenderer->GetActors()){ - TRenderTimeMultiplier aMultiplier; - using namespace VTK; - aMultiplier = ForEach(anActorCollection, - aMultiplier); - if(aMultiplier.mySALOMEMultiplier > FLOAT_TOLERANCE) - theUpdateRate *= aMultiplier.mySALOMEMultiplier / aMultiplier.myVTKMultiplier; - } - } - return theUpdateRate; - } - - - //---------------------------------------------------------------------------- - struct TCellsCounter - { - vtkIdType myCounter; - TCellsCounter(): - myCounter(0) - {} - - void - operator()(SALOME_Actor* theActor) - { - if(theActor->GetVisibility()){ - if(vtkMapper *aMapper = theActor->GetMapper()){ - if(vtkDataSet *aDataSet = aMapper->GetInput()){ - myCounter += aDataSet->GetNumberOfCells(); - } - } - } - } - }; - - - //---------------------------------------------------------------------------- - inline - QString - GetNumberOfCells(SVTK_RenderWindowInteractor* theRWInteractor) - { - if(vtkRenderer *aRenderer = theRWInteractor->getRenderer()){ - if(vtkActorCollection *anActorCollection = aRenderer->GetActors()){ - TCellsCounter aCounter; - using namespace VTK; - aCounter = ForEach(anActorCollection, - aCounter); - return QString::number(aCounter.myCounter); - } - } - - return QString::number(0); - } -} - -/*! - Constructor -*/ -SVTK_UpdateRateDlg -::SVTK_UpdateRateDlg(QtxAction* theAction, - SVTK_MainWindow* theParent, - const char* theName): - SVTK_DialogBase(theAction, - theParent, - theName), - myPriority(0.0), - myEventCallbackCommand(vtkCallbackCommand::New()), - myRWInteractor(theParent->GetInteractor()), - myAction(theAction) -{ - vtkRenderWindowInteractor* aRWI = myRWInteractor->GetDevice(); - bool anIsEnabledUpdateRate = false; - - setCaption(tr("DLG_TITLE")); - QVBoxLayout* aVBoxLayout = new QVBoxLayout(this, 5, 5); - { - QGroupBox* aGroupBox = new QGroupBox(tr("INPUT_FRAME_TITLE"), this); - aGroupBox->setColumnLayout(0, Qt::Vertical ); - aGroupBox->layout()->setSpacing( 6 ); - aGroupBox->layout()->setMargin( 11 ); - - aGroupBox->setCheckable(true); - aGroupBox->setChecked(anIsEnabledUpdateRate); - myIsEnableUpdateRateGroupBox = aGroupBox; - - QGridLayout* aGridLayout = new QGridLayout(aGroupBox->layout()); - { - QLabel* aLabel = new QLabel(tr("DESIRED"), aGroupBox); - aLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aGridLayout->addWidget(aLabel, 0, 0); - - QtxDblSpinBox* aDblSpinBox = new QtxDblSpinBox(OFF_UPDATE_RATE, VTK_LARGE_FLOAT, 2, aGroupBox); - aDblSpinBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - aGridLayout->addWidget(aDblSpinBox, 0, 1); - - aDblSpinBox->setValue(aRWI->GetDesiredUpdateRate()); - aDblSpinBox->setEnabled(anIsEnabledUpdateRate); - connect(aGroupBox, SIGNAL(toggled(bool)), aDblSpinBox, SLOT(setEnabled(bool))); - myDesiredUpdateRateSblSpinBox = aDblSpinBox; - } - { - QLabel* aLabel = new QLabel(tr("STILL"), aGroupBox); - aLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aGridLayout->addWidget(aLabel, 1, 0); - - QtxDblSpinBox* aDblSpinBox = new QtxDblSpinBox(OFF_UPDATE_RATE, VTK_LARGE_FLOAT, 2, aGroupBox); - aDblSpinBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - aGridLayout->addWidget(aDblSpinBox, 1, 1); - - aDblSpinBox->setValue(aRWI->GetStillUpdateRate()); - aDblSpinBox->setEnabled(anIsEnabledUpdateRate); - connect(aGroupBox, SIGNAL(toggled(bool)), aDblSpinBox, SLOT(setEnabled(bool))); - myStillUpdateRateSblSpinBox = aDblSpinBox; - } - aVBoxLayout->addWidget(aGroupBox); - } - { - QGroupBox* aGroupBox = new QGroupBox(tr("INFORMATION_FRAME_TITLE"), this); - aGroupBox->setColumnLayout(0, Qt::Vertical ); - aGroupBox->layout()->setSpacing( 6 ); - aGroupBox->layout()->setMargin( 11 ); - - QGridLayout* aGridLayout = new QGridLayout(aGroupBox->layout()); - { - QLabel* aLabel = new QLabel(tr("CURRENT_FPS"), aGroupBox); - aLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aGridLayout->addWidget(aLabel, 0, 0); - - QLineEdit* aLineEdit = new QLineEdit( aGroupBox ); - aLineEdit->setReadOnly( TRUE ); - aGridLayout->addWidget(aLineEdit, 0, 1); - - myCurrentUpdateRateLineEdit = aLineEdit; - myCurrentUpdateRateLineEdit->setText( GetUpdateRate(myRWInteractor) ); - } - { - QLabel* aLabel = new QLabel(tr("NUMBER_CELLS"), aGroupBox); - aLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - aGridLayout->addWidget(aLabel, 1, 0); - - QLineEdit* aLineEdit = new QLineEdit( aGroupBox ); - aLineEdit->setReadOnly( TRUE ); - aGridLayout->addWidget(aLineEdit, 1, 1); - - myNumberOfCellsLineEdit = aLineEdit; - myNumberOfCellsLineEdit->setText( GetNumberOfCells(myRWInteractor) ); - } - aVBoxLayout->addWidget(aGroupBox); - } - { - QGroupBox* aGroupBox = new QGroupBox(this); - QHBoxLayout* aHBoxLayout = new QHBoxLayout(aGroupBox); - aHBoxLayout->setMargin(11); - aHBoxLayout->setSpacing(6); - { - QPushButton* aPushButton = new QPushButton(tr("OK"), aGroupBox); - aPushButton->setDefault(TRUE); - aPushButton->setAutoDefault(TRUE); - aHBoxLayout->addWidget(aPushButton); - connect(aPushButton, SIGNAL(clicked()), this, SLOT(onClickOk())); - } - { - QPushButton* aPushButton = new QPushButton(tr("Apply"), aGroupBox); - aPushButton->setDefault(TRUE); - aPushButton->setAutoDefault(TRUE); - aHBoxLayout->addWidget(aPushButton); - connect(aPushButton, SIGNAL(clicked()), this, SLOT(onClickApply())); - } - aHBoxLayout->addStretch(); - { - QPushButton* aPushButton = new QPushButton(tr("Close"), aGroupBox); - aPushButton->setDefault(TRUE); - aPushButton->setAutoDefault(TRUE); - aHBoxLayout->addWidget(aPushButton); - connect(aPushButton, SIGNAL(clicked()), this, SLOT(onClickClose())); - } - aVBoxLayout->addWidget(aGroupBox); - } - - if(!anIsEnabledUpdateRate){ - aRWI->SetDesiredUpdateRate(OFF_UPDATE_RATE); - aRWI->SetStillUpdateRate(OFF_UPDATE_RATE); - } - - myEventCallbackCommand->Delete(); - myEventCallbackCommand->SetClientData(this); - myEventCallbackCommand->SetCallback(SVTK_UpdateRateDlg::ProcessEvents); - vtkRenderer *aRenderer = myRWInteractor->getRenderer(); - aRenderer->AddObserver(vtkCommand::EndEvent, - myEventCallbackCommand.GetPointer(), - myPriority); -} - -/*! - Destroys the object and frees any allocated resources - */ -SVTK_UpdateRateDlg -::~SVTK_UpdateRateDlg() -{ - // no need to delete child widgets, Qt does it all for us -} - -/*! - Processes events -*/ -void -SVTK_UpdateRateDlg -::ProcessEvents(vtkObject* vtkNotUsed(theObject), - unsigned long theEvent, - void* theClientData, - void* vtkNotUsed(theCallData)) -{ - SVTK_UpdateRateDlg* self = reinterpret_cast(theClientData); - - if(theEvent == vtkCommand::EndEvent){ - self->myCurrentUpdateRateLineEdit->setText( GetUpdateRate(self->myRWInteractor) ); - self->myNumberOfCellsLineEdit->setText( GetNumberOfCells(self->myRWInteractor) ); - } -} - -/*! - Update -*/ -void -SVTK_UpdateRateDlg -::Update() -{ - vtkRenderWindowInteractor* aRWI = myRWInteractor->GetDevice(); - - vtkFloatingPointType anUpdateRate; - if(myIsEnableUpdateRateGroupBox->isChecked()){ - anUpdateRate = AdjustUpdateRate(myRWInteractor,myDesiredUpdateRateSblSpinBox->value()); - aRWI->SetDesiredUpdateRate(anUpdateRate); - anUpdateRate = AdjustUpdateRate(myRWInteractor,myStillUpdateRateSblSpinBox->value()); - aRWI->SetStillUpdateRate(anUpdateRate); - }else{ - aRWI->SetDesiredUpdateRate(OFF_UPDATE_RATE); - aRWI->SetStillUpdateRate(OFF_UPDATE_RATE); - } - - myRWInteractor->getRenderWindow()->Render(); -} - -/*! - SLOT on OK clicked -*/ -void -SVTK_UpdateRateDlg -::onClickOk() -{ - Update(); - onClickClose(); -} - -/*! - SLOT on Apply clicked -*/ -void -SVTK_UpdateRateDlg -::onClickApply() -{ - Update(); -} - -/*! - SLOT on Close clicked -*/ -void -SVTK_UpdateRateDlg -::onClickClose() -{ - reject(); -} diff --git a/src/SVTK/SVTK_UpdateRateDlg.h b/src/SVTK/SVTK_UpdateRateDlg.h deleted file mode 100644 index 388d66600..000000000 --- a/src/SVTK/SVTK_UpdateRateDlg.h +++ /dev/null @@ -1,93 +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 : -// Author : -// Module : SALOME -// $Header$ - -#ifndef SVTK_UPDATERATEDLG_H -#define SVTK_UPDATERATEDLG_H - -#include "SVTK_DialogBase.h" - -#include - -class SVTK_MainWindow; -class SVTK_RenderWindowInteractor; - -class QtxDblSpinBox; -class QtxAction; - -class QGroupBox; -class QLineEdit; - -class vtkCallbackCommand; -class vtkObject; - - -class SVTK_UpdateRateDlg : public SVTK_DialogBase -{ - Q_OBJECT; - -public: - SVTK_UpdateRateDlg(QtxAction* theAction, - SVTK_MainWindow* theParent, - const char* theName); - - ~SVTK_UpdateRateDlg(); - - void Update(); - -protected: - SVTK_RenderWindowInteractor* myRWInteractor; - QtxDblSpinBox* myDesiredUpdateRateSblSpinBox; - QtxDblSpinBox* myStillUpdateRateSblSpinBox; - QGroupBox* myIsEnableUpdateRateGroupBox; - - QLineEdit* myCurrentUpdateRateLineEdit; - QLineEdit* myNumberOfCellsLineEdit; - - QtxAction* myAction; - - //---------------------------------------------------------------------------- - // 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 onClickOk(); - void onClickApply(); - void onClickClose(); -}; - -#endif // SVTK_UPDATERATEDLG_H diff --git a/src/SVTK/SVTK_View.cxx b/src/SVTK/SVTK_View.cxx deleted file mode 100644 index 882728b3a..000000000 --- a/src/SVTK/SVTK_View.cxx +++ /dev/null @@ -1,675 +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 : -// Author : -// Module : SALOME -// $Header$ - -#include "SALOME_Actor.h" - -#include "SVTK_View.h" -#include "SVTK_Renderer.h" -#include "SVTK_MainWindow.h" -#include "SVTK_RenderWindowInteractor.h" -#include "SALOME_ListIteratorOfListIO.hxx" - -#include "VTKViewer_Algorithm.h" -#include "SVTK_Functor.h" - -#include -#include - -/*! - Constructor -*/ -SVTK_SignalHandler -::SVTK_SignalHandler(SVTK_MainWindow* theMainWindow): - QObject(theMainWindow), - myMainWindow(theMainWindow) -{ - SVTK_RenderWindowInteractor* anInteractor = theMainWindow->GetInteractor(); - - connect(anInteractor,SIGNAL(KeyPressed(QKeyEvent*)), - this,SIGNAL(KeyPressed(QKeyEvent*)) ); - connect(anInteractor,SIGNAL(KeyReleased(QKeyEvent*)), - this,SIGNAL(KeyReleased(QKeyEvent*))); - connect(anInteractor,SIGNAL(MouseButtonPressed(QMouseEvent*)), - this,SIGNAL(MouseButtonPressed(QMouseEvent*))); - connect(anInteractor,SIGNAL(MouseButtonReleased(QMouseEvent*)), - this,SIGNAL(MouseButtonReleased(QMouseEvent*))); - connect(anInteractor,SIGNAL(MouseDoubleClicked(QMouseEvent*)), - this,SIGNAL(MouseDoubleClicked(QMouseEvent*))); - connect(anInteractor,SIGNAL(MouseMove(QMouseEvent*)), - this,SIGNAL(MouseMove(QMouseEvent*))); - connect(anInteractor,SIGNAL(contextMenuRequested(QContextMenuEvent*)), - this,SIGNAL(contextMenuRequested(QContextMenuEvent*))); - connect(anInteractor,SIGNAL(selectionChanged()), - this,SIGNAL(selectionChanged())); -} - -/*! - Destructor -*/ -SVTK_SignalHandler -::~SVTK_SignalHandler() -{ -} - -/*! - \return corresponding svtk main window -*/ -SVTK_MainWindow* -SVTK_SignalHandler -::GetMainWindow() -{ - return myMainWindow; -} - - -/*! - Redirect the request to #SVTK_MainWindow::Repaint (just for flexibility) -*/ -void -SVTK_SignalHandler -::Repaint(bool theUpdateTrihedron) -{ - myMainWindow->Repaint(theUpdateTrihedron); -} - -/*! - Redirect the request to #SVTK_MainWindow::GetRenderer (just for flexibility) -*/ -SVTK_Renderer* -SVTK_SignalHandler -::GetRenderer() -{ - return myMainWindow->GetRenderer(); -} - -/*! - Redirect the request to #SVTK_MainWindow::getRenderer (just for flexibility) -*/ -vtkRenderer* -SVTK_SignalHandler -::getRenderer() -{ - return myMainWindow->getRenderer(); -} - -namespace SVTK -{ - struct THighlightAction - { - bool myIsHighlight; - THighlightAction( bool theIsHighlight ): - myIsHighlight( theIsHighlight ) - {} - - void - operator()( SALOME_Actor* theActor) - { - if(theActor->GetMapper() && theActor->hasIO()){ - theActor->Highlight( myIsHighlight ); - } - } - }; -} - -/*! - SLOT: called on selection change -*/ -void -SVTK_SignalHandler -::onSelectionChanged() -{ - vtkActorCollection* anActors = myMainWindow->getRenderer()->GetActors(); - - using namespace SVTK; - ForEach(anActors, - THighlightAction( false )); - SVTK_Selector* aSelector = myMainWindow->GetSelector(); - const SALOME_ListIO& aListIO = aSelector->StoredIObjects(); - SALOME_ListIteratorOfListIO anIter(aListIO); - for(; anIter.More(); anIter.Next()){ - ForEachIf(anActors, - TIsSameIObject(anIter.Value()), - THighlightAction(true)); - } - - myMainWindow->Repaint(false); -} - -/*! - Constructor -*/ -SVTK_View -::SVTK_View(SVTK_MainWindow* theMainWindow) : - SVTK_SignalHandler(theMainWindow) -{ -} - -/*! - Destructor -*/ -SVTK_View -::~SVTK_View() -{ -} - -/*! - Unhilights all objects in viewer -*/ -void -SVTK_View -::unHighlightAll() -{ - using namespace SVTK; - ForEach(getRenderer()->GetActors(), - THighlightAction( false )); - Repaint(); -} - -/*! - Hilights/unhilights object in viewer - \param theIO - object to be updated - \param theIsHighlight - if it is true, object will be hilighted, otherwise it will be unhilighted - \param theIsUpdate - update current viewer -*/ -void -SVTK_View -::highlight( const Handle(SALOME_InteractiveObject)& theIO, - bool theIsHighlight, - bool theIsUpdate ) -{ - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject( theIO ), - THighlightAction(theIsHighlight)); - Repaint(); -} - -/*! - Display object - \param theEntry - entry that corresponds to intractive objects -*/ -Handle(SALOME_InteractiveObject) -SVTK_View -::FindIObject(const char* theEntry) -{ - using namespace SVTK; - SALOME_Actor* anActor = - Find(getRenderer()->GetActors(), - TIsSameEntry(theEntry)); - if(anActor != NULL) - return anActor->getIO(); - - return NULL; -} - -/*! - Redirect the request to #SVTK_Renderer::SetPreselectionProp -*/ -void -SVTK_View -::SetSelectionProp(const double& theRed, - const double& theGreen, - const double& theBlue, - const int& theWidth) -{ - GetRenderer()->SetSelectionProp(theRed,theGreen,theBlue,theWidth); -} - -/*! - Redirect the request to #SVTK_Renderer::SetPreselectionProp -*/ -void -SVTK_View -::SetPreselectionProp(const double& theRed, - const double& theGreen, - const double& theBlue, - const int& theWidth) -{ - GetRenderer()->SetPreselectionProp(theRed,theGreen,theBlue,theWidth); -} - -/*! - Redirect the request to #SVTK_Renderer::SetPreselectionProp -*/ -void -SVTK_View -::SetSelectionTolerance(const double& theTolNodes, - const double& theTolCell) -{ - GetRenderer()->SetSelectionTolerance(theTolNodes,theTolCell); -} - -/*! - \return true if object is in viewer or in collector - \param theIO - object to be checked -*/ -bool -SVTK_View -::isInViewer(const Handle(SALOME_InteractiveObject)& theIObject) -{ - using namespace SVTK; - SALOME_Actor* anActor = - Find(getRenderer()->GetActors(), - TIsSameIObject(theIObject)); - return anActor != NULL; -} - -/*! - \return true if object is displayed in viewer - \param theIO - object to be checked -*/ -bool -SVTK_View -::isVisible(const Handle(SALOME_InteractiveObject)& theIObject) -{ - using namespace SVTK; - SALOME_Actor* anActor = - Find(getRenderer()->GetActors(), - TIsSameIObject(theIObject)); - return anActor != NULL && anActor->GetVisibility(); -} - -/*! - Changes name of object - \param theIObject - object to be renamed - \param theName - new name -*/ -void -SVTK_View -::rename(const Handle(SALOME_InteractiveObject)& theIObject, - const QString& theName) -{ - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject(theIObject), - TSetFunction - (&SALOME_Actor::setName,theName.latin1())); -} - -/*! - \return current display mode (obsolete) -*/ -int -SVTK_View -::GetDisplayMode() -{ - return myDisplayMode; -} - -/*! - Set current display mode - \param theMode - new display mode -*/ -void -SVTK_View -::SetDisplayMode(int theMode) -{ - if(theMode == 0) - ChangeRepresentationToWireframe(); - else - ChangeRepresentationToSurface(); - myDisplayMode = theMode; -} - -/*! - Set current display mode - \param theIObject - object - \param theMode - new display mode -*/ -void -SVTK_View -::SetDisplayMode(const Handle(SALOME_InteractiveObject)& theIObject, - int theMode) -{ - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject(theIObject), - TSetFunction - (&SALOME_Actor::setDisplayMode,theMode)); -} - -/*! - Change all actors to wireframe -*/ -void -SVTK_View -::ChangeRepresentationToWireframe() -{ - ChangeRepresentationToWireframe(getRenderer()->GetActors()); -} - -/*! - Change all actors to shading -*/ -void -SVTK_View -::ChangeRepresentationToSurface() -{ - ChangeRepresentationToSurface(getRenderer()->GetActors()); -} - -/*! - Change to wireframe a list of vtkactor - theCollection - list of vtkactor -*/ -void -SVTK_View -::ChangeRepresentationToWireframe(vtkActorCollection* theCollection) -{ - using namespace SVTK; - ForEach(theCollection, - TSetFunction - (&SALOME_Actor::setDisplayMode,0)); - Repaint(); -} - -/*! - Change to shading a list of vtkactor - theCollection - list of vtkactor -*/ -void -SVTK_View -::ChangeRepresentationToSurface(vtkActorCollection* theCollection) -{ - using namespace SVTK; - ForEach(theCollection, - TSetFunction - (&SALOME_Actor::setDisplayMode,1)); - Repaint(); -} - -namespace SVTK -{ - struct TErase - { - VTK::TSetFunction mySetFunction; - TErase(): - mySetFunction(&vtkActor::SetVisibility,false) - {} - void - operator()(SALOME_Actor* theActor) - { - theActor->SetVisibility(false); - // Erase dependent actors - vtkActorCollection* aCollection = vtkActorCollection::New(); - theActor->GetChildActors(aCollection); - VTK::ForEach(aCollection,mySetFunction); - aCollection->Delete(); - } - }; -} - -/*! - To erase all existing VTK presentations -*/ -void -SVTK_View -::EraseAll() -{ - using namespace SVTK; - ForEach(getRenderer()->GetActors(), - TErase()); - Repaint(); -} - -/*! - To display all existing VTK presentations -*/ -void -SVTK_View -::DisplayAll() -{ - using namespace SVTK; - ForEach(getRenderer()->GetActors(), - TSetVisibility(true)); - Repaint(); -} - -/*! - To erase VTK presentation - \param theActor - actor - \param theIsUpdate - updates current viewer -*/ -void -SVTK_View -::Erase(SALOME_Actor* theActor, - bool theIsUpdate) -{ - SVTK::TErase()(theActor); - - if(theIsUpdate) - Repaint(); -} - - -/*! - To erase VTK presentation - \param theIObject - object - \param theIsUpdate - updates current viewer -*/ -void -SVTK_View -::Erase(const Handle(SALOME_InteractiveObject)& theIObject, - bool theIsUpdate) -{ - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject(theIObject), - TErase()); - if(theIsUpdate) - Repaint(); -} - -/*! - To display the VTK presentation -*/ -void -SVTK_View -::Display(SALOME_Actor* theActor, - bool theIsUpdate) -{ - GetRenderer()->AddActor(theActor); - theActor->SetVisibility(true); - - if(theIsUpdate) - Repaint(); -} - -/*! - To display the VTK presentation -*/ -void -SVTK_View -::Display(const Handle(SALOME_InteractiveObject)& theIObject, - bool theIsUpdate) -{ - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject(theIObject), - TSetVisibility(true)); - - if(theIsUpdate) - Repaint(); -} - -/*! - To display VTK presentation with defined #SALOME_InteractiveObject and erase all others -*/ -void -SVTK_View -::DisplayOnly(const Handle(SALOME_InteractiveObject)& theIObject) -{ - EraseAll(); - Display(theIObject); -} - - -namespace SVTK -{ - struct TRemoveAction - { - SVTK_Renderer* myRenderer; - TRemoveAction(SVTK_Renderer* theRenderer): - myRenderer(theRenderer) - {} - void - operator()(SALOME_Actor* theActor) - { - myRenderer->RemoveActor(theActor); - } - }; -} - -/*! - To remove the VTK presentation -*/ -void -SVTK_View -::Remove(const Handle(SALOME_InteractiveObject)& theIObject, - bool theIsUpdate) -{ - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject(theIObject), - TRemoveAction(GetRenderer())); - if(theIsUpdate) - Repaint(); -} - -/*! - To remove the VTK presentation -*/ -void -SVTK_View -::Remove(SALOME_Actor* theActor, - bool theIsUpdate) -{ - GetRenderer()->RemoveActor(theActor); - if(theIsUpdate) - Repaint(); -} - -/*! - To remove all VTK presentations -*/ -void -SVTK_View -::RemoveAll(bool theIsUpdate) -{ - vtkRenderer* aRenderer = getRenderer(); - if(vtkActorCollection* anActors = aRenderer->GetActors()){ - anActors->InitTraversal(); - while(vtkActor *anAct = anActors->GetNextActor()){ - if(SALOME_Actor* aSAct = SALOME_Actor::SafeDownCast(anAct)){ - if(aSAct->hasIO() && aSAct->getIO()->hasEntry()) - aRenderer->RemoveActor( anAct ); - } - } - - if(theIsUpdate) - Repaint(); - } -} - -/*! - \return current transparency - \param theIObject - object -*/ -float -SVTK_View -::GetTransparency(const Handle(SALOME_InteractiveObject)& theIObject) -{ - using namespace SVTK; - SALOME_Actor* anActor = - Find(getRenderer()->GetActors(), - TIsSameIObject(theIObject)); - if(anActor) - return 1.0 - anActor->GetOpacity(); - return -1.0; -} - - -/*! - Sets current transparency - \param theIObject - object - \param theTrans - new transparency -*/ -void -SVTK_View -::SetTransparency(const Handle(SALOME_InteractiveObject)& theIObject, - float theTrans) -{ - vtkFloatingPointType anOpacity = 1.0 - theTrans; - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject(theIObject), - TSetFunction - (&SALOME_Actor::SetOpacity,anOpacity)); -} - -/*! - Change color - \param theIObject - object - \param theColor - new color -*/ -void -SVTK_View -::SetColor(const Handle(SALOME_InteractiveObject)& theIObject, - const QColor& theColor) -{ - vtkFloatingPointType aColor[3] = {theColor.red()/255., theColor.green()/255., theColor.blue()/255.}; - - using namespace SVTK; - ForEachIf(getRenderer()->GetActors(), - TIsSameIObject(theIObject), - TSetFunction - (&SALOME_Actor::SetColor,aColor)); -} - - -/*! - \return object color - \param theIObject - object -*/ -QColor -SVTK_View -::GetColor(const Handle(SALOME_InteractiveObject)& theIObject) -{ - using namespace SVTK; - SALOME_Actor* anActor = - Find(getRenderer()->GetActors(), - TIsSameIObject(theIObject)); - if(anActor){ - vtkFloatingPointType r,g,b; - anActor->GetColor(r,g,b); - return QColor(int(r*255),int(g*255),int(b*255)); - } - - return QColor(0,0,0); -} - diff --git a/src/SVTK/SVTK_View.h b/src/SVTK/SVTK_View.h deleted file mode 100644 index 4c25de9bc..000000000 --- a/src/SVTK/SVTK_View.h +++ /dev/null @@ -1,264 +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 -// -#ifndef SVTK_VIEW_H -#define SVTK_VIEW_H - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include "SVTK.h" -#include "SALOME_InteractiveObject.hxx" - -#include - -class vtkActorCollection; -class vtkRenderer; - -class SVTK_MainWindow; -class SVTK_Renderer; - -class SALOME_Actor; - -//! Main purpose of the class is to provide a way to customize #SVTK_MainWindow. -/*! - This class is initialized by #SVTK_MainWindow and just pass Qt signals from - corresponding #SVTK_RenderWindowInteractor of the #SVTK_MainWindow. - Its main purpose is to provide a simple and flexible way to customize the #SVTK_MainWindow. - So, in your own viewer it is possible to derive new #SVTK_MainWindow and - use existing functionality without any modifications. - */ -class SVTK_EXPORT SVTK_SignalHandler : public QObject -{ - Q_OBJECT; - -public: - SVTK_SignalHandler(SVTK_MainWindow* theMainWindow); - - virtual - ~SVTK_SignalHandler(); - - //! Get reference to its #SVTK_MainWindow - SVTK_MainWindow* - GetMainWindow(); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_MainWindow::Repaint (just for flexibility) - void - Repaint(bool theUpdateTrihedron = true); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_MainWindow::GetRenderer (just for flexibility) - SVTK_Renderer* - GetRenderer(); - - //! Redirect the request to #SVTK_MainWindow::getRenderer (just for flexibility) - vtkRenderer* - getRenderer(); - - //---------------------------------------------------------------------------- - public slots: - void onSelectionChanged(); - - public: - signals: - void MouseMove( QMouseEvent* ); - void MouseButtonPressed( QMouseEvent* ); - void MouseButtonReleased( QMouseEvent* ); - void MouseDoubleClicked( QMouseEvent* ); - void ButtonPressed(const QMouseEvent *event); - void ButtonReleased(const QMouseEvent *event); - void WheelMoved( QWheelEvent* ); - void KeyPressed( QKeyEvent* ); - void KeyReleased( QKeyEvent* ); - void contextMenuRequested( QContextMenuEvent *e ); - void selectionChanged(); - - protected: - SVTK_MainWindow* myMainWindow; -}; - - -//! This class is introduced just for compatibility with old code. -/*! - This class contains frequantly used functionality in old code. - Now, you are supposed to extend existing functionality through - writing corresponding functors (see SVTK_Functor.h for example). - */ -class SVTK_EXPORT SVTK_View : public SVTK_SignalHandler -{ - Q_OBJECT; - -public: - SVTK_View(SVTK_MainWindow* theMainWindow); - - virtual - ~SVTK_View(); - - /* interactive object management */ - //! To highlight a VTK presentation with the same #SALOME_InteractiveObject - void - highlight(const Handle(SALOME_InteractiveObject)& IObject, - bool highlight, - bool immediatly = true); - - //! To unhighlight all VTK presentations - void - unHighlightAll(); - - //! Try to find a SALOME_InteractiveObject in the view that corresponds to the entry - Handle(SALOME_InteractiveObject) - FindIObject(const char* Entry); - - //! Check, if the viewer contains a presentatin with defined #SALOME_InteractiveObject - bool - isInViewer(const Handle(SALOME_InteractiveObject)& IObject); - - //! Check, if a presentatin with defined #SALOME_InteractiveObject is visible - bool - isVisible(const Handle(SALOME_InteractiveObject)& IObject); - - void - rename(const Handle(SALOME_InteractiveObject)& IObject, - const QString& newName); - - //---------------------------------------------------------------------------- - // Displaymode management - //! Get current display mode (obsolete) - int - GetDisplayMode(); - - //! Set current display mode - void - SetDisplayMode(int); - - //! Switch representation wireframe/shading - void - SetDisplayMode(const Handle(SALOME_InteractiveObject)& IObject, - int theMode); - - //! Change all actors to wireframe - void - ChangeRepresentationToWireframe(); - - //! Change all actors to surface - void - ChangeRepresentationToSurface(); - - //! Change to wireframe a list of vtkactor - void - ChangeRepresentationToWireframe(vtkActorCollection* theListofActors); - - //! Change to surface a list of vtkactor - void - ChangeRepresentationToSurface(vtkActorCollection* theListofActors); - - //! Change transparency - void - SetTransparency(const Handle(SALOME_InteractiveObject)& theIObject, - float trans); - - //! Get current transparency - float - GetTransparency(const Handle(SALOME_InteractiveObject)& theIObject); - - //! Change color - void - SetColor(const Handle(SALOME_InteractiveObject)& theIObject, - const QColor& theColor); - - //! Get current color - QColor - GetColor(const Handle(SALOME_InteractiveObject)& theIObject); - - //---------------------------------------------------------------------------- - // Erase Display functions - //! To erase all existing VTK presentations - void - EraseAll(); - - //! To display all existing VTK presentations - void - DisplayAll(); - - //! To remove from the view all existing VTK presentations - void - RemoveAll( const bool immediatly ); - - //! To erase VTK presentation with defined #SALOME_InteractiveObject - void - Erase(const Handle(SALOME_InteractiveObject)& IObject, - bool immediatly = true); - void - Remove(const Handle(SALOME_InteractiveObject)& IObject, - bool immediatly = true); - - //! To display VTK presentation with defined #SALOME_InteractiveObject - void - Display(const Handle(SALOME_InteractiveObject)& IObject, - bool immediatly = true); - - //! To display VTK presentation with defined #SALOME_InteractiveObject and erase all anothers - void - DisplayOnly(const Handle(SALOME_InteractiveObject)& IObject); - - //! To display the VTK presentation - void - Display(SALOME_Actor* SActor, - bool immediatly = true); - - //! To erase the VTK presentation - void - Erase(SALOME_Actor* SActor, - bool immediatly = true); - - //! To remove the VTK presentation - void - Remove(SALOME_Actor* SActor, - bool updateViewer = true); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_Renderer::SetPreselectionProp - void - SetSelectionProp(const double& theRed = 1, - const double& theGreen = 1, - const double& theBlue = 0, - const int& theWidth = 5); - - //! Redirect the request to #SVTK_Renderer::SetPreselectionProp - void - SetPreselectionProp(const double& theRed = 0, - const double& theGreen = 1, - const double& theBlue = 1, - const int& theWidth = 5); - - //! Redirect the request to #SVTK_Renderer::SetPreselectionProp - void - SetSelectionTolerance(const double& theTolNodes = 0.025, - const double& theTolCell = 0.001); - - protected: - int myDisplayMode; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/SVTK_ViewManager.cxx b/src/SVTK/SVTK_ViewManager.cxx deleted file mode 100644 index b7856fdc7..000000000 --- a/src/SVTK/SVTK_ViewManager.cxx +++ /dev/null @@ -1,46 +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 "SVTK_ViewManager.h" -#include "SVTK_ViewModel.h" - -#include - -/*! - Constructor -*/ -SVTK_ViewManager::SVTK_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop ) -: SUIT_ViewManager( study, theDesktop, new SVTK_Viewer() ) -{ - setTitle( VTKViewer_ViewManager::tr( "VTK_VIEW_TITLE" ) ); -} - -/*! - Destructor -*/ -SVTK_ViewManager::~SVTK_ViewManager() -{ -} - -/*! - \return corresponding main window -*/ -SUIT_Desktop* SVTK_ViewManager::getDesktop() -{ - return myDesktop; -} diff --git a/src/SVTK/SVTK_ViewManager.h b/src/SVTK/SVTK_ViewManager.h deleted file mode 100644 index 8ff4efcc9..000000000 --- a/src/SVTK/SVTK_ViewManager.h +++ /dev/null @@ -1,42 +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 -// -#ifndef SVTK_VIEWMANAGER_H -#define SVTK_VIEWMANAGER_H - -#include "SUIT_ViewManager.h" -#include "SVTK.h" - -class SUIT_Desktop; - -//! Extend SUIT_ViewManager to deal with SVTK_Viewer -class SVTK_EXPORT SVTK_ViewManager : public SUIT_ViewManager -{ - Q_OBJECT - -public: - //! Construct the view manager - SVTK_ViewManager( SUIT_Study* study, SUIT_Desktop* ); - - //! Destroy the view manager - virtual ~SVTK_ViewManager(); - - SUIT_Desktop* getDesktop(); -}; - -#endif diff --git a/src/SVTK/SVTK_ViewModel.cxx b/src/SVTK/SVTK_ViewModel.cxx deleted file mode 100644 index 0624c7d47..000000000 --- a/src/SVTK/SVTK_ViewModel.cxx +++ /dev/null @@ -1,510 +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 - -#include -#include -#include - -#include "SUIT_Session.h" - -#include "SVTK_Selection.h" -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_View.h" -#include "SVTK_MainWindow.h" -#include "SVTK_Prs.h" - -#include "VTKViewer_ViewModel.h" - -#include -#include - -// in order NOT TO link with SalomeApp, here the code returns SALOMEDS_Study. -// SalomeApp_Study::studyDS() does it as well, but -- here it is retrieved from -// SALOMEDS::StudyManager - no linkage with SalomeApp. - -// Temporarily commented to avoid awful dependecy on SALOMEDS -// TODO: better mechanism of storing display/erse status in a study -// should be provided... -//static _PTR(Study) getStudyDS() -//{ -// SALOMEDSClient_Study* aStudy = NULL; -// _PTR(StudyManager) aMgr( new SALOMEDS_StudyManager() ); - // get id of SUIT_Study, if it's a SalomeApp_Study, it will return - // id of its underlying SALOMEDS::Study -// SUIT_Application* app = SUIT_Session::session()->activeApplication(); -// if ( !app ) return _PTR(Study)(aStudy); -// SUIT_Study* stud = app->activeStudy(); -// if ( !stud ) return _PTR(Study)(aStudy); -// const int id = stud->id(); // virtual method, must return SALOMEDS_Study id - // get SALOMEDS_Study with this id from StudyMgr -// return aMgr->GetStudyByID( id ); -//} - -/*! - Constructor -*/ -SVTK_Viewer::SVTK_Viewer() -{ - myTrihedronSize = 105; - myTrihedronRelative = true; -} - -/*! - Destructor -*/ -SVTK_Viewer::~SVTK_Viewer() -{ -} - -/*! - \return background color -*/ -QColor -SVTK_Viewer -::backgroundColor() const -{ - return myBgColor; -} - -/*! - Changes background color - \param theColor - new background color -*/ -void -SVTK_Viewer -::setBackgroundColor( const QColor& theColor ) -{ - if ( !theColor.isValid() ) - return; - - QPtrVector aViews = myViewManager->getViews(); - for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ - if(SUIT_ViewWindow* aViewWindow = aViews.at(i)){ - if(TViewWindow* aView = dynamic_cast(aViewWindow)){ - aView->setBackgroundColor(theColor); - } - } - } - - myBgColor = theColor; -} - -/*!Create new instance of view window on desktop \a theDesktop. - *\retval SUIT_ViewWindow* - created view window pointer. - */ -SUIT_ViewWindow* -SVTK_Viewer:: -createView( SUIT_Desktop* theDesktop ) -{ - TViewWindow* aViewWindow = new TViewWindow(theDesktop); - aViewWindow->Initialize(this); - - aViewWindow->setBackgroundColor( backgroundColor() ); - aViewWindow->SetTrihedronSize( trihedronSize(), trihedronRelative() ); - - return aViewWindow; -} - -/*! - \return trihedron size -*/ -vtkFloatingPointType SVTK_Viewer::trihedronSize() const -{ - return myTrihedronSize; -} - -/*! - \return true if thihedron changes size in accordance with bounding box -*/ -bool SVTK_Viewer::trihedronRelative() const -{ - return myTrihedronRelative; -} - -/*! - Sets trihedron size and relativeness( whether thihedron changes size in accordance with bounding box) - \param theSize - new size - \param theRelative - new relativeness -*/ -void SVTK_Viewer::setTrihedronSize( const vtkFloatingPointType theSize, const bool theRelative ) -{ - myTrihedronSize = theSize; - myTrihedronRelative = theRelative; - - if (SUIT_ViewManager* aViewManager = getViewManager()) { - QPtrVector aViews = aViewManager->getViews(); - for ( uint i = 0; i < aViews.count(); i++ ) - { - if ( TViewWindow* aView = dynamic_cast(aViews.at( i )) ) - aView->SetTrihedronSize( theSize, theRelative ); - } - } -} - -/*! - Sets new view manager - \param theViewManager - new view manager -*/ -void SVTK_Viewer::setViewManager(SUIT_ViewManager* theViewManager) -{ - SUIT_ViewModel::setViewManager(theViewManager); - - if ( !theViewManager ) - return; - - connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*))); - - connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*))); - - connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*))); -} - -/*! - Builds popup for vtk viewer -*/ -void -SVTK_Viewer -::contextMenuPopup( QPopupMenu* thePopup ) -{ - thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) ); - thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) ); - - thePopup->insertSeparator(); - - if(TViewWindow* aView = dynamic_cast(myViewManager->getActiveView())){ - if ( !aView->getMainWindow()->getToolBar()->isVisible() ){ - thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) ); - } - aView->RefreshDumpImage(); - } -} - -/*! - SLOT: called on mouse button press, empty implementation -*/ -void -SVTK_Viewer -::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event) -{} - -/*! - SLOT: called on mouse move, empty implementation -*/ -void -SVTK_Viewer -::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event) -{} - -/*! - SLOT: called on mouse button release, empty implementation -*/ -void -SVTK_Viewer -::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event) -{} - -/*! - Enables/disables selection - \param isEnabled - new state -*/ -void -SVTK_Viewer -::enableSelection(bool isEnabled) -{ - mySelectionEnabled = isEnabled; - //!! To be done for view windows -} - -/*! - Enables/disables selection of many object - \param isEnabled - new state -*/ -void -SVTK_Viewer -::enableMultiselection(bool isEnable) -{ - myMultiSelectionEnabled = isEnable; - //!! To be done for view windows -} - -/*! - SLOT: called on dump view operation is activated, stores scene to raster file -*/ -void -SVTK_Viewer -::onDumpView() -{ - if(SUIT_ViewWindow* aView = myViewManager->getActiveView()) - aView->onDumpView(); -} - -/*! - SLOT: called if background color is to be changed changed, passes new color to view port -*/ -void -SVTK_Viewer -::onChangeBgColor() -{ - if(SUIT_ViewWindow* aView = myViewManager->getActiveView()){ - QColor aColor = QColorDialog::getColor( backgroundColor(), aView); - setBackgroundColor(aColor); - } -} - -/*! - SLOT: called when popup item "Show toolbar" is activated, shows toolbar of active view window -*/ -void -SVTK_Viewer -::onShowToolbar() -{ - QPtrVector aViews = myViewManager->getViews(); - for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ - if(TViewWindow* aView = dynamic_cast(aViews.at(i))){ - aView->getMainWindow()->getToolBar()->show(); - } - } -} - -/*! - Display presentation - \param prs - presentation -*/ -void -SVTK_Viewer -::Display( const SALOME_VTKPrs* prs ) -{ - // try do downcast object - if(const SVTK_Prs* aPrs = dynamic_cast( prs )){ - if(aPrs->IsNull()) - return; - if(vtkActorCollection* anActorCollection = aPrs->GetObjects()){ - // get SALOMEDS Study - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - // _PTR(Study) aStudy(getStudyDS()); - anActorCollection->InitTraversal(); - while(vtkActor* anActor = anActorCollection->GetNextActor()){ - if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){ - // Set visibility flag - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //Handle(SALOME_InteractiveObject) anObj = anAct->getIO(); - //if(!anObj.IsNull() && anObj->hasEntry() && aStudy){ - // ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),true,this); - //} - // just display the object - QPtrVector aViews = myViewManager->getViews(); - for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ - if(SVTK_ViewWindow* aViewWindow = dynamic_cast(aViews.at(i))){ - if(SVTK_View* aView = aViewWindow->getView()){ - aView->Display(anAct,false); - if(anAct->IsSetCamera()){ - vtkRenderer* aRenderer = aView->getRenderer(); - anAct->SetCamera( aRenderer->GetActiveCamera() ); - } - } - } - } - } - } - } - } -} - -/*! - Erase presentation - \param prs - presentation - \param forced - removes object from view -*/ -void -SVTK_Viewer -::Erase( const SALOME_VTKPrs* prs, const bool forced ) -{ - // try do downcast object - if(const SVTK_Prs* aPrs = dynamic_cast( prs )){ - if(aPrs->IsNull()) - return; - if(vtkActorCollection* anActorCollection = aPrs->GetObjects()){ - // get SALOMEDS Study - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //_PTR(Study) aStudy(getStudyDS()); - anActorCollection->InitTraversal(); - while(vtkActor* anActor = anActorCollection->GetNextActor()) - if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){ - // Set visibility flag - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //Handle(SALOME_InteractiveObject) anObj = anAct->getIO(); - //if(!anObj.IsNull() && anObj->hasEntry() && aStudy){ - // ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),false,this); - //} - // just display the object - QPtrVector aViews = myViewManager->getViews(); - for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ - if(SVTK_ViewWindow* aViewWindow = dynamic_cast(aViews.at(i))) - if(SVTK_View* aView = aViewWindow->getView()) - if ( forced ) - aView->Remove(anAct,false); - else - aView->Erase(anAct,forced); - } - } - } - } -} - -/*! - Erase all presentations - \param forced - removes all objects from view -*/ -void -SVTK_Viewer -::EraseAll( const bool forced ) -{ - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //_PTR(Study) aStudy(getStudyDS()); - QPtrVector aViews = myViewManager->getViews(); - for(int i = 0, iEnd = aViews.size(); i < iEnd; i++){ - if(SVTK_ViewWindow* aViewWindow = dynamic_cast(aViews.at(i))) - if(SVTK_View* aView = aViewWindow->getView()){ - vtkRenderer* aRenderer = aView->getRenderer(); - vtkActorCollection* anActorCollection = aRenderer->GetActors(); - anActorCollection->InitTraversal(); - while(vtkActor* anActor = anActorCollection->GetNextActor()){ - if(SALOME_Actor* anAct = SALOME_Actor::SafeDownCast(anActor)){ - // Set visibility flag - // Temporarily commented to avoid awful dependecy on SALOMEDS - // TODO: better mechanism of storing display/erse status in a study - // should be provided... - //Handle(SALOME_InteractiveObject) anObj = anAct->getIO(); - //if(!anObj.IsNull() && anObj->hasEntry() && aStudy) - // ToolsGUI::SetVisibility(aStudy,anObj->getEntry(),false,this); - if(forced) - aRenderer->RemoveActor(anAct); - else{ - // just erase actor - anAct->SetVisibility( false ); - // erase dependent actors - vtkActorCollection* aCollection = vtkActorCollection::New(); - anAct->GetChildActors( aCollection ); - aCollection->InitTraversal(); - while(vtkActor* aSubAct = aCollection->GetNextActor()) - aSubAct->SetVisibility( false ); - aCollection->Delete(); - } - } - } - } - } - Repaint(); -} - -/*! - Create presentation corresponding to the entry - \param entry - entry -*/ -SALOME_Prs* -SVTK_Viewer -::CreatePrs( const char* entry ) -{ - SVTK_Prs* prs = new SVTK_Prs(); - if ( entry ) { - if(SVTK_ViewWindow* aViewWindow = dynamic_cast(getViewManager()->getActiveView())) - if(SVTK_View* aView = aViewWindow->getView()){ - vtkRenderer* aRenderer = aView->getRenderer(); - vtkActorCollection* theActors = aRenderer->GetActors(); - theActors->InitTraversal(); - vtkActor* ac; - while( ( ac = theActors->GetNextActor() ) ) { - SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( ac ); - if ( anActor && anActor->hasIO() && !strcmp( anActor->getIO()->getEntry(), entry ) ) { - prs->AddObject( ac ); - } - } - } - } - return prs; -} - -/*! - Auxiliary method called before displaying of objects -*/ -void -SVTK_Viewer -::BeforeDisplay( SALOME_Displayer* d ) -{ - d->BeforeDisplay( this, SALOME_VTKViewType() ); -} - -/*! - Auxiliary method called after displaying of objects -*/ -void -SVTK_Viewer::AfterDisplay( SALOME_Displayer* d ) -{ - d->AfterDisplay( this, SALOME_VTKViewType() ); -} - -/*! - \return true if object is displayed in viewer - \param obj - object to be checked -*/ -bool -SVTK_Viewer -::isVisible( const Handle(SALOME_InteractiveObject)& io ) -{ - QPtrVector aViews = myViewManager->getViews(); - for(int i = 0, iEnd = aViews.size(); i < iEnd; i++) - if(SUIT_ViewWindow* aViewWindow = aViews.at(i)) - if(TViewWindow* aViewWnd = dynamic_cast(aViewWindow)) - if(SVTK_View* aView = aViewWnd->getView()) - if(!aView->isVisible( io )) - return false; - - return true; -} - -/*! - Updates current viewer -*/ -void -SVTK_Viewer -::Repaint() -{ -// if (theUpdateTrihedron) onAdjustTrihedron(); - QPtrVector aViews = myViewManager->getViews(); - for(int i = 0, iEnd = aViews.size(); i < iEnd; i++) - if(TViewWindow* aViewWindow = dynamic_cast(aViews.at(i))) - if(SVTK_View* aView = aViewWindow->getView()) - aView->Repaint(); -} diff --git a/src/SVTK/SVTK_ViewModel.h b/src/SVTK/SVTK_ViewModel.h deleted file mode 100644 index ec61193b2..000000000 --- a/src/SVTK/SVTK_ViewModel.h +++ /dev/null @@ -1,126 +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 -// -#ifndef SVTK_VIEWMODEL_H -#define SVTK_VIEWMODEL_H - -#include "SVTK.h" -#include "SUIT_ViewModel.h" -#include "SVTK_ViewModelBase.h" - -#include "SALOME_Prs.h" -#include "SALOME_InteractiveObject.hxx" - -#include - -class SVTK_ViewWindow; - -//! Extends two interfaces #SVTK_ViewModelBase and #SALOME_View -class SVTK_EXPORT SVTK_Viewer : public SVTK_ViewModelBase, public SALOME_View -{ - Q_OBJECT; - -public: - typedef SVTK_ViewWindow TViewWindow; - - //! Define string representation of the viewer type - static QString Type() { return "VTKViewer"; } - - SVTK_Viewer(); - virtual ~SVTK_Viewer(); - - //! See #SUIT_ViewModel::createView - virtual SUIT_ViewWindow* createView(SUIT_Desktop*); - - //! See #SUIT_ViewModel::createView - virtual void setViewManager(SUIT_ViewManager* theViewManager); - - //! See #SUIT_ViewModel::contextMenuPopup - virtual void contextMenuPopup( QPopupMenu* ); - - //! See #SUIT_ViewModel::getType - virtual QString getType() const { return Type(); } - - //! Get background color of the viewer - QColor backgroundColor() const; - - //! Set background color to the viewer - void setBackgroundColor( const QColor& ); - - //! Get size of trihedron of the viewer (see #SVTK_Renderer::SetTrihedronSize) - 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 vtkFloatingPointType, const bool = true ); - -public: - void enableSelection(bool isEnabled); - bool isSelectionEnabled() const { return mySelectionEnabled; } - - void enableMultiselection(bool isEnable); - bool isMultiSelectionEnabled() const { return myMultiSelectionEnabled; } - - int getSelectionCount() const; - - /* Reimplemented from SALOME_View */ - - //! See #SALOME_View::Display( const SALOME_Prs* ) - void Display( const SALOME_VTKPrs* ); - - //! See #SALOME_View::Erase( const SALOME_VTKPrs*, const bool = false ) - void Erase( const SALOME_VTKPrs*, const bool = false ); - - //! See #SALOME_View::EraseAll( const bool = false ) - void EraseAll( const bool = false ); - - //! See #SALOME_View::CreatePrs( const char* entry = 0 ) - SALOME_Prs* CreatePrs( const char* entry = 0 ); - - //! See #SALOME_View::BeforeDisplay( SALOME_Displayer* d ) - virtual void BeforeDisplay( SALOME_Displayer* d ); - - //! See #SALOME_View::AfterDisplay( SALOME_Displayer* d ) - virtual void AfterDisplay( SALOME_Displayer* d ); - - //! See #SALOME_View::isVisible( const Handle(SALOME_InteractiveObject)& ) - virtual bool isVisible( const Handle(SALOME_InteractiveObject)& ); - - //! See #SALOME_View::Repaint() - virtual void Repaint(); - -protected slots: - void onMousePress(SUIT_ViewWindow*, QMouseEvent*); - void onMouseMove(SUIT_ViewWindow*, QMouseEvent*); - void onMouseRelease(SUIT_ViewWindow*, QMouseEvent*); - - void onDumpView(); - void onShowToolbar(); - void onChangeBgColor(); - -private: - QColor myBgColor; - vtkFloatingPointType myTrihedronSize; - bool myTrihedronRelative; - bool mySelectionEnabled; - bool myMultiSelectionEnabled; -}; - -#endif diff --git a/src/SVTK/SVTK_ViewModelBase.h b/src/SVTK/SVTK_ViewModelBase.h deleted file mode 100644 index 49f335e66..000000000 --- a/src/SVTK/SVTK_ViewModelBase.h +++ /dev/null @@ -1,45 +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 -// -#ifndef SVTK_SELECTIONCHANGED_H -#define SVTK_SELECTIONCHANGED_H - -#include - -#include "SVTK.h" -#include "SUIT_ViewModel.h" - - -//! To define minimal interface for #SVTK_ViewWindow initialization -class SVTK_EXPORT SVTK_ViewModelBase: public SUIT_ViewModel -{ - Q_OBJECT; - -public slots: - //! To invoke Qt #selectionChanged signal - void onSelectionChanged() - { - emit selectionChanged(); - } - - signals: - //! To declare signal on selection changed - void selectionChanged(); -}; - -#endif diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx deleted file mode 100755 index 667f406c3..000000000 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ /dev/null @@ -1,1035 +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 "SALOME_Actor.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "QtxAction.h" - -#include "SUIT_Session.h" -#include "SUIT_ToolButton.h" -#include "SUIT_MessageBox.h" -#include "SUIT_Accel.h" - -#include "SUIT_Tools.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_Accel.h" - -#include "VTKViewer_Utilities.h" - -#include "SVTK_View.h" -#include "SVTK_MainWindow.h" -#include "SVTK_Selector.h" - -#include "SVTK_Event.h" -#include "SVTK_Renderer.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_ViewModelBase.h" -#include "SVTK_InteractorStyle.h" -#include "SVTK_RenderWindowInteractor.h" -#include "SVTK_GenericRenderWindowInteractor.h" -#include "SVTK_CubeAxesActor2D.h" - -#include "SALOME_ListIteratorOfListIO.hxx" - -#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 -*/ -SVTK_ViewWindow -::SVTK_ViewWindow(SUIT_Desktop* theDesktop): - SUIT_ViewWindow(theDesktop), - myMainWindow(NULL), - myView(NULL), - myDumpImage(QImage()) -{} - -/*! - To initialize #SVTK_ViewWindow instance -*/ -void -SVTK_ViewWindow -::Initialize(SVTK_ViewModelBase* theModel) -{ - if(SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr()){ - myMainWindow = new SVTK_MainWindow(this,"SVTK_MainWindow",aResourceMgr,this); - - SVTK_RenderWindowInteractor* anIteractor = - new SVTK_RenderWindowInteractor(myMainWindow,"SVTK_RenderWindowInteractor"); - - SVTK_Selector* aSelector = SVTK_Selector::New(); - - SVTK_GenericRenderWindowInteractor* aDevice = - SVTK_GenericRenderWindowInteractor::New(); - aDevice->SetRenderWidget(anIteractor); - aDevice->SetSelector(aSelector); - - SVTK_Renderer* aRenderer = SVTK_Renderer::New(); - aRenderer->Initialize(aDevice,aSelector); - - anIteractor->Initialize(aDevice,aRenderer,aSelector); - - aDevice->Delete(); - aRenderer->Delete(); - aSelector->Delete(); - - myMainWindow->Initialize(anIteractor); - - SVTK_InteractorStyle* aStyle = SVTK_InteractorStyle::New(); - anIteractor->PushInteractorStyle(aStyle); - aStyle->Delete(); - - setCentralWidget(myMainWindow); - - myView = new SVTK_View(myMainWindow); - Initialize(myView,theModel); - } -} - -/*! - To initialize #SVTK_ViewWindow instance -*/ -void -SVTK_ViewWindow -::Initialize(SVTK_View* theView, - SVTK_ViewModelBase* theModel) -{ - connect(theView,SIGNAL(KeyPressed(QKeyEvent*)), - this,SLOT(onKeyPressed(QKeyEvent*)) ); - connect(theView,SIGNAL(KeyReleased(QKeyEvent*)), - this,SLOT(onKeyReleased(QKeyEvent*))); - connect(theView,SIGNAL(MouseButtonPressed(QMouseEvent*)), - this,SLOT(onMousePressed(QMouseEvent*))); - connect(theView,SIGNAL(MouseButtonReleased(QMouseEvent*)), - this,SLOT(onMouseReleased(QMouseEvent*))); - connect(theView,SIGNAL(MouseDoubleClicked(QMouseEvent*)), - this,SLOT(onMouseDoubleClicked(QMouseEvent*))); - connect(theView,SIGNAL(MouseMove(QMouseEvent*)), - this,SLOT(onMouseMoving(QMouseEvent*))); - connect(theView,SIGNAL(contextMenuRequested(QContextMenuEvent*)), - this,SIGNAL(contextMenuRequested(QContextMenuEvent *))); - connect(theView,SIGNAL(selectionChanged()), - theModel,SLOT(onSelectionChanged())); -} - -/*! - Destructor -*/ -SVTK_ViewWindow -::~SVTK_ViewWindow() -{} - - -/*! - \return corresponding view -*/ -SVTK_View* -SVTK_ViewWindow -::getView() -{ - return myView; -} - -/*! - \return corresponding vtk main window -*/ -SVTK_MainWindow* -SVTK_ViewWindow -::getMainWindow() -{ - return myMainWindow; -} - -/*! - \return corresponding vtk render window -*/ -vtkRenderWindow* -SVTK_ViewWindow -::getRenderWindow() -{ - return getMainWindow()->getRenderWindow(); -} - -/*! - \return corresponding vtk render window interactor -*/ -vtkRenderWindowInteractor* -SVTK_ViewWindow -::getInteractor() -{ - return getMainWindow()->getInteractor(); -} - -/*! - \return corresponding vtk renderer -*/ -vtkRenderer* -SVTK_ViewWindow -::getRenderer() -{ - return myMainWindow->getRenderer(); -} - -/*! - \return corresponding vtk selector -*/ -SVTK_Selector* -SVTK_ViewWindow -::GetSelector() -{ - return myMainWindow->GetSelector(); -} - -/*! - Processes transformation "front view" -*/ -void -SVTK_ViewWindow -::onFrontView() -{ - myMainWindow->onFrontView(); -} - -/*! - Processes transformation "back view" -*/ -void -SVTK_ViewWindow -::onBackView() -{ - myMainWindow->onBackView(); -} - -/*! - Processes transformation "top view" -*/ -void -SVTK_ViewWindow -::onTopView() -{ - myMainWindow->onTopView(); -} - -/*! - Processes transformation "bottom view" -*/ -void -SVTK_ViewWindow -::onBottomView() -{ - myMainWindow->onBottomView(); -} - -/*! - Processes transformation "left view" -*/ -void -SVTK_ViewWindow -::onLeftView() -{ - myMainWindow->onLeftView(); -} - -/*! - Processes transformation "right view" -*/ -void -SVTK_ViewWindow -::onRightView() -{ - myMainWindow->onRightView(); -} - -/*! - Processes transformation "reset view": sets default orientation of viewport camera -*/ -void -SVTK_ViewWindow -::onResetView() -{ - myMainWindow->onResetView(); -} - -/*! - Processes transformation "fit all" -*/ -void -SVTK_ViewWindow -::onFitAll() -{ - myMainWindow->onFitAll(); -} - -/*! - SLOT: called if selection is changed -*/ -void -SVTK_ViewWindow -::onSelectionChanged() -{ - myView->onSelectionChanged(); -} - -/*! - Change selection mode - \param theMode - new selection mode -*/ -void -SVTK_ViewWindow -::SetSelectionMode(Selection_Mode theMode) -{ - myMainWindow->SetSelectionMode( theMode ); -} - -/*! - \return selection mode -*/ -Selection_Mode -SVTK_ViewWindow -::SelectionMode() const -{ - return myMainWindow->SelectionMode(); -} - -/*! - Unhilights all objects in viewer -*/ -void -SVTK_ViewWindow -::unHighlightAll() -{ - myView->unHighlightAll(); -} - -/*! - Hilights/unhilights object in viewer - \param theIO - object to be updated - \param theIsHighlight - if it is true, object will be hilighted, otherwise it will be unhilighted - \param theIsUpdate - update current viewer -*/ -void -SVTK_ViewWindow -::highlight(const Handle(SALOME_InteractiveObject)& theIO, - bool theIsHighlight, - bool theIsUpdate ) -{ - myView->highlight( theIO, theIsHighlight, theIsUpdate ); -} - -/*! - \return true if object is in viewer or in collector - \param theIO - object to be checked -*/ -bool -SVTK_ViewWindow -::isInViewer( const Handle(SALOME_InteractiveObject)& theIO ) -{ - return myView->isInViewer( theIO ); -} - -/*! - \return true if object is displayed in viewer - \param theIO - object to be checked -*/ -bool -SVTK_ViewWindow -::isVisible( const Handle(SALOME_InteractiveObject)& theIO ) -{ - return myView->isVisible( theIO ); -} - -/*! - Display object - \param theEntry - entry that corresponds to intractive objects -*/ -Handle(SALOME_InteractiveObject) -SVTK_ViewWindow -::FindIObject(const char* theEntry) -{ - return myView->FindIObject(theEntry); -} - -/*! - Display object - \param theIO - object - \param theImmediatly - update viewer -*/ -void -SVTK_ViewWindow -::Display(const Handle(SALOME_InteractiveObject)& theIO, - bool theImmediatly) -{ - myView->Display(theIO,theImmediatly); -} - -/*! - Erase object - \param theIO - object - \param theImmediatly - update viewer -*/ -void -SVTK_ViewWindow -::Erase(const Handle(SALOME_InteractiveObject)& theIO, - bool theImmediatly) -{ - myView->Erase(theIO,theImmediatly); -} - -/*! - Display only passed object - \param theIO - object -*/ -void -SVTK_ViewWindow -::DisplayOnly(const Handle(SALOME_InteractiveObject)& theIO) -{ - myView->DisplayOnly(theIO); -} - -/*! - Display all objects in view -*/ -void -SVTK_ViewWindow -::DisplayAll() -{ - myView->DisplayAll(); -} - -/*! - Erase all objects in view -*/ -void -SVTK_ViewWindow -::EraseAll() -{ - myView->EraseAll(); -} - -/*! - Sets background color - \param color - new background color -*/ -void -SVTK_ViewWindow -::setBackgroundColor( const QColor& color ) -{ - myMainWindow->SetBackgroundColor( color ); - SUIT_ViewWindow::setBackgroundColor( color ); -} - -/*! - \return background color of viewer -*/ -QColor -SVTK_ViewWindow -::backgroundColor() const -{ - return myMainWindow->BackgroundColor(); -} - -/*! - Updates current viewer -*/ -void -SVTK_ViewWindow -::Repaint(bool theUpdateTrihedron) -{ - myMainWindow->Repaint( theUpdateTrihedron ); -} - -/*! - Redirect the request to #SVTK_Renderer::GetScale -*/ -void -SVTK_ViewWindow -::GetScale( double theScale[3] ) -{ - myMainWindow->GetScale( theScale ); -} - -/*! - Redirect the request to #SVTK_Renderer::SetScale -*/ -void -SVTK_ViewWindow -::SetScale( double theScale[3] ) -{ - myMainWindow->SetScale( theScale ); -} - -/*! - Redirect the request to #SVTK_Renderer::IsTrihedronDisplayed -*/ -bool -SVTK_ViewWindow -::isTrihedronDisplayed() -{ - return myMainWindow->IsTrihedronDisplayed(); -} - -/*! - Redirect the request to #SVTK_Renderer::IsCubeAxesDisplayed -*/ -bool -SVTK_ViewWindow -::isCubeAxesDisplayed() -{ - return myMainWindow->IsCubeAxesDisplayed(); -} - -/*! - Redirect the request to #SVTK_Renderer::OnViewTrihedron -*/ -void -SVTK_ViewWindow -::onViewTrihedron() -{ - myMainWindow->onViewTrihedron(); -} - -/*! - Redirect the request to #SVTK_Renderer::OnViewCubeAxes -*/ -void -SVTK_ViewWindow -::onViewCubeAxes() -{ - myMainWindow->onViewCubeAxes(); -} - -/*! - Redirect the request to #SVTK_Renderer::GetTrihedron -*/ -VTKViewer_Trihedron* -SVTK_ViewWindow:: -GetTrihedron() -{ - return myMainWindow->GetTrihedron(); -} - -/*! - Redirect the request to #SVTK_Renderer::GetCubeAxes -*/ -SVTK_CubeAxesActor2D* -SVTK_ViewWindow -::GetCubeAxes() -{ - return myMainWindow->GetCubeAxes(); -} - -/*! - \return trihedron size -*/ -vtkFloatingPointType -SVTK_ViewWindow -::GetTrihedronSize() const -{ - return myMainWindow->GetTrihedronSize(); -} - -/*! - Sets trihedron size - \param theSize - new trihedron size - \param theRelative - trihedron relativeness -*/ -void -SVTK_ViewWindow -::SetTrihedronSize(const vtkFloatingPointType theSize, const bool theRelative) -{ - myMainWindow->SetTrihedronSize(theSize, theRelative); -} - -/*! If parameter theIsForcedUpdate is true, recalculate parameters for - * trihedron and cube axes, even if trihedron and cube axes is invisible. - */ -void -SVTK_ViewWindow -::AdjustTrihedrons(const bool theIsForcedUpdate) -{ - myMainWindow->AdjustActors(); -} - -/*! - Redirect the request to #SVTK_Renderer::OnAdjustTrihedron -*/ -void -SVTK_ViewWindow -::onAdjustTrihedron() -{ - myMainWindow->onAdjustTrihedron(); -} - -/*! - Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes -*/ -void -SVTK_ViewWindow -::onAdjustCubeAxes() -{ - myMainWindow->onAdjustCubeAxes(); -} - -/*! - Emits key pressed -*/ -void -SVTK_ViewWindow -::onKeyPressed(QKeyEvent* event) -{ - emit keyPressed( this, event ); -} - -/*! - Emits key released -*/ -void -SVTK_ViewWindow -::onKeyReleased(QKeyEvent* event) -{ - emit keyReleased( this, event ); -} - -/*! - Emits mouse pressed -*/ -void -SVTK_ViewWindow -::onMousePressed(QMouseEvent* event) -{ - emit mousePressed(this, event); -} - -/*! - Emits mouse released -*/ -void -SVTK_ViewWindow -::onMouseReleased(QMouseEvent* event) -{ - emit mouseReleased( this, event ); -} - -/*! - Emits mouse moving -*/ -void -SVTK_ViewWindow -::onMouseMoving(QMouseEvent* event) -{ - emit mouseMoving( this, event ); -} - -/*! - Emits mouse double clicked -*/ -void -SVTK_ViewWindow -::onMouseDoubleClicked( QMouseEvent* event ) -{ - emit mouseDoubleClicked( this, event ); -} - -/*! - Redirect the request to #SVTK_Renderer::AddActor -*/ -void -SVTK_ViewWindow -::AddActor( VTKViewer_Actor* theActor, - bool theUpdate ) -{ - myMainWindow->AddActor( theActor, theUpdate ); -} - -/*! - Redirect the request to #SVTK_Renderer::RemoveActor -*/ -void -SVTK_ViewWindow -::RemoveActor( VTKViewer_Actor* theActor, - bool theUpdate ) -{ - myMainWindow->RemoveActor( theActor, theUpdate ); -} - -/*! - \return QImage, containing all scene rendering in window -*/ -QImage -SVTK_ViewWindow -::dumpView() -{ - if ( myMainWindow->getToolBar()->hasMouse() || myDumpImage.isNull() ) - return myMainWindow->dumpView(); - - return myDumpImage; -} - -/*! - \refresh QImage, containing all scene rendering in window -*/ -void SVTK_ViewWindow::RefreshDumpImage() -{ - myDumpImage = myMainWindow->dumpView(); -} - -/*! - Redirect the request to #SVTK_Renderer::SetSelectionProp -*/ -void -SVTK_ViewWindow -::SetSelectionProp(const double& theRed, - const double& theGreen, - const double& theBlue, - const int& theWidth) -{ - myView->SetSelectionProp(theRed,theGreen,theBlue,theWidth); -} - -/*! - Redirect the request to #SVTK_Renderer::SetSelectionProp -*/ -void -SVTK_ViewWindow -::SetPreselectionProp(const double& theRed, - const double& theGreen, - const double& theBlue, - const int& theWidth) -{ - myView->SetPreselectionProp(theRed,theGreen,theBlue,theWidth); -} - -/*! - Redirect the request to #SVTK_Renderer::SetSelectionTolerance -*/ -void -SVTK_ViewWindow -::SetSelectionTolerance(const double& theTolNodes, - const double& theTolItems) -{ - myView->SetSelectionTolerance(theTolNodes,theTolItems); -} - -/*! - Performs action - \param accelAction - action -*/ -bool -SVTK_ViewWindow -::action( const int accelAction ) -{ - if ( !myMainWindow->hasFocus() ) - return false; - if ( accelAction == SUIT_Accel::ZoomFit ) - onFitAll(); - else { - int anEvent = SVTK::convertAction( accelAction ); - myMainWindow->InvokeEvent( anEvent, 0 ); - } - return true; -} - -// old visual parameters had 13 values. New format added additional -// 76 values for graduated axes, so both numbers are processed. -const int nNormalParams = 13; // number of view windows parameters excluding graduated axes params -const int nGradAxisParams = 25; // number of parameters of ONE graduated axis (X, Y, or Z) -const int nAllParams = nNormalParams + 3*nGradAxisParams + 1; // number of all visual parameters - -/*! The method returns visual parameters of a graduated axis actor (x,y,z axis of graduated axes) - */ -QString getGradAxisVisualParams( vtkAxisActor2D* actor ) -{ - QString params; - if ( !actor ) - return params; - - // Name - bool isVisible = actor->GetTitleVisibility(); - QString title ( actor->GetTitle() ); - vtkFloatingPointType color[ 3 ]; - int font = VTK_ARIAL; - int bold = 0; - int italic = 0; - int shadow = 0; - - vtkTextProperty* txtProp = actor->GetTitleTextProperty(); - if ( txtProp ) - { - txtProp->GetColor( color ); - font = txtProp->GetFontFamily(); - bold = txtProp->GetBold(); - italic = txtProp->GetItalic(); - shadow = txtProp->GetShadow(); - } - params.sprintf( "* Graduated Axis: * Name *%u*%s*%.2f*%.2f*%.2f*%u*%u*%u*%u", isVisible, - title.latin1(), color[0], color[1], color[2], font, bold, italic, shadow ); - - // Labels - isVisible = actor->GetLabelVisibility(); - int labels = actor->GetNumberOfLabels(); - int offset = actor->GetTickOffset(); - font = VTK_ARIAL; - bold = false; - italic = false; - shadow = false; - - txtProp = actor->GetLabelTextProperty(); - if ( txtProp ) - { - txtProp->GetColor( color ); - font = txtProp->GetFontFamily(); - bold = txtProp->GetBold(); - italic = txtProp->GetItalic(); - shadow = txtProp->GetShadow(); - } - params += QString().sprintf( "* Labels *%u*%u*%u*%.2f*%.2f*%.2f*%u*%u*%u*%u", isVisible, labels, offset, - color[0], color[1], color[2], font, bold, italic, shadow ); - - // Tick marks - isVisible = actor->GetTickVisibility(); - int length = actor->GetTickLength(); - - params += QString().sprintf( "* Tick marks *%u*%u", isVisible, length ); - - return params; -} - -/*! The method restores visual parameters of a graduated axis actor (x,y,z axis) - */ -void setGradAxisVisualParams( vtkAxisActor2D* actor, const QString& params ) -{ - if ( !actor ) - return; - - QStringList paramsLst = QStringList::split( '*', params, true ); - - if ( paramsLst.size() == nGradAxisParams ) { // altogether name, lable, ticks parameters make up 25 values - - // retrieve and set name parameters - bool isVisible = paramsLst[2].toUShort(); - QString title = paramsLst[3]; - vtkFloatingPointType color[3]; - color[0] = paramsLst[4].toDouble(); - color[1] = paramsLst[5].toDouble(); - color[2] = paramsLst[6].toDouble(); - int font = paramsLst[7].toInt(); - int bold = paramsLst[8].toInt(); - int italic = paramsLst[9].toInt(); - int shadow = paramsLst[10].toInt(); - - actor->SetTitleVisibility( isVisible ); - actor->SetTitle( title.latin1() ); - vtkTextProperty* txtProp = actor->GetTitleTextProperty(); - if ( txtProp ) { - txtProp->SetColor( color ); - txtProp->SetFontFamily( font ); - txtProp->SetBold( bold ); - txtProp->SetItalic( italic ); - txtProp->SetShadow( shadow ); - } - - // retrieve and set lable parameters - isVisible = paramsLst[12].toUShort(); - int labels = paramsLst[13].toInt(); - int offset = paramsLst[14].toInt(); - color[0] = paramsLst[15].toDouble(); - color[1] = paramsLst[16].toDouble(); - color[2] = paramsLst[17].toDouble(); - font = paramsLst[18].toInt(); - bold = paramsLst[19].toInt(); - italic = paramsLst[20].toInt(); - shadow = paramsLst[21].toInt(); - - actor->SetLabelVisibility( isVisible ); - actor->SetNumberOfLabels( labels ); - actor->SetTickOffset( offset ); - txtProp = actor->GetLabelTextProperty(); - if ( txtProp ) { - txtProp->SetColor( color ); - txtProp->SetFontFamily( font ); - txtProp->SetBold( bold ); - txtProp->SetItalic( italic ); - txtProp->SetShadow( shadow ); - } - - // retrieve and set tick marks properties - isVisible = paramsLst[23].toUShort(); - int length = paramsLst[24].toInt(); - - actor->SetTickVisibility( isVisible ); - actor->SetTickLength( length ); - } -} - -/*! The method returns the visual parameters of this view as a formated string - */ -QString -SVTK_ViewWindow -::getVisualParameters() -{ - double pos[3], focalPnt[3], viewUp[3], parScale, scale[3]; - - // save position, focal point, viewUp, scale - vtkCamera* camera = getRenderer()->GetActiveCamera(); - camera->GetPosition( pos ); - camera->GetFocalPoint( focalPnt ); - camera->GetViewUp( viewUp ); - parScale = camera->GetParallelScale(); - GetScale( scale ); - - // Parameters are given in the following format:view position (3 digits), focal point position (3 digits) - // view up values (3 digits), parallel scale (1 digit), scale (3 digits, - // Graduated axes parameters (X, Y, Z axes parameters) - QString retStr; - retStr.sprintf( "%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e", - pos[0], pos[1], pos[2], focalPnt[0], focalPnt[1], focalPnt[2], - viewUp[0], viewUp[1], viewUp[2], parScale, scale[0], scale[1], scale[2] ); - - // save graduated axes parameters - if ( SVTK_CubeAxesActor2D* gradAxesActor = GetCubeAxes() ) { - retStr += QString( "*%1" ).arg( getMainWindow()->IsCubeAxesDisplayed() ); - retStr += ::getGradAxisVisualParams( gradAxesActor->GetXAxisActor2D() ); - retStr += ::getGradAxisVisualParams( gradAxesActor->GetYAxisActor2D() ); - retStr += ::getGradAxisVisualParams( gradAxesActor->GetZAxisActor2D() ); - } - - return retStr; -} - -/*! - The method restores visual parameters of this view or postpones it untill the view is shown -*/ -void -SVTK_ViewWindow -::setVisualParameters( const QString& parameters ) -{ - SVTK_RenderWindowInteractor* anInteractor = getMainWindow()->GetInteractor(); - if ( anInteractor->isVisible() ) { - doSetVisualParameters( parameters ); - } - else { - myVisualParams = parameters; - anInteractor->installEventFilter(this); - } -} - -/*! - The method restores visual parameters of this view from a formated string -*/ -void -SVTK_ViewWindow -::doSetVisualParameters( const QString& parameters ) -{ - QStringList paramsLst = QStringList::split( '*', parameters, true ); - if ( paramsLst.size() >= nNormalParams ) { - // 'reading' list of parameters - double pos[3], focalPnt[3], viewUp[3], parScale, scale[3]; - pos[0] = paramsLst[0].toDouble(); - pos[1] = paramsLst[1].toDouble(); - pos[2] = paramsLst[2].toDouble(); - focalPnt[0] = paramsLst[3].toDouble(); - focalPnt[1] = paramsLst[4].toDouble(); - focalPnt[2] = paramsLst[5].toDouble(); - viewUp[0] = paramsLst[6].toDouble(); - viewUp[1] = paramsLst[7].toDouble(); - viewUp[2] = paramsLst[8].toDouble(); - parScale = paramsLst[9].toDouble(); - scale[0] = paramsLst[10].toDouble(); - scale[1] = paramsLst[11].toDouble(); - scale[2] = paramsLst[12].toDouble(); - - // applying parameters - vtkCamera* camera = getRenderer()->GetActiveCamera(); - camera->SetPosition( pos ); - camera->SetFocalPoint( focalPnt ); - camera->SetViewUp( viewUp ); - camera->SetParallelScale( parScale ); - SetScale( scale ); - - // apply graduated axes parameters - SVTK_CubeAxesActor2D* gradAxesActor = GetCubeAxes(); - if ( gradAxesActor && paramsLst.size() == nAllParams ) { - - int i = nNormalParams+1, j = i + nGradAxisParams - 1; - ::setGradAxisVisualParams( gradAxesActor->GetXAxisActor2D(), parameters.section( '*', i, j ) ); - i = j + 1; j += nGradAxisParams; - ::setGradAxisVisualParams( gradAxesActor->GetYAxisActor2D(), parameters.section( '*', i, j ) ); - i = j + 1; j += nGradAxisParams; - ::setGradAxisVisualParams( gradAxesActor->GetZAxisActor2D(), parameters.section( '*', i, j ) ); - - if ( paramsLst[13].toUShort() ) - gradAxesActor->VisibilityOn(); - else - gradAxesActor->VisibilityOff(); - } - } -} - - -/*! - Delayed setVisualParameters -*/ -bool SVTK_ViewWindow::eventFilter( QObject* theWatched, QEvent* theEvent ) -{ - if ( theEvent->type() == QEvent::Show && theWatched->inherits( "SVTK_RenderWindowInteractor" ) ) { - SVTK_RenderWindowInteractor* anInteractor = (SVTK_RenderWindowInteractor*)theWatched; - if ( anInteractor->isVisible() ) { - doSetVisualParameters( myVisualParams ); - anInteractor->removeEventFilter( this ); // theWatched = RenderWindowInteractor - } - } - return SUIT_ViewWindow::eventFilter( theWatched, theEvent ); -} diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h deleted file mode 100755 index 809168505..000000000 --- a/src/SVTK/SVTK_ViewWindow.h +++ /dev/null @@ -1,373 +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 -// -#ifndef SVTK_VIEWWINDOW_H -#define SVTK_VIEWWINDOW_H - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include "SVTK.h" -#include "SVTK_Selection.h" -#include "SUIT_ViewWindow.h" -#include "SALOME_InteractiveObject.hxx" - -#include - -class SUIT_Desktop; - -class VTKViewer_Actor; -class VTKViewer_Trihedron; - -class SVTK_ViewModelBase; -class SVTK_MainWindow; -class SVTK_Selector; -class SVTK_View; - -class SVTK_InteractorStyle; -class SVTK_CubeAxesActor2D; - -class SVTK_RenderWindow; -class SVTK_RenderWindowInteractor; - -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 -{ - Q_OBJECT; - - public: - //! To construct #SVTK_ViewWindow instance - SVTK_ViewWindow(SUIT_Desktop* theDesktop); - - virtual - ~SVTK_ViewWindow(); - - //! To initialize #SVTK_ViewWindow instance - virtual - void - Initialize(SVTK_ViewModelBase* theModel); - - //! Get #SVTK_View - SVTK_View* - getView(); - - //! Get #SVTK_MainWindow - SVTK_MainWindow* - getMainWindow(); - - //! Redirect the request to #SVTK_MainWindow::getRenderWindow - vtkRenderWindow* - getRenderWindow(); - - //! Redirect the request to #SVTK_MainWindow::getInteractor - vtkRenderWindowInteractor* - getInteractor(); - - //! Redirect the request to #SVTK_MainWindow::getRenderer - vtkRenderer* - getRenderer(); - - //! Redirect the request to #SVTK_MainWindow::GetSelector - SVTK_Selector* - GetSelector(); - - //! Redirect the request to #SVTK_Selector::SelectionMode - Selection_Mode - SelectionMode() const; - - //! Change selection mode - virtual - void - SetSelectionMode(Selection_Mode theMode); - - //! Redirect the request to #SVTK_MainWindow::SetBackgroundColor - virtual - void - setBackgroundColor( const QColor& ); - - //! Redirect the request to #SVTK_MainWindow::SetBackgroundColor - QColor - backgroundColor() const; - - //! Redirect the request to #SVTK_Renderer::IsTrihedronDisplayed - bool - isTrihedronDisplayed(); - - //! Redirect the request to #SVTK_Renderer::IsCubeAxesDisplayed - bool - isCubeAxesDisplayed(); - - /* interactive object management */ - //! Redirect the request to #SVTK_View::highlight (to support old code) - virtual - void - highlight(const Handle(SALOME_InteractiveObject)& theIO, - bool theIsHighlight = true, - bool theIsUpdate = true); - - //! Redirect the request to #SVTK_View::unHighlightAll (to support old code) - virtual - void - unHighlightAll(); - - //! Redirect the request to #SVTK_View::isInViewer (to support old code) - bool - isInViewer(const Handle(SALOME_InteractiveObject)& theIObject); - - //! Redirect the request to #SVTK_View::isVisible (to support old code) - bool - isVisible(const Handle(SALOME_InteractiveObject)& theIObject); - - //! Redirect the request to #SVTK_View::FindIObject (to support old code) - //---------------------------------------------------------------------------- - Handle(SALOME_InteractiveObject) - FindIObject(const char* theEntry); - - /* display */ - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_View::Display (to support old code) - virtual - void - Display(const Handle(SALOME_InteractiveObject)& theIObject, - bool theImmediatly = true); - - //! Redirect the request to #SVTK_View::DisplayOnly (to support old code) - virtual - void - DisplayOnly(const Handle(SALOME_InteractiveObject)& theIObject); - - //! Redirect the request to #SVTK_View::Erase (to support old code) - virtual - void - Erase(const Handle(SALOME_InteractiveObject)& theIObject, - bool theImmediatly = true); - - //! Redirect the request to #SVTK_View::DisplayAll (to support old code) - virtual - void - DisplayAll(); - - //! Redirect the request to #SVTK_View::EraseAll (to support old code) - virtual - void - EraseAll(); - - //! To repaint the viewer - virtual - void - Repaint(bool theUpdateTrihedron = true); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_Renderer::SetScale - virtual - void - SetScale( double theScale[3] ); - - //! Redirect the request to #SVTK_Renderer::GetScale - virtual - void - GetScale( double theScale[3] ); - - //! Redirect the request to #SVTK_Renderer::AddActor - virtual - void - AddActor(VTKViewer_Actor* theActor, - bool theIsUpdate = false); - - //! Redirect the request to #SVTK_Renderer::RemoveActor - virtual - void - RemoveActor(VTKViewer_Actor* theActor, - bool theIsUpdate = false); - - //---------------------------------------------------------------------------- - //! Redirect the request to #SVTK_Renderer::AdjustActors - virtual - void - AdjustTrihedrons(const bool theIsForced); - - //! Redirect the request to #SVTK_Renderer::GetTrihedron - VTKViewer_Trihedron* - GetTrihedron(); - - //! Redirect the request to #SVTK_Renderer::GetCubeAxes - SVTK_CubeAxesActor2D* - GetCubeAxes(); - - //! Redirect the request to #SVTK_Renderer::GetTrihedronSize - vtkFloatingPointType - GetTrihedronSize() const; - - //! Redirect the request to #SVTK_Renderer::SetTrihedronSize - virtual - void - SetTrihedronSize( const vtkFloatingPointType, const bool = true ); - - //! Redirect the request to #SVTK_Renderer::SetSelectionProp - virtual - void - SetSelectionProp(const double& theRed = 1, - const double& theGreen = 1, - const double& theBlue = 0, - const int& theWidth = 5); - - //! Redirect the request to #SVTK_Renderer::SetPreselectionProp - virtual - void - SetPreselectionProp(const double& theRed = 0, - const double& theGreen = 1, - const double& theBlue = 1, - const int& theWidth = 5); - - //! Redirect the request to #SVTK_Renderer::SetSelectionTolerance - virtual - void - SetSelectionTolerance(const double& theTolNodes = 0.025, - const double& theTolCell = 0.001); - - //! Methods to save/restore visual parameters of a view (pan, zoom, etc.) - virtual - QString - getVisualParameters(); - - virtual - void - setVisualParameters( const QString& parameters ); - - virtual - bool - eventFilter( QObject*, QEvent* ); - - virtual - void RefreshDumpImage(); - -public slots: - virtual - void - onSelectionChanged(); - -signals: - void selectionChanged(); - -public slots: - //! Redirect the request to #SVTK_Renderer::OnFrontView - virtual - void - onFrontView(); - - //! Redirect the request to #SVTK_Renderer::OnBackView - virtual - void - onBackView(); - - //! Redirect the request to #SVTK_Renderer::OnTopView - virtual - void - onTopView(); - - //! Redirect the request to #SVTK_Renderer::OnBottomView - virtual - void - onBottomView(); - - //! Redirect the request to #SVTK_Renderer::OnRightView - virtual - void - onRightView(); - - //! Redirect the request to #SVTK_Renderer::OnLeftView - virtual - void - onLeftView(); - - //! Redirect the request to #SVTK_Renderer::OnResetView - virtual - void - onResetView(); - - //! Redirect the request to #SVTK_Renderer::OnFitAll - virtual - void - onFitAll(); - - //! Redirect the request to #SVTK_Renderer::OnViewTrihedron - virtual - void - onViewTrihedron(); - - //! Redirect the request to #SVTK_Renderer::OnViewCubeAxes - virtual - void - onViewCubeAxes(); - - //! Redirect the request to #SVTK_Renderer::OnAdjustTrihedron - virtual - void - onAdjustTrihedron(); - - //! Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes - virtual - void - onAdjustCubeAxes(); - -protected slots: - void onKeyPressed(QKeyEvent* event); - void onKeyReleased(QKeyEvent* event); - void onMousePressed(QMouseEvent* event); - void onMouseDoubleClicked(QMouseEvent* event); - void onMouseReleased(QMouseEvent* event); - void onMouseMoving(QMouseEvent* event); - -protected: - virtual - void - Initialize(SVTK_View* theView, - SVTK_ViewModelBase* theModel); - - void - doSetVisualParameters( const QString& ); - - QImage dumpView(); - 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 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SVTK/resources/SVTK_images.po b/src/SVTK/resources/SVTK_images.po deleted file mode 100644 index cb7df8649..000000000 --- a/src/SVTK/resources/SVTK_images.po +++ /dev/null @@ -1,43 +0,0 @@ -# VISU VISUGUI : GUI of VISU component -# -# 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 : -# Module : - -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: 2005-05-10 15:20+0400\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - - -msgid "ICON_SVTK_SCALING" -msgstr "view_scaling.png" - -msgid "ICON_GRADUATED_AXES" -msgstr "view_graduated_axes.png" - -msgid "ICON_UPDATE_RATE" -msgstr "view_update_rate.png" diff --git a/src/SVTK/resources/SVTK_msg_en.po b/src/SVTK/resources/SVTK_msg_en.po deleted file mode 100755 index 1e28bfdbd..000000000 --- a/src/SVTK/resources/SVTK_msg_en.po +++ /dev/null @@ -1,277 +0,0 @@ -# SALOME SALOMEGUI : implementation of desktop and GUI kernel -# -# 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 : SALOMEGUI_msg_en.po -# Module : SALOME - -msgid "" -msgstr "" -"Project-Id-Version: example-Qt-message-extraction\n" -"POT-Creation-Date: 1999-02-23 15:38+0200\n" -"PO-Revision-Date: 2005-05-31 13:25+0400\n" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -msgid "LBL_TOOLBAR_LABEL" -msgstr "View Operations" - -msgid "DSC_FRONT_VIEW" -msgstr "Front View" - -msgid "MNU_FRONT_VIEW" -msgstr "Front" - -msgid "DSC_BACK_VIEW" -msgstr "Back View" - -msgid "MNU_BACK_VIEW" -msgstr "Back" - -msgid "DSC_TOP_VIEW" -msgstr "Top View" - -msgid "MNU_TOP_VIEW" -msgstr "Top" - -msgid "DSC_BOTTOM_VIEW" -msgstr "Bottom View" - -msgid "MNU_BOTTOM_VIEW" -msgstr "Bottom" - -msgid "DSC_LEFT_VIEW" -msgstr "Left View" - -msgid "MNU_LEFT_VIEW" -msgstr "Left" - -msgid "DSC_RIGHT_VIEW" -msgstr "Right View" - -msgid "MNU_RIGHT_VIEW" -msgstr "Right" - -msgid "DSC_RESET_VIEW" -msgstr "Reset View Point" - -msgid "MNU_RESET_VIEW" -msgstr "Reset" - -msgid "DSC_FITALL" -msgstr "Fit all objects inside the view frame" - -msgid "MNU_FITALL" -msgstr "Fit All" - -msgid "DSC_FITRECT" -msgstr "Fit area within the view frame" - -msgid "MNU_FITRECT" -msgstr "Fit Area" - -msgid "DSC_ZOOM_VIEW" -msgstr "Zoom the view" - -msgid "MNU_ZOOM_VIEW" -msgstr "Zoom" - -msgid "DSC_PAN_VIEW" -msgstr "Panning the view" - -msgid "MNU_PAN_VIEW" -msgstr "Panning" - -msgid "DSC_GLOBALPAN_VIEW" -msgstr "Selection of a new center of the view" - -msgid "MNU_GLOBALPAN_VIEW" -msgstr "Global Panning" - -msgid "DSC_ROTATE_VIEW" -msgstr "Rotation of the point of view around the scene center" - -msgid "MNU_ROTATE_VIEW" -msgstr "Rotation" - -msgid "DSC_DUMP_VIEW" -msgstr "Saves the active view in the image file" - -msgid "MNU_DUMP_VIEW" -msgstr "Dump view..." - -msgid "VTK_IMAGE_FILES" -msgstr "Images Files (*.bmp *.png *.jpg *.jpeg)" - -msgid "INF_APP_DUMP_VIEW" -msgstr "Dump view" - -msgid "ERR_DOC_CANT_SAVE_FILE" -msgstr "Cannot save file" - -msgid "ERROR" -msgstr "Error" - -msgid "SVTK_Viewer::MEN_DUMP_VIEW" -msgstr "Dump view..." - -msgid "SVTK_Viewer::MEN_SHOW_TOOLBAR" -msgstr "Show toolbar" - -msgid "SVTK_Viewer::MEN_CHANGE_BACKGROUD" -msgstr "Change background..." - -msgid "SVTK_ViewManager::VTK_VIEW_TITLE" -msgstr "VTK scene:%1 - viewer:%2" - -msgid "MNU_SHOW_TRIHEDRON" -msgstr "Show/Hide trihedron" - -msgid "DSC_SHOW_TRIHEDRON" -msgstr "Show/Hide trihedron in the current view" - -msgid "SVTK_NonIsometricDlg::MEN_SCALING" -msgstr "Scaling" - -msgid "SVTK_NonIsometricDlg::O&K" -msgstr "" - -msgid "SVTK_NonIsometricDlg::&Apply" -msgstr "" - -msgid "SVTK_NonIsometricDlg::&Cancel" -msgstr "" - -msgid "SVTK_NonIsometricDlg::&Reset" -msgstr "" - -msgid "SVTK_NonIsometricDlg::DLG_TITLE" -msgstr "Scaling" - -msgid "SVTK_NonIsometricDlg::LBL_X" -msgstr "X :" - -msgid "SVTK_NonIsometricDlg::LBL_Y" -msgstr "Y :" - -msgid "SVTK_NonIsometricDlg::LBL_Z" -msgstr "Z :" - -msgid "SVTK_MainWindow::MNU_SVTK_SCALING" -msgstr "Scaling" - -msgid "SVTK_MainWindow::DSC_SVTK_SCALING" -msgstr "Scaling" - -msgid "SVTK_FontWidget::ARIAL" -msgstr "Arial" - -msgid "SVTK_FontWidget::COURIER" -msgstr "Courier" - -msgid "SVTK_FontWidget::TIMES" -msgstr "Times" - -msgid "SVTK_FontWidget::BOLD" -msgstr "Bold" - -msgid "SVTK_FontWidget::ITALIC" -msgstr "Italic" - -msgid "SVTK_FontWidget::SHADOW" -msgstr "Shadow" - -msgid "SVTK_CubeAxesDlg::CAPTION" -msgstr "Graduated axes" - -msgid "SVTK_CubeAxesDlg::X_AXIS" -msgstr "X axis" - -msgid "SVTK_CubeAxesDlg::Y_AXIS" -msgstr "Y axis" - -msgid "SVTK_CubeAxesDlg::Z_AXIS" -msgstr "Z axis" - -msgid "SVTK_CubeAxesDlg::IS_VISIBLE" -msgstr "Is visible" - -msgid "SVTK_AxisWidget::AXIS_NAME" -msgstr "Axis name" - -msgid "SVTK_AxisWidget::IS_VISIBLE" -msgstr "Is visible" - -msgid "SVTK_AxisWidget::NAME" -msgstr "Name" - -msgid "SVTK_AxisWidget::FONT" -msgstr "Font" - -msgid "SVTK_AxisWidget::LABELS" -msgstr "Labels" - -msgid "SVTK_AxisWidget::NUMBER" -msgstr "Number" - -msgid "SVTK_AxisWidget::OFFSET" -msgstr "Offset" - -msgid "SVTK_AxisWidget::TICK_MARKS" -msgstr "Tick marks" - -msgid "SVTK_AxisWidget::LENGTH" -msgstr "Length" - -msgid "SVTK_MainWindow::MNU_SVTK_GRADUATED_AXES" -msgstr "Graduated axes" - -msgid "SVTK_MainWindow::DSC_SVTK_GRADUATED_AXES" -msgstr "Graduated axes" - -msgid "SVTK_MainWindow::MNU_SVTK_UPDATE_RATE" -msgstr "Update rate" - -msgid "SVTK_MainWindow::DSC_SVTK_UPDATE_RATE" -msgstr "Update rate" - -msgid "SVTK_UpdateRateDlg::DLG_TITLE" -msgstr "Update Rate" - -msgid "SVTK_UpdateRateDlg::INPUT_FRAME_TITLE" -msgstr "Enable" - -msgid "SVTK_UpdateRateDlg::DESIRED" -msgstr "Desired Update Rate, FPS" - -msgid "SVTK_UpdateRateDlg::STILL" -msgstr "Still Update Rate, FPS" - -msgid "SVTK_UpdateRateDlg::INFORMATION_FRAME_TITLE" -msgstr "Rendering Metrics" - -msgid "SVTK_UpdateRateDlg::CURRENT_FPS" -msgstr "Current Update Rate, FPS" - -msgid "SVTK_UpdateRateDlg::NUMBER_CELLS" -msgstr "Number of Cells, -" - 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.h b/src/SalomeApp/SalomeApp.h deleted file mode 100644 index 130299b08..000000000 --- a/src/SalomeApp/SalomeApp.h +++ /dev/null @@ -1,48 +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: SalomeApp.h -// Created: November, 2004 -// Author: OCC team -// Copyright (C) CEA 2004 - - -// The following ifdef block is the standard way of creating macros which make exporting -// from a DLL simpler. All files within this DLL are compiled with the SalomeApp_EXPORTS -// symbol defined on the command line. this symbol should not be defined on any project -// that uses this DLL. This way any other project whose source files include this file see -// SalomeApp_API functions as being imported from a DLL, wheras this DLL sees symbols -// defined with this macro as being exported. -#ifdef WNT - -#ifdef SALOMEAPP_EXPORTS -#define SALOMEAPP_EXPORT __declspec(dllexport) -#else -#define SALOMEAPP_EXPORT __declspec(dllimport) -#endif - -#else -#define SALOMEAPP_EXPORT -#endif //WNT - -#define APP_VERSION "0.1" - -#if defined WNT -#pragma warning ( disable: 4251 ) -#endif - diff --git a/src/SalomeApp/SalomeApp_Application.cxx b/src/SalomeApp/SalomeApp_Application.cxx deleted file mode 100644 index 0cbcb0788..000000000 --- a/src/SalomeApp/SalomeApp_Application.cxx +++ /dev/null @@ -1,1145 +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: SalomeApp_Application.cxx -// Created: 10/22/2004 3:23:45 PM -// Author: Sergey LITONIN -// Copyright (C) CEA 2004 - -#include "SalomeApp_PyInterp.h" // WARNING! This include must be the first! - -#include "SalomeApp_Application.h" - -#include "SalomeApp_Study.h" -#include "SalomeApp_DataModel.h" -#include "SalomeApp_DataObject.h" -#include "SalomeApp_EventFilter.h" -#include "SalomeApp_VisualState.h" - -#include "SalomeApp_StudyPropertiesDlg.h" - -#include "LightApp_Application.h" -#include "LightApp_Preferences.h" -#include "LightApp_WidgetContainer.h" -#include "LightApp_SelectionMgr.h" -#include "LightApp_NameDlg.h" - -#include "STD_LoadStudiesDlg.h" - -#include -#include - -#include - -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "SALOMEDSClient_ClientFactory.hxx" -#include "SALOMEDSClient_IParameters.hxx" - -#include "SALOME_ListIteratorOfListIO.hxx" -#include "SALOME_ListIO.hxx" - -#include "ToolsGUI_CatalogGeneratorDlg.h" -#include "ToolsGUI_RegWidget.h" - -#include - -#include - -/*!Create new instance of SalomeApp_Application.*/ -extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication() -{ - return new SalomeApp_Application(); -} - -/*!Constructor.*/ -SalomeApp_Application::SalomeApp_Application() -: LightApp_Application() -{} - -/*!Destructor. - *\li Destroy event filter. - */ -SalomeApp_Application::~SalomeApp_Application() -{ - // Do not destroy. It's a singleton ! - //SalomeApp_EventFilter::Destroy(); -} - -/*!Start application.*/ -void SalomeApp_Application::start() -{ - LightApp_Application::start(); - - SalomeApp_EventFilter::Init(); -} - -/*!Create actions:*/ -void SalomeApp_Application::createActions() -{ - LightApp_Application::createActions(); - - SUIT_Desktop* desk = desktop(); - - //! Save GUI state - // "Save GUI State" command is moved to VISU module - // createAction( SaveGUIStateId, tr( "TOT_DESK_FILE_SAVE_GUI_STATE" ), QIconSet(), - // tr( "MEN_DESK_FILE_SAVE_GUI_STATE" ), tr( "PRP_DESK_FILE_SAVE_GUI_STATE" ), - // 0, desk, false, this, SLOT( onSaveGUIState() ) ); - - //! Dump study - createAction( DumpStudyId, tr( "TOT_DESK_FILE_DUMP_STUDY" ), QIconSet(), - tr( "MEN_DESK_FILE_DUMP_STUDY" ), tr( "PRP_DESK_FILE_DUMP_STUDY" ), - CTRL+Key_D, desk, false, this, SLOT( onDumpStudy() ) ); - - //! Load script - createAction( LoadScriptId, tr( "TOT_DESK_FILE_LOAD_SCRIPT" ), QIconSet(), - tr( "MEN_DESK_FILE_LOAD_SCRIPT" ), tr( "PRP_DESK_FILE_LOAD_SCRIPT" ), - CTRL+Key_T, desk, false, this, SLOT( onLoadScript() ) ); - - //! Properties - createAction( PropertiesId, tr( "TOT_DESK_PROPERTIES" ), QIconSet(), - tr( "MEN_DESK_PROPERTIES" ), tr( "PRP_DESK_PROPERTIES" ), - CTRL+Key_P, desk, false, this, SLOT( onProperties() ) ); - - //! Catalog Generator - createAction( CatalogGenId, tr( "TOT_DESK_CATALOG_GENERATOR" ), QIconSet(), - tr( "MEN_DESK_CATALOG_GENERATOR" ), tr( "PRP_DESK_CATALOG_GENERATOR" ), - SHIFT+Key_G, desk, false, this, SLOT( onCatalogGen() ) ); - - //! Registry Display - createAction( RegDisplayId, tr( "TOT_DESK_REGISTRY_DISPLAY" ), QIconSet(), - 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 ); - createMenu( separator(), fileMenu, -1, 15, -1 ); - createMenu( PropertiesId, fileMenu, 10, -1 ); - createMenu( separator(), fileMenu, -1, 15, -1 ); - - int toolsMenu = createMenu( tr( "MEN_DESK_TOOLS" ), -1, MenuToolsId, 50 ); - createMenu( CatalogGenId, toolsMenu, 10, -1 ); - createMenu( RegDisplayId, toolsMenu, 10, -1 ); - createMenu( separator(), toolsMenu, -1, 15, -1 ); -} - -/*! Purpose : SLOT. Open new document with \a aName.*/ -bool SalomeApp_Application::onOpenDoc( const QString& aName ) -{ - bool res = false, toOpen = true, isAlreadyOpen = false; - - // Look among opened studies - if (activeStudy()) { // at least one study is opened - SUIT_Session* aSession = SUIT_Session::session(); - QPtrList aAppList = aSession->applications(); - QPtrListIterator it (aAppList); - SUIT_Application* aApp = 0; - // iterate on all applications - for (; (aApp = it.current()) && !isAlreadyOpen; ++it) { - if (aApp->activeStudy()->studyName() == aName) { - isAlreadyOpen = true; // Already opened, ask user what to do - - // The document ... is already open. - // Do you want to reload it? - int aAnswer = SUIT_MessageBox::warn2(desktop(), tr("WRN_WARNING"), - tr("QUE_DOC_ALREADYOPEN").arg(aName), - tr("BUT_YES"), tr("BUT_NO"), 1, 2, 2); - if (aAnswer == 1) { // reload - if (activeStudy()->studyName() == aName && aAppList.count() > 1) { - // Opened in THIS (active) application. - STD_Application* app1 = (STD_Application*)aAppList.at(0); - STD_Application* app2 = (STD_Application*)aAppList.at(1); - if (!app1 || !app2) { - // Error - return false; - } - if (app1->activeStudy()->studyName() == aName) { - // app1 is this application, we need another one - app1 = app2; - } - // Close document of this application. This application will be destroyed. - onCloseDoc(/*ask = */false); - // Open the file with another application, as this one will be destroyed. - return app1->onOpenDoc(aName); - } else { - // Opened in another application. - STD_Application* app = (STD_Application*)aApp; - if (app) - app->onCloseDoc(/*ask = */false); - } - } else { // do not reload - // OK, the study will not be reloaded, but we call - // CAM_Application::onOpenDoc( aName ) all the same. - // It will activate a desktop of the study . - } - } - } - } - - // Look among unloaded studies - if (!isAlreadyOpen) { - std::vector List = studyMgr()->GetOpenStudies(); - - QString studyName; - for (unsigned int ind = 0; ind < List.size() && !isAlreadyOpen; ind++) { - studyName = List[ind].c_str(); - if (aName == studyName) { - // Already exists unloaded, ask user what to do - isAlreadyOpen = true; - - // The document ... already exists in the study manager. - // Do you want to reload it? - int aAnswer = SUIT_MessageBox::warn2(desktop(), tr("WRN_WARNING"), - tr("QUE_DOC_ALREADYEXIST").arg(aName), - tr("BUT_YES"), tr("BUT_NO"), 1, 2, 2); - if (aAnswer == 1) { - _PTR(Study) aStudy = studyMgr()->GetStudyByName(aName.latin1()); - if (aStudy) - studyMgr()->Close(aStudy); - } else { - toOpen = false; - } - } - } - } - - if (toOpen) - res = CAM_Application::onOpenDoc( aName ); - - QAction* a = action( MRUId ); - if ( a && a->inherits( "QtxMRUAction" ) ) - { - QtxMRUAction* mru = (QtxMRUAction*)a; - if ( res ) - mru->insert( aName ); - else - mru->remove( aName ); - } - return res; -} - -/*!SLOT. Load document.*/ -void SalomeApp_Application::onLoadDoc() -{ - QString name, studyname, ext; - - STD_LoadStudiesDlg aDlg( desktop(), TRUE); - - std::vector List = studyMgr()->GetOpenStudies(); - - SUIT_Session* aSession = SUIT_Session::session(); - QPtrList aAppList = aSession->applications(); - SUIT_Application* aApp = 0; - - for (unsigned int ind = 0; ind < List.size(); ind++) { - studyname = List[ind].c_str(); - //Add to list only unloaded studies - bool isAlreadyOpen = false; - for ( QPtrListIterator it( aAppList ); it.current() && !isAlreadyOpen; ++it ) - { - aApp = it.current(); - if(!aApp || !aApp->activeStudy()) continue; - if ( aApp->activeStudy()->studyName() == studyname ) isAlreadyOpen = true; - } - - if ( !isAlreadyOpen ) aDlg.ListComponent->insertItem( studyname ); - } - - int retVal = aDlg.exec(); - studyname = aDlg.ListComponent->currentText(); - - if (retVal == QDialog::Rejected) - return; - - if ( studyname.isNull() || studyname.isEmpty() ) - 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 ) ) - { - updateWindows(); - updateViewManagers(); - updateObjectBrowser(true); - } -} - - -/*!SLOT. Load document with \a aName.*/ -bool SalomeApp_Application::onLoadDoc( const QString& aName ) -{ - return LightApp_Application::onLoadDoc( aName ); -} - -/*!SLOT. Copy objects to study maneger from selection maneger..*/ -void SalomeApp_Application::onCopy() -{ - SALOME_ListIO list; - LightApp_SelectionMgr* mgr = selectionMgr(); - mgr->selectedObjects(list); - - SalomeApp_Study* study = dynamic_cast(activeStudy()); - if(study == NULL) return; - - _PTR(Study) stdDS = study->studyDS(); - if(!stdDS) return; - - SALOME_ListIteratorOfListIO it( list ); - if(it.More()) - { - _PTR(SObject) so = stdDS->FindObjectID(it.Value()->getEntry()); - try { - studyMgr()->Copy(so); - onSelectionChanged(); - } - catch(...) { - } - } -} - -/*!SLOT. Paste objects to study maneger from selection manager.*/ -void SalomeApp_Application::onPaste() -{ - SALOME_ListIO list; - LightApp_SelectionMgr* mgr = selectionMgr(); - mgr->selectedObjects(list); - - SalomeApp_Study* study = dynamic_cast(activeStudy()); - if(study == NULL) return; - - _PTR(Study) stdDS = study->studyDS(); - if(!stdDS) return; - - if ( stdDS->GetProperties()->IsLocked() ) { - SUIT_MessageBox::warn1 ( desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("WRN_STUDY_LOCKED"), - QObject::tr("BUT_OK") ); - return; - } - - SALOME_ListIteratorOfListIO it( list ); - if(it.More()) - { - _PTR(SObject) so = stdDS->FindObjectID(it.Value()->getEntry()); - try { - studyMgr()->Paste(so); - updateObjectBrowser( true ); - updateActions(); //SRN: BugID IPAL9377, case 3 - } - catch(...) { - } - } -} - -/*! 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() -{ - SALOME_ListIO list; - LightApp_SelectionMgr* mgr = selectionMgr(); - mgr->selectedObjects(list); - - bool canCopy = false; - bool canPaste = false; - - SalomeApp_Study* study = dynamic_cast(activeStudy()); - if (study != NULL) { - _PTR(Study) stdDS = study->studyDS(); - - if (stdDS) { - SALOME_ListIteratorOfListIO it ( list ); - - if (it.More() && list.Extent() == 1) { - _PTR(SObject) so = stdDS->FindObjectID(it.Value()->getEntry()); - - if ( so ) { - canCopy = studyMgr()->CanCopy(so); - canPaste = studyMgr()->CanPaste(so); - } - } - } - } - - action(EditCopyId)->setEnabled(canCopy); - action(EditPasteId)->setEnabled(canPaste); -} - -/*!Delete references.*/ -void SalomeApp_Application::onDeleteInvalidReferences() -{ - SALOME_ListIO aList; - LightApp_SelectionMgr* mgr = selectionMgr(); - mgr->selectedObjects( aList, QString::null, false ); - - if( aList.IsEmpty() ) - return; - - SalomeApp_Study* aStudy = dynamic_cast(activeStudy()); - _PTR(Study) aStudyDS = aStudy->studyDS(); - _PTR(StudyBuilder) aStudyBuilder = aStudyDS->NewBuilder(); - _PTR(SObject) anObj; - - for( SALOME_ListIteratorOfListIO it( aList ); it.More(); it.Next() ) - if ( it.Value()->hasEntry() ) - { - _PTR(SObject) aSObject = aStudyDS->FindObjectID( it.Value()->getEntry() ), aRefObj = aSObject; - while( aRefObj && aRefObj->ReferencedObject( anObj ) ) - aRefObj = anObj; - - if( aRefObj && aRefObj!=aSObject && QString( aRefObj->GetName().c_str() ).isEmpty() ) - aStudyBuilder->RemoveReference( aSObject ); - } - updateObjectBrowser(); -} - -/*!Private SLOT. */ -void SalomeApp_Application::onOpenWith() -{ - QApplication::setOverrideCursor( Qt::waitCursor ); - SALOME_ListIO aList; - LightApp_SelectionMgr* mgr = selectionMgr(); - mgr->selectedObjects(aList); - if (aList.Extent() != 1) - { - QApplication::restoreOverrideCursor(); - return; - } - Handle(SALOME_InteractiveObject) aIObj = aList.First(); - QString aModuleName(aIObj->getComponentDataType()); - QString aModuleTitle = moduleTitle(aModuleName); - activateModule(aModuleTitle); - QApplication::restoreOverrideCursor(); -} - -/*! - Creates new study -*/ -SUIT_Study* SalomeApp_Application::createNewStudy() -{ - SalomeApp_Study* aStudy = new SalomeApp_Study( this ); - - // Set up processing of major study-related events - connect( aStudy, SIGNAL( created( SUIT_Study* ) ), this, SLOT( onStudyCreated( SUIT_Study* ) ) ); - connect( aStudy, SIGNAL( opened ( SUIT_Study* ) ), this, SLOT( onStudyOpened ( SUIT_Study* ) ) ); - connect( aStudy, SIGNAL( saved ( SUIT_Study* ) ), this, SLOT( onStudySaved ( SUIT_Study* ) ) ); - connect( aStudy, SIGNAL( closed ( SUIT_Study* ) ), this, SLOT( onStudyClosed ( SUIT_Study* ) ) ); - - return aStudy; -} - -/*! - Enable/Disable menu items and toolbar buttons. Rebuild menu -*/ -void SalomeApp_Application::updateCommandsStatus() -{ - LightApp_Application::updateCommandsStatus(); - - // Dump study menu - QAction* a = action( DumpStudyId ); - if ( a ) - a->setEnabled( activeStudy() ); - - // Load script menu - a = action( LoadScriptId ); - if ( a ) - a->setEnabled( activeStudy() ); - - // Properties menu - a = action( PropertiesId ); - if( a ) - a->setEnabled( activeStudy() ); - - // Save GUI state menu - a = action( SaveGUIStateId ); - if( a ) - a->setEnabled( activeStudy() ); - - // update state of Copy/Paste menu items - onSelectionChanged(); -} - -/*! - \class DumpStudyFileDlg - Private class used in Dump Study operation. Consists 2 check boxes: - "Publish in study" and "Save GUI parameters" -*/ -class DumpStudyFileDlg : public SUIT_FileDlg -{ -public: - DumpStudyFileDlg( QWidget* parent ) : SUIT_FileDlg( parent, false, true, true ) - { - QHBox* hB = new QHBox( this ); - myPublishChk = new QCheckBox( tr("PUBLISH_IN_STUDY"), hB ); - mySaveGUIChk = new QCheckBox( tr("SAVE_GUI_STATE"), hB ); - QPushButton* pb = new QPushButton(this); - addWidgets( new QLabel("", this), hB, pb ); - pb->hide(); - } - QCheckBox* myPublishChk; - QCheckBox* mySaveGUIChk; -}; - -/*!Private SLOT. On dump study.*/ -void SalomeApp_Application::onDumpStudy( ) -{ - SalomeApp_Study* appStudy = dynamic_cast( activeStudy() ); - if ( !appStudy ) return; - _PTR(Study) aStudy = appStudy->studyDS(); - - QStringList aFilters; - aFilters.append( tr( "PYTHON_FILES_FILTER" ) ); - - DumpStudyFileDlg* fd = new DumpStudyFileDlg( desktop() ); - fd->setCaption( tr( "TOT_DESK_FILE_DUMP_STUDY" ) ); - fd->setFilters( aFilters ); - fd->myPublishChk->setChecked( true ); - fd->mySaveGUIChk->setChecked( true ); - fd->exec(); - QString aFileName = fd->selectedFile(); - bool toPublish = fd->myPublishChk->isChecked(); - bool toSaveGUI = fd->mySaveGUIChk->isChecked(); - delete fd; - - if ( !aFileName.isEmpty() ) { - QFileInfo aFileInfo(aFileName); - int savePoint; - _PTR(AttributeParameter) ap; - _PTR(IParameters) ip = ClientFactory::getIParameters(ap); - if(ip->isDumpPython(appStudy->studyDS())) ip->setDumpPython(appStudy->studyDS()); //Unset DumpPython flag. - if ( toSaveGUI ) { //SRN: Store a visual state of the study at the save point for DumpStudy method - ip->setDumpPython(appStudy->studyDS()); - savePoint = SalomeApp_VisualState( this ).storeState(); //SRN: create a temporary save point - } - bool res = aStudy->DumpStudy( aFileInfo.dirPath( true ).latin1(), aFileInfo.baseName().latin1(), toPublish); - if ( toSaveGUI ) - appStudy->removeSavePoint(savePoint); //SRN: remove the created temporary save point. - if ( !res ) - SUIT_MessageBox::warn1 ( desktop(), - QObject::tr("WRN_WARNING"), - tr("WRN_DUMP_STUDY_FAILED"), - QObject::tr("BUT_OK") ); - } -} - -/*!Private SLOT. On load script.*/ -void SalomeApp_Application::onLoadScript( ) -{ - SalomeApp_Study* appStudy = dynamic_cast( activeStudy() ); - if ( !appStudy ) return; - _PTR(Study) aStudy = appStudy->studyDS(); - - if ( aStudy->GetProperties()->IsLocked() ) { - SUIT_MessageBox::warn1 ( desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("WRN_STUDY_LOCKED"), - QObject::tr("BUT_OK") ); - return; - } - - QStringList filtersList; - filtersList.append(tr("PYTHON_FILES_FILTER")); - filtersList.append(tr("ALL_FILES_FILTER")); - - QString aFile = SUIT_FileDlg::getFileName( desktop(), "", filtersList, tr( "TOT_DESK_FILE_LOAD_SCRIPT" ), true, true ); - - if ( !aFile.isEmpty() ) - { - QString command = QString("execfile(\"%1\")").arg(aFile); - - PythonConsole* pyConsole = pythonConsole(); - - if ( pyConsole ) - pyConsole->exec( command ); - } -} - -/*!Private SLOT. On save GUI state.*/ -void SalomeApp_Application::onSaveGUIState() -{ - SalomeApp_Study* study = dynamic_cast( activeStudy() ); - if ( study ) { - SalomeApp_VisualState( this ).storeState(); - updateSavePointDataObjects( study ); - objectBrowser()->updateTree( study->root() ); - } - updateActions(); -} - -/*!Gets file filter. - *\retval QString "(*.hdf)" - */ -QString SalomeApp_Application::getFileFilter() const -{ - return "(*.hdf)"; -} - -/*!Create window.*/ -QWidget* SalomeApp_Application::createWindow( const int flag ) -{ - QWidget* wid = 0; - if ( flag != WT_PyConsole ) wid = LightApp_Application::createWindow(flag); - - SUIT_ResourceMgr* resMgr = resourceMgr(); - - if ( flag == WT_ObjectBrowser ) - { - OB_Browser* ob = (OB_Browser*)wid; - 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 ); - for ( int i = SalomeApp_DataObject::CT_Value; i <= SalomeApp_DataObject::CT_RefEntry; i++ ) - { - ob->addColumn( tr( QString().sprintf( "OBJ_BROWSER_COLUMN_%d", i ) ), i ); - ob->setColumnShown( i, resMgr->booleanValue( "ObjectBrowser", - QString().sprintf( "visibility_column_%d", i ), true ) ); - } - ob->setWidthMode( autoSize ? QListView::Maximum : QListView::Manual ); - ob->listView()->setColumnWidthMode( 0, autoSizeFirst ? QListView::Maximum : QListView::Manual ); - ob->resize( desktop()->width()/3, ob->height() ); - } - else if ( flag == WT_PyConsole ) - { - PythonConsole* pyCons = new PythonConsole( desktop(), new SalomeApp_PyInterp() ); - pyCons->setCaption( tr( "PYTHON_CONSOLE" ) ); - wid = pyCons; - pyCons->resize( pyCons->width(), desktop()->height()/4 ); - //pyCons->connectPopupRequest(this, SLOT(onConnectPopupRequest(SUIT_PopupClient*, QContextMenuEvent*))); - } - return wid; -} - -/*!Create preferences.*/ -void SalomeApp_Application::createPreferences( LightApp_Preferences* pref ) -{ - LightApp_Application::createPreferences(pref); - - if ( !pref ) - return; - - int salomeCat = pref->addPreference( tr( "PREF_CATEGORY_SALOME" ) ); - int obTab = pref->addPreference( tr( "PREF_TAB_OBJBROWSER" ), salomeCat ); - int defCols = pref->addPreference( tr( "PREF_GROUP_DEF_COLUMNS" ), obTab ); - for ( int i = SalomeApp_DataObject::CT_Value; i <= SalomeApp_DataObject::CT_RefEntry; i++ ) - { - pref->addPreference( tr( QString().sprintf( "OBJ_BROWSER_COLUMN_%d", i ) ), defCols, - LightApp_Preferences::Bool, "ObjectBrowser", QString().sprintf( "visibility_column_%d", i ) ); - } - pref->setItemProperty( defCols, "columns", 1 ); - - // adding preference to LightApp_Application handled preferences.. a bit of hacking with resources.. - int genTab = pref->addPreference( LightApp_Application::tr( "PREF_TAB_GENERAL" ), salomeCat ); - int studyGroup = pref->addPreference( LightApp_Application::tr( "PREF_GROUP_STUDY" ), genTab ); - pref->addPreference( tr( "PREF_STORE_VISUAL_STATE" ), studyGroup, LightApp_Preferences::Bool, "Study", "store_visual_state" ); -} - -/*!Update desktop title.*/ -void SalomeApp_Application::updateDesktopTitle() { - QString aTitle = applicationName(); - QString aVer = applicationVersion(); - if ( !aVer.isEmpty() ) - aTitle += QString( " " ) + aVer; - - if ( activeStudy() ) - { - QString sName = SUIT_Tools::file( activeStudy()->studyName().stripWhiteSpace(), false ); - if ( !sName.isEmpty() ) { - SalomeApp_Study* study = dynamic_cast(activeStudy()); - if ( study ) { - _PTR(Study) stdDS = study->studyDS(); - if(stdDS) { - if ( stdDS->GetProperties()->IsLocked() ) { - aTitle += QString( " - [%1 (%2)]").arg( sName ).arg( tr( "STUDY_LOCKED" ) ); - } else { - aTitle += QString( " - [%1]" ).arg( sName ); - } - } - } - } - } - - desktop()->setCaption( aTitle ); -} - -/*!Gets CORBA::ORB_var*/ -CORBA::ORB_var SalomeApp_Application::orb() -{ - ORB_INIT& init = *SINGLETON_::Instance(); - static CORBA::ORB_var _orb = init( qApp->argc(), qApp->argv() ); - return _orb; -} - -/*!Create and return SALOMEDS_StudyManager.*/ -SALOMEDSClient_StudyManager* SalomeApp_Application::studyMgr() -{ - static _PTR(StudyManager) _sm; - if(!_sm) _sm = ClientFactory::StudyManager(); - return _sm.get(); -} - -/*!Create and return SALOME_NamingService.*/ -SALOME_NamingService* SalomeApp_Application::namingService() -{ - static SALOME_NamingService* _ns = new SALOME_NamingService( orb() ); - return _ns; -} - -/*!Create and return SALOME_LifeCycleCORBA.*/ -SALOME_LifeCycleCORBA* SalomeApp_Application::lcc() -{ - static SALOME_LifeCycleCORBA* _lcc = new SALOME_LifeCycleCORBA( namingService() ); - return _lcc; -} - -/*!Return default engine IOR for light modules*/ -QString SalomeApp_Application::defaultEngineIOR() -{ - /// Look for a default module engine (needed for CORBAless modules to use SALOMEDS persistence) - QString anIOR( "" ); - CORBA::Object_ptr anEngine = namingService()->Resolve( "/SalomeAppEngine" ); - if ( !CORBA::is_nil( anEngine ) ) - { - CORBA::String_var objStr = orb()->object_to_string( anEngine ); - anIOR = QString( objStr.in() ); - } - return anIOR; -} - -/*!Private SLOT. On preferences.*/ -void SalomeApp_Application::onProperties() -{ - SalomeApp_Study* study = dynamic_cast( activeStudy() ); - if( !study ) - return; - - _PTR(StudyBuilder) SB = study->studyDS()->NewBuilder(); - SB->NewCommand(); - - SalomeApp_StudyPropertiesDlg aDlg( desktop() ); - int res = aDlg.exec(); - if( res==QDialog::Accepted && aDlg.isChanged() ) - SB->CommitCommand(); - else - SB->AbortCommand(); - - //study->updateCaptions(); - updateDesktopTitle(); - updateActions(); -} - -/*!Insert items in popup, which necessary for current application*/ -void SalomeApp_Application::contextMenuPopup( const QString& type, QPopupMenu* thePopup, QString& title ) -{ - LightApp_Application::contextMenuPopup( type, thePopup, title ); - - OB_Browser* ob = objectBrowser(); - if ( !ob || type != ob->popupClientType() ) - return; - - // Get selected objects - SALOME_ListIO aList; - LightApp_SelectionMgr* mgr = selectionMgr(); - mgr->selectedObjects( aList, QString::null, false ); - - // add GUI state commands: restore, rename - if ( aList.Extent() == 1 && aList.First()->hasEntry() && - QString( aList.First()->getEntry() ).startsWith( tr( "SAVE_POINT_DEF_NAME" ) ) ) { - thePopup->insertSeparator(); - thePopup->insertItem( tr( "MEN_RESTORE_VS" ), this, SLOT( onRestoreGUIState() ) ); - thePopup->insertItem( tr( "MEN_RENAME_VS" ), this, SLOT( onRenameGUIState() ) ); - thePopup->insertItem( tr( "MEN_DELETE_VS" ), this, SLOT( onDeleteGUIState() ) ); - } - - // "Delete reference" item should appear only for invalid references - - // isInvalidRefs will be true, if at least one of selected objects is invalid reference - bool isInvalidRefs = false; - SalomeApp_Study* aStudy = dynamic_cast(activeStudy()); - _PTR(Study) aStudyDS = aStudy->studyDS(); - _PTR(SObject) anObj; - - for( SALOME_ListIteratorOfListIO it( aList ); it.More() && !isInvalidRefs; it.Next() ) - if( it.Value()->hasEntry() ) - { - _PTR(SObject) aSObject = aStudyDS->FindObjectID( it.Value()->getEntry() ), aRefObj = aSObject; - while( aRefObj && aRefObj->ReferencedObject( anObj ) ) - aRefObj = anObj; - - if( aRefObj && aRefObj!=aSObject && QString( aRefObj->GetName().c_str() ).isEmpty() ) - isInvalidRefs = true; - } - - // Add "Delete reference" item to popup - if ( isInvalidRefs ) - { - thePopup->insertSeparator(); - thePopup->insertItem( tr( "MEN_DELETE_INVALID_REFERENCE" ), this, SLOT( onDeleteInvalidReferences() ) ); - return; - } - - aList.Clear(); - mgr->selectedObjects( aList ); - - // "Activate module" item should appear only if it's necessary - if (aList.Extent() != 1) - return; - Handle(SALOME_InteractiveObject) aIObj = aList.First(); - // check if item is a "GUI state" item (also a first level object) - QString entry( aIObj->getEntry() ); - if ( entry.startsWith( tr( "SAVE_POINT_DEF_NAME" ) ) ) - return; - QString aModuleName(aIObj->getComponentDataType()); - QString aModuleTitle = moduleTitle(aModuleName); - CAM_Module* currentModule = activeModule(); - if (currentModule && currentModule->moduleName() == aModuleTitle) - return; - thePopup->insertItem( tr( "MEN_OPENWITH" ), this, SLOT( onOpenWith() ) ); -} - -/*!Update obect browser: - 1.if 'updateModels' true, update existing data models; - 2. update "non-existing" (not loaded yet) data models; - 3. update object browser if it exists */ -void SalomeApp_Application::updateObjectBrowser( const bool updateModels ) -{ - // update "non-existing" (not loaded yet) data models - SalomeApp_Study* study = dynamic_cast(activeStudy()); - if ( study ) - { - _PTR(Study) stdDS = study->studyDS(); - if( stdDS ) - { - for ( _PTR(SComponentIterator) it ( stdDS->NewComponentIterator() ); it->More(); it->Next() ) - { - _PTR(SComponent) aComponent ( it->Value() ); - - if ( aComponent->ComponentDataType() == "Interface Applicative" ) - continue; // skip the magic "Interface Applicative" component - - OB_Browser* ob = static_cast( getWindow( WT_ObjectBrowser )); - const bool isAutoUpdate = ob->isAutoUpdate(); - ob->setAutoUpdate( false ); - SalomeApp_DataModel::synchronize( aComponent, study ); - ob->setAutoUpdate( isAutoUpdate ); - //SalomeApp_DataModel::BuildTree( aComponent, study->root(), study, /*skipExisitng=*/true ); - } - } - } - - // create data objects that correspond to GUI state save points - if ( study ) updateSavePointDataObjects( study ); - - // update existing data models (already loaded SComponents) - LightApp_Application::updateObjectBrowser( updateModels ); -} - -/*!Display Catalog Genenerator dialog */ -void SalomeApp_Application::onCatalogGen() -{ - ToolsGUI_CatalogGeneratorDlg aDlg( desktop() ); - aDlg.exec(); -} - -/*!Display Registry Display dialog */ -void SalomeApp_Application::onRegDisplay() -{ - CORBA::ORB_var anOrb = orb(); - ToolsGUI_RegWidget* regWnd = ToolsGUI_RegWidget::GetRegWidget( anOrb, desktop(), "Registry" ); - regWnd->show(); - regWnd->raise(); - regWnd->setActiveWindow(); -} - -/*!find original object by double click on item */ -void SalomeApp_Application::onDblClick( QListViewItem* it ) -{ - OB_ListItem* item = dynamic_cast( it ); - SalomeApp_Study* study = dynamic_cast( activeStudy() ); - - if( study && item ) - { - SalomeApp_DataObject* obj = dynamic_cast( item->dataObject() ); - if( !obj ) - return; - - QString entry = obj->entry(); - _PTR(SObject) sobj = study->studyDS()->FindObjectID( entry.latin1() ), ref; - - if( sobj && sobj->ReferencedObject( ref ) ) - { - entry = ref->GetID().c_str(); - QListViewItemIterator anIt( item->listView() ); - for( ; anIt.current(); anIt++ ) - { - OB_ListItem* item = dynamic_cast( anIt.current() ); - if( !item ) - continue; - - SalomeApp_DataObject* original = dynamic_cast( item->dataObject() ); - if( original->entry()!=entry ) - continue; - - OB_Browser* br = objectBrowser(); - br->setSelected( original ); - SUIT_DataObject* p = original->parent(); - while( p ) - { - br->setOpen( p ); - p = p->parent(); - } - break; - } - } - } -} - -/*! - Creates new view manager - \param type - type of view manager -*/ -SUIT_ViewManager* SalomeApp_Application::newViewManager(const QString& type) -{ - return createViewManager(type); -} - - -/*!Global utility funciton, returns selected GUI Save point object's ID */ -int getSelectedSavePoint( const LightApp_SelectionMgr* selMgr ) -{ - SALOME_ListIO aList; - selMgr->selectedObjects( aList ); - Handle(SALOME_InteractiveObject) aIObj = aList.First(); - QString entry( aIObj->getEntry() ); - QString startStr = QObject::tr( "SAVE_POINT_DEF_NAME" ); - if ( !entry.startsWith( startStr ) ) // it's a "GUI state" object - return -1; - bool ok; // conversion to integer is ok? - int savePoint = entry.right( entry.length() - startStr.length() ).toInt( &ok ); - return ok ? savePoint : -1; -} - -/*!Called on Restore GUI State popup command*/ -void SalomeApp_Application::onRestoreGUIState() -{ - int savePoint = ::getSelectedSavePoint( selectionMgr() ); - if ( savePoint == -1 ) - return; - SalomeApp_VisualState( this ).restoreState( savePoint ); -} - -/*!Called on Rename GUI State popup command*/ -void SalomeApp_Application::onRenameGUIState() -{ - int savePoint = ::getSelectedSavePoint( selectionMgr() ); - if ( savePoint == -1 ) - return; - SalomeApp_Study* study = dynamic_cast( activeStudy() ); - if ( !study ) - return; - - QString newName = LightApp_NameDlg::getName( desktop(), study->getNameOfSavePoint( savePoint ) ); - if ( !newName.isNull() && !newName.isEmpty() ) { - study->setNameOfSavePoint( savePoint, newName ); - updateSavePointDataObjects( study ); - objectBrowser()->updateTree( study->root() ); - } -} - - -/*!Called on Delete GUI State popup command*/ -void SalomeApp_Application::onDeleteGUIState() -{ - int savePoint = ::getSelectedSavePoint( selectionMgr() ); - if ( savePoint == -1 ) - return; - SalomeApp_Study* study = dynamic_cast( activeStudy() ); - if ( !study ) - return; - - study->removeSavePoint( savePoint ); - updateSavePointDataObjects( study ); -} - -/*!Called on Save study operation*/ -void SalomeApp_Application::onStudySaved( SUIT_Study* study ) -{ - LightApp_Application::onStudySaved( study ); - - if ( objectBrowser() ) { - updateSavePointDataObjects( dynamic_cast( study ) ); - objectBrowser()->updateTree( study->root() ); - } -} - -/*!Called on Open study operation*/ -void SalomeApp_Application::onStudyOpened( SUIT_Study* study ) -{ - LightApp_Application::onStudyOpened( study ); - - if ( objectBrowser() ) { - updateSavePointDataObjects( dynamic_cast( study ) ); - objectBrowser()->updateTree( study->root() ); - } -} - -/*! utility function. returns true if list view item that correspond to given SUIT_DataObject is open. - only first level items are traversed */ -bool isListViewItemOpen( QListView* lv, const SUIT_DataObject* dobj ) -{ - if ( !lv || !dobj ) - return false; - - QListViewItem* item = lv->firstChild(); - while ( item ) { - OB_ListItem* ob_item = dynamic_cast( item ); - if ( ob_item && ob_item->dataObject() == dobj ) - return ob_item->isOpen(); - item = item->nextSibling(); - } - return false; -} - -/*! updateSavePointDataObjects: syncronize data objects that correspond to save points (gui states)*/ -void SalomeApp_Application::updateSavePointDataObjects( SalomeApp_Study* study ) -{ - OB_Browser* ob = objectBrowser(); - - if ( !study || !ob ) - return; - - // find GUI states root object - SUIT_DataObject* guiRootObj = 0; - DataObjectList ch; - study->root()->children( ch ); - DataObjectList::const_iterator it = ch.begin(), last = ch.end(); - for ( ; it != last ; ++it ) { - if ( dynamic_cast( *it ) ) { - guiRootObj = *it; - break; - } - } - std::vector savePoints = study->getSavePoints(); - // case 1: no more save points but they existed in study's tree - if ( savePoints.empty() && guiRootObj ) { - delete guiRootObj; - return; - } - // case 2: no more save points but root does not exist either - if ( savePoints.empty() && !guiRootObj ) - return; - // case 3: save points but no root for them - create it - if ( !savePoints.empty() && !guiRootObj ) - guiRootObj = new SalomeApp_SavePointRootObject( study->root() ); - // case 4: everything already exists.. here may be a problem: we want "GUI states" root object - // to be always the last one in the tree. Here we check - if it is not the last one - remove and - // re-create it. - if ( guiRootObj->nextBrother() ) { - study->root()->removeChild(guiRootObj); - study->root()->appendChild(guiRootObj); - //study->root()->dump(); - } - - // store data objects in a map id-to-DataObject - QMap mapDO; - ch.clear(); - guiRootObj->children( ch ); - for( it = ch.begin(), last = ch.end(); it != last ; ++it ) { - SalomeApp_SavePointObject* dobj = dynamic_cast( *it ); - if ( dobj ) - mapDO[dobj->getId()] = dobj; - } - - // iterate new save points. if DataObject with such ID not found in map - create DataObject - // if in the map - remove it from map. - for ( int i = 0; i < savePoints.size(); i++ ) - if ( !mapDO.contains( savePoints[i] ) ) - new SalomeApp_SavePointObject( guiRootObj, savePoints[i], study ); - else - mapDO.remove( savePoints[i] ); - - // delete DataObjects that are still in the map -- their IDs were not found in data model - for ( QMap::Iterator it = mapDO.begin(); it != mapDO.end(); ++it ) - delete it.data(); -} - diff --git a/src/SalomeApp/SalomeApp_Application.h b/src/SalomeApp/SalomeApp_Application.h deleted file mode 100644 index f4c8df810..000000000 --- a/src/SalomeApp/SalomeApp_Application.h +++ /dev/null @@ -1,140 +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: SalomeApp_Application.h -// Created: 10/22/2004 3:37:25 PM -// Author: Sergey LITONIN -// Copyright (C) CEA 2004 - -#ifndef SALOMEAPP_APPLICATION_H -#define SALOMEAPP_APPLICATION_H - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#include "SalomeApp.h" -#include - -#include - -#include - -#include -//#include CORBA_CLIENT_HEADER(SALOMEDS) -#include - -#include "SALOMEDSClient.hxx" - -class QAction; -class QComboBox; -class QDockWindow; - -class LightApp_Preferences; -class SalomeApp_Module; -class SalomeApp_Study; - -class SALOME_LifeCycleCORBA; - -class QListViewItem; - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -/*! - \class SalomeApp_Application - \brief Application containing SalomeApp module or LightApp module -*/ - -class SALOMEAPP_EXPORT SalomeApp_Application : public LightApp_Application -{ - Q_OBJECT - -public: - enum { MenuToolsId = 5 }; - enum { DumpStudyId = LightApp_Application::UserID, LoadScriptId, PropertiesId, - CatalogGenId, RegDisplayId, SaveGUIStateId, FileLoadId, UserID }; - -public: - SalomeApp_Application(); - virtual ~SalomeApp_Application(); - - virtual void updateObjectBrowser( const bool = true ); - - virtual QString getFileFilter() const; - - virtual void start(); - - virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& ); - - static CORBA::ORB_var orb(); - static SALOMEDSClient_StudyManager* studyMgr(); - static SALOME_NamingService* namingService(); - static SALOME_LifeCycleCORBA* lcc(); - static QString defaultEngineIOR(); - - SUIT_ViewManager* newViewManager(const QString&); - void updateSavePointDataObjects( SalomeApp_Study* ); - -public slots: - virtual bool onOpenDoc( const QString& ); - virtual void onLoadDoc(); - virtual bool onLoadDoc( const QString& ); - 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* ); - -protected: - virtual void createActions(); - virtual SUIT_Study* createNewStudy(); - virtual QWidget* createWindow( const int ); - - virtual void updateCommandsStatus(); - virtual void onSelectionChanged(); - - virtual void createPreferences( LightApp_Preferences* ); - virtual void updateDesktopTitle(); - -private slots: - void onDeleteInvalidReferences(); - void onDblClick( QListViewItem* ); - void onProperties(); - void onDumpStudy(); - void onLoadScript(); - - void onDeleteGUIState(); - void onRestoreGUIState(); - void onRenameGUIState(); - - void onCatalogGen(); - void onRegDisplay(); - void onOpenWith(); - -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SalomeApp/SalomeApp_CheckFileDlg.cxx b/src/SalomeApp/SalomeApp_CheckFileDlg.cxx deleted file mode 100644 index a62a33d47..000000000 --- a/src/SalomeApp/SalomeApp_CheckFileDlg.cxx +++ /dev/null @@ -1,58 +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_CheckFileDlg.h" - -#include -#include -#include - -/*! -Constructor -*/ -SalomeApp_CheckFileDlg::SalomeApp_CheckFileDlg( QWidget* parent, bool open, const QString& theCheckBoxName, bool showQuickDir, bool modal) : -SUIT_FileDlg( parent, open, showQuickDir, modal ) -{ - myCheckBox = new QCheckBox( theCheckBoxName, this ); - QLabel* label = new QLabel("", this); - QPushButton* pb = new QPushButton(this); - addWidgets( label, myCheckBox, pb ); - pb->hide(); -} - -/*! -Destructor -*/ -SalomeApp_CheckFileDlg::~SalomeApp_CheckFileDlg() -{ - -} - -/*!Sets checked.*/ -void SalomeApp_CheckFileDlg::SetChecked( bool check ) -{ - myCheckBox->setChecked(check); -} - -/*!Is checked? - *\retval boolean - true, check box is checked, else false. - */ -bool SalomeApp_CheckFileDlg::IsChecked() const -{ - return myCheckBox->isChecked(); -} diff --git a/src/SalomeApp/SalomeApp_CheckFileDlg.h b/src/SalomeApp/SalomeApp_CheckFileDlg.h deleted file mode 100644 index 53e56683c..000000000 --- a/src/SalomeApp/SalomeApp_CheckFileDlg.h +++ /dev/null @@ -1,44 +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 -// -#ifndef SALOMEAPP_CHECKFILEDIALOG_H -#define SALOMEAPP_CHECKFILEDIALOG_H - -#include - -#include - -class QCheckBox; - -class SALOMEAPP_EXPORT SalomeApp_CheckFileDlg : public SUIT_FileDlg -{ - Q_OBJECT - -public: - SalomeApp_CheckFileDlg( QWidget*, bool open, const QString& theCheckBoxName, bool showQuickDir = true, bool modal = true ); - virtual ~SalomeApp_CheckFileDlg(); - -public: - void SetChecked( bool check ); - bool IsChecked() const; - -protected: - QCheckBox* myCheckBox; -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_DataModel.cxx b/src/SalomeApp/SalomeApp_DataModel.cxx deleted file mode 100644 index 6c7129543..000000000 --- a/src/SalomeApp/SalomeApp_DataModel.cxx +++ /dev/null @@ -1,409 +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: SalomeApp_DataModel.cxx -// Created: 10/25/2004 10:36:06 AM -// Author: Sergey LITONIN -// Copyright (C) CEA 2004 - -#include "SalomeApp_DataModel.h" -#include "SalomeApp_Study.h" -#include "SalomeApp_DataObject.h" -#include "SalomeApp_Module.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Engine_i.hxx" - -#include "LightApp_RootObject.h" - -#include - -#include -#include -#include -#include -#include - -#include -#include CORBA_SERVER_HEADER(SALOME_Exception) - -typedef _PTR(SObject) kerPtr; -typedef SUIT_DataObject* suitPtr; - -/*! - \class SalomeApp_DataModelSync - Auxiliary class for synchronizing tree of kernel objects and SUIT_DataObjects -*/ -class SalomeApp_DataModelSync -{ -public: - SalomeApp_DataModelSync( _PTR( Study ), SUIT_DataObject* ); - - suitPtr createItem( const kerPtr&, const suitPtr&, const suitPtr&, const bool ) const; - void deleteItemWithChildren( const suitPtr& ) const; - bool isEqual( const kerPtr&, const suitPtr& ) const; - kerPtr nullSrc() const; - suitPtr nullTrg() const; - void children( const kerPtr&, QValueList& ) const; - void children( const suitPtr&, QValueList& ) const; - suitPtr parent( const suitPtr& ) const; - bool isCorrect( const kerPtr& ) const; - void updateItem( const suitPtr& ) const; - -private: - _PTR( Study ) myStudy; - SUIT_DataObject* myRoot; -}; - -/*! - Constructor -*/ -SalomeApp_DataModelSync::SalomeApp_DataModelSync( _PTR( Study ) aStudy, SUIT_DataObject* aRoot ) -: myStudy( aStudy ), - myRoot( aRoot ) -{ -} - -/*! - \return true if kernel object is correct (has non empty name or is reference) -*/ -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 ) ); - return res; -} - -/*! - Creates SUIT object by KERNEL object - \param so - corresponding KERNEL object - \param parent - parent for SUIT object - \param after - previous sibling for SUIT object - \param prepend - SUIT object must be added to start of children list -*/ -suitPtr SalomeApp_DataModelSync::createItem( const kerPtr& so, - const suitPtr& parent, - const suitPtr& after, - const bool prepend ) const -{ - if( !isCorrect( so ) ) - return 0; - - _PTR(SComponent) aSComp( so ); - suitPtr nitem = aSComp ? new SalomeApp_ModuleObject( aSComp, 0 ) : - new SalomeApp_DataObject( so, 0 ); - if( parent ) - if( after ) - { - DataObjectList ch; - parent->children( ch ); - int pos = ch.find( after ); - if( pos>=0 ) - parent->insertChild( nitem, pos+1 ); - else - parent->appendChild( nitem ); - } - else if( prepend ) - parent->insertChild( nitem, 0 ); - else // append - parent->appendChild( nitem ); - else if( myRoot ) - myRoot->appendChild( nitem ); - return nitem; -} - -/*! - Deletes object with all children - \param p - SUIT object -*/ -void SalomeApp_DataModelSync::deleteItemWithChildren( const suitPtr& p ) const -{ - if( !p ) - return; - - DataObjectList ch; - p->children( ch ); - DataObjectList::const_iterator anIt = ch.begin(), aLast = ch.end(); - for( ; anIt!=aLast; anIt++ ) - deleteItemWithChildren( *anIt ); - delete p; -} - -/*! - \return true if objects correspond each other at all - \param p - kernel object - \param q - suit object -*/ -bool SalomeApp_DataModelSync::isEqual( const kerPtr& p, const suitPtr& q ) const -{ - LightApp_ModuleObject* lobj = dynamic_cast( q ); - SalomeApp_DataObject* sobj = dynamic_cast( q ); - _PTR( SComponent ) aComp( p ); - bool res = ( !p && !q ) || - ( lobj && !sobj && aComp ) || - ( sobj && isCorrect( p ) && p->GetID().c_str()==sobj->entry() ); - return res; -} - -/*! - \return null kernel object -*/ -kerPtr SalomeApp_DataModelSync::nullSrc() const -{ - return kerPtr(); -} - -/*! - \return null suit object -*/ -suitPtr SalomeApp_DataModelSync::nullTrg() const -{ - return suitPtr( 0 ); -} - -/*! - Fills list with children of kernel object - \param obj - kernel object - \param ch - list to be filled -*/ -void SalomeApp_DataModelSync::children( const kerPtr& obj, QValueList& ch ) const -{ - ch.clear(); - _PTR(ChildIterator) it ( myStudy->NewChildIterator( obj ) ); - for( ; it->More(); it->Next() ) - ch.append( it->Value() ); -} - -/*! - Fills list with children of SUIT object - \param p - SUIT object - \param ch - list to be filled -*/ -void SalomeApp_DataModelSync::children( const suitPtr& p, QValueList& ch ) const -{ - DataObjectList l; - if( p ) - { - p->children( l ); - ch.clear(); - for( SUIT_DataObject* o = l.first(); o; o = l.next() ) - ch.append( o ); - } -} - -/*! - \return parent of SUIT object - \param p - SUIT object -*/ -suitPtr SalomeApp_DataModelSync::parent( const suitPtr& p ) const -{ - return p ? p->parent(): 0; -} - -/*! - Updates SUIT object - \param p - SUIT object -*/ -void SalomeApp_DataModelSync::updateItem( const suitPtr& ) const -{ -} - -/*! - Auxiliary function, shows SUIT tree -*/ -void showTree( SUIT_DataObject* root ) -{ - qDebug( root ? "" : "" ); - if( !root ) - return; - - SUIT_DataObjectIterator it( root, SUIT_DataObjectIterator::DepthLeft ); - for( ; it.current(); ++it ) - { - QString marg; marg.fill( ' ', 3*it.depth() ); - QString nnn = "%1 '%2'"; - qDebug( nnn.arg( marg ).arg( it.current()->name() ) ); - } -} - -/*! - Constructor -*/ -SalomeApp_DataModel::SalomeApp_DataModel( CAM_Module* theModule ) -: LightApp_DataModel( theModule ) -{ -} - -/*! - Destructor -*/ -SalomeApp_DataModel::~SalomeApp_DataModel() -{ -} - -/*! - Opens data model -*/ -bool SalomeApp_DataModel::open( const QString& name, CAM_Study* study, QStringList ) -{ - SalomeApp_Study* aDoc = dynamic_cast( study ); - if ( !aDoc ) - return false; - - QString anId = getRootEntry( aDoc ); - if ( anId.isEmpty() ) - return true; // Probably nothing to load - - _PTR(Study) aStudy ( aDoc->studyDS() ); // shared_ptr cannot be used here - _PTR(SComponent) aSComp ( aStudy->FindComponentID( std::string( anId.latin1() ) ) ); - if ( aSComp ) - updateTree( aSComp, aDoc ); - - QStringList listOfFiles; - LightApp_DataModel::open(name, study, listOfFiles); - return true; -} - -/*! - Creates data model -*/ -bool SalomeApp_DataModel::create( CAM_Study* theStudy ) -{ - update(NULL, (LightApp_Study*)theStudy); - return true; -} - -/*! - Updates application. -*/ -void SalomeApp_DataModel::update( LightApp_DataObject*, LightApp_Study* study ) -{ - SalomeApp_Study* aSStudy = dynamic_cast(study); - LightApp_RootObject* studyRoot = 0; - _PTR(SComponent) sobj; - SalomeApp_DataObject* modelRoot = dynamic_cast( root() ); - if ( !modelRoot ){ // not yet connected to a study -> try using argument - if ( !aSStudy ) - aSStudy = dynamic_cast( getModule()->getApp()->activeStudy() ); - if ( aSStudy ){ - studyRoot = dynamic_cast( aSStudy->root() ); - QString anId = getRootEntry( aSStudy ); - if ( !anId.isEmpty() ){ // if nothing is published in the study for this module -> do nothing - _PTR(Study) aStudy ( aSStudy->studyDS() ); - sobj = aStudy->FindComponentID( std::string( anId.latin1() ) ); - } - } - } - else{ - studyRoot = dynamic_cast( modelRoot->root() ); - if ( studyRoot ) { - aSStudy = dynamic_cast( studyRoot->study() ); // value should not change here theoretically, but just to make sure - if ( aSStudy ) { - _PTR(Study) aStudy ( aSStudy->studyDS() ); - // modelRoot->object() cannot be reused here: it is about to be deleted by buildTree() soon - sobj = aStudy->FindComponentID( std::string( modelRoot->entry().latin1() ) ); - } - } - } - if ( sobj && aSStudy ) - updateTree( sobj, aSStudy ); -} - -/*! - Synchronizes kernel tree and suit data tree starting from component 'sobj' -*/ -SUIT_DataObject* SalomeApp_DataModel::synchronize( const _PTR( SComponent )& sobj, SalomeApp_Study* study ) -{ - 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; - for( ; anIt!=aLast; anIt++ ) - { - LightApp_DataObject* dobj = dynamic_cast( *anIt ); - if( dobj && dobj->name() == sobj->GetName().c_str() ) - { - suitObj = dobj; - break; - } - } - - SalomeApp_DataModelSync sync( study->studyDS(), study->root() ); - - if( !suitObj || dynamic_cast( suitObj ) ) - return ::synchronize( sobj, suitObj, sync ); - else - return 0; -} - -/*! - Updates tree. -*/ -void SalomeApp_DataModel::updateTree( const _PTR( SComponent )& comp, SalomeApp_Study* study ) -{ - SalomeApp_ModuleObject* aNewRoot = dynamic_cast( synchronize( comp, study ) ); - if( aNewRoot ) - { - aNewRoot->setDataModel( this ); - setRoot( aNewRoot ); - } -} - -/*! - \return module -*/ -SalomeApp_Module* SalomeApp_DataModel::getModule() const -{ - return dynamic_cast( module() ); -} - -/*! - \return study -*/ -SalomeApp_Study* SalomeApp_DataModel::getStudy() const -{ - if(!root()) return 0; - LightApp_RootObject* aRoot = dynamic_cast( root()->root() ); - if ( !aRoot ) - return 0; - SalomeApp_Study* aStudy = dynamic_cast( aRoot->study() ); - if ( !aStudy ) - return 0; - return aStudy; -} - -/*! - \return study entry corresponding to this data model -*/ -QString SalomeApp_DataModel::getRootEntry( SalomeApp_Study* study ) const -{ - QString anEntry; - if ( root() && root()->root() ) { // data model already in a study - SalomeApp_DataObject* anObj = dynamic_cast( root() ); - if ( anObj ) - anEntry = anObj->entry(); - } - else if ( study && study->studyDS() ) { // this works even if is null - _PTR(SComponent) aSComp( study->studyDS()->FindComponent( module()->name() ) ); - if ( aSComp ) - anEntry = aSComp->GetID().c_str(); - } - return anEntry; -} diff --git a/src/SalomeApp/SalomeApp_DataModel.h b/src/SalomeApp/SalomeApp_DataModel.h deleted file mode 100644 index 9c2bff16a..000000000 --- a/src/SalomeApp/SalomeApp_DataModel.h +++ /dev/null @@ -1,65 +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: SalomeApp_DataModel.h -// Created: 10/25/2004 10:32:33 AM -// Author: Sergey LITONIN -// Copyright (C) CEA 2004 - -#ifndef SALOMEAPP_DATAMODEL_H -#define SALOMEAPP_DATAMODEL_H - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#include "SalomeApp.h" -#include "LightApp_DataModel.h" - -#include "SALOMEDSClient.hxx" - -class SalomeApp_Module; -class SalomeApp_Study; -class SalomeApp_DataObject; - -// Class : SalomeApp_DataModel -/// Description : Base class of data model -class SALOMEAPP_EXPORT SalomeApp_DataModel : public LightApp_DataModel -{ - Q_OBJECT - -public: - static SUIT_DataObject* synchronize( const _PTR( SComponent )&, SalomeApp_Study* ); - - SalomeApp_DataModel ( CAM_Module* theModule ); - virtual ~SalomeApp_DataModel(); - - virtual bool open( const QString&, CAM_Study*, QStringList ); - virtual bool create( CAM_Study* ); - virtual void update( LightApp_DataObject* = 0, LightApp_Study* = 0 ); - - QString getRootEntry( SalomeApp_Study* ) const; - SalomeApp_Module* getModule() const; - -protected: - SalomeApp_Study* getStudy() const; - virtual void updateTree( const _PTR( SComponent )&, SalomeApp_Study* ); -}; - - -#endif diff --git a/src/SalomeApp/SalomeApp_DataObject.cxx b/src/SalomeApp/SalomeApp_DataObject.cxx deleted file mode 100644 index d3a4b5c9d..000000000 --- a/src/SalomeApp/SalomeApp_DataObject.cxx +++ /dev/null @@ -1,417 +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_DataObject.h" - -#include "SalomeApp_Study.h" -#include "LightApp_RootObject.h" - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -/*!Constructor. Initialize by \a parent*/ -SalomeApp_DataObject::SalomeApp_DataObject( SUIT_DataObject* parent ) -: LightApp_DataObject( parent ), - CAM_DataObject( parent ), - myEntry( "" ), - myName( "" ) -{ -} - -/*!Constructor. Initialize by \a parent and SObject*/ -SalomeApp_DataObject::SalomeApp_DataObject( const _PTR(SObject)& sobj, SUIT_DataObject* parent ) -: LightApp_DataObject( parent ), - CAM_DataObject( parent ), - myName( "" ) -{ - myObject = sobj; - myEntry = myObject->GetID().c_str(); -} - -/*!Destructor. Do nothing.*/ -SalomeApp_DataObject::~SalomeApp_DataObject() -{ -} - -/*!Gets object ID. - *\retval QString - */ -QString SalomeApp_DataObject::entry() const -{ - if ( myObject ) - return myObject->GetID().c_str(); - return QString::null; - //return myEntry; -} - -/*!Gets name of object.*/ -QString SalomeApp_DataObject::name() const -{ - //if ( myName.isEmpty() ) - { - QString str; - if ( myObject ) - str = myObject->GetName().c_str(); - - if ( str.isEmpty() ) - { - _PTR(SObject) refObj = referencedObject(); - if ( refObj ) - str = refObj->GetName().c_str(); - } - - if ( isReference() ) - { - if ( !(QString(referencedObject()->GetName().c_str()).isEmpty()) ) - str = QString( "* " ) + str; - else - str = QString( "" ); - } - SalomeApp_DataObject* that = (SalomeApp_DataObject*)this; - that->myName = str; - } - return myName; -} - -/*!Gets icon picture of object.*/ -QPixmap SalomeApp_DataObject::icon() const -{ - _PTR(GenericAttribute) anAttr; - if ( myObject && myObject->FindAttribute( anAttr, "AttributePixMap" ) ){ - _PTR(AttributePixMap) aPixAttr ( anAttr ); - if ( aPixAttr->HasPixMap() ){ - QString pixmapName = QObject::tr( aPixAttr->GetPixMap().c_str() ); - LightApp_RootObject* aRoot = dynamic_cast( root() ); - if ( aRoot && aRoot->study() ) { - SUIT_ResourceMgr* mgr = aRoot->study()->application()->resourceMgr(); - return mgr->loadPixmap( componentDataType(), pixmapName, false ); - } - } - } - return QPixmap(); -} - -/*!Gets text value for one of entity: - *\li Value (id = SalomeApp_DataObject::CT_Value) - *\li Entry (id = SalomeApp_DataObject::CT_Entry) - *\li IOR (id = SalomeApp_DataObject::CT_IOR) - *\li Reference entry (id = SalomeApp_DataObject::CT_RefEntry) - */ -QString SalomeApp_DataObject::text( const int id ) const -{ - QString txt; - switch ( id ) - { - case CT_Value: -#ifndef WNT - if ( componentObject() != this ) -#else - if ( componentObject() != (SUIT_DataObject*)this ) -#endif - txt = value( referencedObject() ); - break; - case CT_Entry: - txt = entry( object() ); - break; - case CT_IOR: - txt = ior( referencedObject() ); - break; - case CT_RefEntry: - if ( isReference() ) - txt = entry( referencedObject() ); - break; - } - return txt; -} - -/*!Get color value for one of entity: - *\li Text color - *\li Highlight color - *\li Higlighted text color - */ -QColor SalomeApp_DataObject::color( const ColorRole cr ) const -{ - QColor clr; - switch ( cr ) - { - case Text: - if ( isReference() ) - { - if ( !(QString(referencedObject()->GetName().c_str()).isEmpty()) ) - clr = QColor( 255, 0, 0 ); - else - clr = QColor( 200, 200, 200 ); - } - else if ( myObject ) - { - _PTR(GenericAttribute) anAttr; - if ( myObject->FindAttribute( anAttr, "AttributeTextColor" ) ) - { - _PTR(AttributeTextColor) aColAttr = anAttr; - clr = QColor( (int)aColAttr->TextColor().R, (int)aColAttr->TextColor().G, (int)aColAttr->TextColor().B ); - } - } - break; - case Highlight: - if ( isReference() ) - { - if ( !(QString(referencedObject()->GetName().c_str()).isEmpty()) ) - clr = QColor( 255, 0, 0 ); - else - clr = QColor( 200, 200, 200 ); - } - break; - case HighlightedText: - if ( isReference() ) - clr = QColor( 255, 255, 255 ); - break; - } - return clr; -} - -/*!Gets tooltip.*/ -QString SalomeApp_DataObject::toolTip() const -{ - //return object()->Name(); - return QString( "Object \'%1\', module \'%2\', ID=%3" ).arg( name() ).arg( componentDataType() ).arg( entry() ); -} - -/*!Get component type.*/ -QString SalomeApp_DataObject::componentDataType() const -{ - // if ( myCompDataType.isEmpty() ) { - const SalomeApp_DataObject* compObj = dynamic_cast( componentObject() ); - if ( compObj && compObj->object() ) - { - _PTR(SComponent) aComp( compObj->object() ); - if ( aComp ) { - SalomeApp_DataObject* that = (SalomeApp_DataObject*)this; - that->myCompDataType = aComp->ComponentDataType().c_str(); - } - } - // } - return myCompDataType; -} - -/*!Gets object.*/ -_PTR(SObject) SalomeApp_DataObject::object() const -{ - return myObject; -} - -/*!Checks: Is object reference.*/ -bool SalomeApp_DataObject::isReference() const -{ - bool isRef = false; - if ( myObject ) - { - _PTR(SObject) refObj; - isRef = myObject->ReferencedObject( refObj ); - } - return isRef; -} - -/*!Gets reference object.*/ -_PTR(SObject) SalomeApp_DataObject::referencedObject() const -{ - _PTR(SObject) refObj; - _PTR(SObject) obj = myObject; - while ( obj && obj->ReferencedObject( refObj ) ) - obj = refObj; - - return obj; -} - -/*!Gets IOR*/ -QString SalomeApp_DataObject::ior( const _PTR(SObject)& obj ) const -{ - QString txt; - if ( obj ) - { - _PTR(GenericAttribute) attr; - if ( obj->FindAttribute( attr, "AttributeIOR" ) ) - { - _PTR(AttributeIOR) iorAttr = attr; - if ( iorAttr ) - { - std::string str = iorAttr->Value(); - txt = QString( str.c_str() ); - } - } - } - return txt; -} - -/*!Gets Entry*/ -QString SalomeApp_DataObject::entry( const _PTR(SObject)& obj ) const -{ - QString txt; - if ( obj ) - { - std::string str = obj->GetID(); - txt = QString( str.c_str() ); - } - return txt; -} - -/*!Value*/ -QString SalomeApp_DataObject::value( const _PTR(SObject)& obj ) const -{ - if ( !obj ) - return QString::null; - - QString val; - _PTR(GenericAttribute) attr; - - if ( obj->FindAttribute( attr, "AttributeInteger" ) ) - { - _PTR(AttributeInteger) intAttr = attr; - if ( intAttr ) - val = QString::number( intAttr->Value() ); - } - else if ( obj->FindAttribute( attr, "AttributeReal" ) ) - { - _PTR(AttributeReal) realAttr = attr; - if ( realAttr ) - val = QString::number( realAttr->Value() ); - } - else if ( obj->FindAttribute( attr, "AttributeTableOfInteger" ) ) - { - _PTR(AttributeTableOfInteger) tableAttr = attr; - std::string title = tableAttr->GetTitle(); - val = QString( title.c_str() ); - if ( !val.isEmpty() ) - val += QString( " " ); - val += QString( "[%1,%2]" ).arg( tableAttr->GetNbRows() ).arg( tableAttr->GetNbColumns() ); - } - else if ( obj->FindAttribute( attr, "AttributeTableOfReal" ) ) - { - _PTR(AttributeTableOfReal) tableAttr = attr; - std::string title = tableAttr->GetTitle(); - val = QString( title.c_str() ); - if ( !val.isEmpty() ) - val += QString( " " ); - val += QString( "[%1,%2]" ).arg( tableAttr->GetNbRows() ).arg( tableAttr->GetNbColumns() ); - } - else if ( obj->FindAttribute( attr, "AttributeComment") ) - { - _PTR(AttributeComment) comm = attr; - std::string str = comm->Value(); - val = QString( str.c_str() ); - } - - return val; -} - - - - - -/*!Constructor.Initialize by \a parent.*/ -SalomeApp_ModuleObject::SalomeApp_ModuleObject( SUIT_DataObject* parent ) -: SalomeApp_DataObject( parent ), - CAM_RootObject( parent ), - CAM_DataObject( parent ) -{ -} - -/*!Constructor.Initialize by \a parent and SObject.*/ -SalomeApp_ModuleObject::SalomeApp_ModuleObject( const _PTR(SObject)& sobj, SUIT_DataObject* parent ) -: SalomeApp_DataObject( sobj, parent ), - CAM_RootObject( 0, parent ), - CAM_DataObject( parent ) -{ -} - -/*!Constructor.Initialize by \a parent and CAM_DataModel.*/ -SalomeApp_ModuleObject::SalomeApp_ModuleObject( CAM_DataModel* dm, const _PTR(SObject)& sobj, SUIT_DataObject* parent ) -: SalomeApp_DataObject( sobj, parent ), - CAM_RootObject( dm, parent ), - CAM_DataObject( parent ) -{ -} - -/*!Destructor. Do nothing.*/ -SalomeApp_ModuleObject::~SalomeApp_ModuleObject() -{ -} - -/*!Returns module name */ -QString SalomeApp_ModuleObject::name() const -{ - return SalomeApp_DataObject::name(); -} - - - - -/*!Constructor.Initialize by \a parent.*/ -SalomeApp_SavePointObject::SalomeApp_SavePointObject( SUIT_DataObject* _parent, const int id, SalomeApp_Study* study ) - : LightApp_DataObject( _parent ), CAM_DataObject( _parent ), // IMPORTANT TO CALL ALL VIRTUAL CONSTRUCTORS! - myId( id ), - myStudy( study ) -{ -} - -/*!Destructor. Do nothing.*/ -SalomeApp_SavePointObject::~SalomeApp_SavePointObject() -{ -} - -/*!Returns save points ID */ -int SalomeApp_SavePointObject::getId() const -{ - return myId; -} - -/*!Returns "invalid" entry, which does not correspond to any object in data structure - but indicates that it is a save point object */ -QString SalomeApp_SavePointObject::entry() const -{ - return QObject::tr( "SAVE_POINT_DEF_NAME" ) + QString::number( myId ); -} - -/*!Returns displayed name of object */ -QString SalomeApp_SavePointObject::name() const -{ - return myStudy->getNameOfSavePoint( myId ); -} - -/*!Gets icon picture of object.*/ -QPixmap SalomeApp_SavePointObject::icon() const -{ - return QPixmap(); -} - -/*!Gets tooltip.*/ -QString SalomeApp_SavePointObject::toolTip() const -{ - return QObject::tr( "SAVE_POINT_OBJECT_TOOLTIP" ).arg( name() ); -} - diff --git a/src/SalomeApp/SalomeApp_DataObject.h b/src/SalomeApp/SalomeApp_DataObject.h deleted file mode 100644 index 7f3ae993d..000000000 --- a/src/SalomeApp/SalomeApp_DataObject.h +++ /dev/null @@ -1,126 +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 -// -#ifndef SALOMEAPP_DATAOBJECT_H -#define SALOMEAPP_DATAOBJECT_H - -#include "SalomeApp.h" - -#include "LightApp_DataObject.h" -#include "CAM_RootObject.h" - -#include "SALOMEDSClient.hxx" - -class SalomeApp_Study; - -class SALOMEAPP_EXPORT SalomeApp_DataObject : public LightApp_DataObject -{ - -public: - enum { CT_Value, CT_Entry, CT_IOR, CT_RefEntry }; - -public: - SalomeApp_DataObject( SUIT_DataObject* = 0 ); - SalomeApp_DataObject( const _PTR(SObject)&, SUIT_DataObject* = 0 ); - virtual ~SalomeApp_DataObject(); - - virtual QString name() const; - virtual QPixmap icon() const; - virtual QString toolTip() const; - - virtual QString text( const int ) const; - virtual QColor color( const ColorRole ) const; - - virtual QString entry() const; - - /*! location of corresponding SALOMEDS::SObject */ - virtual _PTR(SObject) object() const; - - bool isReference() const; - _PTR(SObject) referencedObject() const; - - /*! GEOM, SMESH, VISU, etc.*/ - virtual QString componentDataType() const; - -private: - QString ior( const _PTR(SObject)& ) const; - QString entry( const _PTR(SObject)& ) const; - QString value( const _PTR(SObject)& ) const; - -private: - _PTR(SObject) myObject; - QString myEntry; - QString myName; -}; - -/*! - * SalomeApp_ModuleObject - class for optimized access to DataModel from - * SalomeApp_DataObject instances - see also CAM_RootObject.h - */ - -class SALOMEAPP_EXPORT SalomeApp_ModuleObject : public SalomeApp_DataObject, - public CAM_RootObject -{ -public: - SalomeApp_ModuleObject( SUIT_DataObject* = 0 ); - SalomeApp_ModuleObject( const _PTR(SObject)&, SUIT_DataObject* = 0 ); - SalomeApp_ModuleObject( CAM_DataModel*, const _PTR(SObject)&, SUIT_DataObject* = 0 ); - virtual ~SalomeApp_ModuleObject(); - - virtual QString name() const; -}; - -/*! - * SalomeApp_SavePointObject - class that represents persistent visual_state object - * these objects are stored in data model, but NOT in SObjects structure, so we - * must handle them separately using this special class for them - */ - -class SALOMEAPP_EXPORT SalomeApp_SavePointObject : public virtual LightApp_DataObject -{ -public: - SalomeApp_SavePointObject( SUIT_DataObject* parent, const int, SalomeApp_Study* study ); - virtual ~SalomeApp_SavePointObject(); - - virtual QString entry() const; - - virtual QString name() const; - virtual QPixmap icon() const; - virtual QString toolTip() const; - - int getId() const; - -private: - int myId; - SalomeApp_Study* myStudy; -}; - -/*! - * SalomeApp_SavePointRootObject - class that represents parent object for visual_state objects - */ - -class SALOMEAPP_EXPORT SalomeApp_SavePointRootObject : public SUIT_DataObject -{ -public: - SalomeApp_SavePointRootObject( SUIT_DataObject* parent ) : SUIT_DataObject( parent ) {} - - virtual QString name() const { return QObject::tr( "SAVE_POINT_ROOT_NAME" ); } - virtual QString toolTip() const{ return QObject::tr( "SAVE_POINT_ROOT_TOOLTIP" ); } -}; - -#endif 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_Displayer.h b/src/SalomeApp/SalomeApp_Displayer.h deleted file mode 100644 index db5319392..000000000 --- a/src/SalomeApp/SalomeApp_Displayer.h +++ /dev/null @@ -1,46 +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 -// - -#ifndef SALOMEAPP_DISPLAYER_HEADER -#define SALOMEAPP_DISPLAYER_HEADER - -#include - -class QString; - -class SalomeApp_Displayer : public SALOME_Displayer -{ -public: - SalomeApp_Displayer(); - virtual ~SalomeApp_Displayer(); - - 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; - - static SALOME_View* GetActiveView(); - -protected: - virtual SALOME_Prs* buildPresentation( const QString&, SALOME_View* = 0 ); -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_EventFilter.cxx b/src/SalomeApp/SalomeApp_EventFilter.cxx deleted file mode 100755 index 493d690c8..000000000 --- a/src/SalomeApp/SalomeApp_EventFilter.cxx +++ /dev/null @@ -1,81 +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_EventFilter.h" -#include - -#include - -SalomeApp_EventFilter* SalomeApp_EventFilter::myFilter = NULL; - -/*!Constructor.*/ -SalomeApp_EventFilter::SalomeApp_EventFilter() -: QObject() -{ - /* VSR 13/01/03 : installing global event filter for the application */ - qApp->installEventFilter( this ); -} - -/*!Destructor.*/ -SalomeApp_EventFilter::~SalomeApp_EventFilter() -{ - qApp->removeEventFilter( this ); -} - -/*! - Custom event filter -*/ -bool SalomeApp_EventFilter::eventFilter( QObject* o, QEvent* e ) -{ - if ( e->type() == SALOME_EVENT ) - { - SALOME_Event* aSE = (SALOME_Event*)((QCustomEvent*)e)->data(); - processEvent(aSE); - ((QCustomEvent*)e)->setData( 0 ); - return true; - } - return QObject::eventFilter( o, e ); -} - -/*!Process event.*/ -void SalomeApp_EventFilter::processEvent( SALOME_Event* theEvent ) -{ - if(theEvent){ - theEvent->Execute(); - // Signal the calling thread that the event has been processed - theEvent->processed(); - } -} - -/*!Create new instance of SalomeApp_EventFilter*/ -void SalomeApp_EventFilter::Init() -{ - if( myFilter==NULL ) - myFilter = new SalomeApp_EventFilter(); -} - -/*!Destroy filter.*/ -void SalomeApp_EventFilter::Destroy() -{ - if( myFilter ) - { - delete myFilter; - myFilter = NULL; - } -} diff --git a/src/SalomeApp/SalomeApp_EventFilter.h b/src/SalomeApp/SalomeApp_EventFilter.h deleted file mode 100755 index e8849e231..000000000 --- a/src/SalomeApp/SalomeApp_EventFilter.h +++ /dev/null @@ -1,57 +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 -// -#ifndef SALOMEAPP_EVENTFILTER_H -#define SALOMEAPP_EVENTFILTER_H - -#include "SalomeApp.h" -#include - -#if defined WNT -#pragma warning( disable: 4251 ) -#endif - -class SALOME_Event; - -/*! - Class provide event filter. -*/ -class SALOMEAPP_EXPORT SalomeApp_EventFilter: public QObject -{ -public: - static void Init(); - static void Destroy(); - -protected: - SalomeApp_EventFilter(); - virtual ~SalomeApp_EventFilter(); - -private: - /*! global event filter for qapplication */ - virtual bool eventFilter( QObject* o, QEvent* e ); - void processEvent( SALOME_Event* ); - -private: - static SalomeApp_EventFilter* myFilter; -}; - -#if defined WNT -#pragma warning( default: 4251 ) -#endif - -#endif diff --git a/src/SalomeApp/SalomeApp_ExceptionHandler.cxx b/src/SalomeApp/SalomeApp_ExceptionHandler.cxx deleted file mode 100644 index 90de9c62d..000000000 --- a/src/SalomeApp/SalomeApp_ExceptionHandler.cxx +++ /dev/null @@ -1,117 +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_ExceptionHandler.h" -#include "CASCatch.hxx" - -#include - -#include -#include - -#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() -{ - // 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 ) -{ -#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) { -#endif - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - throw Standard_Failure( aFail->GetMessageString() ); - } - - return true; -} - -/*!Try to call handleSignals( o, e ), catch and show error message.*/ -bool SalomeApp_ExceptionHandler::handle( QObject* o, QEvent* e ) -{ - bool res = false; - QString title( "Fatal error" ); - - try { - res = handleSignals( o, e ); - } - catch( std::exception& ex ) - { - showMessage( title, QString( ex.what() ) ); - } - catch( Standard_Failure& e ) - { - showMessage( title, QString( e.GetMessageString() ) ); - } -#ifndef WNT - catch(...) - { - showMessage( title, "Unknown Exception" ); - } -#endif - - return res; -} - -/*!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_ - raiseFPE = true; - char* envDisableFPE = getenv("DISABLE_FPE"); - if (envDisableFPE && atoi(envDisableFPE)) - raiseFPE = false; -#else - raiseFPE = false; -#endif - - return new SalomeApp_ExceptionHandler( raiseFPE ); -} diff --git a/src/SalomeApp/SalomeApp_ExceptionHandler.h b/src/SalomeApp/SalomeApp_ExceptionHandler.h deleted file mode 100644 index 4a4c0bdab..000000000 --- a/src/SalomeApp/SalomeApp_ExceptionHandler.h +++ /dev/null @@ -1,36 +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 -// -#ifndef SALOMEAPP_EXCEPTIONHANDLER_H -#define SALOMEAPP_EXCEPTIONHANDLER_H - -#include "SalomeApp.h" - -#include - -class SALOMEAPP_EXPORT SalomeApp_ExceptionHandler : public SUIT_ExceptionHandler -{ -public: - SalomeApp_ExceptionHandler( const bool ); - virtual bool handle( QObject*, QEvent* ); - -protected: - virtual bool handleSignals( QObject*, QEvent* ); -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_Filter.cxx b/src/SalomeApp/SalomeApp_Filter.cxx deleted file mode 100644 index b3214ba00..000000000 --- a/src/SalomeApp/SalomeApp_Filter.cxx +++ /dev/null @@ -1,36 +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_Filter.h" - -/*!Constructor.Initialize by study.*/ -SalomeApp_Filter::SalomeApp_Filter( SalomeApp_Study* study ) -{ - myStudy = study; -} - -/*!Destructor. Do nothing.*/ -SalomeApp_Filter::~SalomeApp_Filter() -{ -} - -/*!Gets study.*/ -SalomeApp_Study* SalomeApp_Filter::getStudy() const -{ - return myStudy; -} diff --git a/src/SalomeApp/SalomeApp_Filter.h b/src/SalomeApp/SalomeApp_Filter.h deleted file mode 100644 index 8de24ccdd..000000000 --- a/src/SalomeApp/SalomeApp_Filter.h +++ /dev/null @@ -1,40 +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 -// -#ifndef SALOMEAPP_FILTER_H -#define SALOMEAPP_FILTER_H - -#include "SalomeApp.h" -#include "SUIT_SelectionFilter.h" - -class SalomeApp_Study; - -class SALOMEAPP_EXPORT SalomeApp_Filter: public SUIT_SelectionFilter -{ -public: - SalomeApp_Filter(SalomeApp_Study* study); - ~SalomeApp_Filter(); - -protected: - SalomeApp_Study* getStudy() const; - -private: - SalomeApp_Study* myStudy; -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_ImportOperation.cxx b/src/SalomeApp/SalomeApp_ImportOperation.cxx deleted file mode 100644 index 5d19bf6f0..000000000 --- a/src/SalomeApp/SalomeApp_ImportOperation.cxx +++ /dev/null @@ -1,40 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SALOMEGUI_ImportOperation.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "SalomeApp_ImportOperation.h" -#include - -#ifndef WNT -using namespace std; -#endif - -/*!Constructor. Do nothing.*/ -SalomeApp_ImportOperation::SalomeApp_ImportOperation( SUIT_Application* app ) : -SUIT_Operation( app ) -{ -} diff --git a/src/SalomeApp/SalomeApp_ImportOperation.h b/src/SalomeApp/SalomeApp_ImportOperation.h deleted file mode 100644 index 56b895584..000000000 --- a/src/SalomeApp/SalomeApp_ImportOperation.h +++ /dev/null @@ -1,46 +0,0 @@ -// SALOME SALOMEAPP : implementation of desktop and GUI kernel -// -// 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 : SalomeApp_ImportOperation.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#if !defined SALOMEAPP_IMPORTOPERATION -#define SALOMEAPP_IMPORTOPERATION - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#include - -class SUIT_Application; - -class SalomeApp_ImportOperation : public SUIT_Operation -{ -public: - SalomeApp_ImportOperation( SUIT_Application* ); -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_ListView.cxx b/src/SalomeApp/SalomeApp_ListView.cxx deleted file mode 100644 index e2c354eaa..000000000 --- a/src/SalomeApp/SalomeApp_ListView.cxx +++ /dev/null @@ -1,1398 +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 -// -// SALOME SalomeApp -// -// File : SalomeApp_ListView.cxx -// Author : Vadim SANDLER -// Module : SALOME -// $Header$ - -#include "SalomeApp_ListView.h" -#include "SalomeApp_Application.h" - -#include "SUIT_ResourceMgr.h" -#include "SUIT_Session.h" - -#include -#include -#include -#include - -#include -#include - -#include "utilities.h" - -using namespace std; - -/*! - Used for resizing editing widget -*/ -void computeEditGeometry(SalomeApp_ListViewItem* theItem, - SalomeApp_EntityEdit* theWidget) -{ - if (!theItem) - return; - QListView* aListView = theItem->listView(); - int anEditColumn = theItem->getEditedColumn(); - if (anEditColumn < 0) - return; - - int aX = 0, aY = 0, aW = 0, aH = 0; - - QRect aRect = aListView->itemRect(theItem); - aListView->contentsToViewport(aListView->header()->sectionPos(anEditColumn), 0, aX, aY); - if (aX < 0) - aX = 0; // THIS CAN BE REMOVED - QSize aSize = theWidget->getControl()->sizeHint(); - aH = QMAX(aSize.height() , aRect.height() ); - aY = aRect.y() - ((aH - aRect.height()) / 2); - //aW = aListView->columnWidth(anEditColumn); // CAN SUBSTITUTE NEXT 3 ROWS - aW = aListView->viewport()->width() - aX; - if (aW < 0) - aW = 0; - theWidget->setGeometry(aX, aY, aW, aH); -} - -/*! - Constructor -*/ -SalomeApp_ListView::SalomeApp_ListView( QWidget* parent ) -: QtxListView( parent ) -{ - myMouseEnabled = true; - myEditingEnabled = false; - setSelectionMode(Single); - setSorting(-1); - setRootIsDecorated(false); - setAllColumnsShowFocus(false); -// header()->setClickEnabled(false); - header()->setMovingEnabled(false); - - myEditedItem = 0; - myEdit = 0; - - viewport()->installEventFilter(this); - - connect(this, SIGNAL(selectionChanged()), - this, SLOT(onSelectionChanged())); - connect(header(), SIGNAL(sizeChange(int, int, int)), - this, SLOT(onHeaderSizeChange(int, int, int))); -} - -/*! - Destructor -*/ -SalomeApp_ListView::~SalomeApp_ListView() -{ - if (myEdit) { - delete myEdit; - } - myEdit = 0; - myEditedItem = 0; -} - -/*! - Updates all data viewer -*/ -void SalomeApp_ListView::updateViewer() -{ - // temporary disconnecting selection changed SIGNAL - blockSignals(true); - SalomeApp_ListViewItem* aRoot = (SalomeApp_ListViewItem*)firstChild(); - if (aRoot) - aRoot->updateAllLevels(); - updateContents(); - // connecting again selection changed SIGNAL - blockSignals(false); - emit selectionChanged(); -} - -/*! - Updates currently selected item(s) -*/ -void SalomeApp_ListView::updateSelected() -{ - // temporary disconnecting selection changed SIGNAL - blockSignals(true); - SalomeApp_ListViewItem* aChild = (SalomeApp_ListViewItem*)selectedItem(); - if (aChild) - aChild->updateAllLevels(); - updateContents(); - // connecting again selection changed SIGNAL - blockSignals(false); - emit selectionChanged(); -} - -/*! - Returns popup client type -*/ -QString SalomeApp_ListView::popupClientType() const -{ - return "SalomeApp_ListView"; -} - -/*! - Fills popup menu with items -*/ -void SalomeApp_ListView::contextMenuPopup( QPopupMenu* aPopup ) -{ - if (aPopup) { - // add items here... - } -} - -/*! - Clears view -*/ -void SalomeApp_ListView::clear() -{ - if (myEdit) { - delete myEdit; - myEdit = 0; - myEditedItem = 0; - } - QListView::clear(); -} - -/*! - \return true if mouse events are enabled -*/ -bool SalomeApp_ListView::isMouseEnabled() -{ - return myMouseEnabled; -} - -/*! - Enables/disables mouse events (excluding MouseMove) -*/ -void SalomeApp_ListView::enableMouse(bool enable) -{ - myMouseEnabled = enable; -} - -/*! - Event filter -*/ -bool SalomeApp_ListView::eventFilter(QObject* object, QEvent* event) -{ - if (object == viewport() && - (event->type() == QEvent::MouseButtonPress || - event->type() == QEvent::MouseButtonRelease || - event->type() == QEvent::MouseButtonDblClick) && - !isMouseEnabled()) - return true; - else - return QListView::eventFilter(object, event); -} - -/*! - Setting editing of items availbale/not available -*/ -void SalomeApp_ListView::enableEditing(bool theFlag) -{ - myEditingEnabled = theFlag; - if (!myEditingEnabled) { - if (myEdit) { - delete myEdit; - myEdit = 0; - myEditedItem = 0; - } - } -} - -/*! - Says if editing is enabled -*/ -bool SalomeApp_ListView::isEnableEditing() -{ - return myEditingEnabled; -} - -/*! - Calls finishEditing(true)... -*/ -void SalomeApp_ListView::accept() -{ - finishEditing(true); -} - -/*! - Slot, called when selection changed in List Viewer -*/ -void SalomeApp_ListView::onSelectionChanged() -{ - if (myEdit) { - finishEditing(true); - delete myEdit; - myEdit = 0; - if (myEditedItem && !myEditedItem->isAccepted()) { - delete myEditedItem; - updateContents(); - } - myEditedItem = 0; - } - // editing is allowed in Single Selection Mode only - if (selectionMode() != Single || !isEnableEditing()) - return; - SalomeApp_ListViewItem* anItem = (SalomeApp_ListViewItem*)selectedItem(); - if (anItem) { - if (!anItem->isEditable()) - return; - myEdit = anItem->startEditing(); - if (myEdit) { - connect(myEdit, SIGNAL(returnPressed()), this, SLOT(onEditOk())); - connect(myEdit, SIGNAL(escapePressed()), this, SLOT(onEditCancel())); - myEditedItem = anItem; - myEdit->show(); - myEdit->setFocus(); - } - } -} - -/*! - Called when Data Viewer is resized -*/ -void SalomeApp_ListView::resizeEvent( QResizeEvent * e) -{ - QListView::resizeEvent(e); - int aW = columnWidth(columns()-1); - int aX = header()->sectionPos(columns()-1); - if (aW < width() - frameWidth() * 2 - aX - 1) - setColumnWidth(columns()-1, width() - frameWidth() * 2 - aX - 1); - updateContents(); -} - -/*! - Slot, called when columns sizes are changed -*/ -void SalomeApp_ListView::onHeaderSizeChange(int, int, int) -{ - int aW = columnWidth(columns()-1); - int aX = header()->sectionPos(columns()-1); - if (aW < width() - frameWidth() * 2 - aX - 1) - setColumnWidth(columns()-1, width() - frameWidth() * 2 - aX - 1); -} - -/*! - Handler for paint event -*/ -void SalomeApp_ListView::viewportPaintEvent(QPaintEvent* e) -{ - QListView::viewportPaintEvent(e); - if (myEditedItem && myEdit) { - computeEditGeometry(myEditedItem, myEdit); - } -} - -/*! - Called when user finishes in editing of item -*/ -void SalomeApp_ListView::onEditOk() -{ - finishEditing(true); -} - -/*! - Called when user cancels item editing -*/ -void SalomeApp_ListView::onEditCancel() -{ - finishEditing(false); -} - -/*! - Finishes editing of entity -*/ -UpdateType SalomeApp_ListView::finishEditing(bool ok) -{ - UpdateType aNeedsUpdate = utCancel; - if (myEditedItem && myEdit) - { - disconnect(myEdit, SIGNAL(returnPressed()), this, SLOT(onEditOk())); - disconnect(myEdit, SIGNAL(escapePressed()), this, SLOT(onEditCancel())); - myEditedItem->setAccepted(true); - if (ok) { - aNeedsUpdate = myEditedItem->finishEditing(myEdit); - if (aNeedsUpdate == utCancel) { - // something to do here on Cancel... - } - else { - // something to do here on OK... - } - // updating contents - switch (aNeedsUpdate) { - case utUpdateItem: - { - if (myEditedItem) - myEditedItem->updateAllLevels(); - break; - } - case utUpdateParent: - { - if (myEditedItem) { - SalomeApp_ListViewItem* aParent = (SalomeApp_ListViewItem*)(myEditedItem->parent()); - if (aParent) - aParent->updateAllLevels(); - else - myEditedItem->updateAllLevels(); - } - break; - } - case utUpdateViewer: - { - updateViewer(); - break; - } - case utUpdateAll: - { - // doing the same as for utUpdateViewer here - // descendants can add extra processing - updateViewer(); - break; - } - default: - break; - } - } - } - - // hide widget - if (myEdit) { - myEdit->hide(); - } - - return aNeedsUpdate; -} - -/*! - \return current tooltip for list view - \retval valid rect in success -*/ -QRect SalomeApp_ListView::tip(QPoint aPos, - QString& aText, - QRect& dspRect, - QFont& dspFnt) const -{ - QRect result( -1, -1, -1, -1 ); - SalomeApp_ListViewItem* aItem = (SalomeApp_ListViewItem*)itemAt( aPos ); - if ( aItem ) { - for (int i = 0; i < columns(); i++) { - QRect aItemRect = aItem->itemRect(i); - QRect aTextRect = aItem->textRect(i); - if ( !aItem->text(i).isEmpty() && - ( aItemRect.width() > header()->sectionSize(i) || - aTextRect.left() < 0 || - aTextRect.top() < 0 || - aTextRect.right() > viewport()->width() || - aTextRect.bottom() > viewport()->height() ) ) { - // calculating tip data - aText = aItem->tipText(); - dspRect = aItem->tipRect(); - dspFnt = font(); - if (dspRect.isValid()) { - result = QRect(QPoint(0, aItemRect.top()), - QSize(viewport()->width(), aItemRect.height())); - } - } - } - } - return result; -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListView* parent) : -QListViewItem( parent ) -{ - init(); -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListView* parent, - SalomeApp_ListViewItem* after) : -QListViewItem( parent, after ) -{ - init(); -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListView* parent, - const QString& theName, - const bool theEditable) : -QListViewItem(parent, theName) -{ - init(); - setEditable(theEditable); -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListView* parent, - const QString& theName, - const QString& theValue, - const bool theEditable) : -QListViewItem(parent, theName, theValue) -{ - init(); - setEditable(theEditable); -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListViewItem* parent, - const QString& theName, - const bool theEditable) : -QListViewItem(parent, theName) -{ - init(); - setEditable(theEditable); -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListViewItem* parent, - SalomeApp_ListViewItem* after, - const QString& theName, - const bool theEditable) : -QListViewItem(parent, after, theName) -{ - init(); - setEditable(theEditable); -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListView* parent, - SalomeApp_ListViewItem* after, - const QString& theName, - const bool theEditable) : -QListViewItem(parent, after, theName) -{ - init(); - setEditable(theEditable); -} - - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListViewItem* parent, - const QString& theName, - const QString& theValue, - const bool theEditable) : -QListViewItem(parent, theName, theValue) -{ - init(); - setEditable(theEditable); -} - - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListViewItem* parent, - SalomeApp_ListViewItem* after, - const QString& theName, - const QString& theValue, - const bool theEditable) : -QListViewItem(parent, after, theName, theValue) -{ - init(); - setEditable(theEditable); -} - -/*! - Constructor -*/ -SalomeApp_ListViewItem::SalomeApp_ListViewItem(SalomeApp_ListView* parent, - SalomeApp_ListViewItem* after, - const QString& theName, - const QString& theValue, - const bool theEditable) : -QListViewItem(parent, after, theName, theValue) -{ - init(); - setEditable(theEditable); -} - -/*! - Destructor -*/ -SalomeApp_ListViewItem::~SalomeApp_ListViewItem() -{ -} - -/*! - Initialization -*/ -void SalomeApp_ListViewItem::init() -{ - myEditable = false; - myAccepted = true; - myEditingType = (int)SalomeApp_EntityEdit::etLineEdit; - myValueType = (int)SalomeApp_EntityEdit::vtString; - myButtons = 0; - myUserType = -1; -} - -/*! - \return text in the first column -*/ -QString SalomeApp_ListViewItem::getName() const -{ - return ( listView()->columns() > 0 ) ? text(0) : QString(""); -} - -/*! - Sets text in the first column -*/ -UpdateType SalomeApp_ListViewItem::setName(const QString& theName) -{ - UpdateType aNeedsUpdate = utCancel; - if (listView()->columns() > 0) { - setText(0, theName); - aNeedsUpdate = utNone; - } - return aNeedsUpdate; -} - -/*! - \return text in the second column -*/ -QString SalomeApp_ListViewItem::getValue() const -{ - return ( listView()->columns() > 1 ) ? text(1) : QString(""); -} - -/*! - Sets text in the second column -*/ -UpdateType SalomeApp_ListViewItem::setValue(const QString& theValue) -{ - UpdateType aNeedsUpdate = utCancel; - if (listView()->columns() > 1) { - setText(1, theValue); - aNeedsUpdate = utNone; - } - return aNeedsUpdate; -} - -/*! - \return full path to the entity from the root -*/ -QString SalomeApp_ListViewItem::fullName() -{ - QString aFullName = getName(); - SalomeApp_ListViewItem* aParent = (SalomeApp_ListViewItem*)parent(); - while(aParent != NULL) { - aFullName = aParent->getName() + QString(".") + aFullName; - aParent = (SalomeApp_ListViewItem*)(aParent->parent()); - } - return aFullName; -} - -/*! - expands all entities beginning from this level -*/ -void SalomeApp_ListViewItem::openAllLevels() -{ - setOpen(true); - SalomeApp_ListViewItem* aChild = (SalomeApp_ListViewItem*)firstChild(); - while( aChild ) { - aChild->openAllLevels(); - aChild = (SalomeApp_ListViewItem*)(aChild->nextSibling()); - } -} - -/*! - update all entites beginning from this level -*/ -void SalomeApp_ListViewItem::updateAllLevels() -{ - SalomeApp_ListViewItem* aChild = (SalomeApp_ListViewItem*)firstChild(); - while( aChild ) { - aChild->updateAllLevels(); - aChild = (SalomeApp_ListViewItem*)(aChild->nextSibling()); - } -} - -/*! - \return true if entity is editable -*/ -bool SalomeApp_ListViewItem::isEditable() const -{ - return myEditable; -} - -/*! - Sets editable flag fo the entity -*/ -void SalomeApp_ListViewItem::setEditable(bool theEditable) -{ - myEditable = theEditable; -} - -/*! - \return true if entitiy is accepted after editing -*/ -bool SalomeApp_ListViewItem::isAccepted() const -{ - return myAccepted; -} - -/*! - Sets entitiy accepted or not after editing -*/ -void SalomeApp_ListViewItem::setAccepted(bool theAccepted) -{ - myAccepted = theAccepted; -} - -/*! - \retval type of edit control (default is edit box) - \li 0 - edit box - \li 1 - combo box - \li 2 - editable combo box -*/ -int SalomeApp_ListViewItem::getEditingType() -{ - return myEditingType; -} - -/*! - \retval type of edit control (negative value means none) - \li 0 - edit box - \li 1 - combo box - \li 2 - editable combo box -*/ -void SalomeApp_ListViewItem::setEditingType(const int type) -{ - myEditingType = type; -} - -/*! \retval edited column, default is last column - negative value means there are no editable columns -*/ -int SalomeApp_ListViewItem::getEditedColumn() -{ - return listView()->columns()-1; -} - -/*! - \retval type of edited value (string, int, double) - default is string -*/ -int SalomeApp_ListViewItem::getValueType() -{ - return myValueType; -} - -/*! - Sets type of edited value -*/ -void SalomeApp_ListViewItem::setValueType(const int valueType) -{ - myValueType = valueType; -} - -/*! - Sets type of edited value -*/ -int SalomeApp_ListViewItem::getUserType() -{ - return myUserType; -} - -/*! - Sets type of edited value -*/ -void SalomeApp_ListViewItem::setUserType(const int userType) -{ - myUserType = userType; -} - -/*! - \return buttons for editing widget (Apply (V), Cancel (X)) - default is both buttons -*/ -int SalomeApp_ListViewItem::getButtons() -{ - return myButtons; -} - -/*! - Sets buttons for editing widget (Apply (V), Cancel (X)) -*/ -void SalomeApp_ListViewItem::setButtons(const int buttons) -{ - myButtons = buttons; -} - -/*! - Creates control for editing and fills it with values -*/ -SalomeApp_EntityEdit* SalomeApp_ListViewItem::startEditing() -{ - SalomeApp_EntityEdit* aWidget = 0; - QListView* aListView = listView(); - if (aListView) { - if (!isEditable()) - return 0; - int anEditType = getEditingType(); - int aValueType = getValueType(); - int aButtons = getButtons(); - int anEditColumn = getEditedColumn(); - if (anEditColumn < 0 || anEditType < 0) - return 0; - aWidget = new SalomeApp_EntityEdit(aListView->viewport(), - anEditType, - aValueType, - aButtons & SalomeApp_EntityEdit::btApply, - aButtons & SalomeApp_EntityEdit::btCancel); - computeEditGeometry(this, aWidget); - - fillWidgetWithValues(aWidget); - } - return aWidget; -} - -/*! - Fills widget with initial values (list or single value) -*/ -void SalomeApp_ListViewItem::fillWidgetWithValues(SalomeApp_EntityEdit* theWidget) -{ - int anEditColumn = getEditedColumn(); - if (theWidget && anEditColumn >= 0 && !text(anEditColumn).isEmpty()) - theWidget->insertItem(text(anEditColumn), true); -} - -/*! - Finishes editing of entity -*/ -UpdateType SalomeApp_ListViewItem::finishEditing(SalomeApp_EntityEdit* theWidget) -{ - UpdateType aNeedsUpdate = utCancel; - try { - if (theWidget) { - int anEditColumn = getEditedColumn(); - switch (anEditColumn) { - case 0: - aNeedsUpdate = setName(theWidget->getText()); - break; - case 1: - aNeedsUpdate = setValue(theWidget->getText()); - break; - default: - break; - } - } - } - catch (...) { - MESSAGE( "System error has been caught - SalomeApp_ListViewItem::finishEditing" ) - } - return aNeedsUpdate; -} - -/*! - Calculates rectangle which should contain item's tip -*/ -QRect SalomeApp_ListViewItem::tipRect() -{ - QRect aRect = QRect(-1, -1, -1, -1); - QRect aItemRect = listView()->itemRect(this); - if ( !aItemRect.isValid() ) - return aItemRect; - - QString aTip = tipText(); - if (!aTip.isEmpty()) { - QRect aRect0 = textRect(0); - QFont aFont(listView()->font()); - QFontMetrics fm(aFont); - int iw = fm.width(aTip); - aRect = QRect(QPoint(aRect0.x() < 0 ? 0 : aRect0.x(), - aRect0.y()), - QSize (iw, - aRect0.height())); - } - return aRect; -} - -/*! - \return text for tooltip -*/ -QString SalomeApp_ListViewItem::tipText() -{ - QString aText = getName(); - if (!getValue().isEmpty()) - aText += QString(" : ") + getValue(); - return aText; -} - -/*! - Calculates rect of item text in viewport coordinates -*/ -QRect SalomeApp_ListViewItem::textRect(const int column) const -{ - QRect aItemRect = listView()->itemRect( this ); - if ( !aItemRect.isValid() ) - return aItemRect; - - QFont aFont(listView()->font()); - QFontMetrics fm(aFont); - - int decorWidth = ( listView()->rootIsDecorated() ) ? - ( listView()->treeStepSize() * (depth() + 1) ) : - ( listView()->treeStepSize() * depth() ); - int pixmapWidth = ( pixmap(column) ) ? - pixmap(column)->width() + listView()->itemMargin() * 2 : - listView()->itemMargin(); - int prevWidth = 0; - for (int i = 0; i < column; i++) - prevWidth += listView()->header()->sectionSize(i); - int ix = prevWidth + - pixmapWidth + - ((column == 0) ? decorWidth : 0); - int iy = aItemRect.y(); - int iw = fm.width(text(column)); - int ih = aItemRect.height(); - if (pixmap(column)) { - iy += listView()->itemMargin(); - ih -= listView()->itemMargin() * 2; - } - ix -= listView()->contentsX(); - - QRect theResult(QPoint(ix, iy), QSize(iw, ih)); - return theResult; -} - -/*! - Calculates rect of item data in viewport coordinates -*/ -QRect SalomeApp_ListViewItem::itemRect(const int column) const -{ - QRect aItemRect = listView()->itemRect( this ); - if ( !aItemRect.isValid() ) - return aItemRect; - - QFont aFont(listView()->font()); - QFontMetrics fm(aFont); - - int decorWidth = ( listView()->rootIsDecorated() ) ? - ( listView()->treeStepSize() * (depth() + 1) ) : - ( listView()->treeStepSize() * depth() ); - int pixmapWidth = ( pixmap(column) ) ? - pixmap(column)->width() + listView()->itemMargin() * 2 : - 0; - int prevWidth = 0; - for (int i = 0; i < column; i++) - prevWidth += listView()->header()->sectionSize(i); - int ix = prevWidth; - int iy = aItemRect.y(); - int iw = pixmapWidth + - listView()->itemMargin() * 2 + - ((column == 0) ? decorWidth : 0) + - fm.width(text(column)); - int ih = aItemRect.height(); - ix -= listView()->contentsX(); - - QRect theResult(QPoint(ix, iy), QSize(iw, ih)); - return theResult; -} - -/*! - Constructor -*/ -SalomeApp_EditBox::SalomeApp_EditBox(QWidget* parent) : -QLineEdit(parent) -{ -} - -/*! - Event filter for key pressing -*/ -void SalomeApp_EditBox::keyPressEvent( QKeyEvent *e ) -{ - if ( e->key() == Key_Escape ) - emit escapePressed(); - else - QLineEdit::keyPressEvent( e ); - e->accept(); -} - - -/*! - Constructor -*/ -SalomeApp_ComboBox::SalomeApp_ComboBox(bool rw, QWidget* parent, const char* name) : -QComboBox(rw, parent, name) -{ -} - -/*! - Searches item in list and returns its index -*/ -int SalomeApp_ComboBox::findItem(const QString& theText) -{ - for (int i = 0; i < count(); i++) - if (text(i) == theText) - return i; - return -1; -} - -/*! - Adds item in combo box -*/ -void SalomeApp_ComboBox::insertItem(const QString& theValue, - int theIndex) -{ - if (duplicatesEnabled() || findItem(theValue) < 0) - QComboBox::insertItem(theValue, theIndex); -} - -/*! - Adds list of items in combo box -*/ -void SalomeApp_ComboBox::insertList(const QStringList& theList) -{ - for (unsigned i = 0; i < theList.count(); i++) - insertItem(theList[i]); -} - -/*! - Adds item in combo box -*/ -void SalomeApp_ComboBox::insertItem(const int theValue) -{ - int aNum; - bool bOk; - for (int i = 0; i < count(); i++) { - aNum = text(i).toInt(&bOk); - if (bOk) { - if (aNum > theValue || (aNum == theValue && duplicatesEnabled())) { - insertItem(QString::number(theValue), i); - return; - } - } - } - insertItem(QString::number(theValue)); -} - -/*! - Adds list of items in combo box -*/ -void SalomeApp_ComboBox::insertList(const TColStd_ListOfInteger& theList) -{ - for (TColStd_ListIteratorOfListOfInteger aIter(theList); aIter.More(); aIter.Next()) - insertItem(aIter.Value()); -} - -/*! - Adds item in combo box -*/ -void SalomeApp_ComboBox::insertItem(const double theValue) -{ - double aNum; - bool bOk; - for (int i = 0; i < count(); i++) { - aNum = text(i).toDouble(&bOk); - if (bOk) { - if (aNum > theValue || (aNum == theValue && duplicatesEnabled())) { - insertItem(QString::number(theValue), i); - return; - } - } - } - insertItem(QString::number(theValue)); -} - -/*! - Adds list of items in combo box -*/ -void SalomeApp_ComboBox::insertList(const TColStd_ListOfReal& theList) -{ - for (TColStd_ListIteratorOfListOfReal aIter(theList); aIter.More(); aIter.Next()) - insertItem(aIter.Value()); -} - -#include - -#define MIN_COMBO_WIDTH 1 -#define MIN_EDIT_WIDTH 1 - -/*! - Constructor -*/ -SalomeApp_EntityEdit::SalomeApp_EntityEdit(QWidget* parent, - int controlType, - int valueType, - bool butApply, - bool butCancel) : -QWidget(parent), -myEdit(0), -myCombo(0), -myApplyBtn(0), -myCancelBtn(0) -{ - SalomeApp_Application* app = dynamic_cast( SUIT_Session::session()->activeApplication() ); - SUIT_ResourceMgr* mgr = app ? app->resourceMgr() : NULL; - - QHBoxLayout* aTopLayout = new QHBoxLayout(this); - aTopLayout->setAlignment( Qt::AlignTop ); - aTopLayout->setSpacing( 0 ); - aTopLayout->setMargin( 1 ); - if (controlType != etLineEdit && - controlType != etComboBox && - controlType != etComboEdit) - controlType = etLineEdit; - if (controlType == etComboBox || controlType == etComboEdit) { - // this is an editable combo box - myCombo = new SalomeApp_ComboBox(controlType == etComboEdit, this); - myCombo->setMinimumSize(MIN_COMBO_WIDTH, 0); - myCombo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, - QSizePolicy::Fixed)); - // no insertions - myCombo->setInsertionPolicy(QComboBox::NoInsertion); - // no duplicates enabled by default - myCombo->setDuplicatesEnabled(false); - aTopLayout->addWidget(myCombo); - // connect signals - connect(myCombo, SIGNAL(activated(const QString&)), this, SLOT(onComboActivated(const QString&))); - connect(myCombo, SIGNAL(textChanged(const QString&)), this, SLOT(onTextChanged(const QString&))); - } - else { - // and this is an edit box - myEdit = new SalomeApp_EditBox(this); - myEdit->setMinimumSize(MIN_EDIT_WIDTH, 0); - myEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, - QSizePolicy::Fixed)); - aTopLayout->addWidget(myEdit); - connect(myEdit, SIGNAL(textChanged(const QString&)), this, SLOT(onTextChanged(const QString&))); - connect(myEdit, SIGNAL(returnPressed()), this, SLOT(onApply())); - connect(myEdit, SIGNAL(escapePressed()), this, SLOT(onCancel())); - } - if (valueType != vtString && - valueType != vtInteger && - valueType != vtDouble) - valueType = vtString; - if (valueType == vtInteger) - setValidator(new QIntValidator(this)); - else if (valueType == vtDouble) - setValidator(new QDoubleValidator(this)); - if (butApply) { - // Apply button (V) - myApplyBtn = new QToolButton(this); - - QPixmap anIcon; - if( mgr ) - anIcon = mgr->loadPixmap( "STD", tr( "ICON_APPLY" ), false ); - - myApplyBtn->setPixmap(anIcon); - myApplyBtn->setEnabled(false); - myApplyBtn->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); - myApplyBtn->setMinimumSize(16, 16); - myApplyBtn->setMaximumSize(16, 20); - aTopLayout->addWidget(myApplyBtn); - connect(myApplyBtn, SIGNAL(clicked()), this, SLOT(onApply())); - } - if (butCancel) { - // Cancel button (X) - myCancelBtn = new QToolButton(this); - QPixmap anIcon; - if( mgr ) - anIcon = mgr->loadPixmap( "STD", tr( "ICON_CANCEL" ), false ); - myCancelBtn->setPixmap(anIcon); - myCancelBtn->setEnabled(false); - myCancelBtn->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); - myCancelBtn->setMinimumSize(16, 16); - myCancelBtn->setMaximumSize(16, 20); - aTopLayout->addWidget(myCancelBtn); - connect(myCancelBtn, SIGNAL(clicked()), this, SLOT(onCancel())); - } -} - -/*! - Destructor -*/ -SalomeApp_EntityEdit::~SalomeApp_EntityEdit() -{ -} - -/*! - Clears edit/combo box -*/ -void SalomeApp_EntityEdit::clear() -{ - if (myEdit) - myEdit->clear(); - if (myCombo) - myCombo->clear(); -} - -/*! - \return current text in edit box or combo box -*/ -QString SalomeApp_EntityEdit::getText() -{ - if (myEdit) - return myEdit->text(); - else if (myCombo) - return myCombo->currentText(); - else - return ""; -} - -/*! - Sets text -*/ -void SalomeApp_EntityEdit::setText(const QString& theText) -{ - myString = theText; - if (myEdit) - myEdit->setText(theText); - if (myCombo) { - int aFound = myCombo->findItem(theText); - if (aFound >= 0) { - myCombo->setCurrentItem(aFound); - onTextChanged(theText); - } - } -} - -/*! - Adds item in combo box, sets it current if theSetCurrent is true -*/ -void SalomeApp_EntityEdit::insertItem(const QString& theValue, - bool theSetCurrent, - int theOrder) -{ - if (myCombo) { - int aIndexAt = -1; - if (theOrder == atTop) - aIndexAt = 0; - else if (theOrder == atBeforeCurrent && myCombo->count() > 0) - aIndexAt = myCombo->currentItem(); - else if (theOrder == atAfterCurrent && - myCombo->count() > 0 && - myCombo->currentItem() < myCombo->count()-1) - aIndexAt = myCombo->currentItem() + 1; - myCombo->insertItem(theValue, aIndexAt); - } - if (theSetCurrent) - setText(theValue); -} - -/*! - Adds items in combo box, sets item theCurrent as current -*/ -void SalomeApp_EntityEdit::insertList(const QStringList& theList, - const int theCurrent) -{ - if (myCombo) - myCombo->insertList(theList); - if (theCurrent >= 0 && theCurrent < (int)theList.count()) - setText(theList[theCurrent]); -} - -/*! - Adds item in combo box, sets it current if theSetCurrent is true -*/ -void SalomeApp_EntityEdit::insertItem(const int theValue, - bool theSetCurrent) -{ - if (myCombo) { - myCombo->insertItem(theValue); - } - if (theSetCurrent) - setText(QString::number(theValue)); -} - -/*! - Adds items in combo box, sets item theCurrent as current -*/ -void SalomeApp_EntityEdit::insertList(const TColStd_ListOfInteger& theList, - const int theCurrent) -{ - if (myCombo) - myCombo->insertList(theList); - - TColStd_ListIteratorOfListOfInteger aIter(theList); - for (unsigned i = 0; aIter.More(); aIter.Next(), i++) { - if (theCurrent == i) { - setText(QString::number(aIter.Value())); - break; - } - } -} - -/*! - Adds item in combo box, sets it current if theSetCurrent is true -*/ -void SalomeApp_EntityEdit::insertItem(const double theValue, - bool theSetCurrent) -{ - if (myCombo) { - myCombo->insertItem(theValue); - } - if (theSetCurrent) - setText(QString::number(theValue)); -} - -/*! - Adds items in combo box, sets item theCurrent as current -*/ -void SalomeApp_EntityEdit::insertList(const TColStd_ListOfReal& theList, - const int theCurrent) -{ - if (myCombo) - myCombo->insertList(theList); - - TColStd_ListIteratorOfListOfReal aIter(theList); - for (unsigned i = 0; aIter.More(); aIter.Next(), i++) { - if (theCurrent == i) { - setText(QString::number(aIter.Value())); - break; - } - } -} - -/*! - \return actual widget -*/ -QWidget* SalomeApp_EntityEdit::getControl() -{ - if (myEdit) - return myEdit; - else if (myCombo) - return myCombo; - else - return 0; -} - -/*! - redirect focus to corresponding widget -*/ -void SalomeApp_EntityEdit::setFocus() -{ - if (myEdit) { - myEdit->setFocus(); - //myEdit->selectAll(); - } - else if (myCombo && myCombo->editable()) { - myCombo->setFocus(); - //myCombo->lineEdit()->selectAll(); - } -} - -/*! - Sets validator for the control -*/ -void SalomeApp_EntityEdit::setValidator(const QValidator* theValidator) -{ - if (myEdit) - myEdit->setValidator(theValidator); - if (myCombo) - myCombo->setValidator(theValidator); -} - -/*! - Event filter for KeyPress event -*/ -void SalomeApp_EntityEdit::keyPressEvent( QKeyEvent * e) -{ - if ( (e->key() == Key_Enter || - e->key() == Key_Return ) ) - onApply(); - else if (e->key() == Key_Escape) - onCancel(); -} - -/*! - Called when item activated in combo box -*/ -void SalomeApp_EntityEdit::onComboActivated(const QString& theText) -{ - onTextChanged(theText); -} - -/*! - Slot, called when text changed in line edit -*/ -void SalomeApp_EntityEdit::onTextChanged(const QString& theText) -{ - if (myApplyBtn) - myApplyBtn->setEnabled(!(theText == myString)); - if (myCancelBtn) - myCancelBtn->setEnabled(!(theText == myString)); -} - -/*! - Slot, called when user presses Cancel button -*/ -void SalomeApp_EntityEdit::onCancel() -{ - setText(myString); - if (myApplyBtn) - myApplyBtn->setEnabled(false); - if (myCancelBtn) - myCancelBtn->setEnabled(false); - emit escapePressed(); -} - -/*! - Slot, called when user presses Apply button -*/ -void SalomeApp_EntityEdit::onApply() -{ - myString = getText(); - if (myApplyBtn) - myApplyBtn->setEnabled(false); - if (myCancelBtn) - myCancelBtn->setEnabled(false); - emit returnPressed(); -} - -/*! - Shows/hides buttons -*/ -void SalomeApp_EntityEdit::showButtons(bool show) -{ - if (myApplyBtn) - show ? myApplyBtn->show() : myApplyBtn->hide(); - if (myCancelBtn) - show ? myCancelBtn->show() : myCancelBtn->hide(); -} - -/*! - Enables/disables data duplication (for combo box) -*/ -void SalomeApp_EntityEdit::setDuplicatesEnabled(bool enabled) -{ - if (myCombo) - myCombo->setDuplicatesEnabled(enabled); -} diff --git a/src/SalomeApp/SalomeApp_ListView.h b/src/SalomeApp/SalomeApp_ListView.h deleted file mode 100644 index 3fa857bb0..000000000 --- a/src/SalomeApp/SalomeApp_ListView.h +++ /dev/null @@ -1,354 +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 -// -// SALOME SalomeApp -// -// File : SalomeApp_ListView.h -// Author : Vadim SANDLER -// Module : SALOME - -#ifndef SALOMEAPP_LISTVIEW_H -#define SALOMEAPP_LISTVIEW_H - -#include - -#include -#include -#include -#include -#include - -//VRV: porting on Qt 3.0.5 -#if QT_VERSION >= 0x030005 -#include -#endif -//VRV: porting on Qt 3.0.5 - -#include -#include - -#include - -// enumeration for ListView updating mode -enum UpdateType { - utCancel = -1, // cancel updating - utNone = 0, // needs no any update - utUpdateItem, // update one item - utUpdateParent, // update parent item too - utUpdateViewer, // update all viewer - utUpdateAll // strong update -}; - -class SalomeApp_ListViewItem; -class SalomeApp_EntityEdit; - -/*! - \class SalomeApp_ListView - parent class for Data Viewer and Properties Viewer -*/ -class SalomeApp_ListView : public QtxListView , public SUIT_PopupClient { - - Q_OBJECT - -public: -// constructor - SalomeApp_ListView(QWidget *parent); -// destructor - virtual ~SalomeApp_ListView(); - -// updates list viewer - virtual void updateViewer(); -// updtes currently selected item(s) - virtual void updateSelected(); - -// fills popup with items - virtual QString popupClientType() const; - virtual void contextMenuPopup( QPopupMenu* ); - -// setting editing of items availbale/not available - void enableEditing(bool theFlag); -// says if editing is enabled - bool isEnableEditing(); -// accepts user input by calling finishEditing(true) - void accept(); - -// clears view - void clear(); - -// event filter - bool eventFilter(QObject* object, QEvent* event) ; - -// gets current tooltip for list view -// returns valid rect in success - QRect tip(QPoint aPos, QString& aText, QRect& dspRect, QFont& dspFnt) const; - -protected: -// handler for resize event - void resizeEvent(QResizeEvent* e); -// handler for paint event - void viewportPaintEvent(QPaintEvent* e); -// finishes editing of entity - virtual UpdateType finishEditing(bool ok); - -// returns true if mouse events are enabled - bool isMouseEnabled(); -// enables/disables mouse events (excluding MouseMove) - void enableMouse(bool enable); - -protected slots: -// called when selection changed in list - virtual void onSelectionChanged(); -// called when user finishes in editing of item - void onEditOk(); -// called when user cancels item editing - void onEditCancel(); -// called when columns sizes are changed - void onHeaderSizeChange(int, int, int); - -protected: - SalomeApp_EntityEdit* myEdit; - SalomeApp_ListViewItem* myEditedItem; - bool myEditingEnabled; - bool myMouseEnabled; -}; - - -class SalomeApp_EditBox: public QLineEdit -{ - Q_OBJECT - -public: - SalomeApp_EditBox(QWidget* parent); - -protected: - void keyPressEvent(QKeyEvent* e); - -signals: - void escapePressed(); -}; - -class SalomeApp_ComboBox: public QComboBox -{ - Q_OBJECT - -public: - SalomeApp_ComboBox(bool rw, QWidget* parent = 0, const char* name = 0); - - int findItem(const QString& theText); - void insertItem(const QString& theValue, int theIndex = -1); - void insertList(const QStringList& theList); - void insertItem(const int theValue); - void insertList(const TColStd_ListOfInteger& theList); - void insertItem(const double theValue); - void insertList(const TColStd_ListOfReal& theList); -}; - -class SalomeApp_EntityEdit : public QWidget -{ - Q_OBJECT - -public: - // enum for edit control type - enum { - etLineEdit, // simple edit box - etComboBox, // non-editable combo box - etComboEdit // editable combo box - }; - // enum for value type - enum { - vtString, // string - vtInteger, // integer value - vtDouble // double value - }; - // enum for insertion order - enum { - atBottom, - atTop, - atBeforeCurrent, - atAfterCurrent - }; - // enum for edit box buttons (Apply = Cancel) - enum { - btApply = 0x0001, - btCancel = 0x0002 - }; - -public: - SalomeApp_EntityEdit( QWidget* parent, - int controlType = etLineEdit, - int valueType = vtString, - bool butApply = false, - bool butCancel = false); - ~SalomeApp_EntityEdit(); - - void finishEditing(); - void clear(); - QString getText(); - void setText(const QString& theText ); - void insertItem( const QString& theValue, - bool theSetCurrent = false, - int theOrder = atBottom ); - void insertList( const QStringList& theList, - const int theCurrent = -1 ); - void insertItem( const int theValue, - bool theSetCurrent = false ); - void insertList( const TColStd_ListOfInteger& theList, - const int theCurrent = -1 ); - void insertItem( const double theValue, - bool theSetCurrent = false ); - void insertList( const TColStd_ListOfReal& theList, - const int theCurrent = -1 ); - QWidget* getControl(); - void setFocus(); - void setValidator(const QValidator*); - void showButtons(bool show); - void setDuplicatesEnabled(bool enabled); - -protected: - void keyPressEvent ( QKeyEvent * e); - -private slots: - void onComboActivated(const QString&); - void onTextChanged(const QString&); - void onApply(); - void onCancel(); -signals: - void returnPressed(); - void escapePressed(); - -private: - // Widgets - SalomeApp_EditBox* myEdit; - SalomeApp_ComboBox* myCombo; - QToolButton* myApplyBtn; - QToolButton* myCancelBtn; - QString myString; -}; - -class SalomeApp_ListViewItem : public QListViewItem -{ -public: - SalomeApp_ListViewItem( SalomeApp_ListView* ); - SalomeApp_ListViewItem( SalomeApp_ListView*, - SalomeApp_ListViewItem* ); - SalomeApp_ListViewItem( SalomeApp_ListView*, - const QString&, - const bool = false ); - SalomeApp_ListViewItem( SalomeApp_ListView*, - const QString& theName, - const QString& theValue, - const bool = false ); - SalomeApp_ListViewItem( SalomeApp_ListViewItem* theParent, - const QString&, - const bool = false ); - SalomeApp_ListViewItem( SalomeApp_ListView*, - SalomeApp_ListViewItem*, - const QString&, - const bool = false ); - SalomeApp_ListViewItem( SalomeApp_ListViewItem*, - SalomeApp_ListViewItem*, - const QString&, - const bool = false); - SalomeApp_ListViewItem( SalomeApp_ListViewItem*, - const QString& theName, - const QString& theValue, - const bool = false); - SalomeApp_ListViewItem( SalomeApp_ListView*, - SalomeApp_ListViewItem*, - const QString& theName, - const QString& theValue, - const bool = false); - SalomeApp_ListViewItem( SalomeApp_ListViewItem*, - SalomeApp_ListViewItem*, - const QString&, - const QString&, - const bool = false); - ~SalomeApp_ListViewItem(); - - QString fullName(); - void openAllLevels(); - virtual void updateAllLevels(); - bool isEditable() const; - void setEditable(bool theEditable); - - // returns true if entitiy is accepted after editing - bool isAccepted() const; - // set entity accepted or not after editing - void setAccepted(bool theAccepted); - - // returns name of entity (as default it is text in first column) - virtual QString getName() const; - // sets name of entity (as default it is text in first column) - virtual UpdateType setName(const QString& theName); - - // returns value of entity (as default it is text in second column) - virtual QString getValue() const; - // sets value of entity (as default it is text in second column) - virtual UpdateType setValue(const QString& theValue); - - // creates control for editing and fills it with values - SalomeApp_EntityEdit* startEditing(); - // fills widget with initial values (list or single value) - virtual void fillWidgetWithValues(SalomeApp_EntityEdit* theWidget); - // finishes editing of entity - virtual UpdateType finishEditing(SalomeApp_EntityEdit* theWidget); - - // returns type of edit control (0 - edit box, 1 - combo box, 2 - editable combo box) - virtual int getEditingType(); - // sets type of edit control (0 - edit box, 1 - combo box, 2 - editable combo box) - virtual void setEditingType(const int); - // returns edited column - virtual int getEditedColumn(); - // returns type of edited value (string, int, double) - virtual int getValueType(); - // sets type of edited value (string, int, double) - virtual void setValueType(const int); - - // gets user type - virtual int getUserType(); - // sets user type - virtual void setUserType(const int); - - // returns buttons for editing widget - virtual int getButtons(); - // sets buttons for editing widget - virtual void setButtons(const int); - // returns text for tooltip - QString tipText(); - // calculates rectangle which should contain items tip - QRect tipRect(); - // calculates rect of item text in viewport coordinates - QRect textRect(const int column) const; - // calculates full rect of item data in viewport coordinates - QRect itemRect(const int column) const; - -protected: - // initialization - void init(); - -private: - bool myEditable; - bool myAccepted; - int myEditingType; - int myValueType; - int myButtons; - int myUserType; // user are welcome to put additional data here and use it in fillWidgetWithValues() -}; - - -#endif diff --git a/src/SalomeApp/SalomeApp_Module.cxx b/src/SalomeApp/SalomeApp_Module.cxx deleted file mode 100644 index 332441a65..000000000 --- a/src/SalomeApp/SalomeApp_Module.cxx +++ /dev/null @@ -1,155 +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: SalomeApp_Module.cxx -// Created: 10/25/2004 11:39:56 AM -// Author: Sergey LITONIN -// Copyright (C) CEA 2004 - -#include "SalomeApp_Module.h" -#include "SalomeApp_DataModel.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Study.h" - -#include "LightApp_Selection.h" -#include "LightApp_Operation.h" -#include "LightApp_Preferences.h" -//#include "LightApp_Displayer.h" - -#include "CAM_DataModel.h" - -#include "OB_Browser.h" - -#include -#include -#include -//#include - -#include -#include - -#include -//#include -//#include -//#include - -#include -#include - -//#include -//#include - -/*!Constructor.*/ -SalomeApp_Module::SalomeApp_Module( const QString& name ) -: LightApp_Module( name ) -{ -} - -/*!Destructor.*/ -SalomeApp_Module::~SalomeApp_Module() -{ -} - -/*!Gets application.*/ -SalomeApp_Application* SalomeApp_Module::getApp() const -{ - return (SalomeApp_Application*)application(); -} - -/*!Create new instance of data model and return it.*/ -CAM_DataModel* SalomeApp_Module::createDataModel() -{ - return new SalomeApp_DataModel(this); -} - -/*!Create and return instance of LightApp_Selection.*/ -LightApp_Selection* SalomeApp_Module::createSelection() const -{ - return LightApp_Module::createSelection(); -} - -/*! - Converts objects-containers to list of objects, those are contained - Other objects must be added without conversion - \param source - source list of objects - \param dest - list of converted objects -*/ -void SalomeApp_Module::extractContainers( const SALOME_ListIO& source, SALOME_ListIO& dest ) const -{ - SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - if( !study ) - { - dest = source; - return; - } - - SALOME_ListIteratorOfListIO anIt( source ); - for( ; anIt.More(); anIt.Next() ) - { - Handle( SALOME_InteractiveObject ) obj = anIt.Value(); - if( obj->hasEntry() ) - { - _PTR(SObject) SO = study->studyDS()->FindObjectID( obj->getEntry() ); - if( SO && QString( SO->GetID().c_str() ) == SO->GetFatherComponent()->GetID().c_str() ) - { //component is selected - _PTR(SComponent) SC( SO->GetFatherComponent() ); - _PTR(ChildIterator) anIter ( study->studyDS()->NewChildIterator( SC ) ); - anIter->InitEx( true ); - while( anIter->More() ) - { - _PTR(SObject) valSO ( anIter->Value() ); - _PTR(SObject) refSO; - if( !valSO->ReferencedObject( refSO ) ) - { - QString id = valSO->GetID().c_str(), - comp = SC->ComponentDataType().c_str(), - val = valSO->GetName().c_str(); - - Handle( SALOME_InteractiveObject ) new_obj = - new SALOME_InteractiveObject( id.latin1(), comp.latin1(), val.latin1() ); - dest.Append( new_obj ); - } - anIter->Next(); - } - continue; - } - } - dest.Append( obj ); - } -} - -/*! - * \brief Virtual public - * - * This method is called just before the study document is saved, so the module has a possibility - * to store visual parameters in AttributeParameter attribue(s) - */ -void SalomeApp_Module::storeVisualParameters(int savePoint) -{ -} - -/*! - * \brief Virtual public - * - * This method is called after the study document is opened, so the module has a possibility to restore - * visual parameters - */ -void SalomeApp_Module::restoreVisualParameters(int savePoint) -{ -} - diff --git a/src/SalomeApp/SalomeApp_Module.h b/src/SalomeApp/SalomeApp_Module.h deleted file mode 100644 index 07f4c0620..000000000 --- a/src/SalomeApp/SalomeApp_Module.h +++ /dev/null @@ -1,69 +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: SalomeApp_Module.h -// Created: 10/25/2004 11:33:06 AM -// Author: Sergey LITONIN -// Copyright (C) CEA 2004 - -#ifndef SALOMEAPP_MODULE_H -#define SALOMEAPP_MODULE_H - -#include "SalomeApp.h" - -#include - -class CAM_DataModel; -class SalomeApp_Application; -class LightApp_Operation; -class LightApp_Selection; -class SALOME_ListIO; -class QString; - -/*! - * \brief Base class for all salome modules -*/ -class SALOMEAPP_EXPORT SalomeApp_Module : public LightApp_Module -{ - Q_OBJECT - -public: - SalomeApp_Module( const QString& ); - virtual ~SalomeApp_Module(); - - /*! engineIOR() should be a pure virtual method, to avoid logical errors!\n - * Implementation in derived classes can return the following values:\n - * module`s engine IOR - means that this is a standard SALOME module with a CORBA engine - * \li "" (empty string) - means that this not correct SALOME module - */ - virtual QString engineIOR() const = 0; - - /*! Convenient shortcuts*/ - - SalomeApp_Application* getApp() const; - - virtual void storeVisualParameters(int savePoint); - virtual void restoreVisualParameters(int savePoint); - -protected: - virtual CAM_DataModel* createDataModel(); - virtual LightApp_Selection* createSelection() const; - virtual void extractContainers( const SALOME_ListIO&, SALOME_ListIO& ) const; -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_PyInterp.cxx b/src/SalomeApp/SalomeApp_PyInterp.cxx deleted file mode 100755 index 67606feae..000000000 --- a/src/SalomeApp/SalomeApp_PyInterp.cxx +++ /dev/null @@ -1,123 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SalomeApp_PyInterp.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "SalomeApp_PyInterp.h" - -#include -#include - -#include -#include - -#include "PyInterp_base.h" // this include must be first (see PyInterp_base.h)! - -#include -using namespace std; - -/*! - * constructor : multi Python interpreter, one per SALOME study. - * calls initialize method defined in base class, which calls virtual methods - * initstate & initcontext redefined here. - */ -SalomeApp_PyInterp::SalomeApp_PyInterp(): PythonConsole_PyInterp() -{ -} - -/*! - * Destructor. - */ -SalomeApp_PyInterp::~SalomeApp_PyInterp() -{ -} - -/*!\class SalomeApp_PyInterp - * EDF-CCAR - * When SALOME uses multi Python interpreter feature, - * Every study has its own interpreter and thread state (_tstate = Py_NewInterpreter()) - * This is fine because every study has its own modules (sys.modules) stdout and stderr - * BUT some Python modules must be imported only once. In multi interpreter context Python - * modules (*.py) are imported several times. - * The pyqt module must be imported only once because it registers classes in a C module. - * It's quite the same with omniorb modules (internals and generated with omniidl) - * This problem is handled with "shared modules" defined in salome_shared_modules.py - * These "shared modules" are imported only once and only copied in all the other interpreters - * BUT it's not the only problem. Every interpreter has its own __builtin__ module. That's fine - * but if we have copied some modules and imported others problems may arise with operations that - * are not allowed in restricted execution environment. So we must impose that all interpreters - * have identical __builtin__ module. - * That's all, for the moment ... - */ - - -bool SalomeApp_PyInterp::initContext() -{ - /*! - * The GIL is assumed to be held - * It is the caller responsability caller to acquire the GIL - * It will still be held on initContext output - */ - if ( !PythonConsole_PyInterp::initContext() ) - return false; - - // Import special module to change the import mechanism - PyObjWrapper m1( PyImport_ImportModule( "import_hook" ) ); - if ( !m1 ) - { - MESSAGE( "initContext: problem with import_hook import" ); - PyErr_Print(); - ASSERT( 0 ); - return false; - } - - // Call init_shared_modules to initialize the shared import mechanism for modules - //that must not be imported twice - PyObjWrapper m2( PyObject_CallMethod( m1, "init_shared_modules", "O", KERNEL_PYTHON::salome_shared_modules_module ) ); - if ( !m2 ) - { - MESSAGE( "initContext: problem with init_shared_modules call" ); - PyErr_Print(); - ASSERT( 0 ); - return false; - } - - return true; -} - -/*! - Do nothing - The initialization has been done in main - */ -void SalomeApp_PyInterp::init_python() -{ - MESSAGE("PyInterp_base::init_python"); - ASSERT(KERNEL_PYTHON::_gtstate); // initialisation in main - SCRUTE(KERNEL_PYTHON::_gtstate); - _gtstate=KERNEL_PYTHON::_gtstate; - _interp=KERNEL_PYTHON::_interp; -} - diff --git a/src/SalomeApp/SalomeApp_PyInterp.h b/src/SalomeApp/SalomeApp_PyInterp.h deleted file mode 100755 index a0db6377f..000000000 --- a/src/SalomeApp/SalomeApp_PyInterp.h +++ /dev/null @@ -1,46 +0,0 @@ -// SALOME SALOMEGUI : implementation of desktop and GUI kernel -// -// 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 : SalomeApp_PyInterp.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef _SalomeApp_PYINTERP_H_ -#define _SalomeApp_PYINTERP_H_ - -#include // this include must be first (see PyInterp_base.h)! - -class SalomeApp_PyInterp : public PythonConsole_PyInterp -{ -public: - SalomeApp_PyInterp(); - virtual ~SalomeApp_PyInterp(); - - virtual void init_python(); - -protected: - virtual bool initContext(); -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_Study.cxx b/src/SalomeApp/SalomeApp_Study.cxx deleted file mode 100644 index 1fb4d0bdd..000000000 --- a/src/SalomeApp/SalomeApp_Study.cxx +++ /dev/null @@ -1,740 +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_Study.h" - -#include "SalomeApp_Module.h" -#include "SalomeApp_DataModel.h" -#include "SalomeApp_DataObject.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_Engine_i.hxx" -#include "SalomeApp_VisualState.h" - -#include "LightApp_RootObject.h" - -#include - -#include - -#include -#include -#include - -#include "utilities.h" -#include -#include -#include - -#include - -#include "SALOMEDS_Tool.hxx" - -#include "SALOMEDSClient_ClientFactory.hxx" -#include "SALOMEDSClient_IParameters.hxx" - -#include -#include CORBA_SERVER_HEADER(SALOME_Exception) - -using namespace std; - -/*! - Constructor. -*/ -SalomeApp_Study::SalomeApp_Study( SUIT_Application* app ) -: LightApp_Study( app ) -{ -} - -/*! - Destructor. -*/ -SalomeApp_Study::~SalomeApp_Study() -{ -} - -/*! - Gets study id. -*/ -int SalomeApp_Study::id() const -{ - int id = -1; - if ( myStudyDS ) - id = studyDS()->StudyId(); - return id; -} - -/*! - Gets studyDS pointer. -*/ -_PTR(Study) SalomeApp_Study::studyDS() const -{ - return myStudyDS; -} - -/*! - Create document. -*/ -void SalomeApp_Study::createDocument() -{ - MESSAGE( "openDocument" ); - - // initialize myStudyDS, read HDF file - QString aName = newStudyName(); - _PTR(Study) study ( SalomeApp_Application::studyMgr()->NewStudy( aName.latin1() ) ); - if ( !study ) - return; - - setStudyDS( study ); - setStudyName( aName ); - - // create myRoot - setRoot( new LightApp_RootObject( this ) ); - - CAM_Study::createDocument(); - emit created( this ); -} - -/*! - Opens document - \param theFileName - name of file -*/ -bool SalomeApp_Study::openDocument( const QString& theFileName ) -{ - MESSAGE( "openDocument" ); - - // initialize myStudyDS, read HDF file - _PTR(Study) study ( SalomeApp_Application::studyMgr()->Open( (char*) theFileName.latin1() ) ); - if ( !study ) - return false; - - setStudyDS( study ); - - setRoot( new LightApp_RootObject( this ) ); // create myRoot - - // update loaded data models: call open() and update() on them. - ModelList dm_s; - dataModels( dm_s ); - for ( ModelListIterator it( dm_s ); it.current(); ++it ) - openDataModel( studyName(), it.current() ); - - // this will build a SUIT_DataObject-s tree under myRoot member field - // passing "false" in order NOT to rebuild existing data models' trees - it was done in previous step - // but tree that corresponds to not-loaded data models will be updated any way. - ((SalomeApp_Application*)application())->updateObjectBrowser( false ); - - bool res = CAM_Study::openDocument( theFileName ); - - emit opened( this ); - study->IsSaved(true); - - bool restore = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", true ); - if ( restore ) { - std::vector savePoints = getSavePoints(); - if ( savePoints.size() > 0 ) - SalomeApp_VisualState( (SalomeApp_Application*)application() ).restoreState( savePoints[savePoints.size()-1] ); - } - - return res; -} - -/*! - Connects GUI study to SALOMEDS one already loaded into StudyManager - \param theStudyName - name of study -*/ -bool SalomeApp_Study::loadDocument( const QString& theStudyName ) -{ - MESSAGE( "loadDocument" ); - - // obtain myStudyDS from StudyManager - _PTR(Study) study ( SalomeApp_Application::studyMgr()->GetStudyByName( (char*) theStudyName.latin1() ) ); - if ( !study ) - return false; - - setStudyDS( study ); - - setRoot( new LightApp_RootObject( this ) ); // create myRoot - - //SRN: BugID IPAL9021, put there the same code as in a method openDocument - - // update loaded data models: call open() and update() on them. - ModelList dm_s; - dataModels( dm_s ); - - for ( ModelListIterator it( dm_s ); it.current(); ++it ) - openDataModel( studyName(), it.current() ); - - // this will build a SUIT_DataObject-s tree under myRoot member field - // passing "false" in order NOT to rebuild existing data models' trees - it was done in previous step - // but tree that corresponds to not-loaded data models will be updated any way. - ((SalomeApp_Application*)application())->updateObjectBrowser( false ); - - bool res = CAM_Study::openDocument( theStudyName ); - emit opened( this ); - - bool restore = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", true ); - if ( restore ) { - std::vector savePoints = getSavePoints(); - if ( savePoints.size() > 0 ) - SalomeApp_VisualState( (SalomeApp_Application*)application() ).restoreState( savePoints[savePoints.size()-1] ); - } - - //SRN: BugID IPAL9021: End - - return res; -} - -/*! - Saves document - \param theFileName - name of file -*/ -bool SalomeApp_Study::saveDocumentAs( const QString& theFileName ) -{ - bool store = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", false ); - if ( store ) - SalomeApp_VisualState( (SalomeApp_Application*)application() ).storeState(); - - ModelList list; dataModels( list ); - - SalomeApp_DataModel* aModel = (SalomeApp_DataModel*)list.first(); - QStringList listOfFiles; - for ( ; aModel; aModel = (SalomeApp_DataModel*)list.next() ) { - listOfFiles.clear(); - aModel->saveAs( theFileName, this, listOfFiles ); - if ( !listOfFiles.isEmpty() ) - saveModuleData(aModel->module()->name(), listOfFiles); - } - - // save SALOMEDS document - SUIT_ResourceMgr* resMgr = application()->resourceMgr(); - if( !resMgr ) - return false; - - bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ); - bool isAscii = resMgr->booleanValue( "Study", "ascii_file", false ); - bool res = (isAscii ? - SalomeApp_Application::studyMgr()->SaveAsASCII( theFileName.latin1(), studyDS(), isMultiFile ) : - SalomeApp_Application::studyMgr()->SaveAs ( theFileName.latin1(), studyDS(), isMultiFile )) - && CAM_Study::saveDocumentAs( theFileName ); - - res = res && saveStudyData(theFileName); - - if ( res ) - emit saved( this ); - - return res; -} - -/*! - Saves previously opened document -*/ -bool SalomeApp_Study::saveDocument() -{ - bool store = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", true ); - if ( store ) - SalomeApp_VisualState( (SalomeApp_Application*)application() ).storeState(); - - ModelList list; dataModels( list ); - - SalomeApp_DataModel* aModel = (SalomeApp_DataModel*)list.first(); - QStringList listOfFiles; - for ( ; aModel; aModel = (SalomeApp_DataModel*)list.next() ) { - listOfFiles.clear(); - aModel->save(listOfFiles); - if ( !listOfFiles.isEmpty() ) - saveModuleData(aModel->module()->name(), listOfFiles); - } - - // save SALOMEDS document - SUIT_ResourceMgr* resMgr = application()->resourceMgr(); - if( !resMgr ) - return false; - - bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ); - bool isAscii = resMgr->booleanValue( "Study", "ascii_file", false ); - bool res = (isAscii ? - SalomeApp_Application::studyMgr()->SaveASCII( studyDS(), isMultiFile ) : - SalomeApp_Application::studyMgr()->Save ( studyDS(), isMultiFile )) && CAM_Study::saveDocument(); - - res = res && saveStudyData(studyName()); - if ( res ) - emit saved( this ); - - return res; -} - -/*! - Closes document -*/ -void SalomeApp_Study::closeDocument(bool permanently) -{ - LightApp_Study::closeDocument(permanently); - - // close SALOMEDS document - _PTR(Study) studyPtr = studyDS(); - if ( studyPtr ) - { - if(permanently) { - SalomeApp_Application::studyMgr()->Close( studyPtr ); - } - SALOMEDSClient_Study* aStudy = 0; - setStudyDS( _PTR(Study)(aStudy) ); - } -} - -/*! - \return true, if study is modified in comparison with last open/save -*/ -bool SalomeApp_Study::isModified() const -{ - bool isAnyChanged = studyDS() && studyDS()->IsModified(); - if (!isAnyChanged) - isAnyChanged = LightApp_Study::isModified(); - - return isAnyChanged; -} - -/*! - \return if data model is saved -*/ -bool SalomeApp_Study::isSaved() const -{ - bool isAllSaved = studyDS() && studyDS()->GetPersistentReference().size(); - if (!isAllSaved) - isAllSaved = LightApp_Study::isSaved(); - - return isAllSaved; -} - -/*! - Saves data of module - \param theModuleName - name of module - \param theListOfFiles - list of files to be saved -*/ -void SalomeApp_Study::saveModuleData( QString theModuleName, QStringList theListOfFiles ) -{ - int aNb = theListOfFiles.count(); - if ( aNb == 0 ) - return; - - std::vector aListOfFiles ( aNb ); - int anIndex = 0; - for ( QStringList::Iterator it = theListOfFiles.begin(); it != theListOfFiles.end(); ++it ) { - if ( (*it).isEmpty() ) - continue; - aListOfFiles[anIndex] = (*it).latin1(); - anIndex++; - } - SetListOfFiles(theModuleName, aListOfFiles); -} - -/*! - Loads data of module - \param theModuleName - name of module - \param theListOfFiles - list of files to be loaded -*/ -void SalomeApp_Study::openModuleData( QString theModuleName, QStringList& theListOfFiles ) -{ - std::vector aListOfFiles = GetListOfFiles( theModuleName ); - - int i, aLength = aListOfFiles.size() - 1; - if ( aLength < 0 ) - return; - - //Get a temporary directory for saved a file - theListOfFiles.append(aListOfFiles[0].c_str()); - - for(i = 0; i < aLength; i++) - theListOfFiles.append(aListOfFiles[i+1].c_str()); -} - -/*! - Saves data from study -*/ -bool SalomeApp_Study::saveStudyData( const QString& theFileName ) -{ - ModelList list; dataModels( list ); - SalomeApp_DataModel* aModel = (SalomeApp_DataModel*)list.first(); - std::vector listOfFiles(0); - for ( ; aModel; aModel = (SalomeApp_DataModel*)list.next() ) - SetListOfFiles(aModel->module()->name(), listOfFiles); - return true; -} - -/*! - Loads data for study -*/ -bool SalomeApp_Study::openStudyData( const QString& theFileName ) -{ - return true; -} - -/*! - Set studyDS. -*/ -void SalomeApp_Study::setStudyDS( const _PTR(Study)& s ) -{ - myStudyDS = s; -} - -/*! - Insert data model. -*/ -void SalomeApp_Study::dataModelInserted (const CAM_DataModel* dm) -{ - MESSAGE("SalomeApp_Study::dataModelInserted() : module name() = " << dm->module()->name()); - - CAM_Study::dataModelInserted(dm); - - // addComponent(dm); -} - -/*! - Create SComponent for module, using default engine (CORBAless) -*/ -void SalomeApp_Study::addComponent(const CAM_DataModel* dm) -{ - SalomeApp_Module* aModule = dynamic_cast( dm->module() ); - // 1. aModule == 0 means that this is a light module (no CORBA enigine) - if (!aModule) { - // Check SComponent existance - _PTR(Study) aStudy = studyDS(); - if (!aStudy) - return; - _PTR(SComponent) aComp = aStudy->FindComponent(dm->module()->name()); - if (!aComp) { - // Create SComponent - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); - aComp = aBuilder->NewComponent(dm->module()->name()); - aBuilder->SetName(aComp, dm->module()->moduleName().latin1()); - QString anIconName = dm->module()->iconName(); - if (!anIconName.isEmpty()) { - _PTR(AttributePixMap) anAttr = aBuilder->FindOrCreateAttribute(aComp, "AttributePixMap"); - if (anAttr) - anAttr->SetPixMap(anIconName.latin1()); - } - // Set default engine IOR - aBuilder->DefineComponentInstance(aComp, SalomeApp_Application::defaultEngineIOR().latin1()); - //SalomeApp_DataModel::BuildTree( aComp, root(), this, /*skipExisitng=*/true ); - SalomeApp_DataModel::synchronize( aComp, this ); - } - } -} - -/*! - Open data model -*/ -bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm ) -{ - if (!dm) - return false; - - // SalomeApp_DataModel* aDM = (SalomeApp_DataModel*)(dm); - SalomeApp_Module* aModule = dynamic_cast( dm->module() ); - _PTR(Study) aStudy = studyDS(); // shared_ptr cannot be used here - _PTR(SComponent) aSComp; - QString anEngine; - // 1. aModule == 0 means that this is a light module (no CORBA enigine) - if (!aModule) { - anEngine = SalomeApp_Application::defaultEngineIOR(); - aSComp = aStudy->FindComponent(dm->module()->name()); - } - else { - SalomeApp_DataModel* aDM = dynamic_cast( dm ); - if ( aDM ) { - QString anId = aDM->getRootEntry( this ); - if ( anId.isEmpty() ) - return true; // Probably nothing to load - anEngine = aDM->getModule()->engineIOR(); - if ( anEngine.isEmpty() ) - return false; - aSComp = aStudy->FindComponentID( std::string( anId.latin1() ) ); - } - } - if ( aSComp ) { - _PTR(StudyBuilder) aBuilder( aStudy->NewBuilder() ); - if ( aBuilder ) { - try { - aBuilder->LoadWith( aSComp, std::string( anEngine.latin1() ) ); - } - catch( const SALOME::SALOME_Exception& ) { - // Oops, something went wrong while loading -> return an error - return false; - } - // Something has been read -> create data model tree - //SalomeApp_DataModel* aDM = dynamic_cast( dm ); - // aDM->buildTree( aSComp, 0, this ); - } - } else { - // Don't return false here, for there might be no data - // for a given component in the study yet - } - QStringList listOfFiles; - openModuleData(dm->module()->name(), listOfFiles); - if (dm && dm->open(studyName, this, listOfFiles)) { - // Remove the files and temporary directory, created - // for this module by LightApp_Engine_i::Load() - bool isMultiFile = false; // TODO: decide, how to access this parameter - RemoveTemporaryFiles( dm->module()->name(), isMultiFile ); - - // Something has been read -> create data model tree - LightApp_DataModel* aDM = dynamic_cast( dm ); - if ( aDM ) - aDM->update(NULL, this); - return true; - } - return false; -} - -/*! - Create new study name. -*/ -QString SalomeApp_Study::newStudyName() const -{ - std::vector studies = SalomeApp_Application::studyMgr()->GetOpenStudies(); - QString prefix( "Study%1" ), newName, curName; - int i = 1, j, n = studies.size(); - while ( newName.isEmpty() ){ - curName = prefix.arg( i ); - for ( j = 0 ; j < n; j++ ){ - if ( !strcmp( studies[j].c_str(), curName.latin1() ) ) - break; - } - if ( j == n ) - newName = curName; - else - i++; - } - return newName; -} - -/*! - \return list of files used by module: to be used by CORBAless modules - \param theModuleName - name of module -*/ -std::vector SalomeApp_Study::GetListOfFiles( const char* theModuleName ) const -{ - SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance(); - if (aDefaultEngine) - return aDefaultEngine->GetListOfFiles(id(), theModuleName); - - std::vector aListOfFiles; - return aListOfFiles; -} - -/*! - Sets list of files used by module: to be used by CORBAless modules - \param theModuleName - name of module - \param theListOfFiles - list of files -*/ -void SalomeApp_Study::SetListOfFiles ( const char* theModuleName, - const std::vector theListOfFiles ) -{ - SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance(); - if (aDefaultEngine) - aDefaultEngine->SetListOfFiles(theListOfFiles, id(), theModuleName); -} - -/*! - \return temporary directory for saving files of modules -*/ -std::string SalomeApp_Study::GetTmpDir ( const char* theURL, const bool isMultiFile ) -{ - std::string anURLDir = SALOMEDS_Tool::GetDirFromPath(theURL); - std::string aTmpDir = isMultiFile ? anURLDir : SALOMEDS_Tool::GetTmpDir(); - return aTmpDir; -} - -/*! - Removes temporary files -*/ -void SalomeApp_Study::RemoveTemporaryFiles ( const char* theModuleName, const bool isMultiFile ) const -{ - if (isMultiFile) - return; - - std::vector aListOfFiles = GetListOfFiles( theModuleName ); - if (aListOfFiles.size() > 0) { - std::string aTmpDir = aListOfFiles[0]; - - const int n = aListOfFiles.size() - 1; - SALOMEDS::ListOfFileNames_var aSeq = new SALOMEDS::ListOfFileNames; - aSeq->length(n); - for (int i = 0; i < n; i++) - aSeq[i] = CORBA::string_dup(aListOfFiles[i + 1].c_str()); - - SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.c_str(), aSeq.in(), true); - } -} - -/*! - Deletes all references to object - \param obj - object -*/ -void SalomeApp_Study::deleteReferencesTo( _PTR( SObject ) obj ) -{ - _PTR(StudyBuilder) sb = studyDS()->NewBuilder(); - std::vector<_PTR(SObject)> aRefs = studyDS()->FindDependances( obj ); - for( int i=0, n=aRefs.size(); iGetFatherComponent()->ComponentDataType()==obj->GetFatherComponent()->ComponentDataType() ) - { - sb->RemoveReference( o ); - sb->RemoveObjectWithChildren( o ); - } - } -} - -/*! - \return real entry by entry of reference - \param entry - entry of reference object -*/ -QString SalomeApp_Study::referencedToEntry( const QString& entry ) const -{ - _PTR(SObject) obj = studyDS()->FindObjectID( entry.latin1() ); - _PTR(SObject) refobj; - - if( obj && obj->ReferencedObject( refobj ) ) - return refobj->GetID().c_str(); - return LightApp_Study::referencedToEntry( entry ); -} - -/*! - \return component data type for entry -*/ -QString SalomeApp_Study::componentDataType( const QString& entry ) const -{ - _PTR(SObject) obj( studyDS()->FindObjectID( entry.latin1() ) ); - if ( !obj ) - return LightApp_Study::componentDataType( entry ); - return obj->GetFatherComponent()->ComponentDataType().c_str(); -} - -/*! - \return true if entry corresponds to component -*/ -bool SalomeApp_Study::isComponent( const QString& entry ) const -{ - _PTR(SObject) obj( studyDS()->FindObjectID( entry.latin1() ) ); - return obj && QString( obj->GetID().c_str() ) == obj->GetFatherComponent()->GetID().c_str(); -} - -/*! - \return entries of object children -*/ -void SalomeApp_Study::children( const QString& entry, QStringList& child_entries ) const -{ - _PTR(SObject) SO = studyDS()->FindObjectID( entry.latin1() ); - _PTR(ChildIterator) anIter ( studyDS()->NewChildIterator( SO ) ); - anIter->InitEx( true ); - while( anIter->More() ) - { - _PTR(SObject) val( anIter->Value() ); - child_entries.append( val->GetID().c_str() ); - anIter->Next(); - } -} - -/*! - Fills list with components names - \param comp - list to be filled -*/ -void SalomeApp_Study::components( QStringList& comps ) const -{ - for( _PTR(SComponentIterator) it ( studyDS()->NewComponentIterator() ); it->More(); it->Next() ) - { - _PTR(SComponent) aComponent ( it->Value() ); - if( aComponent && aComponent->ComponentDataType() == "Interface Applicative" ) - continue; // skip the magic "Interface Applicative" component - comps.append( aComponent->ComponentDataType().c_str() ); - } -} - -/*! - \return a list of saved points' IDs -*/ -std::vector SalomeApp_Study::getSavePoints() -{ - std::vector v; - - _PTR(SObject) so = studyDS()->FindComponent("Interface Applicative"); - if(!so) return v; - - _PTR(StudyBuilder) builder = studyDS()->NewBuilder(); - _PTR(ChildIterator) anIter ( studyDS()->NewChildIterator( so ) ); - for(; anIter->More(); anIter->Next()) - { - _PTR(SObject) val( anIter->Value() ); - _PTR(GenericAttribute) genAttr; - if(builder->FindAttribute(val, genAttr, "AttributeParameter")) v.push_back(val->Tag()); - } - - return v; -} - -/*! - Removes a given save point -*/ -void SalomeApp_Study::removeSavePoint(int savePoint) -{ - if(savePoint <= 0) return; - _PTR(AttributeParameter) AP = studyDS()->GetCommonParameters(getVisualComponentName(), savePoint); - _PTR(SObject) so = AP->GetSObject(); - _PTR(StudyBuilder) builder = studyDS()->NewBuilder(); - builder->RemoveObjectWithChildren(so); -} - -/*! - \return a name of save point -*/ -QString SalomeApp_Study::getNameOfSavePoint(int savePoint) -{ - _PTR(AttributeParameter) AP = studyDS()->GetCommonParameters(getVisualComponentName(), savePoint); - _PTR(IParameters) ip = ClientFactory::getIParameters(AP); - return ip->getProperty("AP_SAVEPOINT_NAME").c_str(); -} - -/*! - Sets a name of save point -*/ -void SalomeApp_Study::setNameOfSavePoint(int savePoint, const QString& nameOfSavePoint) -{ - _PTR(AttributeParameter) AP = studyDS()->GetCommonParameters(getVisualComponentName(), savePoint); - _PTR(IParameters) ip = ClientFactory::getIParameters(AP); - ip->setProperty("AP_SAVEPOINT_NAME", nameOfSavePoint.latin1()); -} - -/*! - \return a name of the component where visual parameters are stored -*/ -std::string SalomeApp_Study::getVisualComponentName() -{ - return "Interface Applicative"; -} - -/*! - Slot: called on change of a root of a data model. Redefined from CAM_Study -*/ -void SalomeApp_Study::updateModelRoot( const CAM_DataModel* dm ) -{ - LightApp_Study::updateModelRoot( dm ); - - // calling updateSavePointDataObjects in order to set correct order of "Gui states" object - // it must always be the last one. - ((SalomeApp_Application*)application())->updateSavePointDataObjects( this ); -} diff --git a/src/SalomeApp/SalomeApp_Study.h b/src/SalomeApp/SalomeApp_Study.h deleted file mode 100644 index ef5c127fd..000000000 --- a/src/SalomeApp/SalomeApp_Study.h +++ /dev/null @@ -1,106 +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 -// -#ifndef SALOMEAPP_STUDY_H -#define SALOMEAPP_STUDY_H - -#include "SalomeApp.h" - -#include -#include - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include "SALOMEDSClient.hxx" - -class SALOMEAPP_EXPORT SalomeApp_Study : public LightApp_Study -{ - Q_OBJECT - -public: - SalomeApp_Study( SUIT_Application* ); - virtual ~SalomeApp_Study(); - - virtual int id() const; - - virtual void createDocument(); - virtual bool openDocument( const QString& ); - virtual bool loadDocument( const QString& ); - - virtual bool saveDocument(); - virtual bool saveDocumentAs( const QString& ); - - virtual void closeDocument(bool permanently = true); - - virtual bool isSaved() const; - virtual bool isModified() const; - - virtual void addComponent ( const CAM_DataModel* dm); - - _PTR(Study) studyDS() const; - - virtual std::string GetTmpDir ( const char* theURL, const bool isMultiFile); - - // to delete all references to object, whose have the same component - void deleteReferencesTo( _PTR( SObject ) ); - - virtual QString componentDataType( const QString& ) const; - virtual QString referencedToEntry( const QString& ) const; - virtual bool isComponent( const QString& ) const; - virtual void children( const QString&, QStringList& ) const; - virtual void components( QStringList& ) const; - - std::vector getSavePoints(); - void removeSavePoint(int savePoint); - QString getNameOfSavePoint(int savePoint); - void setNameOfSavePoint(int savePoint, const QString& nameOfSavePoint); - virtual std::string getVisualComponentName(); - -protected: - virtual void saveModuleData ( QString theModuleName, QStringList theListOfFiles ); - virtual void openModuleData ( QString theModuleName, QStringList& theListOfFiles ); - virtual bool saveStudyData ( const QString& theFileName ); - virtual bool openStudyData ( const QString& theFileName ); - - virtual std::vector GetListOfFiles ( const char* theModuleName ) const; - virtual void SetListOfFiles ( const char* theModuleName, - const std::vector theListOfFiles); - virtual void RemoveTemporaryFiles ( const char* theModuleName, const bool isMultiFile) const; - -protected: - virtual void dataModelInserted( const CAM_DataModel* ); - virtual bool openDataModel( const QString&, CAM_DataModel* ); - void setStudyDS(const _PTR(Study)& s ); - -protected slots: - virtual void updateModelRoot( const CAM_DataModel* ); - -private: - QString newStudyName() const; - -private: - _PTR(Study) myStudyDS; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx b/src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx deleted file mode 100644 index 830536676..000000000 --- a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx +++ /dev/null @@ -1,368 +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 -// -// SALOME SalomeApp -// -// File : SalomeApp_StudyPropertiesDlg.cxx -// Author : Sergey ANIKIN -// Module : SALOME -// $Header$ - -#include "SalomeApp_StudyPropertiesDlg.h" -#include "SalomeApp_ListView.h" -#include "SalomeApp_Study.h" - -#include "SUIT_Session.h" -#include -#include - -// OCCT Includes -#include -#include - -// CORBA Headers -#include -#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) - -// QT Includes -#include -#include - -using namespace std; - -#define DEFAULT_MARGIN 11 -#define DEFAULT_SPACING 6 -#define SPACER_SIZE 5 -#define MIN_LIST_WIDTH 300 -#define MIN_LIST_HEIGHT 150 - -class SalomeApp_PropItem : public SalomeApp_ListViewItem -{ -public: - /*! constructor */ - SalomeApp_PropItem(SalomeApp_ListView* parent, - const QString theName, - const bool theEditable, - const int theUserType) : - SalomeApp_ListViewItem( parent, theName, theEditable ) - { - setUserType(theUserType); - } - /*! constructor */ - SalomeApp_PropItem(SalomeApp_ListView* parent, - SalomeApp_ListViewItem* after, - const QString theName, - const bool theEditable, - const int theUserType) : - SalomeApp_ListViewItem( parent, after, theName, theEditable ) - { - setUserType(theUserType); - } - /*! fills widget with initial values (list or single value)*/ - void fillWidgetWithValues( SalomeApp_EntityEdit* theWidget ) - { - QStringList list; - switch(getUserType()) { - //case SalomeApp_StudyPropertiesDlg::prpModeId: - // { - // list << SalomeApp_StudyPropertiesDlg::tr("PRP_MODE_FROM_SCRATCH") << - // SalomeApp_StudyPropertiesDlg::tr("PRP_MODE_FROM_COPYFROM"); - // theWidget->insertList(list); - // break; - // } - case SalomeApp_StudyPropertiesDlg::prpLockedId: - { - list << SalomeApp_StudyPropertiesDlg::tr( "PRP_NO" ) << SalomeApp_StudyPropertiesDlg::tr( "PRP_YES" ); - theWidget->insertList(list, getValue() == SalomeApp_StudyPropertiesDlg::tr( "PRP_NO" ) ? 0 : 1 ); - break; - } - case SalomeApp_StudyPropertiesDlg::prpModificationsId: - { - SalomeApp_Study* study = - dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - if (study) { - _PTR(Study) studyDoc = study->studyDS(); - _PTR(AttributeStudyProperties) propAttr; - if ( studyDoc ) { - propAttr = studyDoc->GetProperties(); - if ( propAttr ) { - std::vector aUsers; - std::vector aMins, aHours, aDays, aMonths, aYears; - propAttr->GetModificationsList(aUsers, aMins, aHours, aDays, aMonths, aYears, false); - int aCnt = aUsers.size(); - for ( int i = 0; i < aCnt; i++ ) { - QString val; - val.sprintf("%2.2d/%2.2d/%2d %2.2d:%2.2d", - aDays [i], - aMonths[i], - aYears [i], - aHours [i], - aMins [i]); - val = val + " : " + QString( aUsers[i].c_str() ); - list.prepend(val); - } - theWidget->setDuplicatesEnabled(true); - theWidget->insertList(list); - } - } - } - break; - } - default: - { - SalomeApp_ListViewItem::fillWidgetWithValues(theWidget); - break; - } - } - } - /*! finishes editing of entity */ - virtual UpdateType finishEditing( SalomeApp_EntityEdit* theWidget ) { - if ( getUserType() == SalomeApp_StudyPropertiesDlg::prpModificationsId ) - return utCancel; - else - return SalomeApp_ListViewItem::finishEditing(theWidget); - } -}; - -/*!Constructor. Initialize study properties dialog.*/ -SalomeApp_StudyPropertiesDlg::SalomeApp_StudyPropertiesDlg(QWidget* parent) - : QDialog(parent, "", TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - myChanged( false ) -{ - setCaption(tr("TLT_STUDY_PROPERTIES")); - setSizeGripEnabled( true ); - - clearWFlags(Qt::WStyle_ContextHelp); - - QGridLayout* mainLayout = new QGridLayout(this); - mainLayout->setMargin(DEFAULT_MARGIN); - mainLayout->setSpacing(DEFAULT_SPACING); - - myPropList = new SalomeApp_ListView(this); - myPropList->addColumn(""); - myPropList->addColumn(""); - myPropList->enableEditing(TRUE); - myPropList->setMinimumSize(MIN_LIST_WIDTH, MIN_LIST_HEIGHT); - mainLayout->addMultiCellWidget(myPropList, 0, 0, 0, 2); - - myOKBtn = new QPushButton(tr("BUT_OK"), this); - mainLayout->addWidget(myOKBtn, 1, 0); - - myCancelBtn = new QPushButton(tr("BUT_CANCEL"), this); - mainLayout->addWidget(myCancelBtn, 1, 2); - - QSpacerItem* spacer1 = - new QSpacerItem(SPACER_SIZE, SPACER_SIZE, QSizePolicy::Expanding, QSizePolicy::Minimum); - mainLayout->addItem(spacer1, 1, 1); - - // Display study properties - SalomeApp_Study* study = - dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - if (study) - myStudyDoc = study->studyDS(); - - initData(); - - connect(myOKBtn, SIGNAL(clicked()), this, SLOT(onOK())); - connect(myCancelBtn, SIGNAL(clicked()), this, SLOT(reject())); -} - -/*! - Destructor. -*/ -SalomeApp_StudyPropertiesDlg::~SalomeApp_StudyPropertiesDlg() -{ -} - -/*! - Data initializetion for dialog.(Study author's name, date of creation etc.) -*/ -void SalomeApp_StudyPropertiesDlg::initData() -{ - bool hasData = myStudyDoc; - _PTR(AttributeStudyProperties) propAttr; - if (hasData) - propAttr = myStudyDoc->GetProperties(); - hasData = hasData && propAttr; - - // Study author's name - SalomeApp_PropItem* item = new SalomeApp_PropItem(myPropList, tr("PRP_AUTHOR")+":", true, prpAuthorId); - if (hasData) - item->setValue(propAttr->GetUserName().c_str()); - - // Date of creation - item = new SalomeApp_PropItem(myPropList, item, tr("PRP_DATE")+":", false, prpDateId); - if (hasData) { - int minutes, hours, day, month, year; - if (propAttr->GetCreationDate(minutes, hours, day, month, year)) { - QString strDate; - strDate.sprintf("%2.2d/%2.2d/%2d %2.2d:%2.2d", day, month, year, hours, minutes); - item->setValue(strDate); - } - } - - // Creation mode -// item = new SalomeApp_PropItem(myPropList, item, tr("PRP_MODE")+":", true, prpModeId); -// item->setEditingType( SalomeApp_EntityEdit::etComboBox); -// if (hasData) item->setValue(propAttr->GetCreationMode()); - - // Locked or not - item = new SalomeApp_PropItem(myPropList, item, tr("PRP_LOCKED")+":", true, prpLockedId); - item->setEditingType( SalomeApp_EntityEdit::etComboBox); - if ( hasData ) - item->setValue( tr( propAttr->IsLocked() ? "PRP_YES" : "PRP_NO" ) ); - - // Saved or not - item = new SalomeApp_PropItem(myPropList, item, tr("PRP_MODIFIED")+":", false, prpSavedId); - bool isModified = false; - SalomeApp_Study* study = dynamic_cast - (SUIT_Session::session()->activeApplication()->activeStudy()); - if (study) { - isModified = study->isModified(); - if (hasData) { - if (propAttr->IsModified() != isModified) { - propAttr->SetModified((int)isModified); - } - } - } - if (hasData) { - if (propAttr->IsModified()) - item->setValue( tr( "PRP_YES" ) ); - else - item->setValue( tr( "PRP_NO" ) ); - } - - // Modifications list - item = new SalomeApp_PropItem(myPropList, item, tr("PRP_MODIFICATIONS")+":", true, prpModificationsId); - item->setEditingType( SalomeApp_EntityEdit::etComboBox); - if (hasData) { - std::vector aUsers; - std::vector aMins, aHours, aDays, aMonths, aYears; - propAttr->GetModificationsList(aUsers, aMins, aHours, aDays, aMonths, aYears, false); - int aLast = aUsers.size()-1; - if (aLast >= 0) { - QString val; - val.sprintf("%2.2d/%2.2d/%2d %2.2d:%2.2d", - aDays [aLast], - aMonths[aLast], - aYears [aLast], - aHours [aLast], - aMins [aLast]); - val = val + " : " + QString(aUsers[aUsers.size()-1].c_str()); - item->setValue(val); - } - } - - myOKBtn->setEnabled(hasData); -} - -/*! - accept data. Return true. -*/ -bool SalomeApp_StudyPropertiesDlg::acceptData() -{ - return TRUE; -} - -/*! - Fill properties attributes. -*/ -void SalomeApp_StudyPropertiesDlg::onOK() -{ - myPropList->accept(); - - if (acceptData()) { - _PTR(AttributeStudyProperties) propAttr = myStudyDoc->GetProperties(); - //myChanged = propChanged(); - if ( propAttr /*&& myChanged*/ ) { - QListViewItemIterator it( myPropList ); - // iterate through all items of the listview - for ( ; it.current(); ++it ) { - SalomeApp_PropItem* item = (SalomeApp_PropItem*)(it.current()); - switch (item->getUserType()) { - case prpAuthorId: - if (QString(propAttr->GetUserName().c_str()) != item->getValue().stripWhiteSpace()) { - if (!propAttr->IsLocked()) { - propAttr->SetUserName(item->getValue().stripWhiteSpace().latin1()); - myChanged = true; - } else { - SUIT_MessageBox::warn1(SUIT_Session::session()->activeApplication()->desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("WRN_STUDY_LOCKED"), - QObject::tr("BUT_OK")); - } - } - break; - //case prpModeId: - // propAttr->SetCreationMode(item->getValue().stripWhiteSpace().latin1()); - // break; - case prpLockedId: - { - bool bLocked = item->getValue().compare(tr("PRP_YES")) == 0; - if (propAttr->IsLocked() != bLocked) { - propAttr->SetLocked(bLocked); - myChanged = true; - } - } - break; - default: - break; - } - } - } - accept(); - } -} - -/*! - Check is properties changed? -*/ -bool SalomeApp_StudyPropertiesDlg::propChanged() -{ - _PTR(AttributeStudyProperties) propAttr = myStudyDoc->GetProperties(); - if (propAttr) { - QListViewItemIterator it (myPropList); - // iterate through all items of the listview - for (; it.current(); ++it) { - SalomeApp_PropItem* item = (SalomeApp_PropItem*)(it.current()); - switch (item->getUserType()) { - case prpAuthorId: - if ( QString( propAttr->GetUserName().c_str() ) != item->getValue().stripWhiteSpace() ) { - return true; - } - break; - //case prpModeId: - // if ( QString( propAttr->GetCreationMode().c_str() ) != item->getValue().stripWhiteSpace() ) { - // return true; - // } - // break; - case prpLockedId: - { - bool bLocked = item->getValue().compare( tr( "PRP_YES" ) ) == 0; - if ( propAttr->IsLocked() != bLocked ) { - return true; - } - break; - } - default: - break; - } - } - } - return false; -} diff --git a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.h b/src/SalomeApp/SalomeApp_StudyPropertiesDlg.h deleted file mode 100644 index 4abedf932..000000000 --- a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.h +++ /dev/null @@ -1,80 +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 : SalomeApp_StudyPropertiesDlg.h -// Author : Sergey ANIKIN -// Module : SALOME - -#ifndef SALOMEAPP_STUDY_PROPERTIES_DLG_H -#define SALOMEAPP_STUDY_PROPERTIES_DLG_H - -#include "SalomeApp.h" -#include -#include -#include -#include -#include - -#include -#include CORBA_SERVER_HEADER(SALOMEDS) - -#include - -class SalomeApp_ListView; -class QPushButton; -class QToolButton; - -class SALOMEAPP_EXPORT SalomeApp_StudyPropertiesDlg : public QDialog -{ - Q_OBJECT - -public: - enum { - prpAuthorId, - prpModeId, - prpDateId, - prpSavedId, - prpLockedId, - prpModificationsId, - prpLastId - }; - -public: - SalomeApp_StudyPropertiesDlg( QWidget* parent = 0 ); - ~SalomeApp_StudyPropertiesDlg(); - - bool isChanged() { return myChanged; } - -public slots: - void onOK(); - -private: - void initData(); - bool acceptData(); - bool propChanged(); - -private: - SalomeApp_ListView* myPropList; - QPushButton* myOKBtn; - QPushButton* myCancelBtn; - bool myChanged; - - _PTR(Study) myStudyDoc; -}; - -#endif // SALOMEAPP_STUDY_PROPERTIES_DLG_H diff --git a/src/SalomeApp/SalomeApp_Tools.cxx b/src/SalomeApp/SalomeApp_Tools.cxx deleted file mode 100644 index a20fbf0c8..000000000 --- a/src/SalomeApp/SalomeApp_Tools.cxx +++ /dev/null @@ -1,120 +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_Tools.h" - -#include -#include -#include - -#include - -/*! - Convert QColor to Quantity_Color, if QColor is valid. -*/ -Quantity_Color SalomeApp_Tools::color( const QColor& c ) -{ - Quantity_Color aColor; - if ( c.isValid() ) - aColor = Quantity_Color( c.red() / 255., c.green() / 255., c.blue() / 255., Quantity_TOC_RGB ); - return aColor; -} - -/*! - Convert Quantity_Color to QColor. -*/ -QColor SalomeApp_Tools::color( const Quantity_Color& c ) -{ - return QColor( (int)( c.Red() * 255 ), (int)( c.Green() * 255 ), (int)( c.Blue() * 255 ) ); -} - -/*! - Gets message on exception \a S_ex. -*/ -QString SalomeApp_Tools::ExceptionToString( const SALOME::SALOME_Exception& S_ex ) -{ - QString message; - - switch ( S_ex.details.type ) - { - case SALOME::COMM: - case SALOME::INTERNAL_ERROR: - { - message = QString( S_ex.details.text ); - QString source( S_ex.details.sourceFile ); - QString line; - line.setNum( S_ex.details.lineNumber ); - message = message + " \n" + source + " : " + line; - break; - } - case SALOME::BAD_PARAM: - { - message = QString( S_ex.details.text ); -#ifdef _DEBUG_ - QString source( S_ex.details.sourceFile ); - QString line; - line.setNum( S_ex.details.lineNumber ); - message = message + " \n" + source + " : " + line; -#endif - break; - } - default: - { - message = QString( "SALOME CORBA Exception Type invalid" ); - QString source( S_ex.details.sourceFile ); - QString line; - line.setNum( S_ex.details.lineNumber ); - message = message + " \n" + source + " : " + line; - break; - } - } - return message; -} - -/*! - Gets message box on exception \a S_ex. -*/ -void SalomeApp_Tools::QtCatchCorbaException( const SALOME::SALOME_Exception& S_ex ) -{ - QString message = ExceptionToString( S_ex ); - - QString title; - bool error = true; - switch ( S_ex.details.type ) - { - case SALOME::COMM: - case SALOME::INTERNAL_ERROR: - title = QObject::tr( "Engine Error" ); - break; - case SALOME::BAD_PARAM: - error = false; - title = QObject::tr( "Engine Warning" ); - break; - default: - title = QObject::tr( "Internal SALOME Error" ); - break; - } - - if ( error ) - SUIT_MessageBox::error1( SUIT_Session::session()->activeApplication()->desktop(), - title, message, QObject::tr( "OK" ) ); - else - SUIT_MessageBox::warn1( SUIT_Session::session()->activeApplication()->desktop(), - title, message, QObject::tr( "OK" ) ); - -} diff --git a/src/SalomeApp/SalomeApp_Tools.h b/src/SalomeApp/SalomeApp_Tools.h deleted file mode 100644 index a6f1e06dc..000000000 --- a/src/SalomeApp/SalomeApp_Tools.h +++ /dev/null @@ -1,47 +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 -// -#ifndef SALOMEAPP_TOOLS_H -#define SALOMEAPP_TOOLS_H - -#include "SalomeApp.h" - -#include - -#include -#include - -#include - -#include -#include CORBA_CLIENT_HEADER(SALOME_Exception) - -/*! - Class which provide color converter and exception message box. -*/ -class SALOMEAPP_EXPORT SalomeApp_Tools : public SUIT_Tools -{ -public: - static Quantity_Color color( const QColor& ); - static QColor color( const Quantity_Color& ); - - static QString ExceptionToString( const SALOME::SALOME_Exception& ); - static void QtCatchCorbaException( const SALOME::SALOME_Exception& ); -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_TypeFilter.cxx b/src/SalomeApp/SalomeApp_TypeFilter.cxx deleted file mode 100644 index c82912207..000000000 --- a/src/SalomeApp/SalomeApp_TypeFilter.cxx +++ /dev/null @@ -1,63 +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_TypeFilter.h" - -#include "LightApp_DataOwner.h" -#include "SalomeApp_Study.h" - -/*! - Constructor. -*/ -SalomeApp_TypeFilter::SalomeApp_TypeFilter( SalomeApp_Study* study, const QString& kind ) - : SalomeApp_Filter( study ) -{ - myKind = kind; -} - -/*! - Destructor. -*/ -SalomeApp_TypeFilter::~SalomeApp_TypeFilter() -{ -} - -/*! - Check: data owner is valid? -*/ -bool SalomeApp_TypeFilter::isOk( const SUIT_DataOwner* sOwner ) const -{ - const LightApp_DataOwner* owner = dynamic_cast ( sOwner ); - - SalomeApp_Study* aDoc = getStudy(); - if (owner && aDoc && aDoc->studyDS()) - { - _PTR(Study) aStudy = aDoc->studyDS(); - QString entry = owner->entry(); - - _PTR(SObject) aSObj( aStudy->FindObjectID( entry.latin1() ) ); - if (aSObj) - { - _PTR(SComponent) aComponent(aSObj->GetFatherComponent()); - if ( aComponent && (aComponent->ComponentDataType() == myKind.latin1()) ) - return true; - } - } - - return false; -} diff --git a/src/SalomeApp/SalomeApp_TypeFilter.h b/src/SalomeApp/SalomeApp_TypeFilter.h deleted file mode 100644 index 533ea7269..000000000 --- a/src/SalomeApp/SalomeApp_TypeFilter.h +++ /dev/null @@ -1,41 +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 -// -#ifndef SALOMEAPP_TYPEFILTER_H -#define SALOMEAPP_TYPEFILTER_H - -#include - -#include "SalomeApp_Filter.h" - -/*! - Class which provide data owner validation. -*/ -class SALOMEAPP_EXPORT SalomeApp_TypeFilter: public SalomeApp_Filter -{ -public: - SalomeApp_TypeFilter( SalomeApp_Study* study, const QString& kind ); - ~SalomeApp_TypeFilter(); - - virtual bool isOk( const SUIT_DataOwner* ) const; - -private: - QString myKind; -}; - -#endif diff --git a/src/SalomeApp/SalomeApp_VisualState.cxx b/src/SalomeApp/SalomeApp_VisualState.cxx deleted file mode 100644 index dab9a907e..000000000 --- a/src/SalomeApp/SalomeApp_VisualState.cxx +++ /dev/null @@ -1,305 +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_VisualState.h" - -#include "SalomeApp_Module.h" -#include "SalomeApp_Study.h" -#include "SalomeApp_Application.h" - -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -/*! - Constructor. -*/ -SalomeApp_VisualState::SalomeApp_VisualState( SalomeApp_Application* app ) - : myApp( app ) -{ -} - -/*! - Destructor. -*/ -SalomeApp_VisualState::~SalomeApp_VisualState() -{ -} - -/*! - Sets names of all view windows in given list. This is used - in order to apply the same naming algorithm when saving and restoring - view windows. Names of view windows must be the same before saving - workstack (splitters) information, and before its restoring! - Naming rule: ViewerType_IndexOfViewerOfThisType_IndexOfViewInThisViewer - VTKViewer_0_0 - OCCViewer_0_0 OCCViewer_0_1 OCCViewer_0_2 - VTKViewer_1_0 -*/ -void nameViewWindows( const ViewManagerList& lst ) -{ - QDict viewersCounter; // map viewerType - to - index_of_this_viewer_type - viewersCounter.setAutoDelete( true ); - for ( QPtrListIterator it(lst); it.current(); ++it) { - int view_count = it.current()->getViewsCount(); - QString vType = it.current()->getType(); - if ( !view_count ) - continue; //No views is opened in the viewer - - int* viewerID = viewersCounter[ vType ]; - if ( !viewerID ) { - viewerID = new int( 0 ); - viewersCounter.insert( vType, viewerID ); - } - else - ++(*viewerID); - - QPtrVector views = it.current()->getViews(); - for ( int i = 0; i < view_count; i++ ) { - QString vName = QString( "%1_%2_%3" ).arg( vType ).arg( *viewerID ).arg( i ); - views[i]->setName( vName ); - } - } -} - -/*! - Stores the visual parameters of the viewers -*/ -int SalomeApp_VisualState::storeState() -{ - SalomeApp_Study* study = dynamic_cast( myApp->activeStudy() ); - if ( !study ) - return -1; - - int savePoint = 1; - std::vector savePoints = study->getSavePoints(); - //Calculate a new savePoint number = the last save point number + 1 - if ( savePoints.size() > 0) - savePoint = savePoints[savePoints.size()-1] + 1; - - _PTR(AttributeParameter) ap = study->studyDS()->GetCommonParameters( study->getVisualComponentName(), savePoint ); - _PTR(IParameters) ip = ClientFactory::getIParameters( ap ); - - ViewManagerList lst; - myApp->viewManagers( lst ); - - // setting unique names for view windows in order to save this view inside - // workstack's structure (see below). On restore the views with the same names will - // be placed to the same place inside the workstack's splitters. - nameViewWindows( lst ); - - // store active window's name - SUIT_ViewWindow* win = myApp->desktop()->activeWindow(); - if ( win ) - ip->setProperty("AP_ACTIVE_VIEW", win->name() ); - - int viewerID = 0; - SUIT_ViewManager* vm = 0; - for (QPtrListIterator it( lst ); it.current(); ++it ) { - vm = it.current(); - int view_count = vm->getViewsCount(); - if ( !view_count ) - continue; //No views is opened in the viewer - - std::string viewerEntry = QString( "%1_%2" ).arg( vm->getType() ).arg( ++viewerID ).latin1(); - ip->append("AP_VIEWERS_LIST", viewerEntry); - - QPtrVector views = vm->getViews(); - for(int i = 0; iappend( viewerEntry, views[i]->caption().latin1() ); - ip->append( viewerEntry, views[i]->getVisualParameters().latin1() ); - } - } - - //Save information about split areas - if ( myApp->desktop()->inherits( "STD_TabDesktop" ) ) { - QtxWorkstack* workstack = ((STD_TabDesktop*)myApp->desktop())->workstack(); - QString workstackInfo; - (*workstack) >> workstackInfo; - ip->setProperty( "AP_WORKSTACK_INFO", workstackInfo.latin1() ); - } - - //Save a name of the active module - if ( CAM_Module* activeModule = myApp->activeModule() ) - ip->setProperty( "AP_ACTIVE_MODULE", activeModule->moduleName().latin1() ); - - //Store visual parameters of the modules - QPtrList mlist; - myApp->modules( mlist ); - CAM_Module* module = 0; - for ( module = mlist.first(); module; module = mlist.next() ) { - if ( SalomeApp_Module* sModule = dynamic_cast( module ) ) { - ip->append( "AP_MODULES_LIST", sModule->moduleName().latin1() ); - sModule->storeVisualParameters( savePoint ); - } - } - - // set default name of new savePoint - study->setNameOfSavePoint( savePoint, QObject::tr( "SAVE_POINT_DEF_NAME" ) + QString::number( savePoint ) ); - - return savePoint; -} - -/*! - Restores the visual parameters of the viewers -*/ -void SalomeApp_VisualState::restoreState(int savePoint) -{ - SalomeApp_Study* study = dynamic_cast( myApp->activeStudy() ); - if ( !study ) - return; - - _PTR(AttributeParameter) ap = study->studyDS()->GetCommonParameters( study->getVisualComponentName(), savePoint ); - _PTR(IParameters) ip = ClientFactory::getIParameters(ap); - - //Remove all already existent veiwers and their views - ViewManagerList lst; - myApp->viewManagers( lst ); - for ( QPtrListIterator it(lst); it.current(); ++it ) { - myApp->removeViewManager( it.current() ); - qApp->processEvents(); - } - //Restore the viewers and view windows - int nbViewers = ip->nbValues( "AP_VIEWERS_LIST" ); - SUIT_ViewWindow* viewWin = 0; - - // parameters of view windows are stored in a map for restoring after restoring of the workstack - QMap viewersParameters; - - for ( int i = 0; i < nbViewers; i++ ) { - std::string viewerEntry = ip->getValue( "AP_VIEWERS_LIST", i ); - std::vector veiewerParams = ip->parseValue(viewerEntry,'_'); - std::string type = veiewerParams[0]; - std::string viewerID = veiewerParams[1]; - SUIT_ViewManager* vm = myApp->newViewManager( type.c_str() ); - if ( !vm ) - continue; //Unknown viewer - - int nbViews = (ip->nbValues(viewerEntry))/2; - - //Create nbViews-1 view (-1 because 1 view is created by createViewManager) - for ( int i = 1; i< nbViews; i++ ) { - SUIT_ViewWindow* aView = vm->createViewWindow(); - aView->show(); - } - - int viewCount = vm->getViewsCount(); - if (viewCount != nbViews) { - printf( "\nRestore visual state: Unknow error, Can't create a view!\n" ); - continue; - } - - //Resize the views, set their captions and apply visual parameters. - QPtrVector views = vm->getViews(); - for (int i = 0, j = 0; iisVisible() ) - qApp->processEvents(); - - viewWin->setCaption(ip->getValue(viewerEntry, j).c_str()); - - // printf ( "VP for viewWin \"%s\": %s\n", viewerEntry.c_str(), ip->getValue(viewerEntry, j+1).c_str() ); - viewersParameters[ viewWin ] = ip->getValue(viewerEntry, j+1).c_str(); - //viewWin->setVisualParameters(ip->getValue(viewerEntry, j+1).c_str()); - } - } - - // restore modules' visual parameters - std::vector v = ip->getValues("AP_MODULES_LIST"); - for ( int i = 0; i < v.size(); i++ ) { - myApp->activateModule( v[i].c_str() ); - if ( SalomeApp_Module* module = dynamic_cast( myApp->activeModule() ) ) - module->restoreVisualParameters( savePoint ); - } - - // new view windows may have been created in module->restoreVisualParameters() [GAUSS] - // so here we store their visual parameters for later restoring.. - lst.clear(); - myApp->viewManagers(lst); - QPtrListIterator it( lst ); - for ( ; it.current(); ++it ) { - int view_count = it.current()->getViewsCount(); - QPtrVector views = it.current()->getViews(); - for ( int i = 0; i < view_count; i++ ) { - if ( !viewersParameters.contains( views[i] ) ) { - viewersParameters[ views[i] ] = views[i]->getVisualParameters(); - // printf ( "store VP for viewWin \"%s\": %s\n", views[i]->name(), views[i]->getVisualParameters().latin1() ); - } - } - } - - // activate module that was active on save - QString activeModuleName( ip->getProperty("AP_ACTIVE_MODULE" ).c_str() ); - if ( !activeModuleName.isEmpty() ) - myApp->activateModule( activeModuleName ); - - // setting unique names for view windows in order to restore positions of view windows inside - // workstack's structure (see below). During save the same naming algorithm was used, - // so the same views will get the same names. - nameViewWindows( lst ); - - // restore workstack parameters. should be done after module's restoreVisualParameters(), because - // some modules can create their own viewers (like VISU creates GaussViewers) - if ( myApp->desktop()->inherits( "STD_TabDesktop" ) ) { - QtxWorkstack* workstack = ((STD_TabDesktop*)myApp->desktop())->workstack(); - (*workstack) << ip->getProperty( "AP_WORKSTACK_INFO" ).c_str(); - } - - // restore visual parameters of view windows. it must be done AFTER restoring workstack. - // also set active view - std::string activeViewName = ip->getProperty("AP_ACTIVE_VIEW"); - QMap::Iterator mapIt; - for ( mapIt = viewersParameters.begin(); mapIt != viewersParameters.end(); ++mapIt ) { - mapIt.key()->setVisualParameters( mapIt.data() ); - if ( activeViewName == mapIt.key()->name() ) - mapIt.key()->setFocus(); - } - - // for ( it.toFirst(); it.current(); ++it ) { - // int view_count = it.current()->getViewsCount(); - // QPtrVector views = it.current()->getViews(); - // for ( int i = 0; i < view_count; i++ ) - // views[i]->setVisualParameters( viewersParameters[ views[i]->name() ] ); - // } - - // set focus to previously saved active view window - // std::string activeViewName = ip->getProperty("AP_ACTIVE_VIEW"); - // for ( it.toFirst(); it.current(); ++it ) { - // int view_count = it.current()->getViewsCount(); - // QPtrVector views = it.current()->getViews(); - // for ( int i = 0; i < view_count; i++ ) { - // if ( activeViewName == views[i]->name() ) - // views[i]->setFocus(); - // } - // } -} diff --git a/src/SalomeApp/SalomeApp_VisualState.h b/src/SalomeApp/SalomeApp_VisualState.h deleted file mode 100644 index dae7fc091..000000000 --- a/src/SalomeApp/SalomeApp_VisualState.h +++ /dev/null @@ -1,47 +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 -// -#ifndef SALOMEAPP_VISUALSTATE_H -#define SALOMEAPP_VISUALSTATE_H - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -#include "SalomeApp.h" - -class SalomeApp_Application; - -class SALOMEAPP_EXPORT SalomeApp_VisualState -{ -public: - SalomeApp_VisualState( SalomeApp_Application* ); - virtual ~SalomeApp_VisualState(); - - virtual int storeState(); - virtual void restoreState( int savePoint ); - -protected: - SalomeApp_Application* myApp; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/SalomeApp/Test/Makefile.in b/src/SalomeApp/Test/Makefile.in deleted file mode 100644 index 4754fe72a..000000000 --- a/src/SalomeApp/Test/Makefile.in +++ /dev/null @@ -1,65 +0,0 @@ -# SALOMELocalTrace : log on local machine -# -# 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 : Sergey RUIN -# Module : SALOME - -top_srcdir=@top_srcdir@ -top_builddir=../../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl - - -@COMMENCE@ - -# header files -EXPORT_HEADERS= SalomeAppTest.hxx - -EXPORT_PYSCRIPTS = TestSalomeApp.py - -# Libraries targets - -LIB = libSalomeAppTest.la -LIB_SRC = SalomeAppTest.cxx -LIB_CLIENT_IDL = - -# 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 - -UNIT_TEST_PROG = TestSalomeApp - -@CONCLUDE@ diff --git a/src/SalomeApp/Test/SalomeAppTest.cxx b/src/SalomeApp/Test/SalomeAppTest.cxx deleted file mode 100644 index e05206e21..000000000 --- a/src/SalomeApp/Test/SalomeAppTest.cxx +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2006 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 "SalomeAppTest.hxx" - -using namespace std; - -// ============================================================================ -/*! - * Set up the environment - */ -// ============================================================================ - -void SalomeAppTest::setUp() -{ -} - -// ============================================================================ -/*! - * - delete - */ -// ============================================================================ - -void SalomeAppTest::tearDown() -{ -} - -// ============================================================================ -/*! - * Check SalomeApp functionality - */ -// ============================================================================ -void SalomeAppTest::testSalomeApp() -{ -} - - - - diff --git a/src/SalomeApp/Test/SalomeAppTest.hxx b/src/SalomeApp/Test/SalomeAppTest.hxx deleted file mode 100644 index 97dd58146..000000000 --- a/src/SalomeApp/Test/SalomeAppTest.hxx +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2006 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 _SalomeAppTEST_HXX_ -#define _SalomeAppTEST_HXX_ - -#include - -class SalomeAppTest : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( SalomeAppTest ); - CPPUNIT_TEST( testSalomeApp ); - CPPUNIT_TEST_SUITE_END(); - -public: - - void setUp(); - void tearDown(); - void testSalomeApp(); -}; - -#endif diff --git a/src/SalomeApp/Test/TestSalomeApp.cxx b/src/SalomeApp/Test/TestSalomeApp.cxx deleted file mode 100644 index 5e8ca565e..000000000 --- a/src/SalomeApp/Test/TestSalomeApp.cxx +++ /dev/null @@ -1,31 +0,0 @@ -// 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 all SalomeApp Test from basics until the present directory - -#include "SalomeAppTest.hxx" - -// --- Registers the fixture into the 'registry' - -CPPUNIT_TEST_SUITE_REGISTRATION( SalomeAppTest ); - -// --- generic Main program from Basic/Test - -#include "BasicMainTest.hxx" diff --git a/src/SalomeApp/Test/TestSalomeApp.py b/src/SalomeApp/Test/TestSalomeApp.py deleted file mode 100644 index e636e1fc9..000000000 --- a/src/SalomeApp/Test/TestSalomeApp.py +++ /dev/null @@ -1,47 +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 -# - -import sys, os,signal,string,commands -import runSalome -import orbmodule -import TestKiller - -# get SALOME environment : - -args, modules_list, modules_root_dir = runSalome.get_config() -runSalome.set_env(args, modules_list, modules_root_dir) - -# launch CORBA naming server - -clt=orbmodule.client() - -# launch CORBA logger server - -myServer=runSalome.LoggerServer(args) -myServer.run() -clt.waitLogger("Logger") - -# execute Unit Test - -command = ['TestSalomeApp'] -ret = os.spawnvp(os.P_WAIT, command[0], command) - -# kill Test process - -TestKiller.killProcess(runSalome.process_id) diff --git a/src/SalomeApp/resources/SalomeApp.ini b/src/SalomeApp/resources/SalomeApp.ini deleted file mode 100644 index d89841c14..000000000 --- a/src/SalomeApp/resources/SalomeApp.ini +++ /dev/null @@ -1,31 +0,0 @@ -[language] -language = en - -[launch] -modules = GEOM,SMESH,VISU - -[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 -icon = ModulGeom - -[SMESH] -name = Mesh -icon = ModulMesh - -[VISU] -name = Post-Pro -icon = ModulVisu diff --git a/src/SalomeApp/resources/SalomeApp.xml b/src/SalomeApp/resources/SalomeApp.xml deleted file mode 100644 index 903272326..000000000 --- a/src/SalomeApp/resources/SalomeApp.xml +++ /dev/null @@ -1,123 +0,0 @@ - -
- - - - - - - - - - - - - - - -
-
- - - -
-
- - - - - -
-
- - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - - - - - -
-
- - - - - - - -
-
- - - -
-
- - - - - -
-
- - - - -
-
- - - - - - - - -
-
- - - - -
-
- - -
-
- - - -
-
- - - -
-
diff --git a/src/SalomeApp/resources/SalomeApp_images.po b/src/SalomeApp/resources/SalomeApp_images.po deleted file mode 100644 index 25df26cd8..000000000 --- a/src/SalomeApp/resources/SalomeApp_images.po +++ /dev/null @@ -1,31 +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: SalomeApp_images.po -// Created: November, 2004 -// Author: OCC team -// Copyright (C) CEA 2004 - -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-05-28 10:57:43 AM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - diff --git a/src/SalomeApp/resources/SalomeApp_msg_en.po b/src/SalomeApp/resources/SalomeApp_msg_en.po deleted file mode 100644 index 23c83e0e3..000000000 --- a/src/SalomeApp/resources/SalomeApp_msg_en.po +++ /dev/null @@ -1,249 +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: CATHAREGUI_msg_en.po -// Created: 10/25/2004 12:46:36 PM -// Author: Sergey LITONIN -// Copyright (C) CEA 2004 - -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"POT-Creation-Date: 2002-02-22 16:56:46 CET\n" -"PO-Revision-Date: 2004-02-17 11:17+0300\n" -"Last-Translator: FULLNAME \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -//======================================================================================= - -msgid "BUT_NEW" -msgstr "&New" - -msgid "BUT_OPEN" -msgstr "&Open" - -msgid "BUT_LOAD" -msgstr "&Load" - -//======================================================================================= - -msgid "SalomeApp_Application::PYTHON_CONSOLE" -msgstr "Python Console" - -msgid "SalomeApp_Application::TOT_DESK_FILE_DUMP_STUDY" -msgstr "Dump study" - -msgid "SalomeApp_Application::MEN_DESK_FILE_DUMP_STUDY" -msgstr "&Dump study..." - -msgid "SalomeApp_Application::PRP_DESK_FILE_DUMP_STUDY" -msgstr "Dumps study to the python script" - -msgid "SalomeApp_Application::TOT_DESK_FILE_SAVE_GUI_STATE" -msgstr "Save GUI state" - -msgid "SalomeApp_Application::MEN_DESK_FILE_SAVE_GUI_STATE" -msgstr "Save GUI state" - -msgid "SalomeApp_Application::PRP_DESK_FILE_SAVE_GUI_STATE" -msgstr "Saves current state of viewers, displayed objects, etc." - -msgid "SalomeApp_Application::TOT_DESK_FILE_LOAD_SCRIPT" -msgstr "Load python script" - -msgid "SalomeApp_Application::MEN_DESK_FILE_LOAD_SCRIPT" -msgstr "Load scrip&t..." - -msgid "SalomeApp_Application::PRP_DESK_FILE_LOAD_SCRIPT" -msgstr "Loads python script from file" - -msgid "SalomeApp_Application::TOT_FILE_DESK_PREFERENCES" -msgstr "Preferences" - -msgid "SalomeApp_Application::MEN_DESK_TOOLS" -msgstr "&Tools" - -msgid "SalomeApp_Application::TOT_DESK_CATALOG_GENERATOR" -msgstr "Catalog generator" - -msgid "SalomeApp_Application::MEN_DESK_CATALOG_GENERATOR" -msgstr "Catalog &generator" - -msgid "SalomeApp_Application::PRP_DESK_CATALOG_GENERATOR" -msgstr "Generates XML catalog of a component's interface" - -msgid "SalomeApp_Application::TOT_DESK_REGISTRY_DISPLAY" -msgstr "Registry display" - -msgid "SalomeApp_Application::MEN_DESK_REGISTRY_DISPLAY" -msgstr "Registry &display" - -msgid "SalomeApp_Application::PRP_DESK_REGISTRY_DISPLAY" -msgstr "Displays content of the Registry CORBA server" - -msgid "SalomeApp_Application::TOT_DESK_MRU" -msgstr "Most recently used" - -msgid "SalomeApp_Application::MEN_DESK_MRU" -msgstr "Most recently used" - -msgid "SalomeApp_Application::TOT_DESK_PROPERTIES" -msgstr "Study properties" - -msgid "SalomeApp_Application::MEN_DESK_PROPERTIES" -msgstr "Pro&perties..." - -msgid "SalomeApp_Application::PRP_DESK_PROPERTIES" -msgstr "Edits study properties" - -msgid "SalomeApp_Application::PREF_CATEGORY_SALOME" -msgstr "SALOME" - -msgid "SalomeApp_Application::PREF_TAB_OBJBROWSER" -msgstr "Object browser" - -msgid "SalomeApp_Application::MEN_OPENWITH" -msgstr "Activate Module" - -msgid "SalomeApp_Application::MEN_DELETE_INVALID_REFERENCE" -msgstr "Delete Invalid Reference" - -msgid "SalomeApp_Application::PREF_STORE_VISUAL_STATE" -msgstr "Store/restore last GUI state" - -//======================================================================================= - -msgid "PUBLISH_IN_STUDY" -msgstr "Publish in study" - -msgid "SAVE_GUI_STATE" -msgstr "Save GUI state" - -//======================================================================================= - -msgid "SalomeApp_Application::MEN_WINDOWS_NEW" -msgstr "New window" - -msgid "SalomeApp_Application::MEN_VIEW_WNDS" -msgstr "Windows" - -//======================================================================================= - -msgid "SalomeApp_Application::PREF_GROUP_DEF_COLUMNS" -msgstr "Default columns" - -msgid "SalomeApp_Application::PREF_OBJ_BROWSER_SETTINGS" -msgstr "Settings" - -//======================================================================================= - -msgid "SalomeApp_Application::OBJ_BROWSER_NAME" -msgstr "Object" - -msgid "SalomeApp_Application::OBJ_BROWSER_COLUMN_0" -msgstr "Value" - -msgid "SalomeApp_Application::OBJ_BROWSER_COLUMN_1" -msgstr "Entry" - -msgid "SalomeApp_Application::OBJ_BROWSER_COLUMN_2" -msgstr "IOR" - -msgid "SalomeApp_Application::OBJ_BROWSER_COLUMN_3" -msgstr "Reference entry" - -msgid "SalomeApp_Application::ALL_FILES_FILTER" -msgstr "All files (*.*)" - -msgid "SalomeApp_Application::PYTHON_FILES_FILTER" -msgstr "PYTHON Files (*.py)" - -msgid "SalomeApp_Application::STUDY_LOCKED" -msgstr "LOCKED" - -msgid "SalomeApp_Application::QUE_DOC_ALREADYEXIST" -msgstr "The document %1 already exists in study manager.\nDo you want to reload it ?" - -//======================================================================================= - -msgid "SalomeApp_StudyPropertiesDlg::PRP_MODE_FROM_SCRATCH" -msgstr "from scratch" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_MODE_FROM_COPYFROM" -msgstr "copy from" - -msgid "SalomeApp_StudyPropertiesDlg::TLT_STUDY_PROPERTIES" -msgstr "Study Properties" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_AUTHOR" -msgstr "Author" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_DATE" -msgstr "Created" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_MODE" -msgstr "Mode" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_LOCKED" -msgstr "Locked" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_MODIFIED" -msgstr "Modified" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_MODIFICATIONS" -msgstr "Modifications" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_YES" -msgstr "Yes" - -msgid "SalomeApp_StudyPropertiesDlg::PRP_NO" -msgstr "No" - -//======================================================================================= - -msgid "SalomeApp_Application::PUBLISH_IN_STUDY" -msgstr "Publish in study" - -msgid "SalomeApp_Application::WRN_DUMP_STUDY_FAILED" -msgstr "Dump study failed" - -msgid "SAVE_POINT_OBJECT_TOOLTIP" -msgstr "Saved GUI state: %1" - -msgid "SAVE_POINT_DEF_NAME" -msgstr "GUI state: " - -msgid "SAVE_POINT_ROOT_TOOLTIP" -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" -msgstr "Restore" - -msgid "SalomeApp_Application::MEN_RENAME_VS" -msgstr "Rename" - -msgid "SalomeApp_Application::MEN_DELETE_VS" -msgstr "Delete" diff --git a/src/Session/InquireServersQThread.cxx b/src/Session/InquireServersQThread.cxx deleted file mode 100755 index 61fdc3eff..000000000 --- a/src/Session/InquireServersQThread.cxx +++ /dev/null @@ -1,626 +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 : InquireServersQThread.cxx -// Author : Vasily RUSYAEV -// Module : SALOME -// $Header$ - -#include "InquireServersQThread.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//VRV: porting on Qt 3.0.5 -#if QT_VERSION >= 0x030005 -#include -#endif -//VRV: porting on Qt 3.0.5 - -#include - -#include - -#include "Utils_ORB_INIT.hxx" -#include "Utils_SINGLETON.hxx" -#include "SALOME_NamingService.hxx" -#include "utilities.h" -#include "OpUtil.hxx" - -using namespace std; - -#include CORBA_CLIENT_HEADER(SALOME_Session) -#include CORBA_CLIENT_HEADER(SALOME_Registry) -#include CORBA_CLIENT_HEADER(SALOMEDS) -#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) -#include CORBA_CLIENT_HEADER(SALOME_Component) - -#define MARGIN_SIZE 5 -#define SPACING_SIZE 3 - -/*! - Constructor -*/ -InquireServersGUI::InquireServersGUI() - : QVBox(0, "SFA splash", Qt::WDestructiveClose | Qt::WStyle_Customize | Qt::WStyle_NoBorder | WType_TopLevel | WStyle_StaysOnTop | WX11BypassWM ) -{ - // myGUI = false; - myThread = new InquireServersQThread( this ); - - // 1. Polish the appearance - setMargin( MARGIN_SIZE ); - setSpacing( SPACING_SIZE ); - setFrameStyle( QFrame::Plain | QFrame::Box ); - setLineWidth( 2 ); - setMinimumSize( 200, 150 ); - - // 2. Set palette - QPalette pal = palette(); - QColorGroup cg = pal.active(); - cg.setColor( QColorGroup::Foreground, Qt::darkBlue ); - cg.setColor( QColorGroup::Background, Qt::white ); - pal.setActive( cg ); pal.setInactive( cg ); pal.setDisabled( cg ); - setPalette( pal ); - - // 2. Splash image - mySplashFrame = new QFrame( this ); - mySplashFrame->setFrameStyle( QFrame::Box | QFrame::Raised ); - QHBoxLayout* frmLayout = new QHBoxLayout( mySplashFrame ); - frmLayout->setMargin( MARGIN_SIZE ); - mySplash = new QLabel( mySplashFrame, "splash" ); - frmLayout->addWidget( mySplash ); - - // setting pixmap - //QPixmap pix = SUIT_ResourceMgr( "SalomeApp" ).loadPixmap( "SalomeApp", tr( "ABOUT" ) ); - //splash->setPixmap( pix ); - - // 3. Progress bar - myPrgBar = new QProgressBar( this, "QProgressBar" ); - myPrgBar->setFixedWidth( 180 ); - //Sets the total number of steps . - myPrgBar->setPercentageVisible( false ); - myPrgBar->setIndicatorFollowsStyle( false ); - myPrgBar->setFixedHeight( 8 ); - myPrgBar->setFrameStyle( QFrame::Box | QFrame::Plain ); - myPrgBar->setMargin( 0 ); - pal = myPrgBar->palette(); cg = pal.active(); - cg.setColor( QColorGroup::Highlight, Qt::red ); - pal.setActive( cg ); pal.setInactive( cg ); pal.setDisabled( cg ); myPrgBar->setPalette( pal ); - myPrgBar->setTotalSteps ( myThread->getInquiredServers() ); - myPrgBar->setProgress( 0 ); - - // 4. Info label - QWidget* aWgt1 = new QWidget( this ); - QHBoxLayout* aHBoxLayout1 = new QHBoxLayout( aWgt1 ); - myLabel = new QLabel( tr( "Loading:" ), aWgt1 ); - myLabel->setFixedWidth( 180 ); - myLabel->setAlignment( AlignLeft ); - QFont theFont = myLabel->font(); - theFont.setBold(true); - myLabel->setFont( theFont ); - aHBoxLayout1->addItem( new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aHBoxLayout1->addWidget( myLabel ); - aHBoxLayout1->addItem( new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - - // 5. button - QWidget* aWgt = new QWidget( this ); - QHBoxLayout* aHBoxLayout = new QHBoxLayout( aWgt ); - QPushButton* myCancelBtn = new QPushButton( tr( "Cancel" ), aWgt ); - connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) ) ; - aHBoxLayout->addItem( new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aHBoxLayout->addWidget( myCancelBtn ); - aHBoxLayout->addItem( new QSpacerItem( 0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - - //Center widget -#if QT_VERSION >= 0x030005 - QDesktopWidget *d = QApplication::desktop(); -#else - QWidget *d = QApplication::desktop(); -#endif -//VRV: porting on Qt 3.0.5 - - int w = d->width(); // returns desktop width - int h = d->height(); // returns desktop height - QSize mySize = sizeHint (); // returns widget size - int Xc = ( w - mySize.width() ) / 2; - int Yc = ( h - mySize.height() ) / 2; - move( Xc, Yc ); - - myThread->start(); -} - -/*! - Sets pixmap of splash screen - \param pix - new pixmap -*/ -void InquireServersGUI::setPixmap( QPixmap pix ) -{ - if ( !pix.isNull() ) - { - mySplash->setPixmap( pix ); - int w = mySplash->sizeHint().width() + MARGIN_SIZE*2; - myPrgBar->setFixedWidth( w ); - myLabel->setFixedWidth( w ); - } -} - -/*! - Destructor -*/ -InquireServersGUI::~InquireServersGUI() -{ - delete myThread; -} - -/*! - Gets parameters from qApp - \param _argc - variable to return number of arguments - \param _argv - variable to return array of arguments -*/ -void InquireServersGUI::getArgs( int& _argc, char *** _argv) -{ - _argc = qApp->argc(); - *_argv = qApp->argv(); -} - -/*! - Cancel loading of SALOME -*/ -void InquireServersGUI::ClickOnCancel() -{ - myThread->stop(); //it's necessary to stop asking servers - hide(); - qApp->exit( 1 ); -} - -/*! - Custom event filter -*/ -void InquireServersGUI::customEvent( QCustomEvent* pe ) -{ - switch( pe->type() ) - { - case InquireEvent::ProgressEvent: - { - int* value = ( int* )(( InquireEvent*)pe)->data(); - myPrgBar->setProgress( *value ); - break; - } - case InquireEvent::ProgressEventLabel: - { - QString* myString = ( QString* )(( InquireEvent*)pe)->data(); - myLabel->setText( *myString ); - break; - } - case InquireEvent::ProgressEventError: - { - QString* myErrDesc = ( QString* )(( InquireEvent*)pe)->data(); - QString appName = "SALOME Professional"; - QString error = "An internal error occurred.\n"+ *myErrDesc + "\n"; - QMessageBox myMsgBox(appName,error,QMessageBox::Critical,QMessageBox::Ok,QMessageBox::NoButton, - QMessageBox::NoButton,0,"MY",TRUE,WStyle_DialogBorder|WStyle_StaysOnTop); - myMsgBox.exec(); - ClickOnCancel(); - break; - } - default: - { - ; - } - } -} - -/*! - \return status of thread exit -*/ -int InquireServersGUI::getExitStatus() -{ - return myThread->getExitStatus(); -} - -/*! - Constructor -*/ -InquireServersQThread::InquireServersQThread( InquireServersGUI* r ) - : receiver(r), myExitStatus(0) -{ - char* cenv; - - IsChecking = true; - myServersCount = 5; - //how many times we should repeat attempts to get response from all needed for launching SALOME servers - myRepeat = 30; // default value, user can change it by setting CSF_RepeatServerRequest env.variable - cenv = getenv( "CSF_RepeatServerRequest" ); - if ( cenv ) { - int val = atoi( cenv ); - if ( val > 0 ) - myRepeat = val; - } - //define delay time between two attempts - myDelay = 1000000; // 1 second - QString str = "Loading: "; - myMessages[0] = "Checking naming service..."; - myMessages[1] = str + "SALOME_Registry_Server" + "..."; - myMessages[2] = str + "SALOMEDS_Server" + "..."; - myMessages[3] = str + "SALOME_ModuleCatalog_Server" + "..."; - myMessages[4] = str + "SALOME_Session_Server" + "..."; - myMessages[5] = ""; - myMessages[6] = ""; - myMessages[7] = ""; - - r->getArgs( _argc, &_argv); - - // NRI : Temporary solution for SuperVisionContainer - for ( int i=1; i<=(_argc-1); i++) { - if (strcmp(_argv[i],"CPP")==0) { - myMessages[5] = str + "SALOME_Container FactoryServer" + "..."; - myServersCount++; - } - if (strcmp(_argv[i],"PY")==0) { - myMessages[6] = str + "SALOME_ContainerPy.py FactoryServerPy" + "..."; - myServersCount++; - } - if (strcmp(_argv[i],"SUPERV")==0) { - myMessages[7] = str + "SALOME_Container SuperVisionContainer" + "..."; - myServersCount++; - } -// if (strcmp(_argv[i],"GUI")==0) { -// r->withGUI(true); -// } - } -} - -/*! - The main loop of this thread -*/ -void InquireServersQThread::run() -{ - while ( IsChecking && receiver ) - { - for (int i=1; i<=8; i++) - { - if ( myMessages[i-1].isEmpty() ) - { - if ( i==8 ) - { - IsChecking = false; - myExitStatus = 0; //myExitStatus should be 0 because all servers exist and work - sleep( 1 ); // sleep( 1 second ) in order to see 100%. in other case it closes on 85%.. - break; - } - else - continue; - } - QString *message = new QString(myMessages[i-1]); - QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEventLabel, message ) ); - QThread::usleep(200000); - QString *errMsg; - bool result = AskServer(i,&errMsg); - if (result) - { - QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEvent, new int( i ) ) ); - if ( i==8 ) - { - IsChecking = false; - myExitStatus = 0; //myExitStatus should be 0 because all servers exist and work - sleep( 1 ); // sleep( 1 second ) in order to see 100%. in other case it closes on 85%.. - break; - } - } - else - { - QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEventError, errMsg ) ); - stop(); - break; - } - } - } - - receiver->hide(); - qApp->exit( myExitStatus ); -} - -/*! - Stops this thread -*/ -void InquireServersQThread::stop() -{ - IsChecking = false; - myExitStatus = 1; -} - -/*! - Destructor -*/ -InquireServersQThread::~InquireServersQThread() -{ -} - -bool InquireServersQThread::AskServer(int iteration, QString ** errMessage) -{ - if ( iteration > myServersCount ) - return true; // we did not launch server with number iteration, so checking for it is not neccessary - - ASSERT(iteration<=myServersCount); - - //will be set true if we get response from server - bool IsPassed = false; - QString errDescription; -#ifdef WNT - int i; -#endif - switch (iteration) - { - case 1: - //First checking - existence of Naming Service -#ifndef WNT - for (int i = myRepeat; i ; i--) -#else - for (i = myRepeat; i ; i--) -#endif - { - try - { - CORBA::ORB_var orb = CORBA::ORB_init(_argc,_argv) ; - CORBA::Object_var obj = orb->resolve_initial_references("NameService"); - CosNaming::NamingContext_var _root_context = CosNaming::NamingContext::_narrow(obj); - if (CORBA::is_nil(_root_context)) - continue; - else - IsPassed = true; - break; - } - catch(CORBA::COMM_FAILURE&) - { - MESSAGE("CORBA::COMM_FAILURE: unable to contact the naming service"); - } - catch(...) - { - MESSAGE("Unknown Exception: unable to contact the naming service"); - } - QThread::usleep(myDelay); - } - if (!IsPassed) - *errMessage = new QString("unable to contact the naming service"); - break; - case 2: - //checking - existence of SALOME_Registry_Server - case 3: - //checking - existence of SALOMEDS_Server - case 4: - //checking - existence of SALOME_ModuleCatalog_Server - case 5: - //checking - existence of SALOME_Session_Server - case 6: - //checking - existence of SALOME_Container FactoryServer - case 7: - //checking - existence of SALOME_ContainerPy.py FactoryServerPy - case 8: - //checking - existence of SALOME_Container SuperVisionContainer - - - IsPassed = pingServer(iteration, errDescription); - if (!IsPassed) - *errMessage = new QString(errDescription); - break; - } -return IsPassed; -} - -bool InquireServersQThread::pingServer(int iteration, QString& errMessage) -{ - ASSERT(iteration<=myServersCount); - bool result = false; - QString errorDescr; - for (int i = myRepeat; i ; i--) - { - try - { - CORBA::ORB_var orb = CORBA::ORB_init(_argc,_argv) ; - SALOME_NamingService &NS = *SINGLETON_::Instance() ; - ASSERT(SINGLETON_::IsAlreadyExisting()) ; - NS.init_orb( orb ) ; - switch (iteration) - { - case 2: - { - CORBA::Object_var obj = NS.Resolve("/Registry"); - Registry::Components_var registry = Registry::Components::_narrow(obj) ; - if (!CORBA::is_nil(registry)) - { - MESSAGE("/Registry is found"); - registry->ping(); - result = true; - MESSAGE("Registry was activated"); - return result; - } - } - break; - case 3: - { - CORBA::Object_var obj = NS.Resolve("/myStudyManager"); - SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow(obj) ; - if (!CORBA::is_nil(studyManager)) - - - - - - { - MESSAGE("/myStudyManager is found"); - studyManager->ping(); - result = true; - MESSAGE("StudyManager was activated"); - return result; - } - } - break; - case 4: - { - CORBA::Object_var obj = NS.Resolve("/Kernel/ModulCatalog"); - SALOME_ModuleCatalog::ModuleCatalog_var catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj) ; - if (!CORBA::is_nil(catalog)) - { - MESSAGE("/Kernel/ModulCatalog is found"); - catalog->ping(); - result = true; - MESSAGE("ModuleCatalog was activated"); - return result; - } - } - break; - case 5: - { - CORBA::Object_var obj = NS.Resolve("/Kernel/Session"); - SALOME::Session_var session = SALOME::Session::_narrow(obj) ; - if (!CORBA::is_nil(session)) - { - MESSAGE("/Kernel/Session is found"); - session->ping(); - result = true; - MESSAGE("SALOME_Session was activated"); - return result; - } - } - break; - case 6: - { - string hostname = GetHostname(); - string containerName = "/Containers/"; - containerName += hostname; - containerName += "/FactoryServer"; - - CORBA::Object_var obj = NS.Resolve(containerName.c_str()); - Engines::Container_var FScontainer = Engines::Container::_narrow(obj) ; - if (!CORBA::is_nil(FScontainer)) - { - FScontainer->ping(); - result = true; - MESSAGE("FactoryServer container was activated"); - return result; - } - } - break; - case 7: - { - string hostname = GetHostname(); - string containerName = "/Containers/"; - containerName += hostname; - containerName += "/FactoryServerPy"; - - CORBA::Object_var obj = NS.Resolve(containerName.c_str()); - Engines::Container_var FSPcontainer = Engines::Container::_narrow(obj) ; - if (!CORBA::is_nil(FSPcontainer)) - { - FSPcontainer->ping(); - result = true; - MESSAGE("FactoryServerPy container was activated"); - return result; - } - } - break; - case 8: - { - string hostname = GetHostname(); - string containerName = "/Containers/"; - containerName += hostname; - containerName += "/SuperVisionContainer"; - - CORBA::Object_var obj = NS.Resolve(containerName.c_str()); - Engines::Container_var SVcontainer = Engines::Container::_narrow(obj) ; - if (!CORBA::is_nil(SVcontainer)) - { - SVcontainer->ping(); - - result = true; - MESSAGE("SuperVisionContainer container was activated"); - return result; - } - } - break; - } - } - catch (ServiceUnreachable&) - { - MESSAGE("Caught exception: Naming Service Unreachable"); - errorDescr = "Caught exception: Naming Service Unreachable"; - } - catch (CORBA::COMM_FAILURE&) - { - MESSAGE("Caught CORBA::SystemException CommFailure."); - errorDescr = "Caught CORBA::SystemException CommFailure"; - } - catch (CORBA::SystemException&) - { - MESSAGE("Caught CORBA::SystemException."); - errorDescr = "Caught CORBA::SystemException"; - } - catch (CORBA::Exception&) - { - MESSAGE("Caught CORBA::Exception."); - errorDescr = "Caught CORBA::Exception"; - } - catch (...) - { - MESSAGE("Caught unknown exception."); - errorDescr = "Caught unknown exception"; - } - QThread::usleep(myDelay); - } - if (!result) - { - QString serverName; - switch (iteration) - { - case 2: - serverName = "SALOME_Registry_Server is not loaded. "; - break; - case 3: - serverName = "SALOMEDS_Server is not loaded. "; - break; - case 4: - serverName = "SALOME_ModuleCatalog_Server is not loaded. "; - break; - case 5: - serverName = "SALOME_Session_Server is not loaded. "; - break; - case 6: - serverName = "SALOME_Container FactoryServer is not loaded. "; - break; - case 7: - serverName = "SALOME_ContainerPy.py FactoryServerPy is not loaded. "; - break; - case 8: - serverName = "SALOME_Container SuperVisionContainer is not loaded. "; - break; - } - errMessage = serverName + errorDescr; - } - return result; -} - diff --git a/src/Session/InquireServersQThread.h b/src/Session/InquireServersQThread.h deleted file mode 100755 index 2eca8fe32..000000000 --- a/src/Session/InquireServersQThread.h +++ /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 : InquireServersQThread.h -// Author : Vasily RUSYAEV -// Module : SALOME - -#include -#include -#include - -#include - -/*! - \class InquireEvent - Contains QCustomEvents for posting to InquireServersQThread -*/ -class SESSION_EXPORT InquireEvent : public QCustomEvent -{ -public: - - enum myCustomEvents{ ProgressEvent = QEvent::User + 10, ProgressEventLabel, ProgressEventError }; - - InquireEvent( QEvent::Type type , void* data = 0 ) - : QCustomEvent( type, data ) {} - ~InquireEvent() - { - type() == (QEvent::Type)ProgressEvent ? - delete ( int* )data() : delete ( QString* )data(); - } -}; - -class InquireServersGUI; - -class SESSION_EXPORT InquireServersQThread : public QThread -{ -public: - InquireServersQThread( InquireServersGUI* r ); - virtual ~InquireServersQThread(); - - //the main loop of this thread - virtual void run() ; - //stop to ask servers - void stop(); - //return exit status: 0 - OK, >0 - BAD (some servers doesn't exists or user click cancel button) - int getExitStatus() { return myExitStatus;} - //return count of inquired servers - int getInquiredServers() { return myServersCount; } - -private: - -//functions: - - bool AskServer(int iteration, QString ** message); - bool pingServer(int iteration, QString& errMessage); - -//variables: - - QGuardedPtr receiver; - int _argc ; - char ** _argv; - //this variable is true if we are checking servers - bool IsChecking; - //count of inquired servers - int myServersCount; - //how many times we should repeat attempt to get response from all needed for launching SALOME servers - int myRepeat; - //define delay time between two attempts in microseconds - int myDelay; - //this strings' array contains messages for each server (e.g. "Loading: SALOMEDS_Server") - QString myMessages[8]; - //exit status: 0 - OK, >0 - BAD (some servers doesn't exists or user click cancel button) - int myExitStatus; - -} ; - -class QLabel; -class QFrame; -class QProgressBar; -class SESSION_EXPORT InquireServersGUI : public QVBox -{ - Q_OBJECT - -public: - InquireServersGUI() ; - ~InquireServersGUI(); - - //returns arguments of QApplication - //they are needed for CORBA servers initialization - void getArgs( int& _argc, char *** _argv); - //return exit status: 0 - OK, >0 - BAD (some servers doesn't exists or user click cancel button) - int getExitStatus(); - //launch IAPP - // bool withGUI() { return myGUI; } - // void withGUI(bool gui) { myGUI = gui; } - - void setPixmap( QPixmap ); - -protected: - virtual void customEvent( QCustomEvent* ); - -private: - InquireServersQThread* myThread; - QProgressBar* myPrgBar; - //this string contains description of currently asked server - QLabel* myLabel; - QLabel* mySplash; - QFrame* mySplashFrame; - // bool myGUI; - -private slots: - - void ClickOnCancel(); -} ; diff --git a/src/Session/Makefile.in b/src/Session/Makefile.in deleted file mode 100755 index 44e6f5207..000000000 --- a/src/Session/Makefile.in +++ /dev/null @@ -1,82 +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 \ - SALOME_Session.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) $(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 - -PLUGINDIR = $(top_builddir)/bin/salome/styles -MYPLUGINDIR = styles - -$(MYPLUGINDIR): $(PLUGINDIR) - -$(RM) $@ - ln -sf $< $@ - -$(PLUGINDIR): - mkdir -p $@ - -bin: $(MYPLUGINDIR) - -@CONCLUDE@ - diff --git a/src/Session/SALOME_Session.hxx b/src/Session/SALOME_Session.hxx deleted file mode 100755 index 78c89d6d3..000000000 --- a/src/Session/SALOME_Session.hxx +++ /dev/null @@ -1,47 +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.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 \ No newline at end of file diff --git a/src/Session/SALOME_Session_Server.cxx b/src/Session/SALOME_Session_Server.cxx deleted file mode 100755 index 1a9987a54..000000000 --- a/src/Session/SALOME_Session_Server.cxx +++ /dev/null @@ -1,565 +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 : SALOME_Session_Server.cxx -// Author : Paul RASCLE, EDF -// Module : SALOME - -#include -#include "Utils_ORB_INIT.hxx" -#include "Utils_SINGLETON.hxx" -#include "SALOME_NamingService.hxx" -#include "SALOMETraceCollector.hxx" - -#include -#ifndef WNT -#include -#endif - -#include -#include -#include -#include -#include - -#include "Utils_SALOME_Exception.hxx" -#include "Utils_CorbaException.hxx" -#include "SALOME_Event.hxx" - -#include -#include CORBA_SERVER_HEADER(SALOME_Session) -#include CORBA_SERVER_HEADER(SALOMEDS) - -#include -#include "Session_Session_i.hxx" -#include "Session_ServerLauncher.hxx" -#include "Session_ServerCheck.hxx" - -#include -#include "SUIT_Tools.h" -#include "SUIT_Session.h" -#include "SUIT_Application.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" -#include "SUIT_ResourceMgr.h" -#include "SUIT_ExceptionHandler.h" - -/*! - read arguments, define list of server to launch with their arguments. - * - wait for naming service - * - create and run a thread for launch of all servers - * -*/ - -//! CORBA server for SALOME Session -/*! - * SALOME_Session Server launches a SALOME session servant. - * The servant registers to the Naming Service. - * See SALOME_Session.idl for interface specification. - * - * Main services offered by the servant are: - * - launch GUI - * - stop Session ( must be idle ) - * - get session state - */ - -PyObject* salome_shared_modules_module = 0; - -void MessageOutput( QtMsgType type, const char* msg ) -{ - switch ( type ) - { - case QtDebugMsg: - MESSAGE( "Debug: " << msg ); - break; - case QtWarningMsg: - MESSAGE( "Warning: " << msg ); - break; - case QtFatalMsg: - MESSAGE( "Fatal: " << msg ); - break; - } -} - -/* XPM */ -static const char* pixmap_not_found_xpm[] = { -"16 16 3 1", -" c None", -". c #000000", -"+ c #A80000", -" ", -" ", -" . . ", -" .+. .+. ", -" .+++. .+++. ", -" .+++.+++. ", -" .+++++. ", -" .+++. ", -" .+++++. ", -" .+++.+++. ", -" .+++. .+++. ", -" .+. .+. ", -" . . ", -" ", -" ", -" "}; - -QString salomeVersion() -{ - QString path( ::getenv( "GUI_ROOT_DIR" ) ); - if ( !path.isEmpty() ) - path += QDir::separator(); - path += QString( "bin/salome/VERSION" ); - - QFile vf( path ); - if ( !vf.open( IO_ReadOnly ) ) - return QString::null; - - QString line; - vf.readLine( line, 1024 ); - vf.close(); - - if ( line.isEmpty() ) - return QString::null; - - while ( !line.isEmpty() && line.at( line.length() - 1 ) == QChar( '\n' ) ) - line.remove( line.length() - 1, 1 ); - - QString ver; - int idx = line.findRev( ":" ); - if ( idx != -1 ) - ver = line.mid( idx + 1 ).stripWhiteSpace(); - - return ver; -} - -class SALOME_ResourceMgr : public SUIT_ResourceMgr -{ -public: - SALOME_ResourceMgr( const QString& app, const QString& resVarTemplate ) : SUIT_ResourceMgr( app, resVarTemplate ) - { - setCurrentFormat( "xml" ); - setOption( "translators", QString( "%P_msg_%L.qm|%P_icons.qm|%P_images.qm" ) ); - setDefaultPixmap( QPixmap( pixmap_not_found_xpm ) ); - } - static void initResourceMgr() - { - if ( myExtAppName.isNull() || myExtAppVersion.isNull() ) { - SALOME_ResourceMgr resMgr( "SalomeApp", QString( "%1Config" ) ); - resMgr.loadLanguage( "SalomeApp", "en" ); - - myExtAppName = QObject::tr( "APP_NAME" ).stripWhiteSpace(); - if ( myExtAppName == "APP_NAME" || myExtAppName.lower() == "salome" ) - myExtAppName = "SalomeApp"; - myExtAppVersion = QObject::tr( "APP_VERSION" ); - if ( myExtAppVersion == "APP_VERSION" ) { - if ( myExtAppName != "SalomeApp" ) - myExtAppVersion = ""; - else myExtAppVersion = salomeVersion(); - } - } - } - QString version() const { return myExtAppVersion; } - -protected: - QString userFileName( const QString& appName, const bool for_load ) const - { - if ( version().isNull() ) return ""; - return SUIT_ResourceMgr::userFileName( myExtAppName, for_load ); - } - - 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; - if ( dev > 0 ) id+=dev-10000; - return id; - } - - return -1; - } - -public: - static QString myExtAppName; - static QString myExtAppVersion; -}; - -QString SALOME_ResourceMgr::myExtAppName = QString::null; -QString SALOME_ResourceMgr::myExtAppVersion = QString::null; - -class SALOME_Session : public SUIT_Session -{ -public: - SALOME_Session() : SUIT_Session() {} - virtual ~SALOME_Session() {} - -protected: - virtual SUIT_ResourceMgr* createResourceMgr( const QString& appName ) const - { - SALOME_ResourceMgr::initResourceMgr(); - SALOME_ResourceMgr* resMgr = new SALOME_ResourceMgr( appName, QString( "%1Config" ) ); - return resMgr; - } -}; - -class SALOME_QApplication : public QApplication -{ -public: - SALOME_QApplication( int& argc, char** argv ) : QApplication( argc, argv ), myHandler ( 0 ) {} - - 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 ); - } - SUIT_ExceptionHandler* handler() const { return myHandler; } - void setHandler( SUIT_ExceptionHandler* h ) { myHandler = h; } - -private: - SUIT_ExceptionHandler* myHandler; -}; - -// class which calls SALOME::Session::GetInterface() from another thread -// to avoid mutual lock ( if called from the same thread as main() -class GetInterfaceThread : public QThread -{ -public: - GetInterfaceThread( SALOME::Session_var s ) : session ( s ) - { - start(); - } -protected: - virtual void run() - { - if ( !CORBA::is_nil( session ) ) - session->GetInterface(); - else - printf( "\nFATAL ERROR: SALOME::Session object is nil! Can not display GUI\n\n" ); - } -private: - SALOME::Session_var session; -}; - -// returns true if 'str' is found in argv -bool isFound( const char* str, int argc, char** argv ) -{ - for ( int i = 1; i <= ( argc-1 ); i++ ) - if ( !strcmp( argv[i], str ) ) - return true; - return false; -} - -// ---------------------------- MAIN ----------------------- -int main( int argc, char **argv ) -{ - // Install Qt debug messages handler - qInstallMsgHandler( MessageOutput ); - - // Create Qt application instance; - // this should be done the very first! - SALOME_QApplication _qappl( argc, argv ); - ASSERT( QObject::connect( &_qappl, SIGNAL( lastWindowClosed() ), &_qappl, SLOT( quit() ) ) ); - - // Add application library path (to search style plugin etc...) - QString path = QDir::convertSeparators( SUIT_Tools::addSlash( QString( ::getenv( "GUI_ROOT_DIR" ) ) ) + QString( "bin/salome" ) ); - _qappl.addLibraryPath( path ); - - // Set SALOME style to the application - _qappl.setStyle( "salome" ); - - bool isGUI = isFound( "GUI", argc, argv ); - bool isSplash = isFound( "SPLASH", argc, argv ); - // Show splash screen (only if both the "GUI" and "SPLASH" parameters are set) - QtxSplash* splash = 0; - if ( isGUI && isSplash ) { - // ...create resource manager - SUIT_ResourceMgr resMgr( "SalomeApp", QString( "%1Config" ) ); - 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 ); - 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 splash text colors - if ( !splashTextColors.isEmpty() ) { - QStringList colors = QStringList::split( "|", splashTextColors ); - QColor c1, c2; - if ( colors.count() > 0 ) c1 = QColor( colors[0] ); - if ( colors.count() > 1 ) c2 = QColor( colors[1] ); - splash->setTextColors( c1, c2 ); - } - else { - splash->setTextColors( Qt::white, Qt::black ); - } - // ...set splash progress colors - if ( !splashProgressColors.isEmpty() ) { - QStringList colors = QStringList::split( "|", splashProgressColors ); - QColor c1, c2; - int gradType = QtxSplash::Vertical; - if ( colors.count() > 0 ) c1 = QColor( colors[0] ); - if ( colors.count() > 1 ) c2 = QColor( colors[1] ); - if ( colors.count() > 2 ) gradType = colors[2].toInt(); - splash->setProgressColors( c1, c2, gradType ); - } - // ...set splash text font - QFont f = splash->font(); - f.setBold( true ); - splash->setFont( f ); - // ...show splash initial status - if ( !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" ) ); - splashInfo.replace( QRegExp( "%C" ), QObject::tr( "ABOUT_COPYRIGHT" ) ); - splashInfo.replace( QRegExp( "\\\\n" ), "\n" ); - splash->message( splashInfo ); - } - // ...set 'hide on click' flag -#ifdef _DEBUG_ - splash->setHideOnClick( true ); -#endif - // ...show splash - splash->show(); - qApp->processEvents(); - } - } - - // Initialization - int result = -1; - - CORBA::ORB_var orb; - PortableServer::POA_var poa; - - SUIT_Session* aGUISession = 0; - SALOME_NamingService* _NS = 0; - GetInterfaceThread* guiThread = 0; - Session_ServerLauncher* myServerLauncher = 0; - - try { - // ...initialize Python (only once) - int _argc = 1; - char* _argv[] = {""}; - KERNEL_PYTHON::init_python( _argc,_argv ); - PyEval_RestoreThread( KERNEL_PYTHON::_gtstate ); - if ( !KERNEL_PYTHON::salome_shared_modules_module ) // import only once - KERNEL_PYTHON::salome_shared_modules_module = PyImport_ImportModule( "salome_shared_modules" ); - if ( !KERNEL_PYTHON::salome_shared_modules_module ) { - INFOS( "salome_shared_modules_module == NULL" ); - PyErr_Print(); - } - PyEval_ReleaseThread( KERNEL_PYTHON::_gtstate ); - - // ...create ORB, get RootPOA object, NamingService, etc. - ORB_INIT &init = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - int orbArgc = 1; - orb = init( orbArgc, argv ); - - // ...install SALOME thread event handler - SALOME_Event::GetSessionThread(); - - CORBA::Object_var obj = orb->resolve_initial_references( "RootPOA" ); - poa = PortableServer::POA::_narrow( obj ); - - PortableServer::POAManager_var pman = poa->the_POAManager(); - pman->activate() ; - INFOS( "pman->activate()" ); - - _NS = new SALOME_NamingService( orb ); - - result = 0; - } - catch ( SALOME_Exception& e ) { - INFOS( "run(): SALOME::SALOME_Exception is caught: "<name(); - INFOS ( "run(): CORBA exception of the kind : "<error(); - QString info = splash->message().isEmpty() ? "%1" : QString( "%1\n%2" ).arg( splash->message() ); - splash->setStatus( info.arg( "Activating desktop..." ) ); - } - - // Finalize embedded servers launcher - // ...block this thread until launcher is finished - _ServerLaunch.wait( &_GUIMutex ); - // ...unlock mutex 'cause it is no more needed - _GUIMutex.unlock(); - } - - if ( !result ) { - // Launch GUI activator - if ( isGUI ) { - // ...retrieve Session interface reference - CORBA::Object_var obj = _NS->Resolve( "/Kernel/Session" ); - SALOME::Session_var session = SALOME::Session::_narrow( obj ) ; - ASSERT ( ! CORBA::is_nil( session ) ); - // ...create GUI launcher - INFOS( "Session activated, Launch IAPP..." ); - guiThread = new GetInterfaceThread( session ); - } - - // GUI activation - // Allow multiple activation/deactivation of GUI - while ( true ) { - MESSAGE( "waiting wakeAll()" ); - _SessionStarted.wait( &_SessionMutex ); // to be reseased by Launch server thread when ready: - // atomic operation lock - unlock on mutex - // unlock mutex: serverThread runs, calls _ServerLaunch->wakeAll() - // this thread wakes up, and lock mutex - - _SessionMutex.unlock(); - - // SUIT_Session creation - aGUISession = new SALOME_Session(); - - // Load SalomeApp dynamic library - INFOS( "creation SUIT_Application" ); - SUIT_Application* aGUIApp = aGUISession->startApplication( "SalomeApp", 0, 0 ); - if ( aGUIApp ) - { - if ( !isFound( "noexcepthandler", argc, argv ) ) - _qappl.setHandler( aGUISession->handler() ); // after loading SalomeApp application - // aGUISession contains SalomeApp_ExceptionHandler - // Run GUI loop - MESSAGE( "run(): starting the main event loop" ); - - if ( splash ) - splash->finish( aGUIApp->desktop() ); - - result = _qappl.exec(); - - if ( splash ) - delete splash; - splash = 0; - - if ( result == SUIT_Session::FROM_GUI ) // desktop is closed by user from GUI - break; - } - - delete aGUISession; - aGUISession = 0; - - // Prepare _GUIMutex for a new GUI activation - _SessionMutex.lock(); - } - } - - // unlock Session mutex - _SessionMutex.unlock(); - - if ( myServerLauncher ) - myServerLauncher->KillAll(); // kill embedded servers - - delete aGUISession; - delete guiThread; - delete myServerLauncher; - delete _NS; - - LocalTraceBufferPool *bp1 = LocalTraceBufferPool::instance(); - LocalTraceBufferPool::deleteInstance(bp1); - - return result; -} diff --git a/src/Session/SalomeApp_Engine_i.cxx b/src/Session/SalomeApp_Engine_i.cxx deleted file mode 100644 index 813270515..000000000 --- a/src/Session/SalomeApp_Engine_i.cxx +++ /dev/null @@ -1,178 +0,0 @@ -// SalomeApp_Engine_i : implementation of SalomeApp_Engine.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 : SalomeApp_Engine_i.cxx -// Author : Alexander SLADKOV -// Module : SALOME -// $Header$ - -#include "SalomeApp_Engine_i.hxx" - -#include "SALOMEDS_Tool.hxx" - -#include "utilities.h" - -#include - -using namespace std; - -SalomeApp_Engine_i* SalomeApp_Engine_i::myInstance = NULL; - -/*! - Constructor -*/ -SalomeApp_Engine_i::SalomeApp_Engine_i() -{ - myInstance = this; -} - -/*! - Destructor -*/ -SalomeApp_Engine_i::~SalomeApp_Engine_i() -{ -} - -SALOMEDS::TMPFile* SalomeApp_Engine_i::Save (SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile) -{ - SALOMEDS::TMPFile_var aStreamFile = new SALOMEDS::TMPFile; - - cout << "SalomeApp_Engine_i::Save() isMultiFile = " << isMultiFile << endl; - if (CORBA::is_nil(theComponent) || CORBA::is_nil(theComponent->GetStudy())) - return aStreamFile._retn(); - - const int studyId = theComponent->GetStudy()->StudyId(); - cout << "SalomeApp_Engine_i::Save() - studyId = " << studyId << endl; - - // Get a temporary directory to store a file - //std::string aTmpDir = isMultiFile ? theURL : SALOMEDS_Tool::GetTmpDir(); - - if (myMap.count(studyId)) { - cout << "SalomeApp_Engine_i::Save() - myMap.count(studyId)" << endl; - MapOfListOfFiles mapOfListOfFiles = myMap[studyId]; - std::string componentName (theComponent->ComponentDataType()); - cout << "SalomeApp_Engine_i::Save() - componentName = " << componentName << endl; - ListOfFiles listOfFiles = mapOfListOfFiles[componentName]; - - // listOfFiles must contain temporary directory name in its first item - // and names of files (relatively the temporary directory) in the others - const int n = listOfFiles.size() - 1; - - if (n > 0) { // there are some files, containing persistent data of the component - std::string aTmpDir = listOfFiles[0]; - cout << "SalomeApp_Engine_i::Save() - aTmpDir = " << aTmpDir << endl; - - // Create a list to store names of created files - SALOMEDS::ListOfFileNames_var aSeq = new SALOMEDS::ListOfFileNames; - aSeq->length(n); - for (int i = 0; i < n; i++) - aSeq[i] = CORBA::string_dup(listOfFiles[i + 1].c_str()); - - // Convert a file to the byte stream - aStreamFile = SALOMEDS_Tool::PutFilesToStream(aTmpDir.c_str(), aSeq.in(), isMultiFile); - - // Remove the files and tmp directory, created by the component storage procedure - if (!isMultiFile) SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.c_str(), aSeq.in(), true); - } - } - - return aStreamFile._retn(); -} - -CORBA::Boolean SalomeApp_Engine_i::Load (SALOMEDS::SComponent_ptr theComponent, - const SALOMEDS::TMPFile& theFile, - const char* theURL, - bool isMultiFile) -{ - cout << "SalomeApp_Engine_i::Load() isMultiFile = " << isMultiFile << endl; - if (CORBA::is_nil(theComponent) || CORBA::is_nil(theComponent->GetStudy())) - return false; - - const int studyId = theComponent->GetStudy()->StudyId(); - - // Create a temporary directory for the component's data files - std::string aTmpDir = isMultiFile ? theURL : SALOMEDS_Tool::GetTmpDir(); - - // Convert the byte stream theStream to a files and place them in the tmp directory. - // The files and temporary directory must be deleted by the component loading procedure. - SALOMEDS::ListOfFileNames_var aSeq = - SALOMEDS_Tool::PutStreamToFiles(theFile, aTmpDir.c_str(), isMultiFile); - - // Store list of file names to be used by the component loading procedure - const int n = aSeq->length() + 1; - ListOfFiles listOfFiles (n); - listOfFiles[0] = aTmpDir; - for (int i = 1; i < n; i++) - listOfFiles[i] = std::string(aSeq[i - 1]); - - //MapOfListOfFiles mapOfListOfFiles; - //if (myMap.count(studyId)) - // mapOfListOfFiles = myMap[studyId]; - //std::string componentName (theComponent->ComponentDataType()); - //mapOfListOfFiles[componentName] = listOfFiles; - //myMap[studyId] = mapOfListOfFiles; - - SetListOfFiles(listOfFiles, studyId, theComponent->ComponentDataType()); - - return true; -} - -SalomeApp_Engine_i::ListOfFiles SalomeApp_Engine_i::GetListOfFiles (const int theStudyId, - const char* theComponentName) -{ - ListOfFiles aListOfFiles; - - if (myMap.count(theStudyId)) - { - MapOfListOfFiles mapOfListOfFiles = myMap[theStudyId]; - std::string componentName (theComponentName); - if (mapOfListOfFiles.count(componentName)) - aListOfFiles = mapOfListOfFiles[componentName]; - } - - return aListOfFiles; -} - -void SalomeApp_Engine_i::SetListOfFiles (const ListOfFiles theListOfFiles, - const int theStudyId, - const char* theComponentName) -{ - //if (!myMap.count(theStudyId)) { - // MapOfListOfFiles mapOfListOfFiles; - // myMap[theStudyId] = mapOfListOfFiles; - //} - - MapOfListOfFiles& mapOfListOfFiles = myMap[theStudyId]; - std::string componentName (theComponentName); - mapOfListOfFiles[componentName] = theListOfFiles; -} - -/*! - \return shared instance of engine -*/ -SalomeApp_Engine_i* SalomeApp_Engine_i::GetInstance() -{ - return myInstance; -} diff --git a/src/Session/SalomeApp_Engine_i.hxx b/src/Session/SalomeApp_Engine_i.hxx deleted file mode 100755 index abadbdd67..000000000 --- a/src/Session/SalomeApp_Engine_i.hxx +++ /dev/null @@ -1,95 +0,0 @@ -// SalomeApp_Engine_i : implementation of SalomeApp_Engine.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 : SalomeApp_Engine_i.hxx -// Author : Alexander SLADKOV -// Module : SALOME -// $Header$ - -#ifndef _SALOMEAPP_ENGINE_I_HXX_ -#define _SALOMEAPP_ENGINE_I_HXX_ - -#include - -#include "SALOME_Component_i.hxx" - -#include -#include - -#include -#include CORBA_SERVER_HEADER(SalomeApp_Engine) - -class SESSION_EXPORT SalomeApp_Engine_i: public POA_SalomeApp::Engine, - public Engines_Component_i -{ -public: - SalomeApp_Engine_i(); - ~SalomeApp_Engine_i(); - - SALOMEDS::TMPFile* Save( SALOMEDS::SComponent_ptr theComponent, - const char* theURL, - bool isMultiFile ); - - CORBA::Boolean Load( SALOMEDS::SComponent_ptr theComponent, - const SALOMEDS::TMPFile& theFile, - const char* theURL, - bool isMultiFile ); - -public: - typedef std::vector ListOfFiles; - - ListOfFiles GetListOfFiles (const int theStudyId, - const char* theComponentName); - - void SetListOfFiles (const ListOfFiles theListOfFiles, - const int theStudyId, - const char* theComponentName); - - static SalomeApp_Engine_i* GetInstance(); - -public: - // methods from SALOMEDS::Driver without implementation. Must be redefined because - // there is no default implementation of SALOMEDS::Driver interface - SALOMEDS::TMPFile* SaveASCII( SALOMEDS::SComponent_ptr, const char*, bool ) {return 0;} - CORBA::Boolean LoadASCII( SALOMEDS::SComponent_ptr, const SALOMEDS::TMPFile&, const char*, bool ) {return 0;} - void Close( SALOMEDS::SComponent_ptr ) {} - char* ComponentDataType() {return 0;} - char* IORToLocalPersistentID( SALOMEDS::SObject_ptr, const char*, CORBA::Boolean, CORBA::Boolean ) {return 0;} - char* LocalPersistentIDToIOR( SALOMEDS::SObject_ptr, const char*, CORBA::Boolean, CORBA::Boolean ) {return 0;} - bool CanPublishInStudy( CORBA::Object_ptr ) {return 0;} - SALOMEDS::SObject_ptr PublishInStudy(SALOMEDS::Study_ptr, SALOMEDS::SObject_ptr, CORBA::Object_ptr, const char* ) throw (SALOME::SALOME_Exception) {return 0;} - CORBA::Boolean CanCopy( SALOMEDS::SObject_ptr ) {return 0;} - SALOMEDS::TMPFile* CopyFrom( SALOMEDS::SObject_ptr, CORBA::Long& ) {return 0;} - CORBA::Boolean CanPaste( const char*, CORBA::Long ) {return 0;} - SALOMEDS::SObject_ptr PasteInto( const SALOMEDS::TMPFile&, CORBA::Long, SALOMEDS::SObject_ptr ) {return 0;} - -private: - typedef std::map MapOfListOfFiles; - typedef std::map MapOfMapOfListOfFiles; - MapOfMapOfListOfFiles myMap; - - static SalomeApp_Engine_i* myInstance; -}; - -#endif - diff --git a/src/Session/Session_ServerCheck.cxx b/src/Session/Session_ServerCheck.cxx deleted file mode 100644 index 3642f0407..000000000 --- a/src/Session/Session_ServerCheck.cxx +++ /dev/null @@ -1,509 +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: Session_ServerCheck.cxx -// Author: Vadim SANDLER - -#include "Session_ServerCheck.hxx" -#include - -#include -#include CORBA_CLIENT_HEADER(SALOME_Session) -#include CORBA_CLIENT_HEADER(SALOME_Registry) -#include CORBA_CLIENT_HEADER(SALOMEDS) -#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) -#include CORBA_CLIENT_HEADER(SALOME_Component) - -#include "Utils_ORB_INIT.hxx" -#include "Utils_SINGLETON.hxx" -#include "SALOME_NamingService.hxx" -#include "utilities.h" -#include "OpUtil.hxx" - -// Default settings -const int __DEFAULT__ATTEMPTS__ = 300; // number of checks attemtps - // can be overrided by CSF_RepeatServerRequest - // environment variable -const int __DEFAULT__DELAY__ = 50000; // delay between attempts (microseconds) - // can be overrided by CSF_DelayServerRequest - // environment variable - -/*! - Constructor -*/ -Session_ServerCheck::Session_ServerCheck( QMutex* mutex, QWaitCondition* wc ) - : QThread(), - myMutex( mutex ), - myWC( wc ), - myCheckCppContainer( false ), - myCheckPyContainer( false ), - myCheckSVContainer( false ), - myAttempts( __DEFAULT__ATTEMPTS__ ), - myDelay ( __DEFAULT__DELAY__ ) -{ - char* cenv; - // try to get nb of attempts from environment variable - if ( ( cenv = getenv( "CSF_RepeatServerRequest" ) ) && atoi( cenv ) > 0 ) - myAttempts = atoi( cenv ); - // try to get delay between attempts from environment variable - if ( ( cenv = getenv( "CSF_DelayServerRequest" ) ) && atoi( cenv ) > 0 ) - myDelay = atoi( cenv ); - - // check if it is necessary to wait containers - for ( int i = 1; i < qApp->argc(); i++ ) { - if ( !strcmp( qApp->argv()[i], "CPP" ) ) - myCheckCppContainer = true; - if ( !strcmp( qApp->argv()[i], "PY" ) ) - myCheckPyContainer = true; - if ( !strcmp( qApp->argv()[i], "SUPERV" ) ) - myCheckSVContainer = true; - } - - // start thread - start(); -} - -/*! - Destructor -*/ -Session_ServerCheck::~Session_ServerCheck() -{ -} - -/*! - Thread loop. Checnk SALOME servers and shows status message - in the splash screen. -*/ -void Session_ServerCheck::run() -{ - // automatic locker - class Locker - { - public: - QMutex* _m; - QWaitCondition* _wc; - Locker( QMutex* m, QWaitCondition* wc ) : _m( m ), _wc( wc ) - { - _m->lock(); - _m->unlock(); - } - ~Locker() - { - _wc->wakeAll(); - } - }; - - // lock mutex (ensure splash is shown) - Locker locker( myMutex, myWC ); - - // set initial splash status - QtxSplash* splash = QtxSplash::splash(); - - int cnt = 5; // base servers - if ( myCheckCppContainer ) cnt++; // + C++ container - if ( myCheckPyContainer ) cnt++; // + Python container - if ( myCheckSVContainer ) cnt++; // + supervision container - - splash->setProgress( 0, cnt * myAttempts ); - QString initialInfo = splash->message(); - QString info = initialInfo.isEmpty() ? "%1" : QString( "%1\n%2" ).arg( initialInfo ); - - // start check servers - int i; - int current = 0; - bool bOk; - QString error; - int argc = qApp->argc(); - char** argv = qApp->argv(); - - // 1. Check naming service - bOk = false; - for ( i = 0; i < myAttempts ; i++ ) { - QtxSplash::setStatus( info.arg( "Waiting for naming service..." ), current * myAttempts + i ); - 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" ); - CosNaming::NamingContext_var _root_context = CosNaming::NamingContext::_narrow( obj ); - if ( !CORBA::is_nil( _root_context ) ) { - bOk = true; - break; - } - } - catch( CORBA::COMM_FAILURE& ) { - MESSAGE( "CORBA::COMM_FAILURE: unable to contact the naming service" ); - } - catch( ... ) { - MESSAGE( "Unknown Exception: unable to contact the naming service" ); - } - } - if ( !bOk ) { - QtxSplash::error( "Unable to contact the naming service.\n%1" ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for naming service...OK" ), ++current * myAttempts ); - 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 ? 50000 : myDelay ); - try { - CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); - SALOME_NamingService &NS = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - NS.init_orb( orb ); - CORBA::Object_var obj = NS.Resolve( "/Registry" ); - Registry::Components_var registry = Registry::Components::_narrow( obj ); - if ( !CORBA::is_nil( registry ) ) { - MESSAGE( "/Registry is found" ); - registry->ping(); - MESSAGE( "Registry was activated" ); - bOk = true; - break; - } - } - catch ( ServiceUnreachable& ) { - MESSAGE( "Caught exception: Naming Service unreachable." ); - error = "Naming service unreachable"; - } - catch ( CORBA::COMM_FAILURE& ) { - MESSAGE( "Caught CORBA::SystemException CommFailure." ); - error = "Caught CORBA::SystemException CommFailure."; - } - catch ( CORBA::SystemException& ) { - MESSAGE( "Caught CORBA::SystemException." ); - error = "Caught CORBA::SystemException."; - } - catch ( CORBA::Exception& ) { - MESSAGE( "Caught CORBA::Exception." ); - error = "Caught CORBA::Exception."; - } - catch (...) { - MESSAGE( "Caught unknown exception." ); - error = "Caught unknown exception."; - } - } - if ( !bOk ) { - QtxSplash::error( QString( "Registry server is not found.\n%1" ).arg ( error ) ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for registry server...OK" ), ++current * myAttempts ); - 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 ? 50000 : myDelay ); - try { - CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); - SALOME_NamingService &NS = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - NS.init_orb( orb ); - CORBA::Object_var obj = NS.Resolve( "/myStudyManager" ); - SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow( obj ); - if ( !CORBA::is_nil( studyManager ) ) { - MESSAGE( "/myStudyManager is found" ); - studyManager->ping(); - MESSAGE( "StudyManager was activated" ); - bOk = true; - break; - } - } - catch ( ServiceUnreachable& ) { - MESSAGE( "Caught exception: Naming Service unreachable." ); - error = "Naming service unreachable"; - } - catch ( CORBA::COMM_FAILURE& ) { - MESSAGE( "Caught CORBA::SystemException CommFailure." ); - error = "Caught CORBA::SystemException CommFailure."; - } - catch ( CORBA::SystemException& ) { - MESSAGE( "Caught CORBA::SystemException." ); - error = "Caught CORBA::SystemException."; - } - catch ( CORBA::Exception& ) { - MESSAGE( "Caught CORBA::Exception." ); - error = "Caught CORBA::Exception."; - } - catch (...) { - MESSAGE( "Caught unknown exception." ); - error = "Caught unknown exception."; - } - } - if ( !bOk ) { - QtxSplash::error( QString( "Study server is not found.\n%1" ).arg ( error ) ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for study server...OK" ), ++current * myAttempts ); - 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 ? 50000 : myDelay ); - try { - CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); - SALOME_NamingService &NS = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - NS.init_orb( orb ); - CORBA::Object_var obj = NS.Resolve( "/Kernel/ModulCatalog" ); - SALOME_ModuleCatalog::ModuleCatalog_var catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow( obj ); - if ( !CORBA::is_nil( catalog ) ){ - MESSAGE( "/Kernel/ModulCatalog is found" ); - catalog->ping(); - MESSAGE( "ModuleCatalog was activated" ); - bOk = true; - break; - } - } - catch ( ServiceUnreachable& ) { - MESSAGE( "Caught exception: Naming Service unreachable." ); - error = "Naming service unreachable"; - } - catch ( CORBA::COMM_FAILURE& ) { - MESSAGE( "Caught CORBA::SystemException CommFailure." ); - error = "Caught CORBA::SystemException CommFailure."; - } - catch ( CORBA::SystemException& ) { - MESSAGE( "Caught CORBA::SystemException." ); - error = "Caught CORBA::SystemException."; - } - catch ( CORBA::Exception& ) { - MESSAGE( "Caught CORBA::Exception." ); - error = "Caught CORBA::Exception."; - } - catch (...) { - MESSAGE( "Caught unknown exception." ); - error = "Caught unknown exception."; - } - } - if ( !bOk ) { - QtxSplash::error( QString( "Module catalogue server is not found.\n%1" ).arg ( error ) ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for module catalogue server...OK" ), ++current * myAttempts ); - 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 ? 50000 : myDelay ); - try { - CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); - SALOME_NamingService &NS = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - NS.init_orb( orb ); - CORBA::Object_var obj = NS.Resolve( "/Kernel/Session" ); - SALOME::Session_var session = SALOME::Session::_narrow( obj ); - if ( !CORBA::is_nil( session ) ) { - MESSAGE( "/Kernel/Session is found" ); - session->ping(); - MESSAGE( "SALOME_Session was activated" ); - bOk = true; - break; - } - } - catch ( ServiceUnreachable& ) { - MESSAGE( "Caught exception: Naming Service unreachable." ); - error = "Naming service unreachable"; - } - catch ( CORBA::COMM_FAILURE& ) { - MESSAGE( "Caught CORBA::SystemException CommFailure." ); - error = "Caught CORBA::SystemException CommFailure."; - } - catch ( CORBA::SystemException& ) { - MESSAGE( "Caught CORBA::SystemException." ); - error = "Caught CORBA::SystemException."; - } - catch ( CORBA::Exception& ) { - MESSAGE( "Caught CORBA::Exception." ); - error = "Caught CORBA::Exception."; - } - catch (...) { - MESSAGE( "Caught unknown exception." ); - error = "Caught unknown exception."; - } - } - if ( !bOk ) { - QtxSplash::error( QString( "Session server is not found.\n%1" ).arg ( error ) ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for session server...OK" ), ++current * myAttempts ); - 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 ? 50000 : myDelay ); - try { - CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); - SALOME_NamingService &NS = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - NS.init_orb( orb ); - QString containerName = QString( "/Containers/%1/FactoryServer" ).arg( GetHostname().c_str() ); - CORBA::Object_var obj = NS.Resolve( containerName.latin1() ); - Engines::Container_var FScontainer = Engines::Container::_narrow( obj ); - if ( !CORBA::is_nil( FScontainer ) ) { - MESSAGE( containerName.latin1() << " is found" ); - FScontainer->ping(); - MESSAGE( "FactoryServer container was activated" ); - bOk = true; - break; - } - } - catch ( ServiceUnreachable& ) { - MESSAGE( "Caught exception: Naming Service unreachable." ); - error = "Naming service unreachable"; - } - catch ( CORBA::COMM_FAILURE& ) { - MESSAGE( "Caught CORBA::SystemException CommFailure." ); - error = "Caught CORBA::SystemException CommFailure."; - } - catch ( CORBA::SystemException& ) { - MESSAGE( "Caught CORBA::SystemException." ); - error = "Caught CORBA::SystemException."; - } - catch ( CORBA::Exception& ) { - MESSAGE( "Caught CORBA::Exception." ); - error = "Caught CORBA::Exception."; - } - catch (...) { - MESSAGE( "Caught unknown exception." ); - error = "Caught unknown exception."; - } - } - if ( !bOk ) { - QtxSplash::error( QString( "C++ container is not found.\n%1" ).arg ( error ) ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for C++ container...OK" ), ++current * myAttempts ); - QThread::usleep( 30000 ); - } - - // 7. Check Python container - if ( myCheckPyContainer ) { - bOk = false; - for ( i = 0; i < myAttempts ; i++ ) { - QtxSplash::setStatus( info.arg( "Waiting for Python container..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 50000 : myDelay ); - try { - CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); - SALOME_NamingService &NS = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - NS.init_orb( orb ); - QString containerName = QString( "/Containers/%1/FactoryServerPy" ).arg( GetHostname().c_str() ); - CORBA::Object_var obj = NS.Resolve( containerName.latin1() ); - Engines::Container_var FSPcontainer = Engines::Container::_narrow( obj ); - if ( !CORBA::is_nil( FSPcontainer ) ) { - MESSAGE( containerName.latin1() << " is found" ); - FSPcontainer->ping(); - MESSAGE("FactoryServerPy container was activated"); - bOk = true; - break; - } - } - catch ( ServiceUnreachable& ) { - MESSAGE( "Caught exception: Naming Service unreachable." ); - error = "Naming service unreachable"; - } - catch ( CORBA::COMM_FAILURE& ) { - MESSAGE( "Caught CORBA::SystemException CommFailure." ); - error = "Caught CORBA::SystemException CommFailure."; - } - catch ( CORBA::SystemException& ) { - MESSAGE( "Caught CORBA::SystemException." ); - error = "Caught CORBA::SystemException."; - } - catch ( CORBA::Exception& ) { - MESSAGE( "Caught CORBA::Exception." ); - error = "Caught CORBA::Exception."; - } - catch (...) { - MESSAGE( "Caught unknown exception." ); - error = "Caught unknown exception."; - } - } - if ( !bOk ) { - QtxSplash::error( QString( "Python container is not found.\n%1" ).arg ( error ) ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for Python container...OK" ), ++current * myAttempts ); - QThread::usleep( 30000 ); - } - - // 8. Check supervision container - if ( myCheckSVContainer ) { - bOk = false; - for ( i = 0; i < myAttempts ; i++ ) { - QtxSplash::setStatus( info.arg( "Waiting for Supervision container..." ), current * myAttempts + i ); - QThread::usleep( i == 0 ? 50000 : myDelay ); - try { - CORBA::ORB_var orb = CORBA::ORB_init( argc, argv ); - SALOME_NamingService &NS = *SINGLETON_::Instance(); - ASSERT( SINGLETON_::IsAlreadyExisting() ); - NS.init_orb( orb ); - QString containerName = QString( "/Containers/%1/SuperVisionContainer" ).arg( GetHostname().c_str() ); - CORBA::Object_var obj = NS.Resolve( containerName.latin1() ); - Engines::Container_var SVcontainer = Engines::Container::_narrow( obj ); - if ( !CORBA::is_nil( SVcontainer ) ) { - MESSAGE( containerName.latin1() << " is found" ); - SVcontainer->ping(); - MESSAGE("SuperVisionContainer container was activated"); - bOk = true; - break; - } - } - catch ( ServiceUnreachable& ) { - MESSAGE( "Caught exception: Naming Service unreachable." ); - error = "Naming service unreachable"; - } - catch ( CORBA::COMM_FAILURE& ) { - MESSAGE( "Caught CORBA::SystemException CommFailure." ); - error = "Caught CORBA::SystemException CommFailure."; - } - catch ( CORBA::SystemException& ) { - MESSAGE( "Caught CORBA::SystemException." ); - error = "Caught CORBA::SystemException."; - } - catch ( CORBA::Exception& ) { - MESSAGE( "Caught CORBA::Exception." ); - error = "Caught CORBA::Exception."; - } - catch (...) { - MESSAGE( "Caught unknown exception." ); - error = "Caught unknown exception."; - } - } - if ( !bOk ) { - QtxSplash::error( QString( "Supervision container is not found.\n%1" ).arg ( error ) ); - return; - } - QtxSplash::setStatus( info.arg( "Waiting for Supervision container...OK" ), ++current * myAttempts ); - QThread::usleep( 30000 ); - } - // clear splash status - splash->setProgress( 0, 0 ); - splash->setStatus( initialInfo ); -} diff --git a/src/Session/Session_ServerCheck.hxx b/src/Session/Session_ServerCheck.hxx deleted file mode 100644 index 8de6a6d41..000000000 --- a/src/Session/Session_ServerCheck.hxx +++ /dev/null @@ -1,58 +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: Session_ServerCheck.hxx -// Author: Vadim SANDLER - -#if !defined(SESSION_SERVERCHECK_HXX) -#define SESSION_SERVERCHECK_HXX - -#include - -#include -#include - -class QMutex; -class QWaitCondition; - -/*! - Class Session_ServerCheck : check SALOME servers -*/ -class SESSION_EXPORT Session_ServerCheck : public QThread -{ -public: - // constructor - Session_ServerCheck( QMutex*, QWaitCondition* ); - // destructor - virtual ~Session_ServerCheck(); - - // thread loop - virtual void run() ; - -private: - QMutex* myMutex; // splash mutex - QWaitCondition* myWC; // splash wait condition - - bool myCheckCppContainer; // flag : check C++ container ? - bool myCheckPyContainer; // flag : check Python container ? - bool myCheckSVContainer; // flag : check supervision container ? - int myAttempts; // number of checks attemtps to get response from server - int myDelay; // delay between two attempts in microseconds -}; - -#endif diff --git a/src/Session/Session_ServerLauncher.cxx b/src/Session/Session_ServerLauncher.cxx deleted file mode 100755 index 0604c7731..000000000 --- a/src/Session/Session_ServerLauncher.cxx +++ /dev/null @@ -1,231 +0,0 @@ -// SALOME Session : implementation of Session_ServerLauncher.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 -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : Session_ServerLauncher.xx -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -#include "Session_ServerLauncher.hxx" - -#include "Utils_SALOME_Exception.hxx" -#include "utilities.h" -using namespace std; -/*! - default constructor not for use - */ -Session_ServerLauncher::Session_ServerLauncher() -{ - ASSERT(0); // must not be called -} - -/*! - constructor -*/ -Session_ServerLauncher::Session_ServerLauncher(int argc, - char ** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - QMutex *GUIMutex, - QWaitCondition *ServerLaunch, - QMutex *SessionMutex, - QWaitCondition *SessionStarted) -{ - _argc = argc; - _argv = argv; - _orb = CORBA::ORB::_duplicate(orb); - _root_poa = PortableServer::POA::_duplicate(poa); - _GUIMutex = GUIMutex; - _ServerLaunch = ServerLaunch; - _SessionMutex = SessionMutex; - _SessionStarted = SessionStarted; - - // start thread - start(); -} - -/*! - destructor -*/ -Session_ServerLauncher::~Session_ServerLauncher() -{ -} - -/*! - Check args and activate servers -*/ -void Session_ServerLauncher::run() -{ - // wait until main thread is ready - _GUIMutex->lock(); // ... lock mutex (it is unlocked my calling thread - // wait condition's wait(mutex) - _GUIMutex->unlock(); // ... and unlock it 'cause it is not more needed - - // wake main thread - _ServerLaunch->wakeAll(); - - CheckArgs(); - ActivateAll(); - - // wait until main thread is ready - _GUIMutex->lock(); // ... lock mutex (it is unlocked my calling thread - // wait condition's wait(mutex) - _GUIMutex->unlock(); // ... and unlock it 'cause it is not more needed - - // wake main thread - _ServerLaunch->wakeAll(); - - // run ORB - _orb->run(); // this thread waits, during omniORB process events -} - -/*! - controls and dispatchs arguments given with command -*/ -void Session_ServerLauncher::CheckArgs() -{ - int argState = 0; - ServArg aServArg(0,0,0); - _argCopy.reserve(_argc); - for (int iarg=0; iarg <_argc; iarg++) - { - SCRUTE(iarg); - SCRUTE(_argv[iarg]); - _argCopy.push_back(_argv[iarg]); - switch (argState) - { - case 0: // looking for "--with" - { - if (strcmp(_argv[iarg],"--with")==0) - argState = 1; - break; - } - case 1: // looking for server type - { - for (int i=0; i::iterator itServ; - for (itServ = _argServToLaunch.begin(); itServ !=_argServToLaunch.end(); itServ++) - { - int argc = 2 + (*itServ)._lastArg - (*itServ)._firstArg; - char** argv = new char*[argc+1]; - argv[argc]=0; // for Engines_Container_i constructor... - int servType = (*itServ)._servType; - argv[0]=strdup(Session_ServerThread::_serverTypes[servType]); - if (argc>1) - { - for (int i=0; iInit(); - free( argv[0] ); - delete[] argv; - } - - // Always launch Session Server - std::cout << "*** activating [ SESSION ] " << std::endl; - - int argc=1; - char** argv = new char*[argc]; - argv[0] = "Session"; - Session_SessionThread* aServerThread - = new Session_SessionThread(argc, argv, _orb,_root_poa,_SessionMutex,_SessionStarted); - _serverThreads.push_front(aServerThread); - aServerThread->Init(); - delete[] argv; -} - -/*! - Destruction des classes serveur dans l'ordre inverse de creation -*/ -void Session_ServerLauncher::KillAll() -{ - MESSAGE("Session_ServerLauncher::KillAll()"); - list::reverse_iterator itServ; - for (itServ = _serverThreads.rbegin(); itServ !=_serverThreads.rend(); itServ++) - { - delete (*itServ); - } -} diff --git a/src/Session/Session_ServerLauncher.hxx b/src/Session/Session_ServerLauncher.hxx deleted file mode 100755 index b3773adf1..000000000 --- a/src/Session/Session_ServerLauncher.hxx +++ /dev/null @@ -1,93 +0,0 @@ -// SALOME Session : implementation of Session_ServerLauncher.hxx -// -// 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 : Session_ServerLauncher.hxx -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -#ifndef _SESSION_SERVERLAUNCHER_HXX_ -#define _SESSION_SERVERLAUNCHER_HXX_ - -#include - -#include "Session_ServerThread.hxx" - -#include -#include -#include -#include -#include -#include - -using namespace std; - -class SESSION_EXPORT ServArg - { - public: - int _servType; - int _firstArg; - int _lastArg; - inline ServArg(int servType=0, int firstArg=0, int lastArg=0); -}; - -inline ServArg::ServArg(int servType, int firstArg, int lastArg): - _servType(servType),_firstArg(firstArg),_lastArg(lastArg) -{} - -class SESSION_EXPORT Session_ServerLauncher: public QThread -{ -public: - Session_ServerLauncher(); - Session_ServerLauncher(int argc, - char ** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - QMutex *GUIMutex, - QWaitCondition *ServerLaunch, - QMutex *SessionMutex, - QWaitCondition *SessionStarted); - virtual ~Session_ServerLauncher(); - void run(); - void KillAll(); - -protected: - void CheckArgs(); - void ActivateAll(); - -private: - int _argc; - char ** _argv; - CORBA::ORB_var _orb; - PortableServer::POA_var _root_poa; - QMutex* _GUIMutex; - QWaitCondition* _ServerLaunch; - QMutex* _SessionMutex; - QWaitCondition* _SessionStarted; - list _argServToLaunch; - vector _argCopy; - list _serverThreads; -}; - -#endif - diff --git a/src/Session/Session_ServerThread.cxx b/src/Session/Session_ServerThread.cxx deleted file mode 100755 index 1407cf4a2..000000000 --- a/src/Session/Session_ServerThread.cxx +++ /dev/null @@ -1,515 +0,0 @@ -// 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 -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// -// -// -// File : Session_ServerThread.cxx -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -// #include -// #include CORBA_SERVER_HEADER(SALOME_Session) -// #include CORBA_SERVER_HEADER(SALOMEDS) - -#include "Session_ServerThread.hxx" - -#include "SALOME_Container_i.hxx" -#include "SALOME_ContainerManager.hxx" -#include -#include -#include "SALOME_ModuleCatalog_impl.hxx" -#include "RegistryService.hxx" -#include "Session_Session_i.hxx" -#include "SalomeApp_Engine_i.hxx" - -#include "Utils_ORB_INIT.hxx" -#include "Utils_SINGLETON.hxx" -#include "Utils_SALOME_Exception.hxx" -#include "OpUtil.hxx" -#include "NamingService_WaitForServerReadiness.hxx" -#include "utilities.h" - -#include -#include - -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", - "ContainerManager"}; - -/*! - default constructor not for use -*/ -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) -{ - //MESSAGE("Session_ServerThread Constructor " << argv[0]); - _argc = argc; - _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; - _NS = new SALOME_NamingService(_orb); // one instance per server to limit - // multi thread coherence problems -} - -/*! - 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]); - - for (int i=0; i<_argc; i++) SCRUTE(_argv[i]); -#ifndef WNT - for (int i=0; iactivate_object (Catalogue_i); - - CORBA::Object_ptr myCata = Catalogue_i->_this(); - _NS->Register(myCata ,"/Kernel/ModulCatalog"); - } - catch(CORBA::SystemException&) - { - INFOS( "Caught CORBA::SystemException." ); - } - catch(CORBA::Exception&) - { - INFOS( "Caught CORBA::Exception." ); - } - catch(omniORB::fatalException& fe) - { - INFOS( "Caught omniORB::fatalException:" ); - INFOS( " file: " << fe.file() ); - INFOS( " line: " << fe.line() ); - INFOS( " mesg: " << fe.errmsg() ); - } - catch(...) - { - INFOS( "Caught unknown exception." ); - } -} - -void Session_ServerThread::ActivateSALOMEDS(int argc, - char ** argv) -{ - try - { - INFOS("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. - - ClientFactory::createStudyManager(_orb,_root_poa); - } - catch(CORBA::SystemException&) - { - INFOS( "Caught CORBA::SystemException." ); - } - catch(CORBA::Exception&) - { - INFOS( "Caught CORBA::Exception." ); - } - catch(omniORB::fatalException& fe) - { - INFOS( "Caught omniORB::fatalException:" ); - INFOS( " file: " << fe.file() ); - INFOS( " line: " << fe.line() ); - INFOS( " mesg: " << fe.errmsg() ); - } - catch(...) - { - INFOS( "Caught unknown exception." ); - } -} - -void Session_ServerThread::ActivateRegistry(int argc, - char ** argv) -{ - INFOS("Registry thread started"); - SCRUTE(argc); - if( argc<3 ) - { - INFOS("you must provide the Salome session name when you call SALOME_Registry_Server"); - throw CommException("you must provide the Salome session name when you call SALOME_Registry_Server"); - } - const char *ptrSessionName=0; - - int k=0 ; - for ( k=1 ; k0); - const char *registryName = "Registry"; - Registry::Components_var varComponents; - try - { - RegistryService *ptrRegistry = SINGLETON_::Instance(); - ptrRegistry->SessionName( ptrSessionName ); - 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*/ ) - { - } - string absoluteName = string("/") + registryName; - _NS->Register( varComponents , absoluteName.c_str() ); - MESSAGE("On attend les requetes des clients"); - } - catch( const SALOME_Exception &ex ) - { - INFOS( "Communication Error : " << ex.what() ); - ASSERT(0); - } -} - -void Session_ServerThread::ActivateContainerManager(int argc, - char ** argv) -{ - try - { - PortableServer::POA_var root_poa=PortableServer::POA::_the_root_poa(); - cout << "ActivateContainerManager ......!!!! " << endl; - SALOME_ContainerManager * myContainer - = new SALOME_ContainerManager(_orb); - } - catch(CORBA::SystemException&) - { - INFOS("Caught CORBA::SystemException."); - } - catch(PortableServer::POA::WrongPolicy&) - { - INFOS("Caught CORBA::WrongPolicyException."); - } - catch(PortableServer::POA::ServantAlreadyActive&) - { - INFOS("Caught CORBA::ServantAlreadyActiveException"); - } - catch(CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch(...) - { - INFOS("Caught unknown exception."); - } -} - -void Session_ServerThread::ActivateContainer(int argc, - char ** argv) -{ - try - { - INFOS("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) - } - 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()"); - } - - char *containerName = ""; - 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&) - { - INFOS("Caught CORBA::SystemException."); - } - catch(PortableServer::POA::WrongPolicy&) - { - INFOS("Caught CORBA::WrongPolicyException."); - } - catch(PortableServer::POA::ServantAlreadyActive&) - { - INFOS("Caught CORBA::ServantAlreadyActiveException"); - } - catch(CORBA::Exception&) - { - INFOS("Caught CORBA::Exception."); - } - catch(...) - { - INFOS("Caught unknown exception."); - } -} - -void Session_ServerThread::ActivateEngine(int /*argc*/, char ** /*argv*/) -{ - try - { - INFOS("SalomeApp_Engine thread started"); - SalomeApp_Engine_i* anEngine = new SalomeApp_Engine_i(); - // declare variable and get value for them to avoid compilation warning of unused variable - // this variable is necessary to avoid memory leak of memory allocated in corba - PortableServer::ObjectId_var id = 0; - id = _root_poa->activate_object( anEngine ); - ///*PortableServer::ObjectId_var id = */_root_poa->activate_object( anEngine ); - INFOS("poa->activate_object( SalomeApp_Engine )"); - - CORBA::Object_var obj = anEngine->_this(); - _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) -{ - MESSAGE("Session_ServerThread::ActivateSession() not implemented!"); -} - -/*! - 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 ) -{ -} - -/*! - destructor -*/ -Session_SessionThread::~Session_SessionThread() -{ -} - -void Session_SessionThread::ActivateSession(int argc, - 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."); - } -} diff --git a/src/Session/Session_ServerThread.hxx b/src/Session/Session_ServerThread.hxx deleted file mode 100755 index 04ded4d2e..000000000 --- a/src/Session/Session_ServerThread.hxx +++ /dev/null @@ -1,96 +0,0 @@ -// SALOME Session : implementation of Session_ServerThread.hxx -// -// 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 : Session_ServerThread.hxx -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -#ifndef _SESSION_SERVERTHREAD_HXX_ -#define _SESSION_SERVERTHREAD_HXX_ - -#include - -#include -#include - -#include "SALOME_NamingService.hxx" -#include - -using namespace std; - -void WaitForServerReadiness(string serverName); - - -class SESSION_EXPORT Session_ServerThread -{ -public: - static const int NB_SRV_TYP; - static const char* _serverTypes[]; - - Session_ServerThread(); - Session_ServerThread(int argc, - char ** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa); - virtual ~Session_ServerThread(); - void Init(); -protected: - void ActivateModuleCatalog ( int argc, char ** argv ); - void ActivateSALOMEDS ( int argc, char ** argv ); - void ActivateRegistry ( int argc, char ** argv ); - void ActivateContainer ( int argc, char ** argv ); - virtual void ActivateSession ( int argc, char ** argv ); - void ActivateEngine ( int argc, char ** argv ); - void ActivateContainerManager( int argc, char ** argv ); -protected: - int _argc; - char ** _argv; - int _servType; - CORBA::ORB_var _orb; - PortableServer::POA_var _root_poa; - SALOME_NamingService * _NS; -}; - - -class SESSION_EXPORT Session_SessionThread : public Session_ServerThread -{ -public: - Session_SessionThread() {} - Session_SessionThread(int argc, - char** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - QMutex* GUIMutex, - QWaitCondition* GUILauncher); - virtual ~Session_SessionThread(); - -protected: - virtual void ActivateSession ( int argc, char ** argv ); -private: - QMutex* _GUIMutex; - QWaitCondition* _GUILauncher; -}; - -#endif - diff --git a/src/Session/Session_Session_i.cxx b/src/Session/Session_Session_i.cxx deleted file mode 100755 index ee239674e..000000000 --- a/src/Session/Session_Session_i.cxx +++ /dev/null @@ -1,223 +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 : SALOME_Session_i.cxx -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -#include "utilities.h" - -#include "Session_Session_i.hxx" - -#include "SALOME_NamingService.hxx" -#include "SALOME_Event.hxx" - -#include "SUIT_Session.h" -#include "SUIT_Application.h" - -#include - -// Open CASCADE Includes -#include -#include -#include - -using namespace std; - -/*! - constructor -*/ -SALOME_Session_i::SALOME_Session_i(int argc, - char ** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - QMutex* GUIMutex, - QWaitCondition* GUILauncher) -{ - _argc = argc ; - _argv = argv ; - _isGUI = FALSE ; - _runningStudies= 0 ; - _orb = CORBA::ORB::_duplicate(orb) ; - _poa = PortableServer::POA::_duplicate(poa) ; - _GUIMutex = GUIMutex; - _GUILauncher = GUILauncher; - //MESSAGE("constructor end"); -} - -/*! - returns Visu component -*/ -Engines::Component_ptr SALOME_Session_i::GetComponent(const char* theLibraryName) -{ - typedef Engines::Component_ptr TGetImpl(CORBA::ORB_ptr, - PortableServer::POA_ptr, - SALOME_NamingService*,QMutex*); - OSD_SharedLibrary aSharedLibrary(const_cast(theLibraryName)); - if(aSharedLibrary.DlOpen(OSD_RTLD_LAZY)) - if(OSD_Function anOSDFun = aSharedLibrary.DlSymb("GetImpl")) - return ((TGetImpl (*)) anOSDFun)(_orb,_poa,_NS,_GUIMutex); - return Engines::Component::_nil(); -} - -/*! - destructor -*/ -SALOME_Session_i::~SALOME_Session_i() -{ - //MESSAGE("destructor end"); -} - -/*! - tries to find the Corba Naming Service and to register the session, - gives naming service interface to _IAPPThread -*/ -void SALOME_Session_i::NSregister() -{ - SALOME::Session_ptr pSession = SALOME::Session::_narrow(_this()); - try - { - _NS = new SALOME_NamingService(_orb); - _NS->Register(pSession, "/Kernel/Session"); - } - catch (ServiceUnreachable&) - { - INFOS("Caught exception: Naming Service Unreachable"); - exit(1) ; - } - catch (...) - { - INFOS("Caught unknown exception from Naming Service"); - } - //MESSAGE("Session registered in Naming Service"); -} - -/*! - Launches the GUI if there is none. - The Corba method is oneway (corba client does'nt wait for GUI completion) -*/ -void SALOME_Session_i::GetInterface() -{ - _GUIMutex->lock(); - _GUIMutex->unlock(); - if ( !SUIT_Session::session() ) - { - _GUILauncher->wakeAll(); - MESSAGE("SALOME_Session_i::GetInterface() called, starting GUI...") - } -} - -/*! - Kills the session if there are no active studies nore GUI -*/ -class CloseEvent : public SALOME_Event -{ -public: - virtual void Execute() { - SUIT_Session* session = SUIT_Session::session(); - session->closeSession( SUIT_Session::DONT_SAVE ); - //if ( SUIT_Application::getDesktop() ) - // QAD_Application::getDesktop()->closeDesktop( true ); - } -}; - -/*! - Processes event to close session -*/ -void SALOME_Session_i::StopSession() -{ - ProcessVoidEvent( new CloseEvent() ); -} - -/*! - Send a SALOME::StatSession structure (see idl) to the client - (number of running studies and presence of GUI) -*/ -class QtLock -{ -public: - QtLock() { if ( qApp ) qApp->lock(); } - ~QtLock() { if ( qApp ) qApp->unlock(); } -}; - - -SALOME::StatSession SALOME_Session_i::GetStatSession() -{ - // update Session state - _GUIMutex->lock(); - - _runningStudies = 0; - { - QtLock lock; - _isGUI = SUIT_Session::session(); - if ( _isGUI && SUIT_Session::session()->activeApplication() ) - _runningStudies = SUIT_Session::session()->activeApplication()->getNbStudies(); - } - - _GUIMutex->unlock(); - - // getting stat info - SALOME::StatSession_var myStats = new SALOME::StatSession ; - if (_runningStudies) - myStats->state = SALOME::running ; - else - myStats->state = SALOME::asleep ; - myStats->runningStudies = _runningStudies ; - myStats->activeGUI = _isGUI ; - return myStats._retn() ; -} - -CORBA::Long SALOME_Session_i::GetActiveStudyId() -{ - long aStudyId=-1; - if ( SUIT_Session::session() && SUIT_Session::session()->activeApplication() ) { - if ( SUIT_Session::session()->activeApplication()->activeStudy() ) // mkr : IPAL12128 - aStudyId = SUIT_Session::session()->activeApplication()->activeStudy()->id(); - } - return aStudyId; -} - -bool SALOME_Session_i::restoreVisualState(CORBA::Long theSavePoint) -{ - class TEvent: public SALOME_Event { - int _savePoint; - public: - TEvent(int savePoint) { _savePoint = savePoint; } - virtual void Execute() { - SUIT_Study* study = SUIT_Session::session()->activeApplication()->activeStudy(); - if ( study ) { - study->restoreState(_savePoint); - } - } - }; - - if(SUIT_Session::session() && SUIT_Session::session()->activeApplication() ) { - SUIT_Study* study = SUIT_Session::session()->activeApplication()->activeStudy(); - if(!study) SUIT_Session::session()->activeApplication()->createEmptyStudy(); - ProcessVoidEvent( new TEvent(theSavePoint) ); - return true; - } - - return false; -} diff --git a/src/Session/Session_Session_i.hxx b/src/Session/Session_Session_i.hxx deleted file mode 100755 index 3b06ab27f..000000000 --- a/src/Session/Session_Session_i.hxx +++ /dev/null @@ -1,91 +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 : Session_Session_i.hxx -// Author : Paul RASCLE, EDF -// Module : SALOME -// $Header$ - -#ifndef _SESSION_SESSION_I_HXX_ -#define _SESSION_SESSION_I_HXX_ - -#include - -#include - -#include -#include CORBA_SERVER_HEADER(SALOME_Component) -#include CORBA_SERVER_HEADER(SALOME_Session) -class SALOME_NamingService; - -class SESSION_EXPORT SALOME_Session_i: public virtual POA_SALOME::Session, - public virtual PortableServer::RefCountServantBase -{ -public: - SALOME_Session_i(int argc, - char ** argv, - CORBA::ORB_ptr orb, - PortableServer::POA_ptr poa, - QMutex* GUIMutex, - QWaitCondition* GUILauncher); - ~SALOME_Session_i(); - - //! Launch Graphical User Interface - void GetInterface(); - - //! Return VISU component - Engines::Component_ptr GetComponent(const char* theLibraryName); - - //! Stop the Session (must be idle): kill servant & server - void StopSession(); - - //! Get session state - SALOME::StatSession GetStatSession(); - - //! Register the servant to Naming Service - void NSregister(); - - CORBA::Long GetActiveStudyId(); - - void ping(){}; - - //! Restors a visual state of the study at theSavePoint - bool restoreVisualState(CORBA::Long theSavePoint); - -protected: - - //! Naming service interface - SALOME_NamingService *_NS; - - int _argc ; - char **_argv; - CORBA::Boolean _isGUI ; - QMutex* _GUIMutex ; - QWaitCondition* _GUILauncher; - int _runningStudies ; - CORBA::ORB_var _orb; - PortableServer::POA_var _poa; -}; - -#endif - 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/Style/Makefile.in b/src/Style/Makefile.in deleted file mode 100644 index 445b89d3a..000000000 --- a/src/Style/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 : 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)/bin/salome/styles directory and -# make link to the libSalomeStyle.so there -PLUGINDIR = $(top_builddir)/bin/salome/styles -PLUGIN_LIB_LA = $(patsubst %.la, $(PLUGINDIR)/%.so, $(filter %.la, $(LIB))) -PLUGIN_LIB_SO = $(patsubst %.so, $(PLUGINDIR)/%.so, $(filter %.so, $(LIB))) - -lib: $(LIB) $(PLUGINDIR) $(PLUGIN_LIB_LA) $(PLUGIN_LIB_SO) - -$(PLUGINDIR): - mkdir -p $@ - -$(PLUGIN_LIB_LA): $(PLUGINDIR)/%.so: %.la - -$(RM) $@ - ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<) $@ || true - ln -sf $(patsubst %.la, %.so, $(CURDIR)/.libs/$<).0 $@.0 || true - -$(PLUGIN_LIB_SO): $(PLUGINDIR)/%.so: %.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 deleted file mode 100644 index 371e261f4..000000000 --- a/src/Style/SalomeStyle.cxx +++ /dev/null @@ -1,1344 +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 "SalomeStyle.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static const char* const hole_xpm[] = { -"3 3 3 1", -". c None", -"a c #999999", -"b c #FFFFFF", -"aa.", -"aab", -".bb" -}; - -static const char* const cross_xpm[] = { -"12 12 4 1", -". c None", -"a c #000000", -"b c #FFFFFF", -"c c #666666", -"............", -"............", -"............", -".aaaa..aaaa.", -"..abbaabba..", -"...abbbba...", -"....abba....", -"...abbbba...", -"..abbaabba..", -".aaaa..aaaa.", -"............", -"............" -}; - -static const char* const maximize_xpm[] = { -"12 12 4 1", -". c None", -"a c #000000", -"b c #FFFFFF", -"c c #666666", -"............", -".aaaaaaaaaa.", -".acccccccca.", -".acccccccca.", -".abbbbbbbba.", -".abbbbbbbba.", -".abbbbbbbba.", -".abbbbbbbba.", -".abbbbbbbba.", -".abbbbbbbba.", -".aaaaaaaaaa.", -"............" -}; - -static const char* const normal_xpm[] = { -"12 12 4 1", -". c None", -"a c #000000", -"b c #FFFFFF", -"c c #666666", -"............", -"...aaaaaaaa.", -"...acccccca.", -"...abbbbbba.", -"...aaaaaaba.", -".aaaaaaaaba.", -".accccccaba.", -".abbbbbbaaa.", -".abbbbbba...", -".abbbbbba...", -".aaaaaaaa...", -"............" -}; - -static const char* const minimize_xpm[] = { -"12 12 4 1", -". c None", -"a c #000000", -"b c #FFFFFF", -"c c #666666", -"............", -"............", -"............", -"............", -"............", -"............", -"............", -"............", -"aaaaaaaaaaaa", -"abbbbbbbbbba", -"aaaaaaaaaaaa", -"............" -}; - -/*! - Class: SalomeStyle [Public] - Descr: Style for SALOME platform -*/ - -/*! - Constructor -*/ -SalomeStyle::SalomeStyle() -: myTitleParent( 0 ) -{ - qApp->installEventFilter( this ); -} - -/*! - Destructor -*/ -SalomeStyle::~SalomeStyle() -{ -} - -/*! - Delayed initialization of style -*/ -void SalomeStyle::polish( QWidget* w ) -{ - if ( !w ) - return; -/* - if ( w->inherits( "QLineEdit" ) ) - { - QLineEdit* fr = (QLineEdit*)w; - if ( w->parentWidget() && w->parentWidget()->inherits( "QSpinWidget" ) ) - fr->setFrameStyle( QFrame::Plain ); - else - { - fr->setFrameStyle( QFrame::Plain | QFrame::Box ); - fr->setLineWidth( 1 ); - fr->setMidLineWidth( 0 ); - } - } - else -*/ - if ( w->inherits( "QToolBar" ) ) - { - QToolBar* tb = (QToolBar*)w; - tb->setFrameStyle( QFrame::ToolBarPanel | QFrame::Plain ); - tb->setLineWidth( 1 ); - tb->setMidLineWidth( 1 ); - } - else - if ( w->inherits( "QDockWindow" ) ) - { - QDockWindow* dw = (QDockWindow*)w; - dw->setFrameStyle( QFrame::ToolBarPanel | QFrame::Raised ); - } -/* - else if ( w->inherits( "QListView" ) ) - { - QListView* lv = (QListView*)w; - lv->setFrameStyle( QFrame::Box | QFrame::Plain ); - } -*/ - else - PARENT_STYLE::polish( w ); -} - -/*! - Custom event filter -*/ -bool SalomeStyle::eventFilter( QObject* o, QEvent* e ) -{ - if ( e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut ) - { - QDockWindow* wnd = NULL; - while( o && !wnd ) - if( o->inherits( "QDockWindow" ) ) - wnd = ( QDockWindow* )o; - else - o = o->parent(); - - if ( wnd ) - { - const QObjectList* objList = o->children(); - for( QObjectListIterator anIt( *objList ); anIt.current(); ++anIt ) - if( anIt.current()->inherits( "QDockWindowHandle" ) ) - { - QWidget* ww = ( QWidget* )anIt.current(); - ww->repaint( ww->rect() ); - const QObjectList* wc = ww->children(); - for( QObjectListIterator anIt2( *wc ); anIt2.current(); ++anIt2 ) - if( anIt2.current()->inherits( "QToolButton" ) ) - { - QWidget* tb = ( QWidget* )anIt2.current(); - tb->repaint( tb->rect() ); - } - } - } - } - - if ( o && o->inherits( "QPushButton" ) && ( e->type() == QEvent::Enter || e->type() == QEvent::Leave ) ) - ((QWidget*)o)->update(); - - return false; -} - -double linear( double x ) -{ - return x; -} - -/*! - Mixes two colors, part of first is 1-t, part of second is t - \param t - part parameter - \param c1, c2 - colors - \param res - result color -*/ -void SalomeStyle::mix( const double t, const QColor& c1, const QColor& c2, QColor& res ) -{ - if( t<0.0 || t>1.0 ) - return; - - int r = int( c1.red() * (1-t) + c2.red() * t ), - g = int( c1.green() * (1-t) + c2.green() * t ), - b = int( c1.blue() * (1-t) + c2.blue() * t ); - res.setRgb( r, g, b ); -} - -/*! - Mixes two colors, part of first is 1-t, part of second is t - \param t - part parameter - \param rgb1, rgb2 - colors (result is stored in rgb1) -*/ -void SalomeStyle::mix( const double t, QRgb& rgb1, const QRgb& rgb2 ) -{ - if( t<0.0 || t>1.0 ) - return; - - int c[2][4] = { qRed( rgb1 ), qGreen( rgb1 ), qBlue( rgb1 ), qAlpha( rgb1 ), - qRed( rgb2 ), qGreen( rgb2 ), qBlue( rgb2 ), qAlpha( rgb2 ) }; - for( int i=0; i<4; i++ ) - c[0][i] = (int)( c[0][i] * (1-t) + c[1][i] * t ); - - rgb1 = qRgba( c[0][0], c[0][1], c[0][2], qAlpha( rgb1 ) ); -} - -/*! - Mixes colors of pixmap points with other color - \param t - part parameter - \param pix - pixmap to be processed - \param col - other color -*/ -void SalomeStyle::mix( const double t, QPixmap& pix, const QColor& col ) -{ - if( t<0.0 || t>1.0 ) - return; - - QImage anImage = pix.convertToImage(); - if( anImage.isNull() ) - return; - - if( anImage.depth()!=32 ) - anImage = anImage.convertDepth( 32 ); - - int w = anImage.width(), - h = anImage.height(); - - QRgb colrgb = col.rgb(), cur; - for( int y=0; y255 ) - gray = 255; - else if( gray<0 ) - gray = 0; - colorline[ x ] = qRgba( gray, gray, gray, qAlpha( colorline[x] ) ); - } - } - pix = anImage; -} - -/*! - Draws gradient filling - \param p - painter - \param r - rect - \param c1, c2 - two colors of gradient - \param d - direction of gradient - \param f - gradient function (maps co-ordinate to part parameter) -*/ -void SalomeStyle::drawGradient( QPainter* p, const QRect& r, - const QColor& c1, const QColor& c2, - const Direction d, gradient_func f ) const -{ - p->save(); - p->translate( r.x(), r.y() ); - - QColor mid; - if( d==LeftToRight || d==RightToLeft ) - for( int xmax = r.width(), x = d==LeftToRight ? 0 : xmax; - d==LeftToRight ? x<=xmax : x>=0; - d==LeftToRight ? x++ : x-- ) - { - double t = double( x ) / double( xmax ); - mix( d==LeftToRight ? f(t) : 1-f(t), c1, c2, mid ); - p->setPen( mid ); - p->drawLine( x, 0, x, r.height() ); - } - else - for( int ymax = r.height(), y = d==UpToDown ? 0 : ymax; - d==UpToDown ? y<=ymax : y>=0; - d==UpToDown ? y++ : y-- ) - { - double t = double( y ) / double( ymax ); - mix( d==UpToDown ? f(t) : 1-f(t), c1, c2, mid ); - p->setPen( mid ); - p->drawLine( 0, y, r.width(), y ); - } - - p->restore(); -} - -/*! - Draws primitive element - \param pe - type of primitive element - \param p - painter - \param r - rect - \param cg - group of colors - \param flags - is used to control how the PrimitiveElement is drawn - \param opt - can be used to control how various PrimitiveElements are drawn -*/ -void SalomeStyle::drawPrimitive( PrimitiveElement pe, QPainter* p, const QRect& r, - const QColorGroup& cg, SFlags flags, const QStyleOption& opt ) const -{ - switch ( pe ) - { - case PE_ButtonTool: - if ( !myTitleParent ) - PARENT_STYLE::drawPrimitive( pe, p, r, cg, flags, opt ); - break; - - case PE_DockWindowResizeHandle: - p->fillRect( r.x(), r.y(), r.width(), r.height(), cg.dark() ); - if ( flags & Style_Horizontal ) - p->fillRect( r.x(), r.y() + 1, r.width(), r.height() - 2, cg.midlight() ); - else - p->fillRect( r.x() + 1, r.y(), r.width() - 2, r.height(), cg.midlight() ); - break; - - case PE_DockWindowHandle: - { - QPaintDevice* pd = p->device(); - if ( !pd ) - break; - - QWidget* w = (QWidget*)pd; - - if ( !w || !w->inherits( "QDockWindowHandle" ) ) - break; - - QDockWindow* wnd = ( QDockWindow* ) w->parent(); - if ( !wnd ) - return; - - QObject* activeWidget = qApp->focusWidget(); - QDockWindow* activeWnd = 0; - while ( !activeWnd && activeWidget ) - { - if ( activeWidget->inherits( "QDockWindow" ) ) - activeWnd = (QDockWindow*)activeWidget; - else - activeWidget = activeWidget->parent(); - } - - bool act = wnd == activeWnd, horiz = flags & Style_Horizontal; - - QPixmap hole( (const char**)hole_xpm ); - - if ( wnd->inherits( "QToolBar" ) ) - { - drawGradient( p, r, cg.light(), cg.background(), horiz ? UpToDown : LeftToRight, linear ); - - int c = 4, i; double d = ( horiz ? r.height() : r.width() ) / ( c + 1 ); - QBrush fill = cg.brush( QColorGroup::Dark ); - p->setPen( Qt::red ); - for ( i = 0; i < c; i++ ) - { - if ( horiz ) - p->drawPixmap( r.x() + r.width() / 2 - 1, (int)( r.y() + ( i + 1 ) * d - 1 ), hole ); - else - p->drawPixmap( (int) ( r.x() + ( i + 1 ) * d - 1 ), r.y() + r.height() / 2 - 1, hole ); - } - - int dd = (int(d)/2) + (int(d)%2); - for ( i = 0; i < c - 1; i++ ) - { - if ( horiz ) - p->drawPixmap( r.x() + r.width() / 2 + 2, (int)( r.y() + dd + ( i + 1 ) * d - 1 ), hole ); - else - p->drawPixmap( (int)( r.x() + dd + ( i + 1 ) * d - 1 ), r.y() + r.height() / 2 + 2, hole ); - } - } - else - { - int d = 1; - QRect rr( r.x()+d, r.y()+d, r.width()-2*d, r.height()-2*d ); - - QColor col; - if ( act ) - mix( 0.5, cg.highlight(), Qt::white, col ); - else - col = cg.background(); - - drawGradient( p, rr, act ? cg.highlight() : cg.dark(), col, - horiz ? LeftToRight : UpToDown, linear ); - - QRect rt = rr; - if ( flags & Style_Horizontal ) - rt.addCoords( 0, 20, 0, 0 ); - else - rt.addCoords( 0, 0, -20, 0 ); - - int textW = flags & Style_Horizontal ? rt.height() : rt.width(); - int textH = flags & Style_Horizontal ? rt.width() : rt.height(); - - 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() ); - - if ( flags & Style_Horizontal ) - { - 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->setFont( old_font ); - } - break; - } - - case PE_DockWindowSeparator: - { - bool horiz = ( flags & Style_Horizontal ); - QWidget* w = ( QWidget* )p->device(); - if( w->inherits( "QToolBarSeparator" ) ) - { - drawGradient( p, r, cg.light(), cg.background(), horiz ? UpToDown : LeftToRight, linear ); - int w = r.width(), h = r.height(); - int part = 8; - - p->setPen( cg.dark() ); - if( horiz ) - p->drawLine( r.x() + w/2, r.y() + h/part, r.x() + w/2, r.y() + (part-1)*h/part ); - else - p->drawLine( r.x() + w/part, r.y() + h/2, r.x() + (part-1)*w/part, r.y() + h/2 ); - - p->setPen( cg.light() ); - if( horiz ) - p->drawLine( r.x() + w/2 + 1, r.y() + h/part + 1, r.x() + w/2 + 1, r.y() + (part-1)*h/part + 1 ); - else - p->drawLine( r.x() + w/part + 1, r.y() + h/2 + 1, r.x() + (part-1)*w/part + 1, r.y() + h/2 + 1 ); - } - else - PARENT_STYLE::drawPrimitive( pe, p, r, cg, flags, opt ); - break; - } - - case PE_PanelDockWindow: - { - QWidget* w = ( QWidget* )p->device(); - - int offset = pixelMetric( PM_DockWindowHandleExtent, w ); - if ( w->inherits( "QToolBar" ) ) - { - bool vert = ( ( QToolBar* )w )->orientation() == Qt::Vertical; - if ( vert ) - drawGradient( p, QRect( r.x(), r.y()+offset, r.x()+r.width(), r.y()+offset ), - cg.light(), cg.background(), LeftToRight, linear ); - else - drawGradient( p, QRect( r.x()+offset, r.y(), r.x()+offset, r.y()+r.height() ), - cg.light(), cg.background(), UpToDown, linear ); - - p->setPen( QPen( cg.light(), 1 ) ); - p->drawRect( r ); - } - else - { - p->setPen( QPen( cg.dark(), 1 ) ); - p->setBrush( cg.light() ); - p->drawRect( r ); - } - - break; - } - - case PE_PanelPopup: - p->setPen( QPen( cg.dark(), 1 ) ); - p->setBrush( cg.light() ); - p->drawRect( r ); - break; - - case PE_HeaderSection: - { - QColor col; mix( 0.2, cg.light(), Qt::black, col ); - drawGradient( p, r, cg.light(), col, DownToUp, linear ); - drawGradient( p, QRect( r.x(), r.y(), 1, r.height() ), cg.light(), cg.dark(), DownToUp, linear ); - p->setPen( cg.dark() ); - p->drawLine( r.x(), r.y()+r.height()-1, r.x()+r.width(), r.y()+r.height()-1 ); - break; - } - - case PE_Splitter: - p->fillRect( r.x() + 1, r.y() + 1, r.width() - 2, r.height() - 2, cg.dark() ); - p->fillRect( r.x() + 2, r.y() + 2, r.width() - 4, r.height() - 4, cg.midlight() ); - break; - - case PE_ButtonBevel: - PARENT_STYLE::drawPrimitive( PE_ButtonDropDown, p, r, cg, flags, opt ); - break; - - case PE_ButtonCommand: - { - QColorGroup cGrp( cg ); - if ( flags & Style_MouseOver ) - cGrp.setColor( QColorGroup::Button, cGrp.midlight() ); - - if ( flags & Style_MouseOver ) - PARENT_STYLE::drawPrimitive( PE_ButtonDropDown, p, r, cGrp, flags, opt ); - else - PARENT_STYLE::drawPrimitive( flags & Style_Raised ? PE_ButtonDropDown : pe, p, r, cGrp, flags, opt ); - } - break; - - default: - PARENT_STYLE::drawPrimitive( pe, p, r, cg, flags, opt ); - break; - } -} - -/*! - Draws control element - \param element - type of control element - \param p - painter - \param widget - widget - \param r - rect - \param cg - group of colors - \param flags - is used to control how the element is drawn - \param opt - can be used to control how various elements are drawn -*/ -void SalomeStyle::drawControl( ControlElement element, QPainter* p, const QWidget* widget, const QRect& r, - const QColorGroup& cg, SFlags flags, const QStyleOption& opt ) const -{ - switch( element ) - { - case CE_PopupMenuItem: - { - if(! widget || opt.isDefault()) - break; - - const QPopupMenu *popupmenu = (const QPopupMenu *) widget; - QMenuItem *mi = opt.menuItem(); - if( !mi ) - break; - - int tab = opt.tabWidth(); - int maxpmw = opt.maxIconWidth(); - bool dis = !( flags & Style_Enabled ); - bool checkable = popupmenu->isCheckable(); - bool act = flags & Style_Active; - bool use2000style = true; - int x, y, w, h; - - int windowsItemFrame = 2, - windowsItemHMargin = 5, - windowsItemVMargin = 1, - windowsRightBorder = 2, - windowsArrowHMargin = 2; - - r.rect(&x, &y, &w, &h); - - if ( checkable ) - { - // space for the checkmarks - if (use2000style) - maxpmw = QMAX( maxpmw, 20 ); - else - maxpmw = QMAX( maxpmw, 12 ); - } - - int checkcol = maxpmw; - - if ( mi && mi->isSeparator() ) - { - p->setPen( cg.dark() ); - p->drawLine( x+3*checkcol/2, y, x+w, y ); - //p->setPen( cg.light() ); - //p->drawLine( x, y+1, x+w, y+1 ); - return; - } - - QBrush fill = ( act && !dis ? - cg.brush( QColorGroup::Highlight ) : - cg.brush( QColorGroup::Light ) ); - p->fillRect( x, y, w, h, fill ); - - if( !mi ) - return; - - int xpos = x; - QRect vrect = visualRect( QRect( xpos, y, checkcol, h ), r ); - int xvis = vrect.x(); - - if( mi->isChecked() ) - { - if( act && !dis ) - qDrawShadePanel( p, xvis, y, checkcol, h, - cg, TRUE, 1, &cg.brush( QColorGroup::Button ) ); - else - { - QBrush fill( cg.light(), Dense4Pattern ); - // set the brush origin for the hash pattern to the x/y coordinate - // of the menu item's checkmark... this way, the check marks have - // a consistent look - QPoint origin = p->brushOrigin(); - p->setBrushOrigin( xvis, y ); - qDrawShadePanel( p, xvis, y, checkcol, h, cg, TRUE, 1, &fill ); - // restore the previous brush origin - p->setBrushOrigin( origin ); - } - } - else if( !act ) - p->fillRect(x+checkcol, y, w-checkcol , h, cg.brush( QColorGroup::Light )); - - if( !( act && !dis ) && !mi->isChecked() ) - { - QColor col; mix( 0.5, cg.mid(), Qt::white, col ); - drawGradient( p, QRect( xvis, y, checkcol, h+1 ), cg.light(), col, LeftToRight, linear ); - } - - if( mi->iconSet() ) - { // draw iconset - QIconSet::Mode mode = dis ? QIconSet::Active : QIconSet::Normal; - if(act && !dis ) - mode = QIconSet::Active; - QPixmap pixmap; - if( checkable && mi->isChecked() ) - pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode, QIconSet::On ); - else - pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode ); - int pixw = pixmap.width(); - int pixh = pixmap.height(); - - if( dis ) - toGrayscale( pixmap, 1.1 ); - - //if( act && !dis && !mi->isChecked() ) - // qDrawShadePanel( p, xvis, y, checkcol, h, cg, FALSE, 1, &cg.brush( QColorGroup::Button ) ); - - QRect pmr( 0, 0, pixw, pixh ); - pmr.moveCenter( vrect.center() ); - p->setPen( cg.text() ); - p->drawPixmap( pmr.topLeft(), pixmap ); - - QBrush fill = ( act ? cg.brush( QColorGroup::Highlight ) : cg.brush( QColorGroup::Light )); - int xp = xpos + checkcol + 1; - if( !dis ) - p->fillRect( visualRect( QRect( xp, y, w - checkcol - 1, h ), r ), fill); - } - else if( checkable ) - { // just "checking"... - if( mi->isChecked() ) - { - int xp = xpos + windowsItemFrame; - - SFlags cflags = Style_Default; - if( !dis ) - cflags |= Style_Enabled; - if( act ) - cflags |= Style_On; - - drawPrimitive( PE_CheckMark, p, - visualRect( QRect( xp, y + windowsItemFrame, - checkcol - 2*windowsItemFrame, - h - 2*windowsItemFrame), r ), cg, cflags, opt ); - } - } - - p->setPen( act ? cg.highlightedText() : cg.buttonText() ); - - QColor discol; - if( dis ) - { - discol = cg.text(); - p->setPen( discol ); - } - - int xm = windowsItemFrame + checkcol + windowsItemHMargin; - xpos += xm; - - vrect = visualRect( QRect( xpos, y+windowsItemVMargin, w-xm-tab+1, h-2*windowsItemVMargin ), r ); - xvis = vrect.x(); - if( mi->custom() ) - { - p->save(); - if ( dis && !act ) - { - p->setPen( cg.light() ); - mi->custom()->paint( p, cg, act, !dis, - xvis+1, y+windowsItemVMargin+1, - w-xm-tab+1, h-2*windowsItemVMargin ); - p->setPen( discol ); - } - mi->custom()->paint( p, cg, act, !dis, xvis, y+windowsItemVMargin, - w-xm-tab+1, h-2*windowsItemVMargin ); - p->restore(); - } - QString s = mi->text(); - if( !s.isNull() ) - { // draw text - int t = s.find( '\t' ); - int text_flags = AlignVCenter | ShowPrefix | DontClip | SingleLine; - if( !styleHint( SH_UnderlineAccelerator, widget ) ) - text_flags |= NoAccel; - text_flags |= (QApplication::reverseLayout() ? AlignRight : AlignLeft ); - if( t >= 0 ) - { // draw tab text - int xp = x + w - tab - windowsItemHMargin - windowsItemFrame + 1; - if( use2000style ) - xp -= 20; - else - xp -= windowsRightBorder; - int xoff = visualRect( QRect( xp, y+windowsItemVMargin, tab, h-2*windowsItemVMargin ), r ).x(); - if( dis && !act ) - { - p->setPen( cg.light() ); - p->drawText( xoff+1, y+windowsItemVMargin+1, tab, h-2*windowsItemVMargin, text_flags, s.mid( t+1 )); - p->setPen( discol ); - } - p->drawText( xoff, y+windowsItemVMargin, tab, h-2*windowsItemVMargin, text_flags, s.mid( t+1 ) ); - s = s.left( t ); - } - if( dis && !act ) - { - p->setPen( cg.light() ); - p->drawText( xvis+1, y+windowsItemVMargin+1, w-xm-tab+1, h-2*windowsItemVMargin, text_flags, s, t ); - p->setPen( discol ); - } - p->drawText( xvis, y+windowsItemVMargin, w-xm-tab+1, h-2*windowsItemVMargin, text_flags, s, t ); - } - else if( mi->pixmap() ) - { // draw pixmap - QPixmap *pixmap = mi->pixmap(); - if( pixmap->depth() == 1 ) - p->setBackgroundMode( OpaqueMode ); - p->drawPixmap( xvis, y+windowsItemFrame, *pixmap ); - if( pixmap->depth() == 1 ) - p->setBackgroundMode( TransparentMode ); - } - if( mi->popup() ) - { // draw sub menu arrow - int dim = (h-2*windowsItemFrame) / 2; - PrimitiveElement arrow; - arrow = ( QApplication::reverseLayout() ? PE_ArrowLeft : PE_ArrowRight ); - xpos = x+w - windowsArrowHMargin - windowsItemFrame - dim; - vrect = visualRect( QRect(xpos, y + h / 2 - dim / 2, dim, dim), r ); - if( act ) - { - QColorGroup g2 = cg; - g2.setColor( QColorGroup::ButtonText, g2.highlightedText() ); - drawPrimitive( arrow, p, vrect, g2, dis ? Style_Default : Style_Enabled, opt ); - } - else - { - drawPrimitive( arrow, p, vrect, cg, dis ? Style_Default : Style_Enabled, opt ); - } - } - - if( act && !dis ) - { - p->setPen( cg.dark() ); - p->drawRect( r ); - } - break; - } - - case CE_MenuBarItem: - { - bool active = flags & Style_Active; - bool down = flags & Style_Down; - QRect pr = r; - - p->save(); - if( active && down ) - { - //QColor col; mix( 0.5, cg.mid(), Qt::white, col ); - //drawGradient( p, r, col, cg.light(), UpToDown, linear ); - p->setPen( cg.light() ); - p->setBrush( cg.light() ); - p->drawRect( r ); - - p->setPen( cg.dark() ); - int w = r.width()-1, h = r.height(); - p->drawLine( r.x(), r.y(), r.x()+w, r.y() ); - p->drawLine( r.x(), r.y(), r.x(), r.y()+h ); - p->drawLine( r.x()+w, r.y(), r.x()+w, r.y()+h ); - - p->translate( 1, 1 ); - } - else - drawGradient( p, r, cg.light(), cg.background(), active ? DownToUp : UpToDown, linear ); - - QCommonStyle::drawControl(element, p, widget, pr, cg, flags, opt); - p->restore(); - break; - } - - case CE_MenuBarEmptyArea: - { - drawGradient( p, r, cg.light(), cg.background(), UpToDown, linear ); - break; - } - - case CE_ToolButtonLabel: - { - const QToolButton *toolbutton = (const QToolButton *) widget; - QObject* parent = toolbutton->parent(); - - QToolBar* tb = NULL; - while( parent ) - if( parent->inherits( "QToolBar" ) ) - { - tb = ( QToolBar* )parent; - break; - } - else - parent = parent->parent(); - parent = toolbutton->parent(); - - int horiz = -1; - if( tb ) - { - if( tb->orientation()==Qt::Horizontal ) - horiz = 1; - else - horiz = 0; - drawGradient( p, r, cg.light(), cg.background(), horiz ? UpToDown : LeftToRight, linear ); - } - else if( parent->inherits( "QDockWindowHandle" ) ) - { - QWidget* w = ( QWidget* ) parent; - QDockWindow* wnd = ( QDockWindow* )w->parent(); - if( !wnd->orientation()==Qt::Horizontal ) - horiz=1; - else - horiz=0; - - QPoint pp( r.x(), r.y() ), - qq = toolbutton->mapToParent( pp ); - - bitBlt( p->device(), r.x(), r.y(), w, horiz ? qq.x()-r.width() : qq.x(), - horiz ? qq.y() : qq.y()+r.height(), - r.width(), r.height(), Qt::CopyROP, true ); - } - - bool highlight = ( flags & Style_MouseOver ), - down = ( flags & ( Style_Down | Style_On ) ), - en = toolbutton->isEnabled(); - - if( down ) - if( horiz>=0 ) - { - drawGradient( p, r, cg.light(), cg.background(), horiz==1 ? DownToUp : RightToLeft, linear ); - p->setPen( cg.background() ); - p->drawRect( r ); - } - else - { - p->setPen( cg.dark() ); - p->setBrush( cg.light() ); - p->drawRect( r ); - } - if( highlight ) - { - p->setPen( cg.dark() ); - QColor col; mix( 0.05, cg.background(), Qt::black, col ); - p->setBrush( col ); - p->drawRect( r ); - } - - - QRect rect = r; - Qt::ArrowType arrowType = opt.isDefault() ? Qt::DownArrow : opt.arrowType(); - - int shiftX = 0, shiftY = 0; - if( flags & ( Style_Down | Style_On ) ) - { - shiftX = pixelMetric(PM_ButtonShiftHorizontal, widget); - shiftY = pixelMetric(PM_ButtonShiftVertical, widget); - } - - if (!opt.isDefault()) - { - PrimitiveElement pe; - switch (arrowType) - { - case Qt::LeftArrow: pe = PE_ArrowLeft; break; - case Qt::RightArrow: pe = PE_ArrowRight; break; - case Qt::UpArrow: pe = PE_ArrowUp; break; - default: - case Qt::DownArrow: pe = PE_ArrowDown; break; - } - - rect.moveBy(shiftX, shiftY); - drawPrimitive(pe, p, rect, cg, flags, opt); - } - else - { - QColor btext = toolbutton->paletteForegroundColor(); - - if (toolbutton->iconSet().isNull() && - ! toolbutton->text().isNull() && - ! toolbutton->usesTextLabel()) - { - int alignment = AlignCenter | ShowPrefix; - if (!styleHint(SH_UnderlineAccelerator, widget, QStyleOption::Default, 0)) - alignment |= NoAccel; - - rect.moveBy(shiftX, shiftY); - drawItem( p, rect, alignment, cg, flags & Style_Enabled, 0, toolbutton->text(), - toolbutton->text().length(), &btext); - } - else - { - QPixmap pm; - QIconSet::Size size = - toolbutton->usesBigPixmap() ? QIconSet::Large : QIconSet::Small; - QIconSet::State state = toolbutton->isOn() ? QIconSet::On : QIconSet::Off; - QIconSet::Mode mode; - if( !toolbutton->isEnabled() ) - mode = QIconSet::Active; //QIconSet::Disabled; - else if( flags & (Style_Down | Style_On ) || ( flags & Style_Raised ) && (flags & Style_AutoRaise)) - mode = QIconSet::Active; - else - mode = QIconSet::Normal; - pm = toolbutton->iconSet().pixmap( size, mode, state ); - - if( toolbutton->usesTextLabel() ) - { - p->setFont( toolbutton->font() ); - QRect pr = rect, tr = rect; - int alignment = ShowPrefix; - if (!styleHint(SH_UnderlineAccelerator, widget, QStyleOption::Default, 0)) - alignment |= NoAccel; - - if( toolbutton->textPosition() == QToolButton::Under ) - { - int fh = p->fontMetrics().height(); - pr.addCoords( 0, 1, 0, -fh-3 ); - tr.addCoords( 0, pr.bottom(), 0, -3 ); - pr.moveBy(shiftX, shiftY); - drawItem( p, pr, AlignCenter, cg, TRUE, &pm, QString::null ); - alignment |= AlignCenter; - } - else - { - pr.setWidth( pm.width() + 8 ); - tr.addCoords( pr.right(), 0, 0, 0 ); - pr.moveBy(shiftX, shiftY); - - drawItem( p, pr, AlignCenter, cg, TRUE, &pm, QString::null ); - alignment |= AlignLeft | AlignVCenter; - } - - tr.moveBy(shiftX, shiftY); - drawItem( p, tr, alignment, cg, flags & Style_Enabled, 0, toolbutton->textLabel(), - toolbutton->textLabel().length(), &btext); - } - else - { - /*if( en && !highlight ) - mix( 0.6, pm, cg.background() ); - else*/ if( !en ) - { - toGrayscale( pm, 1.1 ); - mix( 0.8, pm, cg.background() ); - } - - rect.moveBy(shiftX, shiftY); - drawItem( p, rect, AlignCenter, cg, true, &pm, QString::null ); - } - } - } - } - break; - - case CE_TabBarTab: - { - QPen oldPen = p->pen(); - - QRect r2( r ); - bool selected = flags & Style_Selected; - - p->setPen( cg.midlight() ); - p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() ); - - if ( !selected ) - r2.setRect( r2.left(), r2.top() + 1, r2.width(), r2.height() - 1 ); - else - r2.setRect( r2.left(), r2.top(), r2.width() - 2, r2.height() - 1 ); - - p->setPen( cg.foreground() ); - drawGradient( p, QRect( r2.left(), r2.top(), r2.width(), r2.height() - 1 ), - selected ? cg.highlight() : cg.dark(), cg.background(), UpToDown, linear ); - -// p->fillRect( r2.left(), r2.top(), r2.width(), r2.height() - 1, selected ? cg.highlight() : cg.background() ); - p->drawRect( r2.left(), r2.top(), r2.width(), r2.height() - 1 ); - - if ( selected ) - { - p->setPen( cg.shadow() ); - p->drawLine( r2.left() + 1, r2.bottom(), r2.right() + 1, r2.bottom() ); - p->drawLine( r2.right() + 1, r2.top() + 1, r2.right() + 1, r2.bottom() ); - } - - break; - } - - case CE_TabBarLabel: - { - QColorGroup tmp( cg ); - if ( flags & Style_Selected ) - tmp.setColor( QColorGroup::Foreground, tmp.highlightedText() ); - PARENT_STYLE::drawControl( element, p, widget, r, tmp, flags, opt ); - } - break; - - case CE_PushButton: - { - if ( flags & Style_Enabled && !( flags & Style_Down || flags & Style_On ) ) - { - const QPushButton* button = (const QPushButton*)widget; - QRect br = QRect( button->mapToGlobal( button->rect().topLeft() ), button->rect().size() ); - if ( br.contains( QCursor::pos() ) ) - flags |= Style_MouseOver; - } - - PARENT_STYLE::drawControl( element, p, widget, r, cg, flags, opt ); - break; - } - - default: - PARENT_STYLE::drawControl( element, p, widget, r, cg, flags, opt ); - break; - } -} - -/*! - \return the sub-area for the widget in logical coordinates - \param subrect - type of sub area - \param w - widget -*/ -QRect SalomeStyle::subRect( SubRect subrect, const QWidget* w ) const -{ - QRect r = PARENT_STYLE::subRect( subrect, w ); - if ( subrect==SR_DockWindowHandleRect && w->inherits( "QDockWindowHandle" ) ) - { - QDockWindow* wnd = ( QDockWindow* ) w->parent(); - if( wnd->orientation()==Qt::Vertical ) - r.setWidth( w->width() ); - else - { - r.setY( r.y()+r.height()-w->height() ); - r.setHeight( w->height() ); - } - } - - return r; -} - -/*! - Draws the ComplexControl - \param control - type of complex control element - \param p - painter - \param widget - widget - \param r - rect - \param cg - group of colors - \param flags, controls, active - is used to control how the element is drawn - \param opt - can be used to control how various elements are drawn -*/ -void SalomeStyle::drawComplexControl( ComplexControl control, QPainter* p, const QWidget* widget, - const QRect& r, const QColorGroup& cg, SFlags flags, - SCFlags controls, SCFlags active, const QStyleOption& opt ) const -{ - - - - - ((SalomeStyle*)this)->myTitleParent = 0; - - switch ( control ) - { - case CC_ComboBox: - if ( controls & SC_ComboBoxArrow ) - { - SFlags flags = Style_Default; - - qDrawShadeRect( p, r, cg, true, pixelMetric( PM_DefaultFrameWidth, widget ), - 0, widget->isEnabled() ? &cg.brush( QColorGroup::Base ) : &cg.brush( QColorGroup::Background ) ); - - QRect ar = QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, SC_ComboBoxArrow ), widget ); - if ( active == SC_ComboBoxArrow ) - { - p->setPen( cg.dark() ); - p->setBrush( cg.brush( QColorGroup::Button ) ); - p->drawRect( ar ); - } - else - qDrawWinPanel( p, ar, cg, FALSE, &cg.brush( QColorGroup::Button ) ); - - ar.addCoords( 2, 2, -2, -2 ); - if ( widget->isEnabled() ) - flags |= Style_Enabled; - - if ( active == SC_ComboBoxArrow ) - flags |= Style_Sunken; - drawPrimitive( PE_ArrowDown, p, ar, cg, flags ); - } - PARENT_STYLE::drawComplexControl( control, p, widget, r, cg, flags, controls & ~SC_ComboBoxArrow, active, opt ); - break; - - case CC_TitleBar: - if( widget->inherits( "QTitleBar" ) ) - ( ( SalomeStyle* )this )->myTitleParent = ( QWidget* )widget->parent(); - - default: - PARENT_STYLE::drawComplexControl( control, p, widget, r, cg, flags, controls, active, opt ); - break; - } -} - -/*! - \return pixmap by type - \param st - type of pixmap - \param w - widget - \param opt - style option flags -*/ -QPixmap SalomeStyle::stylePixmap( StylePixmap st, const QWidget* w, const QStyleOption& opt ) const -{ - switch ( st ) - { - case SP_DockWindowCloseButton: - case SP_TitleBarCloseButton: - return QPixmap( cross_xpm ); - case SP_TitleBarMaxButton: - return QPixmap( maximize_xpm ); - case SP_TitleBarNormalButton: - return QPixmap( normal_xpm ); - case SP_TitleBarMinButton: - return QPixmap( minimize_xpm ); - default: - return PARENT_STYLE::stylePixmap( st, w, opt ); - } -} - -/*! - \return the pixel size - \param pm - type of pixel metrics - \param widget - widget -*/ -int SalomeStyle::pixelMetric( PixelMetric pm, const QWidget* widget ) const -{ - int ret = 0; - - switch ( pm ) - { - case PM_ButtonMargin: - ret = 5; - break; - case PM_DockWindowFrameWidth: - ret = 0; - break; - case PM_TabBarTabOverlap: - ret = 2; - break; - case PM_TabBarTabHSpace: - ret = 20; - break; - case PM_TabBarTabShiftHorizontal: - case PM_TabBarTabShiftVertical: - ret = 0; - break; - case PM_TabBarTabVSpace: - ret = 5; - break; - case PM_DefaultFrameWidth: - ret = 1; - break; - case PM_SpinBoxFrameWidth: - ret = 1; - break; - case PM_ProgressBarChunkWidth: - ret = 1; - break; - default: - ret = PARENT_STYLE::pixelMetric( pm, widget ); - break; - } - return ret; -} - -/*! - \return corrected title text - \param txt - title text - \param w - possible width - \param fm - font metrics -*/ -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( "..." ); - while ( !res.isEmpty() && fm.width( res + end ) > W ) - res.remove( res.length() - 1, 1 ); - - if ( !res.isEmpty() ) - res += end; - } - - return res; -} - -/*! - Class: SalomeStylePlugin [Internal] - Constructor -*/ -SalomeStylePlugin::SalomeStylePlugin() -{ -} - -/*! - Destructor -*/ -SalomeStylePlugin::~SalomeStylePlugin() -{ -} - -/*! - \return keys of styles of plugin -*/ -QStringList SalomeStylePlugin::keys() const -{ - return QStringList() << "salome"; -} - -/*! - \return just created style - \param str - style key -*/ -QStyle* SalomeStylePlugin::create( const QString& str ) -{ - if ( str == "salome" ) - return new SalomeStyle(); - else - return 0; -} - -Q_EXPORT_PLUGIN( SalomeStylePlugin ) diff --git a/src/Style/SalomeStyle.h b/src/Style/SalomeStyle.h deleted file mode 100644 index e87ebf16d..000000000 --- a/src/Style/SalomeStyle.h +++ /dev/null @@ -1,111 +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 -// -#ifndef SALOMESTYLE_H -#define SALOMESTYLE_H - -#define parent_style qwindowsstyle -#define PARENT_STYLE QWindowsStyle - -#define QUOTE(x) #x -#define PARENT_INC(x) QUOTE(x.h) - -//#include PARENT_INC(parent_style) -#include - -#include -#include -#include - -#if defined SALOMESTYLE_EXPORTS -#if defined WIN32 -#define SALOMESTYLE_EXPORT _declspec( dllexport ) -#else -#define SALOMESTYLE_EXPORT -#endif -#else -#if defined WIN32 -#define SALOMESTYLE_EXPORT _declspec( dllimport ) -#else -#define SALOMESTYLE_EXPORT -#endif -#endif - -class QFontMetrics; - -class SALOMESTYLE_EXPORT SalomeStyle : public PARENT_STYLE -{ -public: - SalomeStyle(); - virtual ~SalomeStyle(); - - virtual void polish( QWidget* ); - - virtual bool eventFilter( QObject*, QEvent* ); - - static void mix( const double, QRgb&, const QRgb& ); - static void mix( const double, QPixmap&, const QColor& ); - static void mix( const double, const QColor&, const QColor&, QColor& ); - - static void toGrayscale( QPixmap&, double = 1.0 ); - - virtual void drawPrimitive( PrimitiveElement, QPainter*, const QRect&, - const QColorGroup&, SFlags = Style_Default, - const QStyleOption& = QStyleOption::Default ) const; - - virtual void drawControl( ControlElement, QPainter*, const QWidget*, - const QRect&, const QColorGroup&, SFlags = Style_Default, - const QStyleOption& = QStyleOption::Default ) const; - - virtual QRect subRect( SubRect, const QWidget* ) const; - - virtual void drawComplexControl( ComplexControl, QPainter*, const QWidget*, - const QRect&, const QColorGroup&, SFlags = Style_Default, - SCFlags = SC_All, SCFlags = SC_None, - const QStyleOption& = QStyleOption::Default ) const; - - virtual QPixmap stylePixmap( StylePixmap, const QWidget* = 0, - const QStyleOption& = QStyleOption::Default ) const; - - virtual int pixelMetric( PixelMetric, const QWidget* widget = 0 ) const; - -protected: - typedef enum { LeftToRight, RightToLeft, UpToDown, DownToUp } Direction; - - typedef double (*gradient_func)( double ); - - void drawGradient( QPainter*, const QRect&, const QColor&, - const QColor&, const Direction, gradient_func ) const; - - QString titleText( const QString&, const int, const int, QFont& f ) const; - -private: - QWidget* myTitleParent; -}; - -class SalomeStylePlugin : public QStylePlugin -{ -public: - SalomeStylePlugin(); - virtual ~SalomeStylePlugin(); - - virtual QStringList keys() const; - virtual QStyle* create( const QString& ); -}; - -#endif diff --git a/src/TOOLSGUI/Makefile.in b/src/TOOLSGUI/Makefile.in deleted file mode 100755 index 9497baf78..000000000 --- a/src/TOOLSGUI/Makefile.in +++ /dev/null @@ -1,70 +0,0 @@ -# SALOME TOOLSGUI : implementation of desktop "Tools" optioins -# -# 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 : Marc Tajchman (CEA) -# Module : SALOME -# $Header$ - -top_srcdir=@top_srcdir@ -top_builddir=../.. -srcdir=@srcdir@ -VPATH=.:@srcdir@:@top_srcdir@/idl:@srcdir@/resources - - -@COMMENCE@ - -# header files -EXPORT_HEADERS = ToolsGUI.h \ - ToolsGUI_RegWidget.h \ - ToolsGUI_CatalogGeneratorDlg.h \ - ToolsGUI_HelpWindow.h \ - ToolsGUI_IntervalWindow.h - -# .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 - -LIB_MOC = ToolsGUI_CatalogGeneratorDlg.h \ - ToolsGUI_RegWidget.h \ - ToolsGUI_HelpWindow.h \ - ToolsGUI_IntervalWindow.h - -LIB_CLIENT_IDL = SALOME_Registry.idl SALOME_Exception.idl - -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@ - diff --git a/src/TOOLSGUI/ToolsGUI.cxx b/src/TOOLSGUI/ToolsGUI.cxx deleted file mode 100755 index 25b8aeee9..000000000 --- a/src/TOOLSGUI/ToolsGUI.cxx +++ /dev/null @@ -1,81 +0,0 @@ -// SALOME TOOLSGUI : implementation of desktop "Tools" optioins -// -// 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 : ToolsGUI.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#include "ToolsGUI.h" - -/*! - \return true if object is visible -*/ -bool ToolsGUI::GetVisibility( _PTR(Study) theStudy, - _PTR(SObject) theObj, - void* theId ) -{ - _PTR(GenericAttribute) anAttr; - if ( theObj && theObj->FindAttribute( anAttr, "AttributeGraphic" ) ) - { - _PTR(AttributeGraphic) aGraphic (anAttr); - return aGraphic->GetVisibility( (unsigned long)theId ); - } - - return false; -} - -/*! - Set flag visibility of object - \param theStudy - study - \param theEntry - entry - \param theValue - flag visibility - \param theId - id -*/ -bool ToolsGUI::SetVisibility( _PTR(Study) theStudy, - const char* theEntry, - const bool theValue, - void* theId ) -{ - _PTR(SObject) anObj ( theStudy->FindObjectID( theEntry ) ); - - if ( anObj ) - { - _PTR(GenericAttribute) aGAttr; - if ( anObj->FindAttribute( aGAttr, "AttributeGraphic" ) ) - { - _PTR(AttributeGraphic) anAttr ( aGAttr ); - anAttr->SetVisibility( (unsigned long)theId, theValue ); - } - else if ( theValue ) - { - _PTR(StudyBuilder) aBuilder (theStudy->NewBuilder()); - _PTR(AttributeGraphic) anAttr (aBuilder->FindOrCreateAttribute(anObj, "AttributeGraphic")); - anAttr->SetVisibility( (unsigned long)theId, theValue ); - } - return true; - } - - return false; -} - diff --git a/src/TOOLSGUI/ToolsGUI.h b/src/TOOLSGUI/ToolsGUI.h deleted file mode 100755 index ceb117928..000000000 --- a/src/TOOLSGUI/ToolsGUI.h +++ /dev/null @@ -1,52 +0,0 @@ -// SALOME TOOLSGUI : implementation of desktop "Tools" optioins -// -// 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 : ToolsGUI.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef ToolsGUI_HeaderFile -#define ToolsGUI_HeaderFile - -#include "utilities.h" - -#ifndef _Standard_HeaderFile -#include -#endif - -#include "SALOMEDSClient.hxx" - -class Standard_EXPORT ToolsGUI -{ -public : - static bool GetVisibility( _PTR(Study) theStudy, - _PTR(SObject) theObj, - void* theId ); - static bool SetVisibility( _PTR(Study) theStudy, - const char* theEntry, - const bool theValue, - void* theId ); -}; - -#endif diff --git a/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx b/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx deleted file mode 100755 index 5cf6f399e..000000000 --- a/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.cxx +++ /dev/null @@ -1,412 +0,0 @@ -// SALOME TOOLSGUI : implementation of desktop "Tools" optioins -// -// 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 : ToolsGUI_CatalogGeneratorDlg.cxx -// Author : Nicolas REJNERI -// Modified : Marc TAJCHMAN -// Module : SALOME -// $Header$ - -#include "ToolsGUI_CatalogGeneratorDlg.h" - -#include "SUIT_Application.h" -#include "SUIT_Desktop.h" -#include "SUIT_MessageBox.h" -#include "SUIT_Tools.h" -#include "SUIT_Session.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "utilities.h" - -using namespace std; - -#define SPACING_SIZE 6 -#define MARGIN_SIZE 11 -#define MIN_EDIT_SIZE 250 - -/*! - Constructor -*/ -ToolsGUI_CatalogGeneratorDlg::ToolsGUI_CatalogGeneratorDlg( QWidget* parent, const char* name ) - : QDialog( parent, name, TRUE, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) -{ - if ( !name ) - setName( "ToolsGUI_CatalogGeneratorDlg" ); - resize( 322, 120 ); - setCaption( tr( "TOOLS_CATALOG_GENERATOR" ) ); - setSizeGripEnabled( TRUE ); - - QGridLayout* aTopLayout = new QGridLayout(this); - aTopLayout->setMargin(MARGIN_SIZE); - aTopLayout->setSpacing(SPACING_SIZE); - - QGroupBox* filesGrp = new QGroupBox( tr( "TOOLS_FILES") , this, "filesGrp" ); - filesGrp->setColumnLayout( 0, Qt::Vertical ); - filesGrp->layout()->setSpacing( 0 ); - filesGrp->layout()->setMargin( 0 ); - QGridLayout* filesGrpLayout = new QGridLayout( filesGrp->layout() ); - filesGrpLayout->setAlignment( Qt::AlignTop ); - filesGrpLayout->setSpacing( SPACING_SIZE ); - filesGrpLayout->setMargin( MARGIN_SIZE ); - - myIdlEdit = new QLineEdit( filesGrp, "myIdlEdit" ); - myIdlEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myIdlEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - myXmlEdit = new QLineEdit( filesGrp, "myXmlEdit" ); - myXmlEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myXmlEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - - myBrowseIdlBtn = new QPushButton( tr( "TOOLS_BUT_BROWSE" ), filesGrp, "myBrowseIdlBtn" ); - myBrowseXmlBtn = new QPushButton( tr( "TOOLS_BUT_BROWSE" ), filesGrp, "myBrowseXmlBtn" ); -// QFontMetrics fm(myBrowseIdlBtn->font()); -// myBrowseIdlBtn->setFixedWidth(fm.width(myBrowseIdlBtn->text()) + 10); -// myBrowseXmlBtn->setFixedWidth(fm.width(myBrowseXmlBtn->text()) + 10); - - filesGrpLayout->addWidget( new QLabel( tr( "TOOLS_IDL_FILE" ), filesGrp ), 0, 0); - filesGrpLayout->addWidget( myIdlEdit, 0, 1 ); - filesGrpLayout->addWidget( myBrowseIdlBtn, 0, 2 ); - filesGrpLayout->addWidget( new QLabel( tr( "TOOLS_XML_FILE" ), filesGrp ), 1, 0); - filesGrpLayout->addWidget( myXmlEdit, 1, 1 ); - filesGrpLayout->addWidget( myBrowseXmlBtn, 1, 2 ); - - QGroupBox* supplGrp = new QGroupBox(tr( "TOOLS_SUPPLEMENT" ) , this, "SupplGrp" ); - supplGrp->setColumnLayout( 0, Qt::Vertical ); - supplGrp->layout()->setSpacing( 0 ); - supplGrp->layout()->setMargin( 0 ); - QGridLayout* supplGrpLayout = new QGridLayout( supplGrp->layout() ); - supplGrpLayout->setAlignment( Qt::AlignTop ); - supplGrpLayout->setSpacing( SPACING_SIZE ); - supplGrpLayout->setMargin( MARGIN_SIZE ); - - QSize myMinimumSize(int(MIN_EDIT_SIZE*0.3), 0); - - myAuthorEdit = new QLineEdit( supplGrp , "myAuthorEdit" ); - myAuthorEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myAuthorEdit->setMinimumSize( myMinimumSize ); - - OSD_Process aProcess; - myAuthorEdit->setText(aProcess.UserName().ToCString()); - - myVersionEdit = new QLineEdit(supplGrp , "myVersion" ); - myVersionEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myVersionEdit->setMinimumSize( myMinimumSize ); - QStringList aList = QStringList::split(QRegExp("\\s+"),tr( "INF_VERSION" )); - myVersionEdit->setText(aList.last()); - - myPngEdit = new QLineEdit(supplGrp , "myCompIcon" ); - myPngEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myPngEdit->setMinimumSize( MIN_EDIT_SIZE, 0 ); - - myBrowsePngBtn = new QPushButton( tr( "TOOLS_BUT_BROWSE" ), supplGrp, "myBrowsePngBtn" ); - - myCompName = new QLineEdit(supplGrp , "myCompName"); - myCompName->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myCompName->setMinimumSize( myMinimumSize ); - - myCompUserName = new QLineEdit(supplGrp , "myCompUserName"); - myCompUserName->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myCompUserName->setMinimumSize( (int)(MIN_EDIT_SIZE*0.3), 0 ); - - myCompType = new QLineEdit(supplGrp , "myCompType"); - myCompType->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myCompType->setMinimumSize( myMinimumSize ); - myCompType->setText("OTHER"); - - myCompMultiStd = new QLineEdit(supplGrp , "myCompMultiStd"); - myCompMultiStd->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - myCompMultiStd->setMinimumSize( myMinimumSize ); - myCompMultiStd->setText("1"); - QIntValidator *ivalidator = new QIntValidator(myVersionEdit); - myCompMultiStd->setValidator(ivalidator); - - supplGrpLayout->addWidget( new QLabel( tr( "TOOLS_AUTHOR" ), supplGrp ), 0, 0); - supplGrpLayout->addWidget( myAuthorEdit, 0, 1 ); - supplGrpLayout->addWidget( new QLabel( tr( "TOOLS_COMP_NAME" ), supplGrp ), 0, 2); - supplGrpLayout->addWidget(myCompName,0,3); - supplGrpLayout->addWidget( new QLabel( tr( "TOOLS_COMP_USERNAME" ), supplGrp ), 0, 4); - supplGrpLayout->addWidget(myCompUserName,0,5); - supplGrpLayout->addWidget( new QLabel( tr( "TOOLS_VERSION" ), supplGrp ), 1, 0); - supplGrpLayout->addWidget( myVersionEdit, 1, 1); - supplGrpLayout->addWidget( new QLabel( tr( "TOOLS_COMP_MULTISTD" ), supplGrp ), 1, 2); - supplGrpLayout->addWidget(myCompMultiStd,1,3); - supplGrpLayout->addWidget( new QLabel( tr( "TOOLS_COMP_TYPE" ), supplGrp ), 1, 4); - supplGrpLayout->addWidget(myCompType,1,5); - supplGrpLayout->addWidget( new QLabel( tr( "TOOLS_PNG_FILE" ), supplGrp ), 2, 0); - supplGrpLayout->addMultiCellWidget( myPngEdit, 2,2,1,4 ); - supplGrpLayout->addWidget( myBrowsePngBtn, 2, 5 ); - - - QHBoxLayout* aBtnLayout = new QHBoxLayout; - aBtnLayout->setSpacing( SPACING_SIZE ); - aBtnLayout->setMargin( 0 ); - - myApplyBtn = new QPushButton( tr( "TOOLS_BUT_APPLY" ), this, "myApplyBtn" ); - myApplyBtn->setAutoDefault( true ); - myApplyBtn->setDefault( true ); - myCloseBtn = new QPushButton( tr( "TOOLS_BUT_CLOSE" ), this, "myCloseBtn" ); - myCloseBtn->setAutoDefault( true ); - - aBtnLayout->addWidget( myApplyBtn ); - aBtnLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aBtnLayout->addWidget( myCloseBtn ); - - aTopLayout->addWidget( filesGrp, 0, 0 ); - aTopLayout->addWidget( supplGrp, 1, 0 ); - aTopLayout->addLayout( aBtnLayout, 2, 0 ); - - /* signals and slots connections */ - connect( myApplyBtn, SIGNAL( clicked() ), this, SLOT( onApply() ) ); - connect( myCloseBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); - connect( myBrowseIdlBtn, SIGNAL( clicked() ), this, SLOT( onBrowseBtnClicked() ) ); - connect( myBrowseXmlBtn, SIGNAL( clicked() ), this, SLOT( onBrowseBtnClicked() ) ); - connect( myBrowsePngBtn, SIGNAL( clicked() ), this, SLOT( onBrowseBtnClicked() ) ); - connect( myIdlEdit, SIGNAL( textChanged( const QString& ) ), this, SLOT( updateButtonState() ) ); - connect( myXmlEdit, SIGNAL( textChanged( const QString& ) ), this, SLOT( updateButtonState() ) ); - - updateButtonState(); -} - -/*! - destructor -*/ -ToolsGUI_CatalogGeneratorDlg::~ToolsGUI_CatalogGeneratorDlg() -{ -} - -/*! - \return IDL file name entered -*/ -QString ToolsGUI_CatalogGeneratorDlg::getIdlFile() -{ - return myIdlEdit->text().stripWhiteSpace(); -} - -/*! - \return XML file name entered -*/ -QString ToolsGUI_CatalogGeneratorDlg::getXmlFile() -{ - return myXmlEdit->text().stripWhiteSpace(); -} - -/*! - \return PNG file name entered -*/ -QString ToolsGUI_CatalogGeneratorDlg::getPngFile() -{ - return myPngEdit->text().stripWhiteSpace(); -} - -/*! - \return author -*/ -QString ToolsGUI_CatalogGeneratorDlg::getAuthor() -{ - return myAuthorEdit->text().stripWhiteSpace(); -} - -/*! - \return version number -*/ -QString ToolsGUI_CatalogGeneratorDlg::getVersion() -{ - return myVersionEdit->text().stripWhiteSpace(); -} - -/*! - \return name of the component -*/ -QString ToolsGUI_CatalogGeneratorDlg::getCompName() -{ - return myCompName->text().stripWhiteSpace(); -} - -/*! - \return username of the component -*/ -QString ToolsGUI_CatalogGeneratorDlg::getCompUserName() -{ - return myCompUserName->text().stripWhiteSpace(); -} - -/*! - \return type of the component -*/ -QString ToolsGUI_CatalogGeneratorDlg::getCompMultiStd() -{ - return myCompMultiStd->text().stripWhiteSpace(); -} - -/*! - \return type of the component -*/ -QString ToolsGUI_CatalogGeneratorDlg::getCompType() -{ - return myCompType->text().stripWhiteSpace(); -} - -/*! - \return IDL path of modules -*/ -QString ToolsGUI_CatalogGeneratorDlg::getIdlPath() -{ - cout << "QAD_Desktop::getCatalogue() is not implemented!!"; - if ( true ) - return QString( "" ); -/* - SALOME_ModuleCatalog::ModuleCatalog_var aCatalog = - SALOME_ModuleCatalog::ModuleCatalog::_narrow( QAD_Application::getDesktop()->getCatalogue() ); - - SALOME_ModuleCatalog::ListOfIAPP_Affich_var list_composants = - aCatalog->GetComponentIconeList(); - - QString IDLpath = ""; - - for (unsigned int ind = 0; ind < list_composants->length();ind++) { - QString modulename = CORBA::string_dup(list_composants[ind].modulename) ; - - QCString dir; - if (dir = getenv( modulename + "_ROOT_DIR")) { - IDLpath = IDLpath + "-I" + SUIT_Tools::addSlash( SUIT_Tools::addSlash(dir) + - SUIT_Tools::addSlash("idl") + - SUIT_Tools::addSlash("salome")) + " "; - } - } - - // MESSAGE ( " IDLpath = " << IDLpath); - - return IDLpath; -*/ -} - -/*! - SLOT: called on Browse button click -*/ -void ToolsGUI_CatalogGeneratorDlg::onBrowseBtnClicked() -{ - QPushButton* send = (QPushButton*)sender(); - - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - - if ( send == myBrowseIdlBtn ) { - QString file = app->getFileName( true, myIdlEdit->text().stripWhiteSpace(), tr("TOOLS_MEN_IMPORT_IDL"), tr("TOOLS_MEN_IMPORT"), 0 ); - if ( !file.isEmpty() ) { - myIdlEdit->setText(file); - } - } - else if ( send == myBrowseXmlBtn ) { - QString file = app->getFileName( false, myXmlEdit->text().stripWhiteSpace(), tr("TOOLS_MEN_EXPORT_XML"), tr("TOOLS_MEN_EXPORT"), 0 ); - if ( !file.isEmpty() ) { - myXmlEdit->setText(file); - } - } else if ( send == myBrowsePngBtn ) { - QString file = app->getFileName( true, myPngEdit->text().stripWhiteSpace(), tr("TOOLS_MEN_IMPORT_PNG"), tr("TOOLS_MEN_IMPORT"), 0 ); - if ( !file.isEmpty() ) { - myPngEdit->setText(file); - - } - } - updateButtonState(); -} - -/*! - Updates button's state -*/ -void ToolsGUI_CatalogGeneratorDlg::updateButtonState() -{ - myApplyBtn->setEnabled( !myIdlEdit->text().stripWhiteSpace().isEmpty() && - !myXmlEdit->text().stripWhiteSpace().isEmpty() ); -} - -/*! - button slot, performs IDL->XML conversion -*/ -void ToolsGUI_CatalogGeneratorDlg::onApply() -{ - QString IDLpath = getIdlPath(); - QString XmlFile = getXmlFile(); - QString IdlFile = getIdlFile(); - QString Author = getAuthor(); - QString Version = getVersion(); - QString PngFile = getPngFile(); - QString CompName = getCompName(); //gets component name - QString CompUserName = getCompUserName(); //gets component username - QString CompType = getCompType(); //gets component type - QString CompMultiStd = getCompMultiStd(); - - if ( !XmlFile.isEmpty() && !IdlFile.isEmpty() ) { - if ( !QFile::exists( IdlFile ) ) { - SUIT_MessageBox::error1( this, - tr("TOOLS_ERR_ERROR"), - tr("TOOLS_ERR_FILE_NOT_EXIST").arg(IdlFile), - tr ("TOOLS_BUT_OK") ); - } - else { - QString command = ""; - if ( getenv("KERNEL_ROOT_DIR") ) - command = QString( getenv( "KERNEL_ROOT_DIR" ) ) + "/bin/salome/runIDLparser -K " + IDLpath + " -Wbcatalog=" + XmlFile; - else { - SUIT_MessageBox::error1( this, - tr("TOOLS_ERR_ERROR"), - tr("KERNEL_ROOT_DIR variable is not defined"), - tr("TOOLS_BUT_OK") ); - } - - if (!Author.isEmpty()) command += ",author=" + Author; - if (!Version.isEmpty()) command += ",version=" + Version; - if (!PngFile.isEmpty()) { - OSD_Path aPath((Standard_CString)PngFile.latin1()); - TCollection_AsciiString aFile = aPath.Name() + aPath.Extension(); - command += QString(",icon=") + QString(aFile.ToCString()); - } - if (!CompName.isEmpty()) command += ",name=" + CompName; - if (!CompUserName.isEmpty()) command += ",username=" + CompUserName; - if (!CompType.isEmpty()) command += ",type=" + CompType; - if (!CompMultiStd.isEmpty()) command += ",multistudy=" + CompMultiStd; - command += " " + IdlFile; - MESSAGE( "shell command is : " << command ); - int res; - res = system( ( char* )( command.latin1() ) ); - if ( res == -1 ) { - MESSAGE( "work failed (system command result = " << res ); - } else if (res == 217) { - MESSAGE( "shell exec failed (system command result = " << res ); - } - } - } -} diff --git a/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.h b/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.h deleted file mode 100755 index 9169f0dde..000000000 --- a/src/TOOLSGUI/ToolsGUI_CatalogGeneratorDlg.h +++ /dev/null @@ -1,81 +0,0 @@ -// SALOME TOOLSGUI : implementation of desktop "Tools" optioins -// -// 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 : ToolsGUI_CatalogGeneratorDlg.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef DIALOGBOX_TOOLSGUI_CATALOGGENERATORDLG_H -#define DIALOGBOX_TOOLSGUI_CATALOGGENERATORDLG_H - -#include - -#include - -class QLineEdit; -class QPushButton; - -class Standard_EXPORT ToolsGUI_CatalogGeneratorDlg : public QDialog -{ - Q_OBJECT - -public: - ToolsGUI_CatalogGeneratorDlg( QWidget* parent = 0, const char* name = 0 ); - ~ToolsGUI_CatalogGeneratorDlg(); - - QString getIdlPath(); - QString getIdlFile(); - QString getXmlFile(); - QString getPngFile(); - QString getAuthor(); - QString getVersion(); - QString getCompName(); - QString getCompUserName(); - QString getCompType(); - QString getCompMultiStd(); - -protected slots: - void onBrowseBtnClicked(); - void updateButtonState(); - void onApply(); - -private: - QLineEdit* myIdlEdit; - QLineEdit* myXmlEdit; - QLineEdit* myPngEdit; - QLineEdit* myVersionEdit; - QLineEdit* myAuthorEdit; - QLineEdit* myCompName; - QLineEdit* myCompUserName; - QLineEdit* myCompType; - QLineEdit* myCompMultiStd; - QPushButton* myBrowseIdlBtn; - QPushButton* myBrowseXmlBtn; - QPushButton* myBrowsePngBtn; - - QPushButton* myApplyBtn; - QPushButton* myCloseBtn; -}; - -#endif // DIALOGBOX_TOOLSGUI_CATALOGGENERATORDLG_H diff --git a/src/TOOLSGUI/ToolsGUI_HelpWindow.cxx b/src/TOOLSGUI/ToolsGUI_HelpWindow.cxx deleted file mode 100755 index 4581ab882..000000000 --- a/src/TOOLSGUI/ToolsGUI_HelpWindow.cxx +++ /dev/null @@ -1,105 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : ToolsGUI_HelpWindow.cxx -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -# include "ToolsGUI_HelpWindow.h" -# include "utilities.h" - -# include -# include -# include -# include - -using namespace std; - -/*! - Constructor -*/ -ToolsGUI_HelpWindow::ToolsGUI_HelpWindow(QWidget* parent, const char* name ) - : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose ) -{ - BEGIN_OF("Constructeur ToolsGUI_HelpWindow"); - - setCaption( tr( "Help" ) ); - - myTextView = new QTextView( this, "myTextView" ); - QPalette pal = myTextView->palette(); - QColorGroup cg = pal.active(); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, Qt::white ); - cg.setColor( QColorGroup::Base, QColor( 255,255,220 ) ); - cg.setColor( QColorGroup::Text, Qt::black ); - pal.setActive ( cg ); - cg = pal.inactive(); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, Qt::white ); - cg.setColor( QColorGroup::Base, QColor( 255,255,220 ) ); - cg.setColor( QColorGroup::Text, Qt::black ); - pal.setInactive( cg ); - cg = pal.disabled(); - cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); - cg.setColor( QColorGroup::HighlightedText, Qt::white ); - cg.setColor( QColorGroup::Base, QColor( 255,255,220 ) ); - cg.setColor( QColorGroup::Text, Qt::black ); - pal.setDisabled( cg ); - myTextView->setPalette( pal ); - - setCentralWidget( myTextView ); - setMinimumSize( 450, 250 ); - - QFile f ( "tmp.txt" ); - if ( f.open( IO_ReadOnly ) ) - { - QTextStream t( &f ); - while ( !t.eof() ) - { - myTextView->append(t.readLine()); - } - } - f.close(); - - END_OF("Constructeur ToolsGUI_HelpWindow"); -} - -/*! - Destructor -*/ -ToolsGUI_HelpWindow::~ToolsGUI_HelpWindow() -{ - BEGIN_OF("Destructeur ToolsGUI_HelpWindow"); - END_OF("Destructeur ToolsGUI_HelpWindow"); -}; - -/*! - Sets text -*/ -void ToolsGUI_HelpWindow::setText( const QString& text ) -{ - myTextView->setText( text ); -} - - diff --git a/src/TOOLSGUI/ToolsGUI_HelpWindow.h b/src/TOOLSGUI/ToolsGUI_HelpWindow.h deleted file mode 100755 index b4849baf0..000000000 --- a/src/TOOLSGUI/ToolsGUI_HelpWindow.h +++ /dev/null @@ -1,53 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : HelpWindow.hxx -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -# ifndef __HELPWINDOW_H__ -# define __HELPWINDOW_H__ - -# include -# include - -class QTextView; - -class ToolsGUI_HelpWindow : public QMainWindow -{ - Q_OBJECT - -public: - ToolsGUI_HelpWindow( QWidget* parent = 0, const char* name = 0); - ~ToolsGUI_HelpWindow(); - - void setText( const QString& text ); - QTextView* textView() const { return myTextView; } - -private: - QTextView* myTextView; -}; -# endif /* __HELPWINDOW_H__ */ - - diff --git a/src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx b/src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx deleted file mode 100755 index 7d4fcb0da..000000000 --- a/src/TOOLSGUI/ToolsGUI_IntervalWindow.cxx +++ /dev/null @@ -1,127 +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 : ToolsGUI_IntervalWindow.cxx -// Author : Oksana TCHEBANOVA -// Module : SALOME - -#include "ToolsGUI_IntervalWindow.h" - -#include -#include -#include -#include -# include "utilities.h" - -#define MARGIN_SIZE 11 -#define SPACING_SIZE 6 -#define MIN_SPIN_WIDTH 100 - -/*! - Constructor -*/ -ToolsGUI_IntervalWindow::ToolsGUI_IntervalWindow ( QWidget* parent ) -: QDialog( parent, "ToolsGUI_IntervalWindow" , true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose ) -{ - BEGIN_OF("ToolsGUI_IntervalWindow constructor") - setCaption( tr( "Refresh Interval" ) ); - setSizeGripEnabled( true ); - - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setSpacing( SPACING_SIZE ); - topLayout->setMargin( MARGIN_SIZE ); - - QGroupBox* intervalGrp = new QGroupBox( this, "intervalGrp" ); - intervalGrp->setColumnLayout( 0, Qt::Horizontal );//Vertical - intervalGrp->layout()->setSpacing( 0 ); - intervalGrp->layout()->setMargin( 0 ); - QGridLayout* intervalGrpLayout = new QGridLayout( intervalGrp->layout() ); - intervalGrpLayout->setAlignment( Qt::AlignTop ); - intervalGrpLayout->setSpacing( SPACING_SIZE ); - intervalGrpLayout->setMargin( MARGIN_SIZE ); - - QHBoxLayout* aBtnLayout = new QHBoxLayout; - aBtnLayout->setSpacing( SPACING_SIZE ); - aBtnLayout->setMargin( 0 ); - - myButtonOk = new QPushButton( this, "buttonOk" ); - myButtonOk->setText( tr( "BUT_OK" ) ); - myButtonOk->setAutoDefault( TRUE ); - myButtonOk->setDefault( TRUE ); - - myButtonCancel = new QPushButton( this, "buttonCancel" ); - myButtonCancel->setText( tr( "BUT_CANCEL" ) ); - myButtonCancel->setAutoDefault( TRUE ); - - QLabel* TextLabel = new QLabel( intervalGrp, "TextLabel" ); - TextLabel->setText( tr( "Please, enter a number of seconds:" ) ); - - mySpinBox = new QSpinBox( 1, 999999999, 1, intervalGrp, "SpinBox" ); - mySpinBox->setValue( 100 ); - mySpinBox->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - mySpinBox->setMinimumWidth(MIN_SPIN_WIDTH); - - intervalGrpLayout->addWidget(TextLabel, 0, 0); - intervalGrpLayout->addWidget(mySpinBox, 0, 1); - - aBtnLayout->addWidget( myButtonOk ); - aBtnLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aBtnLayout->addWidget( myButtonCancel ); - - topLayout->addWidget( intervalGrp, 0, 0 ); - topLayout->addLayout( aBtnLayout, 1, 0 ); - - END_OF("ToolsGUI_IntervalWindow constructor") -} - -/*! - Destructor -*/ -ToolsGUI_IntervalWindow::~ToolsGUI_IntervalWindow() {} - -/*! - Sets start interval size -*/ -void ToolsGUI_IntervalWindow::setValue(const int size) -{ - mySpinBox->setValue(size); -} - -/*! - \return interval size -*/ -int ToolsGUI_IntervalWindow::getValue() -{ - return mySpinBox->value(); -} - -/*! - \return a pointer to myButtonOk -*/ -QPushButton* ToolsGUI_IntervalWindow::Ok() -{ - return myButtonOk; -} - -/*! - \return a pointer to myButtonCancel -*/ -QPushButton* ToolsGUI_IntervalWindow::Cancel() -{ - return myButtonCancel; -} diff --git a/src/TOOLSGUI/ToolsGUI_IntervalWindow.h b/src/TOOLSGUI/ToolsGUI_IntervalWindow.h deleted file mode 100755 index 242373657..000000000 --- a/src/TOOLSGUI/ToolsGUI_IntervalWindow.h +++ /dev/null @@ -1,55 +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 : IntervalWindow.hxx -// Author : Oksana TCHEBANOVA -// Module : SALOME - -#ifndef IntervalWindow_HeaderFile -#define IntervalWindow_HeaderFile - -# include -# include -# include -# include - -#ifndef WNT -using namespace std; -#endif - -class ToolsGUI_IntervalWindow : public QDialog -{ - Q_OBJECT - -public: - ToolsGUI_IntervalWindow( QWidget* parent = 0 ); - ~ToolsGUI_IntervalWindow(); - - QPushButton* Ok(); - QPushButton* Cancel(); - - int getValue(); - void setValue( int ); - -private: - QSpinBox* mySpinBox; - QPushButton* myButtonOk; - QPushButton* myButtonCancel; -}; - -#endif diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.cxx b/src/TOOLSGUI/ToolsGUI_RegWidget.cxx deleted file mode 100755 index d9c62a9bf..000000000 --- a/src/TOOLSGUI/ToolsGUI_RegWidget.cxx +++ /dev/null @@ -1,822 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : ToolsGUI_RegWidget.cxx -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# include "SALOME_NamingService.hxx" -# include "ServiceUnreachable.hxx" -# include "Utils_SINGLETON.hxx" -# include "Utils_CommException.hxx" - -# include "utilities.h" -# include "OpUtil.hxx" - -# include "ToolsGUI_RegWidget.h" -# include "ToolsGUI_HelpWindow.h" -# include "ToolsGUI_IntervalWindow.h" - -# include "Qtx.h" - -using namespace std; - -typedef int PIXELS; -ToolsGUI_RegWidget* ToolsGUI_RegWidget::myRegWidgetPtr = 0; - -QString addSlash( const QString& ); -QString findFile( QString filename ); - -#define BOLD( text ) ( QString( "" ) + QString( text ) + QString( "" ) ) - -static const char* const time_data[] = { -"16 16 6 1", -". c None", -"b c None", -"# c #000000", -"a c #4c4c4c", -"d c #878787", -"c c #ffffff", -".....#####ab....", -"...##cc#dc##ab..", -"..#ccc###dcc#ab.", -".#ccccc#dcccc#a.", -".#ccccc#dcccc#ab", -"#cccccc#dccccc#a", -"#cccccc#dccc#c#a", -"#c##ccc########a", -"#ccddcccdddd#d#a", -"#cccccccccccdc#a", -".#ccccccccccc#aa", -".#ccccc#ccccc#a.", -"..#cccc#dccc#aa.", -"...##cccdc##aa..", -".....#####aaa...", -"......aaaaa....."}; - -static const char* const close_data[] = { -"16 16 6 1", -"d c None", -". c None", -"# c #000000", -"a c #4c4c4c", -"c c #5b5b5b", -"b c #ffffff", -".....#####a.....", -"...##bbbbb##a...", -"..#bbbbbbbbb#a..", -".#b#cbbbbbb#d#a.", -".#bc#cbbbb#cb#a.", -"#bbbc#cbb#cbbb#a", -"#bbbbc#c#cbbbb#a", -"#bbbbbc#cbbbbb#a", -"#bbbbc#c#cbbbb#a", -"#bbb#ccbb##bbb#a", -".#b#c#bbbbc#b#aa", -".#bc#bbbbbb#c#a.", -"..#bbbbbbbbb#aa.", -"...##bbbbb##aa..", -".....#####aaa...", -"......aaaaa....."}; - -static const char* const refresh_data[] = { -"16 16 5 1", -". c None", -"# c #000000", -"a c #4c4c4c", -"c c #878787", -"b c #ffffff", -".....#####a.....", -"...##bb#bb##a...", -"..#bbbbc#bbb#a..", -".#bbbb####cbb#a.", -".#bbb#cc#cbbb#a.", -"#bbb#cb#cbbbbb#a", -"#bb#cbbbbbb#bb#a", -"#bb#cbbbbbb#cb#a", -"#bb#cbbbbbb#cb#a", -"#bbbbbb#bb#cbb#a", -".#bbbb#cb#cbb#aa", -".#bbb####cbbb#a.", -"..#bbb#cbbbb#aa.", -"...##bb#cb##aa..", -".....#####aaa...", -"......aaaaa....."}; - -/*! - Creates components list -*/ - -Registry::Components_var MakeRegistry( CORBA::ORB_var &orb ) -{ - - const char *registryName="Registry" ; - - SALOME_NamingService &naming = *SINGLETON_::Instance() ; - naming.init_orb( 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& ) - { - exit( EXIT_FAILURE ) ; - } - - // Specialisation de l'objet generique - - return Registry::Components::_narrow( object ) ; -} - -/*! - Only one global registry window should exist at the moment - This method creates registry window if necessary and returns it - [ static ] -*/ -ToolsGUI_RegWidget* ToolsGUI_RegWidget::GetRegWidget( CORBA::ORB_var &orb , QWidget *parent, const char *name ) -{ - if ( !myRegWidgetPtr ) - myRegWidgetPtr = new ToolsGUI_RegWidget( orb, parent, name ); - return myRegWidgetPtr; -} - -/*! - Constructor -*/ -ToolsGUI_RegWidget::ToolsGUI_RegWidget(CORBA::ORB_var &orb, QWidget *parent, const char *name ) - : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose ), - _VarComponents( MakeRegistry(orb) ), - _clients(0), _history(0), _parent( parent ), - _tabWidget(0), _refresh(0), _interval(0), - myInfoWindow(0), myHelpWindow(0), myIntervalWindow(0) -{ - QString aFile = findFile("default.png"); - /* char* dir = getenv( "CSF_ResourcesDefaults" ); - QString path( "" ); - if ( dir ) { - QDir qDir( dir ); - path = qDir.filePath( "default.png" ); - }*/ - QPixmap pm ( aFile ); - if ( !pm.isNull() ) - setIcon( pm ); - - // pixmap for buttons - QPixmap image_refresh ( ( const char** ) refresh_data ); - QPixmap image_interval( ( const char** ) time_data ); - QPixmap image_close ( ( const char** ) close_data ); - - // Buttons definition - QToolBar* topbar = new QToolBar( tr("Toolbar"), this ); - setDockEnabled( topbar, DockTornOff, false ); - setDockMenuEnabled( false ); - - _refresh = new QPushButton( tr( "Refresh" ), topbar ); - _refresh->setIconSet( image_refresh ); - _refresh->setFocusPolicy( NoFocus ); - connect( _refresh, SIGNAL( clicked() ), this, SLOT( slotListeSelect() ) ); - QToolTip::add( _refresh, "", toolTipGroup(), tr("Immediately updates list of components") ); - - /* PAL5540 - this button is needless - QPushButton* help = new QPushButton( tr( "Help" ), topbar ); - connect( help, SIGNAL( clicked() ), this, SLOT( slotHelp() ) ); - QToolTip::add( help, "", toolTipGroup(), tr("Opens Help window") ); - */ - - _interval = new QPushButton( tr( "Interval" ), topbar ); - _interval->setIconSet( image_interval ); - _interval->setFocusPolicy( NoFocus ); - connect( _interval, SIGNAL( clicked() ), this, SLOT( slotSelectRefresh() ) ); - QToolTip::add( _interval, "", toolTipGroup(), tr("Changes refresh interval") ); - - topbar->addSeparator(); - _close = new QPushButton( tr("Close"), topbar ); - _close->setIconSet( image_close ); - _close->setFocusPolicy( NoFocus ); - connect( _close, SIGNAL( clicked() ), this, SLOT( close() ) ); - QToolTip::add( _close, "", toolTipGroup(), tr("Closes Registry window") ); - - // Display area and associated slots definition - _tabWidget = new QTabWidget( this ); - _clients = new QListView( _tabWidget ); - SetListe(); - _history = new QListView( _tabWidget ); - SetListeHistory(); - - _tabWidget->addTab( _clients, tr( "Running" ) ); - _tabWidget->addTab( _history, tr( "History" ) ); - connect( _tabWidget, SIGNAL( currentChanged( QWidget* )), this, SLOT( slotListeSelect() ) ); - connect( _clients, SIGNAL( clicked( QListViewItem* ) ), this, SLOT( slotClientChanged( QListViewItem* ) ) ); - connect( _history, SIGNAL( clicked( QListViewItem* ) ), this, SLOT( slotHistoryChanged( QListViewItem* ) ) ); - setCentralWidget( _tabWidget ); - - // Timer definition (used to automaticaly refresh the display area) - _counter = new QTimer( this ); - connect( _counter, SIGNAL( timeout() ), this, SLOT( slotListeSelect() ) ); - myRefreshInterval = 10; - _counter->start( myRefreshInterval * 1000 ); - - PIXELS xpos = 160 ; - PIXELS ypos = 100 ; - PIXELS largeur = 800 ; - PIXELS hauteur = 350 ; - setGeometry( xpos, ypos, largeur, hauteur ) ; - setCaption( name ) ; - statusBar()->message(" "); -} - -/*! - Destructor -*/ -ToolsGUI_RegWidget::~ToolsGUI_RegWidget() -{ - MESSAGE("Debut du Destructeur"); - _counter->stop(); - myRegWidgetPtr = 0; -}; - -/*! - Event filter -*/ -bool ToolsGUI_RegWidget::eventFilter( QObject* object, QEvent* event ) -{ - if ( object ) { - if ( object == myHelpWindow && event->type() == QEvent::Close ) { - myHelpWindow = 0; - } - else if ( object == myInfoWindow && event->type() == QEvent::Close ) { - myInfoWindow = 0; - } - else if ( object == myIntervalWindow && event->type() == QEvent::Close ) { - myIntervalWindow = 0; - } - else if ( object == _clients && event->type() == QEvent::KeyPress ) { - QKeyEvent* ke = (QKeyEvent*)event; - if ( ke->key() == Key_Enter || ke->key() == Key_Return ) { - slotClientChanged( _clients->currentItem() ); - } - } - else if ( object == _history && event->type() == QEvent::KeyPress ) { - QKeyEvent* ke = (QKeyEvent*)event; - if ( ke->key() == Key_Enter || ke->key() == Key_Return ) { - slotHistoryChanged( _history->currentItem() ); - } - } - } - return QMainWindow::eventFilter( object, event ); -} - -/*! - Searches item in the list and returns it's index or -1 if not found -*/ -int ToolsGUI_RegWidget::numitem(const QString &name, const QString &pid, const QString &machine,const Registry::AllInfos *listclient) -{ - BEGIN_OF("numitem"); - for (CORBA::ULong i=0; ilength(); i++) - { - const Registry::Infos & c_info=(*listclient)[i]; - ASSERT( c_info.name!=NULL); - QString b; - b.setNum(int(c_info.pid)); - if ( (name.compare(QString(c_info.name)) == 0) && - (machine.compare(QString(c_info.machine)) == 0) && - (pid.compare(b) == 0) ) - { - END_OF("numitem"); - return i; - } - } - END_OF("numitem"); - return -1; -} - -/*! - Returns text, containing information about client [ static ] -*/ -QString ToolsGUI_RegWidget::setlongText( const Registry::Infos &c_info) -{ - BEGIN_OF("setlongText"); - ASSERT( c_info.name != NULL ); - QString a = QString( "

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



" ); - a.append( "" ); // ASV: 28.07.06 : added tags to make the text font be - // fixed width (looks much better on Windows) - a.append( tr( "Process Id" ) + QString( " : " ) ); - a.append( BOLD( QString::number( int( c_info.pid ) ) ) ); - a.append( QString( " " ) + tr( "on machine" ) + QString( " " ) ); - a.append( BOLD( c_info.machine ) ); - a.append( QString( " " ) + tr( "ip address" ) + QString( " : " ) ); - a.append( BOLD( c_info.adip ) ); - a.append( "
" ); - - a.append( tr( "launched by user" ) + QString( " " ) ); - a.append( BOLD( c_info.pwname ) ); - a.append( QString( " ( " ) + tr( "pid" ) + QString( " : " ) ); - a.append( BOLD( QString::number( int( c_info.uid ) ) ) ); - a.append( QString( " )
" ) + tr( "in directory" ) + QString( " " )); - a.append( BOLD( c_info.cdir ) ); - - time_t aTime; - a.append( QString( "
" ) + tr( "begins" ) + QString( " " ) ); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - a.append( BOLD( t1 ) ); - delete [] t1; - a.append( "
" ); - - if (c_info.tc_hello != 0 ) - { - aTime = time_t(c_info.tc_hello); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - a.append( tr( "last signal" ) + QString(" : ") ); - a.append( BOLD( t2 ) ); - a.append( "
" ); - delete [] t2; - } - if ((c_info.tc_end - c_info.difftime) != 0) - { - aTime = time_t(c_info.tc_end); - char * t3 = (char * )duplicate(ctime(&aTime)); - t3 [strlen(t3) -1 ] = ' '; - a.append( tr( "ends" ) + QString( " " ) ); - a.append( BOLD( t3 ) ); - a.append( "
" ); - delete [] t3; - } - else - { - a.append( tr( "still running" ) + QString( "
" ) ); - } - - SCRUTE(c_info.difftime); - if (c_info.difftime!= 0) - { - a.append( QString( "(" ) + tr( "Time on" ) + QString( " " ) ); - a.append( BOLD( c_info.machine ) ); - a.append( QString( " " ) + tr( "differs from server's time. The difference is" ) + QString( " " )); - a.append( BOLD( QString::number( int( c_info.difftime ) ) ) ); - a.append( QString( " " ) + tr( "seconds" ) + QString( ")
" ) ); - } - a.append( "
" ); // ASV: 28.07.06 : added tags to make the text font be - // fixed width (looks much better on Windows) - END_OF("setlongText"); - return a; - -} - -/*! - Close event -*/ -void ToolsGUI_RegWidget::closeEvent( QCloseEvent *e) -{ - BEGIN_OF("closeEvent"); - if ( myInfoWindow ) - myInfoWindow->close(); - if ( myHelpWindow ) - myHelpWindow->close(); - if (myIntervalWindow) - myIntervalWindow->close(); - e->accept(); - END_OF("closeEvent"); -}; - -/*! - Setups Clients list -*/ -void ToolsGUI_RegWidget::SetListe() -{ - BEGIN_OF("SetListe"); - _clients->installEventFilter( this ); - _clients->setAllColumnsShowFocus( true ); - _clients->addColumn( tr( "Component" ), -1); - _clients->addColumn( tr( "PID" ), -1 ); - _clients->addColumn( tr( "User Name" ), -1 ); - _clients->addColumn( tr( "Machine" ), -1 ); - _clients->addColumn( tr( "begins" ), -1 ); - _clients->addColumn( tr( "hello" ) , -1 ); - _clients->setColumnAlignment( 1, Qt::AlignRight ); - END_OF("SetListe"); -} - -/*! - Setups History list -*/ -void ToolsGUI_RegWidget::SetListeHistory() -{ - BEGIN_OF("SetListeHistory") - _history->installEventFilter( this ); - _history->setAllColumnsShowFocus( true ); - _history->addColumn( tr( "Component" ), -1); - _history->addColumn( tr( "PID" ), -1 ); - _history->addColumn( tr( "User Name" ), -1 ); - _history->addColumn( tr( "Machine" ), -1 ); - _history->addColumn( tr( "begins" ), -1 ); - _history->addColumn( tr( "ends" ), -1 ); - _history->setColumnAlignment( 1, Qt::AlignRight ); - END_OF("SetListeHistory") -} - -/*! - Updates History list -*/ -void ToolsGUI_RegWidget::InfoHistory() -{ - - BEGIN_OF("InfoHistory") - _history->clear(); - try - { - time_t aTime; - _serverhistory = _VarComponents->history(); - for (CORBA::ULong i=0; i<_serverhistory->length(); i++) - { - const Registry::Infos & c_info=(*_serverhistory)[i]; - ASSERT( c_info.name!=NULL); - QString a; - a.setNum(int(c_info.pid)); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - aTime = time_t(c_info.tc_end); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - QListViewItem * item = new QListViewItem(_history, QString(c_info.name),\ - a, QString(c_info.pwname), QString(c_info.machine), \ - QString(t1), QString(t2)); - item=0 ; - delete [] t1; - delete [] t2; - - } - } - catch( ... ) - { - _interval->setDisabled( TRUE ) ; - _refresh->setDisabled( TRUE ) ; - _counter->stop(); - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ; - } - END_OF("InfoHistory") -} - -/*! - Updates clients list -*/ -void ToolsGUI_RegWidget::InfoReg() -{ - BEGIN_OF("InfoReg") - _clients->clear(); - try - { - time_t aTime; - _serverclients = _VarComponents->getall(); - for (CORBA::ULong i=0; i<_serverclients->length(); i++) - { - const Registry::Infos & c_info=(*_serverclients)[i]; - ASSERT( c_info.name!=NULL); - QString a; - a.setNum(int(c_info.pid)); - aTime = time_t(c_info.tc_start); - char * t1 = (char * )duplicate(ctime(&aTime)); - t1 [strlen(t1) -1 ] = ' '; - aTime = time_t(c_info.tc_hello); - char * t2 = (char * )duplicate(ctime(&aTime)); - t2 [strlen(t2) -1 ] = ' '; - QListViewItem * item = new QListViewItem(_clients, QString(c_info.name),\ - a, QString(c_info.pwname), QString(c_info.machine), \ - QString(t1), QString(t2)); - item=0 ; - delete [] t1; - delete [] t2; - - } - } - catch( ... ) - { - _interval->setDisabled( TRUE ) ; - _refresh->setDisabled( TRUE ) ; - _counter->stop(); - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ; - } - END_OF("InfoReg") -} - -/*! - Called when button is clicked -*/ -void ToolsGUI_RegWidget::slotListeSelect() -{ - try - { - ASSERT(_tabWidget->currentPage() != NULL); - if (_tabWidget->currentPage () == _clients) InfoReg(); - else if (_tabWidget->currentPage () == _history) InfoHistory(); - } - catch( ... ) - { - MESSAGE("Sorry, No more Registry Server") ; - statusBar()->message( tr( "Sorry, No more Registry Server" ) ) ; - } -} - -/*! - Called when button is clicked (changing refresh interval) -*/ -void ToolsGUI_RegWidget::slotSelectRefresh() -{ - BEGIN_OF("slotSelectRefresh"); - myIntervalWindow = new ToolsGUI_IntervalWindow(this); - myIntervalWindow->installEventFilter( this ); - myIntervalWindow->setValue(myRefreshInterval); - myIntervalWindow->show(); - connect( myIntervalWindow->Cancel(), SIGNAL( clicked() ), myIntervalWindow, SLOT( close() ) ); - connect( myIntervalWindow->Ok(), SIGNAL( clicked() ), this, SLOT( slotIntervalOk() ) ); - END_OF("slotSelectRefresh"); -} - -/*! - SLOT: called when IntervalWindow's OK button is clicked -*/ -void ToolsGUI_RegWidget::slotIntervalOk() -{ - BEGIN_OF("slotIntervalOk"); - myRefreshInterval = myIntervalWindow->getValue(); - _counter->changeInterval( myRefreshInterval * 1000 ); - SCRUTE(myRefreshInterval); - myIntervalWindow->close(); - END_OF("slotIntervalOk"); -} -/*! - Called when button is clicked -*/ -void ToolsGUI_RegWidget::slotHelp() -{ - BEGIN_OF("slotHelp()"); - - if ( !myHelpWindow ) { - myHelpWindow = new ToolsGUI_HelpWindow( this ); - myHelpWindow->installEventFilter( this ); - } - myHelpWindow->show(); - myHelpWindow->raise(); - myHelpWindow->setActiveWindow(); - - END_OF("slotHelp()") ; -} - -/*! - Called when user clicks on item in list -*/ -void ToolsGUI_RegWidget::slotClientChanged( QListViewItem* item ) -{ - BEGIN_OF("slotClientChanged()") ; - - if ( item <= 0) - return; - - blockSignals( true ); // for sure that item will not be deleted when refreshing - - int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverclients); - SCRUTE(numeroItem) ; - SCRUTE(item->text(1)) ; - - ASSERT(numeroItem>=0) ; - ASSERT((size_t)numeroItem<_serverclients->length()) ; - const Registry::Infos & c_info=(*_serverclients)[numeroItem]; - ASSERT( c_info.name!=NULL); - - if ( !myInfoWindow ) { - myInfoWindow = new ToolsGUI_InfoWindow( this ); - myInfoWindow->installEventFilter( this ); - } - QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name ); - myInfoWindow->setCaption(a); - myInfoWindow->setText( ToolsGUI_RegWidget::setlongText( c_info) ); - myInfoWindow->show(); - myInfoWindow->raise(); - myInfoWindow->setActiveWindow(); - - blockSignals( false ); // enabling signals again - - END_OF("slotClientChanged()") ; - return ; -} - -/*! - Called when user clicks on item in list -*/ -void ToolsGUI_RegWidget::slotHistoryChanged( QListViewItem* item ) -{ - - BEGIN_OF("slotHistoryChanged()") ; - - if ( item <= 0) - return; - - blockSignals( true ); // for sure that item will not be deleted when refreshing - - int numeroItem = numitem(item->text(0), item->text(1), item->text(3), _serverhistory); - - SCRUTE(numeroItem) ; - SCRUTE(item->text(1)) ; - ASSERT(numeroItem>=0) ; - ASSERT((size_t)numeroItem<_serverhistory->length()) ; - const Registry::Infos & c_info=(*_serverhistory)[numeroItem]; - ASSERT( c_info.name!=NULL); - - if ( !myInfoWindow ) { - myInfoWindow = new ToolsGUI_InfoWindow( this ); - myInfoWindow->installEventFilter( this ); - } - QString a = tr( "More about" ) + QString( " " ) + QString( c_info.name ); - myInfoWindow->setCaption(a); - myInfoWindow->setText( ToolsGUI_RegWidget::setlongText( c_info ) ); - myInfoWindow->show(); - myInfoWindow->raise(); - myInfoWindow->setActiveWindow(); - - blockSignals( false ); // enabling signals again - - END_OF("slotHistoryChanged()") ; - return ; -} - -/*! - Constructor -*/ -ToolsGUI_InfoWindow::ToolsGUI_InfoWindow( QWidget* parent, const char* name ) - : QMainWindow( parent, name, WType_TopLevel | WDestructiveClose ) -{ - BEGIN_OF("InfoWindow"); - myTextView = new QTextView( this, "myTextView" ); - setCentralWidget( myTextView ); - setMinimumSize( 450, 250 ); - END_OF("InfoWindow"); -} - -/*! - Sets text -*/ -void ToolsGUI_InfoWindow::setText( const QString& text ) -{ - myTextView->setText( text ); -} - -/*! - Key press event -*/ -void ToolsGUI_InfoWindow::keyPressEvent( QKeyEvent * e ) -{ - QMainWindow::keyPressEvent( e ); - if ( e->key() == Key_Escape ) - close(); -} - -static const char* SEPARATOR = ":"; - -QString findFile( QString filename ) -{ - QString dir; - char* cenv; - - // Try ${HOME}/.salome/resources directory - cenv = getenv( "HOME" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + ".salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } - // Try ${SALOME_SITE_DIR}/share/salome/resources directory - cenv = getenv( "SALOME_SITE_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - cenv = getenv("SALOME_SITE_NAME"); - if (cenv) dir = dir + cenv; - else dir = dir + "salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } - // Try ${KERNEL_ROOT_DIR}/share/salome/resources directory - cenv = getenv( "KERNEL_ROOT_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - dir = dir + "salome" ; - 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(); - } - } - - //SRN Added support for SALOMEGUI - cenv = getenv( "SALOMEGUI_ROOT_DIR" ); - if ( cenv ) { - dir.sprintf( "%s", cenv ); - if ( !dir.isEmpty() ) { - dir = addSlash(dir) ; - dir = dir + "share" ; - dir = addSlash(dir) ; - dir = dir + "salome" ; - dir = addSlash(dir) ; - dir = dir + "resources" ; - dir = addSlash(dir) ; - QFileInfo fileInfo( dir + filename ); - if ( fileInfo.isFile() && fileInfo.exists() ) - return fileInfo.filePath(); - } - } - - // 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 < (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 ); -} diff --git a/src/TOOLSGUI/ToolsGUI_RegWidget.h b/src/TOOLSGUI/ToolsGUI_RegWidget.h deleted file mode 100755 index be40bc8a2..000000000 --- a/src/TOOLSGUI/ToolsGUI_RegWidget.h +++ /dev/null @@ -1,119 +0,0 @@ -// SALOME RegistryDisplay : GUI for Registry server implementation -// -// 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 : RegWidget.h -// Author : Pascale NOYRET, EDF -// Module : SALOME -// $Header$ - -#ifndef __REGWIDGET_H__ -#define __REGWIDGET_H__ -#include -#include - -#include -#include CORBA_CLIENT_HEADER(SALOME_Registry) - -class QTabWidget; -class QListView; -class QListViewItem; -class QWidget; -class QTimer; -class QCloseEvent; -class QTextView; -#if QT_VERSION > 300 -class QPushButton; -#endif - -#include - -class ToolsGUI_HelpWindow; -class ToolsGUI_IntervalWindow; - -class Standard_EXPORT ToolsGUI_InfoWindow : public QMainWindow -{ - Q_OBJECT - -public: - ToolsGUI_InfoWindow( QWidget* parent = 0, const char* name = 0); - - void setText( const QString& text ); - QTextView* textView() const { return myTextView; } - -protected: - void keyPressEvent( QKeyEvent * e ); - -private: - QTextView* myTextView; -}; - -class Standard_EXPORT ToolsGUI_RegWidget : public QMainWindow -{ - Q_OBJECT - -public: - ToolsGUI_RegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 ); - ~ToolsGUI_RegWidget(); - void SetListe(); - void SetListeHistory(); - void InfoReg(); - void InfoHistory(); - - bool eventFilter( QObject* object, QEvent* event ); - - static ToolsGUI_RegWidget* GetRegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 ); - -public slots: - void slotHelp(); - void slotListeSelect(); - void slotClientChanged( QListViewItem* ); - void slotHistoryChanged( QListViewItem* ); - void slotSelectRefresh(); - void slotIntervalOk(); -protected: - static QString setlongText( const Registry::Infos &c_info ); - int numitem( const QString& name, const QString& pid, const QString& machine, const Registry::AllInfos* c_info ); - void closeEvent( QCloseEvent *e); - -protected : - QListView* _clients; - QListView* _history; - QWidget* _parent; - QTabWidget* _tabWidget; - QPushButton* _refresh; - QPushButton* _interval; - QPushButton* _close; - QTimer* _counter; - Registry::AllInfos* _serverhistory; - Registry::AllInfos* _serverclients; - ToolsGUI_InfoWindow* myInfoWindow; - ToolsGUI_HelpWindow* myHelpWindow; - ToolsGUI_IntervalWindow* myIntervalWindow; - int myRefreshInterval; - -private: - const Registry::Components_var _VarComponents; - static ToolsGUI_RegWidget* myRegWidgetPtr; -}; - -#endif diff --git a/src/TOOLSGUI/resources/ToolsGUI_icons.po b/src/TOOLSGUI/resources/ToolsGUI_icons.po deleted file mode 100755 index f59a4fc94..000000000 --- a/src/TOOLSGUI/resources/ToolsGUI_icons.po +++ /dev/null @@ -1,41 +0,0 @@ -# SALOME TOOLSGUI : implementation of desktop "Tools" optioins -# -# 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 : ToolsGUI_icons.po -# Module : SALOME - -msgid "" -msgstr "" -"Project-Id-Version: SALOME VERSION 0.4\n" -"POT-Creation-Date: 2002-04-25 10:04:12 PM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: Nicolas REJNERI\n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -# -#============================================================================== -# - -#: ToolsGUI_CatalogGeneratorDlg.cxx:50 -msgid "ToolsGUI_CatalogGeneratorDlg::ICON_SELECT" -msgstr "select1.png" diff --git a/src/TOOLSGUI/resources/ToolsGUI_msg_en.po b/src/TOOLSGUI/resources/ToolsGUI_msg_en.po deleted file mode 100755 index cfab19fbb..000000000 --- a/src/TOOLSGUI/resources/ToolsGUI_msg_en.po +++ /dev/null @@ -1,130 +0,0 @@ -# SALOME TOOLSGUI : implementation of desktop "Tools" optioins -# -# 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 : ToolsGUI_msg_en.po -# Module : SALOME - -msgid "" -msgstr "" -"Project-Id-Version: SALOME VERSION 0.4\n" -"POT-Creation-Date: 2002-04-25 10:04:12 PM CEST\n" -"PO-Revision-Date: YYYY-MM-DD\n" -"Last-Translator: Nicolas REJNERI\n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -# -#============================================================================== -# - -#: ToolsGUI_CatalogGeneratorDlg.cxx:58 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_FILES" -msgstr "Files" - -#: ToolsGUI_CatalogGeneratorDlg.cxx:58 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_SUPPLEMENT" -msgstr "Component supplementary data" - -#: ToolsGUI_CatalogGeneratorDlg.cxx:150 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_MEN_EXPORT" -msgstr "Export" - -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_MEN_IMPORT" -msgstr "Import" - -#: ToolsGUI_CatalogGeneratorDlg.cxx:47 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_CATALOG_GENERATOR" -msgstr "Catalog generator" - -#: ToolsGUI_CatalogGeneratorDlg.cxx:82 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_IDL_FILE" -msgstr "IDL : " - -#: ToolsGUI_CatalogGeneratorDlg.cxx:88 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_XML_FILE" -msgstr "XML : " - -#: ToolsGUI_CatalogGeneratorDlg.cxx:88 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_PNG_FILE" -msgstr "Icon : " - -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_AUTHOR" -msgstr "Author : " - -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_VERSION" -msgstr "Version : " - -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_COMP_NAME" -msgstr "Name : " - -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_COMP_USERNAME" -msgstr "UserName : " - -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_COMP_TYPE" -msgstr "Type : " - -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_COMP_MULTISTD" -msgstr "Multistudy : " - -#: ToolsGUI_CatalogGeneratorDlg.cxx:153 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_MEN_EXPORT_XML" -msgstr "XML Files ( *.xml )" - -#: ToolsGUI_CatalogGeneratorDlg.cxx:154 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_MEN_IMPORT_IDL" -msgstr "IDL Files ( *.idl )" - -#: ToolsGUI_CatalogGeneratorDlg.cxx:154 -msgid "ToolsGUI_CatalogGeneratorDlg::TOOLS_MEN_IMPORT_PNG" -msgstr "PNG Files ( *.png )" - -# -#============================================================================== -# - -#: ToolsGUI_CatalogGeneratorDlg.cxx:107 -msgid "TOOLS_BUT_CLOSE" -msgstr "&Close" - -#: ToolsGUI_CatalogGeneratorDlg.cxx:113 -msgid "TOOLS_BUT_OK" -msgstr "&Ok" - -msgid "TOOLS_BUT_BROWSE" -msgstr "Browse..." - -msgid "TOOLS_BUT_APPLY" -msgstr "&Apply" - -# -#============================================================================== -# - -#: ToolsGUI_CatalogGeneratorDlg.cxx:53 -msgid "TOOLS_WRN_WARNING" -msgstr "Warning" - -msgid "TOOLS_ERR_ERROR" -msgstr "Error" - -msgid "TOOLS_ERR_FILE_NOT_EXIST" -msgstr "%1\nFile doesn't exist" diff --git a/src/VTKViewer/Makefile.in b/src/VTKViewer/Makefile.in deleted file mode 100755 index 020d20abe..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@ diff --git a/src/VTKViewer/VTKViewer.cxx b/src/VTKViewer/VTKViewer.cxx deleted file mode 100644 index 6a548f1df..000000000 --- a/src/VTKViewer/VTKViewer.cxx +++ /dev/null @@ -1,57 +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 : -// Author : -// Module : -// $Header$ - -#include "VTKViewer_Actor.h" -#include "VTKViewer_CellRectPicker.h" -#include "VTKViewer_ExtractUnstructuredGrid.h" -#include "VTKViewer_ConvexTool.h" -#include "VTKViewer_Filter.h" -#include "VTKViewer_GeometryFilter.h" -#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" -#include "VTKViewer_TransformFilter.h" -#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" -#include "VTKViewer_Functor.h" - -int -main(int argc, char** argv) -{ - return 0; -} diff --git a/src/VTKViewer/VTKViewer.h b/src/VTKViewer/VTKViewer.h deleted file mode 100755 index 77de94830..000000000 --- a/src/VTKViewer/VTKViewer.h +++ /dev/null @@ -1,40 +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 -// - -#ifndef VTKVIEWER_H -#define VTKVIEWER_H - -#ifdef WNT -# ifdef VTKVIEWER_EXPORTS -# define VTKVIEWER_EXPORT __declspec( dllexport ) -# else -# define VTKVIEWER_EXPORT __declspec( dllimport ) -# endif -#else -# define VTKVIEWER_EXPORT -#endif - -#include - -#if !defined(vtkFloatingPointType) -# define vtkFloatingPointType vtkFloatingPointType - typedef float vtkFloatingPointType; -#endif - -#endif diff --git a/src/VTKViewer/VTKViewer_Actor.cxx b/src/VTKViewer/VTKViewer_Actor.cxx deleted file mode 100755 index 5f0e621e7..000000000 --- a/src/VTKViewer/VTKViewer_Actor.cxx +++ /dev/null @@ -1,677 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_Actor.cxx -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -/*! - \class SALOME_Actor SALOME_Actor.h - \brief Abstract class of SALOME Objects in VTK. -*/ - - -#include "VTKViewer_Actor.h" - -#include "VTKViewer_Transform.h" -#include "VTKViewer_TransformFilter.h" -#include "VTKViewer_PassThroughFilter.h" -#include "VTKViewer_GeometryFilter.h" - -// VTK Includes -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -#if defined __GNUC__ - #if __GNUC__ == 2 - #define __GNUC_2__ - #endif -#endif - -int VTKViewer_POINT_SIZE = 5; -int VTKViewer_LINE_WIDTH = 3; - - -vtkStandardNewMacro(VTKViewer_Actor); - -/*! - Constructor -*/ -VTKViewer_Actor -::VTKViewer_Actor(): - myIsHighlighted(false), - myIsPreselected(false), - myRepresentation(VTK_SURFACE), - myDisplayMode(1), - myProperty(vtkProperty::New()), - PreviewProperty(NULL), - myIsInfinite(false), - myIsResolveCoincidentTopology(true), - myStoreMapping(false), - myGeomFilter(VTKViewer_GeometryFilter::New()), - myTransformFilter(VTKViewer_TransformFilter::New()) -{ - vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, - myPolygonOffsetUnits); - - for(int i = 0; i < 6; i++) - myPassFilter.push_back(VTKViewer_PassThroughFilter::New()); -} - -/*! - Destructor -*/ -VTKViewer_Actor -::~VTKViewer_Actor() -{ - SetPreviewProperty(NULL); - - myGeomFilter->Delete(); - - myTransformFilter->Delete(); - - for(int i = 0, iEnd = myPassFilter.size(); i < iEnd; i++) - if(myPassFilter[i]) - myPassFilter[i]->Delete(); - - myProperty->Delete(); -} - -/*! - \return name -*/ -const char* -VTKViewer_Actor -::getName() -{ - return myName.c_str(); -} - -/*! - Sets name - \param theName - new name -*/ -void -VTKViewer_Actor -::setName(const char* theName) -{ - myName = theName; -} - -/*! - To publish the actor an all its internal devices -*/ -void -VTKViewer_Actor -::AddToRender(vtkRenderer* theRenderer) -{ - theRenderer->AddActor(this); -} - -/*! - To remove the actor an all its internal devices -*/ -void -VTKViewer_Actor -::RemoveFromRender(vtkRenderer* theRenderer) -{ - theRenderer->RemoveActor(this); -} - -/*! - Used to obtain all dependent actors -*/ -void -VTKViewer_Actor -::GetChildActors(vtkActorCollection*) -{} - -/*! - Apply view transformation - \param theTransform - view transformation -*/ -void -VTKViewer_Actor -::SetTransform(VTKViewer_Transform* theTransform) -{ - myTransformFilter->SetTransform(theTransform); -} - - -/*! - To insert some additional filters and then sets the given #vtkMapper -*/ -void -VTKViewer_Actor -::SetMapper(vtkMapper* theMapper) -{ - InitPipeLine(theMapper); -} - -/*! - Initialization -*/ -void -VTKViewer_Actor -::InitPipeLine(vtkMapper* theMapper) -{ - if(theMapper){ - int anId = 0; - myPassFilter[ anId ]->SetInput( theMapper->GetInput() ); - myPassFilter[ anId + 1]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 1 - myGeomFilter->SetStoreMapping( myStoreMapping ); - myGeomFilter->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 2 - myPassFilter[ anId ]->SetInput( myGeomFilter->GetOutput() ); - myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 3 - myTransformFilter->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() ); - - anId++; // 4 - myPassFilter[ anId ]->SetInput( myTransformFilter->GetOutput() ); - myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); - - anId++; // 5 - if(vtkDataSetMapper* aMapper = dynamic_cast(theMapper)){ - aMapper->SetInput(myPassFilter[anId]->GetOutput()); - }else if(vtkPolyDataMapper* aMapper = dynamic_cast(theMapper)){ - aMapper->SetInput(myPassFilter[anId]->GetPolyDataOutput()); - } - } - Superclass::SetMapper(theMapper); -} - -/*! - Renders actor -*/ -void -VTKViewer_Actor -::Render(vtkRenderer *ren, vtkMapper* m) -{ - if(vtkDataSet* aDataSet = GetInput()){ - static vtkFloatingPointType PERCENTS_OF_DETAILS = 0.50; - vtkIdType aNbOfPoints = vtkIdType(aDataSet->GetNumberOfPoints()*PERCENTS_OF_DETAILS); - if(aNbOfPoints > 0) - SetNumberOfCloudPoints(aNbOfPoints); - } - - if(myIsResolveCoincidentTopology){ - int aResolveCoincidentTopology = vtkMapper::GetResolveCoincidentTopology(); - vtkFloatingPointType aFactor, aUnit; - vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(aFactor,aUnit); - - vtkMapper::SetResolveCoincidentTopologyToPolygonOffset(); - vtkMapper::SetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, - myPolygonOffsetUnits); - Superclass::Render(ren,m); - - vtkMapper::SetResolveCoincidentTopologyPolygonOffsetParameters(aFactor,aUnit); - vtkMapper::SetResolveCoincidentTopology(aResolveCoincidentTopology); - }else{ - Superclass::Render(ren,m); - } -} - -/*! - Set ResolveCoincidentTopology flag - \param theIsResolve - new flag value -*/ -void -VTKViewer_Actor -::SetResolveCoincidentTopology(bool theIsResolve) -{ - myIsResolveCoincidentTopology = theIsResolve; -} - -/*! - Set polygon offset parameters - \param factor, units - Opengl polygon offset parameters -*/ -void -VTKViewer_Actor -::SetPolygonOffsetParameters(vtkFloatingPointType factor, - vtkFloatingPointType units) -{ - myPolygonOffsetFactor = factor; - myPolygonOffsetUnits = units; -} - -/*! - Get polygon offset parameters - \param factor, units - Opengl polygon offset parameters -*/ -void -VTKViewer_Actor -::GetPolygonOffsetParameters(vtkFloatingPointType& factor, - vtkFloatingPointType& units) -{ - factor = myPolygonOffsetFactor; - units = myPolygonOffsetUnits; -} - -/*! - \return shrink factor -*/ -vtkFloatingPointType -VTKViewer_Actor -::GetShrinkFactor() -{ - return 1.0; -} - -/*! - \return true if the actor is shrunkable -*/ -bool -VTKViewer_Actor -::IsShrunkable() -{ - return false; -} - -/*! - \return true if the actor is shrunk -*/ -bool -VTKViewer_Actor -::IsShrunk() -{ - return false; -} - -/*! - Insert shrink filter into pipeline -*/ -void -VTKViewer_Actor -::SetShrink() -{} - -/*! - Remove shrink filter from pipeline -*/ -void -VTKViewer_Actor -::UnShrink() -{} - -/*! - Allows to get initial #vtkDataSet -*/ -vtkDataSet* -VTKViewer_Actor -::GetInput() -{ - return myPassFilter.front()->GetOutput(); -} - -/*! - To calculatate last modified time -*/ -unsigned long int -VTKViewer_Actor -::GetMTime() -{ - unsigned long mTime = this->Superclass::GetMTime(); - unsigned long time = myTransformFilter->GetMTime(); - mTime = ( time > mTime ? time : mTime ); - if(vtkDataSet *aDataSet = myPassFilter[0]->GetInput()){ - time = aDataSet->GetMTime(); - mTime = ( time > mTime ? time : mTime ); - } - return mTime; -} - -/*! - Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on) - param theMode - new mode -*/ -void -VTKViewer_Actor -::SetRepresentation(int theMode) -{ - switch(myRepresentation){ - case VTK_POINTS : - case VTK_SURFACE : - myProperty->SetAmbient(GetProperty()->GetAmbient()); - myProperty->SetDiffuse(GetProperty()->GetDiffuse()); - myProperty->SetSpecular(GetProperty()->GetSpecular()); - break; - } - - switch(theMode){ - case VTK_POINTS : - case VTK_SURFACE : - GetProperty()->SetAmbient(myProperty->GetAmbient()); - GetProperty()->SetDiffuse(myProperty->GetDiffuse()); - GetProperty()->SetSpecular(myProperty->GetSpecular()); - break; - default: - GetProperty()->SetAmbient(1.0); - GetProperty()->SetDiffuse(0.0); - GetProperty()->SetSpecular(0.0); - } - - switch(theMode){ - case 3 : - myGeomFilter->SetInside(true); - myGeomFilter->SetWireframeMode(true); - GetProperty()->SetRepresentation(VTK_WIREFRAME); - break; - case VTK_POINTS : - GetProperty()->SetPointSize(VTKViewer_POINT_SIZE); - GetProperty()->SetRepresentation(theMode); - myGeomFilter->SetWireframeMode(false); - myGeomFilter->SetInside(false); - break; - case VTK_WIREFRAME : - GetProperty()->SetRepresentation(theMode); - myGeomFilter->SetWireframeMode(true); - myGeomFilter->SetInside(false); - break; - case VTK_SURFACE : - GetProperty()->SetRepresentation(theMode); - myGeomFilter->SetWireframeMode(false); - myGeomFilter->SetInside(false); - break; - } - - myRepresentation = theMode; -} - -/*! - \return current representation mode -*/ -int -VTKViewer_Actor -::GetRepresentation() -{ - return myRepresentation; -} - -/*! - Maps VTK index of a node to corresponding object index -*/ -int -VTKViewer_Actor -::GetNodeObjId(int theVtkID) -{ - return theVtkID; -} - -/*! - Get coordinates of a node for given object index -*/ -vtkFloatingPointType* -VTKViewer_Actor -::GetNodeCoord(int theObjID) -{ - return GetInput()->GetPoint(theObjID); -} - -/*! - Get corresponding #vtkCell for given object index -*/ -vtkCell* -VTKViewer_Actor -::GetElemCell(int theObjID) -{ - return GetInput()->GetCell(theObjID); -} - -/*! - Maps VTK index of a cell to corresponding object index -*/ -int -VTKViewer_Actor -::GetElemObjId(int theVtkID) -{ - return theVtkID; -} - - -/*! - \return object dimension. Virtual method should be redifined by derived classes -*/ -int -VTKViewer_Actor -::GetObjDimension( const int theObjId ) -{ - if ( vtkCell* aCell = GetElemCell(theObjId) ) - return aCell->GetCellDimension(); - return 0; -} - -/*! - Infinitive means actor without size (point for example), - which is not taken into account in calculation of boundaries of the scene -*/ -void -VTKViewer_Actor -::SetInfinitive(bool theIsInfinite) -{ - myIsInfinite = theIsInfinite; -} - -/*! - \return infinive flag -*/ -bool -VTKViewer_Actor -::IsInfinitive() -{ - if(myIsInfinite) - return true; - - static vtkFloatingPointType MAX_DISTANCE = 0.9*VTK_LARGE_FLOAT; - vtkFloatingPointType aBounds[6]; - GetBounds(aBounds); - for(int i = 0; i < 6; i++) - if(fabs(aBounds[i]) > MAX_DISTANCE) - return true; - - static vtkFloatingPointType MIN_DISTANCE = 1.0/VTK_LARGE_FLOAT; - if(GetLength() < MIN_DISTANCE) - return true; - - return false; -} - -/*! - \return current bounding box -*/ -vtkFloatingPointType* -VTKViewer_Actor -::GetBounds() -{ - return Superclass::GetBounds(); -} - - -/*! - \return current bounding box -*/ -void -VTKViewer_Actor -::GetBounds(vtkFloatingPointType theBounds[6]) -{ - Superclass::GetBounds(theBounds); -} - - -bool -VTKViewer_Actor -::IsSetCamera() const -{ - return false; -} - -bool -VTKViewer_Actor -::IsResizable() const -{ - return false; -} - -void -VTKViewer_Actor -::SetSize( const vtkFloatingPointType ) -{} - - -void -VTKViewer_Actor -::SetCamera( vtkCamera* ) -{} - - -void -VTKViewer_Actor -::SetOpacity(vtkFloatingPointType theOpacity) -{ - myOpacity = theOpacity; - GetProperty()->SetOpacity(theOpacity); -} - -vtkFloatingPointType -VTKViewer_Actor -::GetOpacity() -{ - return myOpacity; -} - - -/*! - Change color -*/ -void -VTKViewer_Actor -::SetColor(vtkFloatingPointType r, - vtkFloatingPointType g, - vtkFloatingPointType b) -{ - GetProperty()->SetColor(r,g,b); -} - -/*! - Change color -*/ -void -VTKViewer_Actor -::SetColor(const vtkFloatingPointType theRGB[3]) -{ - SetColor(theRGB[0],theRGB[1],theRGB[2]); -} - -/*! - Get color -*/ -void -VTKViewer_Actor -::GetColor(vtkFloatingPointType& r, - vtkFloatingPointType& g, - vtkFloatingPointType& b) -{ - vtkFloatingPointType aColor[3]; - GetProperty()->GetColor(aColor); - r = aColor[0]; - g = aColor[1]; - b = aColor[2]; -} - - -/*! - \return display mode -*/ -int -VTKViewer_Actor -::getDisplayMode() -{ - return myDisplayMode; -} - -/*! - Change display mode -*/ -void -VTKViewer_Actor -::setDisplayMode(int theMode) -{ - SetRepresentation(theMode + 1); - myDisplayMode = GetRepresentation() - 1; -} - - -/*! - \return true if the descendant of the VTKViewer_Actor will implement its own highlight or not -*/ -bool -VTKViewer_Actor -::hasHighlight() -{ - return false; -} - -/*! - \return true if the VTKViewer_Actor is already highlighted -*/ -bool -VTKViewer_Actor -::isHighlighted() -{ - return myIsHighlighted; -} - -/*! - Set preselection mode -*/ -void -VTKViewer_Actor -::SetPreSelected(bool thePreselect) -{ - myIsPreselected = thePreselect; -} - -/*! - Just to update visibility of the highlight devices -*/ -void -VTKViewer_Actor -::highlight(bool theIsHighlight) -{ - myIsHighlighted = theIsHighlight; -} - -vtkCxxSetObjectMacro(VTKViewer_Actor,PreviewProperty,vtkProperty); diff --git a/src/VTKViewer/VTKViewer_Actor.h b/src/VTKViewer/VTKViewer_Actor.h deleted file mode 100755 index 28d5af787..000000000 --- a/src/VTKViewer/VTKViewer_Actor.h +++ /dev/null @@ -1,341 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : SALOME_Actor.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef VTKVIEVER_ACTOR_H -#define VTKVIEVER_ACTOR_H - -#include "VTKViewer.h" - -#include -#include - -#include - -class vtkCell; -class vtkPointPicker; -class vtkCellPicker; -class vtkDataSet; -class vtkCamera; -class vtkProperty; -class vtkRenderer; - -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 - */ -class VTKVIEWER_EXPORT VTKViewer_Actor : public vtkLODActor -{ - public: - static VTKViewer_Actor* New(); - - vtkTypeMacro(VTKViewer_Actor,vtkLODActor); - - //---------------------------------------------------------------------------- - //! Get its name - virtual - const char* - getName(); - - //! Name the #VTKViewer_Actor - virtual - void - setName(const char* theName); - - //---------------------------------------------------------------------------- - //! Change opacity - virtual - void - SetOpacity(vtkFloatingPointType theOpacity); - - //! Get current opacity - virtual - vtkFloatingPointType - GetOpacity(); - - //! Change color - virtual - void - SetColor(vtkFloatingPointType r, - vtkFloatingPointType g, - vtkFloatingPointType b); - - //! Get current color - virtual - void - GetColor(vtkFloatingPointType& r, - vtkFloatingPointType& g, - vtkFloatingPointType& b); - - //! Change color - virtual - void - SetColor(const vtkFloatingPointType theRGB[3]); - - //---------------------------------------------------------------------------- - // For selection mapping purpose - //! Maps VTK index of a node to corresponding object index - virtual - int - GetNodeObjId(int theVtkID); - - //! Get coordinates of a node for given object index - virtual - vtkFloatingPointType* - GetNodeCoord(int theObjID); - - //! Maps VTK index of a cell to corresponding object index - virtual - int - GetElemObjId(int theVtkID); - - //! Get corresponding #vtkCell for given object index - virtual - vtkCell* - GetElemCell(int theObjID); - - //---------------------------------------------------------------------------- - //! Get dimension of corresponding mesh element - virtual - int - GetObjDimension( const int theObjId ); - - //! To insert some additional filters and then sets the given #vtkMapper - virtual - void - SetMapper(vtkMapper* theMapper); - - //! Allows to get initial #vtkDataSet - virtual - vtkDataSet* - GetInput(); - - //! Apply view transformation - virtual - void - SetTransform(VTKViewer_Transform* theTransform); - - //! To calculatate last modified time - virtual - unsigned long int - GetMTime(); - - //---------------------------------------------------------------------------- - //! Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on) - virtual - void - SetRepresentation(int theMode); - - //! Get current representation mode - virtual - int - GetRepresentation(); - - //! Get current display mode (obsolete) - virtual - int - getDisplayMode(); - - //! Set display mode (obsolete) - virtual - void - setDisplayMode(int theMode); - - //---------------------------------------------------------------------------- - //! Set infinive flag - /*! - Infinitive means actor without size (point for example), - which is not taken into account in calculation of boundaries of the scene - */ - void - SetInfinitive(bool theIsInfinite); - - //! Get infinive flag - virtual - bool - IsInfinitive(); - - //! To calcualte current bounding box - virtual - vtkFloatingPointType* - GetBounds(); - - //! To calcualte current bounding box - void - GetBounds(vtkFloatingPointType bounds[6]); - - //---------------------------------------------------------------------------- - virtual - bool - IsSetCamera() const; - - virtual - bool - IsResizable() const; - - virtual - void - SetSize( const vtkFloatingPointType ); - - virtual - void - SetCamera( vtkCamera* ); - - //---------------------------------------------------------------------------- - //! Set ResolveCoincidentTopology flag - void - SetResolveCoincidentTopology(bool theIsResolve); - - //! Set ResolveCoincidentTopology parameters - void - SetPolygonOffsetParameters(vtkFloatingPointType factor, - vtkFloatingPointType units); - - //! Get current ResolveCoincidentTopology parameters - void - GetPolygonOffsetParameters(vtkFloatingPointType& factor, - vtkFloatingPointType& units); - - virtual - void - Render(vtkRenderer *, vtkMapper *); - - //---------------------------------------------------------------------------- - //! Get current shrink factor - virtual - vtkFloatingPointType - GetShrinkFactor(); - - //! Is the actor is shrunkable - virtual - bool - IsShrunkable(); - - //! Is the actor is shrunk - virtual - bool - IsShrunk(); - - //! Insert shrink filter into pipeline - virtual - void - SetShrink(); - - //! Remove shrink filter from pipeline - virtual - void - UnShrink(); - - //---------------------------------------------------------------------------- - //! To publish the actor an all its internal devices - virtual - void - AddToRender(vtkRenderer* theRendere); - - //! To remove the actor an all its internal devices - virtual - void - RemoveFromRender(vtkRenderer* theRendere); - - //! Used to obtain all dependent actors - virtual - void - GetChildActors(vtkActorCollection*); - - //---------------------------------------------------------------------------- - //! Ask, if the descendant of the VTKViewer_Actor will implement its own highlight or not - virtual - bool - hasHighlight(); - - //! Ask, if the VTKViewer_Actor is already highlighted - virtual - bool - isHighlighted(); - - //! Set preselection mode - virtual - void - SetPreSelected(bool thePreselect = false); - - //---------------------------------------------------------------------------- - //! Just to update visibility of the highlight devices - virtual - void - highlight(bool theHighlight); - - void - SetPreviewProperty(vtkProperty* theProperty); - - protected: - //---------------------------------------------------------------------------- - bool myIsResolveCoincidentTopology; - vtkFloatingPointType myPolygonOffsetFactor; - vtkFloatingPointType myPolygonOffsetUnits; - - std::string myName; - - vtkFloatingPointType myOpacity; - int myDisplayMode; - bool myIsInfinite; - - bool myStoreMapping; - VTKViewer_GeometryFilter *myGeomFilter; - VTKViewer_TransformFilter *myTransformFilter; - std::vector myPassFilter; - - int myRepresentation; - vtkProperty *myProperty; - - void - InitPipeLine(vtkMapper* theMapper); - - VTKViewer_Actor(); - ~VTKViewer_Actor(); - - protected: - vtkProperty *PreviewProperty; - bool myIsPreselected; - bool myIsHighlighted; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif // VTKVIEVER_ACTOR_H diff --git a/src/VTKViewer/VTKViewer_Algorithm.h b/src/VTKViewer/VTKViewer_Algorithm.h deleted file mode 100644 index b533f149b..000000000 --- a/src/VTKViewer/VTKViewer_Algorithm.h +++ /dev/null @@ -1,91 +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_ViewFrame.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef VTKViewer_Algorithm_H -#define VTKViewer_Algorithm_H - -#include - -class vtkActor; - -namespace VTK -{ - /*!For each actor(for ex: someActor) from \a theCollection(that can be dynamic cast to type TActor)\n - * Call method \a theFun(someActor) - */ - template - TFunction ForEach(vtkActorCollection *theCollection, TFunction theFun) - { - if(theCollection){ - theCollection->InitTraversal(); - while(vtkActor *anAct = theCollection->GetNextActor()) - if(TActor *anActor = dynamic_cast(anAct)) - theFun(anActor); - } - return theFun; - } - - /*!For each actor(for ex: someActor) from \a theCollection(that can be dynamic cast to type TActor and \n - * method \a thePredicate(someActor) return true) \n - * Call method \a theFun(someActor) - */ - template - TFunction ForEachIf(vtkActorCollection *theCollection, - TPredicate thePredicate, - TFunction theFun) - { - if(theCollection){ - theCollection->InitTraversal(); - while(vtkActor *anAct = theCollection->GetNextActor()) - if(TActor *anActor = dynamic_cast(anAct)) - if(thePredicate(anActor)) - theFun(anActor); - } - return theFun; - } - - /*!Find actor from collection, that can be dynamicaly cast to \a TActor, \n - *and method \a thePredicate(someActor) return true) \n - *\retval someActor - */ - template - TActor* Find(vtkActorCollection *theCollection, TPredicate thePredicate) - { - if(theCollection){ - theCollection->InitTraversal(); - while(vtkActor *anAct = theCollection->GetNextActor()) - if(TActor *anActor = dynamic_cast(anAct)) - if(thePredicate(anActor)) - return anActor; - } - return NULL; - } - -} - -#endif diff --git a/src/VTKViewer/VTKViewer_AppendFilter.cxx b/src/VTKViewer/VTKViewer_AppendFilter.cxx deleted file mode 100644 index 4218c4f20..000000000 --- a/src/VTKViewer/VTKViewer_AppendFilter.cxx +++ /dev/null @@ -1,304 +0,0 @@ -// SALOME OBJECT : kernel of SALOME component -// -// 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_GeometryFilter.cxx -// Author : -// Module : SALOME -// $Header$ - -#include "VTKViewer_AppendFilter.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - -#if defined __GNUC__ - #if __GNUC__ == 2 - #define __GNUC_2__ - #endif -#endif - -vtkCxxRevisionMacro(VTKViewer_AppendFilter, "$Revision$"); -vtkStandardNewMacro(VTKViewer_AppendFilter); - -VTKViewer_AppendFilter -::VTKViewer_AppendFilter() -{ - myDoMappingFlag = false; -} - -VTKViewer_AppendFilter -::~VTKViewer_AppendFilter() -{} - -void -VTKViewer_AppendFilter -::SetDoMappingFlag(const bool theFlag) -{ - if(myDoMappingFlag == theFlag) - return; - - myDoMappingFlag = theFlag; - - this->Modified(); -} - -bool -VTKViewer_AppendFilter -::DoMappingFlag() const -{ - return myDoMappingFlag; -} - -void -VTKViewer_AppendFilter -::SetPoints(vtkPoints* thePoints) -{ - if(GetPoints() == thePoints) - return; - - myPoints = thePoints; - - this->Modified(); -} - -vtkPoints* -VTKViewer_AppendFilter -::GetPoints() -{ - return myPoints.GetPointer(); -} - -void -VTKViewer_AppendFilter -::Execute() -{ - if(myPoints.GetPointer()) - MakeOutput(); - else - Superclass::Execute(); - - if(myDoMappingFlag) - DoMapping(); -} - - -void -VTKViewer_AppendFilter -::DoMapping() -{ - myNodeRanges.clear(); - myCellRanges.clear(); - - vtkIdType aPntStartId = 0; - vtkIdType aCellStartId = 0; - - for(vtkIdType aDataSetId = 0; aDataSetId < this->NumberOfInputs; ++aDataSetId){ - vtkDataSet* aDataSet = (vtkDataSet *)(this->Inputs[aDataSetId]); - // Do mapping of the nodes - if(!myPoints.GetPointer()){ - vtkIdType aNbPnts = aDataSet->GetNumberOfPoints(); - myNodeRanges.push_back(aPntStartId + aNbPnts); - aPntStartId += aNbPnts; - } - // Do mapping of the cells - vtkIdType aNbCells = aDataSet->GetNumberOfCells(); - myCellRanges.push_back(aCellStartId + aNbCells); - aCellStartId += aNbCells; - } -} - -namespace -{ - inline - vtkIdType - GetOutputID(vtkIdType theInputID, - vtkIdType theInputDataSetID, - const VTKViewer_AppendFilter::TVectorIds& theRanges) - { - theInputID = theInputDataSetID = -1; - - vtkIdType aNbInputs = theRanges.size(); - if(theInputDataSetID < 0 || theInputDataSetID >= aNbInputs) - return -1; - - vtkIdType aStartId = theRanges[theInputDataSetID]; - return aStartId + theInputID; - } -} - -vtkIdType -VTKViewer_AppendFilter -::GetPointOutputID(vtkIdType theInputID, - vtkIdType theInputDataSetID) -{ - if(myPoints.GetPointer()) - return theInputID; - - return GetOutputID(theInputID,theInputDataSetID,myNodeRanges); -} - - -vtkIdType -VTKViewer_AppendFilter -::GetCellOutputID(vtkIdType theInputID, - vtkIdType theInputDataSetID) -{ - if(myPoints.GetPointer()) - return theInputID; - - return GetOutputID(theInputID,theInputDataSetID,myCellRanges); -} - - -namespace -{ - void - GetInputID(vtkIdType theOutputID, - vtkIdType& theInputID, - vtkIdType& theStartID, - vtkIdType& theInputDataSetID, - const VTKViewer_AppendFilter::TVectorIds& theRanges) - { - theInputID = theStartID = theInputDataSetID = -1; - - if(theRanges.empty()) - return; - - const vtkIdType& aRangeEnd = theRanges.back(); - if(theOutputID < 0 || theOutputID >= aRangeEnd) - return; - - vtkIdType aStartId = 0; - vtkIdType aNbInputs = theRanges.size(); - for(vtkIdType aDataSetId = 0; aDataSetId < aNbInputs; ++aDataSetId){ - vtkIdType aRange = theRanges[aDataSetId]; - if(aRange > theOutputID){ - theInputID = theOutputID - aStartId; - theInputDataSetID = aDataSetId; - theStartID = aStartId; - break; - } - aStartId = aRange; - } - } -} - -void -VTKViewer_AppendFilter -::GetPointInputID(vtkIdType theOutputID, - vtkIdType& theInputID, - vtkIdType& theStartID, - vtkIdType& theInputDataSetID) -{ - if(myPoints.GetPointer()) { - theStartID = theInputDataSetID = 0; - theInputID = theOutputID; - return; - } - - ::GetInputID(theOutputID, - theInputID, - theStartID, - theInputDataSetID, - myNodeRanges); -} - - -void -VTKViewer_AppendFilter -::GetCellInputID(vtkIdType theOutputID, - vtkIdType& theInputID, - vtkIdType& theStartID, - vtkIdType& theInputDataSetID) -{ - ::GetInputID(theOutputID, - theInputID, - theStartID, - theInputDataSetID, - myCellRanges); -} - - -void -VTKViewer_AppendFilter -::MakeOutput() -{ - int idx; - vtkIdType numPts, numCells, newCellId, cellId; - vtkCellData *cd; - vtkIdList *ptIds; - vtkDataSet *ds; - vtkUnstructuredGrid *output = this->GetOutput(); - // - numPts = myPoints->GetNumberOfPoints(); - if (numPts < 1) { - return; - } - // - numCells = 0; - for (idx = 0; idx < this->NumberOfInputs; ++idx) { - ds = (vtkDataSet *)(this->Inputs[idx]); - if (ds != NULL) { - if ( ds->GetNumberOfPoints() <= 0 && ds->GetNumberOfCells() <= 0 ) { - continue; //no input, just skip - } - numCells += ds->GetNumberOfCells(); - }//if non-empty dataset - }//for all inputs - if (numCells < 1) { - return; - } - // - // Now can allocate memory - output->Allocate(numCells); - ptIds = vtkIdList::New(); - ptIds->Allocate(VTK_CELL_SIZE); - // - // Append each input dataset together - // - // 1.points - output->SetPoints(myPoints.GetPointer()); - // 2.cells - for (idx = 0; idx < this->NumberOfInputs; ++idx) { - ds = (vtkDataSet *)(this->Inputs[idx]); - if (ds != NULL) { - numCells = ds->GetNumberOfCells(); - cd = ds->GetCellData(); - // copy cell and cell data - for (cellId=0; cellIdGetCellPoints(cellId, ptIds); - newCellId = output->InsertNextCell(ds->GetCellType(cellId), ptIds); - } - } - } - // - ptIds->Delete(); -} - diff --git a/src/VTKViewer/VTKViewer_AppendFilter.h b/src/VTKViewer/VTKViewer_AppendFilter.h deleted file mode 100644 index f7b1a171d..000000000 --- a/src/VTKViewer/VTKViewer_AppendFilter.h +++ /dev/null @@ -1,112 +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 -// -#ifndef VTKVIEWER_APPENDFILTER_H -#define VTKVIEWER_APPENDFILTER_H - -#include "VTKViewer.h" - -#include -#include - -#include -#include - -class vtkPoints; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*! \brief This class used same as vtkAppendFilter. See documentation on VTK for more information. - */ -class VTKVIEWER_EXPORT VTKViewer_AppendFilter : public vtkAppendFilter -{ -public: - /*! \fn static VTKViewer_AppendFilter *New() - */ - static VTKViewer_AppendFilter *New(); - - /*! \fn vtkTypeRevisionMacro(VTKViewer_AppendFilter, vtkAppendFilter) - * \brief VTK type revision macros. - */ - vtkTypeRevisionMacro(VTKViewer_AppendFilter, vtkAppendFilter); - - void SetDoMappingFlag(const bool theFlag); - - bool DoMappingFlag() const; - - void - SetPoints(vtkPoints* thePoints); - - vtkPoints* - GetPoints(); - - vtkIdType - GetPointOutputID(vtkIdType theInputID, - vtkIdType theInputDataSetID); - - vtkIdType - GetCellOutputID(vtkIdType theInputID, - vtkIdType theInputDataSetID); - - void - GetPointInputID(vtkIdType theOutputID, - vtkIdType& theInputID, - vtkIdType& theStartID, - vtkIdType& theInputDataSetID); - - void - GetCellInputID(vtkIdType theOutputID, - vtkIdType& theInputID, - vtkIdType& theStartID, - vtkIdType& theInputDataSetID); - - typedef std::vector TVectorIds; - -protected: - /*! \fn VTKViewer_AppendFilter(); - * \brief Constructor - */ - VTKViewer_AppendFilter(); - /*! \fn ~VTKViewer_AppendFilter(); - * \brief Destructor. - */ - ~VTKViewer_AppendFilter(); - /*! \fn void Execute(); - * \brief Filter culculation method. - */ - virtual void Execute(); - // - void DoMapping(); - - void Reset(); - - void MakeOutput(); - - bool myDoMappingFlag; - TVectorIds myNodeRanges; - TVectorIds myCellRanges; - vtkSmartPointer myPoints; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/VTKViewer/VTKViewer_CellLocationsArray.cxx b/src/VTKViewer/VTKViewer_CellLocationsArray.cxx deleted file mode 100644 index 995eedf49..000000000 --- a/src/VTKViewer/VTKViewer_CellLocationsArray.cxx +++ /dev/null @@ -1,33 +0,0 @@ -// SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers -// -// 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 : -// $Header$ - -#include "VTKViewer_CellLocationsArray.h" - -#include - -vtkStandardNewMacro(VTKViewer_CellLocationsArray); diff --git a/src/VTKViewer/VTKViewer_CellLocationsArray.h b/src/VTKViewer/VTKViewer_CellLocationsArray.h deleted file mode 100644 index 8cbd4d89b..000000000 --- a/src/VTKViewer/VTKViewer_CellLocationsArray.h +++ /dev/null @@ -1,42 +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 -// - -#ifndef VTKVIEWER_CELLLOCATIONS_H -#define VTKVIEWER_CELLLOCATIONS_H - -#include "VTKViewer.h" - -#if (VTK_MAJOR_VERSION >= 4) && (VTK_MINOR_VERSION >= 4) -# include -# define TCellLocationsArray vtkIdTypeArray -#else -# include -# define TCellLocationsArray vtkIntArray -#endif - -struct VTKVIEWER_EXPORT VTKViewer_CellLocationsArray : TCellLocationsArray -{ - static VTKViewer_CellLocationsArray* New(); - - vtkTypeMacro(VTKViewer_CellLocationsArray,TCellLocationsArray); -}; - -#undef TCellLocationsArray - -#endif 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 fde6f4dd2..000000000 --- a/src/VTKViewer/VTKViewer_CellRectPicker.h +++ /dev/null @@ -1,107 +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; - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*!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; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif - - diff --git a/src/VTKViewer/VTKViewer_ConvexTool.cxx b/src/VTKViewer/VTKViewer_ConvexTool.cxx deleted file mode 100644 index 6ba9ee187..000000000 --- a/src/VTKViewer/VTKViewer_ConvexTool.cxx +++ /dev/null @@ -1,601 +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 -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com - -#include "VTKViewer_ConvexTool.h" - -#include -#include - -#ifdef WNT -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - typedef std::vector TConnectivities; - - struct TPolygon - { - TConnectivities myConnectivities; - vtkFloatingPointType myOrigin[3]; - vtkFloatingPointType myNormal[3]; - TPolygon(const TConnectivities& theConnectivities, - vtkFloatingPointType theOrigin[3], - vtkFloatingPointType theNormal[3]): - myConnectivities(theConnectivities) - { - myOrigin[0] = theOrigin[0]; - myOrigin[1] = theOrigin[1]; - myOrigin[2] = theOrigin[2]; - - myNormal[0] = theNormal[0]; - myNormal[1] = theNormal[1]; - myNormal[2] = theNormal[2]; - } - }; - - typedef std::vector TPolygons; -} - -/*! - Constructor -*/ -VTKViewer_Triangulator -::VTKViewer_Triangulator(): - myInput(NULL), - myCellId(-1), - myShowInside(-1), - myAllVisible(-1), - myCellsVisibility(NULL), - myCellIds(vtkIdList::New()) -{} - - -/*! - Destructor -*/ -VTKViewer_Triangulator -::~VTKViewer_Triangulator() -{ - myCellIds->Delete(); -} - - - -bool -VTKViewer_Triangulator -::Execute(vtkUnstructuredGrid *theInput, - vtkCellData* thInputCD, - vtkIdType theCellId, - int theShowInside, - int theAllVisible, - const char* theCellsVisibility, - vtkPolyData *theOutput, - vtkCellData* theOutputCD, - int theStoreMapping, - std::vector& theVTK2ObjIds, - bool theIsCheckConvex) -{ - myInput = theInput; - myCellId = theCellId; - myShowInside = theShowInside; - myAllVisible = theAllVisible; - myCellsVisibility = theCellsVisibility; - - vtkPoints *aPoints = InitPoints(); - vtkIdType aNumPts = GetNbOfPoints(); - //cout<<"Triangulator - aNumPts = "<GetPoint(GetPointId(aPntId),aPntCoord); - //cout<<"\taPntId = "< TPointIds; - TPointIds anInitialPointIds; - for(vtkIdType aPntId = 0; aPntId < aNumPts; aPntId++) - anInitialPointIds.insert(GetPointId(aPntId)); - - // To initialize set of points by face that belong to the cell and backward - typedef std::set TFace2Visibility; - TFace2Visibility aFace2Visibility; - - typedef std::set TFace2PointIds; - TFace2PointIds aFace2PointIds; - - 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) - { - TPointIds aPointIds; - vtkIdList *anIdList = aFace->PointIds; - aPointIds.insert(anIdList->GetId(0)); - aPointIds.insert(anIdList->GetId(1)); - aPointIds.insert(anIdList->GetId(2)); - - aFace2PointIds.insert(aPointIds); - aFace2Visibility.insert(aFaceId); - } - } - - - ::TPolygons aPolygons; - - for (int aFaceId = 0; aFaceId < aNumFaces; aFaceId++) { - if(aFace2Visibility.find(aFaceId) == aFace2Visibility.end()) - continue; - - vtkCell* aFace = GetFace(aFaceId); - - vtkIdList *anIdList = aFace->PointIds; - vtkIdType aNewPts[3] = {anIdList->GetId(0), anIdList->GetId(1), anIdList->GetId(2)}; - - // To initialize set of points for the plane where the trinangle face belong to - TPointIds aPointIds; - aPointIds.insert(aNewPts[0]); - aPointIds.insert(aNewPts[1]); - aPointIds.insert(aNewPts[2]); - - // To get know, if the points of the trinagle were already observed - bool anIsObserved = aFace2PointIds.find(aPointIds) == aFace2PointIds.end(); - //cout<<"\taFaceId = "<GetPoint(aNewPts[0],aCoord[0]); - aPoints->GetPoint(aNewPts[1],aCoord[1]); - aPoints->GetPoint(aNewPts[2],aCoord[2]); - - // To calculate plane normal - vtkFloatingPointType aVector01[3] = { aCoord[1][0] - aCoord[0][0], - aCoord[1][1] - aCoord[0][1], - aCoord[1][2] - aCoord[0][2] }; - - vtkFloatingPointType aVector02[3] = { aCoord[2][0] - aCoord[0][0], - aCoord[2][1] - aCoord[0][1], - aCoord[2][2] - aCoord[0][2] }; - - // To calculate the normal for the triangle - vtkFloatingPointType aNormal[3]; - vtkMath::Cross(aVector02,aVector01,aNormal); - - vtkMath::Normalize(aNormal); - - // To calculate what points belong to the plane - // To calculate bounds of the point set - vtkFloatingPointType aCenter[3] = {0.0, 0.0, 0.0}; - { - TPointIds::const_iterator anIter = anInitialPointIds.begin(); - TPointIds::const_iterator anEndIter = anInitialPointIds.end(); - for(; anIter != anEndIter; anIter++){ - vtkFloatingPointType aPntCoord[3]; - vtkIdType aPntId = *anIter; - aPoints->GetPoint(aPntId,aPntCoord); - vtkFloatingPointType aDist = vtkPlane::DistanceToPlane(aPntCoord,aNormal,aCoord[0]); - //cout<<"\t\taPntId = "< 0){ - aNormal[0] = -aNormal[0]; - aNormal[1] = -aNormal[1]; - aNormal[2] = -aNormal[2]; - } - - // To calculate the primary direction for point set - vtkFloatingPointType aVector0[3] = { aCoord[0][0] - aCenter[0], - aCoord[0][1] - aCenter[1], - aCoord[0][2] - aCenter[2] }; - vtkMath::Normalize(aVector0); - - //cout<<"\t\taCenter = {"< TSortedPointIds; - TSortedPointIds aSortedPointIds; - - TPointIds::const_iterator anIter = aPointIds.begin(); - TPointIds::const_iterator anEndIter = aPointIds.end(); - for(; anIter != anEndIter; anIter++){ - vtkFloatingPointType aPntCoord[3]; - vtkIdType aPntId = *anIter; - aPoints->GetPoint(aPntId,aPntCoord); - vtkFloatingPointType aVector[3] = { aPntCoord[0] - aCenter[0], - aPntCoord[1] - aCenter[1], - aPntCoord[2] - aCenter[2] }; - vtkMath::Normalize(aVector); - - vtkFloatingPointType aCross[3]; - vtkMath::Cross(aVector,aVector0,aCross); - bool aGreaterThanPi = vtkMath::Dot(aCross,aNormal) < 0; - vtkFloatingPointType aCosinus = vtkMath::Dot(aVector,aVector0); - if(aCosinus > 1.0) - aCosinus = 1.0; - 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); - } - aPolygons.push_back(::TPolygon(aConnectivities,aCenter,aNormal)); - } - } - } - } - - if(aPolygons.empty()) - return true; - - // To check, whether the polygons give a convex polyhedron or not - if(theIsCheckConvex){ - int aNbPolygons = aPolygons.size(); - for (int aPolygonId = 0; aPolygonId < aNbPolygons; aPolygonId++) { - ::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) - theVTK2ObjIds.push_back(theCellId); - theOutputCD->CopyData(thInputCD,theCellId,aNewCellId); - } - } - - //cout<<"\tTriangulator - Ok\n"; - return true; -} - -/*! - Constructor -*/ -VTKViewer_OrderedTriangulator -::VTKViewer_OrderedTriangulator(): - myCell(vtkGenericCell::New()) -{} - -/*! - Destructor -*/ -VTKViewer_OrderedTriangulator -::~VTKViewer_OrderedTriangulator() -{ - myCell->Delete(); -} - -vtkPoints* -VTKViewer_OrderedTriangulator -::InitPoints() -{ - myInput->GetCell(myCellId,myCell); - return myInput->GetPoints(); -} - -vtkIdType -VTKViewer_OrderedTriangulator -::GetNbOfPoints() -{ - return myCell->GetNumberOfPoints(); -} - -vtkIdType -VTKViewer_OrderedTriangulator -::GetPointId(vtkIdType thePointId) -{ - return myCell->GetPointId(thePointId); -} - -vtkFloatingPointType -VTKViewer_OrderedTriangulator -::GetCellLength() -{ - return sqrt(myCell->GetLength2()); -} - -vtkIdType -VTKViewer_OrderedTriangulator -::GetNumFaces() -{ - return myCell->GetNumberOfFaces(); -} - -vtkCell* -VTKViewer_OrderedTriangulator -::GetFace(vtkIdType theFaceId) -{ - return myCell->GetFace(theFaceId); -} - -void -VTKViewer_OrderedTriangulator -::GetCellNeighbors(vtkIdType theCellId, - vtkCell* theFace, - vtkIdList* theCellIds) -{ - vtkIdList *anIdList = theFace->PointIds; - myInput->GetCellNeighbors(theCellId, anIdList, theCellIds); -} - -vtkIdType -VTKViewer_OrderedTriangulator -::GetConnectivity(vtkIdType thePntId) -{ - return thePntId; -} - -/*! - Constructor -*/ -VTKViewer_DelaunayTriangulator -::VTKViewer_DelaunayTriangulator(): - myUnstructuredGrid(vtkUnstructuredGrid::New()), - myGeometryFilter(vtkGeometryFilter::New()), - myDelaunay3D(vtkDelaunay3D::New()), - myFaceIds(vtkIdList::New()), - myPoints(vtkPoints::New()), - myPolyData(NULL), - myPointIds(NULL) -{ - myDelaunay3D->SetInput(myUnstructuredGrid); - myGeometryFilter->SetInput(myDelaunay3D->GetOutput()); -} - - - -/*! - Destructor -*/ -VTKViewer_DelaunayTriangulator -::~VTKViewer_DelaunayTriangulator() -{ - myUnstructuredGrid->Delete(); - myGeometryFilter->Delete(); - myDelaunay3D->Delete(); - myFaceIds->Delete(); - myPoints->Delete(); -} - - -vtkPoints* -VTKViewer_DelaunayTriangulator -::InitPoints() -{ - myPoints->Reset(); - myUnstructuredGrid->Initialize(); - myUnstructuredGrid->Allocate(); - myUnstructuredGrid->SetPoints(myPoints); - - vtkIdType aNumPts; - myInput->GetCellPoints(myCellId,aNumPts,myPointIds); - - if ( aNumPts < myPoints->GetNumberOfPoints() ) - myPoints->Reset(); - - { - 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); - } - } - - myPoints->Modified(); - myUnstructuredGrid->Modified(); - - myGeometryFilter->Update(); - myPolyData = myGeometryFilter->GetOutput(); - - return myPoints; -} - -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() -{ - 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 deleted file mode 100644 index 2bf024d5e..000000000 --- a/src/VTKViewer/VTKViewer_ConvexTool.h +++ /dev/null @@ -1,203 +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 -// - -#ifndef _VTKViewer_ConvexTool_H -#define _VTKViewer_ConvexTool_H - -#include "VTKViewer.h" - -#include - -#include - -class vtkUnstructuredGrid; -class vtkGeometryFilter; -class vtkGenericCell; -class vtkDelaunay3D; -class vtkPolyData; -class vtkCellData; -class vtkPoints; -class vtkIdList; -class vtkCell; - -class VTKVIEWER_EXPORT VTKViewer_Triangulator -{ - public: - VTKViewer_Triangulator(); - - ~VTKViewer_Triangulator(); - - bool - Execute(vtkUnstructuredGrid *theInput, - vtkCellData* thInputCD, - vtkIdType theCellId, - int theShowInside, - int theAllVisible, - const char* theCellsVisibility, - vtkPolyData *theOutput, - vtkCellData* theOutputCD, - int theStoreMapping, - std::vector& theVTK2ObjIds, - bool theIsCheckConvex); - - protected: - vtkIdList* myCellIds; - - vtkUnstructuredGrid *myInput; - vtkIdType myCellId; - int myShowInside; - int myAllVisible; - const char* myCellsVisibility; - - virtual - vtkPoints* - InitPoints() = 0; - - virtual - vtkIdType - GetNbOfPoints() = 0; - - virtual - vtkIdType - GetPointId(vtkIdType thePointId) = 0; - - virtual - vtkFloatingPointType - GetCellLength() = 0; - - virtual - vtkIdType - GetNumFaces() = 0; - - virtual - vtkCell* - GetFace(vtkIdType theFaceId) = 0; - - virtual - void - GetCellNeighbors(vtkIdType theCellId, - vtkCell* theFace, - vtkIdList* theCellIds) = 0; - - virtual - vtkIdType - GetConnectivity(vtkIdType thePntId) = 0; -}; - - -class VTKVIEWER_EXPORT VTKViewer_OrderedTriangulator : public VTKViewer_Triangulator -{ - public: - - VTKViewer_OrderedTriangulator(); - - ~VTKViewer_OrderedTriangulator(); - - protected: - vtkGenericCell *myCell; - - virtual - vtkPoints* - InitPoints(); - - virtual - vtkIdType - GetNbOfPoints(); - - vtkIdType - GetPointId(vtkIdType thePointId); - - virtual - vtkFloatingPointType - GetCellLength(); - - virtual - vtkIdType - GetNumFaces(); - - 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: - - VTKViewer_DelaunayTriangulator(); - - ~VTKViewer_DelaunayTriangulator(); - - protected: - vtkUnstructuredGrid* myUnstructuredGrid; - 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(); - - virtual - vtkIdType - GetNumFaces(); - - virtual - vtkCell* - GetFace(vtkIdType theFaceId); - - virtual - void - GetCellNeighbors(vtkIdType theCellId, - vtkCell* theFace, - vtkIdList* theCellIds); - - virtual - vtkIdType - GetConnectivity(vtkIdType thePntId); -}; - - -#endif // _VTKViewer_ConvexTool_H diff --git a/src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx b/src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx deleted file mode 100755 index 5cb422e11..000000000 --- a/src/VTKViewer/VTKViewer_ExtractUnstructuredGrid.cxx +++ /dev/null @@ -1,351 +0,0 @@ -// VISU CONVERTOR : -// -// 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: VISU_ExtractUnstructuredGrid.cxx -// Author: Alexey PETROV -// Module : VISU - - -#include "VTKViewer_ExtractUnstructuredGrid.h" -#include "VTKViewer_CellLocationsArray.h" - -#include -#include -#include -#include -#include -#include - -using namespace std; - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -#else -static int MYDEBUG = 0; -#endif - -#if defined __GNUC__ - #if __GNUC__ == 2 - #define __GNUC_2__ - #endif -#endif - -vtkStandardNewMacro(VTKViewer_ExtractUnstructuredGrid); - - -VTKViewer_ExtractUnstructuredGrid::VTKViewer_ExtractUnstructuredGrid(): - myExtractionMode(eCells), myChangeMode(ePassAll) -{} - - -VTKViewer_ExtractUnstructuredGrid::~VTKViewer_ExtractUnstructuredGrid(){} - - -void VTKViewer_ExtractUnstructuredGrid::RegisterCell(vtkIdType theCellId){ -// if(0 && MYDEBUG) MESSAGE("RegisterCell - theCellId = "<GetNumberOfCells() = "<GetNumberOfCells()); - MESSAGE("Execute - myCellTypes.size() = "<GetNumberOfCells() = "<GetNumberOfCells()); - if(myStoreMapping){ - MESSAGE("Execute - myOut2InId.size() = "< - -#include -#include -#include - -#ifdef WIN32 -#pragma warning ( disable:4251 ) -#endif - -/*! \class vtkUnstructuredGridToUnstructuredGridFilter - * \brief For more information see VTK documentation - */ -/*! \class vtkUnstructuredGridToUnstructuredGridFilter - * \brief For more information see VTK documentation. - */ -class VTKVIEWER_EXPORT VTKViewer_ExtractUnstructuredGrid : public vtkUnstructuredGridToUnstructuredGridFilter -{ -public: - //! VTK type macros. - vtkTypeMacro( VTKViewer_ExtractUnstructuredGrid, vtkUnstructuredGridToUnstructuredGridFilter ); - - //! \brief Construct with all types of clipping turned off. - static VTKViewer_ExtractUnstructuredGrid *New(); - - enum EExtraction{ eCells, ePoints}; - //! Sets mode of extraction to \a theExtractionMode - void SetModeOfExtraction(EExtraction theExtractionMode){ - myExtractionMode = theExtractionMode; Modified(); - } - //! Get Extraction mode (Return: \a myExtractionMode field) - EExtraction GetModeOfExtraction(){ return myExtractionMode;} - - enum EChanging{ ePassAll, eAdding, eRemoving}; - //! Sets mode of changing to \a theChangeMode - void SetModeOfChanging(EChanging theChangeMode){ - myChangeMode = theChangeMode; - Modified(); - } - //! Return \a myChangeMode field - EChanging GetModeOfChanging(){ return myChangeMode;} - - //! Add cell id to \a myCellIds std::set - void RegisterCell(vtkIdType theCellId); - //! Check if myCellIds is empty. - int IsCellsRegistered() { return !myCellIds.empty();} - //! Remove the cell from the output - void ClearRegisteredCells() { - myCellIds.clear(); - Modified(); - } - - //! Add cell type to \a myCellTypes std::set - void RegisterCellsWithType(vtkIdType theCellType); - //! Check if myCellTypes is empty. - int IsCellsWithTypeRegistered() { return !myCellTypes.empty();} - //! Remove every cells with the type from the output - void ClearRegisteredCellsWithType() { - myCellTypes.clear(); - Modified(); - } - - //! \brief Do the filter do some real work - int IsChanging() { return IsCellsRegistered() || IsCellsWithTypeRegistered();} - - //! \brief Do it keep the mapping between input's and output's UnstructuredGrid - void SetStoreMapping(int theStoreMapping); - //! Get \a myStoreMapping - int GetStoreMapping(){ return myStoreMapping;} - - //! Gets the input id by output id. - vtkIdType GetInputId(int theOutId) const; - //! Gets the output id by input id. - vtkIdType GetOutputId(int theInId) const; - - typedef std::vector TVectorId; - typedef std::map TMapId; - -protected: - VTKViewer_ExtractUnstructuredGrid(); - ~VTKViewer_ExtractUnstructuredGrid(); - - //! Main method, which calculate output - void Execute(); - - EExtraction myExtractionMode; - - EChanging myChangeMode; - typedef std::set TSetId; - TSetId myCellIds; - TSetId myCellTypes; - - bool myStoreMapping; - TVectorId myOut2InId; - TMapId myIn2OutId; - -private: - //! Not implemented. - VTKViewer_ExtractUnstructuredGrid(const VTKViewer_ExtractUnstructuredGrid&); - //! Not implemented. - void operator=(const VTKViewer_ExtractUnstructuredGrid&); -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/VTKViewer/VTKViewer_Filter.cxx b/src/VTKViewer/VTKViewer_Filter.cxx deleted file mode 100755 index f33ea7bae..000000000 --- a/src/VTKViewer/VTKViewer_Filter.cxx +++ /dev/null @@ -1,69 +0,0 @@ -// VTKViewer_Filter : Filter for VTK viewer -// -// 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_Filter.cxx -// Author : Sergey LITONIN -// Module : SALOME - -#include "VTKViewer_Filter.h" -using namespace std; - -IMPLEMENT_STANDARD_HANDLE(VTKViewer_Filter, MMgt_TShared) -IMPLEMENT_STANDARD_RTTIEXT(VTKViewer_Filter, MMgt_TShared) - -/*! - * \class VTKViewer_Filter - * Description : Base class of filters of for
VTK viewer. Method IsValid \n - * should be redefined in derived classes - */ - -/*!Constructor.*/ -VTKViewer_Filter::VTKViewer_Filter() -{ - myActor = 0; -} - -/*!Virtual Destructor.*/ -VTKViewer_Filter::~VTKViewer_Filter() -{ -} - -/*!Check correctness of \a theCellId for actor \a theActor by - * call virtual method IsValid( const int theId ). - * \param theActor - actor - * \param theCellId - cell id. - * \retval TRUE - if cell id is valid, else false. - */ -bool VTKViewer_Filter::IsValid( VTKViewer_Actor* theActor, const int theCellId ) -{ - SetActor( theActor ); - return IsValid( theCellId ); -} - -/*!Virtual method.Set actor to \a theActor. - * \param theActor - actor. - */ -void VTKViewer_Filter::SetActor( VTKViewer_Actor* theActor ) -{ - myActor = theActor; -} diff --git a/src/VTKViewer/VTKViewer_Filter.h b/src/VTKViewer/VTKViewer_Filter.h deleted file mode 100755 index 7e72b8df5..000000000 --- a/src/VTKViewer/VTKViewer_Filter.h +++ /dev/null @@ -1,67 +0,0 @@ -// SMESHGUI_Filter : Filter for VTK viewer -// -// 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_Filter.h -// Author : Sergey LITONIN -// Module : SALOME - -#ifndef VTKViewer_Filter_HeaderFile -#define VTKViewer_Filter_HeaderFile - -#include "VTKViewer.h" - -#include -#include - -class VTKViewer_Actor; - -DEFINE_STANDARD_HANDLE(VTKViewer_Filter, MMgt_TShared); - -/* - Class : VTKViewer_Filter - Description : Base class of filters of for VTK viewer. Method IsValid - should be redefined in derived classes -*/ - -class VTKViewer_Filter : public MMgt_TShared -{ - -public: - VTKVIEWER_EXPORT VTKViewer_Filter(); - VTKVIEWER_EXPORT virtual ~VTKViewer_Filter(); - - VTKVIEWER_EXPORT bool IsValid( VTKViewer_Actor*, const int theId ); - VTKVIEWER_EXPORT virtual bool IsValid( const int theId ) const = 0; - VTKVIEWER_EXPORT virtual int GetId() const = 0; - VTKVIEWER_EXPORT virtual bool IsNodeFilter() const = 0; - - VTKVIEWER_EXPORT virtual void SetActor( VTKViewer_Actor* ); - -protected: - VTKViewer_Actor* myActor; - -public: - DEFINE_STANDARD_RTTI(VTKViewer_Filter) -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_Functor.h b/src/VTKViewer/VTKViewer_Functor.h deleted file mode 100644 index 7aa5630be..000000000 --- a/src/VTKViewer/VTKViewer_Functor.h +++ /dev/null @@ -1,59 +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_ViewFrame.h -// Author : Nicolas REJNERI -// Module : SALOME -// $Header$ - -#ifndef VTKViewer_Functor_H -#define VTKViewer_Functor_H - -#include - -#include - -namespace VTK -{ - template struct TSetFunction - { - typedef void (TActor::* TAction)(TArg); - TAction myAction; - TStoreArg myArg; - TSetFunction(TAction theAction, TArg theArg) : myAction(theAction), myArg(theArg) - {} - void operator()(TActor* theActor) - { - (theActor->*myAction)(myArg); - } - }; - - template struct TSetVisibility: TSetFunction - { - TSetVisibility(TArg theArg): - TSetFunction(&TActor::SetVisibility,theArg) - {} - }; -} - -#endif diff --git a/src/VTKViewer/VTKViewer_GeometryFilter.cxx b/src/VTKViewer/VTKViewer_GeometryFilter.cxx deleted file mode 100755 index 420c1a1d3..000000000 --- a/src/VTKViewer/VTKViewer_GeometryFilter.cxx +++ /dev/null @@ -1,825 +0,0 @@ -// SALOME OBJECT : kernel of SALOME component -// -// 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_GeometryFilter.cxx -// Author : Michael ZORIN -// Module : SALOME -// $Header$ - -#include "VTKViewer_GeometryFilter.h" -#include "VTKViewer_ConvexTool.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#if defined __GNUC__ - #if __GNUC__ == 2 - #define __GNUC_2__ - #endif -#endif - -//#define USE_ROBUST_TRIANGULATION - -vtkCxxRevisionMacro(VTKViewer_GeometryFilter, "$Revision$"); -vtkStandardNewMacro(VTKViewer_GeometryFilter); - -VTKViewer_GeometryFilter -::VTKViewer_GeometryFilter(): - myShowInside(0), - myStoreMapping(0), - myIsWireframeMode(0) -{} - - -VTKViewer_GeometryFilter -::~VTKViewer_GeometryFilter() -{} - - -void -VTKViewer_GeometryFilter -::Execute() -{ - vtkDataSet *input= this->GetInput(); - vtkIdType numCells=input->GetNumberOfCells(); - - if (numCells == 0) - { - return; - } - - if (input->GetDataObjectType() == VTK_UNSTRUCTURED_GRID){ - this->UnstructuredGridExecute(); - return; - }else - vtkGeometryFilter::Execute(); -} - - -void -VTKViewer_GeometryFilter -::UnstructuredGridExecute() -{ - vtkUnstructuredGrid *input= (vtkUnstructuredGrid *)this->GetInput(); - vtkCellArray *Connectivity = input->GetCells(); - // Check input - if ( Connectivity == NULL ) - { - vtkDebugMacro(<<"Nothing to extract"); - return; - } - - vtkIdType cellId; - int i; - int allVisible; - vtkIdType npts = 0; - vtkIdType *pts = 0; - vtkPoints *p = input->GetPoints(); - vtkIdType numCells=input->GetNumberOfCells(); - vtkPointData *pd = input->GetPointData(); - vtkCellData *cd = input->GetCellData(); - vtkPolyData *output = this->GetOutput(); - vtkPointData *outputPD = output->GetPointData(); - - VTKViewer_OrderedTriangulator anOrderedTriangulator; - VTKViewer_DelaunayTriangulator aDelaunayTriangulator; - - vtkCellData *outputCD = output->GetCellData(); - vtkGenericCell *cell = vtkGenericCell::New(); - - vtkIdList *cellIds = vtkIdList::New(); - vtkIdList *faceIds = vtkIdList::New(); - - char *cellVis; - vtkIdType newCellId; - int faceId, *faceVerts, numFacePts; - vtkFloatingPointType *x; - int PixelConvert[4], aNewPts[VTK_CELL_SIZE]; - // ghost cell stuff - unsigned char updateLevel = (unsigned char)(output->GetUpdateGhostLevel()); - unsigned char *cellGhostLevels = 0; - - PixelConvert[0] = 0; - PixelConvert[1] = 1; - PixelConvert[2] = 3; - PixelConvert[3] = 2; - - vtkDebugMacro(<<"Executing geometry filter for unstructured grid input"); - - vtkDataArray* temp = 0; - if (cd) - { - temp = cd->GetArray("vtkGhostLevels"); - } - if ( (!temp) || (temp->GetDataType() != VTK_UNSIGNED_CHAR) - || (temp->GetNumberOfComponents() != 1)) - { - vtkDebugMacro("No appropriate ghost levels field available."); - } - else - { - cellGhostLevels = ((vtkUnsignedCharArray*)temp)->GetPointer(0); - } - - // Determine nature of what we have to do - if ( (!this->CellClipping) && (!this->PointClipping) && - (!this->ExtentClipping) ) - { - allVisible = 1; - cellVis = NULL; - } - else - { - allVisible = 0; - cellVis = new char[numCells]; - } - - // Just pass points through, never merge - output->SetPoints(input->GetPoints()); - outputPD->PassData(pd); - - outputCD->CopyAllocate(cd,numCells,numCells/2); - - output->Allocate(numCells/4+1,numCells); - - // Loop over the cells determining what's visible - if (!allVisible) - { - for (cellId=0, Connectivity->InitTraversal(); - Connectivity->GetNextCell(npts,pts); - cellId++) - { - cellVis[cellId] = 1; - if ( this->CellClipping && cellId < this->CellMinimum || - cellId > this->CellMaximum ) - { - cellVis[cellId] = 0; - } - else - { - for (i=0; i < npts; i++) - { - x = p->GetPoint(pts[i]); - if ( (this->PointClipping && (pts[i] < this->PointMinimum || - pts[i] > this->PointMaximum) ) || - (this->ExtentClipping && - (x[0] < this->Extent[0] || x[0] > this->Extent[1] || - x[1] < this->Extent[2] || x[1] > this->Extent[3] || - x[2] < this->Extent[4] || x[2] > this->Extent[5] )) ) - { - cellVis[cellId] = 0; - break; - }//point/extent clipping - }//for each point - }//if point clipping needs checking - }//for all cells - }//if not all visible - - // Loop over all cells now that visibility is known - // (Have to compute visibility first for 3D cell boundarys) - int progressInterval = numCells/20 + 1; - if(myStoreMapping){ - myVTK2ObjIds.clear(); - myVTK2ObjIds.reserve(numCells); - } - for (cellId=0, Connectivity->InitTraversal(); - Connectivity->GetNextCell(npts,pts); - cellId++) - { - //Progress and abort method support - if ( !(cellId % progressInterval) ) - { - vtkDebugMacro(<<"Process cell #" << cellId); - this->UpdateProgress ((float)cellId/numCells); - } - - // Handle ghost cells here. Another option was used cellVis array. - if (cellGhostLevels && cellGhostLevels[cellId] > updateLevel) - { // Do not create surfaces in outer ghost cells. - continue; - } - - if (allVisible || cellVis[cellId]) //now if visible extract geometry - { - //special code for nonlinear cells - rarely occurs, so right now it - //is slow. - vtkIdType aCellType = input->GetCellType(cellId); - switch (aCellType) - { - case VTK_EMPTY_CELL: - break; - - case VTK_VERTEX: - case VTK_POLY_VERTEX: - newCellId = output->InsertNextCell(aCellType,npts,pts); - if(myStoreMapping){ - myVTK2ObjIds.push_back(cellId); //apo - } - outputCD->CopyData(cd,cellId,newCellId); - break; - - case VTK_LINE: - case VTK_POLY_LINE: - newCellId = output->InsertNextCell(aCellType,npts,pts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - break; - - case VTK_TRIANGLE: - case VTK_QUAD: - case VTK_POLYGON: - newCellId = output->InsertNextCell(aCellType,npts,pts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - break; - - case VTK_TRIANGLE_STRIP: - newCellId = output->InsertNextCell(aCellType,npts,pts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - break; - - case VTK_PIXEL: - newCellId = output->InsertNextCell(aCellType,npts,pts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - break; - - case VTK_CONVEX_POINT_SET: { - bool anIsOk = anOrderedTriangulator.Execute(input, - cd, - cellId, - myShowInside, - allVisible, - cellVis, - output, - outputCD, - myStoreMapping, - myVTK2ObjIds, - true); - if(!anIsOk) - aDelaunayTriangulator.Execute(input, - cd, - cellId, - myShowInside, - allVisible, - cellVis, - output, - outputCD, - myStoreMapping, - myVTK2ObjIds, - false); - - break; - } - case VTK_TETRA: { - for (faceId = 0; faceId < 4; faceId++) - { - faceIds->Reset(); - faceVerts = vtkTetra::GetFaceArray(faceId); - faceIds->InsertNextId(pts[faceVerts[0]]); - faceIds->InsertNextId(pts[faceVerts[1]]); - faceIds->InsertNextId(pts[faceVerts[2]]); - aCellType = VTK_TRIANGLE; - numFacePts = 3; - input->GetCellNeighbors(cellId, faceIds, cellIds); - if ( cellIds->GetNumberOfIds() <= 0 || myShowInside || - (!allVisible && !cellVis[cellIds->GetId(0)]) ) - { - for ( i=0; i < numFacePts; i++) - aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - break; - } - case VTK_VOXEL: { - for (faceId = 0; faceId < 6; faceId++) - { - faceIds->Reset(); - faceVerts = vtkVoxel::GetFaceArray(faceId); - faceIds->InsertNextId(pts[faceVerts[0]]); - faceIds->InsertNextId(pts[faceVerts[1]]); - faceIds->InsertNextId(pts[faceVerts[2]]); - faceIds->InsertNextId(pts[faceVerts[3]]); - aCellType = VTK_QUAD; - numFacePts = 4; - input->GetCellNeighbors(cellId, faceIds, cellIds); - if ( cellIds->GetNumberOfIds() <= 0 || myShowInside || - (!allVisible && !cellVis[cellIds->GetId(0)]) ) - { - for ( i=0; i < numFacePts; i++) - aNewPts[i] = pts[faceVerts[PixelConvert[i]]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - break; - } - case VTK_HEXAHEDRON: { - for (faceId = 0; faceId < 6; faceId++) - { - faceIds->Reset(); - faceVerts = vtkHexahedron::GetFaceArray(faceId); - faceIds->InsertNextId(pts[faceVerts[0]]); - faceIds->InsertNextId(pts[faceVerts[1]]); - faceIds->InsertNextId(pts[faceVerts[2]]); - faceIds->InsertNextId(pts[faceVerts[3]]); - aCellType = VTK_QUAD; - numFacePts = 4; - input->GetCellNeighbors(cellId, faceIds, cellIds); - if ( cellIds->GetNumberOfIds() <= 0 || myShowInside || - (!allVisible && !cellVis[cellIds->GetId(0)]) ) - { - for ( i=0; i < numFacePts; i++) - aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - break; - } - case VTK_WEDGE: { - for (faceId = 0; faceId < 5; faceId++) - { - faceIds->Reset(); - faceVerts = vtkWedge::GetFaceArray(faceId); - faceIds->InsertNextId(pts[faceVerts[0]]); - faceIds->InsertNextId(pts[faceVerts[1]]); - faceIds->InsertNextId(pts[faceVerts[2]]); - aCellType = VTK_TRIANGLE; - numFacePts = 3; - if (faceVerts[3] >= 0) - { - faceIds->InsertNextId(pts[faceVerts[3]]); - aCellType = VTK_QUAD; - numFacePts = 4; - } - input->GetCellNeighbors(cellId, faceIds, cellIds); - if ( cellIds->GetNumberOfIds() <= 0 || myShowInside || - (!allVisible && !cellVis[cellIds->GetId(0)]) ) - { - for ( i=0; i < numFacePts; i++) - aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - break; - } - case VTK_PYRAMID: { - for (faceId = 0; faceId < 5; faceId++) - { - faceIds->Reset(); - faceVerts = vtkPyramid::GetFaceArray(faceId); - faceIds->InsertNextId(pts[faceVerts[0]]); - faceIds->InsertNextId(pts[faceVerts[1]]); - faceIds->InsertNextId(pts[faceVerts[2]]); - aCellType = VTK_TRIANGLE; - numFacePts = 3; - if (faceVerts[3] >= 0) - { - faceIds->InsertNextId(pts[faceVerts[3]]); - aCellType = VTK_QUAD; - numFacePts = 4; - } - input->GetCellNeighbors(cellId, faceIds, cellIds); - if ( cellIds->GetNumberOfIds() <= 0 || myShowInside || - (!allVisible && !cellVis[cellIds->GetId(0)]) ) - { - for ( i=0; i < numFacePts; i++) - aNewPts[i] = pts[faceVerts[i]]; - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - break; - } - //Quadratic cells - case VTK_QUADRATIC_EDGE: - case VTK_QUADRATIC_TRIANGLE: - case VTK_QUADRATIC_QUAD: - case VTK_QUADRATIC_TETRA: - case VTK_QUADRATIC_HEXAHEDRON: - if(!myIsWireframeMode){ - input->GetCell(cellId,cell); - vtkIdList *pts = vtkIdList::New(); - vtkPoints *coords = vtkPoints::New(); - vtkIdList *cellIds = vtkIdList::New(); - vtkIdType newCellId; - - if ( cell->GetCellDimension() == 1 ) { - aCellType = VTK_LINE; - numFacePts = 2; - cell->Triangulate(0,pts,coords); - for (i=0; i < pts->GetNumberOfIds(); i+=2) { - aNewPts[0] = pts->GetId(i); - aNewPts[1] = pts->GetId(i+1); - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - else if ( cell->GetCellDimension() == 2 ) { - aCellType = VTK_TRIANGLE; - numFacePts = 3; - cell->Triangulate(0,pts,coords); - for (i=0; i < pts->GetNumberOfIds(); i+=3) { - aNewPts[0] = pts->GetId(i); - aNewPts[1] = pts->GetId(i+1); - aNewPts[2] = pts->GetId(i+2); - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - else //3D nonlinear cell - { - aCellType = VTK_TRIANGLE; - numFacePts = 3; - for (int j=0; j < cell->GetNumberOfFaces(); j++){ - vtkCell *face = cell->GetFace(j); - input->GetCellNeighbors(cellId, face->PointIds, cellIds); - if ( cellIds->GetNumberOfIds() <= 0 || myShowInside ) { - face->Triangulate(0,pts,coords); - for (i=0; i < pts->GetNumberOfIds(); i+=3) { - aNewPts[0] = pts->GetId(i); - aNewPts[1] = pts->GetId(i+1); - aNewPts[2] = pts->GetId(i+2); - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - outputCD->CopyData(cd,cellId,newCellId); - } - } - } - } //3d cell - cellIds->Delete(); - coords->Delete(); - pts->Delete(); - break; - }else{ - switch(aCellType){ - case VTK_QUADRATIC_EDGE: { - aCellType = VTK_POLY_LINE; - numFacePts = 3; - - aNewPts[0] = pts[0]; - aNewPts[2] = pts[1]; - aNewPts[1] = pts[2]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - break; - } - case VTK_QUADRATIC_TRIANGLE: { - aCellType = VTK_POLYGON; - numFacePts = 6; - - aNewPts[0] = pts[0]; - aNewPts[1] = pts[3]; - aNewPts[2] = pts[1]; - aNewPts[3] = pts[4]; - aNewPts[4] = pts[2]; - aNewPts[5] = pts[5]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - break; - } - case VTK_QUADRATIC_QUAD: { - aCellType = VTK_POLYGON; - numFacePts = 8; - - aNewPts[0] = pts[0]; - aNewPts[1] = pts[4]; - aNewPts[2] = pts[1]; - aNewPts[3] = pts[5]; - aNewPts[4] = pts[2]; - aNewPts[5] = pts[6]; - aNewPts[6] = pts[3]; - aNewPts[7] = pts[7]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - break; - } - case VTK_QUADRATIC_TETRA: { - aCellType = VTK_POLYGON; - numFacePts = 6; - - //--------------------------------------------------------------- - aNewPts[0] = pts[0]; - aNewPts[1] = pts[4]; - aNewPts[2] = pts[1]; - aNewPts[3] = pts[5]; - aNewPts[4] = pts[2]; - aNewPts[5] = pts[6]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[0]; - aNewPts[1] = pts[7]; - aNewPts[2] = pts[3]; - aNewPts[3] = pts[8]; - aNewPts[4] = pts[1]; - aNewPts[5] = pts[4]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[1]; - aNewPts[1] = pts[8]; - aNewPts[2] = pts[3]; - aNewPts[3] = pts[9]; - aNewPts[4] = pts[2]; - aNewPts[5] = pts[5]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[2]; - aNewPts[1] = pts[9]; - aNewPts[2] = pts[3]; - aNewPts[3] = pts[7]; - aNewPts[4] = pts[0]; - aNewPts[5] = pts[6]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - break; - } - case VTK_QUADRATIC_HEXAHEDRON: { - aCellType = VTK_POLYGON; - numFacePts = 8; - - //--------------------------------------------------------------- - aNewPts[0] = pts[0]; - aNewPts[1] = pts[8]; - aNewPts[2] = pts[1]; - aNewPts[3] = pts[17]; - aNewPts[4] = pts[5]; - aNewPts[5] = pts[12]; - aNewPts[6] = pts[4]; - aNewPts[7] = pts[16]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[1]; - aNewPts[1] = pts[9]; - aNewPts[2] = pts[2]; - aNewPts[3] = pts[18]; - aNewPts[4] = pts[6]; - aNewPts[5] = pts[13]; - aNewPts[6] = pts[5]; - aNewPts[7] = pts[17]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[2]; - aNewPts[1] = pts[10]; - aNewPts[2] = pts[3]; - aNewPts[3] = pts[19]; - aNewPts[4] = pts[7]; - aNewPts[5] = pts[14]; - aNewPts[6] = pts[6]; - aNewPts[7] = pts[18]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[3]; - aNewPts[1] = pts[11]; - aNewPts[2] = pts[0]; - aNewPts[3] = pts[16]; - aNewPts[4] = pts[4]; - aNewPts[5] = pts[15]; - aNewPts[6] = pts[7]; - aNewPts[7] = pts[19]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[0]; - aNewPts[1] = pts[8]; - aNewPts[2] = pts[1]; - aNewPts[3] = pts[9]; - aNewPts[4] = pts[2]; - aNewPts[5] = pts[10]; - aNewPts[6] = pts[3]; - aNewPts[7] = pts[11]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - //--------------------------------------------------------------- - aNewPts[0] = pts[4]; - aNewPts[1] = pts[12]; - aNewPts[2] = pts[5]; - aNewPts[3] = pts[13]; - aNewPts[4] = pts[6]; - aNewPts[5] = pts[14]; - aNewPts[6] = pts[7]; - aNewPts[7] = pts[15]; - - newCellId = output->InsertNextCell(aCellType,numFacePts,aNewPts); - if(myStoreMapping) - myVTK2ObjIds.push_back(cellId); - - outputCD->CopyData(cd,cellId,newCellId); - - break; - }} - } - } //switch - } //if visible - } //for all cells - - output->Squeeze(); - - vtkDebugMacro(<<"Extracted " << input->GetNumberOfPoints() << " points," - << output->GetNumberOfCells() << " cells."); - - cell->Delete(); - - cellIds->Delete(); - faceIds->Delete(); - - if ( cellVis ) - { - delete [] cellVis; - } -} - - -void -VTKViewer_GeometryFilter -::SetInside(int theShowInside) -{ - if(myShowInside == theShowInside) - return; - - myShowInside = theShowInside; - this->Modified(); -} - -int -VTKViewer_GeometryFilter -::GetInside() -{ - return myShowInside; -} - - -void -VTKViewer_GeometryFilter -::SetWireframeMode(int theIsWireframeMode) -{ - if(myIsWireframeMode == theIsWireframeMode) - return; - - myIsWireframeMode = theIsWireframeMode; - this->Modified(); -} - -int -VTKViewer_GeometryFilter -::GetWireframeMode() -{ - return myIsWireframeMode; -} - - -void -VTKViewer_GeometryFilter -::SetStoreMapping(int theStoreMapping) -{ - if(myStoreMapping == theStoreMapping) - return; - - myStoreMapping = theStoreMapping; - this->Modified(); -} - -int -VTKViewer_GeometryFilter -::GetStoreMapping() -{ - return myStoreMapping; -} - - -vtkIdType VTKViewer_GeometryFilter::GetElemObjId( int theVtkID ) -{ - if( myVTK2ObjIds.empty() || theVtkID > (int)myVTK2ObjIds.size() ) - return -1; -#if defined __GNUC_2__ - return myVTK2ObjIds[theVtkID]; -#else - return myVTK2ObjIds.at(theVtkID); -#endif -} diff --git a/src/VTKViewer/VTKViewer_GeometryFilter.h b/src/VTKViewer/VTKViewer_GeometryFilter.h deleted file mode 100755 index 9c7425aa3..000000000 --- a/src/VTKViewer/VTKViewer_GeometryFilter.h +++ /dev/null @@ -1,118 +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 -// -#ifndef VTKVIEWER_GEOMETRYFILTER_H -#define VTKVIEWER_GEOMETRYFILTER_H - -#include "VTKViewer.h" - -#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 -{ -public: - /*! \fn static VTKViewer_GeometryFilter *New() - */ - static VTKViewer_GeometryFilter *New(); - - /*! \fn vtkTypeRevisionMacro(VTKViewer_GeometryFilter, vtkGeometryFilter) - * \brief VTK type revision macros. - */ - vtkTypeRevisionMacro(VTKViewer_GeometryFilter, vtkGeometryFilter); - /*! \fn void SetInside(int theShowInside) - * \brief Sets \a myShowInside flag. \a myShowInside is changed, call this->Modified(). - * \param theShowInside - used for changing value of \a myShowInside variable. - */ - void SetInside(int theShowInside); - /*! \fn int GetInside() - * \brief Return value of \a myShowInside - * \retval myShowInside - */ - int GetInside(); - /*! \fn void SetWireframeMode(int theIsWireframeMode) - * \brief Sets \a myIsWireframeMode flag. \a myIsWireframeMode is changed, call this->Modified(). - * \param theIsWireframeMode - used for changing value of \a myIsWireframeMode variable. - */ - void SetWireframeMode(int theIsWireframeMode); - /*! \fn int GetWireframeMode() - * \brief Return value of \a myIsWireframeMode - * \retval myIsWireframeMode - */ - int GetWireframeMode(); - /*! \fn void SetStoreMapping(int theStoreMapping); - * \brief Sets \a myStoreMapping flag and call this->Modified() - * \param theStoreMapping - used for changing value of \a myStoreMapping variable. - */ - void SetStoreMapping(int theStoreMapping); - /*! \fn int GetStoreMapping() - * \brief Return value of \a myStoreMapping - * \retval myStoreMapping - */ - int GetStoreMapping(); - /*! \fn virtual vtkIdType GetNodeObjId(int theVtkID) - * \brief Return input value theVtkID - * \retval theVtkID - */ - virtual vtkIdType GetNodeObjId(int theVtkID) { return theVtkID;} - /*! \fn virtual vtkIdType GetElemObjId(int theVtkID); - * \brief Return object ID by VTK ID cell - * \retval myVTK2ObjIds[theVtkID] - */ - virtual vtkIdType GetElemObjId(int theVtkID); - -protected: - /*! \fn VTKViewer_GeometryFilter(); - * \brief Constructor which sets \a myShowInside = 0 and \a myStoreMapping = 0 - */ - VTKViewer_GeometryFilter(); - /*! \fn ~VTKViewer_GeometryFilter(); - * \brief Destructor. - */ - ~VTKViewer_GeometryFilter(); - /*! \fn void Execute(); - * \brief Filter culculation method. - */ - void Execute(); - /*! \fn void UnstructuredGridExecute(); - * \brief Filter culculation method for data object type is VTK_UNSTRUCTURED_GRID. - */ - void UnstructuredGridExecute(); - -private: - typedef std::vector TVectorId; - -private: - TVectorId myVTK2ObjIds; - int myShowInside; - int myStoreMapping; - int myIsWireframeMode; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/VTKViewer/VTKViewer_InteractorStyle.cxx b/src/VTKViewer/VTKViewer_InteractorStyle.cxx deleted file mode 100644 index 6bc13e78e..000000000 --- a/src/VTKViewer/VTKViewer_InteractorStyle.cxx +++ /dev/null @@ -1,1523 +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_InteractorStyle.cxx -// Author : Christophe ATTANASIO -// Module : SALOME - -#include "VTKViewer_InteractorStyle.h" - -#include "VTKViewer_Actor.h" -#include "VTKViewer_Utilities.h" -#include "VTKViewer_Trihedron.h" -#include "VTKViewer_ViewWindow.h" -#include "VTKViewer_RenderWindow.h" -#include "VTKViewer_RenderWindowInteractor.h" - -//#include "SALOME_Actor.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -//VRV: porting on Qt 3.0.5 -#if QT_VERSION >= 0x030005 -#include -#endif -//VRV: porting on Qt 3.0.5 -#include - -//#include "utilities.h" - -using namespace std; - - -/* -static int GetEdgeId(vtkPicker *thePicker, SALOME_Actor *theActor, int theObjId){ - int anEdgeId = -1; - if (vtkCell* aPickedCell = theActor->GetElemCell(theObjId)) { - float aPickPosition[3]; - thePicker->GetPickPosition(aPickPosition); - float aMinDist = 1000000.0, aDist = 0; - for (int i = 0, iEnd = aPickedCell->GetNumberOfEdges(); i < iEnd; i++){ - if(vtkLine* aLine = vtkLine::SafeDownCast(aPickedCell->GetEdge(i))){ - int subId; float pcoords[3], closestPoint[3], weights[3]; - aLine->EvaluatePosition(aPickPosition,closestPoint,subId,pcoords,aDist,weights); - if (aDist < aMinDist) { - aMinDist = aDist; - anEdgeId = i; - } - } - } - } - return anEdgeId; -} -*/ - -vtkStandardNewMacro(VTKViewer_InteractorStyle); - - -/*!Constructor.*/ -VTKViewer_InteractorStyle::VTKViewer_InteractorStyle() -{ - m_Trihedron = 0; - this->MotionFactor = 10.0; - this->State = VTK_INTERACTOR_STYLE_CAMERA_NONE; - this->RadianToDegree = 180.0 / vtkMath::Pi(); - this->ForcedState = VTK_INTERACTOR_STYLE_CAMERA_NONE; - loadCursors(); - - myPreSelectionActor = VTKViewer_Actor::New(); - myPreSelectionActor->GetProperty()->SetColor(0,1,1); - myPreSelectionActor->GetProperty()->SetLineWidth(5); - myPreSelectionActor->GetProperty()->SetPointSize(5); - - OnSelectionModeChanged(); -} - - -/*!Destructor.*/ -VTKViewer_InteractorStyle::~VTKViewer_InteractorStyle() -{ - m_ViewWnd->RemoveActor(myPreSelectionActor); -} - - -/*!Set preselection properties. - *\param theRed - red color. - *\param theGreen - green color. - *\param theBlue - blue color. - *\param theWidth - width.. - */ -void VTKViewer_InteractorStyle::setPreselectionProp(const double& theRed, const double& theGreen, - const double& theBlue, const int& theWidth) -{ - if ( myPreSelectionActor->GetProperty() == 0 ) - return; - myPreSelectionActor->GetProperty()->SetColor(theRed, theGreen, theBlue); - myPreSelectionActor->GetProperty()->SetLineWidth(theWidth); - myPreSelectionActor->GetProperty()->SetPointSize(theWidth); -} - - -/*!Set render window interactor - *\param theInteractor - interactor. - */ -void VTKViewer_InteractorStyle::SetInteractor(vtkRenderWindowInteractor *theInteractor){ - m_Interactor = dynamic_cast(theInteractor); - Superclass::SetInteractor(theInteractor); -} - - -/*!Set view window. - *\param theViewWnd - SALOME VTKViewer_ViewWindow - */ -void VTKViewer_InteractorStyle::setViewWnd(VTKViewer_ViewWindow* theViewWnd ){ - m_ViewWnd = theViewWnd; - m_ViewWnd->AddActor(myPreSelectionActor); - myPreSelectionActor->Delete(); -} - - -/*!Set GUI window. - *\param theWindow - QWidget window. - */ -void VTKViewer_InteractorStyle::setGUIWindow(QWidget* theWindow){ - myGUIWindow = theWindow; -} - - -/*!Set trihedron. - *\param theTrihedron - SALOME VTKViewer_Trihedron - */ -void VTKViewer_InteractorStyle::setTriedron(VTKViewer_Trihedron* theTrihedron){ - m_Trihedron = theTrihedron; -} - -/*!Rotate camera. - *\param dx - - *\param dy - - */ -void VTKViewer_InteractorStyle::RotateXY(int dx, int dy) -{ - double rxf; - double ryf; - vtkCamera *cam; - - if (this->CurrentRenderer == NULL) - { - return; - } - - int *size = this->CurrentRenderer->GetRenderWindow()->GetSize(); - this->DeltaElevation = -20.0 / size[1]; - this->DeltaAzimuth = -20.0 / size[0]; - - rxf = (double)dx * this->DeltaAzimuth * this->MotionFactor; - ryf = (double)dy * this->DeltaElevation * this->MotionFactor; - - cam = this->CurrentRenderer->GetActiveCamera(); - cam->Azimuth(rxf); - cam->Elevation(ryf); - cam->OrthogonalizeViewUp(); - ::ResetCameraClippingRange(this->CurrentRenderer); - //this->Interactor->Render(); - myGUIWindow->update(); -} - -void VTKViewer_InteractorStyle::PanXY(int x, int y, int oldX, int oldY) -{ - TranslateView(x, y, oldX, oldY); - //this->Interactor->Render(); - myGUIWindow->update(); -} - - -/*! Move the position of the camera along the direction of projection. (dx,dy)*/ -void VTKViewer_InteractorStyle::DollyXY(int dx, int dy) -{ - if (this->CurrentRenderer == NULL) return; - - double dxf = this->MotionFactor * (double)(dx) / (double)(this->CurrentRenderer->GetCenter()[1]); - double dyf = this->MotionFactor * (double)(dy) / (double)(this->CurrentRenderer->GetCenter()[1]); - - double zoomFactor = pow((double)1.1, dxf + dyf); - - vtkCamera *aCam = this->CurrentRenderer->GetActiveCamera(); - if (aCam->GetParallelProjection()) - aCam->SetParallelScale(aCam->GetParallelScale()/zoomFactor); - else{ - aCam->Dolly(zoomFactor); - ::ResetCameraClippingRange(this->CurrentRenderer); - } - - //this->Interactor->Render(); - myGUIWindow->update(); -} - -void VTKViewer_InteractorStyle::SpinXY(int x, int y, int oldX, int oldY) -{ - vtkCamera *cam; - - if (this->CurrentRenderer == NULL) - { - return; - } - - double newAngle = atan2((double)(y - this->CurrentRenderer->GetCenter()[1]), - (double)(x - this->CurrentRenderer->GetCenter()[0])); - double oldAngle = atan2((double)(oldY -this->CurrentRenderer->GetCenter()[1]), - (double)(oldX - this->CurrentRenderer->GetCenter()[0])); - - newAngle *= this->RadianToDegree; - oldAngle *= this->RadianToDegree; - - cam = this->CurrentRenderer->GetActiveCamera(); - cam->Roll(newAngle - oldAngle); - cam->OrthogonalizeViewUp(); - - //this->Interactor->Render(); - myGUIWindow->update(); -} - - -/*!On mouse move event. - *\param ctrl - CTRL (not used) - *\param shift - SHIFT (on/off - integer 0/1) - *\param x - x coordinate - *\param y - y coordinate - */ -void VTKViewer_InteractorStyle::OnMouseMove(int vtkNotUsed(ctrl), - int shift, - int x, int y) -{ - myShiftState = shift; - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - onOperation(QPoint(x, y)); - else if (ForcedState == VTK_INTERACTOR_STYLE_CAMERA_NONE) - onCursorMove(QPoint(x, y)); -} - - -/*!On Left button down event. - *\param ctrl - CTRL (on/off - integer 0/1) - *\param shift - SHIFT (on/off - integer 0/1) - *\param x - x coordinate - *\param y - y coordinate - */ -void VTKViewer_InteractorStyle::OnLeftButtonDown(int ctrl, int shift, - int x, int y) -{ - if (this->HasObserver(vtkCommand::LeftButtonPressEvent)) { - this->InvokeEvent(vtkCommand::LeftButtonPressEvent,NULL); - return; - } - this->FindPokedRenderer(x, y); - if (this->CurrentRenderer == NULL) { - return; - } - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - myOtherPoint = myPoint = QPoint(x, y); - if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - startOperation(ForcedState); - } else { - if (ctrl) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_ZOOM); - else - startOperation(VTK_INTERACTOR_STYLE_CAMERA_SELECT); - } - return; -} - - -/*!On left button up event. - *\param ctrl - CTRL (not used) - *\param shift - SHIFT (on/off - integer 0/1) - *\param x - x coordinate (not used) - *\param y - y coordinate (not used) - */ -void VTKViewer_InteractorStyle::OnLeftButtonUp(int vtkNotUsed(ctrl), - int shift, - int vtkNotUsed(x), - int vtkNotUsed(y)) -{ - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } -} - - -/*!On left button up event. - *\param ctrl - CTRL (on/off - integer 0/1) - *\param shift - SHIFT (on/off - integer 0/1) - *\param x - x coordinate - *\param y - y coordinate - */ -void VTKViewer_InteractorStyle::OnMiddleButtonDown(int ctrl, - int shift, - int x, int y) -{ - if (this->HasObserver(vtkCommand::MiddleButtonPressEvent)) - { - this->InvokeEvent(vtkCommand::MiddleButtonPressEvent,NULL); - return; - } - this->FindPokedRenderer(x, y); - if (this->CurrentRenderer == NULL) - { - return; - } - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - myOtherPoint = myPoint = QPoint(x, y); - if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - startOperation(ForcedState); - } - else { - if (ctrl) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_PAN); - } -} - - -/*!On middle button up event. - *\param ctrl - CTRL (not used) - *\param shift - SHIFT (on/off - integer 0/1) - *\param x - x coordinate (not used) - *\param y - y coordinate (not used) - */ -void VTKViewer_InteractorStyle::OnMiddleButtonUp(int vtkNotUsed(ctrl), - int shift, - int vtkNotUsed(x), - int vtkNotUsed(y)) -{ - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } -} - - -/*!On right button down event. - *\param ctrl - CTRL (on/off - integer 0/1) - *\param shift - SHIFT (on/off - integer 0/1) - *\param x - x coordinate - *\param y - y coordinate - */ -void VTKViewer_InteractorStyle::OnRightButtonDown(int ctrl, - int shift, - int x, int y) -{ - if (this->HasObserver(vtkCommand::RightButtonPressEvent)) - { - this->InvokeEvent(vtkCommand::RightButtonPressEvent,NULL); - return; - } - this->FindPokedRenderer(x, y); - if (this->CurrentRenderer == NULL) - { - return; - } - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - myOtherPoint = myPoint = QPoint(x, y); - if (ForcedState != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - startOperation(ForcedState); - } - else { - if (ctrl) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_ROTATE); - } -} - -/*!On right button up event. - *\param ctrl - CTRL (not used) - *\param shift - SHIFT (on/off - integer 0/1) - *\param x - x coordinate (not used) - *\param y - y coordinate (not used) - */ -void VTKViewer_InteractorStyle::OnRightButtonUp(int vtkNotUsed(ctrl), - int shift, - int vtkNotUsed(x), - int vtkNotUsed(y)) -{ - myShiftState = shift; - // finishing current viewer operation - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } -} - -/*! @name XPM - x pixmaps. */ -//@{ -/*!Image Zoom cursor*/ -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....", -"................................", -"................................", -"................................", -"................................"}; - -/*!Image rotate cursor*/ -const char* imageRotateCursor[] = { -"32 32 3 1", -". c None", -"a c #000000", -"# c #ffffff", -"................................", -"................................", -"................................", -"................................", -"........#.......................", -".......#.a......................", -"......#######...................", -".......#aaaaa#####..............", -"........#..##.a#aa##........##..", -".........a#.aa..#..a#.....##.aa.", -".........#.a.....#...#..##.aa...", -".........#a.......#..###.aa.....", -"........#.a.......#a..#aa.......", -"........#a.........#..#a........", -"........#a.........#a.#a........", -"........#a.........#a.#a........", -"........#a.........#a.#a........", -".........#.........#a#.a........", -"........##a........#a#a.........", -"......##.a#.......#.#.a.........", -"....##.aa..##.....##.a..........", -"..##.aa.....a#####.aa...........", -"...aa.........aaa#a.............", -"................#.a.............", -"...............#.a..............", -"..............#.a...............", -"...............a................", -"................................", -"................................", -"................................", -"................................", -"................................"}; -//@} - -/*! Loads cursors for viewer operations - zoom, pan, etc...*/ -void VTKViewer_InteractorStyle::loadCursors() -{ - myDefCursor = QCursor(ArrowCursor); - myHandCursor = QCursor(PointingHandCursor); - myPanCursor = QCursor(SizeAllCursor); - myZoomCursor = QCursor(QPixmap(imageZoomCursor)); - myRotateCursor = QCursor(QPixmap(imageRotateCursor)); - mySpinCursor = QCursor(QPixmap(imageRotateCursor)); // temporarly !!!!!! - myGlobalPanCursor = QCursor(CrossCursor); - myCursorState = false; -} - - -/*! event filter - controls mouse and keyboard events during viewer operations*/ -bool VTKViewer_InteractorStyle::eventFilter(QObject* object, QEvent* event) -{ - if (!myGUIWindow) return false; - if ( (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::KeyPress) && object != myGUIWindow) - { - qApp->removeEventFilter(this); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - return QObject::eventFilter(object, event); -} - - -/*! starts Zoom operation (e.g. through menu command)*/ -void VTKViewer_InteractorStyle::startZoom() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_ZOOM); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_ZOOM; - qApp->installEventFilter(this); -} - - -/*! starts Pan operation (e.g. through menu command)*/ -void VTKViewer_InteractorStyle::startPan() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_PAN); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_PAN; - qApp->installEventFilter(this); -} - -/*! starts Rotate operation (e.g. through menu command)*/ -void VTKViewer_InteractorStyle::startRotate() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_ROTATE); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_ROTATE; - qApp->installEventFilter(this); -} - - -/*! starts Spin operation (e.g. through menu command)*/ -void VTKViewer_InteractorStyle::startSpin() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_SPIN); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_SPIN; - qApp->installEventFilter(this); -} - - - -/*! starts Fit Area operation (e.g. through menu command)*/ -void VTKViewer_InteractorStyle::startFitArea() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_FIT); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_FIT; - qApp->installEventFilter(this); -} - - -/*!View fit all.*/ -void VTKViewer_InteractorStyle::ViewFitAll() { - int aTriedronWasVisible = false; - if(m_Trihedron){ - aTriedronWasVisible = m_Trihedron->GetVisibility() == VTKViewer_Trihedron::eOn; - if(aTriedronWasVisible) m_Trihedron->VisibilityOff(); - } - - if(m_Trihedron->GetVisibleActorCount(CurrentRenderer)){ - m_Trihedron->VisibilityOff(); - ::ResetCamera(CurrentRenderer); - }else{ - m_Trihedron->SetVisibility(VTKViewer_Trihedron::eOnlyLineOn); - ::ResetCamera(CurrentRenderer,true); - } - if(aTriedronWasVisible) m_Trihedron->VisibilityOn(); - else m_Trihedron->VisibilityOff(); - ::ResetCameraClippingRange(CurrentRenderer); -} - - -/*! starts Global Panning operation (e.g. through menu command)*/ -void VTKViewer_InteractorStyle::startGlobalPan() -{ - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - { - onFinishOperation(); - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - } - setCursor(VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN); - ForcedState = VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN; - - // store current zoom scale - vtkCamera *cam = this->CurrentRenderer->GetActiveCamera(); - myScale = cam->GetParallelScale(); - - ViewFitAll(); - - if (myGUIWindow) myGUIWindow->update(); - - qApp->installEventFilter(this); -} - - -/*!\retval TRUE if needs redrawing*/ -bool VTKViewer_InteractorStyle::needsRedrawing() -{ - return State == VTK_INTERACTOR_STYLE_CAMERA_ZOOM || - State == VTK_INTERACTOR_STYLE_CAMERA_PAN || - State == VTK_INTERACTOR_STYLE_CAMERA_ROTATE || - State == VTK_INTERACTOR_STYLE_CAMERA_SPIN || - State == VTK_INTERACTOR_STYLE_CAMERA_NONE; -} - - -/*! fits viewer contents to rectangle - *\param left - left side - *\param top - top side - *\param right - right side - *\param bottom - bottom side - */ -void VTKViewer_InteractorStyle::fitRect(const int left, - const int top, - const int right, - const int bottom) -{ - if (this->CurrentRenderer == NULL) return; - - // move camera - int x = (left + right)/2; - int y = (top + bottom)/2; - int *aSize = this->CurrentRenderer->GetRenderWindow()->GetSize(); - int oldX = aSize[0]/2; - int oldY = aSize[1]/2; - TranslateView(oldX, oldY, x, y); - - // zoom camera - double dxf = (double)(aSize[0]) / (double)(abs(right - left)); - double dyf = (double)(aSize[1]) / (double)(abs(bottom - top)); - double zoomFactor = (dxf + dyf)/2 ; - - vtkCamera *aCam = this->CurrentRenderer->GetActiveCamera(); - if(aCam->GetParallelProjection()) - aCam->SetParallelScale(aCam->GetParallelScale()/zoomFactor); - else{ - aCam->Dolly(zoomFactor); - ::ResetCameraClippingRange(this->CurrentRenderer); - } - - myGUIWindow->update(); -} - - -/*! starts viewer operation (!internal usage!)*/ -void VTKViewer_InteractorStyle::startOperation(int operation) -{ - switch(operation) - { - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - if (State != VTK_INTERACTOR_STYLE_CAMERA_NONE) - startOperation(VTK_INTERACTOR_STYLE_CAMERA_NONE); - State = operation; - if (State != VTK_INTERACTOR_STYLE_CAMERA_SELECT) - setCursor(operation); - onStartOperation(); - break; - case VTK_INTERACTOR_STYLE_CAMERA_NONE: - default: - setCursor(VTK_INTERACTOR_STYLE_CAMERA_NONE); - State = ForcedState = VTK_INTERACTOR_STYLE_CAMERA_NONE; - break; - } -} - - -/*! sets proper cursor for window when viewer operation is activated*/ -void VTKViewer_InteractorStyle::setCursor(const int operation) -{ - if (!myGUIWindow) return; - switch (operation) - { - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - myGUIWindow->setCursor(myZoomCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - myGUIWindow->setCursor(myPanCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - myGUIWindow->setCursor(myRotateCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - myGUIWindow->setCursor(mySpinCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - myGUIWindow->setCursor(myGlobalPanCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - myGUIWindow->setCursor(myHandCursor); - myCursorState = true; - break; - case VTK_INTERACTOR_STYLE_CAMERA_NONE: - default: - myGUIWindow->setCursor(myDefCursor); - myCursorState = false; - break; - } -} - - -/*! called when viewer operation started (!put necessary initialization here!)*/ -void VTKViewer_InteractorStyle::onStartOperation() -{ - if (!myGUIWindow) return; - // VSV: LOD actor activisation - // this->Interactor->GetRenderWindow()->SetDesiredUpdateRate(this->Interactor->GetDesiredUpdateRate()); - switch (State) { - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - { - QPainter p(myGUIWindow); - p.setPen(Qt::lightGray); - p.setRasterOp(Qt::XorROP); - p.drawRect(QRect(myPoint, myOtherPoint)); - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - break; - } -} - - -/*! called when viewer operation finished (!put necessary post-processing here!)*/ -void VTKViewer_InteractorStyle::onFinishOperation() -{ - if (!myGUIWindow) return; - - -// SUIT_Study* aActiveStudy = SUIT_Application::getDesktop()->getActiveStudy(); -// SALOME_Selection* aSel = SALOME_Selection::Selection( aActiveStudy->getSelection() ); - - // VSV: LOD actor activisation - // rwi->GetRenderWindow()->SetDesiredUpdateRate(rwi->GetStillUpdateRate()); - -// Selection_Mode aSelectionMode = aSel->SelectionMode(); -// bool aSelActiveCompOnly = aSel->IsSelectActiveCompOnly(); - -/* switch (State) { - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - { - QPainter p(myGUIWindow); - p.setPen(Qt::lightGray); - p.setRasterOp(Qt::XorROP); - QRect rect(myPoint, myOtherPoint); - p.drawRect(rect); - rect = rect.normalize(); - if (State == VTK_INTERACTOR_STYLE_CAMERA_FIT) { - // making fit rect opeation - int w, h; - m_Interactor->GetSize(w, h); - int x1, y1, x2, y2; - x1 = rect.left(); - y1 = h - rect.top() - 1; - x2 = rect.right(); - y2 = h - rect.bottom() - 1; - fitRect(x1, y1, x2, y2); - } - else { - if (myPoint == myOtherPoint) { - // process point selection - int w, h, x, y; - m_Interactor->GetSize(w, h); - x = myPoint.x(); - y = h - myPoint.y() - 1; - - this->FindPokedRenderer(x, y); - m_Interactor->StartPickCallback(); - - vtkPicker* aPicker = vtkPicker::SafeDownCast(m_Interactor->GetPicker()); - aPicker->Pick(x, y, 0.0, this->CurrentRenderer); - - SALOME_Actor* SActor = SALOME_Actor::SafeDownCast(aPicker->GetActor()); - - if (vtkCellPicker* picker = vtkCellPicker::SafeDownCast(aPicker)) { - int aVtkId = picker->GetCellId(); - if ( aVtkId >= 0 && SActor && SActor->hasIO() && IsValid( SActor, aVtkId ) ) { - int anObjId = SActor->GetElemObjId(aVtkId); - if(anObjId >= 0){ - Handle(SALOME_InteractiveObject) IO = SActor->getIO(); - if(aSelectionMode != EdgeOfCellSelection) { - if(CheckDimensionId(aSelectionMode,SActor,anObjId)){ - if (IsSelected(IO,aSel)) { - // This IO is already in the selection - aSel->AddOrRemoveIndex( IO, anObjId, myShiftState, false ); - } else { - if (!myShiftState) { - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - aSel->AddOrRemoveIndex( IO, anObjId, myShiftState, false ); - aSel->AddIObject( IO, false ); - } - } - }else{ - if (!myShiftState) { - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - int anEdgeId = GetEdgeId(picker,SActor,anObjId); - if (anEdgeId >= 0) { - aSel->AddOrRemoveIndex( IO, anObjId, true, false); - aSel->AddOrRemoveIndex( IO, -anEdgeId-1, true, true ); - aSel->AddIObject( IO, false ); - } - } - } - } else { - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - } else if ( vtkPointPicker* picker = vtkPointPicker::SafeDownCast(aPicker) ) { - int aVtkId = picker->GetPointId(); - if ( aVtkId >= 0 && IsValid( SActor, aVtkId, true ) ) { - if ( SActor && SActor->hasIO() ) { - int anObjId = SActor->GetNodeObjId(aVtkId); - if(anObjId >= 0){ - Handle(SALOME_InteractiveObject) IO = SActor->getIO(); - if(IsSelected(IO,aSel)) { - // This IO is already in the selection - aSel->AddOrRemoveIndex( IO, anObjId, myShiftState, false ); - } else { - if(!myShiftState) { - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - aSel->AddOrRemoveIndex( IO, anObjId, myShiftState, false ); - aSel->AddIObject( IO, false ); - } - } - } - } else { - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - } else { - if ( SActor && SActor->hasIO() ) { - this->PropPicked++; - Handle(SALOME_InteractiveObject) IO = SActor->getIO(); - if(IsSelected(IO,aSel)) { - // This IO is already in the selection - if(myShiftState) { - aSel->RemoveIObject(IO); - } - } - else { - if(!myShiftState) { - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - aSel->AddIObject( IO, false ); - } - }else{ - // No selection clear all - this->PropPicked = 0; - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - } - m_Interactor->EndPickCallback(); - } else { - //processing rectangle selection - QString aComponentDataType = SUIT_Application::getDesktop()->getComponentDataType(); - if(aSelActiveCompOnly && aComponentDataType.isEmpty()) return; - m_Interactor->StartPickCallback(); - - if (!myShiftState) { - this->PropPicked = 0; - this->HighlightProp( NULL ); - aSel->ClearIObjects(); - } - - // Compute bounds - // vtkCamera *cam = this->CurrentRenderer->GetActiveCamera(); - QRect rect(myPoint, myOtherPoint); - rect = rect.normalize(); - int w, h; - m_Interactor->GetSize(w, h); - int x1, y1, x2, y2; - x1 = rect.left(); - y1 = h - rect.top() - 1; - x2 = rect.right(); - y2 = h - rect.bottom() - 1; - - switch (aSelectionMode) { - case NodeSelection: { - if ( vtkPointPicker* aPointPicker = vtkPointPicker::SafeDownCast(m_Interactor->GetPicker()) ) { - vtkActorCollection* aListActors = this->CurrentRenderer->GetActors(); - aListActors->InitTraversal(); - while (vtkActor* aActor = aListActors->GetNextActor()) { - if (!aActor->GetVisibility()) - continue; - if(SALOME_Actor* SActor = SALOME_Actor::SafeDownCast(aActor)) { - if (SActor->hasIO()) { - Handle(SALOME_InteractiveObject) IO = SActor->getIO(); - if (IO.IsNull()) - continue; - if (aSelActiveCompOnly && aComponentDataType != IO->getComponentDataType()) - continue; - if (vtkDataSet* aDataSet = SActor->GetInput()) { - SALOME_Selection::TContainerOfId anIndices; - for(int i = 0; i < aDataSet->GetNumberOfPoints(); i++) { - float aPoint[3]; - aDataSet->GetPoint(i,aPoint); - if (IsInRect(aPoint,x1,y1,x2,y2)){ - float aDisp[3]; - ComputeWorldToDisplay(aPoint[0],aPoint[1],aPoint[2],aDisp); - if(aPointPicker->Pick(aDisp[0],aDisp[1],0.0,CurrentRenderer)){ - if(vtkActorCollection *anActorCollection = aPointPicker->GetActors()){ - if(anActorCollection->IsItemPresent(SActor)){ - float aPickedPoint[3]; - aPointPicker->GetMapperPosition(aPickedPoint); - vtkIdType aVtkId = aDataSet->FindPoint(aPickedPoint); - if ( aVtkId >= 0 && IsValid( SActor, aVtkId, true ) ){ - int anObjId = SActor->GetNodeObjId(aVtkId); - anIndices.insert(anObjId); - } - } - } - } - } - } - if (!anIndices.empty()) { - aSel->AddOrRemoveIndex(IO, anIndices, true, false); - aSel->AddIObject(IO, false); - anIndices.clear(); - }else{ - aSel->RemoveIObject(IO, false); - } - } - } - } - } - } - break; - } - case CellSelection: - case EdgeOfCellSelection: - case EdgeSelection: - case FaceSelection: - case VolumeSelection: - { - vtkSmartPointer picker = VTKViewer_CellRectPicker::New(); - picker->SetTolerance(0.001); - picker->Pick(x1, y1, 0.0, x2, y2, 0.0, this->CurrentRenderer); - - vtkActorCollection* aListActors = picker->GetActors(); - aListActors->InitTraversal(); - while(vtkActor* aActor = aListActors->GetNextActor()) { - if (SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast(aActor)) { - if (aSActor->hasIO()) { - Handle(SALOME_InteractiveObject) aIO = aSActor->getIO(); - if (aSelActiveCompOnly && aComponentDataType != aIO->getComponentDataType()) - continue; - VTKViewer_CellDataSet cellList = picker->GetCellData(aActor); - if ( !cellList.empty() ) { - SALOME_Selection::TContainerOfId anIndexes; - VTKViewer_CellDataSet::iterator it; - for ( it = cellList.begin(); it != cellList.end(); ++it ) { - int aCellId = (*it).cellId; - - if ( !IsValid( aSActor, aCellId ) ) - continue; - - int anObjId = aSActor->GetElemObjId(aCellId); - if (anObjId != -1){ - if ( CheckDimensionId(aSelectionMode,aSActor,anObjId) ) { - anIndexes.insert(anObjId); - } - } - } - aSel->AddOrRemoveIndex(aIO, anIndexes, true, false); - aSel->AddIObject(aIO, false); - } - } - } - } - } - break; - case ActorSelection: // objects selection - { - vtkSmartPointer picker = VTKViewer_RectPicker::New(); - picker->SetTolerance(0.001); - picker->Pick(x1, y1, 0.0, x2, y2, 0.0, this->CurrentRenderer); - - vtkActorCollection* aListActors = picker->GetActors(); - SALOME_ListIO aListIO; - aListActors->InitTraversal(); - while(vtkActor* aActor = aListActors->GetNextActor()) { - if (SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast(aActor)) { - if (aSActor->hasIO()) { - Handle(SALOME_InteractiveObject) aIO = aSActor->getIO(); - if (!IsStored(aIO,aListIO)) - aListIO.Append(aIO); - } - } - } - if (!aListIO.IsEmpty()) { - SALOME_ListIteratorOfListIO It(aListIO); - for(;It.More();It.Next()) { - Handle(SALOME_InteractiveObject) IOS = It.Value(); - this->PropPicked++; - aSel->AddIObject( IOS, false ); - } - } - } // end case 4 - } //end switch - m_Interactor->EndPickCallback(); - } - aActiveStudy->update3dViewers(); - } - } - break; - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - break; - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - { - int w, h, x, y; - m_Interactor->GetSize(w, h); - x = myPoint.x(); - y = h - myPoint.y() - 1; - Place(x, y); - } - break; - } - if (myGUIWindow) myGUIWindow->update(); -*/ -} - -/*! called during viewer operation when user moves mouse (!put necessary processing here!)*/ -void VTKViewer_InteractorStyle::onOperation(QPoint mousePos) -{ - if (!myGUIWindow) return; - int w, h; - GetInteractor()->GetSize(w, h); - switch (State) { - case VTK_INTERACTOR_STYLE_CAMERA_PAN: - { - // processing panning - //this->FindPokedCamera(mousePos.x(), mousePos.y()); - this->PanXY(mousePos.x(), myPoint.y(), myPoint.x(), mousePos.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_ZOOM: - { - // processing zooming - //this->FindPokedCamera(mousePos.x(), mousePos.y()); - this->DollyXY(mousePos.x() - myPoint.x(), mousePos.y() - myPoint.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_ROTATE: - { - // processing rotation - //this->FindPokedCamera(mousePos.x(), mousePos.y()); - this->RotateXY(mousePos.x() - myPoint.x(), myPoint.y() - mousePos.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_SPIN: - { - // processing spinning - //this->FindPokedCamera(mousePos.x(), mousePos.y()); - this->SpinXY(mousePos.x(), mousePos.y(), myPoint.x(), myPoint.y()); - myPoint = mousePos; - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN: - { - break; - } - case VTK_INTERACTOR_STYLE_CAMERA_SELECT: - { - if (!myCursorState) - setCursor(VTK_INTERACTOR_STYLE_CAMERA_SELECT); - } - case VTK_INTERACTOR_STYLE_CAMERA_FIT: - { - QPainter p(myGUIWindow); - p.setPen(Qt::lightGray); - p.setRasterOp(Qt::XorROP); - p.drawRect(QRect(myPoint, myOtherPoint)); - myOtherPoint = mousePos; - p.drawRect(QRect(myPoint, myOtherPoint)); - break; - } - } - this->LastPos[0] = mousePos.x(); - this->LastPos[1] = h - mousePos.y() - 1; -} - -/*! called when selection mode changed (!put necessary initialization here!)*/ -void VTKViewer_InteractorStyle::OnSelectionModeChanged() -{ - - myPreSelectionActor->SetVisibility(false); - myElemId = myEdgeId = myNodeId = -1; - mySelectedActor = NULL; -} - -/*! called when user moves mouse inside viewer window and there is no active viewer operation \n - * (!put necessary processing here!) - */ -void VTKViewer_InteractorStyle::onCursorMove(QPoint mousePos) { - // processing highlighting -// SUIT_Study* anActiveStudy = SUIT_Application::getDesktop()->getActiveStudy(); -// SALOME_Selection* Sel = SALOME_Selection::Selection( anActiveStudy->getSelection() ); -// Selection_Mode aSelectionMode = Sel->SelectionMode(); - -/* int w, h, x, y; - m_Interactor->GetSize(w, h); - x = mousePos.x(); y = h - mousePos.y() - 1; - - this->FindPokedRenderer(x,y); - m_Interactor->StartPickCallback(); - myPreSelectionActor->SetVisibility(false); - - vtkPicker* aPicker = vtkPicker::SafeDownCast(m_Interactor->GetPicker()); - aPicker->Pick(x, y, 0.0, this->CurrentRenderer); - - SALOME_Actor* SActor = SALOME_Actor::SafeDownCast(aPicker->GetActor()); - - if (vtkCellPicker* picker = vtkCellPicker::SafeDownCast(aPicker)) { - int aVtkId = picker->GetCellId(); - if ( aVtkId >= 0 ) { - int anObjId = SActor->GetElemObjId(aVtkId); - if ( SActor && SActor->hasIO() && IsValid( SActor, aVtkId ) ) { - bool anIsSameObjId = (mySelectedActor == SActor && myElemId == anObjId); - bool aResult = anIsSameObjId; - if(!anIsSameObjId) { - if(aSelectionMode != EdgeOfCellSelection) { - aResult = CheckDimensionId(aSelectionMode,SActor,anObjId); - if(aResult){ - mySelectedActor = SActor; - myElemId = anObjId; - m_Interactor->setCellData(anObjId,SActor,myPreSelectionActor); - } - } - } - if(aSelectionMode == EdgeOfCellSelection){ - int anEdgeId = GetEdgeId(picker,SActor,anObjId); - bool anIsSameEdgeId = (myEdgeId != anEdgeId) && anIsSameObjId; - aResult = anIsSameEdgeId; - if(!anIsSameEdgeId) { - aResult = (anEdgeId >= 0); - if (aResult) { - mySelectedActor = SActor; - myEdgeId = anEdgeId; - myElemId = anObjId; - m_Interactor->setEdgeData(anObjId,SActor,-anEdgeId-1,myPreSelectionActor); - } - } - } - if(aResult) { - myPreSelectionActor->GetProperty()->SetRepresentationToSurface(); - myPreSelectionActor->SetVisibility(true); - } - } - } - } - else if (vtkPointPicker* picker = vtkPointPicker::SafeDownCast(aPicker)) { - int aVtkId = picker->GetPointId(); - if ( aVtkId >= 0 && IsValid( SActor, aVtkId, true ) ) { - if ( SActor && SActor->hasIO() ) { - int anObjId = SActor->GetNodeObjId(aVtkId); - bool anIsSameObjId = (mySelectedActor == SActor && myNodeId == anObjId); - if(!anIsSameObjId) { - mySelectedActor = SActor; - myNodeId = anObjId; - m_Interactor->setPointData(anObjId,SActor,myPreSelectionActor); - } - myPreSelectionActor->GetProperty()->SetRepresentationToSurface(); - myPreSelectionActor->SetVisibility(true); - } - } - } - else if ( vtkPicker::SafeDownCast(aPicker) ) { - if ( SActor ) { - if ( myPreViewActor != SActor ) { - if ( myPreViewActor != NULL ) { - myPreViewActor->SetPreSelected( false ); - } - myPreViewActor = SActor; - - if ( SActor->hasIO() ) { - Handle( SALOME_InteractiveObject) IO = SActor->getIO(); - if ( !IsSelected(IO,Sel) ) { - // Find All actors with same IO - vtkActorCollection* theActors = this->CurrentRenderer->GetActors(); - theActors->InitTraversal(); - while( vtkActor *ac = theActors->GetNextActor() ) { - if ( SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( ac ) ) { - if ( anActor->hasIO() ) { - Handle(SALOME_InteractiveObject) IOS = anActor->getIO(); - if(IO->isSame(IOS)) { - anActor->SetPreSelected( true ); - } - } - } - } - } - } - } - } else { - myPreViewActor = NULL; - vtkActorCollection* theActors = this->CurrentRenderer->GetActors(); - theActors->InitTraversal(); - while( vtkActor *ac = theActors->GetNextActor() ) { - if ( SALOME_Actor* anActor = SALOME_Actor::SafeDownCast( ac ) ) { - anActor->SetPreSelected( false ); - } - } - } - } - m_Interactor->EndPickCallback(); - //m_Interactor->Render(); - myGUIWindow->update(); - - this->LastPos[0] = x; - this->LastPos[1] = y;*/ -} - -/*! called on finsh GlobalPan operation */ -void VTKViewer_InteractorStyle::Place(const int theX, const int theY) -{ - if (this->CurrentRenderer == NULL) { - return; - } - - //translate view - int *aSize = this->CurrentRenderer->GetRenderWindow()->GetSize(); - int centerX = aSize[0]/2; - int centerY = aSize[1]/2; - - TranslateView(centerX, centerY, theX, theY); - - // restore zoom scale - vtkCamera *cam = this->CurrentRenderer->GetActiveCamera(); - cam->SetParallelScale(myScale); - ::ResetCameraClippingRange(this->CurrentRenderer); - - if (myGUIWindow) myGUIWindow->update(); - -} - - - -/*! Translates view from Point to Point*/ -void VTKViewer_InteractorStyle::TranslateView(int toX, int toY, int fromX, int fromY) -{ - vtkCamera *cam = this->CurrentRenderer->GetActiveCamera(); - vtkFloatingPointType viewFocus[4], focalDepth, viewPoint[3]; - vtkFloatingPointType newPickPoint[4], oldPickPoint[4], motionVector[3]; - cam->GetFocalPoint(viewFocus); - - this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], - viewFocus[2], viewFocus); - focalDepth = viewFocus[2]; - - this->ComputeDisplayToWorld(vtkFloatingPointType(toX), vtkFloatingPointType(toY), - focalDepth, newPickPoint); - this->ComputeDisplayToWorld(vtkFloatingPointType(fromX),vtkFloatingPointType(fromY), - focalDepth, oldPickPoint); - - // camera motion is reversed - motionVector[0] = oldPickPoint[0] - newPickPoint[0]; - motionVector[1] = oldPickPoint[1] - newPickPoint[1]; - motionVector[2] = oldPickPoint[2] - newPickPoint[2]; - - cam->GetFocalPoint(viewFocus); - cam->GetPosition(viewPoint); - cam->SetFocalPoint(motionVector[0] + viewFocus[0], - motionVector[1] + viewFocus[1], - motionVector[2] + viewFocus[2]); - cam->SetPosition(motionVector[0] + viewPoint[0], - motionVector[1] + viewPoint[1], - motionVector[2] + viewPoint[2]); -} - - -/*! Checks: is the given Actor within display coordinates?*/ -bool VTKViewer_InteractorStyle::IsInRect(vtkActor* theActor, - const int left, const int top, - const int right, const int bottom) -{ - vtkFloatingPointType* aBounds = theActor->GetBounds(); - vtkFloatingPointType aMin[3], aMax[3]; - ComputeWorldToDisplay(aBounds[0], aBounds[2], aBounds[4], aMin); - ComputeWorldToDisplay(aBounds[1], aBounds[3], aBounds[5], aMax); - if (aMin[0] > aMax[0]) { - vtkFloatingPointType aBuf = aMin[0]; - aMin[0] = aMax[0]; - aMax[0] = aBuf; - } - if (aMin[1] > aMax[1]) { - vtkFloatingPointType aBuf = aMin[1]; - aMin[1] = aMax[1]; - aMax[1] = aBuf; - } - - return ((aMin[0]>left) && (aMax[0]bottom) && (aMax[1]GetBounds(); - vtkFloatingPointType aMin[3], aMax[3]; - ComputeWorldToDisplay(aBounds[0], aBounds[2], aBounds[4], aMin); - ComputeWorldToDisplay(aBounds[1], aBounds[3], aBounds[5], aMax); - if (aMin[0] > aMax[0]) { - vtkFloatingPointType aBuf = aMin[0]; - aMin[0] = aMax[0]; - aMax[0] = aBuf; - } - if (aMin[1] > aMax[1]) { - vtkFloatingPointType aBuf = aMin[1]; - aMin[1] = aMax[1]; - aMax[1] = aBuf; - } - - return ((aMin[0]>left) && (aMax[0]bottom) && (aMax[1]left) && (aPnt[0]bottom) && (aPnt[1]GetId() ] = theFilter; -} - -/*!Checks: is filter present (with id \a theId) - *\param theId - filter id. - */ -bool VTKViewer_InteractorStyle::IsFilterPresent( const int theId ) -{ - return myFilters.find( theId ) != myFilters.end(); -} - -/*!Remove filter with id \a theId. - *\param theId - filter id. - */ -void VTKViewer_InteractorStyle::RemoveFilter( const int theId ) -{ - if ( IsFilterPresent( theId ) ) - myFilters.erase( theId ); -} - -/*!Checks: is valid cell(node) with id \a theId in actor \a theActor. - *\param theActor - VTKViewer_Actor pointer. - *\param theId - cell id. - *\param theIsNode - boolean flag, if true - node, else - cell. - */ -bool VTKViewer_InteractorStyle::IsValid( VTKViewer_Actor* theActor, - const int theId, - const bool theIsNode ) -{ - std::map::const_iterator anIter; - for ( anIter = myFilters.begin(); anIter != myFilters.end(); ++anIter ) - { - const Handle(VTKViewer_Filter)& aFilter = anIter->second; - if ( theIsNode == aFilter->IsNodeFilter() && - !aFilter->IsValid( theActor, theId ) ) - return false; - } - return true; -} - -/*!Gets filter handle by filter id \a theId.*/ -Handle(VTKViewer_Filter) VTKViewer_InteractorStyle::GetFilter( const int theId ) -{ - return IsFilterPresent( theId ) ? myFilters[ theId ] : Handle(VTKViewer_Filter)(); -} - -/*!Increment pan. - *\param incrX - X coordinate increment. - *\param incrY - Y coordinate increment. - */ -void VTKViewer_InteractorStyle::IncrementalPan( const int incrX, const int incrY ) -{ - this->PanXY( incrX, incrY, 0, 0 ); -} - -/*!Increment zoom. - *\param incr - zoom increment. - */ -void VTKViewer_InteractorStyle::IncrementalZoom( const int incr ) -{ - this->DollyXY( incr, incr ); -} - -/*!Increment rotate. - *\param incrX - X coordinate increment. - *\param incrY - Y coordinate increment. - */ -void VTKViewer_InteractorStyle::IncrementalRotate( const int incrX, const int incrY ) -{ - this->RotateXY( incrX, -incrY ); -} - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/VTKViewer/VTKViewer_InteractorStyle.h b/src/VTKViewer/VTKViewer_InteractorStyle.h deleted file mode 100644 index b867f64b3..000000000 --- a/src/VTKViewer/VTKViewer_InteractorStyle.h +++ /dev/null @@ -1,196 +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_InteractorStyle.h -// Author : Christophe ATTANASIO -// Module : SALOME - -#ifndef __VTKViewer_InteractorStyle_h -#define __VTKViewer_InteractorStyle_h - -#include - -class vtkCell; -class vtkRenderWindowInteractor; - -#include -#include - -#include - -#include "VTKViewer.h" - -#include "VTKViewer_Filter.h" - -class VTKViewer_Actor; -class VTKViewer_Trihedron; -class VTKViewer_ViewWindow; -class VTKViewer_RenderWindowInteractor; - -#define VTK_INTERACTOR_STYLE_CAMERA_NONE 0 -#define VTK_INTERACTOR_STYLE_CAMERA_ROTATE 1 -#define VTK_INTERACTOR_STYLE_CAMERA_PAN 2 -#define VTK_INTERACTOR_STYLE_CAMERA_ZOOM 3 -#define VTK_INTERACTOR_STYLE_CAMERA_SPIN 4 -#define VTK_INTERACTOR_STYLE_CAMERA_FIT 5 -#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 - * programmers. - */ -class VTKVIEWER_EXPORT VTKViewer_InteractorStyle : public QObject, public vtkInteractorStyle -{ - public: - static VTKViewer_InteractorStyle *New(); - vtkTypeMacro(VTKViewer_InteractorStyle, vtkInteractorStyle); - - virtual void SetInteractor(vtkRenderWindowInteractor *theInteractor); - void setViewWnd(VTKViewer_ViewWindow* theViewWnd); - void setGUIWindow(QWidget* theWindow); - - void setTriedron(VTKViewer_Trihedron* theTrihedron); - void setPreselectionProp(const double& theRed = 0, const double& theGreen = 1, - const double& theBlue = 1, const int& theWidth = 5); - - // Generic event bindings must be overridden in subclasses - void OnMouseMove (int ctrl, int shift, int x, int y); - void OnLeftButtonDown(int ctrl, int shift, int x, int y); - void OnLeftButtonUp (int ctrl, int shift, int x, int y); - void OnMiddleButtonDown(int ctrl, int shift, int x, int y); - void OnMiddleButtonUp (int ctrl, int shift, int x, int y); - void OnRightButtonDown(int ctrl, int shift, int x, int y); - void OnRightButtonUp (int ctrl, int shift, int x, int y); - - void OnSelectionModeChanged(); - - void ViewFitAll(); - - void SetFilter( const Handle( VTKViewer_Filter)& ); - Handle(VTKViewer_Filter) GetFilter( const int ); - bool IsFilterPresent( const int ); - void RemoveFilter( const int ); - bool IsValid( VTKViewer_Actor* theActor, - const int theId, - const bool theIsNode = false ); - - void IncrementalPan ( const int incrX, const int incrY ); - void IncrementalZoom ( const int incr ); - void IncrementalRotate( const int incrX, const int incrY ); - - int CurrentState() const { return State; } - - protected: - VTKViewer_InteractorStyle(); - ~VTKViewer_InteractorStyle(); - VTKViewer_InteractorStyle(const VTKViewer_InteractorStyle&) {}; - void operator=(const VTKViewer_InteractorStyle&) {}; - - void RotateXY(int dx, int dy); - void PanXY(int x, int y, int oldX, int oldY); - void DollyXY(int dx, int dy); - void SpinXY(int dx, int dy, int oldX, int oldY); - void fitRect(const int left, const int top, const int right, const int bottom); - void Place(const int theX, const int theY); - void TranslateView(int toX, int toY, int fromX, int fromY); - bool IsInRect(vtkActor* theActor, - const int left, const int top, - const int right, const int bottom); - bool IsInRect(vtkCell* theCell, - const int left, const int top, - const int right, const int bottom); - bool IsInRect(vtkFloatingPointType* thePoint, - const int left, const int top, - const int right, const int bottom); - - int State; - vtkFloatingPointType MotionFactor; - vtkFloatingPointType RadianToDegree; // constant: for conv from deg to rad - double myScale; - - VTKViewer_Actor *myPreViewActor, *myPreSelectionActor, *mySelectedActor; - - int myElemId; - int myEdgeId; - int myNodeId; - - public: - bool eventFilter(QObject* object, QEvent* event); - void startZoom(); - void startPan(); - void startGlobalPan(); - void startRotate(); - void startFitArea(); - void startSpin(); - bool needsRedrawing(); - - protected: - void loadCursors(); - void startOperation(int operation); - virtual void onStartOperation(); - virtual void onFinishOperation(); - virtual void onOperation(QPoint mousePos); - virtual void onCursorMove(QPoint mousePos); - virtual void setCursor(const int operation); - - - protected: - QCursor myDefCursor; - QCursor myPanCursor; - QCursor myZoomCursor; - QCursor myRotateCursor; - QCursor mySpinCursor; - QCursor myHandCursor; - QCursor myGlobalPanCursor; - QPoint myPoint; - QPoint myOtherPoint; - bool myCursorState; - bool myShiftState; - int ForcedState; - - VTKViewer_RenderWindowInteractor* m_Interactor; - VTKViewer_ViewWindow* m_ViewWnd; - VTKViewer_Trihedron* m_Trihedron; - QWidget* myGUIWindow; - - std::map myFilters; - - /** @name members from old version*/ - //@{ - double DeltaElevation; - double DeltaAzimuth; - int LastPos[2]; - //@} -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/VTKViewer/VTKViewer_PassThroughFilter.cxx b/src/VTKViewer/VTKViewer_PassThroughFilter.cxx deleted file mode 100755 index 172976d7e..000000000 --- a/src/VTKViewer/VTKViewer_PassThroughFilter.cxx +++ /dev/null @@ -1,69 +0,0 @@ -// SALOME FILTER : interactive object for VISU entities implementation -// -// 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 : SALOME_PassThroughFilter.cxx -// Author : Laurent CORNABE with help of Nicolas REJNERI -// Module : SALOME - - -#include "VTKViewer_PassThroughFilter.h" - -#include -#include -#include -#include - -vtkCxxRevisionMacro(VTKViewer_PassThroughFilter, "$Revision$"); -vtkStandardNewMacro(VTKViewer_PassThroughFilter); - -/*! \class VTKViewer_PassThroughFilter - * Passive filter take a dataset as input and create a dataset as output.\n - * The form of the input geometry is not changed in these filters, \n - * only the point attributes (e.g. scalars, vectors, etc.). - */ - -/*!Execute method.Output calculation.*/ -void VTKViewer_PassThroughFilter::Execute() -{ - vtkDataSet *input = static_cast(this->GetInput()); - vtkDataSet *output = static_cast(this->GetOutput()); - - // This has to be here because it initialized all field datas. - output->CopyStructure( input ); - - //! Pass all. (data object's field data is passed by the - //! superclass after this method) - output->GetPointData()->PassData( input->GetPointData() ); - output->GetCellData()->PassData( input->GetCellData() ); - -} - -/*!Methods invoked by print to print information about the object including superclasses.\n - * Typically not called by the user (use Print() instead) but used in the hierarchical \n - * print process to combine the output of several classes. - *\param os - output stream. - */ -void VTKViewer_PassThroughFilter::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os,indent); -} diff --git a/src/VTKViewer/VTKViewer_PassThroughFilter.h b/src/VTKViewer/VTKViewer_PassThroughFilter.h deleted file mode 100755 index 3e683348f..000000000 --- a/src/VTKViewer/VTKViewer_PassThroughFilter.h +++ /dev/null @@ -1,46 +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 -// -#ifndef VTKVIEWER_PASSTHROUGHFILTER_H -#define VTKVIEWER_PASSTHROUGHFILTER_H - -#include "VTKViewer.h" - -#include - -class VTKVIEWER_EXPORT VTKViewer_PassThroughFilter : public vtkDataSetToDataSetFilter -{ -public: - vtkTypeRevisionMacro( VTKViewer_PassThroughFilter, vtkDataSetToDataSetFilter ); - void PrintSelf( ostream& os, vtkIndent indent ); - - /*!Create a new VTKViewer_PassThroughFilter.*/ - static VTKViewer_PassThroughFilter *New(); - -protected: - VTKViewer_PassThroughFilter() {};//!< Null body. - virtual ~VTKViewer_PassThroughFilter() {};//!< Null body. - - void Execute(); - -private: - VTKViewer_PassThroughFilter( const VTKViewer_PassThroughFilter& ); //!< Not implemented. - void operator=( const VTKViewer_PassThroughFilter& ); //!< Not implemented. -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_RectPicker.cxx b/src/VTKViewer/VTKViewer_RectPicker.cxx deleted file mode 100755 index d8f883b7a..000000000 --- a/src/VTKViewer/VTKViewer_RectPicker.cxx +++ /dev/null @@ -1,893 +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; - 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 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 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_RenderWindow.cxx b/src/VTKViewer/VTKViewer_RenderWindow.cxx deleted file mode 100755 index 82bcf80ec..000000000 --- a/src/VTKViewer/VTKViewer_RenderWindow.cxx +++ /dev/null @@ -1,162 +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 "VTKViewer_RenderWindow.h" - -#include -#include - -#include -#include - -#include -#include -#include -#ifndef WNT -#include -//#include -//#include -//#include -#endif - -#if QT_VERSION > 300 -#include -#endif - -/*!Constructor. Create render window with parant \a parent and name \a name. - *\param parent - parent window - *\param name - render window name. - */ -VTKViewer_RenderWindow::VTKViewer_RenderWindow(QWidget* parent, const char* name) : -QWidget(parent, name, - Qt::WStyle_NoBorder | Qt::WDestructiveClose | - Qt::WResizeNoErase | Qt::WRepaintNoErase) -{ - myRW = vtkRenderWindow::New(); -#ifndef WNT - myRW->SetDisplayId((void*)x11Display()); -#endif - myRW->SetWindowId((void*)winId()); - myRW->DoubleBufferOn(); - setMouseTracking(true); -} - -/*!Destructor.*/ -VTKViewer_RenderWindow::~VTKViewer_RenderWindow() -{ - myRW->Delete(); -} - -/*!Call Render method for render window field.*/ -void VTKViewer_RenderWindow::paintEvent(QPaintEvent* theEvent) -{ - myRW->Render(); -} - -/*!Resize render window.*/ -void VTKViewer_RenderWindow::resizeEvent(QResizeEvent* theEvent) -{ - int aWidth = myRW->GetSize()[0], aHeight = myRW->GetSize()[1]; - if(vtkRenderWindowInteractor* aRWI = myRW->GetInteractor()) - aRWI->UpdateSize(width(), height()); - if(aWidth != width() || aHeight != height()){ - vtkRendererCollection * aRenderers = myRW->GetRenderers(); - aRenderers->InitTraversal(); - double aCoeff = 1.0; - if(vtkRenderer *aRenderer = aRenderers->GetNextItem()){ - vtkCamera *aCamera = aRenderer->GetActiveCamera(); - double aScale = aCamera->GetParallelScale(); - if((aWidth - width())*(aHeight - height()) > 0) - aCoeff = sqrt(double(aWidth)/double(width())*double(height())/double(aHeight)); - else - aCoeff = double(aWidth)/double(width()); - aCamera->SetParallelScale(aScale*aCoeff); - } - } -} - -/*!Emit mouse move event.*/ -void VTKViewer_RenderWindow::mouseMoveEvent(QMouseEvent* event) -{ - emit MouseMove(event) ; -} - -/*!Emit mouse button press event.*/ -void VTKViewer_RenderWindow::mousePressEvent(QMouseEvent* event) -{ - emit MouseButtonPressed( event ); -} - -/*!Emit mouse button release event.*/ -void VTKViewer_RenderWindow::mouseReleaseEvent( QMouseEvent *event ) -{ - emit MouseButtonReleased( event ); -} - -/*!Emit mouse button double click event.*/ -void VTKViewer_RenderWindow::mouseDoubleClickEvent( QMouseEvent* event ) -{ - emit MouseDoubleClicked( event ); -} - -/*!Emit key pressed event.*/ -void VTKViewer_RenderWindow::keyPressEvent (QKeyEvent* event) -{ - emit KeyPressed(event) ; -} - -/*!Emit key release event.*/ -void VTKViewer_RenderWindow::keyReleaseEvent (QKeyEvent * event) -{ - emit KeyReleased(event) ; -} - -/*!Emit wheel move event.*/ -void VTKViewer_RenderWindow::wheelEvent(QWheelEvent* event) -{ - emit WheelMoved(event) ; -} - -/*!Reaction on change background color.*/ -void VTKViewer_RenderWindow::onChangeBackgroundColor() -{ - //float red, green, blue; - vtkFloatingPointType backint[3]; - - vtkRendererCollection * theRenderers = myRW->GetRenderers(); - theRenderers->InitTraversal(); - vtkRenderer * theRenderer = theRenderers->GetNextItem(); - theRenderer->GetBackground(backint); - - QColor selColor = QColorDialog::getColor ( QColor(int(backint[0]*255), int(backint[1]*255), int(backint[2]*255)), NULL ); - if ( selColor.isValid() ) { - theRenderer->SetBackground( selColor.red()/255., selColor.green()/255., selColor.blue()/255. ); - /* VSR : PAL5420 --------------------------------------------------- - SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorRed", selColor.red() ); - SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorGreen", selColor.green() ); - SUIT_CONFIG->addSetting( "VTKViewer:BackgroundColorBlue", selColor.blue() ); - VSR : PAL5420 --------------------------------------------------- */ - } -} - -/*!Emit content menu requested.*/ -void VTKViewer_RenderWindow::contextMenuEvent ( QContextMenuEvent * e ) -{ - if ( e->reason() != QContextMenuEvent::Mouse ) - emit contextMenuRequested( e ); -} diff --git a/src/VTKViewer/VTKViewer_RenderWindow.h b/src/VTKViewer/VTKViewer_RenderWindow.h deleted file mode 100755 index e85b1c549..000000000 --- a/src/VTKViewer/VTKViewer_RenderWindow.h +++ /dev/null @@ -1,97 +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 -// -#ifndef VTKVIEWER_RENDERWINDOW_H -#define VTKVIEWER_RENDERWINDOW_H - -#include "VTKViewer.h" - -#include - -#include - -class VTKVIEWER_EXPORT VTKViewer_RenderWindow : public QWidget -{ - Q_OBJECT - -public: - /* popup management */ - //void onCreatePopup(); - -// const char *GetClassName() {return "VTKViewer_RenderWindow";}; - -public: - VTKViewer_RenderWindow(QWidget *parent, const char *name); - virtual ~VTKViewer_RenderWindow() ; - - /*!Get render window pointer.*/ - vtkRenderWindow* getRenderWindow() { return myRW; } - - protected: - virtual void mouseMoveEvent( QMouseEvent* ); - virtual void mousePressEvent( QMouseEvent* ); - virtual void mouseReleaseEvent( QMouseEvent* ); - virtual void mouseDoubleClickEvent( QMouseEvent* ); - virtual void wheelEvent( QWheelEvent* ); - virtual void keyPressEvent( QKeyEvent* ); - virtual void keyReleaseEvent( QKeyEvent* ); - virtual void paintEvent( QPaintEvent* ); - virtual void resizeEvent( QResizeEvent* ); - virtual void onChangeBackgroundColor(); - virtual void contextMenuEvent( QContextMenuEvent * e ); - - signals: - /*!On mouse move signal.*/ - void MouseMove( QMouseEvent* ); - /*!On mouse button pressed signal.*/ - void MouseButtonPressed( QMouseEvent* ); - /*!On mouse button released signal.*/ - void MouseButtonReleased( QMouseEvent* ); - /*!On mouse double click signal.*/ - void MouseDoubleClicked( QMouseEvent* ); - /*!On wheel moved signal.*/ - void WheelMoved( QWheelEvent* ); - /*!On left button pressed signal.*/ - void LeftButtonPressed(const QMouseEvent *event) ; - /*!On left button released signal.*/ - void LeftButtonReleased(const QMouseEvent *event) ; - /*!On middle button pressed signal.*/ - void MiddleButtonPressed(const QMouseEvent *event) ; - /*!On middle button released signal.*/ - void MiddleButtonReleased(const QMouseEvent *event) ; - /*!On right button pressed signal.*/ - void RightButtonPressed(const QMouseEvent *event) ; - /*!On right button released signal.*/ - void RightButtonReleased(const QMouseEvent *event) ; - - /*!On button pressed signal.*/ - void ButtonPressed(const QMouseEvent *event); - /*!On button released signal.*/ - void ButtonReleased(const QMouseEvent *event); - /*!On key pressed signal.*/ - void KeyPressed( QKeyEvent* ); - /*!On key released signal.*/ - void KeyReleased( QKeyEvent* ); - /*!On content menu requested signal.*/ - void contextMenuRequested( QContextMenuEvent *e ); - - protected: - vtkRenderWindow* myRW; -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx b/src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx deleted file mode 100755 index 9445c5b15..000000000 --- a/src/VTKViewer/VTKViewer_RenderWindowInteractor.cxx +++ /dev/null @@ -1,685 +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 "VTKViewer_RenderWindowInteractor.h" -#include "VTKViewer_RenderWindow.h" -#include "VTKViewer_InteractorStyle.h" -#include "SUIT_ViewModel.h" -#include "VTKViewer_ViewWindow.h" - -//#include "SUIT_Application.h" -//#include "SUIT_Desktop.h" - -//#include "SALOME_Selection.h" -#include "VTKViewer_Actor.h" -#include "VTKViewer_Algorithm.h" -#include "VTKViewer_Functor.h" - -//#include -//#include -//#include -//#include - -// VTK Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// QT Includes -#include - -/*! Create new instance of VTKViewer_RenderWindowInteractor*/ -VTKViewer_RenderWindowInteractor* VTKViewer_RenderWindowInteractor::New() -{ - vtkObject *ret = vtkObjectFactory::CreateInstance("VTKViewer_RenderWindowInteractor") ; - if( ret ) { - return dynamic_cast(ret) ; - } - return new VTKViewer_RenderWindowInteractor; -} - -/*!Constructor.*/ -VTKViewer_RenderWindowInteractor::VTKViewer_RenderWindowInteractor() -{ - this->Enabled = 0 ; - this->mTimer = new QTimer( this ) ; - myDisplayMode = 0; - - myBasicPicker = vtkPicker::New(); - myCellPicker = vtkCellPicker::New(); - myPointPicker = vtkPointPicker::New(); - - myCellActor = VTKViewer_Actor::New(); - myCellActor->PickableOff(); - myCellActor->GetProperty()->SetColor(1,1,0); - myCellActor->GetProperty()->SetLineWidth(5); - myCellActor->GetProperty()->SetRepresentationToSurface(); - - myEdgeActor = VTKViewer_Actor::New(); - myEdgeActor->PickableOff(); - myEdgeActor->GetProperty()->SetColor(1,0,0); - myEdgeActor->GetProperty()->SetLineWidth(5); - myEdgeActor->GetProperty()->SetRepresentationToWireframe(); - - myPointActor = VTKViewer_Actor::New(); - myPointActor->PickableOff(); - myPointActor->GetProperty()->SetColor(1,1,0); - myPointActor->GetProperty()->SetPointSize(5); - myPointActor->GetProperty()->SetRepresentationToPoints(); - - connect(mTimer, SIGNAL(timeout()), this, SLOT(TimerFunc())) ; -} - -/*!Destructor.*/ -VTKViewer_RenderWindowInteractor::~VTKViewer_RenderWindowInteractor() -{ - delete mTimer ; - - if ( GetRenderWindow() ) { - myViewWnd->RemoveActor(myCellActor); - myViewWnd->RemoveActor(myEdgeActor); - myViewWnd->RemoveActor(myPointActor); - } - - myCellActor->Delete(); - myEdgeActor->Delete(); - myPointActor->Delete(); - - myBasicPicker->Delete(); - myCellPicker->Delete(); - myPointPicker->Delete(); -} - -/*! - Print interactor to stream - \param os - stream - \param indent -*/ -void VTKViewer_RenderWindowInteractor::PrintSelf(ostream& os, vtkIndent indent) -{ - vtkRenderWindowInteractor::PrintSelf(os, indent) ; - // - // :NOTE: Fri Apr 21 21:51:05 2000 Pagey - // QGL specific stuff goes here. One should add output - // lines here if any protected members are added to - // the class. - // -} - -/*!Description:\n - * Initializes the event handlers without an XtAppContext. This is \n - * good for when you don`t have a user interface, but you still \n - * want to have mouse interaction.\n - * We never allow the VTKViewer_RenderWindowInteractor to control \n - * the event loop. The application always has the control. - */ -void VTKViewer_RenderWindowInteractor::Initialize() -{ - // - // We cannot do much unless there is a render window - // associated with this interactor. - // - if( ! RenderWindow ) { - vtkErrorMacro(<< "VTKViewer_RenderWindowInteractor::Initialize(): No render window attached!") ; - return ; - } - - // - // We cannot hand a render window which is not a VTKViewer_RenderWindow. - // One way to force this is to use dynamic_cast and hope that - // it works. If the dynamic_cast does not work, we flag an error - // and get the hell out. - // - vtkRenderWindow *my_render_win = dynamic_cast(RenderWindow) ; - if( !my_render_win ) { - vtkErrorMacro(<< "VTKViewer_RenderWindowInteractor::Initialize() can only handle VTKViewer_RenderWindow.") ; - return ; - } - - // - // If the render window has zero size, then set it to a default - // value of 300x300. - // - int* aSize = my_render_win->GetSize(); - this->Size[0] = ((aSize[0] > 0) ? aSize[0] : 300); - this->Size[1] = ((aSize[1] > 0) ? aSize[1] : 300); - - this->SetPicker(myBasicPicker); - - SetSelectionTolerance(); - - // - // Enable the interactor. - // - this->Enable() ; - - // - // Start the rendering of the window. - // - my_render_win->Start() ; - - // - // The interactor has been initialized. - // - this->Initialized = 1 ; - - return ; -} - -/*!Sets view window and add to it selection actors.*/ -void VTKViewer_RenderWindowInteractor::setViewWindow(VTKViewer_ViewWindow* theViewWnd){ - myViewWnd = theViewWnd; - - if ( myViewWnd ) { - myViewWnd->InsertActor(myCellActor); - myViewWnd->InsertActor(myEdgeActor); - myViewWnd->InsertActor(myPointActor); - } -} - -/*!Move selection actors to view window.*/ -void VTKViewer_RenderWindowInteractor::MoveInternalActors() -{ - myViewWnd->MoveActor(myCellActor); - myViewWnd->MoveActor(myEdgeActor); - myViewWnd->MoveActor(myPointActor); -} - -/*!Sets interactor style.*/ -void VTKViewer_RenderWindowInteractor::SetInteractorStyle(vtkInteractorObserver *theInteractor){ - myInteractorStyle = dynamic_cast(theInteractor); - vtkRenderWindowInteractor::SetInteractorStyle(theInteractor); -} - -/*!Sets selection properties. - *\param theRed - red component of color - *\param theGreen - green component of color - *\param theBlue - blue component of color - *\param theWidth - point size and line width - */ -void VTKViewer_RenderWindowInteractor::SetSelectionProp(const double& theRed, const double& theGreen, - const double& theBlue, const int& theWidth) -{ - myCellActor->GetProperty()->SetColor(theRed, theGreen, theBlue); - myCellActor->GetProperty()->SetLineWidth(theWidth); - - myPointActor->GetProperty()->SetColor(theRed, theGreen, theBlue); - myPointActor->GetProperty()->SetPointSize(theWidth); -} - -/*!Sets selection tolerance - *\param theTolNodes - nodes selection tolerance - *\param theTolItems - selection tolerance for basic and cell pickers. - */ -void VTKViewer_RenderWindowInteractor::SetSelectionTolerance(const double& theTolNodes, const double& theTolItems) -{ - myTolNodes = theTolNodes; - myTolItems = theTolItems; - - myBasicPicker->SetTolerance(myTolItems); - myCellPicker->SetTolerance(myTolItems); - myPointPicker->SetTolerance(myTolNodes); - -} - -/*! Description:\n - * Enable/Disable interactions. By default interactors are enabled when \n - * initialized. Initialize() must be called prior to enabling/disabling \n - * interaction. These methods are used when a window/widget is being \n - * shared by multiple renderers and interactors. This allows a "modal" \n - * display where one interactor is active when its data is to be displayed \n - * and all other interactors associated with the widget are disabled \n - * when their data is not displayed. - */ -void VTKViewer_RenderWindowInteractor::Enable() -{ - // - // Do not need to do anything if already enabled. - // - if( this->Enabled ) { - return ; - } - - this->Enabled = 1 ; - this->Modified() ; -} - -/*!See Enable().*/ -void VTKViewer_RenderWindowInteractor::Disable() -{ - if( ! this->Enabled ) { - return ; - } - - this->Enabled = 0 ; - this->Modified() ; -} - -/*!Description:\n - * This will start up the X event loop and never return. If you \n - * call this method it will loop processing X events until the \n - * application is exited. - */ -void VTKViewer_RenderWindowInteractor::Start() -{ - // - // We do not allow this interactor to control the - // event loop. Only the QtApplication objects are - // allowed to do that. - // - vtkErrorMacro(<<"VTKViewer_RenderWindowInteractor::Start() not allowed to start event loop.") ; -} - -/*! Description:\n - * Event loop notification member for Window size change - */ -void VTKViewer_RenderWindowInteractor::UpdateSize(int w, int h) -{ - // if the size changed send this on to the RenderWindow - if ((w != this->Size[0])||(h != this->Size[1])) { - this->Size[0] = w; - this->Size[1] = h; - this->RenderWindow->SetSize(w,h); - } -} - -/*! Description: - * Timer methods must be overridden by platform dependent subclasses. - * flag is passed to indicate if this is first timer set or an update - * as Win32 uses repeating timers, whereas X uses One shot more timer - * if flag == VTKXI_TIMER_FIRST Win32 and X should createtimer - * otherwise Win32 should exit and X should perform AddTimeOut - * \retval 1 - */ -int VTKViewer_RenderWindowInteractor::CreateTimer(int vtkNotUsed(timertype)) -{ - /// - /// Start a one-shot timer for 10ms. - /// - mTimer->start(10, TRUE) ; - return 1 ; -} - -/*! - \sa CreateTimer(int ) - \retval 1 - */ -int VTKViewer_RenderWindowInteractor::DestroyTimer(void) -{ - // - // :TRICKY: Tue May 2 00:17:32 2000 Pagey - // - /*! QTimer will automatically expire after 10ms. So - * we do not need to do anything here. In fact, we - * should not even Stop() the QTimer here because doing - * this will skip some of the processing that the TimerFunc() - * does and will result in undesirable effects. For - * example, this will result in vtkLODActor to leave - * the models in low-res mode after the mouse stops - * moving. - */ - return 1 ; -} - -/*! Not all of these slots are needed in VTK_MAJOR_VERSION=3,\n - * but moc does not understand "#if VTK_MAJOR_VERSION". Hence, \n - * we have to include all of these for the time being. Once,\n - * this bug in MOC is fixed, we can separate these. - */ -void VTKViewer_RenderWindowInteractor::TimerFunc() -{ - if( ! this->Enabled ) { - return ; - } - - ((vtkInteractorStyle*)this->InteractorStyle)->OnTimer() ; - emit RenderWindowModified() ; -} - -/*!Emit render window modified on mouse move,\n - *if interactor style needs redrawing and render window enabled.*/ -void VTKViewer_RenderWindowInteractor::MouseMove(QMouseEvent *event) { - if( ! this->Enabled ) { - return ; - } - myInteractorStyle->OnMouseMove(0, 0, event->x(), event->y()/*this->Size[1] - event->y() - 1*/) ; - if (myInteractorStyle->needsRedrawing() ) - emit RenderWindowModified() ; -} - -/*!Reaction on left button pressed.\n - *Same as left button down for interactor style.\n - *If render window enabled. - */ -void VTKViewer_RenderWindowInteractor::LeftButtonPressed(const QMouseEvent *event) { - if( ! this->Enabled ) { - return ; - } - myInteractorStyle->OnLeftButtonDown((event->state() & ControlButton), - (event->state() & ShiftButton), - event->x(), event->y()); -} - -/*!Reaction on left button releases.\n - *Same as left button up for interactor style.\n - *If render window enabled. - */ -void VTKViewer_RenderWindowInteractor::LeftButtonReleased(const QMouseEvent *event) { - if( ! this->Enabled ) { - return ; - } - myInteractorStyle->OnLeftButtonUp( (event->state() & ControlButton), - (event->state() & ShiftButton), - event->x(), event->y() ) ; -} - -/*!Reaction on middle button pressed.\n - *Same as middle button down for interactor style.\n - *If render window enabled. - */ -void VTKViewer_RenderWindowInteractor::MiddleButtonPressed(const QMouseEvent *event) { - if( ! this->Enabled ) { - return ; - } - myInteractorStyle->OnMiddleButtonDown((event->state() & ControlButton), - (event->state() & ShiftButton), - event->x(), event->y() ) ; -} - -/*!Reaction on middle button released.\n - *Same as middle button up for interactor style.\n - *If render window enabled. - */ -void VTKViewer_RenderWindowInteractor::MiddleButtonReleased(const QMouseEvent *event) { - if( ! this->Enabled ) { - return ; - } - myInteractorStyle->OnMiddleButtonUp( (event->state() & ControlButton), - (event->state() & ShiftButton), - event->x(), event->y() ) ; -} - -/*!Reaction on right button pressed.\n - *Same as right button down for interactor style.\n - *If render window enabled. - */ -void VTKViewer_RenderWindowInteractor::RightButtonPressed(const QMouseEvent *event) { - if( ! this->Enabled ) { - return ; - } - myInteractorStyle->OnRightButtonDown( (event->state() & ControlButton), - (event->state() & ShiftButton), - event->x(), event->y() ) ; -} - -/*!Reaction on right button released.\n - *Same as right button up for interactor style.If render window enabled.\n - *Emit context menu requested, if interactor style state equal VTK_INTERACTOR_STYLE_CAMERA_NONE. - */ -void VTKViewer_RenderWindowInteractor::RightButtonReleased(const QMouseEvent *event) { - if( ! this->Enabled ) { - return ; - } - bool isOperation = myInteractorStyle->CurrentState() != VTK_INTERACTOR_STYLE_CAMERA_NONE; - myInteractorStyle->OnRightButtonUp( (event->state() & ControlButton), - (event->state() & ShiftButton), - event->x(), event->y() ); - if ( !isOperation ) - { - QContextMenuEvent aEvent( QContextMenuEvent::Mouse, - event->pos(), event->globalPos(), - event->state() ); - emit contextMenuRequested( &aEvent ); - } -} - -/*!Reaction on button pressed. - *\warning Do nothing. - */ -void VTKViewer_RenderWindowInteractor::ButtonPressed(const QMouseEvent *event) { - return ; -} - -/*!Reaction on button released.. - *\warning Do nothing. - */ -void VTKViewer_RenderWindowInteractor::ButtonReleased(const QMouseEvent *event) { - return ; -} - -/*!Gets display mode.*/ -int VTKViewer_RenderWindowInteractor::GetDisplayMode() { - return myDisplayMode; -} - -/*!Sets display mode.*/ -void VTKViewer_RenderWindowInteractor::SetDisplayMode(int theMode) { - if(theMode == 0) - ChangeRepresentationToWireframe(); - else - ChangeRepresentationToSurface(); - myDisplayMode = theMode; -} - -/*!Change all actors to wireframe*/ -void VTKViewer_RenderWindowInteractor::ChangeRepresentationToWireframe() -{ - ChangeRepresentationToWireframe(GetRenderer()->GetActors()); -} - -/*!Change all actors to surface*/ -void VTKViewer_RenderWindowInteractor::ChangeRepresentationToSurface() -{ - ChangeRepresentationToSurface(GetRenderer()->GetActors()); -} - -/*!Change all actors from \a theCollection to wireframe and - * emit render window modified. - */ -void VTKViewer_RenderWindowInteractor::ChangeRepresentationToWireframe(vtkActorCollection* theCollection) -{ - using namespace VTK; - ForEach(theCollection, - TSetFunction - (&VTKViewer_Actor::setDisplayMode,0)); - emit RenderWindowModified(); -} - -/*!Change all actors from \a theCollection to surface and - * emit render window modified. - */ -void VTKViewer_RenderWindowInteractor::ChangeRepresentationToSurface(vtkActorCollection* theCollection) -{ - using namespace VTK; - ForEach(theCollection, - TSetFunction - (&VTKViewer_Actor::setDisplayMode,1)); - emit RenderWindowModified(); -} - -/*!Gets renderer.*/ -vtkRenderer* VTKViewer_RenderWindowInteractor::GetRenderer() -{ - vtkRendererCollection * theRenderers = this->RenderWindow->GetRenderers(); - theRenderers->InitTraversal(); - return theRenderers->GetNextItem(); -} - -/*!Do nothing*/ -void VTKViewer_RenderWindowInteractor::EraseAll() -{ -} - -/*!Display all actors. - *Sets visible for all actors from renderer collection and emit render window modified. - */ -void VTKViewer_RenderWindowInteractor::DisplayAll() -{ - using namespace VTK; - vtkActorCollection* aCollection = GetRenderer()->GetActors(); - ForEach(aCollection,TSetVisibility(true)); - - emit RenderWindowModified() ; -} - -/*!Do nothing*/ -void VTKViewer_RenderWindowInteractor::Erase( VTKViewer_Actor* SActor, bool update) -{ -} - -/*!Remove \a SActor from renderer and emit update window, if \a updateViewer - true*/ -void VTKViewer_RenderWindowInteractor::Remove( VTKViewer_Actor* SActor, bool updateViewer ) -{ - if ( SActor != 0 ) - { - GetRenderer()->RemoveProp( SActor ); - if ( updateViewer ) - emit RenderWindowModified(); - } -} - -/*!Remove actors from render window collection(not implemented). - *Emit render window modified, if \a updateViewer - true. - */ -void VTKViewer_RenderWindowInteractor::RemoveAll( const bool updateViewer ) -{ - vtkRenderer* aRenderer = GetRenderer(); - vtkActorCollection* anActors = aRenderer->GetActors(); - if ( anActors ) - { - anActors->InitTraversal(); - while ( vtkActor *anAct = anActors->GetNextActor() ) - { - if ( anAct->IsA( "VTKViewer_Actor" ) ) - { - } - } - - if ( updateViewer ) - emit RenderWindowModified(); - } -} - -/*!\brief Display the \a theActor.*/ -/*! Add actor to renderer and set visibility to true. - * Emit render window modified, if \a update - true. - */ -void VTKViewer_RenderWindowInteractor::Display( VTKViewer_Actor* theActor, bool update) -{ - GetRenderer()->AddActor(theActor); - theActor->SetVisibility(true); - - if(update) - emit RenderWindowModified(); -} - -/*! - default key press event (empty implementation) -*/ -void VTKViewer_RenderWindowInteractor::KeyPressed(QKeyEvent *event) -{ - /// NOT_IMPLEMENTED -} - -/*!Structure with one function "operator()", which call apply properties for actor.*/ -struct TUpdateAction{ - /*!Apply properties for \a theActor.*/ - void operator()(vtkActor* theActor){ - theActor->ApplyProperties(); - } -}; - -/*!Update all actors from renderer and emit render window modified.*/ -void VTKViewer_RenderWindowInteractor::Update() { - using namespace VTK; - vtkRenderer* aRen = GetRenderer(); - ForEach(aRen->GetActors(),TUpdateAction()); - - aRen->ResetCamera(); - - emit RenderWindowModified(); -} - -/*!Unhighlight all selection actors.*/ -void VTKViewer_RenderWindowInteractor::unHighlightSubSelection(){ - myPointActor->SetVisibility(false); - myEdgeActor->SetVisibility(false); - myCellActor->SetVisibility(false); -} - -/*!@see unHighlightSubSelection() - * Also emit render window modified. - */ -bool VTKViewer_RenderWindowInteractor::unHighlightAll(){ - unHighlightSubSelection(); - - emit RenderWindowModified() ; - return false; -} - - -/*! \li Sets actors data and sets visibility to true, if flag \a hilight - true, - * else sets visibility to false. - * \li Emit render window modified, if flag \a update - true. - */ -bool VTKViewer_RenderWindowInteractor::highlight(const TColStd_IndexedMapOfInteger& theMapIndex, - VTKViewer_Actor* theMapActor, VTKViewer_Actor* theActor, - TUpdateActor theFun, bool hilight, bool update) -{ - if(theMapIndex.Extent() == 0) return false; - - if (hilight) { - setActorData(theMapIndex,theMapActor,theActor,theFun); - theActor->SetVisibility(true); - } - else { - theActor->SetVisibility(false); - } - - if(update){ - this->RenderWindow->Render(); - emit RenderWindowModified() ; - } - - return false; -} - -/*!Sets actors data.*/ -void VTKViewer_RenderWindowInteractor::setActorData(const TColStd_IndexedMapOfInteger& theMapIndex, - VTKViewer_Actor * theMapActor, - VTKViewer_Actor * theActor, - TUpdateActor theFun) -{ - (*theFun)(theMapIndex,theMapActor,theActor); - vtkFloatingPointType aPos[3]; - theMapActor->GetPosition(aPos); - theActor->SetPosition(aPos); -} diff --git a/src/VTKViewer/VTKViewer_RenderWindowInteractor.h b/src/VTKViewer/VTKViewer_RenderWindowInteractor.h deleted file mode 100755 index 435e5b4b8..000000000 --- a/src/VTKViewer/VTKViewer_RenderWindowInteractor.h +++ /dev/null @@ -1,234 +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 -// -#ifndef VTKVIEWER_RENDERWINDOWINTERACTOR_H -#define VTKVIEWER_RENDERWINDOWINTERACTOR_H - -#include "VTKViewer.h" -#include "VTKViewer_Actor.h" - -#include -#include - -// Open CASCADE Includes -#include -#include -#include - -class vtkPicker; -class vtkCellPicker; -class vtkPointPicker; -class vtkActorCollection; - -class VTKViewer_Actor; -class VTKViewer_ViewWindow; -class VTKViewer_RenderWindow; -class VTKViewer_InteractorStyle; - -#include "VTKViewer_Algorithm.h" - -#include -#include -#include - -class VTKVIEWER_EXPORT VTKViewer_RenderWindowInteractor : public QObject, public vtkRenderWindowInteractor -{ - Q_OBJECT - -public: - static VTKViewer_RenderWindowInteractor *New(); - - vtkTypeMacro(VTKViewer_RenderWindowInteractor,vtkRenderWindowInteractor); - - void PrintSelf(ostream& os, vtkIndent indent); - - virtual void Initialize(); - - virtual void SetInteractorStyle(vtkInteractorObserver *); - /*!Return interactor style pointer.*/ - VTKViewer_InteractorStyle* GetInteractorStyle() const - { - return myInteractorStyle; - } - - virtual void Start(); - - virtual void Enable(); - virtual void Disable(); - - virtual void UpdateSize(int x,int y); - - /** @name Timer options*/ - //@{ - virtual int CreateTimer(int ) ; - virtual int DestroyTimer() ; - //@} - - /*! Description:\n - * This function is called on 'q','e' keypress if exitmethod is not\n - * specified and should be overidden by platform dependent subclasses\n - * to provide a termination procedure if one is required. - */ - virtual void TerminateApp(void) { /* empty */ } - - // Description: - // These methods correspond to the the Exit, User and Pick - // callbacks. They allow for the Style to invoke them. - //virtual void ExitCallback(); - //virtual void UserCallback(); - //virtual void StartPickCallback(); - //virtual void EndPickCallback(); - - /** @name Selection Management */ - //@{ - bool highlightCell(const TColStd_IndexedMapOfInteger& MapIndex, - VTKViewer_Actor* theMapActor, - bool hilight, - bool update = true ); - bool highlightEdge(const TColStd_IndexedMapOfInteger& MapIndex, - VTKViewer_Actor* theMapActor, - bool hilight, - bool update = true ); - bool highlightPoint(const TColStd_IndexedMapOfInteger& MapIndex, - VTKViewer_Actor* theMapActor, - bool hilight, - bool update = true ); - - void unHighlightSubSelection(); - bool unHighlightAll(); - - //void SetSelectionMode(Selection_Mode mode); - void SetSelectionProp(const double& theRed = 1, const double& theGreen = 1, - const double& theBlue = 0, const int& theWidth = 5); - void SetSelectionTolerance(const double& theTolNodes = 0.025, const double& theTolCell = 0.001); - //@} - - /** @name Displaymode management*/ - //@{ - int GetDisplayMode(); - void SetDisplayMode(int); - //@} - - /** @name Change all actors to wireframe or surface*/ - //@{ - void ChangeRepresentationToWireframe(); - void ChangeRepresentationToSurface(); - //@} - - /** @name Change to wireframe or surface a list of vtkactor*/ - //@{ - void ChangeRepresentationToWireframe(vtkActorCollection* ListofActors); - void ChangeRepresentationToSurface(vtkActorCollection* ListofActors); - //@} - - /** @name Erase Display functions*/ - //@{ - void EraseAll(); - void DisplayAll(); - void RemoveAll( const bool immediatly ); - - void Display( VTKViewer_Actor* SActor, bool immediatly = true ); - void Erase( VTKViewer_Actor* SActor, bool immediatly = true ); - void Remove( VTKViewer_Actor* SActor, bool updateViewer = true ); - //@} - - void Update(); - - vtkRenderer* GetRenderer(); - - void setViewWindow( VTKViewer_ViewWindow* theViewWnd ); - - void setCellData(const int& theIndex, - VTKViewer_Actor* theMapActor, - VTKViewer_Actor* theActor) {} - void setEdgeData(const int& theCellIndex, - VTKViewer_Actor* theMapActor, - const int& theEdgeIndex, - VTKViewer_Actor* theActor ) {} //NB - void setPointData(const int& theIndex, - VTKViewer_Actor* theMapActor, - VTKViewer_Actor* theActor) {} - - typedef void (*TUpdateActor)(const TColStd_IndexedMapOfInteger& theMapIndex, - VTKViewer_Actor* theMapActor, - VTKViewer_Actor* theActor); - protected: - - VTKViewer_RenderWindowInteractor(); - ~VTKViewer_RenderWindowInteractor(); - - VTKViewer_InteractorStyle* myInteractorStyle; - - bool highlight(const TColStd_IndexedMapOfInteger& theMapIndex, - VTKViewer_Actor* theMapActor, VTKViewer_Actor* theActor, - TUpdateActor theFun, bool hilight, bool update); - void setActorData(const TColStd_IndexedMapOfInteger& theMapIndex, - VTKViewer_Actor* theMapActor, - VTKViewer_Actor *theActor, - TUpdateActor theFun); - - /*! Timer used during various mouse events to figure - * out mouse movements. - */ - QTimer *mTimer ; - - int myDisplayMode; - - //NRI: Selection mode - VTKViewer_Actor* myPointActor; - VTKViewer_Actor* myEdgeActor; - VTKViewer_Actor* myCellActor; - void MoveInternalActors(); - - vtkPicker* myBasicPicker; - vtkCellPicker* myCellPicker; - vtkPointPicker* myPointPicker; - - /*! User for switching to stereo mode.*/ - int PositionBeforeStereo[2]; - - public slots: - void MouseMove(QMouseEvent *event) ; - void LeftButtonPressed(const QMouseEvent *event) ; - void LeftButtonReleased(const QMouseEvent *event) ; - void MiddleButtonPressed(const QMouseEvent *event) ; - void MiddleButtonReleased(const QMouseEvent *event) ; - void RightButtonPressed(const QMouseEvent *event) ; - void RightButtonReleased(const QMouseEvent *event) ; - void ButtonPressed(const QMouseEvent *event) ; - void ButtonReleased(const QMouseEvent *event) ; - void KeyPressed(QKeyEvent *event) ; - - private slots: - void TimerFunc() ; - -signals: - void RenderWindowModified() ; - void contextMenuRequested( QContextMenuEvent *e ); - -private: - friend class VTKViewer_ViewWindow; - - VTKViewer_ViewWindow* myViewWnd; - /** Selection node tolerance.*/ - double myTolNodes; - /** Selection cell tolerance.*/ - double myTolItems; -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_ShrinkFilter.cxx b/src/VTKViewer/VTKViewer_ShrinkFilter.cxx deleted file mode 100755 index b4a7fb6a2..000000000 --- a/src/VTKViewer/VTKViewer_ShrinkFilter.cxx +++ /dev/null @@ -1,174 +0,0 @@ -// SALOME OBJECT : kernel of SALOME component -// -// 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 : SALOME_GeometryFilter.cxx -// Author : Michael ZORIN -// Module : SALOME -// $Header$ - -#include "VTKViewer_ShrinkFilter.h" - -#include -#include -#include -#include -#include -#include - -vtkCxxRevisionMacro(VTKViewer_ShrinkFilter, "$Revision$"); -vtkStandardNewMacro(VTKViewer_ShrinkFilter); - -/*!Constructor. Sets store mapping to zero.*/ -VTKViewer_ShrinkFilter::VTKViewer_ShrinkFilter(): - myStoreMapping(0) -{} - -/*!Destructor.*/ -VTKViewer_ShrinkFilter::~VTKViewer_ShrinkFilter() -{} - - -/*!Execute method. Calculate output.*/ -void VTKViewer_ShrinkFilter::Execute() -{ - vtkPoints *newPts; - int i, j, numIds, abort=0; - vtkIdType cellId, numCells, numPts; - vtkIdType oldId, newId; - vtkFloatingPointType center[3], *p, pt[3]; - vtkPointData *pd, *outPD;; - vtkIdList *ptIds, *newPtIds; - vtkDataSet *input= this->GetInput(); - vtkUnstructuredGrid *output = this->GetOutput(); - vtkIdType tenth; - vtkFloatingPointType decimal; - - vtkDebugMacro(<<"Shrinking cells"); - - numCells=input->GetNumberOfCells(); - numPts = input->GetNumberOfPoints(); - if (numCells < 1 || numPts < 1) - { - vtkErrorMacro(<<"No data to shrink!"); - return; - } - - ptIds = vtkIdList::New(); - ptIds->Allocate(VTK_CELL_SIZE); - newPtIds = vtkIdList::New(); - newPtIds->Allocate(VTK_CELL_SIZE); - - output->Allocate(numCells); - newPts = vtkPoints::New(); - newPts->Allocate(numPts*8,numPts); - pd = input->GetPointData(); - outPD = output->GetPointData(); - outPD->CopyAllocate(pd,numPts*8,numPts); - - // Traverse all cells, obtaining node coordinates. Compute "center" of cell, - // then create new vertices shrunk towards center. - // - tenth = numCells/10 + 1; - decimal = 0.0; - if(myStoreMapping){ - myVTK2ObjIds.clear(); - myVTK2ObjIds.reserve(numCells); - } - - for (cellId=0; cellId < numCells && !abort; cellId++) - { - input->GetCellPoints(cellId, ptIds); - numIds = ptIds->GetNumberOfIds(); - - //abort/progress methods - if (cellId % tenth == 0) - { - decimal += 0.1; - this->UpdateProgress (decimal); - abort = this->GetAbortExecute(); - } - - // get the center of the cell - center[0] = center[1] = center[2] = 0.0; - for (i=0; i < numIds; i++) - { - p = input->GetPoint(ptIds->GetId(i)); - for (j=0; j < 3; j++) - { - center[j] += p[j]; - } - } - for (j=0; j<3; j++) - { - center[j] /= numIds; - } - - // Create new points and cells - newPtIds->Reset(); - for (i=0; i < numIds; i++) - { - p = input->GetPoint(ptIds->GetId(i)); - for (j=0; j < 3; j++) - { - pt[j] = center[j] + this->ShrinkFactor*(p[j] - center[j]); - } - - oldId = ptIds->GetId(i); - newId = newPts->InsertNextPoint(pt); - if(myStoreMapping) - myVTK2ObjIds.push_back(oldId); - newPtIds->InsertId(i,newId); - - outPD->CopyData(pd, oldId, newId); - } - output->InsertNextCell(input->GetCellType(cellId), newPtIds); - }//for all cells - - // Update ourselves and release memory - // - output->GetCellData()->PassData(input->GetCellData()); - - output->SetPoints(newPts); - output->Squeeze(); - - ptIds->Delete(); - newPtIds->Delete(); - newPts->Delete(); -} - -/*!Sets store mapping.*/ -void VTKViewer_ShrinkFilter::SetStoreMapping(int theStoreMapping){ - myStoreMapping = theStoreMapping; - this->Modified(); -} - - -/*!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 > (int)myVTK2ObjIds.size() ) - return -1; - return myVTK2ObjIds.at(theVtkID); -} diff --git a/src/VTKViewer/VTKViewer_ShrinkFilter.h b/src/VTKViewer/VTKViewer_ShrinkFilter.h deleted file mode 100755 index 336d30636..000000000 --- a/src/VTKViewer/VTKViewer_ShrinkFilter.h +++ /dev/null @@ -1,68 +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 -// -#ifndef VTKVIEWER_SHRINKFILTER_H -#define VTKVIEWER_SHRINKFILTER_H - -#include "VTKViewer.h" - -#include - -#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. - */ -class VTKVIEWER_EXPORT VTKViewer_ShrinkFilter : public vtkShrinkFilter -{ -public: - /*!Create new instance of VTKViewer_ShrinkFilter.*/ - static VTKViewer_ShrinkFilter *New(); - vtkTypeRevisionMacro(VTKViewer_ShrinkFilter, vtkShrinkFilter); - - void SetStoreMapping(int theStoreMapping); - /*!Gets store mapping flag.*/ - int GetStoreMapping(){ return myStoreMapping;} - - virtual vtkIdType GetNodeObjId(int theVtkID); - /*!Return element id by vtk id.*/ - virtual vtkIdType GetElemObjId(int theVtkID) { return theVtkID;} - -protected: - VTKViewer_ShrinkFilter(); - ~VTKViewer_ShrinkFilter(); - - void Execute(); - /*!Not implemented.*/ - void UnstructuredGridExecute(); - -private: - int myStoreMapping; - typedef std::vector TVectorId; - TVectorId myVTK2ObjIds; -}; - -#ifdef WIN32 -#pragma warning ( default:4251 ) -#endif - -#endif diff --git a/src/VTKViewer/VTKViewer_Transform.cxx b/src/VTKViewer/VTKViewer_Transform.cxx deleted file mode 100755 index 4526d4555..000000000 --- a/src/VTKViewer/VTKViewer_Transform.cxx +++ /dev/null @@ -1,68 +0,0 @@ -// SALOME FILTER : interactive object for VISU entities implementation -// -// 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 : SALOME_Transform.cxx -// Author : Laurent CORNABE with help of Nicolas REJNERI -// Module : SALOME - - -#include "VTKViewer_Transform.h" - -#include -#include - -static double EPS = 10e-4; - - -vtkStandardNewMacro(VTKViewer_Transform); - -/*!Sets matrix scale.*/ -void VTKViewer_Transform::SetMatrixScale(double theScaleX, double theScaleY, double theScaleZ){ - double aMatrix[16] = {theScaleX,0,0,0, - 0,theScaleY,0,0, - 0,0,theScaleZ,0, - 0,0,0,1.0000000}; - this->SetMatrix(aMatrix); -} - -/*!Gets matrix scale.*/ -void VTKViewer_Transform::GetMatrixScale(double theScale[3]){ - vtkMatrix4x4 *aTMatrix=this->GetMatrix(); - const double aScaleX = aTMatrix->GetElement(0,0); - const double aScaleY = aTMatrix->GetElement(1,1); - const double aScaleZ = aTMatrix->GetElement(2,2); - theScale[0] = aScaleX; - theScale[1] = aScaleY; - theScale[2] = aScaleZ; -} - -/*!Checks: Is matrix identity, where used EPS value. - *If |aScaleX-1|GetMatrixScale(aScale); - return (fabs(aScale[0] - 1.0) < EPS && - fabs(aScale[1] - 1.0) < EPS && - fabs(aScale[2] - 1.0) < EPS); -} diff --git a/src/VTKViewer/VTKViewer_Transform.h b/src/VTKViewer/VTKViewer_Transform.h deleted file mode 100755 index 9ef364577..000000000 --- a/src/VTKViewer/VTKViewer_Transform.h +++ /dev/null @@ -1,53 +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 -// -#ifndef VTKVIEWER_TRANSFORM_H -#define VTKVIEWER_TRANSFORM_H - -#include "VTKViewer.h" - -#include - -/*!\brief Describes linear transformations via a 4x4 matrix. - *@see vtkTransform class - */ -class VTKVIEWER_EXPORT VTKViewer_Transform : public vtkTransform -{ -public: - /*!Create new instance of VTKViewer_Transform.*/ - static VTKViewer_Transform *New(); - vtkTypeMacro( VTKViewer_Transform, vtkTransform ); - - int IsIdentity(); - //merge with V2_2_0_VISU_improvements:void SetScale( float theScaleX, float theScaleY, float theScaleZ ); - void SetMatrixScale(double theScaleX, double theScaleY, double theScaleZ); - void GetMatrixScale(double theScale[3]); - -protected: - /*!Constructor.*/ - VTKViewer_Transform() {/*!Do nothing*/} - /*!Copy contructor.*/ - VTKViewer_Transform(const VTKViewer_Transform&) {/*!Do nothing*/} - /*!Destructor.*/ - ~VTKViewer_Transform() {/*!Do nothing*/} - - /*!Operator = */ - void operator=( const VTKViewer_Transform& ) {/*!Do nothing*/} -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_TransformFilter.cxx b/src/VTKViewer/VTKViewer_TransformFilter.cxx deleted file mode 100755 index cdfc14a1f..000000000 --- a/src/VTKViewer/VTKViewer_TransformFilter.cxx +++ /dev/null @@ -1,70 +0,0 @@ -// SALOME FILTER : interactive object for VISU entities implementation -// -// 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 : SALOME_TransformFilter.h -// Author : Laurent CORNABE with help of Nicolas REJNERI -// Module : SALOME - - -#include "VTKViewer_TransformFilter.h" -#include "VTKViewer_Transform.h" - -#include -#include -#include -#include -#include - - -vtkStandardNewMacro(VTKViewer_TransformFilter); - -/*!Execution method. Calculate output.*/ -void VTKViewer_TransformFilter::Execute(){ - 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 ); - if(Transform){ - bool anIsIdentity = true; - if(VTKViewer_Transform* aTransform = dynamic_cast(Transform)) - anIsIdentity = aTransform->IsIdentity() != 0; - inPts = input->GetPoints(); - if(!anIsIdentity && inPts){ - numPts = inPts->GetNumberOfPoints(); - numCells = input->GetNumberOfCells(); - newPts = vtkPoints::New(); - newPts->Allocate(numPts); - this->UpdateProgress(.2); - this->Transform->TransformPoints(inPts,newPts); - this->UpdateProgress(.8); - output->SetPoints(newPts); - newPts->Delete(); - } - } - outPD->PassData(pd); - outCD->PassData(cd); -} diff --git a/src/VTKViewer/VTKViewer_TransformFilter.h b/src/VTKViewer/VTKViewer_TransformFilter.h deleted file mode 100755 index 3087a03e9..000000000 --- a/src/VTKViewer/VTKViewer_TransformFilter.h +++ /dev/null @@ -1,48 +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 -// -#ifndef VTKVIEWER_TRANSFORMFILTER_H -#define VTKVIEWER_TRANSFORMFILTER_H - -#include "VTKViewer.h" - -#include - -/*!Transform points and associated normals and vectors - *@see vtkTransformFilter - */ -class VTKVIEWER_EXPORT VTKViewer_TransformFilter : public vtkTransformFilter -{ -public: - /*!Create new instance of VTKViewer_TransformFilter.*/ - static VTKViewer_TransformFilter *New(); - vtkTypeMacro(VTKViewer_TransformFilter,vtkTransformFilter); - -protected: - /*!Constructor.*/ - VTKViewer_TransformFilter() {/*!Do nothing*/} - /*!Destructor.*/ - ~VTKViewer_TransformFilter() {/*!Do nothing*/} - /*!Copy constructor.*/ - VTKViewer_TransformFilter(const VTKViewer_TransformFilter&) {/*!Do nothing*/} - /*!Operator = */ - void operator=(const VTKViewer_TransformFilter&) {/*!Do nothing*/} - void Execute(); -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_Trihedron.cxx b/src/VTKViewer/VTKViewer_Trihedron.cxx deleted file mode 100755 index c426e0280..000000000 --- a/src/VTKViewer/VTKViewer_Trihedron.cxx +++ /dev/null @@ -1,435 +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 "VTKViewer_Trihedron.h" -#include "VTKViewer_Actor.h" - -// VTK Includes -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "VTKViewer_VectorText.h" - -vtkStandardNewMacro(VTKViewer_UnScaledActor); - -/*!Constructor*/ -VTKViewer_UnScaledActor::VTKViewer_UnScaledActor() -{ - Bounds[0] = Bounds[2] = Bounds[4] = VTK_LARGE_FLOAT; - Bounds[1] = Bounds[3] = Bounds[5] = -VTK_LARGE_FLOAT; -} - -/*! - \return bounding box -*/ -vtkFloatingPointType* -VTKViewer_UnScaledActor -::GetBounds() -{ - return Bounds; -} - -/*! Sets \a mySize= \a theSize variable. - * \param theSize - integer size - */ -void VTKViewer_UnScaledActor::SetSize(int theSize) -{ - mySize = theSize; -} - -/*!This causes the actor to be rendered. - * Set new scale for actor. - */ -void VTKViewer_UnScaledActor::Render(vtkRenderer *theRenderer) -{ - if(theRenderer){ - vtkFloatingPointType P[2][3] = {{-1.0, -1.0, 0.0},{+1.0, +1.0, 0.0}}; - theRenderer->ViewToWorld(P[0][0],P[0][1],P[0][2]); - theRenderer->ViewToWorld(P[1][0],P[1][1],P[1][2]); - vtkFloatingPointType aWorldDiag = sqrt((P[1][0]-P[0][0])*(P[1][0]-P[0][0])+ - (P[1][1]-P[0][1])*(P[1][1]-P[0][1])+ - (P[1][2]-P[0][2])*(P[1][2]-P[0][2])); - int* aSize = theRenderer->GetRenderWindow()->GetSize(); - vtkFloatingPointType aWinDiag = sqrt(vtkFloatingPointType(aSize[0]*aSize[0]+aSize[1]*aSize[1])); - vtkDataSet* aDataSet = GetMapper()->GetInput(); - aDataSet->Update(); - vtkFloatingPointType aLength = aDataSet->GetLength(); - vtkFloatingPointType aPrecision = 1.0E-3; - vtkFloatingPointType anOldScale = GetScale()[0]; - vtkFloatingPointType aScale = mySize*aWorldDiag/aWinDiag/aLength*sqrt(vtkFloatingPointType(aSize[0])/vtkFloatingPointType(aSize[1])); - if(fabs(aScale - anOldScale)/aScale > aPrecision){ - SetScale(aScale); - } - } - vtkFollower::Render(theRenderer); -} - -vtkStandardNewMacro(VTKViewer_LineActor); - -vtkCxxSetObjectMacro(VTKViewer_LineActor,LabelActor,VTKViewer_UnScaledActor); -vtkCxxSetObjectMacro(VTKViewer_LineActor,ArrowActor,VTKViewer_UnScaledActor); - -/*!Adds Label and Arrow actors to \a theRenderer.*/ -void VTKViewer_LineActor::Render(vtkRenderer *theRenderer) -{ - if(LabelActor && LabelActor->GetVisibility()){ - LabelActor->Modified(); - LabelActor->Render(theRenderer); - } - if(ArrowActor && ArrowActor->GetVisibility()){ - ArrowActor->Modified(); - ArrowActor->Render(theRenderer); - } - vtkFollower::Render(theRenderer); -} - -/*! - Constructor -*/ -VTKViewer_Axis::VTKViewer_Axis() -{ - /*! \li Initialize the Line pipe-line representation*/ - myLineSource = vtkLineSource::New(); - myLineSource->SetPoint1(0.0,0.0,0.0); - - myMapper[0] = vtkPolyDataMapper::New(); - myMapper[0]->SetInput(myLineSource->GetOutput()); - - myLineActor = VTKViewer_LineActor::New(); - myLineActor->SetMapper(myMapper[0]); - myLineActor->PickableOff(); - - /*! \li Initialize the Arrow pipe-line representation*/ - myConeSource = vtkConeSource::New(); - myConeSource->SetResolution(2); - myConeSource->SetAngle(10); - - myMapper[1] = vtkPolyDataMapper::New(); - myMapper[1]->SetInput(myConeSource->GetOutput()); - - myArrowActor = VTKViewer_UnScaledActor::New(); - myArrowActor->SetMapper(myMapper[1]); - static int aArrowActorSize = 24; - myArrowActor->SetSize(aArrowActorSize); - myArrowActor->PickableOff(); - - myLineActor->SetArrowActor(myArrowActor); - - /*! \li Initialize the Label pipe-line representation */ - myVectorText = VTKViewer_VectorText::New(); - - myMapper[2] = vtkPolyDataMapper::New(); - myMapper[2]->SetInput(myVectorText->GetOutput()); - - myLabelActor = VTKViewer_UnScaledActor::New(); - myLabelActor->SetMapper(myMapper[2]); - static int aLabelActorSize = 12; - myLabelActor->SetSize(aLabelActorSize); - myLabelActor->PickableOff(); - //myLabelActor->DebugOn(); - - myLineActor->SetLabelActor(myLabelActor); - - /*! \li Initialise visibility param.*/ - myVisibility = VTKViewer_Trihedron::eOn; -} - -/*! - Destructor -*/ -VTKViewer_Axis::~VTKViewer_Axis() -{ - /*! \li Destroy of the Label pipe-line representation */ - myLabelActor->Delete(); - - myMapper[0]->RemoveAllInputs(); - myMapper[0]->Delete(); - - myVectorText->Delete(); - - /*! \li Destroy of the Arrow pipe-line representation */ - myArrowActor->Delete(); - - myMapper[1]->RemoveAllInputs(); - myMapper[1]->Delete(); - - myConeSource->Delete(); - - /*! \li Destroy of the Line pipe-line representation */ - myLineActor->Delete(); - - myMapper[2]->RemoveAllInputs(); - myMapper[2]->Delete(); - - myLineSource->Delete(); -} - -/*! Add to renderer - * \param theRenderer - vtkRenderer pointer - */ -void VTKViewer_Axis::AddToRender(vtkRenderer* theRenderer){ - /*! \li Order of the calls are important*/ - theRenderer->AddActor(myLineActor); - theRenderer->AddActor(myLabelActor); - theRenderer->AddActor(myArrowActor); -} - -/*! Remove actor of acis from \a theRenderer which are in myPresent. - * \param theRenderer - vtkRenderer pointer - */ -void VTKViewer_Axis::RemoveFromRender(vtkRenderer* theRenderer){ - /*! \li Order of the calls are important*/ - theRenderer->RemoveActor(myLineActor); - theRenderer->RemoveActor(myLabelActor); - theRenderer->RemoveActor(myArrowActor); -} - -/*! Sets visibility for all Axis to \a theVis*/ -void VTKViewer_Axis::SetVisibility(VTKViewer_Trihedron::TVisibility theVis) -{ - switch(theVis){ - case VTKViewer_Trihedron::eOff: - case VTKViewer_Trihedron::eOn: - myLabelActor->SetVisibility(theVis); - myArrowActor->SetVisibility(theVis); - myLineActor->SetVisibility(theVis); - break; - case VTKViewer_Trihedron::eOnlyLineOn: - myLabelActor->VisibilityOff(); - myArrowActor->VisibilityOff(); - myLineActor->VisibilityOn(); - break; - default: - return; - } - myVisibility = theVis; -} - -/*! Set camera for myLabelActor - */ -void VTKViewer_Axis::SetCamera(vtkCamera* theCamera){ - myLabelActor->SetCamera(theCamera); -} - -/*! Sets \a theProperty for actors: myLineActor,myLabelActor,myArrowActor - */ -void VTKViewer_Axis::SetProperty(vtkProperty* theProperty){ - myLabelActor->SetProperty(theProperty); - myArrowActor->SetProperty(theProperty); - myLineActor->SetProperty(theProperty); -} - -/*! Set size of VTKViewer_Axis - */ -void VTKViewer_Axis::SetSize(vtkFloatingPointType theSize) -{ - vtkFloatingPointType aPosition[3] = {myDir[0]*theSize, myDir[1]*theSize, myDir[2]*theSize}; - myLineSource->SetPoint2(aPosition); - - myArrowActor->SetPosition(0.0,0.0,0.0); - myArrowActor->AddPosition(aPosition); - myArrowActor->SetOrientation(myRot); - - myLabelActor->SetPosition(0.0,0.0,0.0); - myLabelActor->AddPosition(aPosition); -} - -/*! \class VTKViewer_XAxis - * \brief X Axis actor - */ -class VTKViewer_XAxis : public VTKViewer_Axis -{ -protected: - VTKViewer_XAxis(); - VTKViewer_XAxis(const VTKViewer_XAxis&); -public: - vtkTypeMacro(VTKViewer_XAxis,VTKViewer_Axis); - static VTKViewer_XAxis *New(); -}; - -vtkStandardNewMacro(VTKViewer_XAxis); - -/*!Initialize X Axis*/ -VTKViewer_XAxis::VTKViewer_XAxis(){ - myDir[0] = 1.0; myDir[1] = 0.0; myDir[2] = 0.0; - myRot[0] = 0.0; myRot[1] = 0.0; myRot[2] = 0.0; - myVectorText->SetText("X"); - vtkProperty* aProperty = vtkProperty::New(); - aProperty->SetColor(1.0,0.0,0.0); - SetProperty(aProperty); - aProperty->Delete(); -} - -/*! \class VTKViewer_YAxis - * \brief Y Axis actor - */ -class VTKViewer_YAxis : public VTKViewer_Axis{ -protected: - VTKViewer_YAxis(); - VTKViewer_YAxis(const VTKViewer_YAxis&); -public: - vtkTypeMacro(VTKViewer_YAxis,VTKViewer_Axis); - static VTKViewer_YAxis *New(); -}; - -vtkStandardNewMacro(VTKViewer_YAxis); - -/*!Initialize Y Axis*/ -VTKViewer_YAxis::VTKViewer_YAxis() -{ - myDir[0] = 0.0; myDir[1] = 1.0; myDir[2] = 0.0; - myRot[0] = 0.0; myRot[1] = 0.0; myRot[2] = 90.; - myVectorText->SetText("Y"); - vtkProperty* aProperty = vtkProperty::New(); - aProperty->SetColor(0.0,1.0,0.0); - SetProperty(aProperty); - aProperty->Delete(); -} - -/*! \class VTKViewer_ZAxis - * \brief Z Axis actor - */ -class VTKViewer_ZAxis : public VTKViewer_Axis -{ -protected: - VTKViewer_ZAxis(); - VTKViewer_ZAxis(const VTKViewer_ZAxis&); -public: - vtkTypeMacro(VTKViewer_ZAxis,VTKViewer_Axis); - static VTKViewer_ZAxis *New(); -}; - -vtkStandardNewMacro(VTKViewer_ZAxis); - -/*!Initialize Z Axis*/ -VTKViewer_ZAxis::VTKViewer_ZAxis() -{ - myDir[0] = 0.0; myDir[1] = 0.0; myDir[2] = 1.0; - myRot[0] = 0.0; myRot[1] = -90; myRot[2] = 0.0; - myVectorText->SetText("Z"); - vtkProperty* aProperty = vtkProperty::New(); - aProperty->SetColor(0.0,0.0,1.0); - SetProperty(aProperty); - aProperty->Delete(); -} - -vtkStandardNewMacro(VTKViewer_Trihedron); - -/*! - Constructor -*/ -VTKViewer_Trihedron::VTKViewer_Trihedron() -{ - myPresent = vtkActorCollection::New(); - myAxis[0] = VTKViewer_XAxis::New(); - myAxis[1] = VTKViewer_YAxis::New(); - myAxis[2] = VTKViewer_ZAxis::New(); - static vtkFloatingPointType aSize = 100; - SetSize(aSize); -} - -/*! - Destructor -*/ -VTKViewer_Trihedron::~VTKViewer_Trihedron() -{ - myPresent->RemoveAllItems(); - myPresent->Delete(); - for(int i = 0; i < 3; i++) - myAxis[i]->Delete(); -} - -/*! Set size of axes - */ -void VTKViewer_Trihedron::SetSize(vtkFloatingPointType theSize) -{ - mySize = theSize; - for(int i = 0; i < 3; i++) - myAxis[i]->SetSize(theSize); -} - -/*! Set visibility of axes - */ -void VTKViewer_Trihedron::SetVisibility(TVisibility theVis) -{ - for(int i = 0; i < 3; i++) - myAxis[i]->SetVisibility(theVis); -} - -/*! - \return visibility of first axis -*/ -VTKViewer_Trihedron::TVisibility VTKViewer_Trihedron::GetVisibility() -{ - return myAxis[0]->GetVisibility(); -} - -/*! Add to render all Axis - * \param theRenderer - vtkRenderer pointer - */ -void VTKViewer_Trihedron::AddToRender(vtkRenderer* theRenderer) -{ - vtkCamera* aCamera = theRenderer->GetActiveCamera(); - for(int i = 0; i < 3; i++){ - myAxis[i]->AddToRender(theRenderer); - myAxis[i]->SetCamera(aCamera); - } -} - -/*! Remove all actors from \a theRenderer which are in myPresent. - * \param theRenderer - vtkRenderer pointer - */ -void VTKViewer_Trihedron::RemoveFromRender(vtkRenderer* theRenderer) -{ - myPresent->InitTraversal(); - while(vtkActor* anActor = myPresent->GetNextActor()) - theRenderer->RemoveActor(anActor); - for(int i = 0; i < 3; i++) - myAxis[i]->RemoveFromRender(theRenderer); -} - -/*! Return count of visible actors. - * \param theRenderer - vtkRenderer pointer - */ -int VTKViewer_Trihedron::GetVisibleActorCount(vtkRenderer* theRenderer) -{ - //TVisibility aVis = GetVisibility(); - //SetVisibility(eOff); - vtkActorCollection* aCollection = theRenderer->GetActors(); - aCollection->InitTraversal(); - int aCount = 0; - while(vtkActor* prop = aCollection->GetNextActor()) { - if( prop->GetVisibility()) - if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(prop)) - if(!anActor->IsInfinitive()) - aCount++; - //int aCount = theRenderer->VisibleActorCount(); - //SetVisibility(aVis); - } - return aCount; -} diff --git a/src/VTKViewer/VTKViewer_Trihedron.h b/src/VTKViewer/VTKViewer_Trihedron.h deleted file mode 100755 index 0d29f11d8..000000000 --- a/src/VTKViewer/VTKViewer_Trihedron.h +++ /dev/null @@ -1,282 +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 -// -#ifndef VTKVIEWER_TRIHEDRON_H -#define VTKVIEWER_TRIHEDRON_H - -#include "VTKViewer.h" - -#include -#include - -class vtkRenderer; -class vtkActorCollection; -class vtkCamera; -class vtkProperty; -class vtkPolyDataMapper; -class vtkLineSource; -class vtkConeSource; - -class VTKViewer_Axis; -class VTKViewer_VectorText; - -/*! \class vtkFollower - * See vtk documentation - */ -/*!a subclass of actor that always faces the camera - *@see vtkFollower - */ -class VTKVIEWER_EXPORT VTKViewer_UnScaledActor: public vtkFollower -{ - VTKViewer_UnScaledActor(const VTKViewer_UnScaledActor&); - -public: - - vtkTypeMacro(VTKViewer_UnScaledActor,vtkFollower); - - /*!Create new instance of VTKViewer_UnScaledActor.*/ - static VTKViewer_UnScaledActor *New(); - - virtual vtkFloatingPointType* GetBounds(); - virtual void SetSize(int theSize); - virtual void Render(vtkRenderer *theRenderer); - -protected: - VTKViewer_UnScaledActor(); - /*!Destructor. Do nothing.*/ - ~VTKViewer_UnScaledActor(){} - - int mySize; -}; - -/*!a subclass of actor that always faces the camera - *@see vtkFollower - */ -class VTKVIEWER_EXPORT VTKViewer_LineActor: public vtkFollower -{ - VTKViewer_LineActor(const VTKViewer_LineActor&); - -public: - /*!vtk type macros.*/ - vtkTypeMacro(VTKViewer_LineActor,vtkFollower); - - /*!Create new instance of VTKViewer_LineActor.*/ - static VTKViewer_LineActor *New(); - - /*! Sets Lable actor. - * \param theLabelActor - VTKViewer_UnScaledActor - */ - void SetLabelActor(VTKViewer_UnScaledActor* theLabelActor); - - /*! Sets Arrow actor. - * \param theLabelActor - VTKViewer_UnScaledActor - */ - void SetArrowActor(VTKViewer_UnScaledActor* theLabelActor); - - virtual void Render(vtkRenderer *theRenderer); - -protected: - - /*! Constructor which sets \a LabelActor and \a ArrowActor to NULL*/ - VTKViewer_LineActor(){ - LabelActor = NULL; - ArrowActor = NULL; - } - - /*!Destructor which call SetLabelActor(NULL) and SetArrowActor(NULL)*/ - ~VTKViewer_LineActor(){ - SetLabelActor(NULL); - SetArrowActor(NULL); - } - - /*!Label actor pointer*/ - VTKViewer_UnScaledActor* LabelActor; - - /*!Arrow actor pointer*/ - VTKViewer_UnScaledActor* ArrowActor; -}; - -/*!This class provide support trihedron object in vtk viewer.*/ -class VTKVIEWER_EXPORT VTKViewer_Trihedron : public vtkObject -{ -protected: - /*!Initialize fields by default values.*/ - VTKViewer_Trihedron(); - - /*!Const copy constructor.*/ - VTKViewer_Trihedron(const VTKViewer_Trihedron&); - - /*!Destructor. Remove all fileds.*/ - virtual ~VTKViewer_Trihedron(); - -public: - /*!vtk type macros.*/ - vtkTypeMacro(VTKViewer_Trihedron,vtkObject); - - /*!Create new instance of VTKViewer_Trihedron.*/ - static VTKViewer_Trihedron *New(); - - /*!Sets size of trihedron. - * \param theSize - vtkFloatingPointType value - */ - virtual void SetSize(vtkFloatingPointType theSize); - - /*! Get size of trihedron. - * \retval mySize - vtkFloatingPointType value - */ - virtual vtkFloatingPointType GetSize() { return mySize;} - - enum TVisibility{eOff, eOn, eOnlyLineOn}; - - /*! Sets visibility for all Axis to \a theVis*/ - virtual void SetVisibility(TVisibility theVis); - - /*! OFF visibility for all Axis.*/ - virtual void VisibilityOff() { SetVisibility(eOff);} - - /*! ON visibility for all Axis.*/ - virtual void VisibilityOn() { SetVisibility(eOn);} - - /*! Gets visibility of myAxis[0] actor.*/ - virtual TVisibility GetVisibility(); - - /*! Add to render all Axis - * \param theRenderer - vtkRenderer pointer - */ - virtual void AddToRender(vtkRenderer* theRenderer); - - /*! Remove all actors from \a theRenderer which are in myPresent. - * \param theRenderer - vtkRenderer pointer - */ - virtual void RemoveFromRender(vtkRenderer* theRenderer); - - /*! Return count of visible actors. - * \param theRenderer - vtkRenderer pointer - */ - virtual int GetVisibleActorCount(vtkRenderer* theRenderer); - -protected: - /*! Actor collection*/ - vtkActorCollection* myPresent; - - /*! \li myAxis[0] - X Axis actor - * \li myAxis[1] - Y Axis actor - * \li myAxis[2] - Z Axis actor - */ - VTKViewer_Axis* myAxis[3]; - - /*! Common size for trihedron, for each axis.*/ - vtkFloatingPointType mySize; -}; - -/*!The base class for concreate Axis. - * Its only duty is to give correct initialization and destruction - * of its pipe-lines - */ -class VTKVIEWER_EXPORT VTKViewer_Axis : public vtkObject -{ -protected: - VTKViewer_Axis(); - VTKViewer_Axis(const VTKViewer_Axis&); - virtual ~VTKViewer_Axis(); - -public: - /*!vtk type macros.*/ - vtkTypeMacro(VTKViewer_Axis,vtkObject); - - /*! Add to \a theRenderer actors: myLineActor,myLabelActor,myArrowActor - */ - virtual void AddToRender(vtkRenderer* theRenderer); - virtual void RemoveFromRender(vtkRenderer* theRenderer); - - /*! Sets visibility for actors: myLineActor,myLabelActor,myArrowActor - */ - virtual void SetVisibility(VTKViewer_Trihedron::TVisibility theVis); - - /*! Return visibility of VTKViewer_Axis - * \retval myVisibility - */ - virtual VTKViewer_Trihedron::TVisibility GetVisibility() { return myVisibility; } - - /*! Set camera for myLabelActor - */ - virtual void SetCamera(vtkCamera* theCamera); - - /*! Sets \a theProperty for actors: myLineActor,myLabelActor,myArrowActor - */ - virtual void SetProperty(vtkProperty* theProperty); - - /*! Set size of VTKViewer_Axis - */ - virtual void SetSize(vtkFloatingPointType theSize); - - /*! Get label actor. - * \retval Return myLabelActor. - */ - virtual VTKViewer_UnScaledActor* GetLabel() { return myLabelActor; } - - /*! Get arrow actor. - * \retval Return myArrowActor - */ - virtual VTKViewer_UnScaledActor* GetArrow() { return myArrowActor; } - -protected: - /*! Visibility flag. - */ - VTKViewer_Trihedron::TVisibility myVisibility; - - /*! \var myDir[3] - * Direction vector - */ - /*! \var myRot[3] - * Orientation vector - */ - vtkFloatingPointType myDir[3], myRot[3]; - - /*! VTKViewer_LineActor actor pointer - */ - VTKViewer_LineActor *myLineActor; - - /*! VTKViewer_UnScaledActor actor pointer - */ - VTKViewer_UnScaledActor *myArrowActor; - - /*! VTKViewer_UnScaledActor actor pointer - */ - VTKViewer_UnScaledActor *myLabelActor; - - /*! \li myMapper[0] - for the Line pipe-line representation - * \li myMapper[1] - for the Arrow pipe-line representation - * \li myMapper[2] - for the Label pipe-line representation - */ - vtkPolyDataMapper *myMapper[3]; - - /*! vtkLineSource pointer (Line) - */ - vtkLineSource *myLineSource; - - /*! vtkConeSource pointer (Arrow) - */ - vtkConeSource *myConeSource; - - /*! VTKViewer_VectorText pointer (Label) - */ - VTKViewer_VectorText* myVectorText; -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_Utilities.cxx b/src/VTKViewer/VTKViewer_Utilities.cxx deleted file mode 100755 index 5f061a64b..000000000 --- a/src/VTKViewer/VTKViewer_Utilities.cxx +++ /dev/null @@ -1,216 +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 "VTKViewer_Utilities.h" -#include "VTKViewer_Actor.h" - -#include - -// VTK Includes -#include -#include -#include -#include - -using namespace std; - -/*!@see vtkRenderer::ResetCamera(vtkFloatingPointType bounds[6]) method*/ -void -ResetCamera(vtkRenderer* theRenderer, - int theUsingZeroFocalPoint) -{ - if(!theRenderer) - return; - - vtkCamera* aCamera = theRenderer->GetActiveCamera(); - if(!aCamera) - return; - - vtkFloatingPointType aBounds[6]; - int aCount = ComputeVisiblePropBounds(theRenderer,aBounds); - - if(theUsingZeroFocalPoint || 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; - - 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; - - vtkFloatingPointType aViewPlaneNormal[3]; - aCamera->GetViewPlaneNormal(aViewPlaneNormal); - - vtkFloatingPointType aCenter[3] = {0.0, 0.0, 0.0}; - if(!theUsingZeroFocalPoint){ - aCenter[0] = (aBounds[0] + aBounds[1])/2.0; - aCenter[1] = (aBounds[2] + aBounds[3])/2.0; - aCenter[2] = (aBounds[4] + aBounds[5])/2.0; - } - aCamera->SetFocalPoint(aCenter[0],aCenter[1],aCenter[2]); - - vtkFloatingPointType aViewAngle = aCamera->GetViewAngle(); - vtkFloatingPointType aDistance = 2.0*aWidth/tan(aViewAngle*vtkMath::Pi()/360.0); - - // check view-up vector against view plane normal - vtkFloatingPointType aViewUp[3]; - aCamera->GetViewUp(aViewUp); - if(fabs(vtkMath::Dot(aViewUp,aViewPlaneNormal)) > 0.999) - aCamera->SetViewUp(-aViewUp[2], aViewUp[0], aViewUp[1]); - - // update the camera - aCamera->SetPosition(aCenter[0]+aDistance*aViewPlaneNormal[0], - aCenter[1]+aDistance*aViewPlaneNormal[1], - aCenter[2]+aDistance*aViewPlaneNormal[2]); - - // find size of the window - int* aWinSize = theRenderer->GetSize(); - if(aWinSize[0] < aWinSize[1]) - aWidth *= vtkFloatingPointType(aWinSize[1])/vtkFloatingPointType(aWinSize[0]); - - if(theUsingZeroFocalPoint) - aWidth *= sqrt(2.0); - - aCamera->SetParallelScale(aWidth/2.0); - } - - ResetCameraClippingRange(theRenderer); -} - -/*! Compute the bounds of the visible props*/ -int -ComputeVisiblePropBounds(vtkRenderer* theRenderer, - vtkFloatingPointType theBounds[6]) -{ - int aCount = 0; - - theBounds[0] = theBounds[2] = theBounds[4] = VTK_LARGE_FLOAT; - theBounds[1] = theBounds[3] = theBounds[5] = -VTK_LARGE_FLOAT; - - // loop through all props - vtkActorCollection* aCollection = theRenderer->GetActors(); - aCollection->InitTraversal(); - while (vtkActor* aProp = aCollection->GetNextActor()) { - // if it's invisible, or has no geometry, we can skip the rest - if(aProp->GetVisibility() && aProp->GetMapper()){ - if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(aProp)) - if(anActor->IsInfinitive()) - continue; - - vtkFloatingPointType *aBounds = aProp->GetBounds(); - static vtkFloatingPointType MAX_DISTANCE = 0.9*VTK_LARGE_FLOAT; - // make sure we haven't got bogus bounds - if ( aBounds != NULL && - aBounds[0] > -MAX_DISTANCE && aBounds[1] < MAX_DISTANCE && - aBounds[2] > -MAX_DISTANCE && aBounds[3] < MAX_DISTANCE && - aBounds[4] > -MAX_DISTANCE && aBounds[5] < MAX_DISTANCE ) - { - aCount++; - - theBounds[0] = min(aBounds[0],theBounds[0]); - theBounds[2] = min(aBounds[2],theBounds[2]); - theBounds[4] = min(aBounds[4],theBounds[4]); - - theBounds[1] = max(aBounds[1],theBounds[1]); - theBounds[3] = max(aBounds[3],theBounds[3]); - theBounds[5] = max(aBounds[5],theBounds[5]); - - }//not bogus - } - } - return aCount; -} - -/*!@see vtkRenderer::ResetCameraClippingRange(vtkFloatingPointType bounds[6]) method*/ -void -ResetCameraClippingRange(vtkRenderer* theRenderer) -{ - if(!theRenderer || !theRenderer->VisibleActorCount()) return; - - vtkCamera* anActiveCamera = theRenderer->GetActiveCamera(); - if( anActiveCamera == NULL ){ - return; - } - - // Find the plane equation for the camera view plane - vtkFloatingPointType vn[3]; - anActiveCamera->GetViewPlaneNormal(vn); - vtkFloatingPointType position[3]; - anActiveCamera->GetPosition(position); - - vtkFloatingPointType bounds[6]; - theRenderer->ComputeVisiblePropBounds(bounds); - - vtkFloatingPointType center[3]; - center[0] = (bounds[0] + bounds[1])/2.0; - center[1] = (bounds[2] + bounds[3])/2.0; - center[2] = (bounds[4] + bounds[5])/2.0; - - vtkFloatingPointType width = sqrt((bounds[1]-bounds[0])*(bounds[1]-bounds[0]) + - (bounds[3]-bounds[2])*(bounds[3]-bounds[2]) + - (bounds[5]-bounds[4])*(bounds[5]-bounds[4])); - - vtkFloatingPointType distance = sqrt((position[0]-center[0])*(position[0]-center[0]) + - (position[1]-center[1])*(position[1]-center[1]) + - (position[2]-center[2])*(position[2]-center[2])); - - vtkFloatingPointType range[2] = {distance - width/2.0, distance + width/2.0}; - - // Do not let the range behind the camera throw off the calculation. - if (range[0] < 0.0) range[0] = 0.0; - - anActiveCamera->SetClippingRange( range ); -} - -/*!Compute trihedron size.*/ -bool -ComputeTrihedronSize( vtkRenderer* theRenderer, - vtkFloatingPointType& theNewSize, - const vtkFloatingPointType theSize, - const vtkFloatingPointType theSizeInPercents ) -{ - // calculating diagonal of visible props of the renderer - vtkFloatingPointType bnd[ 6 ]; - if ( ComputeVisiblePropBounds( theRenderer, bnd ) == 0 ) - { - bnd[ 1 ] = bnd[ 3 ] = bnd[ 5 ] = 100; - bnd[ 0 ] = bnd[ 2 ] = bnd[ 4 ] = 0; - } - vtkFloatingPointType aLength = 0; - - aLength = bnd[ 1 ]-bnd[ 0 ]; - aLength = max( ( bnd[ 3 ] - bnd[ 2 ] ),aLength ); - aLength = max( ( bnd[ 5 ] - bnd[ 4 ] ),aLength ); - - static vtkFloatingPointType EPS_SIZE = 5.0E-3; - theNewSize = aLength * theSizeInPercents / 100.0; - - // if the new trihedron size have sufficient difference, then apply the value - return fabs( theNewSize - theSize) > theSize * EPS_SIZE || - fabs( theNewSize-theSize ) > theNewSize * EPS_SIZE; -} diff --git a/src/VTKViewer/VTKViewer_Utilities.h b/src/VTKViewer/VTKViewer_Utilities.h deleted file mode 100755 index 7ef9cc550..000000000 --- a/src/VTKViewer/VTKViewer_Utilities.h +++ /dev/null @@ -1,50 +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 -// -#ifndef VTKVIEWER_UTILITIES_H -#define VTKVIEWER_UTILITIES_H - -#include "VTKViewer.h" - -class vtkRenderer; - -VTKVIEWER_EXPORT -extern -void -ResetCamera(vtkRenderer* theRenderer, - int theUsingZeroFocalPoint = false); - -VTKVIEWER_EXPORT -extern -int -ComputeVisiblePropBounds(vtkRenderer* theRenderer, - vtkFloatingPointType theBounds[6]); - -VTKVIEWER_EXPORT -extern -void -ResetCameraClippingRange(vtkRenderer* theRenderer); -VTKVIEWER_EXPORT -extern -bool -ComputeTrihedronSize(vtkRenderer* theRenderer, - vtkFloatingPointType& theNewSize, - const vtkFloatingPointType theSize, - const vtkFloatingPointType theSizeInPercents); - -#endif diff --git a/src/VTKViewer/VTKViewer_VectorText.cxx b/src/VTKViewer/VTKViewer_VectorText.cxx deleted file mode 100755 index e701a1f07..000000000 --- a/src/VTKViewer/VTKViewer_VectorText.cxx +++ /dev/null @@ -1,1754 +0,0 @@ -/*========================================================================= - - Program: Visualization Toolkit - Module: $RCSfile$ - Language: C++ - Date: $Date$ - Version: $Revision$ - - Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen - All rights reserved. - See Copyright.txt or http://www.kitware.com/Copyright.htm for details. - - 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.*/ - -// VTKViewer_VectorText.cxx is a copy of vtkVectorText.cxx file. -// Purpose of copying: to remove linking to libHybrid.so VTK library - -#include "VTKViewer_VectorText.h" - -#include "vtkCellArray.h" -#include "vtkObjectFactory.h" -#include "vtkPoints.h" -#include "vtkPolyData.h" -using namespace std; - -vtkCxxRevisionMacro(VTKViewer_VectorText, "$Revision$"); -vtkStandardNewMacro(VTKViewer_VectorText); - -char *VTK_VECTOR_TEXT_33 = (char *) "11 0.438482 " -"0.28000 -0.07186 0.43164 -0.07143 0.27689 0.07714 0.43472 0.07714 0.32000 0.20134 " -"0.40000 0.20243 0.31429 0.20550 0.27277 0.76857 0.43848 0.76857 0.27693 1.02571 " -"0.43429 1.02615 7 2 1 3 2 0 1 7 6 5 6 4 5 8 " -"7 5 7 8 9 10 9 8 " -; - -char *VTK_VECTOR_TEXT_34 = (char *) "21 0.615625 " -"0.25714 0.63563 0.32571 0.63563 0.50286 0.63642 0.25143 0.63946 0.33143 0.63840 " -"0.33462 0.64286 0.49673 0.64286 0.57714 0.63757 0.58093 0.64286 0.21335 0.84286 " -"0.36680 0.84286 0.46177 0.84286 0.61522 0.84286 0.21295 1.02000 0.46134 1.02000 " -"0.61563 1.02000 0.36571 1.02307 0.46550 1.02571 0.21714 1.02615 0.36000 1.02723 " -"0.61143 1.02615 17 3 5 9 7 6 2 4 5 1 6 8 12 0 1 5 6 " -"12 11 3 0 5 7 8 6 11 12 14 13 9 10 10 9 5 15 14 12 19 " -"18 10 18 13 10 17 14 20 14 15 20 16 19 10 " -; - -char *VTK_VECTOR_TEXT_35 = (char *) "43 0.974539 " -"0.22286 -0.09100 0.32571 -0.09236 0.56832 -0.08857 0.67429 -0.09201 0.28193 0.22000 " -"0.39470 0.22000 0.63009 0.22000 0.15385 0.23143 0.27429 0.22723 0.40571 0.22723 " -"0.62286 0.22723 0.74857 0.22680 0.97454 0.23143 0.15385 0.33429 0.97454 0.33429 " -"0.30344 0.34000 0.65201 0.34000 0.77084 0.34000 0.42286 0.34010 0.42034 0.34571 " -"0.36041 0.60286 0.70748 0.60286 0.82034 0.60286 0.47429 0.60626 0.15385 0.61429 " -"0.35429 0.61009 0.70286 0.60951 0.82857 0.61009 0.97454 0.61429 0.15385 0.71714 " -"0.37714 0.72134 0.50286 0.72191 0.72571 0.72134 0.85143 0.72156 0.97143 0.72025 " -"0.38605 0.72857 0.49823 0.72857 0.73335 0.72857 0.84613 0.72857 0.45143 1.04160 " -"0.55735 1.04286 0.80000 1.04243 0.90521 1.04286 43 6 2 3 5 0 1 0 5 4 18 " -"9 10 11 6 3 4 9 8 13 8 15 17 6 11 9 4 5 13 7 8 17 " -"12 14 8 9 15 15 19 20 16 6 17 12 17 11 18 10 16 10 6 16 21 " -"16 17 18 19 9 15 9 19 20 30 25 23 20 19 34 33 28 29 24 25 29 " -"25 30 27 21 22 33 21 27 20 23 30 22 21 17 33 27 28 31 26 32 35 " -"30 23 32 38 37 31 35 23 21 32 26 26 31 23 32 21 38 41 37 38 36 " -"35 31 38 21 33 40 39 36 42 41 38 39 35 36 " -; - -char *VTK_VECTOR_TEXT_36 = (char *) "73 0.921518 " -"0.52571 -0.22882 0.59429 -0.22991 0.52000 -0.09942 0.60571 -0.09385 0.40571 -0.07057 " -"0.72730 -0.06571 0.33143 -0.03465 0.80571 -0.01813 0.51429 0.01891 0.52152 0.02571 " -"0.60571 0.02014 0.84571 0.02168 0.25669 0.04286 0.66857 0.03800 0.44571 0.04535 " -"0.70984 0.06571 0.74535 0.10571 0.74857 0.11079 0.74902 0.11143 0.37057 0.12857 " -"0.90538 0.12857 0.20823 0.15143 0.35748 0.16286 0.77395 0.16857 0.35429 0.17310 " -"0.35177 0.18000 0.78134 0.21429 0.92152 0.21429 0.19580 0.22571 0.33480 0.25429 " -"0.77395 0.29429 0.91177 0.32286 0.76000 0.32921 0.72571 0.36972 0.89355 0.37429 " -"0.64690 0.40857 0.65143 0.40706 0.64000 0.41109 0.60571 0.41986 0.52109 0.43714 " -"0.85714 0.43270 0.38857 0.49216 0.79429 0.48902 0.72571 0.52437 0.30454 0.54571 " -"0.60260 0.56286 0.52043 0.58571 0.26286 0.59570 0.46857 0.59800 0.39429 0.65095 " -"0.22857 0.67295 0.36823 0.70000 0.75429 0.77624 0.21907 0.78571 0.35891 0.78571 " -"0.89184 0.79714 0.37714 0.85001 0.72571 0.86144 0.87470 0.86571 0.24571 0.89016 " -"0.68571 0.90956 0.44000 0.92036 0.60571 0.94469 0.83179 0.94571 0.28000 0.94629 " -"0.51429 0.94891 0.34286 1.00607 0.75429 1.01579 0.38286 1.02784 0.52043 1.06571 " -"0.60260 1.06571 0.52260 1.12286 0.60043 1.12286 75 3 8 2 2 8 4 19 12 6 13 11 15 9 8 10 3 2 1 8 " -"3 10 5 13 10 15 11 16 7 13 5 4 14 6 2 0 1 5 10 3 12 " -"22 21 14 4 8 13 7 11 11 18 16 20 23 18 18 17 16 20 18 11 19 " -"6 14 28 21 29 26 23 20 12 19 22 25 22 24 21 22 25 21 25 29 26 " -"27 30 27 26 20 31 32 30 31 30 27 40 33 32 37 43 38 34 32 31 38 " -"39 9 40 32 34 38 9 10 43 33 42 37 36 43 39 38 43 42 33 40 35 " -"36 37 33 43 36 39 45 46 48 41 39 45 39 43 41 48 44 47 51 50 46 " -"62 65 48 39 46 44 49 47 49 44 48 54 53 50 51 47 49 53 56 59 53 " -"54 56 66 64 56 55 58 52 58 57 52 54 50 51 59 56 64 67 60 63 60 " -"57 63 66 61 68 61 66 56 68 65 69 65 62 69 62 46 45 63 57 58 62 " -"60 67 68 61 65 71 70 72 70 62 67 62 70 69 71 69 70 " -; - -char *VTK_VECTOR_TEXT_37 = (char *) "81 1.409911 " -"0.46713 -0.11143 0.57143 -0.11215 1.19429 -0.11252 1.10286 -0.10252 1.26444 -0.09429 " -"1.05143 -0.07759 1.31429 -0.06384 1.14857 -0.01538 1.18857 -0.01807 0.98857 -0.01364 " -"1.22286 -0.00771 1.36784 -0.00286 1.11302 0.00286 1.26436 0.03143 1.07787 0.04857 " -"0.95748 0.05429 1.39681 0.06571 1.28680 0.09429 1.05866 0.14000 1.40991 0.14571 " -"0.94134 0.15143 0.94134 0.21429 1.29295 0.21429 1.06134 0.23714 1.40723 0.23714 " -"0.95748 0.30000 1.39387 0.30000 1.07787 0.30571 1.27429 0.30371 1.09561 0.33429 " -"1.23429 0.35465 1.36616 0.36286 1.13143 0.36327 1.16571 0.37277 1.20571 0.36899 " -"1.00045 0.38571 1.32000 0.41543 1.06857 0.44498 1.24571 0.45681 0.48000 0.46420 " -"1.15429 0.46723 0.38857 0.47462 0.55016 0.48286 0.60000 0.51330 0.30286 0.52704 " -"0.43429 0.56177 0.47429 0.55907 0.26857 0.57284 0.50857 0.56943 0.65355 0.57429 " -"0.39873 0.58000 0.55007 0.60857 0.24530 0.62571 0.36359 0.62571 0.68252 0.64286 " -"0.56680 0.64857 0.23050 0.69429 0.34437 0.71714 0.57866 0.72286 0.69563 0.72286 " -"0.22705 0.79143 0.34705 0.81429 0.69295 0.81429 0.56891 0.85429 0.67959 0.87714 " -"0.24530 0.88286 0.36359 0.88286 0.38132 0.91143 0.54286 0.90975 0.52000 0.93179 " -"0.65465 0.93429 0.41714 0.94041 0.47429 0.94950 0.29143 0.96914 0.60571 0.99258 " -"0.32000 0.99868 0.38286 1.03395 0.53714 1.03184 1.06857 1.04249 1.17287 1.04286 " -"0.48000 1.04395 79 0 1 78 10 4 6 2 8 3 9 14 15 4 " -"10 8 3 7 5 7 3 8 10 6 13 12 5 7 5 12 9 4 8 2 13 " -"16 17 17 19 22 14 9 12 15 18 20 11 13 6 13 11 16 17 16 19 18 " -"15 14 21 20 18 21 23 25 22 26 28 23 21 18 24 22 19 25 27 35 35 " -"29 37 22 24 26 28 31 30 27 25 23 31 28 26 27 29 35 36 30 31 38 " -"34 30 38 33 34 37 32 40 32 33 40 38 30 36 32 37 29 40 33 38 42 " -"46 39 47 53 52 48 43 51 39 46 41 41 50 44 56 57 60 45 41 46 42 " -"48 46 48 42 43 50 41 45 53 47 44 51 49 55 54 55 49 53 44 50 49 " -"51 43 55 54 58 59 58 54 57 56 52 57 52 53 60 61 65 58 62 63 57 " -"61 60 62 64 63 65 66 73 66 65 61 73 66 75 58 59 62 63 64 68 70 " -"69 68 67 75 66 70 68 64 76 71 72 75 67 76 74 69 70 71 76 67 69 " -"77 72 72 77 80 77 69 74 76 72 80 79 78 1 " -; - -char *VTK_VECTOR_TEXT_38 = (char *) "76 1.126291 " -"0.58857 -0.08966 1.03429 -0.09235 0.48000 -0.08395 0.66286 -0.07673 0.40000 -0.05914 " -"0.72000 -0.05641 0.98286 -0.05473 0.35429 -0.03393 0.78857 -0.01678 1.12629 0.00857 " -"0.29143 0.02168 0.52571 0.02991 0.57714 0.02764 0.62286 0.03756 0.46857 0.04645 " -"0.87429 0.05495 0.69714 0.07393 0.42132 0.08286 1.04571 0.07868 0.24486 0.08857 " -"0.75011 0.11714 0.22327 0.14000 0.37927 0.14571 0.78349 0.16286 0.96893 0.16286 " -"0.96571 0.16717 0.96457 0.16857 0.95937 0.18000 0.35580 0.22571 0.20991 0.25429 " -"0.36319 0.28857 0.86286 0.29600 1.02437 0.31143 0.22645 0.32857 0.40418 0.36286 " -"0.40571 0.36454 0.41330 0.37429 1.05421 0.40857 0.28418 0.42571 0.92000 0.44119 " -"0.53714 0.46770 0.37143 0.50250 0.66758 0.54000 0.46406 0.55714 0.78704 0.62571 " -"0.59429 0.63146 0.37714 0.68444 0.69296 0.70000 0.85355 0.71714 0.35681 0.73429 " -"0.50200 0.75143 0.49756 0.76286 0.49502 0.76857 0.72891 0.76857 0.86966 0.76857 " -"0.34748 0.82000 0.73295 0.82000 0.48764 0.82571 0.87236 0.83143 0.49714 0.86089 " -"0.35849 0.87143 0.71429 0.87650 0.52000 0.89555 0.69714 0.89846 0.37964 0.91714 " -"0.84657 0.91714 0.55429 0.92073 0.65714 0.92498 0.60000 0.93277 0.81868 0.95714 " -"0.42857 0.97582 0.76571 1.00436 0.51429 1.02723 0.72000 1.02723 0.59429 1.04437 " -"0.64571 1.04395 78 7 17 10 3 13 0 " -"2 14 4 6 18 15 17 7 4 9 18 " -"6 9 6 1 8 16 5 0 12 2 " -"17 4 14 2 11 14 12 0 13 13 5 " -"16 15 24 20 16 8 20 13 3 5 " -"2 12 11 10 17 19 21 28 29 15 20 " -"8 20 24 23 40 23 31 24 25 26 " -"19 22 21 31 23 27 22 19 17 18 24 " -"15 28 21 22 29 30 33 31 32 39 " -"23 24 26 30 29 28 23 26 27 33 30 " -"38 32 31 27 38 36 41 38 34 36 " -"34 38 30 36 34 35 39 32 37 42 40 " -"31 40 41 36 42 44 47 45 43 40 " -"40 43 41 50 46 43 50 49 46 45 40 " -"42 48 53 47 45 42 47 49 52 55 " -"53 48 56 50 43 45 57 60 55 52 50 " -"51 49 50 52 48 47 44 54 56 48 " -"56 65 61 60 59 64 59 60 57 65 56 " -"58 52 57 55 64 59 70 58 56 54 " -"59 62 70 68 74 72 65 69 61 70 66 " -"72 63 71 67 63 61 69 70 62 66 " -"67 73 68 71 63 69 73 67 71 68 72 " -"66 74 68 75 75 68 73 " -; - -char *VTK_VECTOR_TEXT_39 = (char *) "10 0.364197 " -"0.25143 0.63563 0.24571 0.63946 0.32571 0.63757 0.32950 0.64286 0.21034 0.83714 " -"0.36379 0.83714 0.20991 1.02000 0.36420 1.02000 0.21408 1.02571 0.36000 1.02615 8 1 0 3 " -"2 3 0 1 3 4 7 6 4 5 4 " -"3 7 4 5 8 6 9 6 7 9 " -; - -char *VTK_VECTOR_TEXT_40 = (char *) "19 0.595731 " -"0.50857 -0.39522 0.59429 -0.39447 0.44000 -0.30784 0.51787 -0.24857 0.32530 -0.09429 " -"0.43748 -0.05429 0.26899 0.06571 0.38134 0.20286 0.23580 0.27714 0.37605 0.38000 " -"0.23848 0.41429 0.39320 0.53429 0.27177 0.59714 0.43748 0.71143 0.47216 0.80286 " -"0.36086 0.82000 0.45714 0.97936 0.59573 1.04286 0.50857 1.04395 17 2 3 4 0 3 2 3 " -"0 1 6 4 5 3 5 4 6 7 8 7 6 5 9 10 8 9 8 7 10 " -"11 12 10 9 11 12 13 15 12 11 13 14 15 13 16 15 14 17 18 16 17 " -"16 14 " -; - -char *VTK_VECTOR_TEXT_41 = (char *) "19 0.598482 " -"0.24000 -0.39447 0.33143 -0.39258 0.40616 -0.28857 0.31641 -0.24857 0.48784 -0.14000 " -"0.39681 -0.05429 0.55538 0.03143 0.45295 0.20286 0.59580 0.23714 0.59848 0.37429 " -"0.45823 0.38000 0.44723 0.49429 0.56252 0.59714 0.41714 0.64134 0.47343 0.82000 " -"0.34857 0.83301 0.37714 0.97936 0.23855 1.04286 0.32571 1.04395 17 0 1 3 2 3 1 3 " -"4 5 3 2 4 5 6 7 6 5 4 7 8 10 8 9 10 11 10 9 8 " -"7 6 11 12 13 13 14 15 12 11 9 14 13 12 15 16 17 16 15 14 16 " -"18 17 " -; - -char *VTK_VECTOR_TEXT_42 = (char *) "34 0.685300 " -"0.33143 0.58250 0.33714 0.58223 0.53714 0.58250 0.54286 0.58194 0.36213 0.61429 " -"0.25587 0.63714 0.25266 0.64286 0.62655 0.64286 0.25393 0.64857 0.43429 0.73293 " -"0.44000 0.73049 0.36715 0.78000 0.50714 0.78000 0.35429 0.78613 0.63429 0.80816 " -"0.19309 0.82571 0.68389 0.82571 0.19177 0.83143 0.68530 0.83143 0.38857 0.86213 " -"0.39523 0.86571 0.48000 0.86242 0.47660 0.86571 0.34657 0.88286 0.58857 0.90823 " -"0.22286 0.92522 0.22857 0.92848 0.64571 0.92816 0.65143 0.92675 0.49295 1.02000 " -"0.38134 1.03714 0.38550 1.04286 0.49143 1.04021 0.48571 1.04437 32 2 12 10 8 4 11 " -"8 5 4 8 6 5 4 0 1 2 3 " -"12 0 4 5 12 9 10 9 11 4 " -"19 11 21 14 24 12 26 25 17 16 18 " -"14 13 23 15 19 21 20 11 19 13 " -"33 31 30 24 21 12 12 21 9 21 11 " -"9 26 17 23 12 3 7 27 24 18 " -"13 19 23 23 17 15 20 21 22 18 24 " -"14 28 27 18 33 30 20 29 20 22 " -"29 33 20 32 33 29 " -; - -char *VTK_VECTOR_TEXT_43 = (char *) "20 0.952768 " -"0.52836 0.10571 0.64878 0.10571 0.52420 0.11143 0.65295 0.11143 0.52420 0.39714 " -"0.65295 0.39714 0.22857 0.40546 0.52000 0.40329 0.66286 0.40437 0.95168 0.40857 " -"0.22437 0.52286 0.95277 0.52286 0.22857 0.52900 0.52311 0.53429 0.65403 0.53429 " -"0.94857 0.52900 0.52528 0.82571 0.65186 0.82571 0.53143 0.82991 0.64571 0.82991 18 1 2 0 1 3 2 " -"4 2 3 5 4 3 12 6 7 14 4 " -"8 9 15 8 8 4 5 9 11 15 " -"12 7 13 6 12 10 7 4 13 14 8 " -"15 17 19 18 14 13 4 17 18 16 " -"17 16 13 17 13 14 " -; - -char *VTK_VECTOR_TEXT_44 = (char *) "23 0.432768 " -"0.30286 -0.28607 0.30857 -0.28726 0.33714 -0.27355 0.36571 -0.25275 0.27329 -0.23714 " -"0.38670 -0.23143 0.30286 -0.21582 0.39914 -0.21429 0.32115 -0.19714 0.41355 -0.18571 " -"0.33800 -0.16857 0.42327 -0.15714 0.34605 -0.14571 0.43277 -0.10000 0.35580 -0.08286 " -"0.35472 -0.07714 0.28571 -0.07295 0.34857 -0.07295 0.28000 -0.06878 0.27957 0.07714 " -"0.43168 0.07714 0.28571 0.08134 0.42857 0.08025 21 0 6 4 0 " -"1 2 0 2 6 3 6 2 8 5 10 5 7 10 6 5 8 5 6 3 10 " -"7 12 9 12 7 12 13 14 11 12 9 12 11 13 18 17 19 17 21 19 15 " -"14 13 15 13 17 21 17 22 17 20 22 18 16 17 20 17 13 " -; - -char *VTK_VECTOR_TEXT_45 = (char *) "8 0.606146 " -"0.19118 0.26000 0.19429 0.25689 0.60000 0.25580 0.60615 0.26000 0.19118 0.38571 " -"0.60615 0.38571 0.19429 0.38882 0.60000 0.38991 6 6 1 2 6 0 " -"1 6 2 7 6 4 0 7 2 3 " -"5 7 3 " -; - -char *VTK_VECTOR_TEXT_46 = (char *) "13 0.432768 " -"0.28571 -0.07295 0.42286 -0.07295 0.42857 -0.07186 0.27848 -0.06571 0.28000 -0.06878 " -"0.43277 -0.06571 0.27848 0.07143 0.43277 0.07143 0.27957 0.07714 0.43168 0.07714 " -"0.28571 0.08134 0.42286 0.08134 0.42857 0.08025 11 0 " -"3 4 3 0 1 8 6 10 5 1 2 3 1 5 6 3 5 6 7 11 6 " -"5 7 10 6 11 9 12 11 9 11 7 " -; - -char *VTK_VECTOR_TEXT_47 = (char *) "5 0.562348 " -"0.14389 -0.08857 0.14857 -0.09256 0.25004 -0.08857 0.56235 1.04286 0.46286 1.04358 3 2 0 1 4 0 2 3 " -"4 2 " -; - -char *VTK_VECTOR_TEXT_48 = (char *) "53 0.926804 " -"0.53714 -0.09009 0.59429 -0.09009 0.66857 -0.07673 0.43429 -0.06723 0.73143 -0.05070 " -"0.34286 -0.00972 0.80571 0.01025 0.54857 0.02152 0.61714 0.02891 0.30241 0.03714 " -"0.65714 0.04645 0.46857 0.05007 0.42473 0.08857 0.70286 0.08454 0.26645 0.10000 " -"0.86943 0.11143 0.39955 0.12286 0.73800 0.13429 0.23748 0.18000 0.37034 0.19714 " -"0.76252 0.20286 0.91236 0.26000 0.21866 0.26571 0.35621 0.26571 0.77823 0.28857 " -"0.34437 0.40286 0.92680 0.40286 0.20420 0.40857 0.78705 0.54000 0.20723 0.58000 " -"0.92420 0.58571 0.35277 0.64286 0.22177 0.69429 0.76571 0.72437 0.89966 0.74000 " -"0.37756 0.76286 0.74498 0.79143 0.26073 0.82571 0.85927 0.84857 0.42473 0.85429 " -"0.70439 0.85429 0.46286 0.88902 0.66286 0.89007 0.30241 0.90000 0.51009 0.91143 " -"0.58286 0.91823 0.80725 0.92857 0.77714 0.95829 0.38350 0.98000 0.71429 0.99927 " -"0.46286 1.01681 0.65714 1.01959 0.53714 1.02991 53 2 8 1 0 7 3 5 16 9 2 10 8 0 " -"1 8 7 0 8 12 16 5 11 3 7 3 12 5 15 20 17 11 12 3 13 " -"6 17 6 13 4 9 16 14 10 4 13 14 19 18 4 10 2 15 17 6 19 " -"14 16 21 24 20 23 18 19 22 25 27 24 26 28 23 22 18 21 20 15 26 " -"24 21 22 23 25 29 27 25 29 31 32 28 30 33 31 29 25 30 28 26 32 " -"35 37 46 40 36 30 34 33 32 31 35 43 39 48 43 37 35 38 36 33 38 " -"33 34 42 40 49 48 41 50 39 43 35 47 40 46 46 36 38 41 44 50 45 " -"52 44 42 51 45 41 48 39 49 40 47 50 44 52 52 45 51 42 49 51 " -; - -char *VTK_VECTOR_TEXT_49 = (char *) "11 0.708571 " -"0.58286 -0.07186 0.70857 -0.07186 0.30857 0.62908 0.31429 0.62657 0.38286 0.65641 " -"0.30785 0.75143 0.57714 0.77731 0.47429 0.85616 0.56384 0.94000 0.62857 1.02915 " -"0.70857 1.02882 9 6 0 1 2 4 5 7 5 4 2 3 4 6 " -"8 7 6 7 4 10 8 6 10 6 1 10 9 8 " -; - -char *VTK_VECTOR_TEXT_50 = (char *) "43 0.914286 " -"0.18857 -0.06878 0.91429 -0.06878 0.18748 -0.04286 0.19849 0.00857 0.91429 0.05164 " -"0.38142 0.06000 0.22943 0.07714 0.46286 0.15868 0.30286 0.17832 0.38286 0.25813 " -"0.58413 0.43143 0.78286 0.44454 0.67543 0.52286 0.85355 0.53429 0.72045 0.58000 " -"0.89756 0.62571 0.75470 0.64286 0.35168 0.70000 0.91236 0.70000 0.77295 0.71143 " -"0.21403 0.71714 0.77295 0.74571 0.22605 0.79143 0.37143 0.79804 0.90244 0.80857 " -"0.75429 0.81228 0.38902 0.83143 0.24359 0.84286 0.73143 0.84689 0.42454 0.87143 " -"0.86607 0.88857 0.68000 0.89070 0.28000 0.90629 0.49143 0.90823 0.58857 0.91866 " -"0.82857 0.93555 0.31597 0.94571 0.37714 0.98784 0.76000 0.98657 0.44571 1.01470 " -"0.69143 1.01470 0.53714 1.02991 0.62857 1.02723 41 3 2 0 3 5 6 1 5 0 5 " -"3 0 1 4 5 6 5 8 7 8 5 9 8 7 9 7 10 11 10 7 10 " -"11 12 12 11 14 16 15 18 16 18 19 13 14 11 14 13 16 21 24 25 15 " -"16 13 21 19 18 23 27 22 17 23 22 24 21 18 27 23 32 17 22 20 31 " -"42 34 30 28 25 26 32 23 40 31 38 35 28 30 36 32 26 29 36 26 34 " -"41 33 33 37 29 36 29 37 33 39 37 30 25 24 28 38 31 38 28 35 39 " -"33 41 31 40 42 41 34 42 " -; - -char *VTK_VECTOR_TEXT_51 = (char *) "68 0.927232 " -"0.52571 -0.09009 0.63429 -0.08395 0.45143 -0.07756 0.37143 -0.04498 0.74286 -0.04771 " -"0.30857 0.00132 0.81714 0.00439 0.54286 0.02152 0.60000 0.02420 0.64661 0.03714 " -"0.27429 0.03952 0.46857 0.04073 0.42857 0.06759 0.70857 0.07561 0.88213 0.08286 " -"0.23429 0.10772 0.38812 0.11714 0.74535 0.11714 0.91109 0.14571 0.77823 0.19143 " -"0.20764 0.20857 0.92723 0.22571 0.34286 0.23215 0.78437 0.27143 0.92723 0.27714 " -"0.75429 0.36430 0.89927 0.38571 0.72571 0.40132 0.86857 0.43270 0.67429 0.43927 " -"0.48000 0.45284 0.48571 0.44966 0.54857 0.46152 0.60000 0.46109 0.83429 0.46686 " -"0.72693 0.52286 0.49034 0.55714 0.49714 0.56395 0.78857 0.56473 0.58286 0.57109 " -"0.82857 0.60921 0.67429 0.61616 0.70400 0.64857 0.85294 0.65429 0.72680 0.70571 " -"0.87009 0.72286 0.35429 0.72298 0.22175 0.74571 0.72991 0.76286 0.72151 0.80286 " -"0.86244 0.80857 0.38857 0.82064 0.69143 0.85832 0.84571 0.85587 0.26241 0.87143 " -"0.43429 0.87829 0.64571 0.89641 0.48571 0.90723 0.29330 0.91714 0.60571 0.91252 " -"0.53143 0.91823 0.80384 0.92286 0.36000 0.97750 0.73143 0.98213 0.44571 1.01681 " -"0.65714 1.01470 0.52000 1.02991 0.60000 1.02723 66 3 11 " -"5 9 8 1 1 8 0 4 9 1 " -"9 4 13 7 0 8 6 13 4 17 13 " -"6 2 11 3 2 0 7 5 16 10 " -"12 5 11 10 16 15 11 2 7 16 5 " -"12 17 14 19 14 17 6 20 15 22 " -"19 18 23 22 15 16 14 18 19 21 23 " -"18 23 26 25 23 21 24 26 28 25 " -"30 32 36 25 34 27 35 32 33 35 29 " -"27 25 28 34 29 35 33 26 23 24 " -"37 36 32 39 32 35 35 27 34 37 32 " -"39 30 31 32 39 35 41 38 41 35 " -"38 42 41 40 42 38 42 40 44 40 43 " -"44 44 43 48 45 48 43 47 46 54 " -"49 48 50 50 48 45 49 53 52 63 52 " -"61 53 49 50 46 51 54 58 54 51 " -"58 55 62 62 55 64 66 57 60 61 52 " -"53 55 58 51 59 67 60 52 63 56 " -"56 65 59 55 57 64 64 57 66 65 56 " -"63 67 66 60 67 59 65 " -; - -char *VTK_VECTOR_TEXT_52 = (char *) "18 0.920000 " -"0.64571 -0.07295 0.64000 -0.06878 0.77143 -0.06878 0.77403 0.18571 0.16265 0.19143 " -"0.63429 0.18882 0.92000 0.19408 0.15891 0.31143 0.91735 0.31143 0.29653 0.31714 " -"0.63740 0.31714 0.77714 0.31403 0.16571 0.32228 0.16616 0.32286 0.63429 0.79380 " -"0.77186 1.02000 0.66857 1.02282 0.76571 1.02420 18 2 1 0 1 3 5 1 2 " -"3 3 10 5 9 4 5 4 9 7 " -"6 11 3 8 11 6 7 9 13 15 16 " -"14 9 5 10 7 13 12 13 14 16 " -"11 10 3 14 13 9 14 10 11 15 17 " -"16 15 14 11 " -; - -char *VTK_VECTOR_TEXT_53 = (char *) "54 0.932946 " -"0.52571 -0.09009 0.61714 -0.08665 0.44571 -0.07673 0.73143 -0.05179 0.35429 -0.03759 " -"0.78914 -0.01429 0.30286 0.00241 0.53714 0.02152 0.62857 0.03184 0.84115 0.03714 " -"0.46857 0.03927 0.66286 0.04645 0.26286 0.04921 0.42286 0.06759 0.71429 0.08439 " -"0.88045 0.09429 0.23343 0.10000 0.38812 0.10571 0.74535 0.12286 0.35748 0.16857 " -"0.77294 0.18000 0.91681 0.18000 0.20420 0.20857 0.34286 0.22376 0.78705 0.23714 " -"0.93295 0.27143 0.79009 0.31714 0.93252 0.33429 0.77714 0.38420 0.91681 0.42000 " -"0.34857 0.43034 0.75641 0.43143 0.23088 0.44857 0.72000 0.47868 0.40000 0.48400 " -"0.68000 0.50784 0.86902 0.51714 0.46857 0.52437 0.53143 0.53848 0.57714 0.53848 " -"0.58857 0.53621 0.60000 0.53580 0.82286 0.56972 0.38494 0.59714 0.77714 0.60535 " -"0.48571 0.64244 0.69714 0.64327 0.56571 0.65848 0.61714 0.65848 0.43891 0.87714 " -"0.44571 0.88395 0.88043 0.88857 0.88043 1.00857 0.33714 1.01182 52 7 1 " -"8 7 0 1 7 2 0 2 10 4 " -"6 13 12 3 8 1 3 11 8 10 2 " -"7 4 13 6 11 3 14 19 16 12 " -"3 5 14 9 14 5 10 13 4 22 19 " -"23 18 15 20 17 12 13 15 14 9 " -"14 15 18 19 12 17 25 26 24 20 21 " -"24 21 20 15 22 16 19 25 24 21 " -"26 25 27 29 28 26 29 26 27 43 37 " -"45 36 31 29 34 32 30 31 36 33 " -"31 28 29 32 34 43 48 47 41 45 38 " -"47 42 33 36 41 39 40 38 39 47 " -"37 38 45 47 39 41 44 33 42 43 34 " -"37 46 33 44 35 46 41 33 46 35 " -"46 48 41 32 43 53 43 49 53 49 50 " -"53 53 50 52 50 51 52 " -; - -char *VTK_VECTOR_TEXT_54 = (char *) "70 0.927232 " -"0.55429 -0.09009 0.66857 -0.08034 0.43429 -0.06213 0.75429 -0.04607 0.34857 -0.00972 " -"0.81143 -0.00439 0.59429 0.02152 0.51339 0.03143 0.85188 0.04286 0.67429 0.04645 " -"0.46286 0.05579 0.27384 0.07714 0.41714 0.09597 0.73143 0.09597 0.89355 0.11714 " -"0.38771 0.14000 0.91177 0.16857 0.77294 0.17429 0.22816 0.18571 0.36530 0.19714 " -"0.78705 0.24857 0.92680 0.25429 0.35320 0.26000 0.78665 0.30571 0.20420 0.31143 " -"0.35320 0.31143 0.92723 0.31714 0.36657 0.37429 0.77395 0.37429 0.75429 0.41841 " -"0.39179 0.42571 0.89756 0.44286 0.72000 0.46418 0.43429 0.47258 0.19891 0.50571 " -"0.33714 0.50495 0.48000 0.50213 0.66857 0.50086 0.86241 0.50571 0.55429 0.52134 " -"0.61143 0.51866 0.80403 0.56857 0.42286 0.58821 0.74286 0.60943 0.34134 0.63143 " -"0.50857 0.62823 0.68000 0.63252 0.57714 0.64134 0.21563 0.66000 0.77714 0.74697 " -"0.37502 0.75714 0.90966 0.76286 0.25673 0.80286 0.41901 0.83143 0.73143 0.85191 " -"0.45143 0.86686 0.87343 0.87714 0.30036 0.88286 0.68000 0.89514 0.50286 0.90086 " -"0.51429 0.90530 0.52000 0.90784 0.60571 0.91866 0.83846 0.92857 0.35429 0.94384 " -"0.40571 0.98150 0.76000 0.99229 0.49143 1.01748 0.68571 1.02041 0.56571 1.02991 70 " -"2 10 4 6 1 9 3 5 13 0 7 " -"2 3 9 1 1 6 0 9 3 13 " -"7 0 6 10 2 7 20 26 23 4 12 " -"11 13 8 17 4 10 12 11 19 18 " -"17 21 20 15 11 12 11 15 19 16 17 " -"14 18 22 24 8 14 17 8 13 5 " -"24 35 34 22 18 19 20 21 26 28 23 " -"26 21 17 16 24 27 35 24 22 25 " -"28 31 29 31 28 26 24 25 27 32 41 " -"37 30 35 27 34 44 48 35 33 42 " -"43 37 41 46 39 40 32 29 38 38 29 " -"31 33 35 30 33 36 42 42 36 45 " -"45 39 47 36 39 45 37 46 40 41 32 " -"38 46 37 43 47 39 46 44 34 35 " -"48 50 52 48 44 50 49 56 54 57 53 " -"64 57 52 50 54 66 58 51 56 49 " -"62 69 61 53 57 50 61 59 60 59 65 " -"55 65 64 55 58 68 62 55 64 53 " -"66 54 63 63 54 56 65 59 67 69 62 " -"68 67 59 61 69 67 61 68 58 66 " -; - -char *VTK_VECTOR_TEXT_55 = (char *) "17 0.923788 " -"0.37143 -0.07186 0.50286 -0.07186 0.36723 -0.06571 0.37335 0.02000 0.52991 0.11143 " -"0.40379 0.18571 0.59787 0.35143 0.47387 0.41429 0.66857 0.51873 0.53355 0.55143 " -"0.63384 0.72857 0.80893 0.76286 0.74359 0.88286 0.21714 0.88546 0.92379 0.91143 " -"0.21403 1.00857 0.92311 1.00857 15 3 0 1 2 0 3 3 4 5 4 3 1 6 7 5 6 5 4 9 " -"7 6 10 9 8 8 9 6 10 11 12 11 10 8 15 13 12 12 14 16 15 " -"12 16 11 14 12 " -; - -char *VTK_VECTOR_TEXT_56 = (char *) "83 0.926804 " -"0.53143 -0.08966 0.62857 -0.08665 0.45143 -0.07605 0.73714 -0.05641 0.38857 -0.05343 " -"0.34286 -0.02616 0.79429 -0.02250 0.28571 0.02445 0.58857 0.02152 0.50857 0.02823 " -"0.85258 0.03143 0.66937 0.04286 0.45143 0.05070 0.71429 0.07296 0.41143 0.07868 " -"0.24000 0.09016 0.89927 0.10571 0.37669 0.12286 0.76613 0.14000 0.21462 0.15714 " -"0.35849 0.16286 0.92109 0.17429 0.78705 0.22000 0.34437 0.22571 0.20420 0.27143 " -"0.92680 0.27143 0.78437 0.28286 0.34748 0.28857 0.77143 0.32947 0.91470 0.33429 " -"0.21714 0.34118 0.37502 0.36286 0.73296 0.39143 0.89057 0.39143 0.24359 0.40286 " -"0.41883 0.41429 0.69143 0.42722 0.27275 0.44286 0.85714 0.43841 0.46286 0.44371 " -"0.50286 0.45748 0.63429 0.45470 0.58286 0.46420 0.80507 0.48286 0.33143 0.49007 " -"0.40456 0.52286 0.72693 0.52286 0.32000 0.57616 0.54857 0.57580 0.62286 0.58319 " -"0.82082 0.58571 0.49714 0.58657 0.66286 0.60073 0.28527 0.61429 0.44571 0.61582 " -"0.70439 0.63714 0.85759 0.63714 0.25756 0.67143 0.72657 0.67143 0.39849 0.68286 " -"0.87470 0.68286 0.74134 0.72857 0.38705 0.73429 0.88109 0.76857 0.24764 0.77429 " -"0.73395 0.79714 0.39470 0.80286 0.87177 0.82000 0.71641 0.83714 0.27216 0.86571 " -"0.44000 0.87296 0.84486 0.88286 0.66286 0.89179 0.48000 0.90086 0.61714 0.91184 " -"0.54286 0.91823 0.31846 0.93429 0.80571 0.93555 0.38286 0.98616 0.72000 0.99800 " -"0.43429 1.01008 0.53143 1.02991 0.61714 1.02723 85 0 " -"9 2 12 4 2 1 8 0 6 11 3 5 14 7 9 0 8 8 1 11 4 " -"12 5 13 11 6 1 3 11 12 2 9 5 12 14 13 10 18 7 17 15 10 " -"13 6 15 20 19 7 14 17 18 16 22 16 18 10 20 15 17 19 23 24 16 " -"21 22 22 25 26 23 19 20 24 27 30 25 22 21 27 24 23 31 34 30 31 " -"37 34 29 28 26 31 30 27 29 26 25 33 28 29 28 33 32 36 32 43 37 " -"31 44 40 45 39 44 39 45 43 32 38 35 44 31 42 48 40 44 35 39 41 " -"46 42 36 46 41 32 33 38 48 42 49 46 36 43 48 45 40 42 46 49 51 " -"45 48 49 46 52 47 54 53 52 46 55 53 59 57 45 54 47 45 51 54 50 " -"55 46 59 53 54 50 58 55 58 50 61 57 62 64 61 63 65 56 61 50 57 " -"59 62 60 61 56 64 66 69 63 67 65 64 62 66 63 61 60 71 68 65 76 " -"69 66 72 68 77 71 65 67 76 70 78 70 76 66 74 82 75 80 78 70 79 " -"72 77 74 72 79 80 73 75 80 75 81 68 71 77 73 80 70 82 81 75 82 " -"74 79 " -; - -char *VTK_VECTOR_TEXT_57 = (char *) "72 0.927232 " -"0.50286 -0.09009 0.56000 -0.09009 0.42857 -0.07673 0.64571 -0.07395 0.36000 -0.04771 " -"0.74286 -0.02616 0.28759 0.01429 0.51429 0.02152 0.57143 0.02420 0.80115 0.02571 " -"0.47429 0.02891 0.42857 0.05007 0.64000 0.04943 0.24930 0.07714 0.39314 0.08286 " -"0.85229 0.10000 0.70902 0.11143 0.37057 0.12286 0.22177 0.17429 0.34857 0.18947 " -"0.75109 0.19714 0.89395 0.20286 0.75429 0.20739 0.75681 0.21429 0.90966 0.27143 " -"0.50286 0.30152 0.42857 0.31605 0.61714 0.31462 0.37714 0.33787 0.70286 0.35759 " -"0.78705 0.37429 0.32000 0.37846 0.58286 0.42152 0.50286 0.42891 0.63429 0.43184 " -"0.78286 0.43630 0.92723 0.43714 0.26286 0.44350 0.45143 0.45107 0.68571 0.45750 " -"0.41587 0.47714 0.23787 0.48857 0.74498 0.52286 0.36359 0.55143 0.21522 0.55714 " -"0.92680 0.56286 0.76571 0.57009 0.34437 0.63143 0.77823 0.63714 0.20462 0.69429 " -"0.77866 0.69429 0.91236 0.70000 0.35429 0.74118 0.76571 0.76404 0.21756 0.77429 " -"0.38286 0.80921 0.87343 0.82571 0.40759 0.84286 0.72571 0.84118 0.24527 0.84857 " -"0.69143 0.87527 0.84000 0.88221 0.47429 0.89641 0.28571 0.90975 0.63429 0.90784 " -"0.54857 0.91866 0.33143 0.95527 0.76000 0.96331 0.39629 0.99714 0.68571 1.00437 " -"0.49714 1.02723 0.57714 1.02991 72 3 8 1 2 11 4 0 7 2 " -"8 3 12 4 14 6 0 1 8 6 17 " -"13 10 2 7 7 0 8 5 12 3 " -"12 5 16 2 10 11 4 11 14 5 9 " -"16 18 13 19 16 15 20 15 23 20 " -"6 14 17 13 17 19 21 23 15 22 20 " -"23 23 24 30 16 9 15 23 21 24 " -"25 32 26 27 32 25 38 28 26 43 41 " -"37 34 29 39 33 26 32 29 34 27 " -"30 36 35 34 32 27 36 30 24 28 38 " -"31 31 38 37 35 39 29 38 26 33 " -"39 35 42 42 35 36 40 37 38 44 41 " -"43 42 36 46 44 47 49 43 37 40 " -"48 46 45 36 45 46 51 50 48 52 54 " -"49 47 44 43 50 51 53 51 48 45 " -"59 54 52 59 55 63 52 49 47 53 61 " -"58 56 53 51 55 59 52 53 56 61 " -"66 63 57 55 57 63 62 68 57 58 67 " -"60 67 58 61 68 66 57 60 69 64 " -"68 62 70 60 67 69 64 71 65 65 70 " -"62 70 65 71 64 69 71 " -; - -char *VTK_VECTOR_TEXT_58 = (char *) "14 0.432768 " -"0.28571 -0.07295 0.42857 -0.07186 0.28000 -0.06878 0.43277 -0.06571 0.27957 0.07714 " -"0.28571 0.08134 0.42857 0.08025 0.27957 0.57429 0.28571 0.57009 0.43168 0.57429 " -"0.27848 0.71714 0.43277 0.71714 0.28265 0.72286 0.42857 0.72329 10 " -"2 5 4 2 0 5 0 3 5 6 5 " -"3 0 1 3 7 8 10 10 11 13 " -"9 10 8 12 10 13 11 10 9 " -; - -char *VTK_VECTOR_TEXT_59 = (char *) "18 0.432768 " -"0.30857 -0.28726 0.36571 -0.25275 0.27323 -0.23714 0.39543 -0.22000 0.32384 -0.19143 " -"0.33756 -0.16857 0.42327 -0.15714 0.43277 -0.10000 0.35472 -0.07714 0.28571 -0.07295 " -"0.34857 -0.07295 0.28000 -0.06878 0.27957 0.07714 0.43168 0.07714 0.27957 0.57429 " -"0.43168 0.57429 0.28265 0.72286 0.42857 0.72329 14 2 1 4 5 4 3 0 1 " -"2 5 6 8 3 4 1 6 5 3 " -"6 7 8 11 10 12 12 10 13 8 7 " -"10 11 9 10 13 10 7 17 16 15 " -"15 16 14 " -; - -char *VTK_VECTOR_TEXT_60 = (char *) "11 0.952690 " -"0.94857 0.09939 0.95269 0.10571 0.95236 0.22571 0.22894 0.40857 0.38919 0.46571 " -"0.38919 0.47143 0.22748 0.52857 0.23192 0.53429 0.95098 0.70571 0.95216 0.83143 " -"0.94857 0.83523 9 4 0 2 5 7 6 4 3 0 0 1 2 7 " -"8 10 4 5 3 5 6 3 8 9 10 7 5 8 " -; - -char *VTK_VECTOR_TEXT_61 = (char *) "12 0.952768 " -"0.22857 0.23975 0.94857 0.23975 0.22437 0.35714 0.95277 0.35714 0.22857 0.36329 " -"0.94857 0.36329 0.22857 0.57385 0.94857 0.57385 0.22437 0.58000 0.95277 0.58000 " -"0.22857 0.69740 0.94857 0.69740 8 0 4 " -"2 0 1 5 4 0 5 3 5 1 " -"11 7 9 10 6 7 10 7 11 8 6 " -"10 " -; - -char *VTK_VECTOR_TEXT_62 = (char *) "11 0.952360 " -"0.23429 0.09914 0.22857 0.10169 0.22748 0.22571 0.23192 0.23143 0.95116 0.40857 " -"0.79073 0.46571 0.79073 0.47143 0.95236 0.52857 0.22897 0.70571 0.22857 0.83287 " -"0.23429 0.83563 9 1 0 2 3 2 0 3 0 5 4 7 5 4 " -"5 0 6 5 7 6 10 8 8 10 9 10 6 7 " -; - -char *VTK_VECTOR_TEXT_63 = (char *) "45 0.918074 " -"0.47429 -0.07186 0.62021 -0.07143 0.47118 0.07714 0.62329 0.07714 0.49979 0.19714 " -"0.62021 0.19714 0.49563 0.20286 0.49563 0.27714 0.63681 0.31714 0.50816 0.34571 " -"0.65714 0.36350 0.53669 0.41429 0.70857 0.42384 0.57868 0.47143 0.82857 0.53597 " -"0.86902 0.58571 0.73258 0.62000 0.90437 0.65429 0.76086 0.66000 0.77522 0.70000 " -"0.91580 0.70000 0.34857 0.71338 0.21034 0.73429 0.77866 0.75143 0.91807 0.76857 " -"0.22605 0.80857 0.76571 0.80375 0.38286 0.82144 0.73714 0.85191 0.25098 0.87143 " -"0.89143 0.86730 0.43597 0.88857 0.86812 0.90571 0.67429 0.90616 0.48571 0.91800 " -"0.62857 0.92538 0.29296 0.93429 0.54857 0.93277 0.81143 0.96670 0.35429 0.98821 " -"0.76571 0.99800 0.44571 1.02891 0.69714 1.02680 0.53143 1.04395 0.60000 1.04437 41 2 1 3 2 0 1 7 6 4 7 4 5 8 9 7 11 10 13 8 " -"7 5 8 10 11 9 8 11 13 12 16 12 13 10 14 16 12 14 15 16 16 " -"15 18 17 18 15 17 23 19 17 19 18 20 23 17 29 27 36 26 32 28 21 " -"25 22 26 23 24 27 29 25 24 23 20 36 31 39 28 40 33 30 26 24 35 " -"44 37 31 36 27 27 25 21 31 34 41 42 33 40 28 38 40 39 31 41 38 " -"28 32 26 30 32 42 35 33 41 34 43 43 37 44 34 37 43 44 35 42 " -; - -char *VTK_VECTOR_TEXT_64 = (char *) "114 1.632597 " -"0.92571 -0.39563 1.16571 -0.38109 0.74857 -0.37236 0.65143 -0.34613 1.33143 -0.33070 " -"0.54286 -0.29914 0.86286 -0.27866 1.06286 -0.28134 1.45650 -0.26000 0.73714 -0.25387 " -"1.21143 -0.25387 0.43429 -0.22384 0.62286 -0.21216 1.32144 -0.20857 1.55582 -0.17429 " -"0.53714 -0.16099 0.52571 -0.15258 0.53143 -0.15669 0.33714 -0.11650 1.45143 -0.11561 " -"0.46286 -0.09260 0.80000 -0.07295 1.20571 -0.07252 1.09714 -0.06891 0.71429 -0.06252 " -"1.49714 -0.06187 1.63260 -0.06000 0.29629 -0.04857 1.29714 -0.04498 0.90857 -0.03629 " -"1.03384 -0.02571 0.62857 -0.01582 0.40486 -0.00857 0.59429 0.01873 1.41143 0.03296 " -"0.82857 0.03907 0.77714 0.04327 1.01143 0.04414 1.20000 0.05050 1.16989 0.06571 " -"1.25143 0.06086 0.90857 0.06821 0.72000 0.07561 0.54771 0.09429 1.15580 0.09429 " -"0.24420 0.10000 0.35748 0.11143 0.96000 0.10725 0.68527 0.11714 1.33841 0.11714 " -"1.51579 0.15714 0.66177 0.17429 1.41355 0.20286 1.03514 0.20857 0.65295 0.23143 " -"0.22437 0.23714 0.51277 0.23714 0.33563 0.24857 1.45355 0.27714 1.07177 0.31143 " -"1.58478 0.31143 0.65966 0.32857 1.48319 0.36857 0.53184 0.39714 0.23277 0.40286 " -"0.34478 0.40857 1.60420 0.42571 1.08420 0.44286 0.71514 0.48857 0.25184 0.49429 " -"1.49295 0.49429 0.57229 0.50000 1.60109 0.52857 1.05714 0.54144 0.75846 0.55143 " -"0.38645 0.55714 1.47681 0.58571 1.01143 0.59527 0.81714 0.60331 1.58605 0.60857 " -"1.12878 0.61429 0.65714 0.62418 0.86286 0.62319 0.96571 0.62151 0.92571 0.62991 " -"0.42857 0.64350 1.44571 0.66730 0.32359 0.67714 1.06048 0.68286 0.74857 0.69641 " -"1.15429 0.71588 1.28235 0.71714 1.00571 0.71800 0.82857 0.73109 0.92000 0.74152 " -"1.52657 0.75143 0.51275 0.75714 0.37669 0.76286 1.38286 0.76132 0.59493 0.82571 " -"1.30857 0.82821 1.45561 0.84857 0.47429 0.87296 0.73143 0.89681 1.18286 0.89580 " -"1.08571 0.92395 1.37143 0.92400 0.92000 0.93580 0.58286 0.95188 1.30857 0.96371 " -"0.71429 1.00899 1.18286 1.01470 0.92000 1.04437 1.01143 1.04395 114 0 6 2 1 7 0 6 0 7 " -"7 1 10 2 9 3 3 12 5 9 2 " -"6 10 4 13 4 10 1 15 5 12 " -"5 15 11 13 8 19 12 3 9 8 13 " -"4 11 20 18 11 15 16 17 16 15 " -"14 19 8 26 25 14 20 11 16 22 38 " -"23 25 19 14 23 39 30 30 39 37 " -"27 46 45 18 32 27 32 18 20 21 36 " -"24 35 29 41 24 42 31 29 35 21 " -"22 28 40 38 22 40 34 49 40 33 31 " -"48 36 21 35 37 47 41 33 48 43 " -"43 51 56 44 37 39 34 40 28 47 37 " -"53 50 52 34 38 39 23 52 49 34 " -"37 44 53 27 32 46 42 24 36 48 31 " -"42 37 41 29 45 57 55 53 44 59 " -"51 54 56 52 50 58 58 60 62 43 48 " -"51 45 46 57 56 61 63 64 55 57 " -"91 80 44 60 58 50 62 66 70 56 54 " -"61 44 80 67 59 44 67 71 63 61 " -"64 65 69 67 80 73 65 64 57 66 62 " -"60 68 71 61 71 68 81 69 75 87 " -"72 70 66 74 81 68 77 73 80 70 79 " -"76 75 69 65 83 77 88 87 85 97 " -"81 74 89 89 78 93 86 76 79 70 72 " -"79 74 78 89 88 77 80 75 85 87 " -"82 84 94 91 90 80 86 95 98 78 82 " -"93 92 83 88 93 82 94 84 83 92 " -"94 84 92 97 96 102 95 86 79 102 99 " -"108 95 101 98 96 97 85 96 99 102 " -"98 101 100 103 108 99 100 109 104 106 100 " -"101 108 103 110 105 113 107 100 106 109 " -"104 111 105 107 112 110 111 104 109 113 105 " -"111 112 107 113 107 110 103 " -; - -char *VTK_VECTOR_TEXT_65 = (char *) "13 1.155731 " -"0.14455 -0.07143 1.00000 -0.07252 1.15573 -0.07143 0.29143 -0.07103 0.40981 0.25429 " -"0.86857 0.25754 0.45714 0.37713 0.82478 0.38000 0.45462 0.38571 0.58538 0.73429 " -"0.63429 0.90068 0.56000 1.02454 0.71429 1.02644 13 5 " -"1 2 0 8 11 6 4 5 12 10 7 0 3 4 0 4 8 6 5 7 6 " -"8 4 7 5 2 8 9 11 9 10 11 12 7 2 11 10 12 " -; - -char *VTK_VECTOR_TEXT_66 = (char *) "48 1.081090 " -"0.25714 -0.07186 0.78286 -0.06723 0.86857 -0.04899 0.93714 -0.02045 1.00725 0.03714 " -"0.39957 0.06000 0.73143 0.05621 0.80571 0.06891 1.04213 0.08857 0.87555 0.10571 " -"1.06437 0.14000 0.91070 0.15143 1.08109 0.22000 0.93295 0.22571 0.93252 0.26571 " -"1.07177 0.32286 0.90857 0.34064 1.04616 0.38571 0.86857 0.38686 0.79429 0.42252 " -"0.39957 0.43143 1.01296 0.43143 0.69714 0.43563 0.97143 0.46686 0.88197 0.51143 " -"0.40571 0.56437 0.72000 0.56705 0.39848 0.57429 0.96956 0.58571 0.80571 0.58930 " -"0.84686 0.62000 0.99641 0.62571 0.86943 0.65429 1.02437 0.70571 0.88420 0.71143 " -"1.02665 0.76857 0.87429 0.79232 1.01673 0.82000 0.84000 0.84984 0.77714 0.88538 " -"0.98607 0.88857 0.39957 0.89429 0.71429 0.89580 0.93143 0.95296 0.85714 0.99756 " -"0.80000 1.01470 0.25714 1.02615 0.70857 1.02680 50 1 6 0 2 7 1 " -"0 20 46 7 2 9 1 7 6 20 27 " -"46 9 4 11 4 9 3 2 3 9 " -"11 10 13 8 11 4 10 11 8 12 13 " -"10 14 17 16 14 15 17 16 21 18 " -"14 13 12 15 14 12 23 18 21 5 0 " -"6 19 26 22 18 24 19 16 17 21 " -"24 18 23 26 19 29 19 24 29 25 22 " -"26 22 25 20 30 29 24 32 28 31 " -"28 32 30 32 31 34 0 5 20 34 35 " -"36 33 34 31 28 30 24 36 40 38 " -"38 44 39 35 37 36 34 33 35 25 27 " -"20 27 41 46 40 36 37 43 38 40 " -"39 45 42 42 47 41 38 43 44 45 39 " -"44 47 46 41 47 42 45 " -; - -char *VTK_VECTOR_TEXT_67 = (char *) "56 1.186046 " -"0.69143 -0.08966 0.80000 -0.08705 0.60000 -0.07823 0.50857 -0.05070 0.93143 -0.05216 " -"0.45714 -0.02486 1.00000 -0.01473 0.39597 0.02000 0.69714 0.03563 0.74857 0.03563 " -"0.62286 0.04899 0.82286 0.04899 1.08000 0.05597 0.57143 0.06784 0.88000 0.07229 " -"0.32571 0.10064 0.93143 0.10759 0.49143 0.11901 1.13800 0.14000 0.45600 0.15714 " -"0.28930 0.16286 0.99641 0.18571 0.41502 0.22571 1.18605 0.27714 0.24319 0.28857 " -"1.04571 0.31105 0.38244 0.32857 0.22748 0.36286 0.36723 0.44286 0.21866 0.52857 " -"0.36991 0.55714 0.22705 0.60857 1.02857 0.69469 0.40657 0.71143 1.16694 0.72857 " -"0.26286 0.74089 0.44187 0.78000 1.13927 0.80857 0.97143 0.80914 0.48000 0.82725 " -"0.31750 0.84286 0.93714 0.85011 0.53143 0.86784 0.89143 0.88331 1.07582 0.90571 " -"0.64000 0.91252 0.64571 0.91335 0.65714 0.91563 0.38286 0.91868 0.78857 0.91823 " -"1.00571 0.96902 0.50286 0.99756 0.93143 1.01070 0.58286 1.02680 0.70286 1.04705 " -"0.80000 1.04437 54 " -"1 9 0 0 8 2 14 6 16 4 14 " -"11 24 20 22 7 17 15 2 10 3 " -"8 10 2 9 1 11 0 9 8 4 11 " -"1 3 13 5 12 16 6 10 13 3 " -"5 13 7 7 13 17 22 20 15 16 12 " -"21 14 4 6 19 15 17 23 25 18 " -"22 15 19 25 21 18 18 21 12 27 28 " -"29 27 24 26 26 24 22 28 27 26 " -"29 30 31 30 29 28 33 35 31 35 33 " -"40 33 31 30 34 37 32 48 42 51 " -"36 40 33 40 36 48 38 44 41 44 38 " -"37 32 37 38 48 39 42 36 39 48 " -"54 53 47 45 51 42 49 43 52 50 41 " -"44 47 45 46 41 50 43 45 53 51 " -"49 54 47 53 45 47 49 55 54 55 49 " -"52 52 43 50 " -; - -char *VTK_VECTOR_TEXT_68 = (char *) "34 1.167232 " -"0.26286 -0.07186 0.70286 -0.07252 0.80000 -0.06109 0.89714 -0.03355 0.99555 0.02571 " -"0.40528 0.06000 0.72571 0.05891 1.03582 0.06571 0.79547 0.07143 0.88000 0.10893 " -"1.08150 0.12857 0.92115 0.14571 0.96657 0.21429 1.13966 0.26571 0.99470 0.28857 " -"1.16420 0.39714 1.01823 0.43714 1.16723 0.52857 1.01823 0.53429 1.15277 0.64286 " -"1.00000 0.65848 0.97714 0.72375 1.11216 0.77429 0.94286 0.78057 0.87429 0.84902 " -"1.06607 0.85429 0.81714 0.87865 0.40528 0.89429 0.69143 0.89807 0.97714 0.94616 " -"0.90857 0.98657 0.81143 1.01580 0.26286 1.02615 0.70286 1.02680 34 2 6 1 5 0 1 " -"8 3 9 3 8 2 0 27 32 6 2 " -"8 5 1 6 4 7 11 4 9 3 " -"9 4 11 11 10 12 11 7 10 13 14 " -"12 14 15 16 13 12 10 16 17 18 " -"14 13 15 18 19 20 17 16 15 18 17 " -"19 22 21 20 21 22 23 29 24 23 " -"22 20 19 26 24 30 0 5 27 25 23 " -"22 29 23 25 30 24 29 26 31 28 " -"31 26 30 33 32 27 28 33 27 33 28 " -"31 " -; - -char *VTK_VECTOR_TEXT_69 = (char *) "15 1.080000 " -"0.26857 -0.07186 1.08000 -0.06878 1.08000 0.05164 0.41100 0.06000 0.41100 0.42571 " -"1.01143 0.43100 1.01563 0.55143 0.41714 0.55866 1.01143 0.55757 0.40991 0.56857 " -"0.41100 0.89429 1.05143 0.89957 1.05563 1.02000 0.26857 1.02615 1.05143 1.02615 13 0 4 13 1 3 0 1 2 3 0 " -"3 4 7 5 8 5 7 4 6 8 5 4 9 13 7 9 4 9 10 13 11 " -"14 10 14 13 10 12 14 11 " -; - -char *VTK_VECTOR_TEXT_70 = (char *) "12 1.005714 " -"0.26857 -0.07186 0.40571 -0.07186 0.40991 0.42000 0.41714 0.42723 0.92615 0.43143 " -"0.92615 0.55143 0.41714 0.55563 0.40991 0.56286 0.41100 0.89429 1.00571 0.90265 " -"1.00571 1.02307 0.26857 1.02615 10 0 2 " -"11 2 7 11 2 0 1 6 4 5 " -"4 6 3 3 6 2 7 2 6 7 8 " -"11 11 8 10 8 9 10 " -; - -char *VTK_VECTOR_TEXT_71 = (char *) "60 1.234286 " -"0.82286 -0.08966 0.65714 -0.07866 0.93143 -0.07335 0.56571 -0.05387 1.05143 -0.03355 " -"0.48000 -0.01514 1.12000 0.00073 0.74286 0.03866 0.83429 0.04177 0.38857 0.05044 " -"0.65143 0.05470 0.92571 0.06319 1.23260 0.07714 0.34857 0.09302 0.54286 0.10150 " -"1.03429 0.11229 0.50286 0.13044 1.09252 0.15714 0.44421 0.19714 0.27429 0.21629 " -"0.24252 0.31143 0.39320 0.31143 0.77714 0.36243 1.09143 0.35773 0.22748 0.39714 " -"0.37605 0.40286 0.77295 0.48286 0.77714 0.48900 1.23429 0.48900 0.22437 0.51143 " -"0.37295 0.51714 0.23320 0.59143 0.39748 0.65429 1.09143 0.68617 1.08571 0.69099 " -"0.42073 0.71714 1.21977 0.72286 0.27387 0.73429 1.06286 0.75301 0.30645 0.80286 " -"0.47616 0.80286 1.02286 0.82127 1.18498 0.82571 0.54286 0.86150 0.34857 0.86629 " -"0.94286 0.88371 1.14857 0.88793 0.61143 0.89580 0.86286 0.91184 0.40168 0.92286 " -"0.70857 0.91866 0.80000 0.92134 1.09714 0.94384 0.45714 0.96436 0.53714 1.00498 " -"1.00000 1.00371 0.93714 1.02613 0.62857 1.03252 0.73714 1.04705 0.84571 1.04395 58 0 7 1 14 5 3 5 14 " -"9 2 8 0 1 10 3 0 8 7 " -"8 2 11 18 13 9 17 6 12 10 1 " -"7 4 11 2 13 18 19 23 17 12 " -"15 6 17 4 6 15 16 9 14 11 4 " -"15 14 3 10 19 21 20 18 9 16 " -"30 31 29 23 27 22 25 24 20 22 27 " -"26 21 19 18 25 20 21 23 28 27 " -"28 23 12 29 24 25 30 29 25 31 32 " -"37 38 33 36 37 32 39 32 31 30 " -"35 39 32 34 33 38 39 40 44 38 46 " -"41 38 42 46 40 39 35 44 40 49 " -"53 43 54 43 49 40 42 38 36 43 47 " -"54 52 41 46 41 52 45 43 53 49 " -"54 47 57 50 57 47 45 56 48 55 45 " -"52 48 59 51 57 50 58 50 51 58 " -"56 45 55 58 51 59 59 48 56 " -; - -char *VTK_VECTOR_TEXT_72 = (char *) "16 1.125714 " -"0.26857 -0.07186 0.40571 -0.07186 0.98857 -0.07295 0.98286 -0.06878 1.12571 -0.06878 " -"0.40991 0.43714 0.41714 0.44437 0.97714 0.44329 0.41714 0.57277 0.97714 0.57385 " -"0.40991 0.58000 0.98550 1.02571 1.12571 1.02307 0.26857 1.02615 0.40571 1.02615 " -"1.12000 1.02723 14 4 9 7 0 5 13 5 10 13 " -"5 0 1 8 7 9 9 4 11 10 5 " -"8 6 8 5 4 3 2 7 8 6 " -"14 13 10 12 15 11 3 4 7 4 12 " -"11 " -; - -char *VTK_VECTOR_TEXT_73 = (char *) "4 0.428571 " -"0.42592 -0.07143 0.28571 -0.06878 0.28836 1.02571 0.42857 1.02307 2 1 3 2 3 1 0 " -; - -char *VTK_VECTOR_TEXT_74 = (char *) "27 0.790089 " -"0.45143 -0.09009 0.50857 -0.09009 0.37714 -0.07756 0.58404 -0.07714 0.33143 -0.06086 " -"0.64000 -0.05641 0.26489 -0.01429 0.71429 -0.00117 0.46286 0.03866 0.53714 0.04706 " -"0.74902 0.04857 0.41714 0.04899 0.57772 0.06571 0.21143 0.06772 0.37016 0.07714 " -"0.34498 0.11143 0.77252 0.11143 0.62371 0.11714 0.18705 0.16286 0.32462 0.17429 " -"0.64420 0.22571 0.79009 0.23143 0.18546 0.23714 0.31472 0.25429 0.64836 1.02571 " -"0.78857 1.02307 0.78286 1.02723 25 10 " -"12 7 4 2 11 0 1 8 3 8 1 11 2 8 0 8 2 8 3 9 9 " -"3 12 4 14 6 7 12 5 3 5 12 6 15 13 12 10 17 14 4 11 13 " -"19 18 6 14 15 22 19 23 17 16 20 13 15 19 16 17 10 22 18 19 21 " -"20 16 20 21 24 25 26 24 21 25 24 " -; - -char *VTK_VECTOR_TEXT_75 = (char *) "17 1.155019 " -"0.25714 -0.07186 0.39429 -0.07186 1.15502 -0.07143 0.97143 -0.07140 0.89527 0.28857 " -"0.89143 0.29371 0.89098 0.29429 0.39848 0.30000 0.57714 0.47913 0.40000 0.49126 " -"0.68956 0.56857 0.68571 0.57371 0.68527 0.57429 1.13216 1.02571 0.25714 1.02615 " -"0.39429 1.02615 0.94857 1.02680 15 0 9 14 0 7 9 3 10 8 3 6 10 9 8 16 4 5 6 7 " -"0 1 3 4 6 16 8 12 10 11 12 4 3 2 8 10 12 9 7 8 13 " -"16 12 15 14 9 " -; - -char *VTK_VECTOR_TEXT_76 = (char *) "7 0.941339 " -"0.25714 -0.07186 0.93714 -0.07186 0.94134 0.04857 0.39957 0.06000 0.93714 0.05472 " -"0.25714 1.02615 0.39429 1.02615 5 3 0 1 0 3 5 2 4 1 3 1 4 6 5 3 " -; - -char *VTK_VECTOR_TEXT_77 = (char *) "19 1.302857 " -"0.39164 -0.07143 0.71429 -0.07186 1.17143 -0.07295 0.25714 -0.06878 0.84000 -0.06947 " -"1.16571 -0.06878 1.30286 -0.06878 0.78286 0.09751 0.78857 0.09751 1.16000 0.83018 " -"0.40000 0.84467 0.52151 0.88286 0.52000 0.88739 0.51748 0.89429 0.47580 1.02000 " -"0.25979 1.02571 1.11429 1.02285 1.30286 1.02307 0.46857 1.02680 17 3 10 15 5 6 9 6 " -"5 2 1 11 10 4 8 1 1 7 11 9 16 8 1 8 7 9 8 4 10 " -"18 15 13 11 12 10 3 0 10 13 18 16 9 17 10 11 13 13 14 18 6 " -"17 9 " -; - -char *VTK_VECTOR_TEXT_78 = (char *) "14 1.125714 " -"0.26286 -0.07186 0.39429 -0.07186 0.98286 -0.07295 1.12571 -0.06878 0.98286 0.17231 " -"0.72045 0.31143 0.71678 0.31714 0.72000 0.31207 0.40000 0.78092 0.99122 1.02571 " -"1.12571 1.02307 0.26286 1.02615 0.40571 1.02644 1.12000 1.02723 12 " -"0 8 11 8 0 1 4 3 9 3 4 " -"2 4 5 2 6 7 5 12 6 4 " -"4 6 5 6 12 8 10 13 9 8 12 " -"11 3 10 9 " -; - -char *VTK_VECTOR_TEXT_79 = (char *) "63 1.267054 " -"0.70286 -0.08966 0.77714 -0.08966 0.61143 -0.07605 0.89714 -0.06823 0.97143 -0.04073 " -"0.49143 -0.03229 1.05650 0.00857 0.42286 0.01107 0.70857 0.03605 0.77143 0.03605 " -"0.63429 0.04899 0.84571 0.04899 1.12725 0.07143 0.35044 0.07714 0.92716 0.08286 " -"0.54857 0.08535 0.49143 0.12704 1.17465 0.13429 1.01296 0.15143 0.28571 0.17016 " -"0.43955 0.18571 1.21184 0.20286 0.40784 0.23714 1.08086 0.26000 1.24613 0.30000 " -"0.23109 0.31143 1.10665 0.34571 0.36764 0.36857 0.21295 0.43143 1.11848 0.43714 " -"1.26705 0.43714 0.36193 0.51143 1.11848 0.51714 0.21563 0.54571 0.36991 0.59143 " -"1.25522 0.61429 1.09966 0.63714 0.23236 0.64857 1.23681 0.68857 1.07070 0.71714 " -"0.41143 0.73016 0.26645 0.75143 1.20486 0.76857 0.45561 0.79714 1.02286 0.79270 " -"0.98857 0.82956 0.31429 0.83650 1.16045 0.84286 0.53143 0.86150 0.92000 0.87800 " -"0.35582 0.88857 0.63429 0.90764 0.85143 0.90613 1.10286 0.90956 0.71429 0.92134 " -"0.79429 0.91866 0.43493 0.95714 1.04000 0.95964 0.52000 1.00498 0.96000 1.00327 " -"0.89714 1.02613 0.63429 1.03866 0.77714 1.04705 63 0 8 2 1 9 0 8 10 2 2 10 5 9 1 11 5 " -"16 7 11 3 14 3 11 1 3 4 14 6 14 4 7 16 13 10 15 5 0 " -"9 8 16 5 15 14 6 18 13 20 19 12 18 6 18 17 23 17 21 23 20 " -"22 19 18 12 17 23 21 26 25 19 22 13 16 20 25 27 28 27 25 22 21 " -"24 26 30 29 26 32 35 36 30 26 24 33 34 37 32 29 30 28 31 33 31 " -"28 27 34 33 31 36 38 39 35 32 30 41 37 34 38 42 39 41 40 46 35 " -"38 36 39 47 44 40 43 46 53 45 44 46 43 50 45 57 49 40 41 34 56 " -"50 43 49 59 52 48 56 43 57 45 53 53 44 47 56 48 58 39 42 47 58 " -"51 61 59 49 57 51 58 48 55 52 60 62 54 55 59 60 52 61 54 62 54 " -"61 51 62 55 60 " -; - -char *VTK_VECTOR_TEXT_80 = (char *) "31 1.098661 " -"0.26286 -0.07186 0.40000 -0.07186 0.40420 0.36857 0.41143 0.37580 0.73714 0.37621 " -"0.88571 0.40034 0.98343 0.44857 0.41143 0.50420 0.72571 0.50420 0.40420 0.51143 " -"1.04045 0.51143 0.82947 0.52286 0.88571 0.55296 0.91678 0.58571 1.08252 0.59714 " -"0.93966 0.63143 1.09866 0.68286 0.94966 0.72857 0.93355 0.79143 1.08530 0.80857 " -"0.90857 0.83270 0.86857 0.86893 1.05927 0.87143 0.40528 0.89429 0.82286 0.88899 " -"0.74857 0.89807 1.02439 0.92286 0.96000 0.97641 0.89143 1.00538 0.26286 1.02615 " -"0.74286 1.02680 31 0 9 29 0 2 9 2 7 9 7 3 8 12 11 5 5 11 4 4 " -"8 3 3 7 2 2 0 1 11 8 4 13 12 6 10 13 6 6 12 5 14 " -"15 10 15 14 17 13 10 15 16 17 14 17 19 18 19 17 16 18 19 20 20 " -"27 21 22 20 19 9 23 29 30 25 24 25 30 23 27 20 26 20 22 26 28 " -"24 21 28 21 27 30 29 23 30 24 28 " -; - -char *VTK_VECTOR_TEXT_81 = (char *) "66 1.276398 " -"1.23429 -0.15444 1.13714 -0.11188 0.76571 -0.09009 0.64571 -0.08437 0.84000 -0.08034 " -"0.58286 -0.07034 1.27640 -0.06000 0.93143 -0.05470 0.46857 -0.02322 1.00000 -0.02293 " -"0.38857 0.03330 0.76000 0.03563 0.68000 0.03866 0.83547 0.04857 1.09814 0.04857 " -"0.61714 0.05177 0.87591 0.06571 0.55429 0.07800 0.80000 0.10784 0.49143 0.12132 " -"0.30857 0.12350 0.74115 0.12857 0.98286 0.13189 1.17355 0.14571 0.42857 0.19207 " -"0.86857 0.19927 0.26286 0.20486 1.05355 0.22000 0.77714 0.23134 0.39277 0.26000 " -"1.23177 0.27714 0.23387 0.28286 1.08823 0.30571 0.36420 0.36286 0.20991 0.40286 " -"0.35580 0.43714 1.25866 0.43714 1.11009 0.44286 0.20723 0.51714 1.25252 0.58000 " -"0.36420 0.59714 1.09823 0.60857 0.23470 0.67714 0.38857 0.68947 1.21184 0.73429 " -"1.05143 0.73841 0.42902 0.76857 0.28821 0.80286 1.00571 0.80413 1.17188 0.81429 " -"0.96000 0.84670 0.51429 0.85473 0.34473 0.88286 1.12000 0.88413 0.57714 0.89070 " -"0.88571 0.89070 0.64571 0.91252 0.76571 0.92093 0.42857 0.95759 1.03429 0.95864 " -"0.50286 0.99927 0.96571 0.99800 0.60000 1.03252 0.86857 1.03184 0.69714 1.04705 " -"0.77143 1.04665 66 0 6 1 " -"13 7 16 14 9 1 9 16 7 3 15 " -"5 16 9 14 11 4 13 11 2 4 " -"7 13 4 12 3 11 2 11 3 15 3 " -"12 5 17 8 8 19 10 10 19 20 " -"14 1 6 5 15 17 20 29 26 19 8 " -"17 21 18 28 22 16 14 16 25 18 " -"22 14 27 24 20 19 16 22 25 26 29 " -"31 18 25 28 14 23 27 27 30 32 " -"30 27 23 31 33 34 20 24 29 37 32 " -"30 33 31 29 34 33 38 36 37 30 " -"35 38 33 37 39 41 38 40 42 37 36 " -"39 41 44 45 40 38 35 42 43 47 " -"44 41 39 46 47 43 43 42 40 47 46 " -"52 45 49 48 59 50 48 52 51 58 " -"53 48 49 61 50 59 50 61 55 58 51 " -"60 51 52 46 49 45 44 59 48 53 " -"57 64 56 60 54 62 55 63 57 51 54 " -"60 54 56 62 62 56 64 63 55 61 " -"63 65 57 57 65 64 " -; - -char *VTK_VECTOR_TEXT_82 = (char *) "46 1.225355 " -"0.26857 -0.07186 0.40571 -0.07186 1.05143 -0.07215 1.22359 -0.07143 1.22535 -0.06571 " -"1.17465 0.01429 1.17143 0.01936 1.17098 0.02000 0.84571 0.24343 1.00571 0.27650 " -"0.76571 0.34698 0.91832 0.37429 0.73143 0.37678 0.40991 0.40857 0.68000 0.40437 " -"0.41714 0.41580 0.62286 0.41538 0.84226 0.42571 0.92571 0.44706 0.99429 0.47502 " -"1.07582 0.54000 0.41714 0.54420 0.40991 0.55143 0.80000 0.54764 0.88000 0.56538 " -"1.11641 0.60286 0.94286 0.60439 0.96784 0.63714 1.13823 0.67714 0.98966 0.69429 " -"0.99277 0.74571 1.14134 0.75143 0.97143 0.81493 1.12823 0.82000 0.93143 0.86115 " -"1.10498 0.87714 0.89143 0.88498 0.40991 0.90000 0.41714 0.90723 0.78857 0.90723 " -"1.07011 0.92857 1.01714 0.97579 0.97143 0.99865 0.87429 1.02109 0.26857 1.02615 " -"0.80571 1.02723 46 2 9 8 3 5 2 0 37 " -"44 5 7 2 5 6 7 3 4 5 " -"2 7 9 18 23 17 11 8 9 8 11 " -"10 0 22 37 11 17 10 21 16 23 " -"21 15 16 23 10 17 19 24 18 23 18 " -"24 23 12 10 15 21 13 0 21 22 " -"16 14 23 23 14 12 20 26 19 26 20 " -"27 24 19 26 27 25 29 28 30 29 " -"31 30 28 25 27 20 30 33 32 28 29 " -"25 33 30 31 32 40 34 35 32 33 " -"0 1 13 0 13 21 41 34 40 43 36 " -"42 38 39 45 32 35 40 42 34 41 " -"34 42 36 36 43 39 44 38 45 43 45 " -"39 37 38 44 " -; - -char *VTK_VECTOR_TEXT_83 = (char *) "69 1.081090 " -"0.71429 -0.08966 0.53714 -0.07866 0.82286 -0.07101 0.46286 -0.05959 0.38857 -0.02616 " -"0.94286 -0.01678 0.33714 0.01044 0.64000 0.03866 0.73143 0.04177 1.00571 0.03883 " -"0.56000 0.05177 0.28527 0.06571 0.50857 0.06930 0.83587 0.07143 1.04086 0.08857 " -"0.88127 0.10000 0.43429 0.11330 0.24486 0.13429 0.92613 0.15714 1.07177 0.16286 " -"0.38771 0.16857 0.94134 0.21429 0.36319 0.22571 0.21563 0.23714 1.08109 0.26571 " -"0.21403 0.27714 0.93294 0.27714 0.34857 0.28916 0.91011 0.31714 1.06816 0.32857 " -"0.84000 0.36943 1.04486 0.38000 0.76571 0.39673 0.98286 0.45241 0.53143 0.45748 " -"0.42857 0.49343 0.92571 0.49070 0.37143 0.52535 0.82857 0.53109 0.31044 0.58000 " -"0.53143 0.60899 0.43429 0.65616 0.26244 0.67143 0.39891 0.71143 0.90857 0.71084 " -"0.25295 0.72286 1.04615 0.72286 0.39320 0.76857 0.40359 0.80857 1.03109 0.81429 " -"0.26327 0.82000 0.87429 0.81493 0.45143 0.86956 0.82286 0.87258 0.28930 0.88286 " -"0.98812 0.90000 0.50857 0.90041 0.76571 0.90151 0.57714 0.91563 0.67429 0.91866 " -"0.95443 0.94000 0.35429 0.96099 0.89143 0.98784 0.40000 0.99188 0.83429 1.01470 " -"0.50286 1.03184 0.74857 1.03823 0.57143 1.04437 0.67429 1.04705 67 2 " -"8 0 0 7 1 6 4 16 6 16 11 0 8 7 7 10 1 8 2 13 5 " -"15 13 1 10 3 10 12 3 9 15 5 4 3 12 15 14 18 5 13 2 14 " -"15 9 16 4 12 21 24 26 18 19 21 11 20 17 20 11 16 17 22 23 19 " -"18 14 22 17 20 25 23 27 23 22 27 24 21 19 26 31 28 28 33 30 24 " -"29 26 30 38 32 26 29 31 34 32 38 33 28 31 34 40 35 33 36 30 39 " -"43 42 38 30 36 41 37 35 40 34 38 37 41 39 41 35 40 50 48 54 39 " -"41 43 44 46 49 45 42 43 45 47 50 48 50 47 60 51 55 47 45 43 51 " -"60 53 54 48 61 44 49 51 55 51 49 48 52 61 56 63 52 57 66 59 61 " -"52 63 63 56 65 62 53 60 53 64 57 53 62 64 59 66 58 65 58 67 58 " -"65 56 66 57 64 67 58 68 68 58 66 " -; - -char *VTK_VECTOR_TEXT_84 = (char *) "8 1.045714 " -"0.54286 -0.07186 0.68000 -0.07186 0.53757 0.89429 0.68528 0.89429 0.17714 0.90265 " -"1.04571 0.90265 0.17979 1.02571 1.04571 1.02307 6 0 3 2 3 0 " -"1 6 4 2 6 3 7 6 2 3 " -"3 5 7 " -; - -char *VTK_VECTOR_TEXT_85 = (char *) "32 1.126804 " -"0.65714 -0.09009 0.77143 -0.08705 0.53143 -0.07034 0.85714 -0.07101 0.47429 -0.05070 " -"0.94286 -0.03629 0.38286 0.00704 1.02286 0.02445 0.65714 0.04437 0.78857 0.05320 " -"0.33669 0.06000 0.58286 0.05748 0.84000 0.06823 0.52000 0.08535 1.07070 0.08857 " -"0.89714 0.10154 0.46857 0.13025 1.09966 0.15714 0.29143 0.15866 0.94899 0.17429 " -"0.43177 0.19714 0.27320 0.24286 0.97252 0.26000 1.12680 0.33429 0.26437 0.34000 " -"0.40991 0.34000 0.98134 0.34571 0.98550 1.02571 1.12571 1.02307 0.26857 1.02615 " -"0.40571 1.02615 1.12000 1.02723 30 3 9 1 10 20 18 8 0 " -"1 0 11 2 7 15 5 0 8 11 " -"8 1 9 9 3 12 13 4 2 5 12 " -"3 15 7 19 16 10 6 12 5 15 " -"4 13 6 13 2 11 21 18 20 13 16 " -"6 19 17 22 17 19 14 7 14 19 " -"10 16 20 25 24 21 23 26 22 23 22 " -"17 25 21 20 24 25 29 30 29 25 " -"28 31 27 26 23 27 23 28 27 " -; - -char *VTK_VECTOR_TEXT_86 = (char *) "8 1.148571 " -"0.57714 -0.07025 0.72571 -0.06947 0.64571 0.06079 0.65143 0.06062 0.15429 1.02560 " -"0.30286 1.02531 1.00571 1.02531 1.14857 1.02560 6 0 2 4 3 2 " -"0 3 7 6 1 3 0 3 1 7 " -"2 5 4 " -; - -char *VTK_VECTOR_TEXT_87 = (char *) "14 1.568063 " -"0.45143 -0.07186 0.60000 -0.07017 1.13143 -0.06912 1.27429 -0.06912 0.52571 0.09707 " -"1.20000 0.09787 1.13673 0.38000 0.86857 0.88103 0.16571 1.02562 0.78286 1.02446 " -"1.42857 1.02446 1.56806 1.02571 0.30857 1.02615 0.95429 1.02615 12 " -"2 6 7 6 2 5 1 4 0 7 9 " -"4 11 10 5 3 5 2 8 0 4 " -"13 7 6 9 7 13 7 4 1 11 5 " -"3 12 8 4 " -; - -char *VTK_VECTOR_TEXT_88 = (char *) "14 1.141168 " -"0.15194 -0.07143 1.14117 -0.07143 0.32000 -0.07106 0.97143 -0.07140 0.65143 0.37795 " -"0.74607 0.49429 0.56517 0.50000 0.74286 0.49909 0.74219 0.50000 0.65714 0.61727 " -"0.20016 1.02571 0.96000 1.02568 1.11260 1.02571 0.36571 1.02644 12 " -"0 2 6 3 5 4 5 6 4 5 8 " -"6 5 3 1 5 7 8 4 6 2 " -"9 6 8 12 11 8 6 13 10 13 6 " -"9 11 9 8 " -; - -char *VTK_VECTOR_TEXT_89 = (char *) "12 1.145205 " -"0.71164 -0.07143 0.57143 -0.06878 0.56891 0.39143 0.71787 0.39714 0.65143 0.51441 " -"0.43179 0.85429 0.42857 0.85936 0.42812 0.86000 0.15284 1.02571 0.32000 1.02535 " -"0.98286 1.02464 1.14521 1.02571 10 3 2 " -"1 3 1 0 4 2 3 2 9 8 " -"11 10 4 5 2 4 5 6 7 2 7 " -"9 2 5 7 11 4 3 " -; - -char *VTK_VECTOR_TEXT_90 = (char *) "11 1.040000 " -"0.17714 -0.07186 1.04000 -0.06878 1.04000 0.05164 0.17395 0.06000 0.34602 0.06000 " -"0.84777 0.89429 0.24000 0.89957 1.02395 0.90000 0.23580 1.02000 1.02286 1.02307 " -"0.24000 1.02615 9 0 4 3 1 4 0 1 2 4 3 4 5 5 " -"7 9 4 7 5 5 10 6 10 5 9 6 10 8 " -; - -char *VTK_VECTOR_TEXT_91 = (char *) "8 0.541339 " -"0.24528 -0.37429 0.54025 -0.37429 0.54025 -0.27143 0.38227 -0.26571 0.38286 0.91454 " -"0.54134 0.92286 0.24836 1.02571 0.53714 1.02615 6 0 4 6 3 1 " -"2 1 3 0 0 3 4 5 7 4 " -"6 4 7 " -; - -char *VTK_VECTOR_TEXT_92 = (char *) "5 0.564685 " -"0.46286 -0.09182 0.56000 -0.09256 0.56469 -0.08857 0.14713 1.04286 0.24571 1.04358 3 0 4 3 0 2 4 0 " -"1 2 " -; - -char *VTK_VECTOR_TEXT_93 = (char *) "9 0.465968 " -"0.17100 -0.37429 0.46597 -0.37429 0.17100 -0.27143 0.32571 -0.26723 0.33295 -0.26000 " -"0.33143 0.91201 0.17143 0.91979 0.16991 1.02000 0.46286 1.02615 7 2 0 3 1 " -"3 0 1 4 3 5 4 1 7 6 8 5 8 6 8 5 1 " -; - -char *VTK_VECTOR_TEXT_94 = (char *) "11 0.817005 " -"0.18389 0.44857 0.18857 0.44458 0.32000 0.44686 0.68571 0.44746 0.81143 0.44445 " -"0.81700 0.44857 0.49714 0.88224 0.50286 0.88224 0.44571 1.04090 0.55429 1.04168 " -"0.45143 1.04437 9 0 2 6 0 6 8 7 3 5 4 5 3 2 " -"0 1 10 7 9 10 8 6 10 6 7 9 7 5 " -; - -char *VTK_VECTOR_TEXT_95 = (char *) "4 1.011860 " -"0.11957 -0.37429 1.01186 -0.37429 0.11957 -0.28857 1.01186 -0.28857 2 2 1 3 2 0 1 " -; - -char *VTK_VECTOR_TEXT_96 = (char *) "11 0.486571 " -"0.38857 0.82420 0.48000 0.82420 0.48403 0.82571 0.37714 0.82989 0.38286 0.82575 " -"0.48657 0.83143 0.21296 1.02571 0.38771 1.02571 0.21412 1.03143 0.38286 1.03106 " -"0.37714 1.03295 9 5 1 2 0 3 4 3 10 6 0 1 5 7 " -"3 0 8 6 10 7 0 5 3 7 10 10 7 9 " -; - -char *VTK_VECTOR_TEXT_97 = (char *) "70 0.929303 " -"0.44000 -0.09009 0.50286 -0.08966 0.36571 -0.07756 0.57143 -0.07907 0.92716 -0.07143 " -"0.79429 -0.07106 0.92930 -0.06571 0.62857 -0.06151 0.30857 -0.05514 0.27429 -0.03258 " -"0.68000 -0.03629 0.90748 -0.00857 0.48000 0.01580 0.53143 0.01621 0.42768 0.02571 " -"0.76571 0.02129 0.22073 0.03143 0.61804 0.03714 0.89866 0.03714 0.37130 0.06000 " -"0.20613 0.06571 0.68000 0.07330 0.34538 0.10000 0.71429 0.10809 0.19580 0.11714 " -"0.89295 0.13429 0.33907 0.15714 0.74538 0.16857 0.20319 0.19714 0.36000 0.20914 " -"0.75580 0.22000 0.40000 0.24371 0.22812 0.25429 0.44571 0.26041 0.66286 0.29891 " -"0.28000 0.31258 0.75848 0.31714 0.75429 0.32399 0.33714 0.34657 0.38857 0.36538 " -"0.68571 0.41320 0.75772 0.43714 0.35289 0.48286 0.22093 0.50000 0.22857 0.49470 " -"0.89252 0.50571 0.75580 0.51143 0.22857 0.53547 0.37800 0.54571 0.74286 0.55301 " -"0.88680 0.56286 0.71429 0.58893 0.41714 0.59330 0.42228 0.59714 0.25800 0.60286 " -"0.42286 0.59759 0.65143 0.61959 0.48000 0.62193 0.86498 0.62571 0.53143 0.62950 " -"0.59429 0.62950 0.28187 0.63714 0.84571 0.65486 0.33714 0.68436 0.80571 0.69007 " -"0.37915 0.70571 0.72571 0.72538 0.45714 0.72966 0.54286 0.74152 0.62286 0.74152 70 " -"3 13 1 5 4 15 4 11 15 19 8 " -"2 13 3 7 13 0 1 14 0 12 " -"20 22 24 0 14 2 12 0 13 13 7 " -"17 11 4 6 19 2 14 17 10 21 " -"7 10 17 11 18 15 16 22 20 8 19 " -"9 15 23 21 15 21 10 23 25 27 " -"9 19 16 19 22 16 23 15 25 24 26 " -"28 27 25 30 25 15 18 30 25 36 " -"32 28 26 26 24 22 29 32 26 39 38 " -"31 38 35 29 32 29 35 31 38 29 " -"39 34 40 33 39 31 39 33 34 36 41 " -"37 40 37 41 37 40 34 41 36 25 " -"41 45 46 43 44 47 47 48 54 48 47 " -"44 50 49 46 41 25 45 50 46 45 " -"42 48 44 49 64 51 52 53 55 52 65 " -"63 65 52 55 52 61 48 52 63 61 " -"58 49 50 49 58 62 69 60 56 49 62 " -"64 54 48 61 57 67 65 57 65 55 " -"51 66 56 69 59 60 66 51 64 68 67 " -"57 59 69 57 69 68 57 69 56 66 " -; - -char *VTK_VECTOR_TEXT_98 = (char *) "49 0.932518 " -"0.61143 -0.09009 0.50286 -0.07823 0.36000 -0.07186 0.24000 -0.06878 0.72000 -0.06213 " -"0.45714 -0.05914 0.77143 -0.03188 0.36571 0.01806 0.59429 0.02193 0.83543 0.02571 " -"0.52000 0.02823 0.66857 0.04645 0.46857 0.05179 0.42704 0.08857 0.72956 0.10000 " -"0.88784 0.10571 0.39216 0.14000 0.75641 0.14000 0.91470 0.18000 0.37462 0.19143 " -"0.78665 0.23714 0.36152 0.28857 0.93252 0.29429 0.79236 0.36857 0.93252 0.37429 " -"0.36420 0.38000 0.77294 0.47714 0.39216 0.50000 0.90899 0.50000 0.42473 0.55143 " -"0.73143 0.55546 0.88657 0.55714 0.45883 0.58571 0.67429 0.60498 0.50857 0.61641 " -"0.63429 0.62252 0.56571 0.62991 0.37714 0.64118 0.83429 0.63841 0.37315 0.64857 " -"0.80571 0.66686 0.74286 0.70784 0.46857 0.71355 0.68571 0.72899 0.56571 0.74109 " -"0.61714 0.74152 0.24265 1.02571 0.37143 1.02307 0.36571 1.02723 49 3 25 46 5 1 10 5 12 7 8 0 4 11 6 14 11 " -"4 6 0 8 1 2 7 3 8 4 11 10 1 8 21 3 19 12 13 7 12 " -"5 10 14 9 17 9 14 6 17 15 20 16 7 13 15 18 20 15 17 9 3 " -"7 19 22 20 18 20 22 23 28 26 23 22 24 23 25 3 21 30 43 33 39 " -"46 25 28 23 24 27 39 25 26 31 30 7 16 19 31 26 28 37 32 42 39 " -"27 37 40 30 38 29 37 27 38 30 31 35 33 43 32 34 42 35 45 36 37 " -"29 32 42 34 36 45 35 43 43 30 41 41 30 40 36 45 44 42 36 44 47 " -"48 46 39 47 46 " -; - -char *VTK_VECTOR_TEXT_99 = (char *) "58 0.894057 " -"0.53143 -0.08966 0.59429 -0.08966 0.45714 -0.07673 0.68000 -0.07294 0.72571 -0.05343 " -"0.37714 -0.04331 0.33714 -0.01543 0.78857 -0.01011 0.58286 0.02152 0.29143 0.03016 " -"0.49625 0.03143 0.62857 0.03034 0.83107 0.03714 0.45714 0.04943 0.69270 0.06571 " -"0.26241 0.07143 0.85714 0.07873 0.40457 0.09429 0.72722 0.10571 0.37629 0.14000 " -"0.74437 0.14000 0.22899 0.14571 0.37184 0.15143 0.36930 0.15714 0.88571 0.15295 " -"0.89406 0.19714 0.76571 0.21540 0.21034 0.22571 0.34705 0.25429 0.20420 0.36286 " -"0.34478 0.36857 0.21673 0.45429 0.36252 0.47143 0.75429 0.47269 0.88058 0.48857 " -"0.88319 0.49429 0.38371 0.52286 0.23849 0.52857 0.72000 0.55200 0.86437 0.55714 " -"0.43025 0.58000 0.69714 0.58127 0.28527 0.61429 0.47429 0.60943 0.48571 0.61387 " -"0.83473 0.61429 0.49143 0.61641 0.63429 0.62041 0.54857 0.62950 0.58857 0.62991 " -"0.81296 0.64286 0.32168 0.65429 0.35429 0.67964 0.76571 0.68535 0.44571 0.72327 " -"0.67429 0.72816 0.53714 0.74109 0.60000 0.74109 56 2 13 5 0 8 2 11 4 14 " -"1 8 0 3 11 1 15 23 21 2 10 " -"13 11 8 1 11 3 4 7 14 4 " -"10 2 8 14 7 18 17 6 13 6 5 " -"13 17 15 9 18 12 20 7 12 18 " -"17 9 6 16 20 12 24 20 16 19 15 " -"17 15 19 23 23 19 22 27 28 29 " -"26 20 24 26 24 25 21 28 27 28 21 " -"23 29 30 31 28 30 29 31 32 37 " -"39 38 33 34 39 33 32 31 30 37 32 " -"36 55 49 47 37 36 42 51 42 36 " -"34 35 39 45 41 38 52 40 43 46 43 " -"44 50 41 45 56 49 57 40 51 36 " -"51 40 52 45 38 39 52 43 54 47 41 " -"53 54 46 48 56 48 49 53 41 50 " -"54 48 56 54 43 46 57 49 55 55 47 " -"53 " -; - -char *VTK_VECTOR_TEXT_100 = (char *) "48 0.885714 " -"0.51429 -0.09009 0.56571 -0.08966 0.62857 -0.07673 0.76571 -0.07186 0.88571 -0.06878 " -"0.41143 -0.06486 0.67429 -0.05641 0.36000 -0.03669 0.30286 0.01025 0.76000 0.01806 " -"0.53714 0.02152 0.49714 0.02891 0.60571 0.02891 0.68127 0.07143 0.41714 0.07561 " -"0.23787 0.10571 0.71579 0.11143 0.38241 0.11714 0.74135 0.16286 0.21395 0.16857 " -"0.74286 0.16739 0.74538 0.17429 0.34605 0.20286 0.76420 0.27714 0.19277 0.28857 " -"0.33295 0.28857 0.19277 0.36286 0.76152 0.38571 0.33563 0.39714 0.73355 0.50000 " -"0.22135 0.51143 0.36784 0.51714 0.69714 0.55841 0.42286 0.58686 0.26857 0.60793 " -"0.63429 0.60943 0.48571 0.62151 0.56571 0.62950 0.74857 0.64048 0.75269 0.64857 " -"0.30857 0.65582 0.65714 0.71355 0.40571 0.71756 0.50286 0.74109 0.55429 0.74152 " -"0.75693 1.02571 0.88571 1.02307 0.88000 1.02723 48 0 11 5 12 6 13 " -"1 2 12 7 14 8 10 0 1 14 7 " -"5 10 1 12 6 12 2 0 10 11 " -"8 17 15 9 16 13 14 5 11 4 9 " -"3 6 9 13 9 4 18 16 9 18 " -"15 22 19 17 8 14 22 15 17 20 18 " -"21 21 18 4 19 25 24 21 4 23 " -"25 19 22 26 24 25 26 28 30 39 27 " -"4 26 25 28 39 38 29 29 38 32 " -"27 39 29 30 31 34 32 38 35 31 30 " -"28 40 34 31 36 42 33 23 4 27 " -"35 41 37 33 40 31 40 33 42 41 35 " -"38 42 36 43 37 43 36 44 37 41 " -"37 44 43 46 47 45 39 4 45 4 46 " -"45 " -; - -char *VTK_VECTOR_TEXT_101 = (char *) "65 0.934539 " -"0.54857 -0.09009 0.61143 -0.09009 0.45714 -0.07462 0.71429 -0.07101 0.40571 -0.05641 " -"0.77714 -0.04331 0.33714 -0.01543 0.82857 -0.00670 0.29714 0.02154 0.56000 0.02152 " -"0.60571 0.02193 0.49714 0.03563 0.68159 0.04286 0.88150 0.05429 0.45714 0.05514 " -"0.26286 0.06636 0.72000 0.06759 0.40457 0.10000 0.91216 0.11143 0.77229 0.13429 " -"0.37057 0.15143 0.22034 0.15714 0.36613 0.16286 0.92834 0.16286 0.36359 0.16857 " -"0.91429 0.16966 0.79429 0.18111 0.35177 0.20286 0.20462 0.22571 0.33866 0.28286 " -"0.34286 0.28900 0.93454 0.29429 0.19848 0.35714 0.93295 0.39714 0.34857 0.40134 " -"0.78857 0.40134 0.34134 0.40857 0.79580 0.40857 0.20462 0.41429 0.35429 0.47261 " -"0.22327 0.49429 0.91429 0.48975 0.77143 0.50661 0.38857 0.54057 0.74857 0.54629 " -"0.40725 0.56286 0.25714 0.57001 0.71429 0.58154 0.87070 0.58571 0.45143 0.59759 " -"0.68000 0.60498 0.29296 0.62000 0.49143 0.61681 0.63429 0.62252 0.54857 0.62950 " -"0.59429 0.62991 0.33311 0.66000 0.81143 0.65543 0.77143 0.68607 0.41143 0.70930 " -"0.72000 0.71355 0.45714 0.72605 0.66857 0.73050 0.54286 0.74152 0.60000 0.74152 65 0 9 11 10 " -"1 3 10 3 12 5 12 3 17 8 6 10 0 1 0 11 2 4 14 6 0 " -"10 9 7 16 5 5 16 12 14 2 11 16 7 19 14 4 2 15 8 17 26 " -"18 25 17 6 14 15 27 21 7 13 19 23 25 18 20 15 17 26 19 18 18 " -"19 13 24 20 22 15 20 24 15 24 27 21 27 28 28 29 32 33 37 35 29 " -"28 27 32 29 38 35 34 30 40 39 46 33 35 30 31 33 30 36 38 29 36 " -"29 34 37 41 42 40 38 36 30 34 29 39 40 36 41 37 33 46 43 51 51 " -"49 56 42 48 44 48 42 41 44 48 47 49 51 45 43 46 39 56 49 59 50 " -"62 53 57 47 48 64 55 53 45 51 43 55 63 54 58 47 57 62 50 60 59 " -"52 61 59 49 52 47 60 50 61 54 63 60 47 58 61 52 54 64 53 62 55 " -"64 63 " -; - -char *VTK_VECTOR_TEXT_102 = (char *) "24 0.617143 " -"0.28000 -0.07186 0.40571 -0.07186 0.27472 0.61429 0.41100 0.61429 0.16571 0.61957 " -"0.56000 0.61957 0.56420 0.71714 0.16571 0.72329 0.27472 0.72857 0.41100 0.72857 " -"0.56000 0.72329 0.41034 0.83143 0.27580 0.86000 0.43429 0.89555 0.28613 0.91714 " -"0.46286 0.91294 0.50286 0.92134 0.60000 0.91830 0.31107 0.96857 0.34286 1.00099 " -"0.38857 1.02784 0.61714 1.03086 0.46286 1.04395 0.52571 1.04437 22 0 3 2 " -"3 0 1 4 8 7 9 3 5 2 3 " -"8 5 6 10 4 2 8 9 8 3 " -"8 11 12 11 8 9 12 11 14 9 5 " -"10 13 19 18 13 18 14 13 14 11 " -"23 15 16 15 23 22 21 23 17 15 20 " -"13 19 13 20 20 15 22 23 16 17 " -; - -char *VTK_VECTOR_TEXT_103 = (char *) "71 0.892518 " -"0.46857 -0.39295 0.56571 -0.39563 0.66286 -0.37959 0.35429 -0.36200 0.74286 -0.34616 " -"0.28571 -0.31868 0.80368 -0.30000 0.50857 -0.28437 0.62286 -0.27395 0.44571 -0.27101 " -"0.23387 -0.24286 0.84657 -0.24286 0.69200 -0.23714 0.38171 -0.23143 0.72150 -0.20286 " -"0.87177 -0.18000 0.34916 -0.15714 0.74899 -0.14000 0.22286 -0.13957 0.50857 -0.07295 " -"0.56000 -0.07295 0.43429 -0.05959 0.65143 -0.05070 0.37143 -0.03355 0.69714 -0.02527 " -"0.89252 -0.00857 0.74857 0.01873 0.75042 0.02000 0.75756 0.02000 0.75429 0.02333 " -"0.29143 0.03381 0.53143 0.03866 0.57143 0.03907 0.47429 0.05216 0.64000 0.05787 " -"0.41714 0.08704 0.68000 0.08439 0.23216 0.12857 0.38036 0.12857 0.72784 0.14000 " -"0.35277 0.18571 0.20530 0.20857 0.75538 0.20857 0.19320 0.28286 0.33295 0.29429 " -"0.76991 0.35714 0.19277 0.37429 0.33563 0.40857 0.75109 0.47143 0.35109 0.47714 " -"0.21143 0.47832 0.72784 0.52286 0.23787 0.55143 0.39044 0.55143 0.69868 0.56286 " -"0.66286 0.59393 0.27107 0.60857 0.45143 0.60498 0.48571 0.62041 0.56571 0.62991 " -"0.57714 0.62764 0.58286 0.62723 0.76571 0.63477 0.32000 0.66384 0.68571 0.70213 " -"0.39429 0.71229 0.77408 0.72286 0.88878 0.72286 0.62857 0.72816 0.46857 0.73580 " -"0.56000 0.74152 71 1 7 0 8 4 12 2 8 1 0 " -"9 3 7 1 8 5 13 10 9 0 7 13 5 3 8 2 4 6 14 12 6 " -"12 4 11 15 17 11 14 6 13 3 9 14 11 17 10 16 18 16 10 13 17 " -"25 28 23 21 33 22 32 20 32 19 20 35 23 33 19 31 21 23 35 30 31 " -"19 32 32 22 34 26 29 36 17 15 25 33 21 31 26 36 24 24 34 22 26 " -"27 29 36 34 24 36 29 39 30 38 37 39 28 25 39 29 28 37 40 41 38 " -"40 37 30 35 38 39 25 42 44 46 43 44 43 41 44 41 40 42 25 45 67 " -"51 48 46 47 50 67 48 45 47 46 44 50 49 52 49 50 47 67 62 51 62 " -"54 51 56 52 49 54 62 55 55 64 61 60 61 59 53 56 49 56 53 63 63 " -"57 65 65 58 69 65 57 58 70 59 61 59 69 58 64 55 62 67 45 25 67 " -"66 62 63 53 57 68 70 61 59 70 69 64 68 61 " -; - -char *VTK_VECTOR_TEXT_104 = (char *) "27 0.889502 " -"0.24571 -0.07186 0.37143 -0.07186 0.76000 -0.07186 0.88571 -0.07186 0.37605 0.40286 " -"0.37756 0.40857 0.75538 0.46000 0.88950 0.47714 0.38899 0.48286 0.74538 0.51714 " -"0.88152 0.54571 0.42439 0.55143 0.72000 0.56914 0.47429 0.59355 0.68000 0.60331 " -"0.85996 0.61429 0.53143 0.61748 0.61143 0.62379 0.37714 0.63983 0.81714 0.67296 " -"0.45714 0.70045 0.77714 0.70213 0.50857 0.72437 0.68571 0.73538 0.58857 0.74152 " -"0.24571 1.02615 0.37143 1.02615 25 0 " -"4 25 4 18 25 6 2 3 9 6 7 7 6 3 18 8 11 18 11 13 9 " -"15 12 12 19 14 10 9 7 18 13 20 8 4 5 15 9 10 4 0 1 18 " -"4 8 17 24 16 19 21 14 14 23 17 20 16 22 16 20 13 19 12 15 17 " -"23 24 23 14 21 24 22 16 18 26 25 " -; - -char *VTK_VECTOR_TEXT_105 = (char *) "8 0.377143 " -"0.25143 -0.07186 0.37714 -0.07186 0.25143 0.72329 0.37714 0.72329 0.25143 0.87403 " -"0.37714 0.87403 0.25143 1.02615 0.37714 1.02615 4 3 2 0 3 0 " -"1 4 5 6 7 6 5 " -; - -char *VTK_VECTOR_TEXT_106 = (char *) "18 0.375625 " -"0.14857 -0.39563 0.22286 -0.39252 0.07383 -0.38000 0.26857 -0.37914 0.31429 -0.34989 " -"0.34036 -0.31714 0.18857 -0.27462 0.10286 -0.26950 0.36109 -0.26571 0.22331 -0.24857 " -"0.37563 -0.16857 0.24152 -0.16286 0.24571 0.72329 0.37143 0.72329 0.24571 0.87403 " -"0.37143 0.87403 0.24571 1.02615 0.37143 1.02615 14 1 6 0 3 6 1 4 6 " -"3 9 10 11 7 0 6 7 2 0 " -"9 5 8 5 9 4 6 4 9 9 8 " -"10 11 10 12 13 12 10 14 15 16 " -"17 16 15 " -; - -char *VTK_VECTOR_TEXT_107 = (char *) "15 0.897876 " -"0.37450 -0.07143 0.89788 -0.07143 0.24571 -0.06878 0.73714 -0.07035 0.38004 0.24286 " -"0.68421 0.25429 0.68045 0.26000 0.68000 0.26064 0.46857 0.32924 0.38286 0.40888 " -"0.57152 0.42571 0.69714 0.72283 0.86359 0.72286 0.24836 1.02571 0.37714 1.02307 13 2 9 13 4 2 0 5 8 3 5 " -"3 1 5 6 7 9 14 13 11 9 10 5 7 8 7 10 8 8 9 4 12 " -"11 10 9 8 10 2 4 9 " -; - -char *VTK_VECTOR_TEXT_108 = (char *) "4 0.371429 " -"0.36878 -0.07143 0.24000 -0.06878 0.24265 1.02571 0.37143 1.02307 2 1 3 2 3 1 0 " -; - -char *VTK_VECTOR_TEXT_109 = (char *) "45 1.318074 " -"0.24571 -0.07186 0.37143 -0.07186 0.72000 -0.07295 1.18857 -0.07186 1.31429 -0.07186 " -"0.71429 -0.06878 0.84571 -0.06878 0.37866 0.37429 0.84723 0.40286 0.85335 0.46000 " -"0.39109 0.48286 0.71277 0.48286 1.18437 0.48286 1.31807 0.52286 0.87787 0.53429 " -"0.41143 0.53493 1.17395 0.54000 0.43582 0.56857 0.68784 0.56857 1.14857 0.58403 " -"0.93143 0.59188 0.66286 0.59829 0.82857 0.60801 0.51009 0.61429 0.36571 0.61924 " -"0.63429 0.61470 1.09714 0.61580 1.29355 0.62000 0.56000 0.62420 1.00571 0.62152 " -"1.06286 0.62379 0.41311 0.67143 0.78857 0.66975 1.25561 0.67714 0.90857 0.68902 " -"0.74286 0.70784 1.20571 0.71355 0.35735 0.72286 0.24571 0.72329 0.50286 0.72498 " -"0.99429 0.73109 1.16000 0.73109 0.67429 0.73470 0.57714 0.74109 1.05143 0.74152 43 6 5 2 0 7 38 8 11 5 7 0 1 8 5 6 12 3 4 12 " -"13 16 9 11 8 15 17 24 11 22 18 22 20 34 11 9 22 14 22 9 13 " -"12 4 24 17 31 7 10 38 10 15 24 16 27 19 32 21 18 24 37 38 20 " -"22 14 10 24 38 27 16 13 31 23 39 26 41 30 30 40 29 32 18 22 41 " -"19 36 34 29 40 19 41 26 36 19 33 23 31 17 35 21 32 29 34 20 39 " -"28 43 33 19 27 43 28 42 25 42 28 28 39 23 42 25 21 42 21 35 44 " -"30 41 30 44 40 " -; - -char *VTK_VECTOR_TEXT_110 = (char *) "38 0.889911 " -"0.24571 -0.07186 0.37143 -0.07186 0.75429 -0.07186 0.88571 -0.07186 0.24152 -0.06571 " -"0.37563 -0.06571 0.75009 -0.06571 0.88991 -0.06571 0.37605 0.40286 0.37866 0.41429 " -"0.38134 0.44857 0.74665 0.48286 0.88950 0.48286 0.39849 0.51143 0.73229 0.54000 " -"0.88420 0.54000 0.43011 0.56286 0.46286 0.58893 0.69714 0.58725 0.87008 0.59143 " -"0.51580 0.61429 0.65143 0.61343 0.36571 0.62031 0.56571 0.62420 0.60571 0.62379 " -"0.61714 0.62152 0.62286 0.62109 0.83955 0.64857 0.40725 0.66571 0.79429 0.69179 " -"0.45714 0.70213 0.24152 0.71714 0.75429 0.71355 0.35735 0.72286 0.24571 0.72329 " -"0.52571 0.73050 0.68571 0.73538 0.58857 0.74152 36 1 4 0 " -"3 6 2 1 5 4 3 7 6 6 12 " -"11 11 15 14 6 7 12 22 16 28 " -"10 8 9 13 22 10 10 22 8 8 4 " -"5 15 11 12 8 22 4 14 15 19 " -"14 19 18 25 26 24 16 22 13 16 17 " -"28 30 28 17 27 18 19 32 23 24 " -"29 18 27 30 20 35 18 32 21 31 4 " -"22 20 30 17 32 26 21 32 24 26 " -"32 18 29 34 31 33 33 31 22 35 23 " -"37 23 35 20 36 23 32 37 23 36 " -; - -char *VTK_VECTOR_TEXT_111 = (char *) "65 0.938661 " -"0.53143 -0.08966 0.59429 -0.09009 0.69143 -0.07101 0.41143 -0.06213 0.76571 -0.03759 " -"0.34857 -0.02821 0.81714 -0.00099 0.29143 0.02154 0.54286 0.02193 0.60571 0.02420 " -"0.50857 0.02823 0.64571 0.03563 0.86331 0.04857 0.45143 0.05216 0.25714 0.06636 " -"0.70857 0.07330 0.89229 0.09429 0.40000 0.09597 0.22771 0.12286 0.38036 0.12286 " -"0.37714 0.12793 0.37669 0.12857 0.75473 0.12857 0.76657 0.15143 0.77101 0.16286 " -"0.77355 0.16857 0.92319 0.18000 0.20764 0.18571 0.34816 0.19714 0.78605 0.20857 " -"0.33563 0.26000 0.19320 0.28286 0.93823 0.28857 0.79848 0.29429 0.33295 0.36286 " -"0.93866 0.37429 0.19580 0.39714 0.79538 0.39714 0.35277 0.47143 0.92319 0.47143 " -"0.21184 0.48286 0.77143 0.48947 0.23216 0.54000 0.38742 0.54000 0.89927 0.54000 " -"0.74286 0.54057 0.71429 0.57275 0.42286 0.57813 0.87678 0.58000 0.27429 0.60984 " -"0.48571 0.61580 0.64571 0.61580 0.54286 0.62950 0.58857 0.62950 0.60000 0.62723 " -"0.60571 0.62680 0.83225 0.63714 0.31025 0.64857 0.34857 0.67864 0.75429 0.69641 " -"0.40000 0.70784 0.45143 0.72605 0.68571 0.72538 0.53714 0.74152 0.60000 0.74109 65 11 4 15 8 " -"0 1 17 7 5 11 2 4 2 9 1 8 1 9 0 8 10 0 10 3 2 " -"11 9 3 13 5 10 13 3 6 12 22 6 15 4 15 6 22 18 28 27 17 " -"5 13 14 19 18 16 23 22 19 7 17 7 19 14 18 19 21 24 23 25 25 " -"23 16 19 20 21 16 22 12 26 29 25 27 30 31 26 25 16 28 18 21 29 " -"26 33 30 27 28 31 34 36 33 32 35 26 32 33 34 31 30 33 35 37 40 " -"36 34 37 39 41 40 38 42 39 37 35 47 57 43 38 40 34 43 49 42 46 " -"45 56 39 44 41 41 48 45 43 57 49 41 44 48 43 42 38 57 47 58 54 " -"55 53 56 45 48 50 60 47 64 63 53 64 55 62 53 63 52 59 62 51 61 " -"60 50 64 53 55 51 62 55 52 61 50 59 46 56 61 52 63 46 59 51 58 " -"47 60 " -; - -char *VTK_VECTOR_TEXT_112 = (char *) "49 0.935625 " -"0.24571 -0.37740 0.37454 -0.37429 0.56000 -0.08966 0.66857 -0.07966 0.47429 -0.06657 " -"0.75429 -0.04331 0.37584 -0.00286 0.80571 -0.00704 0.38286 0.00159 0.59429 0.02152 " -"0.52000 0.02891 0.63429 0.02992 0.85964 0.05429 0.45143 0.06725 0.70857 0.07330 " -"0.39787 0.13429 0.39514 0.14000 0.39216 0.14571 0.76213 0.14571 0.90538 0.14571 " -"0.37462 0.19714 0.78327 0.20857 0.92680 0.22571 0.36379 0.27143 0.36152 0.28286 " -"0.79580 0.29429 0.93563 0.30000 0.36379 0.36857 0.79580 0.36857 0.92680 0.43714 " -"0.78286 0.45547 0.38286 0.47232 0.75429 0.52921 0.41714 0.54057 0.88571 0.56444 " -"0.44571 0.57582 0.69143 0.59964 0.51429 0.62213 0.65143 0.62213 0.36571 0.63051 " -"0.56571 0.63563 0.82704 0.64857 0.45714 0.70784 0.74857 0.70657 0.24571 0.72329 " -"0.36000 0.72329 0.51429 0.73177 0.69143 0.72899 0.62286 0.74152 49 0 1 6 0 24 44 3 9 2 2 10 4 3 11 9 4 " -"13 8 10 2 9 11 5 14 11 3 5 7 14 5 4 10 13 14 12 18 14 " -"7 12 0 20 24 15 8 13 8 15 6 19 18 12 18 19 21 21 22 25 24 " -"27 44 17 15 16 22 21 19 28 25 26 22 26 25 6 15 17 29 30 28 23 " -"24 20 20 6 17 29 28 26 30 34 32 27 31 44 0 6 20 31 39 44 32 " -"41 36 41 32 34 31 33 39 42 37 46 39 35 42 34 30 29 39 33 35 38 " -"47 40 35 37 42 47 38 43 40 46 37 43 36 41 39 45 44 46 40 48 48 " -"40 47 38 36 43 " -; - -char *VTK_VECTOR_TEXT_113 = (char *) "52 0.885714 " -"0.76000 -0.37740 0.88571 -0.37740 0.56571 -0.09009 0.45143 -0.07673 0.65143 -0.06784 " -"0.36000 -0.03188 0.70857 -0.03465 0.75580 -0.00286 0.74857 0.00454 0.29714 0.02418 " -"0.54286 0.02152 0.57714 0.02193 0.58857 0.02420 0.59429 0.02462 0.47429 0.03927 " -"0.64571 0.04371 0.43302 0.06571 0.70670 0.09429 0.23914 0.11143 0.38607 0.11714 " -"0.38286 0.12221 0.38241 0.12286 0.75008 0.17429 0.21101 0.19143 0.34748 0.20857 " -"0.76723 0.25429 0.19848 0.26000 0.76723 0.27143 0.33605 0.28286 0.76991 0.28857 " -"0.19580 0.37429 0.33866 0.40286 0.75429 0.45277 0.21101 0.47143 0.35429 0.47832 " -"0.73143 0.51301 0.39846 0.56286 0.69296 0.56857 0.25669 0.58571 0.45143 0.60902 " -"0.61714 0.62213 0.49143 0.62723 0.76571 0.62602 0.29330 0.63714 0.56571 0.63522 " -"0.72403 0.67143 0.36571 0.69641 0.66286 0.71355 0.77408 0.72286 0.88571 0.72329 " -"0.44571 0.72966 0.56000 0.74152 52 29 27 25 " -"49 42 32 22 7 25 3 13 11 2 13 " -"3 4 13 2 6 15 4 11 13 12 " -"3 14 5 13 4 15 10 3 11 15 6 " -"8 14 3 10 15 8 17 24 23 18 " -"5 16 9 17 8 22 14 16 5 9 19 " -"18 19 20 21 18 19 21 42 35 32 " -"7 22 8 16 19 9 49 48 42 7 0 " -"1 24 18 21 23 24 26 26 28 30 " -"28 26 24 30 31 33 34 33 31 31 30 " -"28 33 34 38 49 29 25 36 43 38 " -"49 25 7 35 42 37 37 45 40 45 37 " -"42 29 49 32 45 47 40 39 43 36 " -"46 39 50 40 47 44 43 39 46 36 38 " -"34 41 44 51 41 50 39 49 7 1 " -"50 41 51 51 44 47 " -; - -char *VTK_VECTOR_TEXT_114 = (char *) "24 0.667686 " -"0.24571 -0.07186 0.37143 -0.07186 0.24152 -0.06571 0.37563 -0.06571 0.37563 0.38000 " -"0.39748 0.50000 0.41964 0.54571 0.44740 0.57429 0.61714 0.57787 0.62286 0.57880 " -"0.48000 0.59294 0.57714 0.59395 0.51429 0.60134 0.36571 0.61385 0.41868 0.68857 " -"0.66769 0.69429 0.66542 0.70000 0.24152 0.71714 0.35735 0.72286 0.24571 0.72329 " -"0.46286 0.72436 0.60000 0.73109 0.51429 0.74109 0.55429 0.74109 22 1 2 0 " -"1 3 2 4 2 3 5 6 13 5 13 " -"17 21 11 15 2 4 17 4 5 17 " -"6 7 13 18 17 13 7 10 14 13 7 " -"14 14 12 20 11 21 12 9 15 11 " -"12 14 10 19 17 18 20 12 22 8 9 " -"11 21 15 16 22 12 23 23 12 21 " -; - -char *VTK_VECTOR_TEXT_115 = (char *) "63 0.849502 " -"0.56000 -0.09009 0.46286 -0.08705 0.65143 -0.07395 0.37143 -0.06723 0.70444 -0.05429 " -"0.33143 -0.04943 0.76057 -0.02000 0.28571 -0.01813 0.79582 0.01429 0.50286 0.02152 " -"0.55429 0.02152 0.56571 0.02379 0.57714 0.02420 0.24571 0.02636 0.64000 0.04200 " -"0.41714 0.04371 0.22200 0.06571 0.38286 0.06725 0.68384 0.07714 0.83580 0.08286 " -"0.69927 0.10000 0.34200 0.12286 0.84950 0.14000 0.71009 0.15714 0.19109 0.16286 " -"0.19370 0.16857 0.32000 0.18615 0.69864 0.19143 0.84723 0.20286 0.65714 0.22784 " -"0.83641 0.24286 0.80956 0.28857 0.34286 0.32371 0.75429 0.33641 0.30286 0.34421 " -"0.69143 0.36327 0.25714 0.38445 0.22645 0.43714 0.41143 0.44538 0.37587 0.46571 " -"0.35885 0.48286 0.21295 0.49429 0.69143 0.50460 0.34478 0.51714 0.81977 0.52286 " -"0.67514 0.55143 0.35216 0.56286 0.22034 0.56857 0.64000 0.59465 0.38286 0.59829 " -"0.79429 0.61016 0.24000 0.61573 0.42857 0.62041 0.58286 0.62252 0.48571 0.62991 " -"0.74689 0.67143 0.28571 0.67258 0.70286 0.70045 0.33714 0.70613 0.38857 0.72538 " -"0.61714 0.73050 0.47429 0.74109 0.54286 0.74109 61 2 12 0 10 1 12 12 2 14 14 4 6 7 17 13 0 " -"12 1 4 14 2 11 10 12 15 3 1 3 15 5 9 1 10 14 6 18 15 " -"1 9 17 5 15 6 8 18 5 17 7 21 16 13 16 21 24 18 8 20 23 " -"28 27 21 13 17 19 22 23 26 25 21 21 25 24 20 19 23 19 20 8 28 " -"23 22 27 33 29 28 30 27 31 27 30 27 31 33 29 38 32 35 29 33 29 " -"35 38 34 38 36 32 38 34 36 40 37 39 36 38 41 43 47 43 41 37 36 " -"39 40 50 45 42 43 37 40 47 46 51 46 47 43 53 60 54 45 57 48 52 " -"58 49 45 55 57 51 49 56 49 51 46 50 42 44 48 57 53 56 49 58 55 " -"45 50 52 59 58 59 52 61 52 54 61 60 53 57 61 54 62 62 54 60 " -; - -char *VTK_VECTOR_TEXT_116 = (char *) "24 0.551972 " -"0.42286 -0.08395 0.48000 -0.08437 0.55197 -0.07143 0.33714 -0.05914 0.29901 -0.02571 " -"0.28041 0.00857 0.44571 0.04816 0.44453 0.04857 0.53714 0.04344 0.44000 0.05008 " -"0.41057 0.07714 0.26748 0.10000 0.40152 0.11714 0.26597 0.61429 0.40260 0.61429 " -"0.17143 0.61957 0.53450 0.62000 0.53866 0.71714 0.53450 0.72286 0.17143 0.72329 " -"0.26597 0.72857 0.40260 0.72857 0.26748 0.91714 0.40000 0.99545 22 10 5 4 " -"6 7 9 10 4 3 10 3 9 8 6 " -"1 6 9 1 5 10 11 8 1 2 " -"0 9 3 11 12 13 0 1 9 10 12 " -"11 17 18 16 14 13 12 21 14 16 " -"18 21 16 22 20 23 20 13 14 15 20 " -"19 15 13 20 20 14 21 23 20 21 " -; - -char *VTK_VECTOR_TEXT_117 = (char *) "38 0.884197 " -"0.48571 -0.09009 0.53714 -0.09009 0.41714 -0.07673 0.77143 -0.07295 0.88000 -0.07186 " -"0.63518 -0.06571 0.76571 -0.06878 0.88420 -0.06571 0.34857 -0.04771 0.70857 -0.01846 " -"0.29901 -0.00857 0.27429 0.02730 0.52000 0.02723 0.56000 0.02764 0.47339 0.03714 " -"0.76000 0.03684 0.61714 0.04135 0.43943 0.05429 0.65143 0.05787 0.41330 0.07714 " -"0.25143 0.08437 0.69143 0.08704 0.39343 0.10571 0.38899 0.11714 0.71473 0.11714 " -"0.38645 0.12286 0.73294 0.15714 0.23848 0.17429 0.37563 0.17429 0.75009 0.26000 " -"0.23848 0.71714 0.37295 0.71714 0.75009 0.71714 0.88420 0.71714 0.24265 0.72286 " -"0.36878 0.72286 0.75429 0.72329 0.88000 0.72329 36 6 3 15 " -"3 7 15 3 4 7 8 17 10 2 14 " -"17 2 17 8 5 13 1 19 11 10 " -"9 16 5 12 1 13 0 12 2 12 0 " -"1 9 18 16 13 5 16 14 2 12 " -"11 22 20 21 18 9 15 21 9 21 15 " -"24 20 28 27 11 19 22 24 7 26 " -"19 10 17 24 15 7 25 22 23 20 22 " -"25 20 25 28 26 7 29 31 30 27 " -"33 29 7 34 31 35 34 30 31 31 27 " -"28 36 33 37 32 29 33 36 32 33 " -; - -char *VTK_VECTOR_TEXT_118 = (char *) "12 0.884203 " -"0.45714 -0.06947 0.58857 -0.07103 0.52000 0.09808 0.52571 0.09808 0.47580 0.23714 " -"0.16151 0.71714 0.88420 0.71714 0.16427 0.72286 0.30286 0.71951 0.74857 0.72090 " -"0.88145 0.72286 0.29714 0.72395 10 4 0 " -"2 0 4 5 3 2 0 1 3 0 " -"3 6 9 8 11 5 9 6 10 7 5 " -"11 8 5 4 3 1 6 " -; - -char *VTK_VECTOR_TEXT_119 = (char *) "14 1.231638 " -"0.39429 -0.07215 0.52571 -0.07215 0.97714 -0.07252 0.84571 -0.06947 0.45714 0.10650 " -"0.46286 0.10650 0.92000 0.12073 0.69143 0.52785 0.15122 0.72286 0.28571 0.72090 " -"0.62857 0.72243 0.76193 0.72286 1.23164 0.72286 1.10857 0.72329 12 " -"2 6 3 0 4 8 3 6 7 5 0 " -"1 12 13 6 5 4 0 7 10 5 " -"11 10 7 7 5 1 11 7 6 4 9 " -"8 12 6 2 " -; - -char *VTK_VECTOR_TEXT_120 = (char *) "17 0.882498 " -"0.15697 -0.07143 0.88073 -0.07143 0.15473 -0.06571 0.31429 -0.07035 0.72571 -0.07140 " -"0.88250 -0.06571 0.52000 0.22529 0.52571 0.22529 0.60332 0.33429 0.43534 0.34000 " -"0.51429 0.45005 0.17188 0.71714 0.86812 0.71714 0.17412 0.72286 0.86588 0.72286 " -"0.32571 0.72395 0.71429 0.72395 15 1 5 4 2 6 9 8 6 7 3 2 0 4 8 7 6 2 3 4 " -"5 8 8 10 6 10 9 6 15 11 9 16 10 8 15 9 10 12 16 8 13 " -"11 15 16 12 14 " -; - -char *VTK_VECTOR_TEXT_121 = (char *) "16 0.888063 " -"0.34286 -0.39563 0.24000 -0.38043 0.41714 -0.37641 0.45714 -0.34956 0.50436 -0.29429 " -"0.32000 -0.26680 0.22286 -0.25766 0.36652 -0.25429 0.54371 -0.22000 0.41293 -0.21429 " -"0.46848 -0.07714 0.53714 0.09292 0.16998 0.72286 0.30857 0.71999 0.76000 0.72246 " -"0.88806 0.72286 14 2 7 0 0 5 1 5 0 7 " -"6 1 5 3 7 2 7 3 9 3 4 " -"9 9 8 10 9 4 8 10 11 12 " -"11 15 14 11 8 15 11 10 8 11 13 " -"12 " -; - -char *VTK_VECTOR_TEXT_122 = (char *) "17 0.872768 " -"0.17714 -0.07295 0.86857 -0.07186 0.17143 -0.06878 0.87277 -0.06571 0.17146 0.03714 " -"0.34212 0.03714 0.87277 0.03714 0.34132 0.04286 0.44000 0.04327 0.86857 0.04329 " -"0.20571 0.61689 0.67062 0.62000 0.84991 0.64286 0.20152 0.71714 0.84991 0.71714 " -"0.20571 0.72329 0.84571 0.72329 15 2 0 4 0 1 9 0 5 4 1 3 9 5 0 8 5 7 4 0 " -"9 8 3 6 9 12 14 11 11 14 16 11 16 10 12 11 7 11 4 7 10 " -"15 13 15 10 16 " -; - -char *VTK_VECTOR_TEXT_123 = (char *) "39 0.611429 " -"0.61143 -0.39454 0.46857 -0.38420 0.40000 -0.34154 0.61143 -0.27975 0.35748 -0.27143 " -"0.52000 -0.26992 0.47787 -0.23143 0.46748 -0.19143 0.34134 -0.18000 0.46395 0.04286 " -"0.33563 0.05429 0.45184 0.14571 0.32109 0.16286 0.29143 0.21832 0.42286 0.22716 " -"0.25143 0.24943 0.18857 0.26528 0.39429 0.26698 0.31413 0.32286 0.18857 0.38615 " -"0.25143 0.40073 0.41188 0.40286 0.29143 0.42775 0.43514 0.44286 0.32823 0.49429 " -"0.45866 0.52286 0.34134 0.60286 0.46705 0.80857 0.34478 0.84857 0.47748 0.87143 " -"0.35748 0.91143 0.50286 0.90821 0.50793 0.91143 0.50857 0.91188 0.61143 0.92814 " -"0.40571 0.99511 0.46857 1.03294 0.53143 1.04437 0.61143 1.04329 37 0 3 5 6 2 5 2 6 4 0 5 1 2 " -"1 5 4 7 8 7 4 6 8 9 10 10 11 12 9 8 7 11 10 9 12 " -"17 13 12 14 17 14 12 11 18 15 13 16 15 20 18 13 17 16 20 19 15 " -"18 20 21 22 18 22 21 24 22 20 18 24 25 26 23 24 21 25 24 23 26 " -"27 28 27 26 25 28 29 30 29 28 27 30 29 35 31 32 33 36 31 33 31 " -"36 29 36 33 37 34 38 37 35 29 36 34 37 33 " -; - -char *VTK_VECTOR_TEXT_124 = (char *) "4 0.388571 " -"0.28571 -0.39454 0.38857 -0.39563 0.28571 1.04329 0.38857 1.04437 2 3 2 0 3 0 1 " -; - -char *VTK_VECTOR_TEXT_125 = (char *) "35 0.606299 " -"0.17714 -0.39454 0.31429 -0.38613 0.39429 -0.33832 0.17714 -0.27975 0.27429 -0.26784 " -"0.43681 -0.26000 0.31070 -0.23714 0.44950 -0.19714 0.32723 -0.15714 0.45295 0.04857 " -"0.33295 0.11714 0.46857 0.16404 0.35387 0.19714 0.51429 0.23258 0.56000 0.25681 " -"0.39429 0.26403 0.60630 0.26571 0.47702 0.32857 0.41714 0.36742 0.60571 0.38615 " -"0.54857 0.39927 0.50171 0.43143 0.36086 0.43714 0.46748 0.50000 0.32991 0.56857 " -"0.45252 0.78571 0.32723 0.80286 0.31748 0.87143 0.29143 0.90893 0.43470 0.91714 " -"0.17714 0.92814 0.41629 0.95714 0.36571 1.01107 0.32000 1.03294 0.17714 1.04329 33 4 3 0 2 4 1 6 7 8 1 4 0 2 6 4 5 " -"6 2 6 5 7 8 9 10 9 8 7 10 11 12 15 13 17 11 10 9 12 " -"11 15 13 14 17 13 15 11 20 17 14 20 14 16 19 20 16 21 17 20 17 " -"21 18 22 23 24 22 18 21 23 22 21 25 26 24 25 24 23 29 27 26 29 " -"26 25 27 31 28 31 27 29 32 28 31 28 33 30 33 34 30 33 28 32 " -; - -char *VTK_VECTOR_TEXT_126 = (char *) "25 0.971429 " -"0.73714 0.34462 0.20759 0.35143 0.21143 0.34662 0.81143 0.34723 0.66857 0.35756 " -"0.86857 0.36135 0.25143 0.38115 0.90857 0.38086 0.52000 0.41580 0.32571 0.42723 " -"0.97140 0.43143 0.37143 0.43866 0.42286 0.44093 0.79429 0.49009 0.21028 0.50000 " -"0.72571 0.49681 0.86286 0.50930 0.25714 0.54115 0.92571 0.54759 0.32571 0.57470 " -"0.50286 0.57621 0.96571 0.58154 0.97143 0.58073 0.38857 0.58680 0.44000 0.58723 23 1 17 14 8 4 15 13 5 7 6 1 2 5 " -"13 3 1 6 17 3 13 0 16 10 18 15 4 0 13 7 16 15 0 13 8 " -"20 12 12 20 11 9 17 6 10 16 7 17 9 19 22 21 18 11 20 24 11 " -"19 9 20 8 15 11 24 23 22 18 10 11 23 19 " -; - - -/*! Construct object with no string set and backing enabled.*/ -VTKViewer_VectorText::VTKViewer_VectorText() -{ - this->Text = NULL; - - this->Letters[33] = VTK_VECTOR_TEXT_33; - this->Letters[34] = VTK_VECTOR_TEXT_34; - this->Letters[35] = VTK_VECTOR_TEXT_35; - this->Letters[36] = VTK_VECTOR_TEXT_36; - this->Letters[37] = VTK_VECTOR_TEXT_37; - this->Letters[38] = VTK_VECTOR_TEXT_38; - this->Letters[39] = VTK_VECTOR_TEXT_39; - this->Letters[40] = VTK_VECTOR_TEXT_40; - this->Letters[41] = VTK_VECTOR_TEXT_41; - this->Letters[42] = VTK_VECTOR_TEXT_42; - this->Letters[43] = VTK_VECTOR_TEXT_43; - this->Letters[44] = VTK_VECTOR_TEXT_44; - this->Letters[45] = VTK_VECTOR_TEXT_45; - this->Letters[46] = VTK_VECTOR_TEXT_46; - this->Letters[47] = VTK_VECTOR_TEXT_47; - this->Letters[48] = VTK_VECTOR_TEXT_48; - this->Letters[49] = VTK_VECTOR_TEXT_49; - this->Letters[50] = VTK_VECTOR_TEXT_50; - this->Letters[51] = VTK_VECTOR_TEXT_51; - this->Letters[52] = VTK_VECTOR_TEXT_52; - this->Letters[53] = VTK_VECTOR_TEXT_53; - this->Letters[54] = VTK_VECTOR_TEXT_54; - this->Letters[55] = VTK_VECTOR_TEXT_55; - this->Letters[56] = VTK_VECTOR_TEXT_56; - this->Letters[57] = VTK_VECTOR_TEXT_57; - this->Letters[58] = VTK_VECTOR_TEXT_58; - this->Letters[59] = VTK_VECTOR_TEXT_59; - this->Letters[60] = VTK_VECTOR_TEXT_60; - this->Letters[61] = VTK_VECTOR_TEXT_61; - this->Letters[62] = VTK_VECTOR_TEXT_62; - this->Letters[63] = VTK_VECTOR_TEXT_63; - this->Letters[64] = VTK_VECTOR_TEXT_64; - this->Letters[65] = VTK_VECTOR_TEXT_65; - this->Letters[66] = VTK_VECTOR_TEXT_66; - this->Letters[67] = VTK_VECTOR_TEXT_67; - this->Letters[68] = VTK_VECTOR_TEXT_68; - this->Letters[69] = VTK_VECTOR_TEXT_69; - this->Letters[70] = VTK_VECTOR_TEXT_70; - this->Letters[71] = VTK_VECTOR_TEXT_71; - this->Letters[72] = VTK_VECTOR_TEXT_72; - this->Letters[73] = VTK_VECTOR_TEXT_73; - this->Letters[74] = VTK_VECTOR_TEXT_74; - this->Letters[75] = VTK_VECTOR_TEXT_75; - this->Letters[76] = VTK_VECTOR_TEXT_76; - this->Letters[77] = VTK_VECTOR_TEXT_77; - this->Letters[78] = VTK_VECTOR_TEXT_78; - this->Letters[79] = VTK_VECTOR_TEXT_79; - this->Letters[80] = VTK_VECTOR_TEXT_80; - this->Letters[81] = VTK_VECTOR_TEXT_81; - this->Letters[82] = VTK_VECTOR_TEXT_82; - this->Letters[83] = VTK_VECTOR_TEXT_83; - this->Letters[84] = VTK_VECTOR_TEXT_84; - this->Letters[85] = VTK_VECTOR_TEXT_85; - this->Letters[86] = VTK_VECTOR_TEXT_86; - this->Letters[87] = VTK_VECTOR_TEXT_87; - this->Letters[88] = VTK_VECTOR_TEXT_88; - this->Letters[89] = VTK_VECTOR_TEXT_89; - this->Letters[90] = VTK_VECTOR_TEXT_90; - this->Letters[91] = VTK_VECTOR_TEXT_91; - this->Letters[92] = VTK_VECTOR_TEXT_92; - this->Letters[93] = VTK_VECTOR_TEXT_93; - this->Letters[94] = VTK_VECTOR_TEXT_94; - this->Letters[95] = VTK_VECTOR_TEXT_95; - this->Letters[96] = VTK_VECTOR_TEXT_96; - this->Letters[97] = VTK_VECTOR_TEXT_97; - this->Letters[98] = VTK_VECTOR_TEXT_98; - this->Letters[99] = VTK_VECTOR_TEXT_99; - this->Letters[100] = VTK_VECTOR_TEXT_100; - this->Letters[101] = VTK_VECTOR_TEXT_101; - this->Letters[102] = VTK_VECTOR_TEXT_102; - this->Letters[103] = VTK_VECTOR_TEXT_103; - this->Letters[104] = VTK_VECTOR_TEXT_104; - this->Letters[105] = VTK_VECTOR_TEXT_105; - this->Letters[106] = VTK_VECTOR_TEXT_106; - this->Letters[107] = VTK_VECTOR_TEXT_107; - this->Letters[108] = VTK_VECTOR_TEXT_108; - this->Letters[109] = VTK_VECTOR_TEXT_109; - this->Letters[110] = VTK_VECTOR_TEXT_110; - this->Letters[111] = VTK_VECTOR_TEXT_111; - this->Letters[112] = VTK_VECTOR_TEXT_112; - this->Letters[113] = VTK_VECTOR_TEXT_113; - this->Letters[114] = VTK_VECTOR_TEXT_114; - this->Letters[115] = VTK_VECTOR_TEXT_115; - this->Letters[116] = VTK_VECTOR_TEXT_116; - this->Letters[117] = VTK_VECTOR_TEXT_117; - this->Letters[118] = VTK_VECTOR_TEXT_118; - this->Letters[119] = VTK_VECTOR_TEXT_119; - this->Letters[120] = VTK_VECTOR_TEXT_120; - this->Letters[121] = VTK_VECTOR_TEXT_121; - this->Letters[122] = VTK_VECTOR_TEXT_122; - this->Letters[123] = VTK_VECTOR_TEXT_123; - this->Letters[124] = VTK_VECTOR_TEXT_124; - this->Letters[125] = VTK_VECTOR_TEXT_125; - this->Letters[126] = VTK_VECTOR_TEXT_126; - -} - -/*!Calculate output.*/ -void VTKViewer_VectorText::Execute() -{ - vtkPolyData *output = this->GetOutput(); - vtkPoints *newPoints; - vtkCellArray *newPolys; - int ptOffset = 0; - int aPoint, i; - int pos = 0; - float xpos = 0; - float ypos = 0; - int ptCount, triCount; - char *aLetter; - float width; - float ftmp[3]; - - if (this->Text == NULL) - { - vtkErrorMacro (<< "Text is not set!"); - return; - } - - // Set things up; allocate memory - newPoints = vtkPoints::New(); - newPolys = vtkCellArray::New(); - ftmp[2] = 0.0; - - // Create Text - while (this->Text[pos]) - { - switch (this->Text[pos]) - { - case 32: - xpos += 0.4; - break; - - case 10: - ypos -= 1.4; - xpos = 0; - break; - - default: - // if we have a valid character - if ((this->Text[pos] > 32)&&(this->Text[pos] < 127)) - { - // add the result to our output - aLetter = this->Letters[this->Text[pos]]; - ptCount = strtol(aLetter,&aLetter,10); - width = strtod(aLetter,&aLetter); - for (i = 0; i < ptCount; i++) - { - ftmp[0] = strtod(aLetter,&aLetter); - ftmp[1] = strtod(aLetter,&aLetter); - ftmp[0] += xpos; - ftmp[1] += ypos; - newPoints->InsertNextPoint(ftmp); - } - triCount = strtol(aLetter,&aLetter,10); - for (i = 0; i < triCount; i++) - { - newPolys->InsertNextCell(3); - aPoint = strtol(aLetter,&aLetter,10); - newPolys->InsertCellPoint(aPoint + ptOffset); - aPoint = strtol(aLetter,&aLetter,10); - newPolys->InsertCellPoint(aPoint + ptOffset); - aPoint = strtol(aLetter,&aLetter,10); - newPolys->InsertCellPoint(aPoint + ptOffset); - } - ptOffset += ptCount; - xpos += width; - } - break; - } - pos++; - } - - // - // Update ourselves and release memory - // - output->SetPoints(newPoints); - newPoints->Delete(); - - output->SetPolys(newPolys); - newPolys->Delete(); -} - -/*! - Print text to stream - \param os - stream - \param indent -*/ -void VTKViewer_VectorText::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os,indent); - - os << indent << "Text: " << (this->Text ? this->Text : "(none)") << "\n"; -} - -/*!Destructor.*/ -VTKViewer_VectorText::~VTKViewer_VectorText() -{ - if (this->Text) - { - delete [] this->Text; - } -} diff --git a/src/VTKViewer/VTKViewer_VectorText.h b/src/VTKViewer/VTKViewer_VectorText.h deleted file mode 100755 index 3bc1afd33..000000000 --- a/src/VTKViewer/VTKViewer_VectorText.h +++ /dev/null @@ -1,68 +0,0 @@ -/*========================================================================= - - Program: Visualization Toolkit - Module: $RCSfile$ - Language: C++ - Date: $Date$ - Version: $Revision$ - - Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen - All rights reserved. - See Copyright.txt or http://www.kitware.com/Copyright.htm for details. - - 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.*/ - -// .NAME vtkVectorText - create polygonal text -// .SECTION Description - -// vtkVectorText generates vtkPolyData from an input text string. Besides the -// ASCII alphanumeric characters a-z, A-Z, 0-9, vtkVectorText also supports -// ASCII punctuation marks. (The supported ASCII character set are the codes -// (33-126) inclusive.) The only control character supported is the line feed -// character "\n", which advances to a new line. -// -// To use thie class, you normally couple it with a vtkPolyDataMapper and a -// vtkActor. In this case you would use the vtkActor's transformation methods -// to position, orient, and scale the text. You may also wish to use a -// vtkFollower to orient the text so that it always faces the camera. - -// .SECTION See Also -// vtkTextMapper vtkCaptionActor2D - -// VTKViewer_VectorText.h is a copy of vtkVectorText.h file. -// Purpose of copying: to remove linking to libHybrid.so VTK library - -#ifndef __VTKViewer_VectorText_h -#define __VTKViewer_VectorText_h - -#include "vtkPolyDataSource.h" -/*!Generates vtkPolyData from an input text string. - *@see vtkVectorText - */ -class VTKViewer_VectorText : public vtkPolyDataSource -{ -public: - static VTKViewer_VectorText *New(); - vtkTypeRevisionMacro(VTKViewer_VectorText,vtkPolyDataSource); - void PrintSelf(ostream& os, vtkIndent indent); - - // Description: - // Set/Get the text to be drawn. - vtkSetStringMacro(Text); - vtkGetStringMacro(Text); - -protected: - VTKViewer_VectorText(); - ~VTKViewer_VectorText(); - - void Execute(); - char *Text; - char *Letters[127]; - -}; - -#endif - - diff --git a/src/VTKViewer/VTKViewer_ViewManager.cxx b/src/VTKViewer/VTKViewer_ViewManager.cxx deleted file mode 100755 index a206be6ee..000000000 --- a/src/VTKViewer/VTKViewer_ViewManager.cxx +++ /dev/null @@ -1,35 +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 "VTKViewer_ViewManager.h" -#include "VTKViewer_ViewModel.h" - -/*!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, new VTKViewer_Viewer() ) -{ - setTitle( tr( "VTK_VIEW_TITLE" ) ); -} - -/*!Destructor.*/ -VTKViewer_ViewManager::~VTKViewer_ViewManager() -{ - /*!Do nothing.*/ -} diff --git a/src/VTKViewer/VTKViewer_ViewManager.h b/src/VTKViewer/VTKViewer_ViewManager.h deleted file mode 100755 index 38518fe06..000000000 --- a/src/VTKViewer/VTKViewer_ViewManager.h +++ /dev/null @@ -1,38 +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 -// -#ifndef VTKVIEWER_VIEWMANAGER_H -#define VTKVIEWER_VIEWMANAGER_H - -#include "VTKViewer.h" - -#include - -class SUIT_Desktop; - -/*!View manager.*/ -class VTKVIEWER_EXPORT VTKViewer_ViewManager : public SUIT_ViewManager -{ - Q_OBJECT - -public: - VTKViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* ); - virtual ~VTKViewer_ViewManager(); -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_ViewModel.cxx b/src/VTKViewer/VTKViewer_ViewModel.cxx deleted file mode 100755 index f611972ae..000000000 --- a/src/VTKViewer/VTKViewer_ViewModel.cxx +++ /dev/null @@ -1,202 +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 "VTKViewer_ViewModel.h" -#include "VTKViewer_ViewWindow.h" -#include "VTKViewer_ViewManager.h" -#include "VTKViewer_RenderWindowInteractor.h" - -#include "SUIT_ViewWindow.h" -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" - -#include -#include -#include -#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(), -myBgColor( Qt::black ) -{ -} - -/*!Destructor.*/ -VTKViewer_Viewer::~VTKViewer_Viewer() -{ -} - -/*!Gets background color.*/ -QColor VTKViewer_Viewer::backgroundColor() const -{ - return myBgColor; -} - -/*!Sets background color.*/ -void VTKViewer_Viewer::setBackgroundColor( const QColor& c ) -{ - if ( c.isValid() ) - myBgColor = c; -} - -/*!Create new instance of VTKViewer_ViewWindow, sets background color and return pointer to it.*/ -SUIT_ViewWindow* VTKViewer_Viewer::createView( SUIT_Desktop* theDesktop ) -{ - VTKViewer_ViewWindow* vw = new VTKViewer_ViewWindow( theDesktop, this ); - vw->setBackgroundColor( myBgColor ); - return vw; -} - -/*!Sets view manager and connect slots.*/ -void VTKViewer_Viewer::setViewManager(SUIT_ViewManager* theViewManager) -{ - SUIT_ViewModel::setViewManager(theViewManager); - connect(theViewManager, SIGNAL(mousePress(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMousePress(SUIT_ViewWindow*, QMouseEvent*))); - - connect(theViewManager, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseMove(SUIT_ViewWindow*, QMouseEvent*))); - - connect(theViewManager, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)), - this, SLOT(onMouseRelease(SUIT_ViewWindow*, QMouseEvent*))); -} - -/*!Insert context into popup menu.*/ -void VTKViewer_Viewer::contextMenuPopup(QPopupMenu* thePopup) -{ - thePopup->insertItem( tr( "MEN_DUMP_VIEW" ), this, SLOT( onDumpView() ) ); - thePopup->insertItem( tr( "MEN_CHANGE_BACKGROUD" ), this, SLOT( onChangeBgColor() ) ); - - thePopup->insertSeparator(); - - VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView()); - if ( aView && !aView->getToolBar()->isVisible() ) - thePopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) ); -} - -/*!On mouse press event.*/ -void VTKViewer_Viewer::onMousePress(SUIT_ViewWindow* vw, QMouseEvent* event) -{ - VTKViewer_RenderWindowInteractor* rwi = 0; - if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) ) - rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor(); - if ( !rwi ) - return; - - switch(event->button()) { - case LeftButton: - rwi->LeftButtonPressed(event) ; - break ; - case MidButton: - rwi->MiddleButtonPressed(event) ; - break ; - case RightButton: - rwi->RightButtonPressed(event) ; - break; - default: - break ; - } -} - -/*!On mouse move event.*/ -void VTKViewer_Viewer::onMouseMove(SUIT_ViewWindow* vw, QMouseEvent* event) -{ - VTKViewer_RenderWindowInteractor* rwi = 0; - if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) ) - rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor(); - if ( rwi ) - rwi->MouseMove( event ); -} - -/*!On mouse release event.*/ -void VTKViewer_Viewer::onMouseRelease(SUIT_ViewWindow* vw, QMouseEvent* event) -{ - VTKViewer_RenderWindowInteractor* rwi = 0; - if ( vw && vw->inherits( "VTKViewer_ViewWindow" ) ) - rwi = ((VTKViewer_ViewWindow*)vw)->getRWInteractor(); - if ( !rwi ) - return; - - switch(event->button()) { - case LeftButton: - rwi->LeftButtonReleased(event) ; - break ; - case MidButton: - rwi->MiddleButtonReleased(event) ; - break ; - case RightButton: - rwi->RightButtonReleased(event) ; - break; - default: - break ; - } -} - -/*!Sets flag to enable selection \a isEnable.*/ -void VTKViewer_Viewer::enableSelection(bool isEnabled) -{ - mySelectionEnabled = isEnabled; - //!! To be done for view windows -} - -/*!Sets flag to multi selection enable \a isEnable.*/ -void VTKViewer_Viewer::enableMultiselection(bool isEnable) -{ - myMultiSelectionEnabled = isEnable; - //!! To be done for view windows -} - -/*!On dump view event.*/ -void VTKViewer_Viewer::onDumpView() -{ - VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView()); - if ( aView ) - aView->onDumpView(); -} - -/*!On change back ground color event.*/ -void VTKViewer_Viewer::onChangeBgColor() -{ - VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView()); - if ( !aView ) - return; - - QColor aColor = QColorDialog::getColor( aView->backgroundColor(), aView); - if ( aColor.isValid() ) - aView->setBackgroundColor(aColor); -} - -/*!On show tool bar event.*/ -void VTKViewer_Viewer::onShowToolbar() { - VTKViewer_ViewWindow* aView = (VTKViewer_ViewWindow*)(myViewManager->getActiveView()); - if ( aView ) - aView->getToolBar()->show(); -} diff --git a/src/VTKViewer/VTKViewer_ViewModel.h b/src/VTKViewer/VTKViewer_ViewModel.h deleted file mode 100755 index 06cab857f..000000000 --- a/src/VTKViewer/VTKViewer_ViewModel.h +++ /dev/null @@ -1,80 +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 -// -#ifndef VTKVIEWER_VIEWMODEL_H -#define VTKVIEWER_VIEWMODEL_H - -#include "VTKViewer.h" -#include "SUIT_ViewModel.h" - -#include - -class SUIT_ViewWindow; -class SUIT_Desktop; - -class VTKVIEWER_EXPORT VTKViewer_Viewer: public SUIT_ViewModel -{ - Q_OBJECT - -public: - /*!Initialize type of viewer.*/ - static QString Type() { return "VTKViewer"; } - - VTKViewer_Viewer(); - virtual ~VTKViewer_Viewer(); - - virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop); - - virtual void setViewManager(SUIT_ViewManager* theViewManager); - virtual void contextMenuPopup( QPopupMenu* ); - /*!Gets type of viewer.*/ - virtual QString getType() const { return Type(); } - -public: - void enableSelection(bool isEnabled); - /*!Checks: is selection enabled*/ - bool isSelectionEnabled() const { return mySelectionEnabled; } - - void enableMultiselection(bool isEnable); - /*!Checks: is multi selection enabled*/ - bool isMultiSelectionEnabled() const { return myMultiSelectionEnabled; } - - int getSelectionCount() const; - - QColor backgroundColor() const; - void setBackgroundColor( const QColor& ); - -signals: - void selectionChanged(); - -protected slots: - void onMousePress(SUIT_ViewWindow*, QMouseEvent*); - void onMouseMove(SUIT_ViewWindow*, QMouseEvent*); - void onMouseRelease(SUIT_ViewWindow*, QMouseEvent*); - - void onDumpView(); - void onShowToolbar(); - void onChangeBgColor(); - -private: - QColor myBgColor; - bool mySelectionEnabled; - bool myMultiSelectionEnabled; -}; - -#endif diff --git a/src/VTKViewer/VTKViewer_ViewWindow.cxx b/src/VTKViewer/VTKViewer_ViewWindow.cxx deleted file mode 100755 index aba392028..000000000 --- a/src/VTKViewer/VTKViewer_ViewWindow.cxx +++ /dev/null @@ -1,612 +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 "VTKViewer_ViewWindow.h" -#include "VTKViewer_ViewModel.h" -#include "VTKViewer_RenderWindow.h" -#include "VTKViewer_RenderWindowInteractor.h" -#include "VTKViewer_InteractorStyle.h" -#include "VTKViewer_Trihedron.h" -#include "VTKViewer_Transform.h" -#include "VTKViewer_Utilities.h" - -#include "SUIT_Session.h" -#include "SUIT_ToolButton.h" -#include "SUIT_MessageBox.h" - -#include "SUIT_Tools.h" -#include "SUIT_ResourceMgr.h" - -#include -#include - -#include -#include - -/*! Construction*/ -VTKViewer_ViewWindow::VTKViewer_ViewWindow( SUIT_Desktop* theDesktop, - VTKViewer_Viewer* theModel, - VTKViewer_InteractorStyle* iStyle, - VTKViewer_RenderWindowInteractor* rw ) -: SUIT_ViewWindow( theDesktop ) -{ - myModel = theModel; - - myTrihedron = VTKViewer_Trihedron::New(); - myTransform = VTKViewer_Transform::New(); - myRenderer = vtkRenderer::New() ; - - myTrihedron->AddToRender( myRenderer ); - - myRenderWindow = new VTKViewer_RenderWindow( this, "RenderWindow" ); - setCentralWidget(myRenderWindow); - myRenderWindow->setFocusPolicy( StrongFocus ); - myRenderWindow->setFocus(); - - myRenderWindow->getRenderWindow()->AddRenderer( myRenderer ); - - myRenderer->GetActiveCamera()->ParallelProjectionOn(); - myRenderer->LightFollowCameraOn(); - myRenderer->TwoSidedLightingOn(); - - // Set BackgroundColor - QString BgrColorRed = "0";//SUIT_CONFIG->getSetting("VTKViewer:BackgroundColorRed"); - QString BgrColorGreen = "0";//SUIT_CONFIG->getSetting("VTKViewer:BackgroundColorGreen"); - QString BgrColorBlue = "0";//SUIT_CONFIG->getSetting("VTKViewer:BackgroundColorBlue"); - - if( !BgrColorRed.isEmpty() && !BgrColorGreen.isEmpty() && !BgrColorBlue.isEmpty() ) - myRenderer->SetBackground( BgrColorRed.toInt()/255., BgrColorGreen.toInt()/255., BgrColorBlue.toInt()/255. ); - else - myRenderer->SetBackground( 0, 0, 0 ); - - // Create an interactor. - myRWInteractor = rw ? rw : VTKViewer_RenderWindowInteractor::New(); - myRWInteractor->SetRenderWindow( myRenderWindow->getRenderWindow() ); - - VTKViewer_InteractorStyle* RWS = iStyle ? iStyle : VTKViewer_InteractorStyle::New(); - RWS->setGUIWindow( myRenderWindow ); - myRWInteractor->SetInteractorStyle( RWS ); - - myRWInteractor->Initialize(); - RWS->setTriedron( myTrihedron ); - RWS->FindPokedRenderer( 0, 0 ); - - setCentralWidget( myRenderWindow ); - - myToolBar = new QToolBar(this); - myToolBar->setCloseMode(QDockWindow::Undocked); - myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL")); - - createActions(); - createToolBar(); - - connect( myRenderWindow, SIGNAL(KeyPressed( QKeyEvent* )), - this, SLOT(onKeyPressed( QKeyEvent* )) ); - connect( myRenderWindow, SIGNAL(KeyReleased( QKeyEvent* )), - this, SLOT(onKeyReleased( QKeyEvent* )) ); - connect( myRenderWindow, SIGNAL(MouseButtonPressed( QMouseEvent* )), - this, SLOT(onMousePressed( QMouseEvent* )) ); - connect( myRenderWindow, SIGNAL(MouseButtonReleased( QMouseEvent* )), - this, SLOT(onMouseReleased( QMouseEvent* )) ); - connect( myRenderWindow, SIGNAL(MouseDoubleClicked( QMouseEvent* )), - this, SLOT(onMouseDoubleClicked( QMouseEvent* )) ); - connect( myRenderWindow, SIGNAL(MouseMove( QMouseEvent* )), - this, SLOT(onMouseMoving( QMouseEvent* )) ); - connect( myRWInteractor, SIGNAL(RenderWindowModified()), - myRenderWindow, SLOT(update()) ); - - connect( myRenderWindow, SIGNAL(contextMenuRequested( QContextMenuEvent * )), - this, SIGNAL(contextMenuRequested( QContextMenuEvent * )) ); - - connect( myRWInteractor, SIGNAL(contextMenuRequested( QContextMenuEvent * )), - this, SIGNAL(contextMenuRequested( QContextMenuEvent * )) ); - - - onResetView(); -} - -/*!Destructor.*/ -VTKViewer_ViewWindow::~VTKViewer_ViewWindow() -{ - myTransform->Delete(); - // In order to ensure that the interactor unregisters - // this RenderWindow, we assign a NULL RenderWindow to - // it before deleting it. - myRWInteractor->SetRenderWindow( NULL ); - myRWInteractor->Delete(); - - //m_RW->Delete() ; - myRenderer->RemoveAllProps(); - //m_Renderer->Delete() ; - myTrihedron->Delete(); -} - -/*!Checks: is trihedron displayed.*/ -bool VTKViewer_ViewWindow::isTrihedronDisplayed(){ - return myTrihedron->GetVisibility() == VTKViewer_Trihedron::eOn; -} - -/*!Activates 'zooming' transformation*/ -void VTKViewer_ViewWindow::activateZoom() -{ - myRWInteractor->GetInteractorStyle()->startZoom(); -} - -/*!Activates 'panning' transformation*/ -void VTKViewer_ViewWindow::activatePanning() -{ - myRWInteractor->GetInteractorStyle()->startPan(); -} - -/*!Activates 'rotation' transformation*/ -void VTKViewer_ViewWindow::activateRotation() -{ - myRWInteractor->GetInteractorStyle()->startRotate(); -} - -/*!Activate global panning.*/ -void VTKViewer_ViewWindow::activateGlobalPanning() -{ - //if(myTrihedron->GetVisibleActorCount(myRenderer)) - myRWInteractor->GetInteractorStyle()->startGlobalPan(); -} - -/*!Activates 'fit area' transformation*/ -void VTKViewer_ViewWindow::activateWindowFit() -{ - myRWInteractor->GetInteractorStyle()->startFitArea(); -} - -/*!Create actions:*/ -void VTKViewer_ViewWindow::createActions() -{ - if (!myActionsMap.isEmpty()) return; - - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - - QtxAction* aAction; - - //! \li Dump view - aAction = new QtxAction(tr("MNU_DUMP_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_DUMP" ) ), - tr( "MNU_DUMP_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_DUMP_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onDumpView())); - myActionsMap[ DumpId ] = aAction; - - //! \li FitAll - aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FITALL" ) ), - tr( "MNU_FITALL" ), 0, this); - aAction->setStatusTip(tr("DSC_FITALL")); - connect(aAction, SIGNAL(activated()), this, SLOT(onFitAll())); - myActionsMap[ FitAllId ] = aAction; - - //! \li FitRect - aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FITAREA" ) ), - tr( "MNU_FITRECT" ), 0, this); - aAction->setStatusTip(tr("DSC_FITRECT")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateWindowFit())); - myActionsMap[ FitRectId ] = aAction; - - //! \li Zoom - aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ZOOM" ) ), - tr( "MNU_ZOOM_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_ZOOM_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateZoom())); - myActionsMap[ ZoomId ] = aAction; - - //! \li Panning - aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_PAN" ) ), - tr( "MNU_PAN_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_PAN_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activatePanning())); - myActionsMap[ PanId ] = aAction; - - //! \li Global Panning - aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_GLOBALPAN" ) ), - tr( "MNU_GLOBALPAN_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning())); - myActionsMap[ GlobalPanId ] = aAction; - - //! \li Rotation - aAction = new QtxAction(tr("MNU_ROTATE_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ROTATE" ) ), - tr( "MNU_ROTATE_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_ROTATE_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(activateRotation())); - myActionsMap[ RotationId ] = aAction; - - //! \li Projections - aAction = new QtxAction(tr("MNU_FRONT_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_FRONT" ) ), - tr( "MNU_FRONT_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_FRONT_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onFrontView())); - myActionsMap[ FrontId ] = aAction; - - //! \li Back view - aAction = new QtxAction(tr("MNU_BACK_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BACK" ) ), - tr( "MNU_BACK_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_BACK_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onBackView())); - myActionsMap[ BackId ] = aAction; - - //! \li Top view - aAction = new QtxAction(tr("MNU_TOP_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TOP" ) ), - tr( "MNU_TOP_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_TOP_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onTopView())); - myActionsMap[ TopId ] = aAction; - - //! \li Bottom view - aAction = new QtxAction(tr("MNU_BOTTOM_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_BOTTOM" ) ), - tr( "MNU_BOTTOM_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_BOTTOM_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onBottomView())); - myActionsMap[ BottomId ] = aAction; - - //! \li Left view - aAction = new QtxAction(tr("MNU_LEFT_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_LEFT" ) ), - tr( "MNU_LEFT_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_LEFT_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onLeftView())); - myActionsMap[ LeftId ] = aAction; - - //! \li Right view - aAction = new QtxAction(tr("MNU_RIGHT_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RIGHT" ) ), - tr( "MNU_RIGHT_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_RIGHT_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onRightView())); - myActionsMap[ RightId ] = aAction; - - //! \li Reset - aAction = new QtxAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_RESET" ) ), - tr( "MNU_RESET_VIEW" ), 0, this); - aAction->setStatusTip(tr("DSC_RESET_VIEW")); - connect(aAction, SIGNAL(activated()), this, SLOT(onResetView())); - myActionsMap[ ResetId ] = aAction; - - //! \li Trihedron shown - aAction = new QtxAction(tr("MNU_SHOW_TRIHEDRON"), aResMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_TRIHEDRON" ) ), - tr( "MNU_SHOW_TRIHEDRON" ), 0, this); - aAction->setStatusTip(tr("DSC_SHOW_TRIHEDRON")); - connect(aAction, SIGNAL(activated()), this, SLOT(onTrihedronShow())); - myActionsMap[ TrihedronShowId ] = aAction; -} - -/*!Create tool bar.*/ -void VTKViewer_ViewWindow::createToolBar() -{ - myActionsMap[DumpId]->addTo(myToolBar); - myActionsMap[TrihedronShowId]->addTo(myToolBar); - - SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar); - aScaleBtn->AddAction(myActionsMap[FitAllId]); - aScaleBtn->AddAction(myActionsMap[FitRectId]); - aScaleBtn->AddAction(myActionsMap[ZoomId]); - - SUIT_ToolButton* aPanningBtn = new SUIT_ToolButton(myToolBar); - aPanningBtn->AddAction(myActionsMap[PanId]); - aPanningBtn->AddAction(myActionsMap[GlobalPanId]); - - myActionsMap[RotationId]->addTo(myToolBar); - - SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar); - aViewsBtn->AddAction(myActionsMap[FrontId]); - aViewsBtn->AddAction(myActionsMap[BackId]); - aViewsBtn->AddAction(myActionsMap[TopId]); - aViewsBtn->AddAction(myActionsMap[BottomId]); - aViewsBtn->AddAction(myActionsMap[LeftId]); - aViewsBtn->AddAction(myActionsMap[RightId]); - - myActionsMap[ResetId]->addTo(myToolBar); -} - -/*!On front view event.*/ -void VTKViewer_ViewWindow::onFrontView() -{ - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->SetPosition(1,0,0); - camera->SetViewUp(0,0,1); - camera->SetFocalPoint(0,0,0); - onFitAll(); -} - -/*!On back view slot.*/ -void VTKViewer_ViewWindow::onBackView() -{ - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->SetPosition(-1,0,0); - camera->SetViewUp(0,0,1); - camera->SetFocalPoint(0,0,0); - onFitAll(); -} - -/*!On back view slot.*/ -void VTKViewer_ViewWindow::onTopView() -{ - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->SetPosition(0,0,1); - camera->SetViewUp(0,1,0); - camera->SetFocalPoint(0,0,0); - onFitAll(); -} - -/*!On bottom view slot.*/ -void VTKViewer_ViewWindow::onBottomView() -{ - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->SetPosition(0,0,-1); - camera->SetViewUp(0,1,0); - camera->SetFocalPoint(0,0,0); - onFitAll(); -} - -/*!On left view slot.*/ -void VTKViewer_ViewWindow::onLeftView() -{ - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->SetPosition(0,-1,0); - camera->SetViewUp(0,0,1); - camera->SetFocalPoint(0,0,0); - onFitAll(); -} - -/*!On right view slot.*/ -void VTKViewer_ViewWindow::onRightView() -{ - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->SetPosition(0,1,0); - camera->SetViewUp(0,0,1); - camera->SetFocalPoint(0,0,0); - onFitAll(); -} - -/*!On reset view slot.*/ -void VTKViewer_ViewWindow::onResetView() -{ - int aTriedronIsVisible = isTrihedronDisplayed(); - myTrihedron->SetVisibility( VTKViewer_Trihedron::eOnlyLineOn ); - ::ResetCamera(myRenderer,true); - vtkCamera* aCamera = myRenderer->GetActiveCamera(); - aCamera->SetPosition(1,-1,1); - aCamera->SetViewUp(0,0,1); - ::ResetCamera(myRenderer,true); - if(aTriedronIsVisible) myTrihedron->VisibilityOn(); - else myTrihedron->VisibilityOff(); - static vtkFloatingPointType aCoeff = 3.0; - aCamera->SetParallelScale(aCoeff*aCamera->GetParallelScale()); - Repaint(); -} - -/*!On fit all slot.*/ -void VTKViewer_ViewWindow::onFitAll() -{ - myRWInteractor->GetInteractorStyle()->ViewFitAll(); - Repaint(); -} - -/*!Set background of the viewport*/ -void VTKViewer_ViewWindow::setBackgroundColor( const QColor& color ) -{ - if ( myRenderer ) - myRenderer->SetBackground( color.red()/255., color.green()/255., color.blue()/255. ); -} - -/*!Returns background of the viewport*/ -QColor VTKViewer_ViewWindow::backgroundColor() const -{ - vtkFloatingPointType backint[3]; - if ( myRenderer ) { - myRenderer->GetBackground( backint ); - return QColor(int(backint[0]*255), int(backint[1]*255), int(backint[2]*255)); - } - return SUIT_ViewWindow::backgroundColor(); -} - -/*!Repaint window. If \a theUpdateTrihedron is true - recalculate trihedron.*/ -void VTKViewer_ViewWindow::Repaint(bool theUpdateTrihedron) -{ - if (theUpdateTrihedron) onAdjustTrihedron(); - myRenderWindow->update(); -} - -/*!Get scale of transformation filter.*/ -void VTKViewer_ViewWindow::GetScale( double theScale[3] ) { - myTransform->GetScale( theScale ); -} - -/*!Set scale of transformation filter and repaint window.*/ -void VTKViewer_ViewWindow::SetScale( double theScale[3] ) { - myTransform->SetMatrixScale( theScale[0], theScale[1], theScale[2] ); - myRWInteractor->Render(); - Repaint(); -} - -/*!Calculation trihedron size.*/ -void VTKViewer_ViewWindow::onAdjustTrihedron(){ - if( !isTrihedronDisplayed() ) - return; - int aVisibleNum = myTrihedron->GetVisibleActorCount(myRenderer); - if(aVisibleNum){ - // calculating diagonal of visible props of the renderer - vtkFloatingPointType bnd[6]; - myTrihedron->VisibilityOff(); - ::ComputeVisiblePropBounds(myRenderer,bnd); - myTrihedron->VisibilityOn(); - vtkFloatingPointType aLength = 0; - static bool CalcByDiag = false; - if(CalcByDiag){ - aLength = sqrt((bnd[1]-bnd[0])*(bnd[1]-bnd[0])+ - (bnd[3]-bnd[2])*(bnd[3]-bnd[2])+ - (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); - } - - static vtkFloatingPointType aSizeInPercents = 105; - QString aSetting;// = SUIT_CONFIG->getSetting("Viewer:TrihedronSize"); - if(!aSetting.isEmpty()) aSizeInPercents = aSetting.toFloat(); - - static vtkFloatingPointType EPS_SIZE = 5.0E-3; - vtkFloatingPointType aSize = myTrihedron->GetSize(); - vtkFloatingPointType aNewSize = aLength*aSizeInPercents/100.0; - // if the new trihedron size have sufficient difference, then apply the value - if(fabs(aNewSize-aSize) > aSize*EPS_SIZE || fabs(aNewSize-aSize) > aNewSize*EPS_SIZE){ - myTrihedron->SetSize(aNewSize); - } - } - ::ResetCameraClippingRange(myRenderer); -} - -/*!Emit key pressed.*/ -void VTKViewer_ViewWindow::onKeyPressed(QKeyEvent* event) -{ - emit keyPressed( this, event ); -} - -/*!Emit key released.*/ -void VTKViewer_ViewWindow::onKeyReleased(QKeyEvent* event) -{ - emit keyReleased( this, event ); -} - -/*!Emit key pressed.*/ -void VTKViewer_ViewWindow::onMousePressed(QMouseEvent* event) -{ - emit mousePressed(this, event); -} - -/*!Emit mouse released.*/ -void VTKViewer_ViewWindow::onMouseReleased(QMouseEvent* event) -{ - emit mouseReleased( this, event ); -} - -/*!Emit mouse moving.*/ -void VTKViewer_ViewWindow::onMouseMoving(QMouseEvent* event) -{ - emit mouseMoving( this, event ); -} - -/*!Emit mouse double clicked.*/ -void VTKViewer_ViewWindow::onMouseDoubleClicked( QMouseEvent* event ) -{ - emit mouseDoubleClicked( this, event ); -} - -/*!Insert actor to renderer and transformation filter. - *Move Internal actors, if \a theMoveInternalActors is true. - */ -void VTKViewer_ViewWindow::InsertActor( VTKViewer_Actor* theActor, bool theMoveInternalActors ){ - theActor->AddToRender(myRenderer); - theActor->SetTransform(myTransform); - if(theMoveInternalActors) - myRWInteractor->MoveInternalActors(); -} - -/*!Add actor.Repaint window if \a theUpdate is true. - *@see InsertActor( VTKViewer_Actor* theActor, bool theMoveInternalActors ) - */ -void VTKViewer_ViewWindow::AddActor( VTKViewer_Actor* theActor, bool theUpdate /*=false*/ ){ - InsertActor(theActor); - if(theUpdate) - Repaint(); -} - -/*!Remove \a theActor from renderer and pepaint, if \a theUpdate is true.*/ -void VTKViewer_ViewWindow::RemoveActor( VTKViewer_Actor* theActor, bool theUpdate /*=false*/ ){ - theActor->RemoveFromRender(myRenderer); - if(theUpdate) - Repaint(); -} - -/*!@see RemoveActor() and InsertActor().*/ -void VTKViewer_ViewWindow::MoveActor( VTKViewer_Actor* theActor) -{ - RemoveActor(theActor); - InsertActor(theActor,true); -} - -/*!On trihedron show slot.*/ -void VTKViewer_ViewWindow::onTrihedronShow() -{ - if (isTrihedronDisplayed()) - myTrihedron->VisibilityOff(); - else - myTrihedron->VisibilityOn(); - myRenderWindow->update(); -} - -/*!Dump view.*/ -QImage VTKViewer_ViewWindow::dumpView() -{ - QPixmap px = QPixmap::grabWindow( myRenderWindow->winId() ); - return px.convertToImage(); -} - -/*! The method returns the visual parameters of this view as a formated string - */ -QString VTKViewer_ViewWindow::getVisualParameters() -{ - double pos[3], focalPnt[3], viewUp[3], parScale, scale[3]; - - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->GetPosition( pos ); - camera->GetFocalPoint( focalPnt ); - camera->GetViewUp( viewUp ); - parScale = camera->GetParallelScale(); - GetScale( scale ); - - QString retStr; - retStr.sprintf( "%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e*%.12e", - pos[0], pos[1], pos[2], focalPnt[0], focalPnt[1], focalPnt[2], viewUp[0], viewUp[1], - viewUp[2], parScale, scale[0], scale[1], scale[2] ); - return retStr; -} - -/*! The method restors visual parameters of this view from a formated string - */ -void VTKViewer_ViewWindow::setVisualParameters( const QString& parameters ) -{ - QStringList paramsLst = QStringList::split( '*', parameters, true ); - if ( paramsLst.size() == 13 ) { - double pos[3], focalPnt[3], viewUp[3], parScale, scale[3]; - pos[0] = paramsLst[0].toDouble(); - pos[1] = paramsLst[1].toDouble(); - pos[2] = paramsLst[2].toDouble(); - focalPnt[0] = paramsLst[3].toDouble(); - focalPnt[1] = paramsLst[4].toDouble(); - focalPnt[2] = paramsLst[5].toDouble(); - viewUp[0] = paramsLst[6].toDouble(); - viewUp[1] = paramsLst[7].toDouble(); - viewUp[2] = paramsLst[8].toDouble(); - parScale = paramsLst[9].toDouble(); - scale[0] = paramsLst[10].toDouble(); - scale[1] = paramsLst[11].toDouble(); - scale[2] = paramsLst[12].toDouble(); - - vtkCamera* camera = myRenderer->GetActiveCamera(); - camera->SetPosition( pos ); - camera->SetFocalPoint( focalPnt ); - camera->SetViewUp( viewUp ); - camera->SetParallelScale( parScale ); - myTransform->SetMatrixScale( scale[0], scale[1], scale[2] ); - myRWInteractor->Render(); - } -} diff --git a/src/VTKViewer/VTKViewer_ViewWindow.h b/src/VTKViewer/VTKViewer_ViewWindow.h deleted file mode 100755 index 05c9ee9a8..000000000 --- a/src/VTKViewer/VTKViewer_ViewWindow.h +++ /dev/null @@ -1,137 +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 -// -#ifndef VTKVIEWER_VIEWWINDOW_H -#define VTKVIEWER_VIEWWINDOW_H - -#include "VTKViewer.h" - -#include "SUIT_ViewWindow.h" - -#include "QtxAction.h" - -class vtkRenderer; -class SUIT_Desktop; -class VTKViewer_Viewer; -class VTKViewer_Trihedron; -class VTKViewer_Transform; -class VTKViewer_RenderWindow; -class VTKViewer_InteractorStyle; -class VTKViewer_RenderWindowInteractor; -class VTKViewer_Actor; - -#ifdef WIN32 -#pragma warning( disable:4251 ) -#endif - -class VTKVIEWER_EXPORT VTKViewer_ViewWindow : public SUIT_ViewWindow -{ - Q_OBJECT - -public: - VTKViewer_ViewWindow( SUIT_Desktop*, VTKViewer_Viewer*, - VTKViewer_InteractorStyle* = 0, - VTKViewer_RenderWindowInteractor* = 0 ); - virtual ~VTKViewer_ViewWindow(); - - /*!Gets tool bar.*/ - QToolBar* getToolBar() { return myToolBar; } - - void setBackgroundColor( const QColor& ); - QColor backgroundColor() const; - - /*!Gets renderer.*/ - vtkRenderer* getRenderer() { return myRenderer; } - /*!Gets render window.*/ - VTKViewer_RenderWindow* getRenderWindow() { return myRenderWindow; } - /*!Gets render window interactor.*/ - VTKViewer_RenderWindowInteractor* getRWInteractor() { return myRWInteractor; } - bool isTrihedronDisplayed(); - - void Repaint( bool theUpdateTrihedron = true ); - void onAdjustTrihedron(); - void GetScale( double theScale[3] ); - void SetScale( double theScale[3] ); - void AddActor( VTKViewer_Actor*, bool update = false ); - void RemoveActor( VTKViewer_Actor*, bool update = false); - - virtual QString getVisualParameters(); - virtual void setVisualParameters( const QString& parameters ); - -public slots: - void onFrontView(); - void onBackView(); - void onTopView(); - void onBottomView(); - void onLeftView(); - void onRightView(); - void onResetView(); - void onFitAll(); - void activateZoom(); - void activateWindowFit(); - void activateRotation(); - void activatePanning(); - void activateGlobalPanning(); - void onTrihedronShow(); - -protected: - QImage dumpView(); - -protected slots: - void onKeyPressed(QKeyEvent* event); - void onKeyReleased(QKeyEvent* event); - void onMousePressed(QMouseEvent* event); - void onMouseDoubleClicked(QMouseEvent* event); - void onMouseReleased(QMouseEvent* event); - void onMouseMoving(QMouseEvent* event); - -private: - void InsertActor( VTKViewer_Actor* theActor, - bool theMoveInternalActors = false ); - void MoveActor( VTKViewer_Actor* theActor ); - -private: - enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, RotationId, - FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, TrihedronShowId }; - typedef QMap ActionsMap; - - void createActions(); - void createToolBar(); - - VTKViewer_Viewer* myModel; - - vtkRenderer* myRenderer; - VTKViewer_RenderWindow* myRenderWindow; - VTKViewer_RenderWindowInteractor* myRWInteractor; - - VTKViewer_Trihedron* myTrihedron; - VTKViewer_Transform* myTransform; - - QToolBar* myToolBar; - ActionsMap myActionsMap; - - double myCurScale; - - friend class VTKViewer_RenderWindowInteractor; -}; - -#ifdef WIN32 -#pragma warning( default:4251 ) -#endif - -#endif diff --git a/src/VTKViewer/resources/VTKViewer_images.po b/src/VTKViewer/resources/VTKViewer_images.po deleted file mode 100755 index 0f618ddc5..000000000 --- a/src/VTKViewer/resources/VTKViewer_images.po +++ /dev/null @@ -1,79 +0,0 @@ -# SALOME SALOMEGUI : implementation of desktop and GUI kernel -# -# 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 : SALOMEGUI_icons.po -# Module : SALOME - -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" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -msgid "ICON_VTKVIEWER_VIEW_BACK" -msgstr "view_back.png" - -msgid "ICON_VTKVIEWER_VIEW_BOTTOM" -msgstr "view_bottom.png" - -msgid "ICON_VTKVIEWER_VIEW_FITALL" -msgstr "view_fitall.png" - -msgid "ICON_VTKVIEWER_VIEW_FITAREA" -msgstr "view_fitarea.png" - -msgid "ICON_VTKVIEWER_VIEW_FRONT" -msgstr "view_front.png" - -msgid "ICON_VTKVIEWER_VIEW_GLOBALPAN" -msgstr "view_glpan.png" - -msgid "ICON_VTKVIEWER_VIEW_LEFT" -msgstr "view_left.png" - -msgid "ICON_VTKVIEWER_VIEW_PAN" -msgstr "view_pan.png" - -msgid "ICON_VTKVIEWER_VIEW_RESET" -msgstr "view_reset.png" - -msgid "ICON_VTKVIEWER_VIEW_RIGHT" -msgstr "view_right.png" - -msgid "ICON_VTKVIEWER_VIEW_ROTATE" -msgstr "view_rotate.png" - -msgid "ICON_VTKVIEWER_VIEW_TOP" -msgstr "view_top.png" - -msgid "ICON_VTKVIEWER_VIEW_ZOOM" -msgstr "view_zoom.png" - -msgid "ICON_VTKVIEWER_VIEW_TRIHEDRON" -msgstr "view_triedre.png" - -msgid "ICON_VTKVIEWER_VIEW_DUMP" -msgstr "view_camera_dump.png" - diff --git a/src/VTKViewer/resources/VTKViewer_msg_en.po b/src/VTKViewer/resources/VTKViewer_msg_en.po deleted file mode 100755 index ea26f2678..000000000 --- a/src/VTKViewer/resources/VTKViewer_msg_en.po +++ /dev/null @@ -1,150 +0,0 @@ -# SALOME SALOMEGUI : implementation of desktop and GUI kernel -# -# 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 : SALOMEGUI_msg_en.po -# Module : SALOME - -msgid "" -msgstr "" -"Project-Id-Version: example-Qt-message-extraction\n" -"POT-Creation-Date: 1999-02-23 15:38+0200\n" -"PO-Revision-Date: 2005-05-31 13:25+0400\n" -"Last-Translator: \n" -"Content-Type: text/plain; charset=iso-8859-1\n" - -msgid "LBL_TOOLBAR_LABEL" -msgstr "View Operations" - -msgid "DSC_FRONT_VIEW" -msgstr "Front View" - -msgid "MNU_FRONT_VIEW" -msgstr "Front" - -msgid "DSC_BACK_VIEW" -msgstr "Back View" - -msgid "MNU_BACK_VIEW" -msgstr "Back" - -msgid "DSC_TOP_VIEW" -msgstr "Top View" - -msgid "MNU_TOP_VIEW" -msgstr "Top" - -msgid "DSC_BOTTOM_VIEW" -msgstr "Bottom View" - -msgid "MNU_BOTTOM_VIEW" -msgstr "Bottom" - -msgid "DSC_LEFT_VIEW" -msgstr "Left View" - -msgid "MNU_LEFT_VIEW" -msgstr "Left" - -msgid "DSC_RIGHT_VIEW" -msgstr "Right View" - -msgid "MNU_RIGHT_VIEW" -msgstr "Right" - -msgid "DSC_RESET_VIEW" -msgstr "Reset View Point" - -msgid "MNU_RESET_VIEW" -msgstr "Reset" - -msgid "DSC_FITALL" -msgstr "Fit all objects inside the view frame" - -msgid "MNU_FITALL" -msgstr "Fit All" - -msgid "DSC_FITRECT" -msgstr "Fit area within the view frame" - -msgid "MNU_FITRECT" -msgstr "Fit Area" - -msgid "DSC_ZOOM_VIEW" -msgstr "Zoom the view" - -msgid "MNU_ZOOM_VIEW" -msgstr "Zoom" - -msgid "DSC_PAN_VIEW" -msgstr "Panning the view" - -msgid "MNU_PAN_VIEW" -msgstr "Panning" - -msgid "DSC_GLOBALPAN_VIEW" -msgstr "Selection of a new center of the view" - -msgid "MNU_GLOBALPAN_VIEW" -msgstr "Global Panning" - -msgid "DSC_ROTATE_VIEW" -msgstr "Rotation of the point of view around the scene center" - -msgid "MNU_ROTATE_VIEW" -msgstr "Rotation" - -msgid "DSC_DUMP_VIEW" -msgstr "Saves the active view in the image file" - -msgid "MNU_DUMP_VIEW" -msgstr "Dump view..." - -msgid "VTK_IMAGE_FILES" -msgstr "Images Files (*.bmp *.png *.jpg *.jpeg)" - -msgid "INF_APP_DUMP_VIEW" -msgstr "Dump view" - -msgid "ERR_DOC_CANT_SAVE_FILE" -msgstr "Cannot save file" - -msgid "ERROR" -msgstr "Error" - -msgid "VTKViewer_Viewer::MEN_DUMP_VIEW" -msgstr "Dump view..." - -msgid "VTKViewer_Viewer::MEN_SHOW_TOOLBAR" -msgstr "Show toolbar" - -msgid "VTKViewer_Viewer::MEN_CHANGE_BACKGROUD" -msgstr "Change background..." - -msgid "VTKViewer_ViewManager::VTK_VIEW_TITLE" -msgstr "VTK scene:%M - viewer:%V" - -msgid "MNU_SHOW_TRIHEDRON" -msgstr "Show/Hide trihedron" - -msgid "DSC_SHOW_TRIHEDRON" -msgstr "Show/Hide trihedron in the current view" diff --git a/src/VTKViewer/resources/view_back.png b/src/VTKViewer/resources/view_back.png deleted file mode 100755 index 436f2da157599bbe520d17325d12bdcf949b3cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmV;20eJq2P)ToQ5QWE47Di$LQWhKmpCjr4BGlVNU9_~9sjS>4aD*%(C5tZDx$_(i5NduFs1I2f zVSn>x>`~-sRc+SA5pAb_R&}+=zsZe~xf)AZV0msvL3LgE_qjTg-fGfXkEd*mA^UAf zaqQ6e{3zRCx9g4WKX+=HX5L{)2y}cql5-E2_GBsBWt8sHfkVc75WlfWQtl5pFJ6n$ zGHm)Vi4MU*C}lTuOivEW_p*&Ha{y#4(dzf`e=jy9ckNLI%imo|WWET9`pE%_a8U9O zbHCk*QN@~-l$Y+>k-NJqX~x{J*-fW$#aa4fC>k#_U2SW^-w&p>fECP^9Y zusKaq4-)YHWv~7K=L8retyUZg)&JkskQvfD|JBoO zzYDtIW9aesNJUvtRaSAyN+~A`+mJO5V(9sDrba)=(7hC$m657fmWtJWrIf)#UN2=9 z&mflSOXjTJ1Lt6z&T{-rV)e9b@jm?D#)kQ_`G2S+uxB66eTN|2B-*BJr5mj0VbbyA zs2(xH&;1gcRYUcv4oe0Y8vw9hh62)m_YWBQuMmZqmX{1eGTG2l@Bst}kDGy&!c2+- z#4;s52b?9c!{)lG4T!<(&vll^HpL7umI+w5>6{%;pdL6aWx8IjW;Ro1*UUF3Lj>Tf tfk96h*9_n^PzO}{2?hEGbItq$-2mb3gTb{fp`ZW&002ovPDHLkV1h$>uz&yn diff --git a/src/VTKViewer/resources/view_camera_dump.png b/src/VTKViewer/resources/view_camera_dump.png deleted file mode 100755 index 8eb63e09be9919e21d4c8e54482127881dfb5d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)4z!7>1uK9(3SAf^^7GunHcs^$cDz)_6(iV({WI4*3It{)u>Xhxj~ti8*H|$zqZ} z5J<)wJji1p0cj{igW)BkJ?%Pv>zOQKhAcmy9|Z{bV&nXriRhkD0mYv?#0>V_!1=*0M=P_N#mTuI*XDD zDJ5oVP*Txqwy4!>IlS;^hIEpWoQ?8%zZa8EQd-RxU+cAeeKbrM3F&eEM51X zf!*F5=A6Sm*rh$|?7AbXz(%uynHuhH?od+YZ|a=GOiey?NmGd`E5Nmlot!6`eYB*L zH19X9_1cPr5NvO4BjpB{0YpI%7DIN*JLpduKl6C+=WZ6B9R&zQh$uddSAl=4-#bmH8`<`*2LJ#707*qo IM6N<$g7~BA;{X5v diff --git a/src/VTKViewer/resources/view_fitall.png b/src/VTKViewer/resources/view_fitall.png deleted file mode 100755 index c09ff94ad89b32483194de03275ece8844f985da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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$ diff --git a/src/VTKViewer/resources/view_front.png b/src/VTKViewer/resources/view_front.png deleted file mode 100755 index c5dfc00d5f0c5af534eb0f661c971479866fe3ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3*JP)!JVgih^5+cQw$wr zBrNIEn?Eb+Xi>Xc7Dtq&7Tu@&m416~mCV(Y%K~fP+DTBgtNeI$N79)lt@ShzE6qzo z^>aPCj5UECJ`R)@Ihn#tyX>3`R16KOagjhz=M$CuKw+2^R^?sgQC!71e66*km;6jh z@4SG-)!1cGH4kL#JhGFA(vQgbe3@1|mUm(%Sd1@UMlu* zBq_~nm}%7CX1yU}%tmJ%BGCMdZHzCLn8iW*0_gW| UI2>wZ_W%F@07*qoM6N<$g1r`_kpKVy diff --git a/src/VTKViewer/resources/view_glpan.png b/src/VTKViewer/resources/view_glpan.png deleted file mode 100755 index c23322a4ae4dc6ffdbbac6af7b397fc35554d750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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#+!$#_8k0000#4hYT73@xcd(&pm-#npxikSuV5-9m#TxJaE8cS( z?6CT6guTvLO5I1?Y0TfI*^p9d4t#%GP6fh2>61#>&d|az~ z05N#?xDzwrJ#o5i(^B2kWS)!|$8SyXBtk0wa=r|AGpB2s!CAJ;*nocxT=bl{W&r1b lVS@_K(#Gk*T(fDJegL0JhzmDWEerqv002ovPDHLkV1gN~uB`w7 diff --git a/src/VTKViewer/resources/view_pan.png b/src/VTKViewer/resources/view_pan.png deleted file mode 100755 index 038fba118736ff3732a97e0e62ea4420022560ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)BjE7>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 diff --git a/src/VTKViewer/resources/view_right.png b/src/VTKViewer/resources/view_right.png deleted file mode 100755 index 598def41df5762d105c934b230cb10f1c6d8a546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmV;10eSw3P)ToQ5QWE87Di$LQWhMcK1b98RH(N>SwyrwOl9>DRjv@{2w6nR5geXj8e_2O0(Dq` zyZ6bQNNyxaDdRw#w1<|O zeKUKEGlm|2j+EsY6?qZ2Y>XMH@B^xG5koK63sv0%g=1i+3LvEv>4SE#&@w>Q;=R{->_G!~_p%cc;8FnQ*Q|c6g@69AY)N!AvA65Z?PeDGCWSsE#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/VTKViewer/resources/view_scaling.png b/src/VTKViewer/resources/view_scaling.png deleted file mode 100644 index 5d3443634a69abf41d825b5fdbd331808066cbda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)Po92!IiWcWARVf8UuMehUVxU!Hz^ z5f56#t2#PWfNiO<0o+x?B5WVo4EKQ*e-_w!F6>dmN?0+Lro6P-)DMJ@bM4ThIOU@b^V*pBXJDE)Ec)66%zq5v} zehjZCTW5+kpMTqjo2`@kf9-F^Z6D^)c+e{Oxt+Z|TmSVjD%qku5kW*U0RPyptkEvj v&T52V$YQbZe1K-N$!s?J7YrZ_L%aS33LLx=Qy+Xqgx~S9*QoBGheug2Av0WAs zFLL8(#^3xTQ$dDi)nZ;8(K2To-iANruP&6}y-1bJu>QGEg4*lW-M7P*Yh^Wsudn!IH=BRb0Ay{}Y1;~CDR|NXF`uxx&gwImCKbNEqn54q3I z=cPXnM0BN8G?0VZQ~F8&z%U_&EZnq=lkz=kni19Q*9Hhlu)NPf;XgX3-h0000LX zs1y%eI2<_t`Okm;B*3xPIM^@Te*!xGCPvWL)&+Z6<^aSeanP*?5c~`)P$zEz|oc#e30cD(1^Uc5=y=x$By?ZPaRGr!Wk^d?nv5moIats-AJTEz@`9Z`A4^ k(&qh^`6b{_V(&lL4{SuhVMr-3DgXcg07*qoM6N<$f-sH8LI3~& diff --git a/src/VTKViewer/resources/view_update_rate.png b/src/VTKViewer/resources/view_update_rate.png deleted file mode 100755 index 3db37ac12b507939b2f26a7fbfaed78a36a29f8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 974 zcmV;<12O!GP)RI+y?e7jKeZ#YO-C142neK~#9!V*LOAKLa%ZKmai@P#FLO5Cc9Jnwpw| zB>yWZDg94LN%`;S=t$5z00G1ZGLVsx5k+wE;>G{Zojb?S^Y9_Vhu^;$1k}_R)HiNq zc=F^4!w<_J3=I3h%6NeIE4qOI0fb>7$gpUBeun=?k1{;Cc##1lqqJiONU9sEq!dZN zG7!H+HW(m)SU`k^ni?OF$^_!oA3uI%U;yFUw;5jk_`zTgG+10z^vbs%KO8@Q{`?TA zW}29&sLJ2Jf899P*(d$`|9{u>7cb_*3&C|iasz`mP~7{-;lq~9%*>rPZr!>7 z5J2Ea0lM%%2=sJ!|DP2a`u}fG(Elt$!~e5q&H9fFjvYPvAEp)=tX#3;zq+a_$dwEL z0fd=s-oIzK`sowHzOP>yfUaiP0SrG)b#;dNx;h3+D=UVu@NlrQh$K7QcA|*Vxz7!vGAUjjL9!1oJ&SJm6}-e*4DI3zP=|kmaCw00MS=!^cmb{$NXULW-ssVgLbzVc^^c4;VOr$>zZ4Qp;LsNyC8dI**=WgxNv%230_k>p-N4Y`Y6d;tU)0Ma+6OBdr}-v9sr07*qoM6N<$g70pmDF6Tf diff --git a/src/VTKViewer/resources/view_zoom.png b/src/VTKViewer/resources/view_zoom.png deleted file mode 100755 index b46573914ded57ddbdbd0fdfdeca02dbe772beca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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

- - -__version__
_omnipymodule
2d 1 2 3 4
3d 1 2 3 4
-

-able 1 2 3 4 5
abort
above 1 2
abstraction
access 1 2 3 4 5
accessible 1 2
accidentally
according 1 2 3 4
account
achieved
achieves
acquainted
actions
activated 1 2 3
active 1 2 3 4
actual
actually 1 2
adapted
add 1 2 3 4 5
added
adding
addition 1 2
additional 1 2 3 4 5 6
adjust
advanced 1 2 3
affecting
again 1 2 3
aims
algorithm
algorithms 1 2
allow 1 2
allowing 1 2 3
allows 1 2 3 4 5 6 7
along 1 2
alongside
already
always
amount
animation
annoying
another 1 2
answer
any 1 2 3 4 5 6 7 8 9
anything
appear 1 2 3 4 5
appears 1 2
applets
application 1 2 3 4 5 6 7 8 9 10 11
applications 1 2
applies
apply 1 2
approach 1 2 3
appropriate 1 2
approximate
arabic
architecture 1 2
architectures
area 1 2
areas 1 2
argument
arguments
arrow
ascending
ascii 1 2
ask
associated 1 2
attached
attribute
attributes
author 1 2
auto 1 2
automatic
automatically 1 2 3 4 5 6 7
availability
available 1 2 3 4 5 6
avoid
aware
awk
axes 1 2
axis 1 2
-

-b
back 1 2
background
bar 1 2 3
base
based 1 2 3
bash
basic 1 2 3 4 5
basis
batch 1 2 3
becomes
before
begin
begins
behave
behavior
being
below 1 2
bin 1 2 3
binaries
binary 1 2
blue
blur
bmp
bold
book
books
boost
boost_version
boostdir
borders
both 1 2 3
bottom 1 2
box 1 2 3 4 5 6 7 8 9
boxes
brackets
brief 1 2 3
bringing
browse 1 2 3
browser 1 2 3 4 5 6 7
bug
build 1 2
building
built 1 2 3
button 1 2 3 4 5 6 7 8 9
buttons 1 2 3 4
-

-c 1 2 3
cad 1 2
cae
calculation
calculations 1 2
call 1 2 3 4
called 1 2
calling
calls
cam
cancel
capability
caption
care
carefully
carrying
cars
cascade 1 2
case 1 2 3 4 5 6 7
casroot
cat
catalog
catalogmodulegeneral
catalogmodulepersonnel
catalogue 1 2
categories


-5ouEnNE;d{DrN-0~;rJ#XhZ#3ly+z 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 j1T diff --git a/doc/salome/gui/GUI/pics/loadscript.png b/doc/salome/gui/GUI/pics/loadscript.png deleted file mode 100755 index e681fc7453b7aab2f8d034e2aa394625bfe7235c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19952 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 KMNUMnLSTY#DxSLl diff --git a/doc/salome/gui/GUI/pics/loadstudy2.png b/doc/salome/gui/GUI/pics/loadstudy2.png deleted file mode 100755 index 595ea0528410f67c2228806613f7daffff88e4ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8181 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 diff --git a/doc/salome/gui/GUI/pics/lockedstudy.png b/doc/salome/gui/GUI/pics/lockedstudy.png deleted file mode 100755 index 9ec7e744ba90f96b3cf92f1acd5c382b861a23af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6140 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

For - all color definitions click on the respective line to access to the Select - Color dialog box.