--- /dev/null
+ 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.
+\f
+ 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.
+\f
+ 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.
+\f
+ 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.
+\f
+ 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.
+\f
+ 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.
+\f
+ 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.
+\f
+ 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.
+\f
+ 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
+\f
+ 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.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it 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.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# -* Makefile *-
+#
+# Author : Patrick GOLDBRONN (CEA)
+# Date : 28/06/2001
+# $Header$
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+if GUI_ENABLE_CORBA
+ IDLDIR = idl
+else !GUI_ENABLE_CORBA
+ IDLDIR =
+endif
+
+SUBDIRS = $(IDLDIR) adm_local resources src doc bin
+
+DIST_SUBDIRS = idl adm_local resources src doc bin
+
+DISTCLEANFILES = a.out aclocal.m4 configure
+
+salomeinclude_DATA=GUI_version.h
+
+EXTRA_DIST+= \
+ build_configure \
+ clean_configure \
+ LICENCE
+
+dist-hook:
+ rm -rf `find $(distdir) -name CVS`
+
+usr_docs:
+ (cd doc && $(MAKE) $(AM_MAKEFLAGS) usr_docs)
+
+docs:usr_docs
+
+dev_docs:
+ (cd doc && $(MAKE) $(AM_MAKEFLAGS) dev_docs)
+++ /dev/null
-# 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
-
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG
+# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+SUBDIRS = unix
+++ /dev/null
-# 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:
-
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG
+# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+SUBDIRS = config_files
+
+# this is for LIGHT module compatibility
+dist_admlocalunix_DATA=make_conclude.in
\ No newline at end of file
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG
+# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+dist_admlocalm4_DATA=\
+check_disable_Corba.m4 \
+check_GLViewer.m4 \
+check_GUI.m4 \
+check_msg2qm.m4 \
+check_OCCViewer.m4 \
+check_opengl.m4 \
+check_Plot2dViewer.m4 \
+check_PyConsole.m4 \
+check_pyqt.m4 \
+check_qt.m4 \
+check_qwt.m4 \
+check_SalomeObject.m4 \
+check_sip.m4 \
+check_SupervGraphViewer.m4 \
+check_vtk.m4 \
+check_VTKViewer.m4 \
+check_corba_in_GUI.m4 \
+check_QxGraphViewer.m4 \
+README
# search Salome binaries in PATH variable
AC_PATH_PROG(TEMP, $1)
if test "x${TEMP}" != "x" ; then
- AC_MSG_RESULT(libLightApp.so was found at : ${TEMP})
+ AC_MSG_RESULT($1 was found at : ${TEMP})
SALOME_BIN_DIR=`dirname ${TEMP}`
SALOME_GUI_DIR=`cd ${SALOME_BIN_DIR}/../..; pwd`
fi
fi
fi
-if test -f ${SALOME_GUI_DIR}/lib${LIB_LOCATION_SUFFIX}/salome/$1 ; then
+if test -f ${SALOME_GUI_DIR}/bin/salome/$1 ; then
SalomeGUI_ok=yes
AC_MSG_RESULT(Using SALOME GUI distribution in ${SALOME_GUI_DIR})
])dnl
AC_DEFUN([CHECK_SALOME_GUI],[
- CHECK_GUI([libLightApp.so],
+ CHECK_GUI([SUITApp],
[SALOME GUI])
-])dnl
\ No newline at end of file
+])dnl
--- /dev/null
+#
+# Check configure option --disable-qxGraphViewer=[yes|no|DIR] taking into account that
+# DISABLE_QXGRAPHVIEWER may be already set during build_configure,
+# Set DISABLE_QXGRAPHVIEWER to yes|no
+#
+# Author : Edawrd AGAPOV (OCC, 2005)
+#
+
+AC_DEFUN([CHECK_QXGRAPHVIEWER],[
+
+AC_ARG_WITH(qxGraphViewer,
+ [ --disable-qxGraphViewer default=no ],
+ disable_qxGraphViewer="$withval",disable_qxGraphViewer="${DISABLE_QXGRAPHVIEWER}")
+
+case $disable_qxGraphViewer in
+ yes)
+# AC_MSG_RESULT(************************************************)
+# AC_MSG_RESULT(******* DISABLE QxGraphViewer configuration ********)
+# AC_MSG_RESULT(************************************************)
+ DISABLE_QXGRAPHVIEWER="yes"
+ AC_SUBST(DISABLE_QXGRAPHVIEWER)
+esac
+
+
+])dnl
#------------------------------------------------------------
AC_DEFUN([CHECK_CORBA_IN_GUI],[
- CHECK_GUI([libSalomeApp.so],
+ CHECK_GUI([SALOME_Session_Server],
[CORBA SALOME GUI])
CORBA_IN_GUI=${SalomeGUI_ok}
AC_SUBST(CORBA_IN_GUI)
break
fi
done
+
+ # workaround a problem with libGL library location
+ for idir in $dirs; do
+ if test -r "${idir}/libGLU.la"; then
+ GLU_LA_PATH="${idir}/libGLU.la"
+ GL_LA_PATH_TO_CHECK=`cat ${GLU_LA_PATH} | awk '{ for(i=1;i<NF;i++){ if(gsub("libGL.la","&",$i)>0) print $i } }'`
+ if test -z ${GL_LA_PATH_TO_CHECK} || test -r ${GL_LA_PATH_TO_CHECK}; then
+ # nothing to do
+ break
+ fi
+ for jdir in $dirs; do
+ if test -r "${jdir}/libGL.la"; then
+ GL_LA_PATH="${jdir}/libGL.la"
+ # copy the libGLU.la file and set correct libGL.la path in it
+ NEW_GLU_LA_PATH=${ROOT_BUILDDIR}
+ NEW_GLU_LA_FILE="${NEW_GLU_LA_PATH}/libGLU.la"
+ sed -e "s%${GL_LA_PATH_TO_CHECK}%${GL_LA_PATH}%" ${GLU_LA_PATH} > "${NEW_GLU_LA_FILE}"
+ chmod -f --reference=${GLU_LA_PATH} "${NEW_GLU_LA_FILE}"
+ # set a new libGLU.la path
+ GLU_LIB_PATH="-L${NEW_GLU_LA_PATH}"
+ # create a simbolic link to libGLU.so
+ for kdir in $dirs; do
+ if test -r "${kdir}/libGLU.so"; then
+ cp -fs "${kdir}/libGLU.so" "${NEW_GLU_LA_PATH}/libGLU.so"
+ break
+ fi
+ done
+ break
+ fi
+ done
+ break
+ fi
+ done
+
LDFLAGS_old="${LDFLAGS}"
LDFLAGS="${LDFLAGS} ${OGL_LIBS} ${GLU_LIB_PATH}"
AC_CHECK_LIB([GLU],
AC_LANG_RESTORE
])dnl
+
fi
fi
fi
+if test "x$pyqt_uic_ok" == "xno"; then
+ dnl try in $PATH
+ AC_PATH_PROG(PYUIC, pyuic)
+ if test "x$PYUIC" != x; then
+ PYQTDIR=$PYUIC
+ PYQTDIR=`dirname $PYQTDIR`
+ PYQTDIR=`dirname $PYQTDIR`
+ pyqt_uic_ok=yes
+ fi
+fi
if test "x$pyqt_uic_ok" == "xno"; then
dnl try ${SIPDIR}
if test "x${SIPDIR}" != "x"; then
fi
fi
if test "x$pyqt_lib_ok" == "xno"; then
- dnl try {PYQTDIR}/lib
- if test -d {PYQTDIR}/lib; then
+ dnl try ${PYQTDIR}/lib
+ if test -d ${PYQTDIR}/lib; then
AC_CHECK_FILE(${PYQTDIR}/lib/libqtcmodule.so,pyqt_lib_ok=yes,pyqt_lib_ok=no)
if test "x$pyqt_lib_ok" == "xyes"; then
PYQT_LIBS="-L${PYQTDIR}/lib -lqtcmodule"
fi
fi
if test "x$pyqt_lib_ok" == "xno"; then
- dnl try {PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages
- if test -d {PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages; then
+ dnl try ${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages
+ if test -d ${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages; then
AC_CHECK_FILE(${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages/libqtcmodule.so,pyqt_lib_ok=yes,pyqt_lib_ok=no)
if test "x$pyqt_lib_ok" == "xyes"; then
PYQT_LIBS="-L${PYQTDIR}/lib${LIB_LOCATION_SUFFIX}/python${PYTHON_VERSION}/site-packages -lqtcmodule"
fi
fi
fi
+if test "x$pyqt_sips_ok" == "xno"; then
+ dnl try ${PYQTDIR}/share/sip/qt
+ if test "x${PYQTDIR}" != "x"; then
+ if test -d ${PYQTDIR}/share/sip/qt ; then
+ AC_CHECK_FILE(${PYQTDIR}/share/sip/qt/qglobal.sip,pyqt_sips_ok=yes,pyqt_sips_ok=no)
+ if test "x$pyqt_sips_ok" == "xyes"; then
+ PYQT_SIPS="${PYQTDIR}/share/sip/qt"
+ fi
+ fi
+ fi
+fi
if test "x$pyqt_sips_ok" == "xno"; then
dnl try ${SIPDIR}/sip
if test "x${SIPDIR}" != "x"; then
CXXFLAGS=$CXXFLAGS_old
LIBS=$LIBS_old
fi
+# get latest Qt version supported
+QT_VERS=`grep -e "[[[:space:]]]*Qt_[[[:digit:]_]]\+}" ${PYQT_SIPS}/versions.sip | sed -e "s/\(.*\)[[[:space:]]]*\(Qt_[[[:digit:]_]]\+\)}/\2/g"`
+AC_MSG_RESULT(Latest Qt version supported by PyQt is $QT_VERS)
AC_SUBST(PYQT_INCLUDES)
AC_SUBST(PYQT_LIBS)
AC_SUBST(PYQT_SIPS)
AC_SUBST(PYUIC)
AC_SUBST(PYQT_SIPFLAGS)
+AC_SUBST(QT_VERS)
AC_LANG_RESTORE
qt_inc_ok=no
QTINC=""
AC_CHECK_FILE(${QTDIR}/include/qt3/qglobal.h,QTINC="/qt3",QTINC="")
- QT_VERS=`grep "QT_VERSION_STR" ${QTDIR}/include${QTINC}/qglobal.h | sed -e 's%^#define QT_VERSION_STR\([[:space:]]*\)%%g' -e 's%\"%%g'`
- AC_MSG_RESULT(Qt version is $QT_VERS)
- QT_VERS="Qt_"`echo $QT_VERS | sed -e 's%\"%%g' -e 's%\.%_%g'`
+ QT_VERSION=`grep "QT_VERSION_STR" ${QTDIR}/include${QTINC}/qglobal.h | sed -e 's%^#define QT_VERSION_STR\([[:space:]]*\)%%g' -e 's%\"%%g'`
+ AC_MSG_RESULT(Qt version is $QT_VERSION)
fi
if test "x$qt_ok" = "xyes"
AC_SUBST(QT_MT_INCLUDES)
AC_SUBST(QT_LIBS)
AC_SUBST(QT_MT_LIBS)
-AC_SUBST(QT_VERS)
+AC_SUBST(QT_VERSION)
AC_LANG_RESTORE
SIP_VERS=v4_old ;;
4.2*)
SIP_VERS=v4_new ;;
+ 4.3*)
+ SIP_VERS=v4_new ;;
+ 4.4*)
+ SIP_VERS=v4_new ;;
+ 4.5*)
+ SIP_VERS=v4_new ;;
+ 4.6*)
+ SIP_VERS=v4_new ;;
+ 4.7*)
+ SIP_VERS=v4_new ;;
*)
AC_MSG_RESULT(sip version $version not supported)
SIP_VERS=unsupported ;;
esac
+ if test "x$SIPDIR" = "x" ; then
+ SIPDIR=`dirname $SIP`
+ SIPDIR=`dirname $SIPDIR`
+ fi
+
sip_ok=no
dnl Search sip.h file
if test "x$SIPDIR" != "x" ; then
AC_SUBST(SIP_LIBS)
AC_SUBST(SIP_VERS)
+AM_CONDITIONAL(IS_SIP_V4, [test $SIP_VERS == v4_old || test $SIP_VERS == v4_new])
+AM_CONDITIONAL(IS_SIP_NEW, [test $SIP_VERS == v3_new || test $SIP_VERS == v4_new])
+
AC_MSG_RESULT(for sip: $sip_ok)
])dnl
dnl
dnl
-AC_DEFUN([CHECK_VTK],[
+dnl
+dnl OPTIONS_VTK
+dnl ------------------------------------------------------------------------
+dnl Adds the --with-vtk=path and --with-vtk-version configure options
+dnl
+AC_DEFUN([OPTIONS_VTK], [
+ AC_ARG_WITH([vtk],
+ [AC_HELP_STRING([--with-vtk], [The prefix where VTK is installed (default "" means taking from environment variable)])],
+ [with_vtk=$withval], [with_vtk=""])
+
+ AC_ARG_WITH([vtk-version],
+ [AC_HELP_STRING([--with-vtk-version], [VTK include directory name is vtk-suffix, e.g. vtk-5.0/. What is the suffix? (Default "yes" means taking from environment variable)])],
+ [vtk_suffix=$withval], [vtk_suffix="yes"])
+])
+
+dnl
+dnl CHECK_VTK
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([CHECK_VTK], [
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_PROG_CXX])dnl
AC_REQUIRE([AC_PROG_CPP])dnl
AC_REQUIRE([AC_PROG_CXXCPP])dnl
AC_REQUIRE([AC_LINKER_OPTIONS])dnl
+AC_REQUIRE([OPTIONS_VTK])dnl
+
AC_CHECKING(for VTK)
AC_LANG_SAVE
LXLIB=""
fi
-if test "x$x_libraries" = "x/usr/lib"
-then
- LXLIB=""
-fi
-
-if test "x$x_libraries" = "x/usr/lib"
+if test "x$x_libraries" = "x/usr/lib${LIB_LOCATION_SUFFIX}"
then
LXLIB=""
fi
LOCAL_INCLUDES="$OGL_INCLUDES"
-LOCAL_LIBS="-lvtkCommon -lvtkGraphics -lvtkImaging -lvtkFiltering -lvtkIO -lvtkRendering -lvtkHybrid $OGL_LIBS $LXLIB -lX11 -lXt"
+LOCAL_LIBS="-lvtkCommon -lvtkGraphics -lvtkImaging -lvtkFiltering -lvtkIO -lvtkRendering -lvtkHybrid -lvtkParallel -lvtkWidgets $OGL_LIBS $LXLIB -lX11 -lXt"
TRY_LINK_LIBS="-lvtkCommon $OGL_LIBS $LXLIB -lX11 -lXt"
-if test -z $VTKHOME
-then
- AC_MSG_WARN(undefined VTKHOME variable which specify where vtk was compiled)
- if test -f /usr/include/vtk/vtkPlane.h ; then
- AC_MSG_RESULT(trying /usr)
- VTKHOME="/usr"
- fi
+dnl VTK version suffix
+if test -z $vtk_suffix ; then
+ vtk_suffix="yes"
+fi
+if test "x$vtk_suffix" == "xno" ; then
+ dnl in case user wrote --with-vtk-version=no, use empty suffix
+ vtk_suffix=""
+fi
+if test "x$vtk_suffix" != "xyes" ; then
+ VTKSUFFIX="$vtk_suffix"
+else
+ dnl in case user wrote --with-vtk-version=yes, get the suffix from env
+ if test -z $VTKSUFFIX ; then
+ VTKSUFFIX="-5.0"
+ fi
fi
-if test ! -z $VTKHOME
-then
- LOCAL_INCLUDES="-I$VTKHOME/include/vtk $LOCAL_INCLUDES"
- LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk -L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk/python $LOCAL_LIBS"
- TRY_LINK_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk -L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk/python $TRY_LINK_LIBS"
+dnl VTK install dir
+if test -z $with_vtk ; then
+ with_vtk=""
+fi
+if test "x$with_vtk" = "xyes" ; then
+ dnl in case user wrote --with-vtk=yes
+ with_vtk=""
+fi
+if test "x$with_vtk" = "xno" ; then
+ dnl in case user wrote --with-vtk=no
+ with_vtk=""
+ AC_MSG_WARN(Value "no", specified for option --with-vtk, is not supported)
+fi
+
+if test "x$with_vtk" != "x" ; then
+ VTKHOME="$with_vtk"
+else
+ if test -z $VTKHOME ; then
+ AC_MSG_WARN(undefined VTKHOME variable which specify where vtk was compiled)
+ for d in /usr/local /usr ; do
+ if test -f ${d}/include/vtk${VTKSUFFIX}/vtkPlane.h ; then
+ AC_MSG_RESULT(trying ${d})
+ VTKHOME="${d}"
+ break
+ else
+ if test -f ${d}/include/vtk-5.0/vtkPlane.h ; then
+ AC_MSG_RESULT(trying ${d})
+ VTKHOME="${d}"
+ VTKSUFFIX="-5.0"
+ break
+ else
+ if test -f ${d}/include/vtk/vtkPlane.h ; then
+ AC_MSG_RESULT(trying ${d})
+ VTKHOME="${d}"
+ VTKSUFFIX=""
+ break
+ fi
+ fi
+ fi
+ done
+ fi
+fi
+
+LOCAL_INCLUDES="-I$VTKHOME/include/vtk${VTKSUFFIX} $LOCAL_INCLUDES"
+LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk${VTKSUFFIX} $LOCAL_LIBS"
+TRY_LINK_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX} -L$VTKHOME/lib${LIB_LOCATION_SUFFIX}/vtk${VTKSUFFIX} $TRY_LINK_LIBS"
+if test "x$VTKHOME" != "x/usr" ; then
+ LOCAL_LIBS="-L$VTKHOME/lib${LIB_LOCATION_SUFFIX} $LOCAL_LIBS"
fi
dnl vtk headers
AC_CHECK_HEADER(vtkPlane.h,vtk_ok="yes",vtk_ok="no")
- CPPFLAGS="$CPPFLAGS_old"
+CPPFLAGS="$CPPFLAGS_old"
- if test "x$vtk_ok" = "xyes"
- then
+if test "x$vtk_ok" = "xyes"
+then
VTK_INCLUDES="$LOCAL_INCLUDES"
- dnl vtk libraries
+ dnl vtk libraries
AC_MSG_CHECKING(linking VTK library)
- LIBS_old="$LIBS"
-# LIBS="$LIBS $TRY_LINK_LIBS"
- LIBS="$LIBS $LOCAL_LIBS"
- CPPFLAGS_old="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $VTK_INCLUDES"
+ LIBS_old="$LIBS"
+ LIBS="$LIBS $TRY_LINK_LIBS"
+ #LIBS="$LIBS $LOCAL_LIBS"
+ CPPFLAGS_old="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $VTK_INCLUDES"
- dnl VTKPY_MODULES="$VTKHOME/python"
+ dnl VTKPY_MODULES="$VTKHOME/python"
AC_CACHE_VAL(salome_cv_lib_vtk,[
- AC_TRY_LINK([#include "vtkPlane.h"],
+ AC_TRY_LINK([#include "vtkPlane.h"
+ ],
[vtkPlane::New()],
[salome_cv_lib_vtk=yes],
[salome_cv_lib_vtk=no])
- ])
- vtk_ok="$salome_cv_lib_vtk"
- LIBS="$LIBS_old"
- CPPFLAGS="$CPPFLAGS_old"
-
+ ])
+ vtk_ok="$salome_cv_lib_vtk"
+ LIBS="$LIBS_old"
+ CPPFLAGS="$CPPFLAGS_old"
fi
if test "x$vtk_ok" = "xno"
# Save cache
AC_CACHE_SAVE
-])dnl
\ No newline at end of file
+])dnl
+++ /dev/null
-# common directories to put headerfiles
-inc_builddir=$(top_builddir)/include/salome
-
-GUI_DISABLE_CORBA=@GUI_DISABLE_CORBA@
-DISABLE_GLVIEWER=@DISABLE_GLVIEWER@
-DISABLE_PYCONSOLE=@DISABLE_PYCONSOLE@
-DISABLE_PLOT2DVIEWER=@DISABLE_PLOT2DVIEWER@
-DISABLE_SUPERVGRAPHVIEWER=@DISABLE_SUPERVGRAPHVIEWER@
-DISABLE_OCCVIEWER=@DISABLE_OCCVIEWER@
-DISABLE_VTKVIEWER=@DISABLE_VTKVIEWER@
-DISABLE_SALOMEOBJECT=@DISABLE_SALOMEOBJECT@
-@SET_MAKE@
-SHELL=/bin/sh
-
-# header missing
-
-HAVE_SSTREAM=@HAVE_SSTREAM@
-
-
-LIBS=@LIBS@
-LIBSFORBIN=@LIBS@
-LDFLAGS=@LDFLAGS@ -L$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome
-LDFLAGSFORBIN=@LDFLAGS@ -L$(top_builddir)/lib@LIB_LOCATION_SUFFIX@/salome
-# add libstdc++ to link c++ library with libtool !
-LDFLAGS+= -lstdc++
-LDFLAGSFORBIN+= -lstdc++
-
-CP=@CP@
-
-# CPP
-
-CPP=@CPP@
-CXXCPP=@CXXCPP@
-CPPFLAGS=@CPPFLAGS@ -I$(inc_builddir) -I$(srcdir) -I.
-
-# C
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-C_DEPEND_FLAG = @C_DEPEND_FLAG@
-
-# C++
-
-CXX = @CXX@
-CXXFLAGS = @CXXFLAGS@
-CXX_DEPEND_FLAG = @CXX_DEPEND_FLAG@
-
-# BOOST Library
-
-BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
-
-# JAVA
-
-JAVA_INCLUDES = @JAVA_INCLUDES@
-JAVA_LIBS = @JAVA_LIBS@
-JAVA_LDPATH = @JAVA_LDPATH@
-
-# PYTHON
-
-PYTHON = @PYTHON@
-PYTHONHOME = @PYTHONHOME@
-PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
-PYTHON_VERSION = @PYTHON_VERSION@
-PYTHON_SITE = $(prefix)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages
-PYTHON_SITE_INSTALL = $(prefix)/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome
-# QT
-
-QT_ROOT = @QT_ROOT@
-QT_INCLUDES = @QT_INCLUDES@
-QT_MT_INCLUDES = @QT_INCLUDES@ -DQT_THREAD_SUPPORT
-QT_LIBS = @QT_LIBS@
-QT_MT_LIBS = @QT_MT_LIBS@
-QT_VERS = @QT_VERS@
-
-MOC = @MOC@
-UIC = @UIC@
-
-# msg2qm
-MSG2QM = @MSG2QM@
-
-#QWT
-
-QWT_INCLUDES=@QWT_INCLUDES@
-QWT_LIBS=@QWT_LIBS@
-
-# SIP
-SIP = @SIP@
-SIP_INCLUDES = @SIP_INCLUDES@
-SIP_LIBS = @SIP_LIBS@
-SIP_VERS = @SIP_VERS@
-
-# PYQT
-PYQT_SIPS = @PYQT_SIPS@
-PYQT_LIBS = @PYQT_LIBS@
-PYQT_INCLUDES = @PYQT_INCLUDES@
-PYUIC = @PYUIC@
-PYQT_SIPFLAGS = @PYQT_SIPFLAGS@
-
-# openGL
-OGL_INCLUDES=@OGL_INCLUDES@
-OGL_LIBS=@OGL_LIBS@
-
-# VTK
-VTK_INCLUDES=@VTK_INCLUDES@
-VTK_LIBS=@VTK_LIBS@
-
-# HDF5
-
-HDF5_INCLUDES=@HDF5_INCLUDES@
-HDF5_LIBS=@HDF5_LIBS@
-HDF5_MT_LIBS=@HDF5_MT_LIBS@
-
-# OpenCasCade
-
-OCC_INCLUDES=@CAS_CPPFLAGS@
-OCC_CXXFLAGS=@CAS_CXXFLAGS@
-
-CAS_KERNEL=@CAS_KERNEL@
-CAS_MATH=@CAS_MATH@
-CAS_OCAF=@CAS_OCAF@
-CAS_OCAFVIS=@CAS_OCAFVIS@
-CAS_TKTopAlgo=@CAS_TKTopAlgo@
-CAS_VIEWER=@CAS_VIEWER@
-CAS_MODELER=@CAS_MODELER@
-CAS_DATAEXCHANGE=@CAS_DATAEXCHANGE@
-CAS_LDPATH=@CAS_LDPATH@
-
-# MPICH
-
-MPICH_INCLUDES=@MPICH_INCLUDES@
-MPICH_LIBS=@MPICH_LIBS@
-
-# Swig C++ Python
-
-SWIG = @SWIG@
-SWIG_FLAGS = @SWIG_FLAGS@ -I$(inc_builddir) -I$(srcdir) -I.
-
-# OMNIORB
-
-OMNIORB_ROOT = @OMNIORB_ROOT@
-OMNIORB_INCLUDES = @OMNIORB_INCLUDES@
-OMNIORB_LIBS = @OMNIORB_LIBS@
-OMNIORB_CXXFLAGS = @OMNIORB_CXXFLAGS@
-
-OMNIORB_IDL = @OMNIORB_IDL@
-OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@
-OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(top_srcdir)/idl -I$(KERNEL_ROOT_DIR)/idl/salome
-
-OMNIORB_IDL_CLN_H = @OMNIORB_IDL_CLN_H@
-OMNIORB_IDL_CLN_CXX = @OMNIORB_IDL_CLN_CXX@
-OMNIORB_IDL_CLN_OBJ = @OMNIORB_IDL_CLN_OBJ@
-
-OMNIORB_IDL_SRV_H = @OMNIORB_IDL_SRV_H@
-OMNIORB_IDL_SRV_CXX = @OMNIORB_IDL_SRV_CXX@
-OMNIORB_IDL_SRV_OBJ = @OMNIORB_IDL_SRV_OBJ@
-
-# Default ORB
-
-CORBA_ROOT = @CORBA_ROOT@
-CORBA_INCLUDES = @CORBA_INCLUDES@
-CORBA_LIBS = @CORBA_LIBS@
-CORBA_CXXFLAGS = @CORBA_CXXFLAGS@
-
-IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_srcdir)/idl -I$(KERNEL_ROOT_DIR)/idl/salome
-IDLPYFLAGS = @IDLPYFLAGS@
-
-IDL = @IDL@
-
-IDL_CLN_H = @IDL_CLN_H@
-IDL_CLN_CXX = @IDL_CLN_CXX@
-IDL_CLN_OBJ = @IDL_CLN_OBJ@
-
-IDL_SRV_H = @IDL_SRV_H@
-IDL_SRV_CXX = @IDL_SRV_CXX@
-IDL_SRV_OBJ = @IDL_SRV_OBJ@
-
-CPPFLAGS+= $(CORBA_INCLUDES)
-CXXFLAGS+= $(CORBA_CXXFLAGS)
-
-DOXYGEN = @DOXYGEN@
-DOXYGEN_WITH_PYTHON = @DOXYGEN_WITH_PYTHON@
-DOXYGEN_WITH_STL = @DOXYGEN_WITH_STL@
-
-## Shared libraries
-LT_STATIC_EXEC=@LT_STATIC_EXEC@
-DYNAMIC_DIRS=@DYNAMIC_DIRS@
-LT_LIB=libtool
-LT=$(top_builddir)/libtool
-LT_COMPILE=$(LT) --mode=compile $(CC)
-LT_LINK_LIB=$(LT_LIB) --mode=link $(CC) -rpath $(libdir)
-LT_LINK_EXE=$(LT) --mode=link $(CC) $(LT_STATIC_EXEC) -dlopen self -rpath $(bindir) $(DYNAMIC_DIRS)
-LT_RUN=$(LT) --mode=execute
-LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM)
-LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA)
-LT_UNINSTALL=$(LT) --mode=uninstall $(RM)
-
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-INSTALL_DATA=@INSTALL_DATA@
-
-# create a symbolic link (or a copie ?)
-LN_S=@LN_S@
-
-KERNEL_ROOT_DIR=@KERNEL_ROOT_DIR@
-KERNEL_SITE_DIR=@KERNEL_SITE_DIR@
-
-KERNEL_LDFLAGS=@KERNEL_LDFLAGS@
-KERNEL_CXXFLAGS=@KERNEL_CXXFLAGS@
-
-## Installation points
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-bindir=@exec_prefix@/bin/salome
-libdir=@exec_prefix@/lib@LIB_LOCATION_SUFFIX@/salome
-# warning : if user give this path in configure we could have salome/salome :-(
-includedir=@includedir@/salome
-datadir=@datadir@/salome
-idldir=${prefix}/idl/salome
-sharedpydir=@exec_prefix@/lib@LIB_LOCATION_SUFFIX@/python$(PYTHON_VERSION)/site-packages/salome/shared_modules
-incmakedir=${prefix}/salome_adm/unix
-
-docdir=${prefix}/doc/salome
-
-#
-# begin of package rules
-#
-
-.PHONY: all lib bin inc resources data docs tests install uninstall dep depend depend_idl cleandep mostlyclean clean distclean
-
-.SUFFIXES: .cxx .cc .c .f .o .lo .idl .py .i .ui .po .qm
-
-all:
- $(MAKE) inc
- $(MAKE) depend_idl
- $(MAKE) depend
- $(MAKE) lib
- $(MAKE) bin
- $(MAKE) resources
-
-#
-# add target to build administrative files
-#
-
-Makefile: $(top_builddir)/config.status $(srcdir)/Makefile.in
- cd $(top_builddir) ; ./config.status
-
-LOCAL_MAKE = make_commence make_conclude make_omniorb
-
-KERNEL_MAKE = make_module depend SALOMEconfig.h F77config.h sstream envScript
-
-$(top_builddir)/config.status: $(top_srcdir)/configure \
- $(LOCAL_MAKE:%=$(top_srcdir)/adm_local/unix/%.in) \
- $(KERNEL_MAKE:%=$(KERNEL_ROOT_DIR)/salome_adm/unix/%.in)
- cd $(top_builddir) ; ./config.status --recheck
-
-# VPATH contain $(srcdir), so make configure is good in top_srcdir and we must add target configure otherwise :-)
-ifneq ($(top_srcdir),$(srcdir))
-configure: $(top_srcdir)/configure
-endif
-
-$(top_srcdir)/configure: $(top_srcdir)/configure.in $(top_srcdir)/aclocal.m4
- cd $(top_srcdir) ; autoconf
-
-$(top_srcdir)/configure.in: $(top_srcdir)/configure.in.base
- cd $(top_srcdir) && ./build_configure
-
-
-ACLOCAL_SRC = \
-check_qt.m4 check_vtk.m4 check_qwt.m4 \
-check_sip.m4 check_msg2qm.m4 check_pyqt.m4 \
-check_opengl.m4
-
-$(top_srcdir)/aclocal.m4: $(ACLOCAL_SRC:%=$(top_srcdir)/adm_local/unix/config_files/%)
- cd $(top_srcdir) ; aclocal -I adm_local/unix/config_files -I @KERNEL_ROOT_DIR@/salome_adm/unix/config_files
--- /dev/null
+#
+# ============================================================
+# This file defines the common definitions used in several
+# Makefile. This file must be included, if needed, by the file
+# Makefile.am.
+# ============================================================
+#
+
+# Standard directory for installation
+salomeincludedir = $(includedir)/@PACKAGE@
+libdir = $(prefix)/lib@LIB_LOCATION_SUFFIX@/@PACKAGE@
+bindir = $(prefix)/bin/@PACKAGE@
+salomescriptdir = $(bindir)
+
+# Directory for installing idl files
+salomeidldir = $(prefix)/idl/@PACKAGE@
+
+# Directory for installing resource files
+salomeresdir = $(prefix)/share/@PACKAGE@/resources/@MODULE_NAME@
+
+# Directories for installing admin files
+admlocaldir = $(prefix)/adm_local
+admlocalunixdir = $(admlocaldir)/unix
+admlocalm4dir = $(admlocaldir)/unix/config_files
+
+# Shared modules installation directory
+sharedpkgpythondir =$(pkgpythondir)/shared_modules
+
+# Documentation directory
+docdir = $(datadir)/doc/@PACKAGE@
+
+# common rules
+
+# moc-files generation
+%_moc.cxx: %.h
+ $(MOC) $< -o $@
+
+# qm-files generation
+%.qm: resources/%.po
+ $(MSG2QM) $< $@
+
+EXTRA_DIST=$(MOC_FILES:%_moc.cxx=%.h) $(nodist_salomeres_DATA:%.qm=resources/%.po)
+
+mostlyclean-local:
+ rm -f @builddir@/*_moc.cxx
+ rm -f @builddir@/*.qm
+
+# tests
+tests: unittest
+
+unittest: $(UNIT_TEST_PROG)
+ @if test "x$(UNIT_TEST_PROG)" != "x"; then \
+ $(UNIT_TEST_PROG); \
+ fi;
resources: resources-po resources-cp
-resources-po: $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm)
+resources-po: $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm)
-resources-cp: $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%)
+resources-cp: $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%)
-$(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%): $(top_builddir)/share/salome/resources/% : %
+$(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%): $(top_builddir)/share/salome/resources/$(MODULE_NAME)/% : %
cp -fr $< $@;
# Make installation directories if they don't exist.
# generic rule to install .qm files :
install-qm: resources
- $(INSTALL) -d $(datadir)/resources
- @for f in X $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm); do \
+ $(INSTALL) -d $(datadir)/resources/$(MODULE_NAME)
+ @for f in X $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm); do \
if test $$f != X; then \
- ($(INSTALL_DATA) $$f $(datadir)/resources/. || exit 1); \
+ ($(INSTALL_DATA) $$f $(datadir)/resources/$(MODULE_NAME)/. || exit 1); \
fi; \
done
# generic rule to install resources files (png, ini ...):
install-res: resources
- $(INSTALL) -d $(datadir)/resources
- @for f in X $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/%); do \
+ $(INSTALL) -d $(datadir)/resources/$(MODULE_NAME)
+ @for f in X $(RESOURCES_FILES:%=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%); do \
if test $$f != X; then \
- ($(INSTALL_DATA) $$f $(datadir)/resources/. || exit 1); \
+ ($(INSTALL_DATA) $$f $(datadir)/resources/$(MODULE_NAME)/. || exit 1); \
fi; \
done
# Uninstall qm files
@for f in X $(PO_FILES:%.po=%.qm); do \
if test $$f != X; then \
- $(LT_UNINSTALL) $(datadir)/resources/$$f ; \
+ $(LT_UNINSTALL) $(datadir)/resources/$(MODULE_NAME)/$$f ; \
fi; \
done
#
distclean: clean
#remove qm file !
- -$(RM) $(PO_FILES:%.po=%.qm) $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/%.qm)
+ -$(RM) $(PO_FILES:%.po=%.qm) $(PO_FILES:%.po=$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm)
#remove include files
-$(RM) $(DEST_HEADERS)
-$(RM) $(DISTCLEAN) *.bak *.old *.new .dep*
%_wrap.cxx : %.i
$(SWIG) $(SWIG_FLAGS) -o $@ $<
-$(top_builddir)/share/salome/resources/%.qm: %.po
+$(top_builddir)/share/salome/resources/$(MODULE_NAME)/%.qm: %.po
$(MSG2QM) $< $@ ; \
#------------------------------------------------------------------------------
+++ /dev/null
-#=======================================================================
-# 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
-#=======================================================================
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG
+# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+# -* Makefile *-
+#
+# Author : Guillaume Boulant (CSSI)
+# Module : KERNEL
+# $Header$
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+#
+# ===============================================================
+# Files to be installed
+# ===============================================================
+#
+
+# These files are data, module or lib files
+nodist_salomescript_DATA= VERSION
+
+EXTRA_DIST+= VERSION.in
+
+# These files are executable scripts
+dist_salomescript_SCRIPTS=\
+ runLightSalome.csh \
+ runLightSalome.sh
#!/bin/csh -f
-if ( ! $?SUITRoot ) setenv SUITRoot ${GUI_ROOT_DIR}/share/salome
-
# this variable necessary for loading .ini or .xml file
-if ( ! $?LightAppConfig ) setenv LightAppConfig ${GUI_ROOT_DIR}/share/salome/resources
-if ( ! $?LightAppResources ) setenv LightAppResources ${GUI_ROOT_DIR}/share/salome/resources
+if ( ! $?LightAppConfig ) setenv LightAppConfig ${GUI_ROOT_DIR}/share/salome/resources/gui
+if ( ! $?LightAppResources ) setenv LightAppResources ${GUI_ROOT_DIR}/share/salome/resources/gui
SUITApp LightApp -style salome $* &
#
#!/bin/bash -f
-if [ -z "$SUITRoot" ] ; then
- export SUITRoot=${GUI_ROOT_DIR}/share/salome
-fi
# this variable necessary for loading .ini or .xml file
if [ -z "$LightAppConfig" ] ; then
- export LightAppConfig=${GUI_ROOT_DIR}/share/salome/resources
+ export LightAppConfig=${GUI_ROOT_DIR}/share/salome/resources/gui
fi
if [ -z "$LightAppResources" ] ; then
- export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources
+ export LightAppResources=${GUI_ROOT_DIR}/share/salome/resources/gui
fi
SUITApp LightApp -style salome $* &
#!/bin/bash
#
-# Tool for updating list of .in file for the SALOME project
+# Tool for updating list of .in file for the SALOME project
# and regenerating configure script
#
# Author : Marc Tajchman - CEA
# Date : 10/10/2002
# $Header$
#
+# 26/10/2006: Mikhail PONIKAROV - OCN
+# Reorganization for uage of autotools
ORIG_DIR=`pwd`
CONF_DIR=`echo $0 | sed -e "s,[^/]*$,,;s,/$,,;s,^$,.,"`
-########################################################################
+# ____________________________________________________________________
# Test if the KERNEL_ROOT_DIR is set correctly
if test ! -d "${KERNEL_ROOT_DIR}"; then
echo "failed : KERNEL_ROOT_DIR variable is not correct !"
exit
fi
-# Test if the KERNEL_SRC is set correctly
-
-#if test ! -d "${KERNEL_SRC}"; then
-# echo "failed : KERNEL_SRC variable is not correct !"
-# exit
-#fi
-########################################################################
-# find_in - utility function
-#
-# usage :
-# find_in directory filename
-#
-# Finds files following the *.in pattern, recursively in the
-# directory (first argument).
-# Results are appended into the file (second argument)
-#
-# Difference from the standard unix find is that files are tested
-# before directories
-#
-
-find_in()
-{
- local i
- local f=$2
-
-# if the first argument is not a directory, returns
-
- if [ ! -d "$1" ] ; then
- return
- fi
-
-# dont look in the CVS directories
-
- case $1 in
- */CVS) return ;;
- */adm_local/*) return ;;
- *) ;;
- esac
-
-# for each regular file contained in the directory
-# test if it's a .in file
-
- for i in "$1"/*
- do
- if [ -f "$i" ] ; then
- case $i in
- *.in) echo " "$i" \\" >> $f;;
- *) ;;
- esac
- fi
- done
-
-# for each subdirectory of the first argument, proceeds recursively
-
- for i in "$1"/*
- do
- if [ -d "$i" ] ; then
- find_in "$i" "$f"
- fi
- done
-}
-
-
-#######################################################################
-# Generate list of .in files (Makefile.in, config.h.in, etc)
-# appending it in file configure.in
-
cd ${CONF_DIR}
ABS_CONF_DIR=`pwd`
-#
-# Common part of the configure.in file
-#
-chmod u+w configure.in.base
-if ! \cp -f configure.in.base configure.in_tmp1
-then
- echo
- echo "error : can't create files in" ${CONF_DIR}
- echo "aborting ..."
- chmod u-w configure.in.base
- exit
-fi
-chmod u-w configure.in.base
-
-if [ -e "${CONF_DIR}/salome_adm" ] ; then
- \rm -rf ${CONF_DIR}/salome_adm
-fi
-
-# make a link allowing AC_OUTPUT to find the salome_adm/.../*.in files
-echo "" >> configure.in_tmp1
-echo 'ln -fs ${KERNEL_ROOT_DIR}/salome_adm ${ROOT_SRCDIR}/.' >> configure.in_tmp1
-
-echo "" >> configure.in_tmp1
-echo "AC_OUTPUT([ \\" >> configure.in_tmp1
-
-#
-# List of .in files in the adm/unix directory
-# These files MUST be on top of AC_OUTPUT list so we
-# put them "manually"
-#
-
-echo " ./salome_adm/unix/SALOMEconfig.h \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/F77config.h \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/sstream \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/depend \\" >> configure.in_tmp1
-echo " ./adm_local/unix/make_omniorb:${ABS_CONF_DIR}/adm_local/unix/make_omniorb.in \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/envScript \\" >> configure.in_tmp1
-echo " ./adm_local/unix/make_commence:${ABS_CONF_DIR}/adm_local/unix/make_commence.in \\" >> configure.in_tmp1
-echo " ./adm_local/unix/make_conclude:${ABS_CONF_DIR}/adm_local/unix/make_conclude.in \\" >> configure.in_tmp1
-echo " ./salome_adm/unix/make_module \\" >> configure.in_tmp1
-
-\rm -f configure.in_tmp2 configure.in_tmp3
-touch configure.in_tmp2
-find_in . configure.in_tmp2
-sed -e '/^...salome_adm/d' configure.in_tmp2 > configure.in_tmp3
-sed -e '/^...adm_local.unix.make_omniorb/d' configure.in_tmp3 > configure.in_tmp2
-sed -e '/^...adm_local.unix.make_commence/d' configure.in_tmp2 > configure.in_tmp3
-sed -e '/configure.in/d' configure.in_tmp3 > configure.in_tmp2
-sed -e 's/.in / /' configure.in_tmp2 >> configure.in_tmp1
-#sed '/^.salome_adm/d' configure.in_tmp2 > configure.in_tmp3
-#sed '/configure.in/d' configure.in_tmp3 > configure.in_tmp2
-#sed 's/.in / /' configure.in_tmp2 >> configure.in_tmp1
-
-echo "])" >> configure.in_tmp1
-
-# delete the link created for AC_OUTPUT
-echo "" >> configure.in_tmp1
-#echo 'rm -f ${ROOT_SRCDIR}/salome_adm' >> configure.in_tmp1
-\mv configure.in_tmp1 configure.in_new
-\rm -f configure.in_tmp2 configure.in_tmp3
-
-
-########################################################################
-# Create new (or replace old) configure.in file
-# Print a message if the file is write protected
-#
-
-echo
-if test ! -f configure.in
-then
- echo -n "Creating new file 'configure.in' ... "
- if \mv configure.in_new configure.in >& /dev/null
- then
- echo "done"
- else
- echo "error, check your file permissions"
- fi
-else
- echo -n "Updating 'configure.in' file ... "
- if ! \cp configure.in configure.in_old >& /dev/null
- then
- echo
- echo
- echo "Can't backup previous configure.in"
- echo -n "Continue (you will not be able to revert) - (Y/N) ? "
- read R
- case "x$R" in
- xn*) exit;;
- xN*) exit;;
- esac
- echo
- echo -n " "
- fi
- if \cp configure.in_new configure.in >& /dev/null
- then
- echo "done"
- else
- echo
- echo "error, can't update previous configure.in"
- fi
-fi
-
-########################################################################
-# Use autoconf to rebuild the configure script
-#
-
-if test -f configure
-then
- echo -n "Updating 'configure' script ... "
-else
- echo -n "Creating 'configure' script ... "
-fi
-
-aclocal -I adm_local/unix/config_files -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files
-if autoconf
-then
- echo "done"
-else
- echo "failed (check file permissions and/or user quotas ...)"
-fi
-
-cd ${ORIG_DIR}
-
-echo
+mkdir -p salome_adm/unix/config_files
+#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files/* salome_adm/unix/config_files
+#cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/pythonbe.py salome_adm/unix
+
+# remove KERNEL deprecated configure files
+#for deprecated in ac_cc_warnings.m4 ac_cxx_partial_specialization.m4 \
+# check_mico.m4 config.guess ltmain.sh ac_cxx_bool.m4 ltconfig \
+# ac_cxx_typename.m4 check_pthreads.m4 config.sub libtool.m4 ac_cxx_mutable.m4
+#do
+# rm salome_adm/unix/config_files/${deprecated}
+#done
+
+# remove KERNEL CVS directories in subdirectory salome_adm
+#for deprecated in CVS unix/CVS unix/config_files/CVS
+#do
+# rm -rf salome_adm/${deprecated}
+#done
+
+cp -f ${KERNEL_ROOT_DIR}/salome_adm/unix/SALOMEconfig.h.in salome_adm/unix
+
+# ____________________________________________________________________
+# aclocal creates the aclocal.m4 file from the standard macro and the
+# custom macro embedded in the directory salome_adm/unix/config_files
+# and KERNEL config_files directory.
+# output:
+# aclocal.m4
+# autom4te.cache (directory)
+echo "====================================================== aclocal"
+
+aclocal -I ${KERNEL_ROOT_DIR}/salome_adm/unix/config_files \
+ -I adm_local/unix/config_files || exit 1
+
+# ____________________________________________________________________
+# libtoolize creates some configuration files (ltmain.sh,
+# config.guess and config.sub). It only depends on the libtool
+# version. The files are created in the directory specified with the
+# AC_CONFIG_AUX_DIR(<mydir>) tag (see configure.ac).
+# output:
+# salome_adm/unix/config_files/config.guess
+# salome_adm/unix/config_files/config.sub
+# salome_adm/unix/config_files/ltmain.sh
+#echo "====================================================== libtoolize"
+
+libtoolize --force --copy --automake || exit 1
+
+# ____________________________________________________________________
+# make link to KERNEL configuration files to
+#ln -sf ${KERNEL_ROOT_DIR}/salome_adm .
+
+# ____________________________________________________________________
+# autoconf creates the configure script from the file configure.ac (or
+# configure.in if configure.ac doesn't exist)
+# output:
+# configure
+echo "====================================================== autoconf"
+
+autoconf
+
+# ____________________________________________________________________
+# automake creates some scripts used in building process
+# (install-sh, missing, ...). It only depends on the automake
+# version. The files are created in the directory specified with the
+# AC_CONFIG_AUX_DIR(<mydir>) tag (see configure.ac). This step also
+# creates the Makefile.in files from the Makefile.am files.
+# output:
+# salome_adm/unix/config_files/compile
+# salome_adm/unix/config_files/depcomp
+# salome_adm/unix/config_files/install-sh
+# salome_adm/unix/config_files/missing
+# salome_adm/unix/config_files/py-compile
+# Makefile.in (from Makefile.am)
+echo "====================================================== automake"
+
+automake --copy --gnu --add-missing
--- /dev/null
+#!/bin/sh
+
+rm -rf autom4te.cache aclocal.m4 configure make_config
+find . -name "*~" -print -exec rm {} \;
+find . -name "*.pyc" -print -exec rm {} \;
+#exit
+# ==================== ON SORT AVANT
+
+find bin -name Makefile.in | xargs rm -f
+find doc -name Makefile.in | xargs rm -f
+find idl -name Makefile.in | xargs rm -f
+find resources -name Makefile.in | xargs rm -f
+find salome_adm -name Makefile.in | xargs rm -f
+find src -name Makefile.in | xargs rm -f
+rm -f Makefile.in
--- /dev/null
+#
+# Author : Marc Tajchman (CEA)
+# Date : 28/06/2001
+# Modified by : Patrick GOLDBRONN (CEA)
+# Modified by : Marc Tajchman (CEA)
+# Modified by : Mikhail PONIKAROV (OCN) - autotools usage
+#
+# Created from configure.in.base
+#
+AC_INIT([Salome2 Project GUI module], [4.1.1], [webmaster.salome@opencascade.com], [salome])
+AC_CONFIG_AUX_DIR(salome_adm/unix/config_files)
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE
+
+XVERSION=`echo $VERSION | awk -F. '{printf("0x%02x%02x%02x",$1,$2,$3)}'`
+AC_SUBST(XVERSION)
+
+# set up MODULE_NAME variable for dynamic construction of directories (resources, etc.)
+MODULE_NAME=gui
+AC_SUBST(MODULE_NAME)
+
+echo
+echo ---------------------------------------------
+echo Initialize source and build root directories
+echo ---------------------------------------------
+echo
+
+########################################################################
+# Check --disable-corba-gen and other --disable-* options
+
+if test "x${enable_corba_gen}" != "xno" ; then
+ GUI_DISABLE_CORBA="no"
+else
+ GUI_DISABLE_CORBA="yes"
+fi
+
+if test "x${enable_pyConsole}" != "xno" ; then
+ DISABLE_PYCONSOLE="no"
+else
+ DISABLE_PYCONSOLE="yes"
+fi
+
+if test "x${enable_glViewer}" != "xno" ; then
+ DISABLE_GLVIEWER="no"
+else
+ DISABLE_GLVIEWER="yes"
+fi
+
+if test "x${enable_plot2dViewer}" != "xno" ; then
+ DISABLE_PLOT2DVIEWER="no"
+else
+ DISABLE_PLOT2DVIEWER="yes"
+fi
+
+if test "x${enable_supervGraphViewer}" != "xno" ; then
+ DISABLE_SUPERVGRAPHVIEWER="no"
+else
+ DISABLE_SUPERVGRAPHVIEWER="yes"
+fi
+
+if test "x${enable_occViewer}" != "xno" ; then
+ DISABLE_OCCVIEWER="no"
+else
+ DISABLE_OCCVIEWER="yes"
+fi
+
+if test "x${enable_vtkViewer}" != "xno" ; then
+ DISABLE_VTKVIEWER="no"
+else
+ DISABLE_VTKVIEWER="yes"
+fi
+
+if test "x${enable_salomeObject}" != "xno" ; then
+ DISABLE_SALOMEOBJECT="no"
+else
+ DISABLE_SALOMEOBJECT="yes"
+fi
+
+if test "x${enable_qxGraphViewer}" != "xno" ; then
+ DISABLE_QXGRAPHVIEWER="no"
+else
+ DISABLE_QXGRAPHVIEWER="yes"
+fi
+
+
+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 !
+
+echo
+echo ---------------------------------------------
+echo Coniguring production
+echo ---------------------------------------------
+echo
+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='\${ROOT_BUILDDIR}'/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
+
+AM_PATH_PYTHON(2.3)
+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
+
+echo
+echo ---------------------------------------------
+echo Testing QxGraphViewer
+echo ---------------------------------------------
+echo
+
+CHECK_QXGRAPHVIEWER
+echo "DISABLE_QXGRAPHVIEWER = "$DISABLE_QXGRAPHVIEWER
+
+if test "x${GUI_DISABLE_CORBA}" != "xyes" ; then
+ if test "x${DISABLE_PYCONSOLE}" == "xyes" ; then
+ echo "failed : for full configuration of GUI module necessary enable PyConsole !"
+ 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
+ if test "x${DISABLE_QXGRAPHVIEWER}" == "xyes" ; then
+ echo "failed : for full configuration of GUI module necessary enable QxGraphViewer !"
+ exit
+ fi
+fi
+
+echo
+echo ---------------------------------------------
+echo Testing html generators
+echo ---------------------------------------------
+echo
+
+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 Testing libxml2
+echo ---------------------------------------------
+echo
+
+CHECK_LIBXML
+
+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 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
+
+AM_CONDITIONAL(GUI_ENABLE_CORBA, [test "$GUI_DISABLE_CORBA" = no])
+AM_CONDITIONAL(ENABLE_PYCONSOLE, [test "$DISABLE_PYCONSOLE" = no])
+AM_CONDITIONAL(ENABLE_GLVIEWER, [test "$DISABLE_GLVIEWER" = no])
+AM_CONDITIONAL(ENABLE_PLOT2DVIEWER, [test "$DISABLE_PLOT2DVIEWER" = no])
+AM_CONDITIONAL(ENABLE_SUPERVGRAPHVIEWER, [test "$DISABLE_SUPERVGRAPHVIEWER" = no])
+AM_CONDITIONAL(ENABLE_OCCVIEWER, [test "$DISABLE_OCCVIEWER" = no])
+AM_CONDITIONAL(ENABLE_VTKVIEWER, [test "$DISABLE_VTKVIEWER" = no])
+AM_CONDITIONAL(ENABLE_SALOMEOBJECT, [test "$DISABLE_SALOMEOBJECT" = no])
+AM_CONDITIONAL(ENABLE_QXGRAPHVIEWER, [test "$DISABLE_QXGRAPHVIEWER" = no])
+
+echo
+echo ---------------------------------------------
+echo copying resource files, shell scripts, and
+echo xml files
+echo ---------------------------------------------
+echo
+
+
+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
+
+echo
+echo ---------------------------------------------
+echo generating Makefiles and configure files
+echo ---------------------------------------------
+echo
+
+AC_OUTPUT_COMMANDS([ \
+ chmod +x ./bin/*; \
+ chmod +x ./bin/salome/*; \
+])
+
+# This list is initiated using autoscan and must be updated manually
+# when adding a new file <filename>.in to manage. When you execute
+# autoscan, the Makefile list is generated in the output file configure.scan.
+# This could be helpfull to update de configuration.
+AC_OUTPUT([ \
+ ./salome_adm/unix/SALOMEconfig.h \
+ ./adm_local/Makefile \
+ ./adm_local/unix/Makefile \
+ ./adm_local/unix/config_files/Makefile \
+ ./bin/VERSION \
+ ./bin/Makefile \
+ ./GUI_version.h \
+ ./doc/Makefile \
+ ./doc/salome/Makefile \
+ ./doc/salome/gui/Makefile \
+ ./doc/salome/gui/GUI/doxyfile \
+ ./doc/salome/tui/Makefile \
+ ./doc/salome/tui/GUI/doxyfile \
+ ./src/Makefile \
+ ./src/CASCatch/Makefile \
+ ./src/Qtx/Makefile \
+ ./src/Style/Makefile \
+ ./src/DDS/Makefile \
+ ./src/QDS/Makefile \
+ ./src/SUIT/Makefile \
+ ./src/STD/Makefile \
+ ./src/CAF/Makefile \
+ ./src/CAM/Makefile \
+ ./src/SUITApp/Makefile \
+ ./src/LogWindow/Makefile \
+ ./src/ObjBrowser/Makefile \
+ ./src/Prs/Makefile \
+ ./src/OBJECT/Makefile \
+ ./src/GLViewer/Makefile \
+ ./src/VTKViewer/Makefile \
+ ./src/SVTK/Makefile \
+ ./src/OCCViewer/Makefile \
+ ./src/SOCC/Makefile \
+ ./src/PyInterp/Makefile \
+ ./src/PythonConsole/Makefile \
+ ./src/Plot2d/Makefile \
+ ./src/SPlot2d/Makefile \
+ ./src/SUPERVGraph/Makefile \
+ ./src/QxGraph/Makefile \
+ ./src/LightApp/Makefile \
+ ./src/ResExporter/Makefile \
+ ./src/RegistryDisplay/Makefile \
+ ./src/TOOLSGUI/Makefile \
+ ./src/Event/Makefile \
+ ./src/Session/Makefile \
+ ./src/SalomeApp/Makefile \
+ ./src/SalomeApp/Test/Makefile \
+ ./src/SALOME_SWIG/Makefile \
+ ./src/SALOME_SWIG/supervisionexample.py \
+ ./src/SALOME_SWIG/supervisiongeomexample.py \
+ ./src/SALOME_PY/Makefile \
+ ./src/SALOME_PYQT/Makefile \
+ ./src/SALOME_PYQT/SALOME_PYQT_GUI/Makefile \
+ ./src/SALOME_PYQT/SALOME_PYQT_GUI/SALOME_PYQT_SipDefs.h \
+ ./src/SALOME_PYQT/SalomePyQt/Makefile \
+ ./resources/Makefile \
+ ./idl/Makefile \
+ Makefile
+])
+++ /dev/null
-#
-# 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.0
-XVERSION=0x030200
-AC_SUBST(VERSION)
-AC_SUBST(XVERSION)
-
-########################################################################
-# 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 idl"
-else
- dir_variables="salome_adm adm_local doc bin/salome include/salome lib${LIB_LOCATION_SUFFIX}/salome share/salome/resources"
-fi
-
-for rep in $dir_variables
-do
-# if test ! -d $rep ; then
-# eval mkdir $rep
-# fi
- $INSTALL -d $rep
-done
-
-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
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# -* Makefile *-
+#
+# Author : Patrick GOLDBRONN (CEA)
+# Date : 30/11/2001
+# $Header$
+#
+
+SUBDIRS= salome
+++ /dev/null
-# 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
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+# -* Makefile *-
+#
+# Author : Patrick GOLDBRONN (CEA)
+# Date : 30/11/2001
+# $Header$
+#
+
+SUBDIRS= tui gui
+SUBDIRSTUI= tui
+SUBDIRSGUI= gui
+
+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;
+++ /dev/null
-# 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; \
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="JavaScript">\r
-<!--\r
-\r
-var gArrayCsh = new Array();\r
-\r
-var gstrWindowOption = "";\r
-var gstrURL = "";\r
-var gbWithNavPane = false;\r
-\r
-function CshEntityItem(strAliasId, nTopicNum, strUrl) \r
-{\r
- this.strAliasId = strAliasId;\r
- this.nTopicNum = nTopicNum;\r
- this.strUrl = strUrl;\r
-}\r
-\r
-\r
-//Try to get to topic number from hash string\r
-function GetTopicNumberAuto(strMayBeNumber)\r
-{\r
- var nNum = -1;\r
- if (strMayBeNumber.length >= 1)\r
- {\r
- var strTmp = strMayBeNumber;\r
- var iEnd = strTmp.length;\r
- for (var i=0; i<iEnd; i++)\r
- {\r
- var ch = strTmp.charAt(i);\r
- if (!((ch == "0") || (ch == "1") ||\r
- (ch == "2") || (ch == "3") ||\r
- (ch == "4") || (ch == "5") ||\r
- (ch == "6") || (ch == "7") ||\r
- (ch == "8") || (ch == "9")))\r
- return GetTopicNumberById(strTmp);\r
- }\r
- nNum = parseInt(strTmp);\r
- }\r
- return nNum;\r
-}\r
-\r
-function GetTopicNumber(strHashString)\r
-{\r
- var nTopicEndPos = strHashString.indexOf(',')\r
- if (nTopicEndPos == -1) { // no window option.\r
- return GetTopicNumberOnly(strHashString);\r
- }\r
- else {\r
- var strWindowOption = strHashString.substring(nTopicEndPos + 1, strHashString.length);\r
- var strWithNavPane = 'withnavpane=true';\r
- if (strWindowOption.toLowerCase().indexOf(strWithNavPane) == 0)\r
- {\r
- if (strWindowOption.length > strWithNavPane.length)\r
- gstrWindowOption = strWindowOption.substring(strWithNavPane.length + 1);\r
- else\r
- gstrWindowOption = "";\r
- gbWithNavPane = true;\r
- }\r
- else\r
- gstrWindowOption = strWindowOption;\r
- return GetTopicNumberOnly(strHashString.substring(0, nTopicEndPos)); \r
- }\r
-}\r
-\r
-function GetTopicNumberOnly(strTopicString)\r
-{\r
- var nEqualPos = strTopicString.indexOf('=');\r
- if (nEqualPos == -1) {\r
- return GetTopicNumberAuto(strTopicString);\r
- }\r
- else {\r
- var strValue=strTopicString.substring(nEqualPos + 1, strTopicString.length);\r
- if (strTopicString.toLowerCase().indexOf("topicnumber") == 0) {\r
- return parseInt(strValue);\r
- } else if (strTopicString.toLowerCase().indexOf("context") == 0) {\r
- return GetTopicNumberById(strValue);\r
- } else if (strTopicString.toLowerCase().indexOf("remoteurl") == 0) {\r
- gstrURL = strValue;\r
- return -1;\r
- }\r
-\r
- }\r
-}\r
-\r
-//Find HomePage of the WebHelp system\r
-// we try to get the topic from remote project if it exists.\r
-function RedirectToHomePage()\r
-{\r
- if (parent && parent != this && parent.goNext)\r
- {\r
- var sHome = parent.goNext();\r
- if (sHome != "")\r
- RedirectTo(sHome);\r
- }\r
-}\r
-\r
-function getHomePage()\r
-{\r
- if (parent && parent != this && parent.getRelHomePage)\r
- {\r
- return parent.getRelHomePage(document.location.href);\r
- }\r
- return "";\r
-}\r
-\r
-function addRemoteProject(strPath)\r
-{\r
- if (parent && parent != this && parent.addProject)\r
- {\r
- parent.addProject(strPath);\r
- }\r
-}\r
-\r
-//Redirect page to...\r
-function RedirectTo(strUrl)\r
-{\r
- if (gstrWindowOption.length != 0) {\r
- var wnd = window.open(strUrl, "HelpStub", gstrWindowOption);\r
- // close current window and rename the stub window to current window.\r
- if (wnd)\r
- wnd.focus();\r
- if (parent)\r
- parent.close();\r
- }\r
- else {\r
- parent.document.location.href = strUrl;\r
- window.focus();\r
- }\r
-}\r
-\r
-//Prompt the user that we can not find...\r
-function FailToFind(strMsg)\r
-{\r
- RedirectToHomePage();\r
-}\r
-\r
-//Find topic by topic number (defined in h file)\r
-function FindTopicByTopicNum(nTopicNum)\r
-{\r
- var i = 0;\r
- var iEnd = gArrayCsh.length;\r
- for (i=0; i<iEnd; i++)\r
- {\r
- if (gArrayCsh[i].nTopicNum == nTopicNum)\r
- {\r
- var strURL = gArrayCsh[i].strUrl;\r
- if (gbWithNavPane)\r
- {\r
- var strHomePage = getHomePage();\r
- if (strHomePage.length != 0)\r
- strURL = strHomePage + strURL;\r
- } \r
- RedirectTo(strURL);\r
- return true;\r
- }\r
- }\r
- FailToFind("Fail to find topic assocaite with topic number: " + nTopicNum);\r
- return false;\r
-}\r
-\r
-var oldPrefix = "HelpIdFromHTMLHelp_"\r
-//Find topic by topic id (alias id defined in ali file)\r
-function GetTopicNumberById(strTopicId)\r
-{\r
- if (strTopicId.indexOf(oldPrefix) == 0)\r
- {\r
- strTopicId = strTopicId.substring(oldPrefix.length);\r
- }\r
-\r
- var i = 0;\r
- var iEnd = gArrayCsh.length;\r
- for (i=0; i<iEnd; i++)\r
- {\r
- if (gArrayCsh[i].strAliasId.toLowerCase() == strTopicId.toLowerCase())\r
- {\r
- return gArrayCsh[i].nTopicNum;\r
- }\r
- }\r
- gstrURL = "";\r
- return -1;\r
-}\r
-\r
-//Set Context-sensitive help entity...\r
-function SetCsh(n, strAliasId, nTopicNum, strUrl)\r
-{\r
- gArrayCsh[n] = new CshEntityItem(strAliasId,nTopicNum,strUrl);\r
-}\r
-\r
-\r
-function getHash()\r
-{\r
- if (parent && parent != this)\r
- return parent.location.hash;\r
- else\r
- return "";\r
-}\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-\r
-\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-//Find CSH according to hash string after this page\r
-if (getHash().length > 0)\r
-{\r
- // VH 05/16/00 now support \r
- // TopicID=\r
- // TopicNumber=\r
- // RemoteURL= \r
- // and WindowsOptions\r
- // with the format #a=xxx,b=xxx,c=xxx...\r
- var strHashString = getHash().toString();\r
- // change ? to : for remote URL. because java applet have some problem to pass a URL with two : inside the URL so we changed it. \r
- // so here need to change it back.\r
- strHashString = strHashString.substring(1,strHashString.length);\r
- strHashString = strHashString.replace("%072%057%057", "://");\r
- var nTopicNum = GetTopicNumber(strHashString);\r
-\r
- if (nTopicNum != -1)\r
- {\r
- FindTopicByTopicNum(nTopicNum);\r
- }\r
- else\r
- {\r
- if (gstrURL.length > 0) \r
- RedirectTo(gstrURL);\r
- else\r
- RedirectToHomePage();\r
- }\r
-}\r
-else\r
-{\r
- RedirectToHomePage();\r
-}\r
-//-->\r
-</script>\r
-<noscript>\r
- <p> Your browser does not support JavaScript. WebHelp Context-Sensitive Help requires JavaScript support to run.</p>\r
-</noscript>\r
-</body>\r
-</html>\r
-\r
-\r
-\r
-\r
-\r
-\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="JavaScript">\r
-<!--\r
-\r
-var gArrayCsh = new Array();\r
-\r
-var gstrWindowOption = "";\r
-var gstrURL = "";\r
-var gbWithNavPane = false;\r
-\r
-function CshEntityItem(strAliasId, nTopicNum, strUrl) \r
-{\r
- this.strAliasId = strAliasId;\r
- this.nTopicNum = nTopicNum;\r
- this.strUrl = strUrl;\r
-}\r
-\r
-\r
-//Try to get to topic number from hash string\r
-function GetTopicNumberAuto(strMayBeNumber)\r
-{\r
- var nNum = -1;\r
- if (strMayBeNumber.length >= 1)\r
- {\r
- var strTmp = strMayBeNumber;\r
- var iEnd = strTmp.length;\r
- for (var i=0; i<iEnd; i++)\r
- {\r
- var ch = strTmp.charAt(i);\r
- if (!((ch == "0") || (ch == "1") ||\r
- (ch == "2") || (ch == "3") ||\r
- (ch == "4") || (ch == "5") ||\r
- (ch == "6") || (ch == "7") ||\r
- (ch == "8") || (ch == "9")))\r
- return GetTopicNumberById(strTmp);\r
- }\r
- nNum = parseInt(strTmp);\r
- }\r
- return nNum;\r
-}\r
-\r
-function GetTopicNumber(strHashString)\r
-{\r
- var nTopicEndPos = strHashString.indexOf(',')\r
- if (nTopicEndPos == -1) { // no window option.\r
- return GetTopicNumberOnly(strHashString);\r
- }\r
- else {\r
- var strWindowOption = strHashString.substring(nTopicEndPos + 1, strHashString.length);\r
- var strWithNavPane = 'withnavpane=true';\r
- if (strWindowOption.toLowerCase().indexOf(strWithNavPane) == 0)\r
- {\r
- if (strWindowOption.length > strWithNavPane.length)\r
- gstrWindowOption = strWindowOption.substring(strWithNavPane.length + 1);\r
- else\r
- gstrWindowOption = "";\r
- gbWithNavPane = true;\r
- }\r
- else\r
- gstrWindowOption = strWindowOption;\r
- return GetTopicNumberOnly(strHashString.substring(0, nTopicEndPos)); \r
- }\r
-}\r
-\r
-function GetTopicNumberOnly(strTopicString)\r
-{\r
- var nEqualPos = strTopicString.indexOf('=');\r
- if (nEqualPos == -1) {\r
- return GetTopicNumberAuto(strTopicString);\r
- }\r
- else {\r
- var strValue=strTopicString.substring(nEqualPos + 1, strTopicString.length);\r
- if (strTopicString.toLowerCase().indexOf("topicnumber") == 0) {\r
- return parseInt(strValue);\r
- } else if (strTopicString.toLowerCase().indexOf("topicid") == 0) {\r
- return GetTopicNumberById(strValue);\r
- } else if (strTopicString.toLowerCase().indexOf("remoteurl") == 0) {\r
- gstrURL = strValue;\r
- return -1;\r
- }\r
-\r
- }\r
-}\r
-\r
-//Find HomePage of the WebHelp system\r
-// we try to get the topic from remote project if it exists.\r
-function RedirectToHomePage()\r
-{\r
- if (parent && parent != this && parent.goNext)\r
- {\r
- var sHome = parent.goNext();\r
- if (sHome != "")\r
- RedirectTo(sHome);\r
- }\r
-}\r
-\r
-function getHomePage()\r
-{\r
- if (parent && parent != this && parent.getRelHomePage)\r
- {\r
- return parent.getRelHomePage(document.location.href);\r
- }\r
- return "";\r
-}\r
-\r
-function addRemoteProject(strPath)\r
-{\r
- if (parent && parent != this && parent.addProject)\r
- {\r
- parent.addProject(strPath);\r
- }\r
-}\r
-\r
-//Redirect page to...\r
-function RedirectTo(strUrl)\r
-{\r
- if (gstrWindowOption.length != 0) {\r
- var wnd = window.open(strUrl, "HelpStub", gstrWindowOption);\r
- // close current window and rename the stub window to current window.\r
- wnd.focus();\r
- if (parent)\r
- parent.close();\r
- }\r
- else {\r
- parent.document.location.href = strUrl;\r
- window.focus();\r
- }\r
-}\r
-\r
-//Prompt the user that we can not find...\r
-function FailToFind(strMsg)\r
-{\r
- RedirectToHomePage();\r
-}\r
-\r
-//Find topic by topic number (defined in h file)\r
-function FindTopicByTopicNum(nTopicNum)\r
-{\r
- var i = 0;\r
- var iEnd = gArrayCsh.length;\r
- for (i=0; i<iEnd; i++)\r
- {\r
- if (gArrayCsh[i].nTopicNum == nTopicNum)\r
- {\r
- var strURL = gArrayCsh[i].strUrl;\r
- if (gbWithNavPane)\r
- {\r
- var strHomePage = getHomePage();\r
- if (strHomePage.length != 0)\r
- strURL = strHomePage + strURL;\r
- } \r
- RedirectTo(strURL);\r
- return true;\r
- }\r
- }\r
- FailToFind("Fail to find topic assocaite with topic number: " + nTopicNum);\r
- return false;\r
-}\r
-\r
-//Find topic by topic id (alias id defined in ali file)\r
-function GetTopicNumberById(strTopicId)\r
-{\r
- var i = 0;\r
- var iEnd = gArrayCsh.length;\r
- for (i=0; i<iEnd; i++)\r
- {\r
- if (gArrayCsh[i].strAliasId == strTopicId)\r
- {\r
- return gArrayCsh[i].nTopicNum;\r
- }\r
- }\r
- gstrURL = "";\r
- return -1;\r
-}\r
-\r
-//Set Context-sensitive help entity...\r
-function SetCsh(n, strAliasId, nTopicNum, strUrl)\r
-{\r
- gArrayCsh[n] = new CshEntityItem(strAliasId,nTopicNum,strUrl);\r
-}\r
-\r
-\r
-function getHash()\r
-{\r
- if (parent && parent != this)\r
- return parent.location.hash;\r
- else\r
- return "";\r
-}\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-\r
-\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-//Find CSH according to hash string after this page\r
-if (getHash().length > 0)\r
-{\r
- // VH 05/16/00 now support \r
- // TopicID=\r
- // TopicNumber=\r
- // RemoteURL= \r
- // and WindowsOptions\r
- // with the format #a=xxx,b=xxx,c=xxx...\r
- var strHashString = getHash().toString();\r
- // change ? to : for remote URL. because java applet have some problem to pass a URL with two : inside the URL so we changed it. \r
- // so here need to change it back.\r
- strHashString = strHashString.substring(1,strHashString.length);\r
- strHashString = strHashString.replace("%072%057%057", "://");\r
- var nTopicNum = GetTopicNumber(strHashString);\r
-\r
- if (nTopicNum != -1)\r
- {\r
- FindTopicByTopicNum(nTopicNum);\r
- }\r
- else\r
- {\r
- if (gstrURL.length > 0) \r
- RedirectTo(gstrURL);\r
- else\r
- RedirectToHomePage();\r
- }\r
-}\r
-else\r
-{\r
- RedirectToHomePage();\r
-}\r
-//-->\r
-</script>\r
-<noscript>\r
- <p> Your browser does not support JavaScript. WebHelp Context-Sensitive Help requires JavaScript support to run.</p>\r
-</noscript>\r
-</body>\r
-</html>\r
-\r
-\r
-\r
-\r
-\r
-\r
+++ /dev/null
-BODY { \r
- background-color:#ffffff; \r
- font-family:"Times New Roman" , serif; }\r
-H1 { \r
- font-weight:bold; \r
- font-size:24.0pt; }\r
-LI.kadov-H1 { \r
- font-weight:bold; \r
- font-size:24.0pt; }\r
-H2 { \r
- font-weight:bold; \r
- font-size:18.0pt; }\r
-LI.kadov-H2 { \r
- font-weight:bold; \r
- font-size:18.0pt; }\r
-H3 { \r
- font-weight:bold; \r
- font-size:14.0pt; }\r
-LI.kadov-H3 { \r
- font-weight:bold; \r
- font-size:14.0pt; }\r
-H4 { \r
- font-weight:bold; \r
- font-size:12.0pt; }\r
-LI.kadov-H4 { \r
- font-weight:bold; \r
- font-size:12.0pt; }\r
-H5 { \r
- font-weight:bold; \r
- font-size:10.0pt; }\r
-LI.kadov-H5 { \r
- font-weight:bold; \r
- font-size:10.0pt; }\r
-H6 { \r
- font-weight:bold; \r
- font-size:8.0pt; }\r
-LI.kadov-H6 { \r
- font-weight:bold; \r
- font-size:8.0pt; }\r
-P { \r
- font-size:12.0pt; \r
- margin-top:0pt; \r
- margin-bottom:0pt; }\r
-LI.kadov-P { \r
- font-size:12.0pt; }\r
-A.expandspot { \r
- color:#008000; \r
- cursor:hand; \r
- font-style:italic; \r
- x-text-underline:off; \r
- x-text-overline:off; \r
- x-text-line-through:off; \r
- text-decoration:none none none; }\r
-SPAN.expandtext { \r
- font-style:italic; \r
- font-weight:normal; \r
- color:#ff0000; }\r
-A.dropspot { \r
- cursor:hand; \r
- color:#008000; \r
- font-style:italic; \r
- x-text-underline:off; \r
- x-text-overline:off; \r
- x-text-line-through:off; \r
- text-decoration:none none none; }\r
-A.glossterm { \r
- color:#800000; \r
- cursor:hand; \r
- font-style:italic; \r
- x-text-underline:off; \r
- x-text-overline:off; \r
- x-text-line-through:off; \r
- text-decoration:none none none; }\r
-SPAN.glosstext { \r
- font-style:italic; \r
- font-weight:normal; \r
- color:#0000ff; }\r
-OL { \r
- margin-top:0px; \r
- margin-bottom:0px; }\r
-UL { \r
- margin-top:0px; \r
- margin-bottom:0px; }\r
-A:active { }\r
-A:hover { \r
- x-text-underline:Off; \r
- text-decoration:none; }\r
-A:link { \r
- x-text-underline:Off; \r
- text-decoration:none; }\r
-A:visited { \r
- x-text-underline:Off; \r
- text-decoration:none; }\r
-P.TODO { \r
- font-weight:normal; \r
- font-style:italic; \r
- font-family:"Arial Black" , sans-serif; }\r
-LI.kadov-P-CTODO { \r
- font-weight:normal; \r
- font-style:italic; \r
- font-family:"Arial Black" , sans-serif; }\r
+++ /dev/null
-BODY { \r
- background-color:#ffffff; \r
- font-family:"Times New Roman" , serif; }\r
-H1 { \r
- font-weight:bold; \r
- font-size:24.0pt; \r
- font-family:"Times New Roman" , serif; }\r
-LI.kadov-H1 { \r
- font-weight:bold; \r
- font-size:24.0pt; }\r
-H2 { \r
- font-weight:bold; \r
- font-size:18.0pt; \r
- font-family:"Times New Roman" , serif; }\r
-LI.kadov-H2 { \r
- font-weight:bold; \r
- font-size:18.0pt; }\r
-H3 { \r
- font-weight:bold; \r
- font-size:14.0pt; \r
- font-family:"Times New Roman" , serif; }\r
-LI.kadov-H3 { \r
- font-weight:bold; \r
- font-size:14.0pt; }\r
-H4 { \r
- font-weight:bold; \r
- font-size:12.0pt; \r
- font-family:"Times New Roman" , serif; }\r
-LI.kadov-H4 { \r
- font-weight:bold; \r
- font-size:12.0pt; }\r
-H5 { \r
- font-weight:bold; \r
- font-size:10.0pt; \r
- font-family:"Times New Roman" , serif; }\r
-LI.kadov-H5 { \r
- font-weight:bold; \r
- font-size:10.0pt; }\r
-H6 { \r
- font-weight:bold; \r
- font-size:8.0pt; \r
- font-family:"Times New Roman" , serif; }\r
-LI.kadov-H6 { \r
- font-weight:bold; \r
- font-size:8.0pt; }\r
-P { \r
- font-size:12.0pt; \r
- margin-top:1pt; \r
- margin-bottom:1pt; \r
- font-family:"Times New Roman" , serif; }\r
-LI.kadov-P { \r
- font-size:12.0pt; }\r
-A.expandspot { \r
- color:#008000; \r
- cursor:hand; \r
- font-style:italic; \r
- x-text-underline:off; \r
- x-text-overline:off; \r
- x-text-line-through:off; \r
- text-decoration:none none none; }\r
-SPAN.expandtext { \r
- font-style:italic; \r
- font-weight:normal; \r
- color:#ff0000; }\r
-A.dropspot { \r
- cursor:hand; \r
- color:#008000; \r
- font-style:italic; \r
- x-text-underline:off; \r
- x-text-overline:off; \r
- x-text-line-through:off; \r
- text-decoration:none none none; }\r
-A.glossterm { \r
- color:#800000; \r
- cursor:hand; \r
- font-style:italic; \r
- x-text-underline:off; \r
- x-text-overline:off; \r
- x-text-line-through:off; \r
- text-decoration:none none none; }\r
-SPAN.glosstext { \r
- font-style:italic; \r
- font-weight:normal; \r
- color:#0000ff; }\r
-OL { \r
- margin-top:0px; \r
- margin-bottom:0px; \r
- font-family:"Times New Roman" , serif; }\r
-UL { \r
- margin-top:0px; \r
- margin-bottom:0px; \r
- font-family:"Times New Roman" , serif; }\r
-A:active { }\r
-A:hover { \r
- x-text-underline:Off; \r
- text-decoration:none; }\r
-A:link { \r
- x-text-underline:Off; \r
- text-decoration:none; }\r
-A:visited { \r
- x-text-underline:Off; \r
- text-decoration:none; }\r
-P.TODO { \r
- font-weight:normal; \r
- font-style:italic; \r
- font-family:"Arial Black" , sans-serif; }\r
-LI.kadov-P-CTODO { \r
- font-weight:normal; \r
- font-style:italic; \r
- font-family:"Arial Black" , sans-serif; }\r
-ol ol { \r
- margin-top:1px; }\r
-ol ul { \r
- margin-top:1px; }\r
-ul ul { \r
- margin-top:1px; }\r
-ul ol { \r
- margin-top:1px; }\r
--- /dev/null
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME = "GUI Module Reference Manual v.@VERSION@"
+OUTPUT_DIRECTORY = ./
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+TAB_SIZE = 5
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = NO
+WARNINGS = YES
+
+#---------------------------------------------------------------------------
+#Input related options
+#---------------------------------------------------------------------------
+INPUT = @srcdir@/input
+FILE_PATTERNS = *.doc
+IMAGE_PATH = @srcdir@/images
+
+#---------------------------------------------------------------------------
+#HTML related options
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = ./
+HTML_HEADER = @srcdir@/static/header.html
+HTML_FOOTER = @srcdir@/static/footer.html
+#HTML_STYLESHEET = @srcdir@/static/doxygen.css
+TOC_EXPAND = YES
+DISABLE_INDEX = NO
+GENERATE_TREEVIEW = YES
+TREEVIEW_WIDTH = 300
+
+#---------------------------------------------------------------------------
+#LaTeX related option
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+
+#---------------------------------------------------------------------------
+#RTF related options
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
\ No newline at end of file
+++ /dev/null
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Dump Study</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { font-weight:bold; margin-left:40px; }\r
-img_whs2 { border:none; width:461px; height:270px; float:none; border-style:none; }\r
-ul.whs3 { list-style:disc; }\r
-p.whs4 { margin-left:48px; }\r
-p.whs5 { font-family:'Times New Roman' , serif; margin-left:40px; }\r
-p.whs6 { margin-left:0px; }\r
-p.whs7 { margin-left:40px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
- var strNSS = "<style type='text/css'>";\r
- strNSS += "p.whs6 {margin-left:1pt; }";\r
- strNSS +="</style>";\r
- document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- addTocInfo("GUI module\nStudy management\nWorking with Python Scripts");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- setRelStartPage("index.htm");\r
-\r
- autoSync(1);\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Working with Python Scripts</h1>\r
-\r
-<p><span style="font-weight: bold;"><B>SALOME </B></span>Platform can be launched \r
- in the batch mode, without Graphical User Interface, and operated with \r
- the use of Python scripts, which can fulfill most of the necessary tasks, \r
- however, the process of scripting is quite time consuming and rather error-prone. \r
- </p>\r
-\r
-<p>This problem has been resolved by the possibility to automatically generate \r
- a set of Python scripts from data created with SALOME GUI, which greatly \r
- increases the productivity of using SALOME platform in the batch mode. \r
- This mechanism can convert a SALOMEDS Study in one or several Python scripts, \r
- which can be stored and imported later to re-create the content of the \r
- original study. The first script is a SALOMEDS document, which re-creates \r
- the SALOMEDS Study, adds the stored Salome components to the SALOMEDS \r
- and automatically calls Python scripts of the second type containing component \r
- specific Python function calls. This architecture gives great flexibility \r
- in manual modification of the generated scripts because you can modify \r
- only one of the component specific Python scripts without touching others, \r
- thus avoiding expert knowledge of Python API of unused components. </p>\r
-\r
-<p> </p>\r
-\r
-<p>To Dump a SALOME \r
- Study in one or several scripts, in the main menu select <span style="font-weight: bold;"><B>File</B></span> \r
- --> <span style="font-weight: bold;"><B>Dump study</B></span></p>\r
-\r
-<p>The following dialog box allowing to browse for the location and define \r
- the name for a Python file will appear: </p>\r
-\r
-<p> </p>\r
-\r
-<p class="whs1"><img src="pics/dumpstudy.png" x-maintain-ratio="TRUE" width="461px" height="270px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs4"><span style="font-weight: bold;"><B>Publish \r
- in study - </B></span>if checked in, the component objects created by Python \r
- commands will be published in the created Study when the script is played, \r
- otherwise the objects will not be published in the Study.</p></li>\r
- \r
- <li class=kadov-p><p class="whs4"><span style="font-weight: bold;"><B>Save \r
- GUI state</B></span> - if checked in, the current application layout will \r
- be saved in the Python file. </p></li>\r
-</ul>\r
-\r
-<p> </p>\r
-\r
-<p class="whs5">To \r
- confirm your choice click <span style="font-weight: bold;"><B>Save</B></span>.</p>\r
-\r
-<p class="whs5"> </p>\r
-\r
-<p class="whs6">Reversibly it is possible to load a saved \r
- Python Script selecting in the main menu <span style="font-weight: bold;"><B>File</B></span> \r
- -> <span style="font-weight: bold;"><B>Load Script</B></span>. </p>\r
-\r
-<p class="whs6"> </p>\r
-\r
-<p class="whs7"><img src="pics/loadscript.png" x-maintain-ratio="TRUE" width="461px" height="270px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<p class="whs5">To \r
- confirm your choice click <span style="font-weight: bold;"><B>Open.</B></span></p>\r
-\r
-<p> </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-<?xml version="1.0"?>\r
-<!DOCTYPE SYSTEM "ehelpopt.dtd">\r
-<FILE-OPTIONS FILE-VERSION="2" FILE-KEY="28977072_6eb4_11d8_af12_000102ad571a">\r
-</FILE-OPTIONS>\r
-<EHELP-OPTIONS FORMAT-VERSION="1.0">\r
- <OPTIONS ENABLED="NO" EMBEDDED="YES" MAIN-WINDOW-ONLY="NO" COMMUNITY-NOTIFY="NO" FIRST-PAGE="NOT-SET">\r
- </OPTIONS>\r
- <BUTTON-LABEL>WebSearch\r
- </BUTTON-LABEL>\r
-</EHELP-OPTIONS>
\ No newline at end of file
+++ /dev/null
-// eHelp® Corporation Dynamic HTML JavaScript \r
-// Copyright© 1998-2003 eHelp® Corporation.All rights reserved.\r
-// Version=4.82\r
-\r
-// Warning:Do not modify this file.It is generated by RoboHELP® and changes will be overwritten.\r
-\r
-//// Segment Begin -- (JavaScript 1.0)\r
-\r
-/// Section Begin - General and relative topics(JavaScript 1.0)\r
-\r
-//{{HH_SYMBOL_SECTION\r
-var HH_ChmFilename = "";\r
-var HH_WindowName = "";\r
-var HH_GlossaryFont = "";\r
-var HH_Glossary = "";\r
-var HH_Avenue = "";\r
-var HH_ActiveX = false;\r
-//}}HH_SYMBOL_SECTION\r
-\r
-//Begin to support previous generic parameters\r
-//Get the information about the browser.\r
-var gstrBsAgent = navigator.userAgent.toLowerCase();\r
-var gnBsVer = parseInt(navigator.appVersion);\r
-\r
-var gbBsOpera = (gstrBsAgent.indexOf('opera') != -1);\r
-var gbBsKonqueror = (gstrBsAgent.indexOf('konqueror') != -1);\r
-var gbBsSafari = (gstrBsAgent.indexOf('safari') != -1);\r
-var gbBsIE = (gstrBsAgent.indexOf('msie') != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;\r
-var gbBsNS = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1)) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;\r
-\r
-var gbBsMac = (gstrBsAgent.indexOf('mac') != -1);\r
-var gbBsWindows = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1));\r
-var gbBsSunOS = (gstrBsAgent.indexOf("sunos") != -1);\r
-\r
-var gbBsIE3Before = ((gbBsIE) && (gnBsVer <= 2));\r
-var gbBsNS3Before = ((gbBsNS) && (gnBsVer <= 3));\r
-\r
-var gbBsNS2 = ((gbBsNS) && (gnBsVer <= 2));\r
-var gbBsNS3 = ((gbBsNS) && (gnBsVer == 3));\r
-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)));\r
-var gbBsIE302 = ((gbBsIE) && (gnBsVer == 2) && (gstrBsAgent.indexOf("3.02") != -1));\r
-\r
-var gbBsNS4 = ((gbBsNS) && (gnBsVer >= 4));\r
-var gbBsNS6 = ((gbBsNS) && (gnBsVer >= 5));\r
-var gbBsNS7 = false;\r
-\r
-var gbBsIE4 = ((gbBsIE) && (gnBsVer >= 4));\r
-var gbBsIE5 = false;\r
-var gbBsIE55 = false;\r
-\r
-var gbBsOpera6 = false;\r
-var gbBsOpera7 = false;\r
-\r
-var gbBsKonqueror3 = false;\r
-\r
-\r
-\r
-gbBsIE = (navigator.appName.indexOf("Microsoft") != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;;\r
-if (gbBsIE)\r
-{\r
- if (parseInt(navigator.appVersion) >= 4) {\r
- gbBsIE4 = true;\r
- if (gbBsIE4) {\r
- var nPos = gstrBsAgent.indexOf("msie");\r
- var strIEversion = gstrBsAgent.substring(nPos + 5);\r
- var nVersion = parseFloat(strIEversion);\r
- if (nVersion >= 5)\r
- gbBsIE5 = true;\r
- if (nVersion >= 5.5)\r
- gbBsIE55 = true;\r
- }\r
- }\r
-}\r
-if (gbBsNS6)\r
-{\r
- var nPos=gstrBsAgent.indexOf("gecko");\r
- if(nPos!=-1)\r
- {\r
- var nPos2=gstrBsAgent.indexOf("/", nPos);\r
- if(nPos2!=-1)\r
- {\r
- var nVersion=parseFloat(gstrBsAgent.substring(nPos2+1));\r
- if (nVersion>=20020823)\r
- gbBsNS7=true;\r
- }\r
- } \r
-}\r
-if (gbBsOpera)\r
-{\r
- var nPos = gstrBsAgent.indexOf("opera");\r
- if(nPos!=-1)\r
- {\r
- var nVersion = parseFloat(gstrBsAgent.substring(nPos+6));\r
- if (nVersion >= 6)\r
- {\r
- gbBsOpera6=true;\r
- if (nVersion >=7)\r
- gbBsOpera7=true; \r
- }\r
- }\r
-}\r
-if (gbBsKonqueror)\r
-{\r
- var nPos = gstrBsAgent.indexOf("konqueror");\r
- if(nPos!=-1)\r
- {\r
- var nVersion = parseFloat(gstrBsAgent.substring(nPos+10));\r
- if (nVersion >= 3)\r
- {\r
- gbBsKonqueror3=true;\r
- }\r
- }\r
-}\r
-\r
-function insertAdjacentHTML(obj, where, htmlStr)\r
-{\r
- if (gbBsIE || gbBsOpera7)\r
- {\r
- obj.insertAdjacentHTML(where, htmlStr);\r
- }\r
- else if (gbBsNS6 || gbBsSafari)\r
- {\r
- var r = obj.ownerDocument.createRange();\r
- r.setStartBefore(obj);\r
- var parsedHTML = r.createContextualFragment(htmlStr);\r
- \r
- switch (where){\r
- case 'beforeBegin':\r
- obj.parentNode.insertBefore(parsedHTML,obj);\r
- break;\r
- case 'afterBegin':\r
- obj.insertBefore(parsedHTML,obj.firstChild);\r
- break;\r
- case 'beforeEnd':\r
- obj.appendChild(parsedHTML);\r
- break;\r
- case 'afterEnd':\r
- if (obj.nextSibling){\r
- obj.parentNode.insertBefore(parsedHTML,obj.nextSibling);\r
- } else {\r
- obj.parentNode.appendChild(parsedHTML);\r
- }\r
- break;\r
- }\r
- }\r
-}\r
-\r
-// Utilities functions.\r
-function BsscHasExtJs()\r
-{\r
- if( gbBsIE3Before || gbBsNS3Before)\r
- return false;\r
- return true;\r
-}\r
-\r
-// Register event handler\r
-var gBsOnLoads = new Array(); // An array holds all the onload event handler.\r
-var gBsOnClicks = new Array(); // An array holds all the onClick event handler.\r
-var gBsOnUnLoads = new Array(); // An array holds all the OnUnLoad event handler.\r
-var gBsOnMouseOvers = new Array(); // An array holds all the OnMouseOver event handler.\r
-var gBsOnMouseOuts = new Array(); // An array holds all the OnMouseOut event handler.\r
-\r
-var gbOrignalOnMouseDown = null;\r
-\r
-function BsscRegisterOnLoad(funcHandler)\r
-{\r
- var nLength = gBsOnLoads.length;\r
- gBsOnLoads[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnClick(funcHandler)\r
-{\r
- var nLength = gBsOnClicks.length;\r
- gBsOnClicks[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnUnLoad(funcHandler)\r
-{\r
- var nLength = gBsOnUnLoads.length;\r
- gBsOnUnLoads[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnMouseOver(funcHandler)\r
-{\r
- var nLength = gBsOnMouseOvers.length;\r
- gBsOnMouseOvers[nLength] = funcHandler;\r
-}\r
-\r
-function BsscRegisterOnMouseOut(funcHandler)\r
-{\r
- var nLength = gBsOnMouseOuts.length;\r
- gBsOnMouseOuts[nLength] = funcHandler;\r
-}\r
-\r
-function BsGeneralOnLoad()\r
-{\r
- if (!gbBsIE4 && !gbBsNS4)\r
- return;\r
-\r
- // Make everything visible in navigator\r
- if (gbBsNS4 && !gbBsNS6) {\r
- // Make some special effects items visible\r
- for (var iLayer = 0; iLayer < document.layers.length; iLayer++) {\r
- document.layers[iLayer].visibility = "show";\r
- document.layers[iLayer].left = 0;\r
- }\r
- }\r
-}\r
-\r
-// If resize the netscape browser, need to reload it.\r
-function BsReDo()\r
-{\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-// End of the local functions.\r
-\r
-// The following functions are used by the html files.\r
-function BSSCOnLoad()\r
-{\r
- if( !BsscHasExtJs() )\r
- return;\r
- for (var nElement = gBsOnLoads.length - 1; nElement >= 0; nElement--)\r
- gBsOnLoads[nElement]();\r
-}\r
-\r
-function BSSCOnClick()\r
-{\r
- if (!BsscHasExtJs()) return;\r
- \r
- for (var nElement = gBsOnClicks.length - 1; nElement >= 0; nElement--)\r
- gBsOnClicks[nElement]();\r
-}\r
-\r
-function BSSCOnUnload()\r
-{\r
- if (!BsscHasExtJs()) return;\r
- for (var nElement = gBsOnUnLoads.length - 1; nElement >= 0; nElement--)\r
- gBsOnUnLoads[nElement]();\r
-}\r
-\r
-function BSSCOnMouseOver()\r
-{\r
- if (!BsscHasExtJs()) return;\r
- for (var nElement = gBsOnMouseOvers.length - 1; nElement >= 0; nElement--)\r
- gBsOnMouseOvers[nElement]();\r
-}\r
-\r
-function BSSCOnMouseOut()\r
-{\r
- if (!BsscHasExtJs()) return;\r
- for (var nElement = gBsOnMouseOuts.length - 1; nElement >= 0; nElement--)\r
- {\r
- gBsOnMouseOuts[nElement]();\r
- }\r
-}\r
-// End of invocation of the event handle functions.\r
-\r
-// Add the GereralOnLoad to the onload array.\r
-if (typeof(BsscRegisterOnLoad) != "undefined")\r
-{\r
- BsscRegisterOnLoad(BsGeneralOnLoad);\r
-}\r
-if (gbBsNS4&&!gbBsNS6) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = BsReDo;\r
-}\r
-//End to support previous generic parameters\r
-\r
-//Begin to support previous HHActiveX invoking\r
-function BsHHActivateComponents()\r
-{\r
- if( HH_ActiveX && (HH_ChmFilename != "") && ((self == top) || (self == top.frames[0])))\r
- {\r
- var objBody = getElementsByTag(document,"BODY")[0];\r
- if( typeof(objBody) == "object" )\r
- {\r
- insertAdjacentHTML(objBody, "beforeEnd", '<OBJECT ID="HHComponentActivator" CLASSID="CLSID:399CB6C4-7312-11D2-B4D9-00105A0422DF" width=0 height=0></OBJECT>');\r
- if (HHComponentActivator.object)\r
- HHComponentActivator.Activate(HH_ChmFilename, HH_WindowName, HH_GlossaryFont, HH_Glossary, HH_Avenue);\r
- }\r
- }\r
-}\r
-\r
-function BsHHActivXOnLoad()\r
-{ \r
- if( gbBsIE4 )\r
- BsHHActivateComponents(); \r
-}\r
-\r
-if( typeof(BsscRegisterOnLoad) != "undefined" )\r
-{\r
- BsscRegisterOnLoad(BsHHActivXOnLoad);\r
-}\r
-//End to support previous HHActiveX invoking\r
-\r
-//Begin to support previous relative topics\r
-//If webHelp needs Related Topics DHTMLcode, it's supposed to add it here\r
-var gbPopupMenuTimeoutExpired = false;\r
-var gbInPopupMenu = false;\r
-var gbPopupMenuTopicList = null;\r
-var gOlddocumentClick = null;\r
-\r
-//////////////////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Popup Menu code\r
-//\r
-//////////////////////////////////////////////////////////////////////////////////////////\r
-\r
-var g_bIsPopupMenuInit = false;\r
-function _WritePopupMenuLayer()\r
-{\r
- if (!g_bIsPopupMenuInit)\r
- {\r
- if (gbBsNS4&&!gbBsNS6) {\r
-//Do not try to write ininle styles for NS! NS can not handle it and will not stop downloading the html page...\r
- document.write("<DIV CLASS='WebHelpPopupMenu' ID='PopupMenu'></DIV>");\r
- } else{\r
- document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>");\r
- if (!(gbBsNS4&&!gbBsNS6)) {\r
- document.write("<STYLE TYPE='text/css'>");\r
- if (gbBsMac&&gbBsIE4) {\r
- document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
- document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
- } else {\r
- document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
- document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
- }\r
- document.write("</STYLE>");\r
- }\r
- }\r
- g_bIsPopupMenuInit = true;\r
- }\r
-}\r
-\r
-//Seek for the bsscright frame \r
-function _SeekFrameByName( cRoot, strName )\r
-{\r
- if( cRoot == null ) return null;\r
- if( cRoot.frames == null ) return null;\r
- if( cRoot.frames[strName] != null ) return cRoot.frames[strName];\r
- for (var i=0; i<cRoot.frames.length; i++)\r
- {\r
- var cObj = null;\r
- if (!gbBsNS6) \r
- cObj = _SeekFrameByName( cRoot.frames(i).document, strName );\r
- else\r
- cObj = _SeekFrameByName( cRoot.frames[i], strName );\r
- if( cObj != null ) return cObj;\r
- };\r
- return null;\r
-}\r
-function _GetFrameByName( cRoot, strName )\r
-{\r
- if( cRoot == null ) return null;\r
- var cRet = _SeekFrameByName(cRoot, strName);\r
- if( cRet != null ) return cRet;\r
- if (cRoot.parent != cRoot)\r
- return _GetFrameByName( cRoot.parent, strName );\r
- else\r
- return null;\r
-}\r
-\r
-var gfn_arguments = null;\r
-function _PopupMenu_Invoke(fn_arguments)\r
-{\r
- gfn_arguments = fn_arguments;\r
- if (gbBsOpera6&&gbBsMac)\r
- {\r
- var wndOldPopupLinks= window.open(document.location.href, "popuplinks");\r
- wndOldPopupLinks.close();\r
- setTimeout("_PopupMenu_Invoke_2();",100);\r
- }\r
- else\r
- {\r
- _PopupMenu_Invoke_2();\r
- }\r
-}\r
-\r
-function _PopupMenu_Invoke_2()\r
-{\r
- var fn_arguments = gfn_arguments;\r
- gfn_arguments = null;\r
- \r
- // Make sure we have reasonable arguments\r
- var argLen = fn_arguments.length;\r
- if (argLen < 3) {\r
- return false;\r
- }\r
-\r
- // Check to see if we only have one target\r
- var strTarget = "";\r
- var targetDoc = null;\r
- if (fn_arguments[1] == '') {\r
- if (BSSCPopup_IsPopup()) {\r
- targetDoc = parent;\r
- strTarget = "TARGET= _parent";\r
- }\r
- else\r
- targetDoc = window.document;\r
- } else {\r
- targetDoc = _GetFrameByName( parent, fn_arguments[1] );\r
-\r
- strTarget = "TARGET='" + fn_arguments[1] + "'";\r
- }\r
-\r
- if ((!gbBsIE4 && !gbBsNS4 && !gbBsOpera7 && !gbBsKonqueror3 &&!gbBsSafari) || ((gbBsMac) && (gbBsIE4) && (window.event.srcElement.tagName == "AREA"))) {\r
- \r
- var argLen = fn_arguments.length;\r
-\r
- // Create the window that the hyperlinks will go into\r
- var nHeight = argLen * 15;\r
- var nWidth = 400;\r
- var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";\r
- strParam += ",height=" + nHeight + ",width=200";\r
- strParam += ",resizable";\r
-\r
- var wndTemp=null;\r
- // Create a temporary window first to ensure the real popup comes up on top\r
- if (!gbBsOpera)\r
- wndTemp = window.open("", "temp", strParam);\r
-\r
- // Create the real popup window\r
- var wndPopupLinks=null;\r
- if (gbBsOpera&&gbBsMac)\r
- {\r
- wndTemp = window.open(document.location.href, "temp", strParam);\r
- wndPopupLinks= window.open(document.location.href, "popuplinks", strParam);\r
- }\r
- else\r
- wndPopupLinks= window.open("", "popuplinks", strParam);\r
- wndPopupLinks.document.open("text/html");\r
-\r
- // Close the temporary\r
- if (wndTemp)\r
- wndTemp.close();\r
-\r
- var sHTML="<html><head></head>";\r
- sHTML+="<body onBlur=\'self.focus();\'>";\r
- var strParaLine = "";\r
- for (var i = 0; i < (argLen - 2) / 2; i++) {\r
- strParaLine = "";\r
- strParaLine += "<a href=\"javascript:";\r
- if (gbBsIE) {\r
- strParaLine += "onBlur=null; ";\r
- }\r
- strParaLine += "opener.location=\'";\r
- strParaLine += fn_arguments[2 * i + 3];\r
- strParaLine += "\';close();\"";\r
- strParaLine += strTarget;\r
-\r
- strParaLine += ">";\r
- strParaLine += fn_arguments[2 * i + 2];\r
- strParaLine += "</a>";\r
- strParaLine += "<br>";\r
- sHTML+=strParaLine;\r
- }\r
- sHTML+="</body></html>";\r
- wndPopupLinks.document.write(sHTML);\r
- wndPopupLinks.document.close();\r
- window.gbInPopupMenu = true;\r
- if (!gbBsIE) {\r
- wndPopupLinks.focus();\r
- }\r
- return false;\r
- }\r
-\r
- if (((argLen < 5) && ((isNaN(fn_arguments[2])) || (gbPopupMenuTopicList == null))) ||\r
- ((argLen < 4) && ((!isNaN(fn_arguments[2])) && (gbPopupMenuTopicList != null)))) {\r
- // Get the place that we will be putting the topic into\r
- var strURL = "";\r
- if (isNaN(fn_arguments[2]) || (gbPopupMenuTopicList == null)) {\r
- strURL = fn_arguments[3];\r
- }\r
- else {\r
- strURL = gbPopupMenuTopicList[fn_arguments[2]].strURL;\r
- }\r
-\r
- if (targetDoc != null) {\r
- targetDoc.location.href = strURL;\r
- }\r
- else {\r
- if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined")\r
- window.open(strURL, fn_arguments[1]);\r
- else\r
- window.open(strURL);\r
- } \r
- window.gbInPopupMenu = true;\r
- return false;\r
- }\r
- \r
- var strMenu = "";\r
- if (gbBsNS4&&!gbBsNS6) {\r
- strMenu = '<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=3 BGCOLOR="#c0c0c0">';\r
- } else {\r
- strMenu = '<TABLE STYLE="border:2px outset white;" CELLSPACING=0';\r
- if (gbBsMac) {\r
- strMenu += ' CELLPADDING=4';\r
- } else {\r
- strMenu += ' CELLPADDING=2';\r
- } \r
- strMenu += ' BGCOLOR=#c0c0c0>';\r
- }\r
- // Add each of the items\r
- var i = 2;\r
- while (i <= argLen - 1) {\r
- strMenu += '<TR><TD><NOBR>'\r
- // If the destination is a number then look it up in the topic list\r
- if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {\r
- strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + fn_arguments[i + 1] + '"' + strTarget;\r
- } else {\r
- strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + gbPopupMenuTopicList[fn_arguments[i]].strURL + '"' + strTarget;\r
- }\r
- strMenu += ' onclick="PopupMenu_HandleClick(event);"';\r
- strMenu += ' onmouseover="PopupMenu_Over(event);"';\r
- strMenu += ' onmouseout="PopupMenu_Out(event);"';\r
- strMenu += '>';\r
- if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {\r
- strMenu += '<SPAN CLASS="PopupNotOver">' + fn_arguments[i] + '</SPAN>';\r
- } else {\r
- strMenu += '<SPAN CLASS="PopupNotOver">' + gbPopupMenuTopicList[fn_arguments[i]].strTitle + '</SPAN>';\r
- }\r
- strMenu += '</A></DIV></NOBR></TD></TR>';\r
-\r
- if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {\r
- i += 2;\r
- } else {\r
- i += 1;\r
- }\r
- }\r
- strMenu += "</TABLE>";\r
-\r
- if (gbBsMac) {\r
- // totally hack. because ie5 in mac need something. </TABLE> is one of them. mac is mad.\r
- strMenu +="<TABLE></TABLE>";\r
- }\r
-\r
- var layerPopup = null;\r
- var stylePopup = null;\r
- var nEventX = 0;\r
- var nEventY = 0;\r
- var nWindowWidth = 0;\r
- if (gbBsIE4 || gbBsOpera7) {\r
-\r
- layerPopup = getElement("PopupMenu");\r
- layerPopup.innerHTML = strMenu;\r
- stylePopup = layerPopup.style;\r
-\r
- _BSPSGetClientSize();\r
-\r
- // Get the position of the item causing the event (relative to its parent)\r
- nEventX = window.event.clientX;\r
- nEventY = window.event.clientY;\r
-\r
- if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) {\r
- nEventY += document.body.scrollTop + 10;\r
- } else {\r
- nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20;\r
- }\r
- stylePopup.top = nEventY;\r
- \r
- var nPopupWidth = layerPopup.scrollWidth;\r
- if (gbBsMac) {\r
- nPopupWidth = 80; // we have no idea how to get the dynamic width of the popup.\r
- }\r
- if (nEventX + nPopupWidth + 20 > gBsClientWidth) {\r
- if (gBsClientWidth - nPopupWidth < 5) {\r
- stylePopup.left = 5;\r
- } else {\r
- stylePopup.left = gBsClientWidth - nPopupWidth - 5;\r
- }\r
- } else {\r
- stylePopup.left = nEventX + document.body.scrollLeft + 20;\r
- }\r
-\r
- stylePopup.visibility = "visible";\r
- if (!gOlddocumentClick && document.onclick)\r
- gOlddocumentClick = document.onclick;\r
- document.onclick = PopupMenu_HandleClick;\r
-\r
- } else if (gbBsNS6 || gbBsKonqueror3||gbBsSafari) {\r
- layerPopup = getElement("PopupMenu");\r
- layerPopup.style.visibility = "hidden";\r
- \r
- if (gbBsNS6)\r
- {\r
- var e = fn_arguments[0];\r
- nEventX = e.pageX;\r
- nEventY = e.pageY;\r
- }\r
- else\r
- {\r
- nEventX = window.event.clientX;\r
- nEventY = window.event.clientY;\r
- }\r
- _BSPSGetClientSize();\r
- layerPopup.innerHTML = strMenu;\r
-\r
- if (nEventY + layerPopup.offsetHeight + 20 < window.pageYOffset + gBsClientHeight) {\r
- nEventY += 20;\r
- } else {\r
- nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20;\r
- }\r
-\r
- if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) {\r
- if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) {\r
- nEventX = 5;\r
- } else {\r
- nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20;\r
- }\r
- } else {\r
- nEventX += 20;\r
- }\r
- layerPopup.style.top = nEventY;\r
- layerPopup.style.left = nEventX;\r
- // set again to avoid the stupid frash in netscape 6.\r
- layerPopup.innerHTML = strMenu;\r
- layerPopup.style.visibility = "visible";\r
- //window.captureEvents(Event.MOUSEDOWN);\r
- if (!gOlddocumentClick && document.onclick)\r
- gOlddocumentClick = document.onclick;\r
- window.onclick = PopupMenu_HandleClick;\r
- }\r
- else if (gbBsNS4) {\r
- layerPopup = document.layers.PopupMenu;\r
- layerPopup.visibility = "hide";\r
- stylePopup = layerPopup.document;\r
- stylePopup.write(strMenu);\r
- stylePopup.close();\r
- var e = fn_arguments[0];\r
- nEventX = e.pageX;\r
- nEventY = e.pageY;\r
- _BSPSGetClientSize();\r
- if (nEventY + layerPopup.clip.height + 20 < window.pageYOffset + gBsClientHeight) {\r
- nEventY += 20;\r
- } else {\r
- nEventY = gBsClientHeight + window.pageYOffset- layerPopup.clip.height - 20;\r
- }\r
- layerPopup.top = nEventY;\r
-\r
- if (nEventX + layerPopup.clip.width + 20 > gBsClientWidth + window.pageXOffset) {\r
- if (gBsClientWidth + window.pageXOffset - layerPopup.clip.width < 20) {\r
- nEventX = 5;\r
- } else {\r
- nEventX = gBsClientWidth + window.pageXOffset - layerPopup.clip.width - 20;\r
- }\r
- } else {\r
- nEventX += 20;\r
- }\r
-\r
- layerPopup.left = nEventX;\r
-\r
- layerPopup.visibility = "show";\r
-\r
- window.captureEvents(Event.MOUSEDOWN);\r
- if (!gOlddocumentClick && document.onmousedown)\r
- gOlddocumentClick = document.onmousedown;\r
- window.onmousedown = PopupMenu_HandleClick;\r
- }\r
-\r
- window.gbInPopupMenu = true;\r
- window.gbPopupMenuTimeoutExpired = false;\r
- setTimeout("PopupMenu_Timeout();", 100);\r
- return false;\r
-}\r
-\r
-function PopupMenu_Timeout()\r
-{\r
- window.gbPopupMenuTimeoutExpired = true;\r
-}\r
-\r
-function PopupMenu_Over(e)\r
-{\r
- if (gbBsIE4||gbBsOpera7)\r
- e.srcElement.className = "PopupOver";\r
- else if (gbBsNS6)\r
- e.target.parentNode.className = "PopupOver";\r
- return;\r
-}\r
-\r
-function PopupMenu_Out(e)\r
-{\r
- if (gbBsIE4||gbBsOpera7)\r
- e.srcElement.className = "PopupNotOver";\r
- else if (gbBsNS6)\r
- e.target.parentNode.className = "PopupNotOver";\r
- return;\r
-}\r
-\r
-function PopupMenu_HandleClick(e)\r
-{\r
- if (window.gbPopupMenuTimeoutExpired) {\r
- window.gbInPopupMenu = false;\r
- if (gbBsNS4 && !gbBsNS6) {\r
- window.releaseEvents(Event.MOUSEDOWN);\r
- }\r
-\r
- var layerPopup = null;\r
- if (gbBsNS4&&!gbBsNS6) {\r
- layerPopup = document.layers.PopupMenu;\r
- layerPopup.visibility = "hide";\r
- } else {\r
- layerPopup = getElement("PopupMenu");\r
- layerPopup.style.visibility = "hidden";\r
- }\r
- \r
- if (gOlddocumentClick)\r
- {\r
- if (gbBsNS4 && !gbBsNS6)\r
- document.onmousedown = gOlddocumentClick;\r
- else\r
- document.onclick = gOlddocumentClick;\r
- }\r
- }\r
- return;\r
-}\r
-\r
-function BSSCPopup_ClickMac()\r
-{\r
- if ((!DHTMLPopupSupport()) && (gbBsIE4 || gbBsOpera7))\r
- { \r
- var bClickOnAnchor = false;\r
- var el;\r
- if ((window.event != null) &&\r
- (window.event.srcElement != null))\r
- {\r
- el = window.event.srcElement;\r
- while (el != null)\r
- {\r
- if ((el.tagName == "A") || (el.tagName == "AREA")) {\r
- bClickOnAnchor = true;\r
- break;\r
- }\r
- if (el.tagName == "BODY") {\r
- break;\r
- }\r
- el = getParentNode(el);\r
- }\r
- }\r
- if (BSSCPopup_IsPopup())\r
- {\r
- if (!bClickOnAnchor) {\r
- parent.window.gPopupWindow = null;\r
- self.close();\r
- }\r
- }\r
- else\r
- {\r
- bClosePopupWindow = true;\r
- if ((bClickOnAnchor) &&\r
- (el.href) &&\r
- ((el.href.indexOf("javascript:BSSCPopup") != -1) || (el.href.indexOf("javascript:null") != -1) || (el.href.indexOf("javascript:void(0)") != -1)))\r
- {\r
- bClosePopupWindow = false;\r
- }\r
- if (bClosePopupWindow)\r
- {\r
- if (window.gPopupWindow != null && !window.gPopupWindow.closed )\r
- {\r
- window.gPopupWindow.close();\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-function BsPopupOnClick()\r
-{\r
- if (!gbBsIE4 && !gbBsOpera7)\r
- return;\r
-\r
- BSSCPopup_ClickMac();\r
-}\r
-\r
-function _BSSCOnError(message)\r
-{\r
- if(-1 != message.indexOf("denied") \r
- || -1 != message.indexOf("Object required"))\r
- return true;\r
-}\r
-\r
-//End to support previous relative topics\r
-\r
-/// Section End - General and relative topics (JavaScript 1.0)\r
-\r
-/// Section Begin - Popup (JavaScript 1.0)\r
-//Begin to support previous popup functions\r
-\r
-//variables used to isolate the browser type\r
-var gBsStyVisShow = null;\r
-var gBsStyVisHide = null;\r
-var gBsClientWidth = 640;\r
-var gBsClientHeight = 480;\r
-\r
-// here is the varible for judge popup windows size. these parameter is for IE5.0, it may need adjust for others.\r
-var gBRateH_W = 0.618; // 1.618 Golden cut.\r
-var gBMaxXOfParent = 0.8; \r
-var gBMaxYOfParent = 0.8;\r
-var gBscrollHeight = 16;\r
-var gBscrollWidth = 16;\r
-var gBpermitXDelta = 3;\r
-var gBpermitYDelta = 3;\r
-\r
-\r
-var arrayPopupURL = new Array();\r
-var arrayAbsPopupURL = new Array();\r
-\r
-var arrayDirty = new Array();\r
-\r
-function setAbsPopupURL(nIndex, strURL)\r
-{\r
- arrayAbsPopupURL[nIndex] = strURL;\r
-}\r
-\r
-function getAbsPopupURL(nIndex)\r
-{\r
- if (nIndex == -1 || arrayAbsPopupURL.length <= nIndex) return null;\r
- else \r
- return arrayAbsPopupURL[nIndex];\r
-}\r
-\r
-function getPopupURL(nIndex)\r
-{\r
- if (nIndex == -1 || arrayPopupURL.length <= nIndex) return null;\r
- else \r
- return arrayPopupURL[nIndex];\r
-}\r
-\r
-function getPopupID(nIndex)\r
-{\r
- return gstrPopupID + nIndex;\r
-}\r
-\r
-function getPopupShadowID(nIndex)\r
-{\r
- return gstrPopupShadowID + nIndex;\r
-}\r
-\r
-function getPopupTopicID(nIndex)\r
-{\r
- return gstrPopupTopicID + nIndex;\r
-}\r
-\r
-function getPopupIFrameID(nIndex)\r
-{\r
- return gstrPopupIFrameID + nIndex;\r
-}\r
-\r
-function getPopupIFrameName(nIndex)\r
-{\r
- return gstrPopupIFrameName + nIndex;\r
-}\r
-\r
-\r
-function getPopupTopicStyle(nIndex)\r
-{\r
- return getElement(getPopupTopicID(nIndex)).style;\r
-}\r
-\r
-function getPopupShadowStyle(nIndex)\r
-{\r
- return getElement(getPopupShadowID(nIndex)).style;\r
-}\r
-\r
-function getPopupIFrame(nIndex)\r
-{\r
- if (gbBsNS6)\r
- return eval("window.frames['" + getPopupIFrameName(nIndex) + "']");\r
- else\r
- return eval("document.frames['" + getPopupIFrameName(nIndex) + "']");\r
-}\r
-\r
-function getPopupDivStyle(nIndex)\r
-{\r
- return getElement(getPopupID(nIndex)).style;\r
-}\r
-\r
-function getPopupIFrameStyle(nIndex)\r
-{\r
- return getElement(getPopupIFrameID(nIndex)).style;\r
-}\r
-\r
-\r
-function findDiv(strURL)\r
-{\r
- for (var i = 0; i < arrayPopupURL.length; i ++ ) {\r
- if (arrayPopupURL[i] == strURL) {\r
- return i;\r
- }\r
- }\r
- return -1;\r
-}\r
-\r
-var gnToken = -1;\r
-function takeToken()\r
-{\r
- gnToken ++;\r
- if (gnToken > 10000) gnToken = 0;\r
- return gnToken;\r
-}\r
-\r
-function IsValidToken(nToken)\r
-{\r
- return (gnToken == nToken);\r
-}\r
-\r
-function addDiv(strURL)\r
-{\r
- for (var i = 0; i < arrayPopupURL.length; i ++) {\r
- if (arrayPopupURL[i] == null) {\r
- arrayPopupURL[i] = strURL;\r
- return i;\r
- }\r
- } \r
- arrayPopupURL[i] = strURL;\r
- arrayDirty[i] = true;\r
- return i;\r
-}\r
-\r
-function setDirty()\r
-{\r
- for (var i = 0; i < arrayPopupURL.length; i ++ )\r
- arrayDirty[i] = true;\r
-}\r
-\r
-function IsDirty(nIndex)\r
-{\r
- if (nIndex == -1)\r
- return true;\r
- else \r
- if (arrayDirty.length > nIndex) \r
- return arrayDirty[nIndex];\r
- else\r
- return true;\r
-}\r
-\r
-function hideAll()\r
-{\r
- for (var i = 0; i < arrayPopupURL.length; i ++ )\r
- {\r
- getPopupDivStyle(i).visibility = gBsStyVisHide;\r
- getPopupIFrameStyle(i).visibility = gBsStyVisHide;\r
- }\r
-}\r
-\r
-function getCurrentPopupIFrame()\r
-{\r
- for (var i = 0; i < arrayPopupURL.length; i ++)\r
- if (getPopupDivStyle(i).visibility == gBsStyVisShow)\r
- return getPopupIFrame(i);\r
- return null;\r
-}\r
-\r
-function setClear(nIndex)\r
-{\r
- if (nIndex != -1)\r
- arrayDirty[nIndex] = false;\r
-}\r
-\r
-function _BSSCCreatePopupDiv(strURL)\r
-{\r
- var nIndex = findDiv(strURL);\r
- if (nIndex == -1 ) {\r
- nIndex = addDiv(strURL);\r
- BsPopup_CreateDiv(nIndex);\r
- }\r
- else {\r
- if (IsDirty(nIndex)) {\r
- if("object" == typeof(getPopupIFrame(nIndex).document))\r
- getPopupIFrame(nIndex).document.location.href = strURL;\r
- }\r
- }\r
- return nIndex;\r
-}\r
-\r
-//Here is the browser type \r
-function _BSPSGetBrowserInfo()\r
-{\r
- if (gbBsNS4&&!gbBsNS6)\r
- {\r
- gBsStyVisShow = "show";\r
- gBsStyVisHide = "hide";\r
- }\r
- else\r
- {\r
- gBsStyVisShow = "visible";\r
- gBsStyVisHide = "hidden";\r
- }\r
-}\r
-\r
-_BSPSGetBrowserInfo();\r
-\r
-//Get client size info\r
-function _BSPSGetClientSize()\r
-{\r
- if (gbBsNS4||gbBsKonqueror3||gbBsSafari)\r
- {\r
- gBsClientWidth = innerWidth;\r
- gBsClientHeight = innerHeight;\r
- }\r
- else if (gbBsIE4 || gbBsOpera7)\r
- {\r
- gBsClientWidth = document.body.clientWidth;\r
- gBsClientHeight = document.body.clientHeight;\r
- }\r
-}\r
-\r
-var gstrPopupID = 'BSSCPopup';\r
-var gstrPopupShadowID = 'BSSCPopupShadow';\r
-var gstrPopupTopicID = 'BSSCPopupTopic';\r
-var gstrPopupIFrameID = 'BSSCPopupIFrame';\r
-var gstrPopupIFrameName = 'BSSCPopupIFrameName';\r
-\r
-var gstrPopupSecondWindowName = 'BSSCPopup';\r
-\r
-var gPopupWindow = null;\r
-var gnPopupClickX = 0;\r
-var gnPopupClickY = 0;\r
-\r
-var gnPopupScreenClickX = 0;\r
-var gnPopupScreenClickY = 0;\r
-\r
-var gbPopupTimeoutExpired = false;\r
-\r
-function DHTMLPopupSupport()\r
-{\r
- if (((gbBsIE4) && (!gbBsMac))||gbBsOpera7|| gbBsNS7) {\r
- return true;\r
- }\r
- return false;\r
-}\r
-\r
-function BSSCPopup_IsPopup()\r
-{\r
- if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) {\r
- return true;\r
- } else if ((gbBsNS4 || gbBsIE4 || gbBsOpera7) && (this.name.indexOf(gstrPopupID) != -1)) {\r
- return true;\r
- } else {\r
- return false;\r
- }\r
-}\r
-\r
-// If there is a hyperlink in a popup window, display the hyperlink in\r
-// the original window. (bsscright)\r
-if (BSSCPopup_IsPopup() && !gbBsIE4 && !gbBsOpera7) {\r
- document.write("<base target=\"bsscright\">");\r
-}\r
-\r
-// Local functions.\r
-function BsPopup_CreateDiv(nIndex)\r
-{\r
- if(!DHTMLPopupSupport())\r
- return;\r
- // DO NOT SET Width and height for the div, otherwize it will make IE4 popup do not work when view the topic alone.\r
- var strPopupDiv = "<DIV ID='" + getPopupID(nIndex) + "' STYLE='position:absolute; top:-100; left:0; z-index:600; visibility:hidden;'>";\r
- strPopupDiv += "<DIV ID='" + getPopupShadowID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0; background-color:#C0C0C0;\"></DIV>";\r
- strPopupDiv += "<DIV ID='" + getPopupTopicID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0; background-color:#FFFFFF;border:1px #000000 outset;\">";\r
- strPopupDiv += "<IFRAME title=\"Popup Window\" ID='" + getPopupIFrameID(nIndex) + "' name='" + getPopupIFrameName(nIndex) + "' src = '" + getPopupURL(nIndex) + "' frameborder=0 scrolling=auto></IFRAME>";\r
- strPopupDiv += "</DIV></DIV>";\r
-\r
- var objBody = getElementsByTag(document, "BODY")[0];\r
- if( typeof(objBody) != "object" )\r
- return;\r
-\r
- insertAdjacentHTML(objBody, "beforeEnd", strPopupDiv);\r
-}\r
-\r
-function handleLoadNS()\r
-{\r
- if (this.id)\r
- {\r
- var nIndex = parseInt(this.id.substring(gstrPopupIFrameID.length));\r
- BSSCPopup_PostWork(nIndex);\r
- }\r
-}\r
-\r
-function BSSCPopup_PostWork(nIndex)\r
-{\r
- getPopupDivStyle(nIndex).visibility = gBsStyVisShow;\r
- getPopupIFrameStyle(nIndex).visibility =gBsStyVisShow;\r
-\r
- setClear(nIndex);\r
- window.gbPopupTimeoutExpired = true;\r
-\r
- BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document);\r
- if (gbBsNS6)\r
- getPopupIFrame(nIndex).document.body.addEventListener("click",BSSCPopupClicked,false);\r
- else\r
- getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked;\r
-\r
- if (!gbOrignalOnMouseDown && document.onmousedown)\r
- gbOrignalOnMouseDown = document.onmousedown;\r
-\r
- if (gbBsNS6)\r
- document.addEventListener("mousedown", BSSCPopupParentClicked,false);\r
- else\r
- document.onmousedown = BSSCPopupParentClicked;\r
-}\r
-\r
-function BSSCPopup_Timeout(nIndex, nToken)\r
-{\r
- if (!IsValidToken(nToken)) return;\r
-\r
- if (gbBsNS6||((getPopupIFrame(nIndex).document.readyState == "complete") &&\r
- (getPopupIFrame(nIndex).document.body != null))) {\r
- BSSCPopup_PostWork(nIndex);\r
- } else {\r
- setTimeout("BSSCPopup_Timeout(" + nIndex + "," + nToken + ")", 100);\r
- }\r
-}\r
-\r
-// VH 08/10/00 \r
-// do not change target to parent if the href is using javascript\r
-function BSSCPopup_ChangeTargettoParent(tagsObject)\r
-{\r
- var collA = getElementsByTag(tagsObject, "A");\r
- BSSCPopup_ChangeTargettoParent2(collA);\r
-\r
- var collIMG = getElementsByTag(tagsObject,"IMG");\r
- BSSCPopup_ChangeTargettoParent2(collIMG);\r
-}\r
-\r
-function BSSCPopup_ChangeTargettoParent2(colls)\r
-{\r
- if (colls != null) {\r
- for (var j = 0; j < colls.length; j ++ )\r
- {\r
- var strtemp = colls[j].href;\r
- if (strtemp)\r
- {\r
- strtemp = strtemp.toLowerCase();\r
- if (strtemp.indexOf("javascript:") == -1)\r
- if (colls[j].target == "")\r
- colls[j].target = "_parent";\r
- }\r
- }\r
- }\r
-}\r
-\r
-function BSPSPopupTopicWinHelp(strURL)\r
-{\r
- _BSSCPopup(strURL);\r
- return;\r
-}\r
-\r
-function _BSSCPopup(strURL, width, height)\r
-{\r
- var cuswidth = 0;\r
- var cusheight = 0;\r
- if ("undefined" != typeof(width) && "undefined" != typeof(height)) {\r
- cuswidth = width;\r
- cusheight= height;\r
- }\r
- \r
- if (DHTMLPopupSupport()) {\r
- var nToken = takeToken(); // take token first.\r
- var nIndex = _BSSCCreatePopupDiv(strURL);\r
- window.gbPopupTimeoutExpired = false;\r
- var ntWidth = gBsClientWidth;\r
- var ntHeight = gBsClientHeight;\r
- _BSPSGetClientSize();\r
- if (ntWidth != gBsClientWidth || ntHeight != gBsClientHeight) {\r
- setDirty();\r
- }\r
-\r
- if (IsDirty(nIndex)) {\r
- if (gbBsMac) {\r
- setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight +")", 400);\r
- } else {\r
- setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 100);\r
- }\r
- }\r
- else {\r
- MoveDivAndShow(nIndex ,nToken, cuswidth, cusheight);\r
- }\r
- } else {\r
- _BSSCPopup2(strURL, cuswidth, cusheight);\r
- }\r
- return;\r
-}\r
-\r
-if (gbBsIE55)\r
-{\r
- var ehlpdhtm_fOldBefureUnload = window.onbeforeunload;\r
- var gnBsUnload=0;\r
- window.onbeforeunload = window_BUnload;\r
-}\r
- \r
-function window_BUnload()\r
-{\r
- gnBsUnload++;\r
- if (gnBsUnload>1)\r
- return;\r
- for (var i = 0; i < arrayPopupURL.length; i ++)\r
- removeThis(document.all(getPopupID(i)));\r
- arrayPopupURL.length = 0; \r
- if (ehlpdhtm_fOldBefureUnload)\r
- ehlpdhtm_fOldBefureUnload();\r
-}\r
-\r
-function _BSSCPopup2(strURL, width, height)\r
-{\r
- if (gbBsOpera6&&gbBsMac)\r
- {\r
- var wmTemp = window.open(document.location.href, gstrPopupSecondWindowName);\r
- wmTemp.close();\r
- setTimeout("_BSSCPopup3(\""+strURL+"\","+width+","+height+");",100);\r
- }\r
- else\r
- _BSSCPopup3(strURL, width, height);\r
-}\r
- \r
-function _BSSCPopup3(strURL, width, height)\r
-{\r
- if (window.name == gstrPopupSecondWindowName) {\r
- window.location = strURL;\r
- } else {\r
- if (!gbBsMac || !gbBsNS4) {\r
- BSSCHidePopupWindow();\r
- }\r
- var nX = 0;\r
- var nY = 0;\r
- var nHeight = 300;\r
- var nWidth = 400;\r
- if (width > 0 && height > 0) {\r
- nHeight = height;\r
- nWidth = width;\r
- }\r
- _BSPSGetClientSize();\r
-\r
- nX = window.gnPopupScreenClickX;\r
- nY = window.gnPopupScreenClickY;\r
-\r
- if (nY + nHeight + 40 > screen.availHeight) {\r
- nY = screen.availHeight - nHeight - 40;\r
- }\r
- if (nX + nWidth + 40 > screen.availWidth) {\r
- nX = screen.availWidth - nWidth - 40;\r
- }\r
-\r
- // Launch a separate window\r
- var strParam="titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes";\r
- if (gbBsNS) {\r
- if (gbBsNS6) {\r
- strParam += ",Height=" + nHeight + ",Width=" + nWidth;\r
- strParam += ",screenX=" + nX + ",screenY=" + nY;\r
- strParam += ",dependent=yes";\r
- }\r
- else {\r
- strParam += ",OuterHeight=" + nHeight + ",OuterWidth=" + nWidth;\r
- strParam += ",screenX=" + nX + ",screenY=" + nY;\r
- strParam += ",dependent=yes";\r
- }\r
- }\r
- else {\r
- strParam += ",height=" + nHeight + ",width=" + nWidth;\r
- strParam += ",left=" + nX + ",top=" + nY;\r
- }\r
- if (gbBsSafari)\r
- {\r
- if (window.gPopupWindow)\r
- window.gPopupWindow.close(); \r
- window.gPopupWindow = window.open(strURL, "", strParam);\r
- window.gPopupWindow.name = gstrPopupSecondWindowName;\r
- window.gPopupWindow.moveTo(nX, nY);\r
- widnow.gPopupWindow.document.location.reload();\r
- } \r
- else\r
- {\r
- var wmTemp=null;\r
- if (gbBsKonqueror3)\r
- {\r
- if (window.gPopupWindow)\r
- window.gPopupWindow.close();\r
- }\r
- if (gbBsOpera&&gbBsMac)\r
- {\r
- wmTemp= window.open(document.location.href, "Temp", strParam);\r
- }\r
- window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam);\r
- if (!gbBsIE)\r
- window.gPopupWindow.focus();\r
- \r
- if (wmTemp)\r
- wmTemp.close();\r
- }\r
-\r
- if (gbBsNS4)\r
- setEventHandle();\r
- else if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3)\r
- setTimeout("setPopupFocus();", 100);\r
- }\r
- return;\r
-}\r
-\r
-function setEventHandle()\r
-{\r
- window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUR);\r
- window.gPopupWindow.onclick = NonIEPopup_HandleClick;\r
- window.gPopupWindow.onblur = NonIEPopup_HandleBlur;\r
-}\r
-\r
-function setPopupFocus()\r
-{\r
- window.gPopupWindow.focus();\r
-}\r
-\r
-function NonIEPopup_HandleBlur(e)\r
-{\r
- window.gPopupWindow.focus();\r
-}\r
-\r
-function NonIEPopup_HandleClick(e)\r
-{\r
- // Because navigator will give the event to the handler before the hyperlink, let's\r
- // first route the event to see if we are clicking on a Popup menu in a popup.\r
- document.routeEvent(e);\r
-\r
- // If a popup menu is active then don't do anything with the click\r
- if (window.gPopupWindow.gbInPopupMenu) {\r
- window.gPopupWindow.captureEvents(Event.CLICK);\r
- window.gPopupWindow.onclick = NonIEPopup_HandleClick;\r
- return false;\r
- }\r
-\r
- // Close the popup window\r
- if(e.target.href)\r
- {\r
- if(e.target.href.indexOf("javascript:")==-1) \r
- {\r
- if (e.target.target=="")\r
- window.location.href = e.target.href;\r
- else\r
- window.open(e.target.href, e.target.target);\r
- this.close();\r
- }\r
- } \r
- else\r
- this.close();\r
- return false;\r
-}\r
-\r
-function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight)\r
-{ \r
- if (!window.getPopupIFrame(nIndex).document) {\r
- _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight);\r
- return;\r
- }\r
- \r
- if (!IsValidToken(nToken)) return;\r
-\r
- if (gbBsNS6)\r
- {\r
- setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.\r
- BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight);\r
- return;\r
- }\r
- \r
- if ((window.getPopupIFrame(nIndex).document.readyState == "complete") &&\r
- (window.getPopupIFrame(nIndex).document.body != null)) {\r
- 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.\r
- window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);\r
- setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
- }\r
- else\r
- {\r
- setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.\r
- BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight);\r
- }\r
- } else {\r
- setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
- }\r
-}\r
-\r
-function BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight)\r
-{\r
- if (window.gbPopupTimeoutExpired) return;\r
-\r
- if (!IsValidToken(nToken)) return;\r
-\r
- getPopupDivStyle(nIndex).visibility = gBsStyVisHide;\r
- getPopupIFrameStyle(nIndex).visibility = gBsStyVisHide;\r
-\r
- // Determine the width and height for the window\r
- _BSPSGetClientSize();\r
-\r
- var size = new BSSCSize(0, 0);\r
-\r
- if (cuswidth <= 0 || cusheight <= 0)\r
- BSSCGetContentSize(window.getPopupIFrame(nIndex), size);\r
- else {\r
- size.x = cuswidth;\r
- size.y = cusheight;\r
- }\r
-\r
- // Determine the width and height for the window\r
- var nWidth = size.x;\r
- var nHeight = size.y;\r
-\r
- // for small popup size, we should allow any size.\r
- // The popup size should be ok if bigger than 0\r
- if (nWidth < 0 || nHeight < 0) return; // there must be something terribly wrong. \r
-\r
- getPopupDivStyle(nIndex).width = nWidth;\r
- getPopupDivStyle(nIndex).height = nHeight;\r
-\r
- getPopupShadowStyle(nIndex).width = nWidth;\r
- getPopupShadowStyle(nIndex).height = nHeight;\r
- getPopupTopicStyle(nIndex).width = nWidth;\r
- getPopupTopicStyle(nIndex).height = nHeight;\r
- if (gbBsIE55)\r
- {\r
- getPopupShadowStyle(nIndex).width = nWidth + 2;\r
- getPopupShadowStyle(nIndex).height = nHeight + 2;\r
- getPopupTopicStyle(nIndex).width = nWidth + 2;\r
- getPopupTopicStyle(nIndex).height = nHeight + 2;\r
- }\r
-\r
- getPopupIFrameStyle(nIndex).width = nWidth;\r
- getPopupIFrameStyle(nIndex).height = nHeight;\r
- if (gbBsIE55 || gbBsNS6)\r
- {\r
- getPopupIFrameStyle(nIndex).top = 0;\r
- getPopupIFrameStyle(nIndex).left = 0;\r
- }\r
- \r
- var strURL = getPopupURL(nIndex);\r
- if (strURL.indexOf("#") != -1&&gbBsNS6)\r
- getPopupIFrame(nIndex).location.reload();\r
- else if (strURL.indexOf("#") != -1||gbBsNS6)\r
- getPopupIFrame(nIndex).location.href = strURL; // reload again, this will fix the bookmark misunderstand in IE5.\r
- \r
- MoveDivAndShow(nIndex, nToken, cuswidth, cusheight);\r
-}\r
-\r
-function getScrollLeft()\r
-{\r
- if (document.body.scrollLeft)\r
- return document.body.scrollLeft;\r
- else if (window.pageXOffset)\r
- return window.pageXOffset;\r
- else\r
- return 0;\r
-}\r
-\r
-function getScrollTop()\r
-{\r
- if (document.body.scrollTop)\r
- return document.body.scrollTop;\r
- else if (window.pageYOffset)\r
- return window.pageYOffset;\r
- else\r
- return 0;\r
-}\r
-\r
-\r
-function MoveDivAndShow(nIndex, nToken, cuswidth, cusheight)\r
-{\r
- if (window.getPopupIFrame(nIndex).document.location.href != getAbsPopupURL(nIndex)) { // if redirect, reload again.\r
- window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);\r
- setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
- return;\r
- }\r
-\r
- // Determine the position of the window\r
- var nClickX = window.gnPopupClickX;\r
- var nClickY = window.gnPopupClickY;\r
- var nTop = 0;\r
- var nLeft = 0;\r
-\r
- var nWidth = parseInt(getPopupDivStyle(nIndex).width);\r
- var nHeight = parseInt(getPopupDivStyle(nIndex).height);\r
-\r
- if (nClickY + nHeight + 20 < gBsClientHeight + getScrollTop()) {\r
- nTop = nClickY + 10;\r
- } else {\r
- nTop = (getScrollTop() + gBsClientHeight) - nHeight - 20;\r
- }\r
- if (nClickX + nWidth < gBsClientWidth + getScrollLeft()) {\r
- nLeft = nClickX;\r
- } else {\r
- nLeft = (getScrollLeft() + gBsClientWidth) - nWidth - 8;\r
- }\r
-\r
- if (nTop < getScrollTop()) nTop = getScrollTop() + 1;\r
- if (nLeft< getScrollLeft()) nLeft = getScrollLeft() + 1;\r
-\r
- getPopupDivStyle(nIndex).left = nLeft;\r
- getPopupDivStyle(nIndex).top = nTop;\r
-\r
- // Set the location of the background blocks\r
- getPopupShadowStyle(nIndex).left = 6;\r
- getPopupShadowStyle(nIndex).top = 6;\r
- if (gbBsIE55)\r
- {\r
- getPopupShadowStyle(nIndex).left = 4;\r
- getPopupShadowStyle(nIndex).top = 4;\r
- }\r
-\r
- if (gbBsMac&&gbBsIE4) {\r
- // Total hack on the iMac to get the IFrame to position properly\r
- getPopupIFrameStyle(nIndex).pixelLeft = 100;\r
- getPopupIFrameStyle(nIndex).pixelLeft = 0;\r
- // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it\r
- getPopupIFrame(nIndex).window.BSSCOnLoad();\r
- }\r
-\r
- if (gbBsNS6&&IsDirty(nIndex))\r
- getElement(getPopupIFrameID(nIndex)).addEventListener("load", handleLoadNS, false);\r
- else\r
- BSSCPopup_Timeout(nIndex , nToken );\r
- return;\r
-}\r
-\r
-function BSSCSize(x, y)\r
-{\r
- this.x = x;\r
- this.y = y;\r
-}\r
-\r
-function BSSCGetContentSize(thisWindow, size)\r
-{\r
- if (!gbBsIE4 && !gbBsOpera7 && !gbBsNS4)\r
- return;\r
-\r
- if ((gbBsMac&&gbBsIE4)||gbBsNS4||gbBsOpera7) {\r
- size.x = 320;\r
- size.y = 180;\r
- return;\r
- }\r
-\r
- // Resize the width until it is wide enough to handle the content\r
- // The trick is to start wide and determine when the scrollHeight changes\r
- // because then we know a scrollbar is necessary. We can then go back\r
- // to the next widest size (for no scrollbar)\r
-\r
- var ClientRate = gBsClientHeight / gBsClientWidth;\r
-\r
- \r
- var GoldenSize = new BSSCSize(0,0);\r
- GoldenSize.x = gBsClientWidth * gBMaxXOfParent;\r
- GoldenSize.y = gBsClientHeight *gBMaxYOfParent ;\r
-\r
- if (ClientRate > gBRateH_W) {\r
- GoldenSize.y = GoldenSize.x * gBRateH_W;\r
- }\r
- else {\r
- GoldenSize.x = GoldenSize.y / gBRateH_W;\r
- }\r
-\r
- // Try to using parent specified max x.\r
- var x = 0;\r
- var maxgoldx = GoldenSize.x;\r
- var maxx = gBsClientWidth * gBMaxXOfParent;\r
- \r
- // This double resize causes the document to re-render (and we need it to)\r
- if (!gbBsIE5)\r
- thisWindow.moveTo(10000,10000); // this is used to fix the flash on IE4.\r
- \r
- thisWindow.resizeTo(1, 1);\r
- thisWindow.resizeTo(1, 1);\r
- thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight);\r
- thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight);\r
- \r
- var miny = thisWindow.document.body.scrollHeight + gBscrollHeight;\r
- \r
- 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\r
- {\r
- thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight);\r
- thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight);\r
- \r
- miny = thisWindow.document.body.scrollHeight + gBscrollHeight;\r
- maxy = gBsClientHeight * gBMaxYOfParent;\r
- \r
- if (miny > maxy) { // the popup must have a scroll, OK let it be.\r
- miny = maxy;\r
- size.x = maxx;\r
- size.y = maxy;\r
- thisWindow.document.body.scroll = 'yes'; // At this time we do want to show scroll any more. so it will looks better a little.\r
- }\r
- else { // popup still can fit in the parent area by someway. now we choose the same h/w rate as parent.\r
- size.y = miny;\r
- \r
- // downsize from maxx , now I try to using binary divide.\r
- x = maxx;\r
- deltax = -maxx/2;\r
- //j = 0;\r
- while (true) {\r
- x = x + deltax;\r
- thisWindow.resizeTo(x, miny);\r
- thisWindow.resizeTo(x, miny);\r
- diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * ClientRate;\r
- if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter\r
- deltax = Math.abs(deltax) /2;\r
- else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter\r
- deltax = -Math.abs(deltax) /2;\r
- else \r
- // the y is close enough to wanted.\r
- break;\r
- if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.\r
- break;\r
- }\r
- size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth;\r
- size.y = thisWindow.document.body.scrollHeight;// + gBscrollHeight; \r
- thisWindow.document.body.scroll = 'no';\r
- }\r
- }\r
- else {\r
- if (thisWindow.document.body.scrollWidth > maxgoldx) {\r
- size.x = maxx; \r
- size.y = miny; \r
- thisWindow.document.body.scroll = 'yes';\r
- }\r
- else {\r
- // downsize from maxgoldx , now I try to using binary divide.\r
- x = maxgoldx;\r
- deltax = -maxgoldx/2;\r
- while (true) {\r
- x = x + deltax;\r
- thisWindow.resizeTo(x, miny);\r
- thisWindow.resizeTo(x, miny);\r
- diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * gBRateH_W;\r
- if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter\r
- deltax = Math.abs(deltax) /2;\r
- else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter\r
- deltax = -Math.abs(deltax) /2;\r
- else \r
- // the y is close enough to wanted.\r
- break;\r
- if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.\r
- break;\r
- }\r
- size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth;\r
- size.y = thisWindow.document.body.scrollHeight ;\r
- thisWindow.document.body.scroll = 'no'; // At this time we do not want to show scroll any more. so it will looks better a little.\r
- thisWindow.resizeTo(size.x, size.y);\r
- if (thisWindow.document.body.scrollWidth > size.x)\r
- {\r
- size.x = thisWindow.document.body.scrollWidth;\r
- }\r
- if (thisWindow.document.body.scrollHeight > size.y)\r
- {\r
- size.y = thisWindow.document.body.scrollHeight;\r
- }\r
- }\r
- }\r
- thisWindow.resizeTo(size.x, size.y);\r
- thisWindow.resizeTo(size.x, size.y);\r
- return;\r
-}\r
-\r
-function BSSCPopupParentClicked()\r
-{\r
- if (!window.gbPopupTimeoutExpired) {\r
- return false;\r
- }\r
- \r
- document.onmousedown = gbOrignalOnMouseDown;\r
-\r
- // Simply hide the popup\r
- hideAll();\r
-\r
- window.gbPopupTimeoutExpired = false;\r
-\r
- return true;\r
-}\r
-\r
-function isInsideHyperLink(obj)\r
-{\r
- if (obj&&obj!=getParentNode(obj))\r
- {\r
- if (obj.tagName=="A"||obj.tagName=="IMG")\r
- return true;\r
- else\r
- return isInsideHyperLink(getParentNode(obj));\r
- }\r
- else\r
- return false;\r
-}\r
-\r
-function BSSCPopupClicked(e)\r
-{\r
- if (!window.gbPopupTimeoutExpired) {\r
- return false;\r
- }\r
-\r
- var popupIFrame = getCurrentPopupIFrame();\r
- if (popupIFrame == null) {\r
- return true;\r
- }\r
-\r
- if (gbBsIE4 && (!((popupIFrame.window.event != null) &&\r
- (popupIFrame.window.event.srcElement != null) &&\r
- isInsideHyperLink(popupIFrame.window.event.srcElement)))) {\r
- document.onmousedown = gbOrignalOnMouseDown;\r
- \r
- // Simply hide the popup\r
- hideAll();\r
- window.gbPopupTimeoutExpired = false;\r
- return true;\r
- }\r
- else if (gbBsNS6 && (!((e != null) &&\r
- (e.target!= null) && isInsideHyperLink(e.target))))\r
- {\r
- document.addEventListener("mousedown", gbOrignalOnMouseDown,false);\r
- // Simply hide the popup\r
- hideAll();\r
- window.gbPopupTimeoutExpired = false;\r
- return true; \r
- }\r
-}\r
-\r
-//trace the mouse over's position for hotspot\r
-function BSPSPopupOnMouseOver(event)\r
-{\r
- if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) {\r
- window.gnPopupClickX = event.clientX + getScrollLeft();\r
- window.gnPopupClickY = event.clientY + getScrollTop();\r
- window.gnPopupScreenClickX = event.screenX;\r
- window.gnPopupScreenClickY = event.screenY;\r
- } else if (gbBsSafari) {\r
- window.gnPopupClickX = event.clientX + getScrollLeft();\r
- window.gnPopupClickY = event.clientY + getScrollTop();\r
- window.gnPopupScreenClickX = event.screenX + window.screenX;\r
- window.gnPopupScreenClickY = event.screenY + window.screenY;\r
- } else if (gbBsNS4) {\r
- window.gnPopupClickX = event.pageX - window.pageXOffset;\r
- window.gnPopupClickY = event.pageY - window.pageYOffset;\r
- window.gnPopupScreenClickX = event.screenX - window.pageXOffset;\r
- window.gnPopupScreenClickY = event.screenY - window.pageYOffset;\r
- }\r
-}\r
-\r
-function BSSCHidePopupWindow()\r
-{\r
- if (window.gPopupWindow != null) {\r
- if (gbBsNS4) {\r
- if ((typeof window.gPopupWindow != "undefined") && (!window.gPopupWindow.closed)) {\r
- window.gPopupWindow.close();\r
- window.gPopupWindow = null;\r
- }\r
- }\r
- }\r
- return;\r
-}\r
-\r
-// Add the PopupOnClick to the onclick array.\r
-if (typeof(BsscRegisterOnClick) != "undefined")\r
-{\r
- BsscRegisterOnClick(BsPopupOnClick);\r
-}\r
-//End to support previous popup functions\r
-\r
-/// Section End - Popup (JavaScript 1.0)\r
-\r
-/// Section Begin - Embedded Stub (JavaScript 1.0)\r
-\r
-function BSSCCreatePopupDiv()\r
-{\r
- return;\r
-}\r
-\r
-function WritePopupMenuLayer()\r
-{\r
- if (BsscHasExtJs()) {_WritePopupMenuLayer();}\r
-}\r
-\r
-function BSSCPopup(strURL, width, height)\r
-{\r
- var re = new RegExp("'", 'g');\r
- strURL = strURL.replace(re, "%27");\r
-\r
- if (BsscHasExtJs()) { \r
- _BSSCPopup(strURL, width, height);\r
- }else{\r
- //Create a temporary window first to ensure the real popup comes up on top\r
- var wndTemp = null;\r
- if (!gbBsNS3) {\r
- wndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");\r
- }\r
- // Create the real popup window\r
- var wndPopup = window.open(strURL, "BSSCPopup", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=300,width=400");\r
- // Close the temporary\r
- if (!gbBsNS3) {\r
- wndTemp.close();\r
- } else {\r
- wndPopup.focus();\r
- }\r
- }\r
-}\r
-\r
-var gbWndTemp = null, gbWndPopupLinks = null;\r
-var gbstrParaTotal = "";\r
-\r
-function PopupMenu_Invoke()\r
-{\r
- if (typeof(wfRelatedTopic) == 'function' && typeof(IsFlashSupported) == 'function')\r
- {\r
- if (Number(gsSkinVersion) > 2 && IsFlashSupported())\r
- {\r
- return wfRelatedTopic(PopupMenu_Invoke.arguments);\r
- }\r
- }\r
- if (BsscHasExtJs()) {\r
- return _PopupMenu_Invoke(PopupMenu_Invoke.arguments);\r
- }\r
- if (gbBsNS3Before || gbBsIE3Before ) {\r
- var argLen = PopupMenu_Invoke.arguments.length;\r
- if (argLen < 5) {\r
- window.document.location.href = PopupMenu_Invoke.arguments[3];\r
- return false;\r
- }\r
- gbWndTemp = null;\r
- gbWndPopupLinks = null;\r
- gbstrParaTotal = "";\r
- for (var i = 0; i < (argLen - 2) / 2; i++) {\r
- var strParaLine = "";\r
- if (gbBsNS2){\r
- strParaLine += "<a href=\"";\r
- strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];\r
- strParaLine += "\">"\r
- strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];\r
- strParaLine += "</a>";\r
- } else {\r
- strParaLine += "<a href=\"javascript:";\r
- strParaLine += "gotoUrl(\'";\r
- strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];\r
- strParaLine += "\');\"";\r
- if (PopupMenu_Invoke.arguments[1] != '') {\r
- strParaLine += " TARGET='" + PopupMenu_Invoke.arguments[1] + "'";\r
- }\r
- strParaLine += ">";\r
- strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];\r
- strParaLine += "</a>";\r
- }\r
- strParaLine += "<br>";\r
- gbstrParaTotal += strParaLine;\r
- }\r
- var nHeight = argLen * 15;\r
- var nWidth = 400;\r
- var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";\r
- strParam += ",height=" + nHeight + ",width=200,resizable";\r
- \r
- //Create a temporary window first to ensure the real popup comes up on top\r
- //var wndTemp = null;\r
- if (!gbBsNS3) {\r
- gbWndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");\r
- } \r
- gbWndPopupLinks = window.open("", "popuplinks", strParam);\r
-\r
- setTimeout("Wait_PopupMenuReady()", 100);\r
- }\r
- return true;\r
-}\r
-\r
-function Wait_PopupMenuReady() \r
-{\r
- if (gbWndPopupLinks != null && "object" == typeof(gbWndPopupLinks.document)) {\r
- PopupMenu_InvokeReady();\r
- }\r
- else \r
- setTimeout("Wait_PopupMenuReady()", 100);\r
-}\r
-\r
-function PopupMenu_InvokeReady()\r
-{\r
- if (gbWndPopupLinks != null) {\r
- gbWndPopupLinks.document.open("text/html");\r
- gbWndPopupLinks.document.write("<html><head>");\r
- if (gbBsNS2) {\r
- gbWndPopupLinks.document.write("<base href=\"" + location +"\">");\r
- } else {\r
- //YJ: IE301,302 and NS3.x works fine\r
- gbWndPopupLinks.document.write("<");\r
- gbWndPopupLinks.document.write("script>");\r
- gbWndPopupLinks.document.write("function gotoUrl(aUrl) {opener.window.location=aUrl; close();}");\r
- gbWndPopupLinks.document.write("<");\r
- gbWndPopupLinks.document.write("/script>");\r
- }\r
- gbWndPopupLinks.document.write("</head><body onBlur=\'self.focus();\'>");\r
- gbWndPopupLinks.document.write(gbstrParaTotal);\r
- gbWndPopupLinks.document.write("</body></html>");\r
- gbWndPopupLinks.document.close();\r
-\r
- // Close the temporary\r
- if (!gbBsNS3 && gbWndTemp != null) {\r
- gbWndTemp.close();\r
- }else {\r
- gbWndPopupLinks.focus();\r
- }\r
-\r
- return true;\r
- }\r
- return false;\r
-}\r
-\r
-/// Section End - Embedded Stub (JavaScript 1.0)\r
-\r
-//// Segment End -- (JavaScript 1.0)\r
-\r
-//// Segment Begin -- (JavaScript 1.2)\r
-/// Section Begin - kadov DHTM (JavaScript 1.2)\r
-\r
-//Begin to support extended and dropdown text effects.\r
-function kadovIsParagraph(el)\r
-{\r
- return( el.tagName == "P" || el.tagName.indexOf("H") == 0 ) ? true : false;\r
-}\r
-\r
-function kadovInitEachChild(el)\r
-{ \r
- for(var i=0; i<getChildNodes(el).length; i++)\r
- {\r
- var child = getChildNodes(el)[i];\r
- if( child.tagName == "SCRIPT" || child.tagName == "!" )\r
- continue;\r
-\r
- if( child.id != "" )\r
- {\r
- // to wipe out the onload effects\r
- if (gbBsIE4&&!gbBsMac)\r
- {\r
- var onLoadEffect = child.style.getAttribute( "x-on-pageload" );\r
- if( (onLoadEffect != null) && (onLoadEffect > "") )\r
- child.style.setAttribute( "x-on-pageload", "" );\r
- }\r
- \r
- var href = child.getAttribute("href")\r
- if( href != null && href > "" && href.indexOf( "BSSCPopup" ) >= 0 )\r
- kadovFilePopupInit(child.id); // Init for Popup\r
- else if( child.className == "dropspot" || child.className == "expandspot" || \r
- child.className == "glossterm" )\r
- kadovTextPopupInit(child.id);// Init for Expanding/Glossary or DropDown text\r
- else if( child.className == "trigger")\r
- kadovInitTrigger(child.id);// Init for Trigger\r
- else\r
- {\r
- kadovInitEffects(child.id);// Init for DHTML effects\r
- CEngine.SetOneTargetInitialState( child.id );\r
- }\r
- }\r
- \r
- if( (child.tagName == "IMG") && (child.getAttribute("dynsrc") > "") )\r
- child.start = "mouseover";// to start a AVI file. fileopen doesn't work\r
-\r
- kadovInitEachChild(child);\r
- }\r
-}\r
-\r
-function kadovRetrieveTextInner(el)\r
-{ \r
- var x = "";\r
- if( (!el) || (el.tagName == "!") || (el.tagName == "SCRIPT" ))\r
- return x;\r
-\r
- if( kadovIsParagraph(el) )\r
- {\r
- var strNewID = " ";\r
- if( el.id != "" )\r
- strNewID += "id=" + el.id + "_NewSpan ";\r
- x = "<span" + strNewID + "style='" + el.style.cssText + "'>" + el.innerHTML + "</span>";\r
- }\r
- else\r
- {\r
- for(var i=0; i<getChildNodes(el).length; i++)\r
- x += kadovRetrieveTextInner( getChildNodes(el)[i] );\r
- }\r
- return x;\r
-}\r
-\r
-function kadovRetrieveCleanHTML( strRawHTML, strTagOpen, strTagClose, nDistance )\r
-{ \r
- var nTagOpen = strRawHTML.indexOf( strTagOpen, 0 );\r
- if( nTagOpen < 0 )\r
- return strRawHTML;\r
-\r
- var nTagClose = strRawHTML.indexOf( strTagClose, nTagOpen);\r
- if( nTagClose < nTagOpen )\r
- return strRawHTML;\r
- \r
- if( typeof(nDistance) == "number" && nDistance > 0 )\r
- if( (nTagClose - nTagOpen) != nDistance )\r
- return strRawHTML;\r
- \r
- var strCleanOnce = strRawHTML.substring(0, nTagOpen) + strRawHTML.substr(nTagClose + strTagClose.length) ;\r
- return kadovRetrieveCleanHTML( strCleanOnce, strTagOpen, strTagClose );\r
-}\r
-\r
-function kadovAdjustObjectTag(strRawHTML, nStartPos)\r
-{// adjust object tag for related topics HTML control, because innerHTML misses out the item settings\r
- \r
- //Is there any DTC?\r
- var strDTCTagOpen = '<!--Metadata type="DesignerControl" startspan';\r
- var strDTCTagClose = '<!--Metadata type="DesignerControl" endspan-->';\r
- var nDTCTagOpen = strRawHTML.indexOf( strDTCTagOpen, nStartPos );\r
- if( nDTCTagOpen < 0 )\r
- return strRawHTML;\r
- var nDTCTagClose = strRawHTML.indexOf( strDTCTagClose, nDTCTagOpen );\r
- if( nDTCTagClose < nDTCTagOpen)\r
- return strRawHTML; // no Design Time Controls;\r
- \r
- //Is the DTC HTML Help Control?\r
- var strRTObjTagOpen = 'classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11';\r
- var strRTObjTagClose = '</OBJECT>';\r
- var nRTObjTagOpen = strRawHTML.indexOf( strRTObjTagOpen, nDTCTagOpen );\r
- if( nRTObjTagOpen < nDTCTagOpen )\r
- return strRawHTML;\r
- var nRTObjTagClose = strRawHTML.indexOf( strRTObjTagClose, nRTObjTagOpen );\r
- if( nRTObjTagClose < nRTObjTagOpen )\r
- return strRawHTML; // is not a HTML help control\r
- \r
- // Is it a related Topics html help control?\r
- var strRTObjLabel = '<PARAM NAME=\"Command\" VALUE=\"Related Topics';\r
- if( strRawHTML.indexOf(strRTObjLabel, nRTObjTagOpen) < 0 )\r
- return strRawHTML;\r
- \r
- // does the commented object tag contain a items parameters \r
- var strRTItemsOpen = '<param name="Items" value="';\r
- var strRTItemsClose = '$$**$$" >';\r
- var strRTItemsClose2 = '$$**$$">';\r
-\r
- var nRTItemsOpen = strRawHTML.indexOf(strRTItemsOpen, nDTCTagOpen);\r
- if( nRTItemsOpen < nDTCTagOpen )\r
- return strRawHTML;\r
- var nRTItemsClose = strRawHTML.indexOf(strRTItemsClose, nRTItemsOpen);\r
- if (nRTItemsClose == -1)\r
- nRTItemsClose = strRawHTML.indexOf(strRTItemsClose2, nRTItemsOpen);\r
- if( nRTItemsClose < nRTItemsOpen )\r
- return strRawHTML;\r
- \r
- // found a items string\r
- var strItems = strRawHTML.substring( nRTItemsOpen + strRTItemsOpen.length, nRTItemsClose);\r
- if( strItems.length < 1 )\r
- return strRawHTML;\r
- \r
- // to reconstruct the item(s) param tag(s)\r
- var strItemsArray = strItems.split('$$**$$');\r
- if( strItemsArray.length < 1 )\r
- return strRawHTML;\r
- var strRunTimeItemParam = "";\r
- for( var i = 0; i < strItemsArray.length; i++ )\r
- {\r
- strRunTimeItemParam += '<PARAM NAME="Item' + (i+1);\r
- strRunTimeItemParam += '"' + ' VALUE="';\r
- strRunTimeItemParam += strItemsArray[i];\r
- strRunTimeItemParam += '">';\r
- }\r
- \r
- // to insert the reconstructed item params into runtime object tag\r
- var strAdjustedHTML = strRawHTML.substring(0,nRTObjTagClose) + strRunTimeItemParam + strRawHTML.substring(nRTObjTagClose, strRawHTML.length);\r
- return kadovAdjustObjectTag(strAdjustedHTML, nDTCTagClose + strDTCTagClose.length);\r
-}\r
-\r
-function kadovTextPopupOnLoad( el )\r
-{\r
- if( typeof(el) == "string" )\r
- el = getElement(el);\r
-\r
- var src = el.getAttribute( "x-use-popup" );\r
- var bNeedMove=true;\r
- if(!src&&el.id)\r
- {\r
- for (var i=0;i<gPopupData.length;i++)\r
- if (gPopupData[i].el==el.id)\r
- {\r
- src=gPopupData[i].popupId;\r
- bNeedMove=false;\r
- break;\r
- }\r
- }\r
- if(!src)\r
- src = el.style.getAttribute( "x-use-popup" ); \r
- if (!src) \r
- return 0;\r
-\r
- var name = src;\r
- if( src.substr(0,1) == "#" ) \r
- name = src.substr(1, src.length-1);\r
- var srcDiv = getElement(name);\r
- if( !srcDiv )\r
- return 1;\r
-\r
- if (bNeedMove)\r
- {\r
- var type = el.getAttribute( "x-popup-type" );\r
- if (!type)\r
- type = el.style.getAttribute("x-popup-type");\r
- if (!type) \r
- return 1; \r
- var setup = el.getAttribute( "x-tmp-setup" );\r
- var newId = name;\r
- if( newId.indexOf( "_tmp") <= 0 )\r
- newId += "_tmp";\r
-\r
- if( !setup)\r
- {\r
- el.setAttribute( "x-tmp-setup", 1 );\r
-\r
- if( type == "pulldown" )\r
- {\r
- var strAdjust = kadovAdjustObjectTag(srcDiv.innerHTML,0);\r
- var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->");\r
- strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>");\r
- \r
- //work around the bug in HH.exe that highlight the phrases when use Search tab\r
- //this approach is just removing the <FONT...> tag inserted by Microsoft in the runtime\r
- strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<FONT color=#", "\">", 52);\r
- \r
- var strStyle = " style='display:none; position:relative;";\r
- var newDiv = "<div class=droptext id=" + newId + strStyle + "'>" + strCleanHTML + "</div>";\r
-\r
- removeThis(srcDiv); // empty the original DIV tag\r
- var elParentPra = kadovFindParentParagraph(el);\r
- if( elParentPra )\r
- insertAdjacentHTML(elParentPra, "afterEnd", newDiv );\r
- }\r
- else if( type == "expanding" )\r
- {\r
- var inner = kadovRetrieveTextInner(srcDiv);\r
- if( inner == "" )\r
- inner = srcDiv.innerHTML;\r
- var strAdjust = kadovAdjustObjectTag(inner,0);\r
- var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->");\r
- strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>");\r
- var strClassName = (el.className == "glossterm") ? "glosstext" : "expandtext";\r
- var newSpan = "<span class=" + strClassName + " style='display: none;' id=" + newId + "> " + strCleanHTML + "</span>";\r
- removeThis(srcDiv); // empty the original DIV tag\r
- insertAdjacentHTML(el, "afterEnd", newSpan );\r
- }\r
- }\r
- }\r
- else\r
- {\r
- srcDiv.style.display = "none";\r
- }\r
- return 0;\r
-}\r
-\r
-function getElementsByTag(obj,sTagName)\r
-{\r
- if(obj.getElementsByTagName)\r
- return obj.getElementsByTagName(sTagName);\r
- else if(obj.all)\r
- return obj.all.tags(sTagName);\r
- return null;\r
-}\r
-\r
-function getElement(sID)\r
-{\r
- if(document.getElementById)\r
- return document.getElementById(sID);\r
- else if(document.all)\r
- return document.all(sID);\r
- return null;\r
-}\r
-\r
-function getParentNode(obj)\r
-{\r
- if(obj.parentNode)\r
- return obj.parentNode;\r
- else if(obj.parentElement)\r
- return obj.parentElement;\r
- return null;\r
-}\r
-\r
-function getChildNodes(obj)\r
-{\r
- if(obj.childNodes)\r
- {\r
- var children = new Array();\r
- for (var i = 0; i < obj.childNodes.length; i++)\r
- {\r
- if (obj.childNodes[i].nodeType == 1)\r
- children[children.length] = obj.childNodes[i];\r
- }\r
- return children;\r
- }\r
- else if(obj.children)\r
- return obj.children;\r
- return null; \r
-}\r
-\r
-function removeThis(obj)\r
-{\r
- if(obj.parentNode)\r
- obj.parentNode.removeChild(obj);\r
- else\r
- obj.outerHTML="";\r
-}\r
-\r
-function kadovTextPopup( el )\r
-{\r
- if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3 )\r
- return;\r
-\r
- var bNeedMove=true;\r
- \r
- if (window.event)\r
- window.event.cancelBubble = true;\r
-\r
- if( typeof(el) == "string" )\r
- el = getElement(el);\r
-\r
- if (!el||el==window)\r
- return;\r
- \r
- var src = el.getAttribute( "x-use-popup" );\r
- if(!src&&el.id)\r
- {\r
- for (var i=0;i<gPopupData.length;i++)\r
- if (gPopupData[i].el==el.id)\r
- {\r
- src=gPopupData[i].popupId;\r
- bNeedMove=false;\r
- break;\r
- }\r
- }\r
- if(!src)\r
- src = el.style.getAttribute( "x-use-popup" ); \r
- if(!src)\r
- return;\r
- \r
- var name = src;\r
- if( src.substr(0,1) == "#" ) \r
- if (bNeedMove)\r
- name = src.substr(1, src.length-1) + "_tmp";\r
- else\r
- name = src.substr(1, src.length-1);\r
-\r
- var srcDiv = getElement(name);\r
- if( !srcDiv )\r
- return;\r
-\r
- if( srcDiv )\r
- {\r
- if( srcDiv.style.display == "" )\r
- srcDiv.style.display = "none";\r
- else\r
- {\r
- srcDiv.style.display = "";\r
- if( typeof(srcDiv.bInitialized) == "undefined" )\r
- {\r
- srcDiv.bInitialized = true;\r
- kadovInitEffects(name);\r
- kadovInitEachChild(srcDiv);\r
- }\r
- }\r
- }\r
- if(gbBsIE4)\r
- event.returnValue=false;\r
- return;\r
-}\r
-\r
-function kadovFindParentParagraph( el )\r
-{\r
- if( typeof(el) == "string" )\r
- el = getElement(el);\r
- if( (!el) || el.tagName == "BODY" )\r
- return null;\r
- if( kadovIsParagraph(getParentNode(el)) )\r
- return getParentNode(el);\r
- else\r
- return kadovFindParentParagraph( getParentNode(el) );\r
-}\r
-\r
-//Begin HTML code invoked function\r
-function kadovRegisterEventHandler( obj, strEvent, strEventHandler )\r
-{\r
- if( !gbBsIE4 )\r
- return;\r
- CCSSP.RegisterEventHandler( obj, strEvent, strEventHandler );\r
-}\r
-\r
-function textPopupData(el, popupId)\r
-{\r
- this.el = el;\r
- this.popupId = "#"+popupId;\r
-}\r
-\r
-var gPopupData = new Array();\r
-\r
-function kadovTextPopupInit( el, popupId)\r
-{\r
- if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3)\r
- return;\r
- \r
- if( typeof(el) == "string" )\r
- {\r
- if (popupId)\r
- {\r
- gPopupData[gPopupData.length]=new textPopupData(el, popupId);\r
- }\r
- el = getElement(el);\r
- }\r
- \r
- if( el != null )\r
- {\r
- CCSSP.RegisterEventHandler( el, "onclick", "kadovTextPopup(\"" + el.id +"\");" );\r
- CCSSP.RegisterEventHandler( window, "onload", "kadovTextPopupOnLoad(\"" + el.id +"\");" );\r
- }\r
-}\r
-//End HTML code invoked function\r
-\r
-//End to support extended and dropdown text effects.\r
-\r
-//Begin to convert iWrite format to RoboEditor Format for DHTML effects\r
-function kadovInitTriggersInHead( )\r
-{\r
- if( Object.xDelayedInitElements )\r
- {\r
- var x = Object.xDelayedInitElements;\r
- for(i=0; i<x.length; i++)\r
- kadovInitTrigger( x[i] );\r
- }\r
-}\r
-\r
-//Begin HTML code invoked function\r
-function kadovFilePopupInit( el )\r
-{\r
- if( typeof(el) == "string" )\r
- el = getElement(el);\r
-\r
- if( el != null )\r
- CCSSP.RegisterEventHandler( el, "onmouseover", "BSPSPopupOnMouseOver(event);" );\r
-}\r
-\r
-function kadovInitTrigger( element )\r
-{\r
- if( !gbBsIE4 )\r
- return;\r
- var srcElement = element;\r
- if( typeof(srcElement) == "string" )\r
- {\r
- srcElement = getElement(element,0);\r
- if(srcElement == null)\r
- return;\r
- }\r
- \r
- if( !kadovIsParentVisible(srcElement) )\r
- return;\r
-\r
- var targets = srcElement.getAttribute( "x-targets" );\r
- if (!targets)\r
- targets = srcElement.style.getAttribute("x-targets");\r
- if (!targets)\r
- return; \r
- var arrOneTarget = targets.split( "," );\r
- for( var i = 0; i < arrOneTarget.length; i ++ )\r
- bsscFXInit( element, arrOneTarget[i], null, null, null, null );\r
-}\r
-\r
-function kadovIsParentVisible( el )\r
-{\r
- if( typeof(el) == "string" )\r
- el = getElement(el);\r
- if( (!el) || el.tagName == "BODY" )\r
- return true;\r
- if( el.style.display == 'none' ) //el.visibility == 'hidden' || \r
- return false;\r
- else\r
- return kadovIsParentVisible( getParentNode(el) );\r
-}\r
-\r
-function kadovInitEffects( element )\r
-{\r
- if( !gbBsIE4 )\r
- return;\r
- var srcElement = element;\r
- if( typeof(srcElement) == "string" )\r
- {\r
- srcElement = getElement(element,0);\r
- if(srcElement == null)\r
- return;\r
- }\r
- \r
- if( !kadovIsParentVisible(srcElement) )\r
- return;\r
- \r
- kadovInitEffect( srcElement, "x-on-hover" );\r
- kadovInitEffect( srcElement, "x-on-pageclick" );\r
- kadovInitEffect( srcElement, "x-on-pageload" );\r
- kadovInitEffect( srcElement, "x-on-trigger-1" );\r
- kadovInitEffect( srcElement, "x-on-trigger-2" );\r
-}\r
-//End HTML code invoked function\r
-\r
-function kadovInitEffect( element, prop )\r
-{\r
- var values = null;\r
- if( element.getAttribute( "currentStyle" ) && element.currentStyle.getAttribute)\r
- values = element.currentStyle.getAttribute( prop );\r
- else if (element.style.getAttribute)\r
- values = element.style.getAttribute( prop );\r
- if( !values )\r
- return;\r
-\r
- var functions = new Array();\r
- var nIdx = 0, nStart = 0;\r
- var nNext = values.indexOf( "\)", 0);\r
- while( nNext >= 0 && nNext < values.length )\r
- {\r
- functions[nIdx] = values.substr( nStart, nNext-nStart+1);\r
- nStart = nNext + 1;\r
- nIdx++;\r
- nNext = values.indexOf( "\)", nStart);\r
- }\r
- \r
- for( var i=0; i<functions.length; i++)\r
- {\r
- var id = element.getAttribute( "id" );\r
- var translatedProp = kadovTranslateProp(prop);\r
-\r
- var lp = functions[i].indexOf( "(" );\r
- var fnname = functions[i].substring(0, lp);\r
- var srcargs = functions[i].substring(lp+1, functions[i].length-1);\r
- \r
- var nClickTimes = 1;\r
- var arrForClickCount = srcargs.split( "," );\r
- for( var j = 0; j < arrForClickCount.length; j++ )\r
- {// to locate and get the "clicks=99" settings\r
- var nPageClick = arrForClickCount[j].indexOf("clicks");\r
- if( nPageClick >= 0 )\r
- {\r
- nPageClick = arrForClickCount[j].indexOf("=");\r
- if( nPageClick > 0 )\r
- {\r
- nClickTimes = arrForClickCount[j].substring( nPageClick + 1, arrForClickCount[j].length) * 1;\r
- break;\r
- }\r
- }\r
- }\r
- var args = srcargs;\r
- if( j < arrForClickCount.length )\r
- {// to strip out the "clicks=99" from the arguments string\r
- args = "";\r
- for( var k = 0; k < arrForClickCount.length; k ++ )\r
- {\r
- if( k != j )\r
- {\r
- args += arrForClickCount[k];\r
- if( k < arrForClickCount.length - 1 )\r
- args += ",";\r
- }\r
- }\r
- }\r
- bsscFXInit( null, id, translatedProp, fnname, args, nClickTimes );\r
- }\r
-}\r
-\r
-function kadovTranslateProp( prop )\r
-{\r
- switch( prop )\r
- {\r
- case "x-on-hover" : return "bsschover";\r
- case "x-on-pageclick" : return "bsscpageclick";\r
- case "x-on-pageload" : return "bsscpageload";\r
- case "x-on-trigger-1" : return "bssctrigger1";\r
- case "x-on-trigger-2" : return "bssctrigger2";\r
- }\r
- return null;\r
-}\r
-//End to convert iWrite format to RoboEditor Format for DHTML effects\r
-\r
-//Begin the definition of one entry to DHTML effects\r
-function bsscFXInit( trigger_ID, target_ID, event_type, \r
- action_type, action_setting, event_addional )\r
-{\r
- if( (!gbBsWindows && !gbBsSunOS && !(gbBsMac&&gbBsIE5)) || typeof(target_ID) != "string" )//MUST have a target_ID\r
- return; // we don't support Navigator yet\r
- \r
- if( typeof(event_type) == "string" )\r
- event_type = event_type.toLowerCase();\r
- if( typeof(action_type) == "string" )\r
- action_type = action_type.toLowerCase();\r
- if( typeof(action_setting) == "string" )\r
- action_setting = action_setting.toLowerCase();\r
- \r
- // to get the target element then add it to the target list\r
- var eleTarget = CCSSP.GetObject( target_ID );\r
- if( (eleTarget != null) && (event_type != null) && (action_type != null) )\r
- {\r
- CEngine.AddOneTarget( target_ID, eleTarget );\r
- CEngine.BuildTargetObject(target_ID, event_type, action_type, action_setting, event_addional);\r
- }\r
- \r
- // to validate the trigger_ID parameter\r
- if( typeof(trigger_ID) == "string" && trigger_ID != "" )\r
- CEngine.BuildTriggerObject( trigger_ID, target_ID );\r
-} \r
-//End the definition of one entry to DHTML effects\r
-\r
-/// Section End - kadov DHTM (JavaScript 1.2)\r
-\r
-/// Section Begin - CCSSP DHTM (JavaScript 1.2)\r
-\r
-//Begin JavaScript libary for cross-platform positioning object.\r
-function CCSSP(){} // constructor of CCSSP class\r
-\r
-CCSSP.GetObject = function( obj )\r
-{//convert object name string or reference into a valid object reference\r
- if( typeof(obj) == "object" )\r
- return obj;\r
- else if( typeof(obj) == "string" && obj != "")\r
- {\r
- if( gbBsNS4 )\r
- return eval("document." + obj);\r
- else\r
- return eval("document.all(\"" + obj + "\")");\r
- }\r
- else\r
- return null;\r
-}\r
-\r
-CCSSP.MoveObjectTo = function(obj, x, y)\r
-{//positioning an object at a specific pixel coordinate\r
- if( gbBsNS4 )\r
- obj.moveTo(x,y);\r
- else\r
- {\r
- obj.style.pixelLeft = x;\r
- obj.style.pixelTop = y;\r
- }\r
-}\r
-\r
-CCSSP.MoveObjectBy = function(obj, dx, dy)\r
-{//moveing a object by x and/or y pixel\r
- if( gbBsNS4 )\r
- obj.moveBy(dx,dy);\r
- else\r
- {\r
- obj.style.pixelLeft += dx;\r
- obj.style.pixelTop += dy;\r
- }\r
-}\r
-\r
-CCSSP.SetObjectBGColor = function(obj, color)\r
-{//set the background color of an object\r
- if( gbBsNS4 )\r
- obj.bgColor = color;\r
- else\r
- obj.style.backgroundColor = color;\r
-}\r
-\r
-CCSSP.ShowObject = function(obj, bShow)\r
-{// set the object to be visible or invisible\r
- if( gbBsNS4 )\r
- obj.visibility = (bShow == true) ? 'show' : 'hide';\r
- else\r
- obj.style.visibility = (bShow == true) ? 'visible' : 'hidden';// when hidden, it still occupy some space.\r
-}\r
-\r
-CCSSP.GetObjectLeft = function(obj)\r
-{// retrieve the x coordinate of a posionable object\r
- if( gbBsNS4 )\r
- return obj.left;\r
- else\r
- return obj.style.pixelLeft;\r
-}\r
-\r
-CCSSP.GetObjectTop = function(obj)\r
-{// retrieve the y coordinate of a posionable object\r
- if( gbBsNS4 )\r
- return obj.top;\r
- else\r
- return obj.style.pixelTop;\r
-}\r
-\r
-CCSSP.GetObjectContainLeft = function(obj)\r
-{// retrieve the x coordinate of a posionable object relative to it's parent element\r
- if( gbBsNS4 )\r
- return obj.pageX;\r
- else\r
- {\r
- if( obj == document.body )\r
- return obj.clientLeft;\r
- else\r
- return obj.offsetLeft;\r
- }\r
-}\r
-\r
-CCSSP.GetObjectWindowLeft = function(obj)\r
-{// retrieve the x coordinate of a posionable object relative to browser window\r
- if( gbBsNS4 )\r
- return obj.pageX;\r
- else\r
- {\r
- var nOffsetWindowLeft = 0;\r
- for(var element = obj; element; element = element.offsetParent)\r
- nOffsetWindowLeft += CCSSP.GetObjectContainLeft(element);\r
- return nOffsetWindowLeft;\r
- }\r
-}\r
-\r
-CCSSP.GetObjectContainTop = function(obj)\r
-{// retrieve the y coordinate of a posionable object relative to it's parent element\r
- if( gbBsNS4 )\r
- return obj.pageY;\r
- else\r
- {\r
- if( obj == document.body )\r
- return obj.clientTop;\r
- else\r
- return obj.offsetTop;\r
- }\r
-}\r
-\r
-CCSSP.GetObjectWindowTop = function(obj)\r
-{// retrieve the y coordinate of a posionable object relative to browser window\r
- if( gbBsNS4 )\r
- return obj.pageY;\r
- else\r
- {\r
- var nOffsetWindowTop = 0;\r
- for(var element = obj; element; element = element.offsetParent)\r
- nOffsetWindowTop += CCSSP.GetObjectContainTop(element);\r
- return nOffsetWindowTop;\r
- }\r
-}\r
-\r
-CCSSP.GetObjectHeight = function(obj)\r
-{// retrieve the height of a posionable object\r
- if( gbBsNS4 )\r
- return obj.clip.height;\r
- else\r
- return obj.offsetHeight;\r
-}\r
-\r
-CCSSP.GetObjectWidth = function(obj)\r
-{// retrieve the width of a posionable object\r
- if( gbBsNS4 )\r
- return obj.clip.width;\r
- else\r
- return obj.offsetWidth;\r
-}\r
-\r
-CCSSP.RegisterEventHandler = function( srcObj, rawEventName, funcHandler )\r
-{ // to add the "funcHandler" as the "rawEventName" 's handler to the "srcObj" object,the original event handler will be combined\r
- if (gbBsNS4 && !gbBsNS6)\r
- return ;\r
- \r
- var oldHandler = "";\r
-\r
- if (gbBsMac &&gbBsIE4&&!gbBsIE5)\r
- {\r
- if (typeof(srcObj[rawEventName.toLowerCase()])=="unknown")\r
- { //search for <SCRIPT> tag which define the event handler\r
- for( var i = 0; i < document.scripts.length; i++ ) \r
- {\r
- var script = document.scripts[i];\r
- if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )\r
- {\r
- oldHandler = script.innerHTML;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- else\r
- {\r
- var oldInlineHandler = srcObj[rawEventName.toLowerCase()];\r
- if( oldInlineHandler != null && typeof(oldInlineHandler) != "undefined")\r
- {\r
- var functionDefinition = oldInlineHandler.toString();\r
- var bodyStart = functionDefinition.indexOf( "{" );\r
- var bodyEnd = functionDefinition.lastIndexOf( "}" );\r
- if( bodyStart > 0 || bodyEnd > bodyStart )\r
- oldHandler = functionDefinition.substr( bodyStart + 1, bodyEnd - bodyStart - 2 );\r
- }\r
- else if( gbBsIE4 )\r
- { //search for <SCRIPT> tag which define the event handler\r
- for( var i = 0; i < document.scripts.length; i++ ) \r
- {\r
- var script = document.scripts[i];\r
- if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )\r
- {\r
- oldHandler = script.innerHTML;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- if( oldHandler.indexOf(funcHandler) >= 0 )\r
- return;// to prevent register the funtion twice.\r
-\r
- if( gbBsNS4 ) // only "onload, onresize, onfocus" apply to window\r
- {// other raw events will apply to layer\r
- var noOn = rawEventName.substring(2, rawEventName.length);\r
- if( typeof(noOn) == "string" && noOn.length > 3 ) {\r
- if (srcObj.captureEvents)\r
- srcObj.captureEvents( Event[noOn.toUpperCase()] );\r
- }\r
- }\r
- \r
- var newHandler = oldHandler;\r
- if( newHandler.length == 0 )\r
- newHandler = funcHandler;\r
- else\r
- newHandler += "; " + funcHandler;\r
- \r
- srcObj[rawEventName.toLowerCase()] = new Function( newHandler );\r
-}\r
-\r
-CCSSP.GetWindowHeight = function()\r
-{// retrieve the height of available content in browser window\r
- if( gbBsNS4 )\r
- return window.innerHeight;\r
- else\r
- return document.body.clientHeight;\r
-}\r
-\r
-CCSSP.GetWindowBottom = function()\r
-{// retrieve the bottom postion of browser window\r
- if( gbBsNS4 )\r
- return window.outerHeight + window.pageYOffset;\r
- else\r
- return document.body.clientHeight + document.body.scrollTop;\r
-}\r
-\r
-CCSSP.GetWindowWidth = function()\r
-{// retrieve the width of available content in browser window\r
- if( gbBsNS4 )\r
- return window.innerWidth;\r
- else\r
- return document.body.clientWidth;\r
-}\r
-\r
-CCSSP.GetWindowRight = function()\r
-{// retrieve the right postion of browser window\r
- if( gbBsNS4 )\r
- return window.outerWidth + window.pageXOffset;\r
- else\r
- return document.body.clientWidth + document.body.scrollLeft;\r
-}\r
-\r
-CCSSP.TrimString = function( objString, subtrim )\r
-{// to trim the "subtrim" in the beginning and ending of a string object\r
- if( typeof(subtrim) != "string" || subtrim == null )\r
- return objString;\r
- var strHead = objString.substring(0, 1);\r
- var strRear = objString.substring(objString.length-1, objString.length);\r
- if( strHead != subtrim && strRear != subtrim )\r
- return objString;\r
- \r
- var spacePos = objString.indexOf(subtrim);\r
- if( spacePos < 0 )\r
- return objString;\r
- else if( spacePos == objString.length - 1 )\r
- return objString.substring(0, spacePos);\r
- else\r
- {\r
- var newString = objString.substring( spacePos + 1, objString.length);\r
- return CCSSP.TrimString( newString, subtrim );\r
- }\r
-}\r
-\r
-CCSSP.TrimSpace = function( objString )\r
-{\r
- var Trim1 = CCSSP.TrimString( objString, " ");\r
- return CCSSP.TrimString( Trim1, "\'");\r
-}\r
-\r
-CCSSP.GetEventElement = function( navEventObject )\r
-{// to get the element who fired the current event\r
- if(gbBsNS4) \r
- if (gbBsNS6)\r
- return null;\r
- else\r
- navEventObject.target;\r
- else\r
- return event.srcElement;\r
-}\r
-\r
-CCSSP.PrepareFilter = function( Obj )\r
-{//to prepare for making the filter work\r
- Obj.style.filter = "";\r
- if( Obj.style.width != "" || Obj.style.height != "" || Obj.style.position == "absolute" )\r
- return;\r
- Obj.style.height = CCSSP.GetObjectHeight(Obj);\r
-}\r
-\r
-CCSSP.IsDescendant = function( progenitor, progeny )\r
-{\r
- if( typeof(progeny) == "undefined" || progeny == null )\r
- return false;\r
- else if( progeny == progenitor )\r
- return true; \r
- else if( progeny.id == progenitor.id ) \r
- return true; \r
- else if( getParentNode(progeny) == getParentNode(progenitor))\r
- return false;\r
- else\r
- return CCSSP.IsDescendant( progenitor, getParentNode(progeny));\r
-}\r
-\r
-CCSSP.IsTextTag = function( Obj )\r
-{\r
- if( typeof( Obj.tagName ) == "undefined" )\r
- return false;\r
- return( Obj.tagName.indexOf("H") == 0 || Obj.tagName == "P" || \r
- Obj.tagName == "FONT" || Obj.tagName == "SPAN" );\r
-}\r
-\r
-//End JavaScript libary for cross-platform positioning object.\r
-\r
-/// Section End - CCSSP DHTM (JavaScript 1.2)\r
-\r
-/// Section Begin - CCSSP DHTM 1 (JavaScript 1.2)\r
-\r
-//Begin the definition of class CTrigger\r
-function CTrigger( TriggerElement )\r
-{\r
- // object : the trigger element. Never be null. \r
- this.eleTrigger = TriggerElement;\r
- \r
- // number : the click counter number: only 3 values: 0,1,2;\r
- this.nCounter = 0; \r
- \r
- //object as associative array of string:\r
- // the associate target ID strings; one element at least. \r
- this.objStrTarget = new Object();\r
- this.eleTrigger.style.cursor = "hand";\r
- if( this.eleTrigger.tagName == "AREA" && this.eleTrigger.getAttribute("href") == "" )\r
- this.eleTrigger.setAttribute("href", "#") // to make a hand cursor for image map\r
-}\r
-\r
-CTrigger.prototype.AddTargetID = function( strTargetID )\r
-{// add one target ID string to the objStrTarget\r
- if( typeof(strTargetID) != "string" )\r
- return ;\r
- if( typeof(this.objStrTarget[strTargetID]) != "string" )\r
- this.objStrTarget[strTargetID] = strTargetID;\r
-}\r
-\r
-CTrigger.prototype.OnTriggerClick = function()\r
-{// to activate all asociated target\r
- var strEventType = ( (this.nCounter++)% 2 == 0 ) ? \r
- "bssctrigger1" : "bssctrigger2";\r
- \r
- // to enumerate associative target element's ID string\r
- for( var strTargetID in this.objStrTarget ) \r
- CEngine.SendEventToOneTarget( strTargetID, strEventType );\r
-}\r
-//End the definition of class CTrigger\r
-\r
-//Begin the definition of class CTarget\r
-function CTarget( TargetElement )\r
-{\r
- // object : the target element. Never be null.\r
- this.eleTarget = TargetElement;\r
- this.objManager = new Object(); // object: the event manager\r
-} \r
-\r
-CTarget.nPageClickCounter = 0;// static class property.\r
-\r
-CTarget.prototype.GetAgencyObject = function(str_action_type,action_setting )\r
-{// return the action agency ( effect )object's refernece \r
- switch( str_action_type )\r
- {\r
- case "show":return new CAgencyShow( this.eleTarget, true ) ;\r
- case "hide":return new CAgencyShow( this.eleTarget, false ) ;\r
-\r
- case "flyin" : \r
- return new CAgencyFly(this.eleTarget, action_setting, true);\r
- case "flyout" : \r
- return new CAgencyFly(this.eleTarget, action_setting, false);\r
- case "spiralin" : \r
- return new CAgencySpiral(this.eleTarget, action_setting, true);\r
- case "spiralout" : \r
- return new CAgencySpiral(this.eleTarget, action_setting, false);\r
- case "zoomin" :\r
- return new CAgencyZoom(this.eleTarget, action_setting, true);\r
- case "zoomout" : \r
- return new CAgencyZoom(this.eleTarget, action_setting, false);\r
- case "elastic" : \r
- return new CAgencyElastic(this.eleTarget, action_setting);\r
- \r
- case "fadein" : \r
- return (gbBsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, true) : null;\r
- case "fadeout" :\r
- return (gbBsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, false) : null;\r
- case "rockrollstatic" :\r
- case "rockroll" :\r
- return (gbBsIE4)? new CAgencyWave(this.eleTarget, action_setting, false) : null;\r
- \r
- case "glow":\r
- return (gbBsIE4)? new CAgencyGlow(this.eleTarget,action_setting) : null;\r
- case "dropshadow":\r
- return (gbBsIE4)? new CAgencyDropShadow(this.eleTarget,action_setting) : null;\r
- case "transition" :\r
- return (gbBsIE4)? new CAgencyRevealTrans(this.eleTarget,action_setting) : null;\r
- case "blur" :\r
- return (gbBsIE4)? new CAgencyBlur(this.eleTarget,action_setting) : null;\r
-\r
- case "fliph" : // all these 4 do NOT need any parameters\r
- case "flipv" :\r
- case "invert":\r
- case "gray" :\r
- return (gbBsIE4)? new CAgencyChangeFilter(this.eleTarget, str_action_type) : null;\r
- \r
- case "fontchange": // the effects below change the style on the fly, so won't work in Navigator\r
- return (gbBsIE4)? new CAgencyFontChange(this.eleTarget,action_setting) : null;\r
- case "boderchange": \r
- case "stylechange":\r
- return (gbBsIE4)? new CAgencyChangeStyle(this.eleTarget,action_setting) : null;\r
-\r
- default: return null;\r
- }\r
-}\r
-\r
-CTarget.prototype.SetEventManager = function( \r
- one_event_type,str_action_type,action_setting,event_additional)\r
-{// to set the event manager with specified action \r
- if( typeof( one_event_type ) != "string" || \r
- typeof( str_action_type ) != "string"||\r
- typeof( action_setting ) != "string" )\r
- return false;\r
- if( typeof(this.objManager[one_event_type]) == "undefined" )\r
- {\r
- this.objManager[one_event_type] = new Object();\r
- this.objManager[one_event_type].length = 0;\r
- }\r
- \r
- var eventAgency = this.GetAgencyObject(str_action_type,action_setting);\r
- if( eventAgency != null )\r
- {\r
- var ct = this.objManager[one_event_type].length ++;\r
- this.objManager[one_event_type][ct] = eventAgency;\r
- \r
- if( one_event_type == "bsscpageclick" )\r
- {// to deal with the "number of pageclick" stuff\r
- if( typeof(event_additional) == "number" )\r
- this.objManager[one_event_type][ct].nPageClick = event_additional;\r
- else // set the default number \r
- this.objManager[one_event_type][ct].nPageClick = 1;\r
- \r
- if( (typeof(this.objManager.nMinPageClickIndex) == "undefined") ||\r
- (this.objManager[one_event_type][ct].nPageClick < \r
- this.objManager[one_event_type][this.objManager.nMinPageClickIndex].nPageClick) )\r
- this.objManager.nMinPageClickIndex = ct;\r
- }\r
- \r
- //hide the object blindly,SetState function will take care of the final correct state\r
- if( ((one_event_type == "bsscpageclick") && \r
- (this.objManager[one_event_type][ct].nPageClick == 1)) ||\r
- one_event_type == "bsscpageload" ||\r
- one_event_type == "bssctrigger1" )\r
- CCSSP.ShowObject( this.eleTarget, false );\r
- \r
- if( one_event_type == "bssctrigger1" || one_event_type == "bssctrigger2" )\r
- if( typeof( this.strTriggerEvent ) == "undefined" )\r
- this.strTriggerEvent = ( one_event_type == "bssctrigger1" ) ? "bssctrigger2" : "bssctrigger1";\r
- \r
- return true;\r
- }\r
- return false;\r
-}\r
-\r
-CTarget.prototype.OnEvent = function( strBsscEvent )\r
-{// response to the event ( bssc format )\r
- if( typeof(this.objManager[strBsscEvent]) == "object" )\r
- { // to get the event agency from the event manager\r
- var eventAgency = this.objManager[strBsscEvent];\r
- for( var i = 0; i < eventAgency.length; i++ )\r
- {\r
- if( strBsscEvent == "bsscpageclick" && \r
- eventAgency[i].nPageClick != CTarget.nPageClickCounter )\r
- continue;\r
- else if( strBsscEvent == "bsschover" && event.type == "mouseout" )\r
- eventAgency[i].EndEffect();\r
- else // to invoke the unified function in effect object \r
- eventAgency[i].UpdateEffect(); \r
- }\r
- }\r
-}\r
-\r
-CTarget.prototype.SetState = function( strBsscEvent )\r
-{\r
- if( typeof(this.objManager[strBsscEvent]) != "object" )\r
- return false;\r
-\r
- // to get the event agency from the event manager\r
- var eventAgency = this.objManager[strBsscEvent];\r
- \r
- if( strBsscEvent == "bsscpageclick" )\r
- {// we only set the initial state for the minium number of pageclick \r
- eventAgency[this.objManager.nMinPageClickIndex].PrepareEffect();\r
- return true;\r
- }\r
- else\r
- {\r
- for( var i = 0; i < eventAgency.length; i++ )\r
- eventAgency[i].PrepareEffect(); // to invoke the unified function in effect object \r
- if( i > 0 )\r
- return true;\r
- else\r
- return false;\r
- }\r
-}\r
-//End the definition of class CTarget\r
-\r
-//Begin the definition of CEngine class\r
-function CEngine(){}// all properities are going be "class" properities\r
-\r
-// object : as associative array of trigger objects\r
-CEngine.objTrigger = new Object();\r
-// object : as associative array of target objects \r
-CEngine.objTarget = new Object(); \r
-\r
-// Array : each element is a CAgencyXXX animation object\r
-CEngine.arrAnimation = new Array();\r
-CEngine.PerformAnimation = function( nIndex )\r
-{// animation : update effects function\r
- CEngine.arrAnimation[nIndex].UpdateEffect();\r
-}\r
-\r
-CEngine.AddOneTrigger = function(TriggerID,TriggerElement)\r
-{// add one Trigger object into the trigger array\r
- if( typeof(TriggerID) != "string" || TriggerElement == null ||\r
- typeof(TriggerElement) != "object" )\r
- return;\r
- if( typeof(CEngine.objTrigger[TriggerID] ) != "object" )\r
- CEngine.objTrigger[TriggerID] = new CTrigger(TriggerElement);\r
-}\r
- \r
-CEngine.AddOneTarget = function(TargetID, TargetElement)\r
-{// add one Target object into the target array\r
- if( typeof(TargetID) != "string" || TargetElement == null ||\r
- typeof(TargetElement) != "object" )\r
- return;\r
- if( typeof(CEngine.objTarget[TargetID]) != "object" )\r
- CEngine.objTarget[TargetID] = new CTarget( TargetElement );\r
-}\r
-\r
-CEngine.SendEventToOneTarget = function(strTargetID, strBsscEvent )\r
-{// to activate one target object\r
- if( typeof(CEngine.objTarget[strTargetID]) == "object" ) \r
- {\r
- if( strBsscEvent == "bssctrigger1" || strBsscEvent == "bssctrigger2" )\r
- {//now, the "bssctrigger1" and "bssctrigger2" work like a toggle\r
- if( strBsscEvent == CEngine.objTarget[strTargetID].strTriggerEvent )\r
- strBsscEvent = (strBsscEvent == "bssctrigger1") ? "bssctrigger2" : "bssctrigger1";\r
- CEngine.objTarget[strTargetID].strTriggerEvent = strBsscEvent;\r
- }\r
- CEngine.objTarget[strTargetID].OnEvent( strBsscEvent );\r
- }\r
-}\r
-\r
-CEngine.SendEventToAllTarget = function( strBsscEvent )\r
-{ //to activate all target associative to the BSSC event\r
- for( var strTargetID in CEngine.objTarget ) //to enumerate all target\r
- CEngine.SendEventToOneTarget( strTargetID, strBsscEvent );\r
-}\r
-\r
-CEngine.SetOneTargetInitialState = function( strTargetID )\r
-{// only invoked after ALL effects for the target have been set\r
- if( typeof(CEngine.objTarget[strTargetID]) == "object" ) \r
- {// to get target object\r
- var objTarget = CEngine.objTarget[strTargetID];\r
- if( objTarget.SetState( "bsscpageload" ) == false )\r
- {\r
- objTarget.SetState( "bsscpageclick" );\r
- objTarget.SetState( "bssctrigger1" );\r
- }\r
- }\r
-}\r
-\r
-CEngine.AdjustPageClickCounter = function()\r
-{\r
- var nAdjustedClickCounter = CTarget.nPageClickCounter;\r
- var bAdjusted = false;\r
- for( var strTargetID in CEngine.objTarget ) //to enumerate all target\r
- {// try to find the minum pageCliclConter greater than CTarget.nPageClickCounter\r
- var objEventPageClick = CEngine.objTarget[strTargetID].objManager.bsscpageclick;\r
- if( objEventPageClick != null )\r
- {\r
- for( var i = 0; i < objEventPageClick.length; i++ )\r
- {\r
- var nOtherPageClick = objEventPageClick[i].nPageClick;\r
- if( nOtherPageClick == CTarget.nPageClickCounter )\r
- return;\r
- if( nOtherPageClick > CTarget.nPageClickCounter )\r
- {\r
- if( !bAdjusted )\r
- {\r
- nAdjustedClickCounter = nOtherPageClick;\r
- bAdjusted = true;\r
- }\r
- else if( nOtherPageClick < nAdjustedClickCounter )\r
- nAdjustedClickCounter = nOtherPageClick;\r
- }\r
- }\r
- }\r
- }\r
- CTarget.nPageClickCounter = nAdjustedClickCounter;\r
-}\r
-\r
-CEngine.OnPageLoad = function()\r
-{ \r
- // first, to set all target's initial state\r
- for( var strTargetID in CEngine.objTarget )\r
- CEngine.SetOneTargetInitialState( strTargetID );\r
- \r
- // to invoke all target's onpageload handler\r
- CEngine.SendEventToAllTarget( "bsscpageload" );\r
-}\r
-\r
-CEngine.OnPageClick = function()\r
-{ // to invoke all target's onpageclick handler\r
- var src = CCSSP.GetEventElement( arguments[0] );\r
- if( src == null )\r
- return;\r
- \r
- var objClickedTrigger = null;\r
- for( var strTriggerID in CEngine.objTrigger )\r
- { // to detect which trigger is clicked\r
- if( CCSSP.IsDescendant( CEngine.objTrigger[strTriggerID].eleTrigger,src) )\r
- {\r
- objClickedTrigger = CEngine.objTrigger[strTriggerID];\r
- break;\r
- }\r
- }\r
- \r
- if( objClickedTrigger != null) // the clicked trigger found\r
- objClickedTrigger.OnTriggerClick();\r
- else // no trigger is clicked\r
- { // to send PageClick event to all target\r
- CTarget.nPageClickCounter++;\r
- CEngine.AdjustPageClickCounter();\r
- CEngine.SendEventToAllTarget( "bsscpageclick" );\r
- }\r
-} \r
-\r
-CEngine.OnMouseOver = function()\r
-{ // to invoke all target's onpageload handler\r
- var src = CCSSP.GetEventElement( arguments[0] );\r
- if( src == null )\r
- return;\r
- \r
- var strHoveredTargetID = null;\r
- for( var strTargetID in CEngine.objTarget )\r
- { // to detect which Target is hovering on\r
- if( CCSSP.IsDescendant( CEngine.objTarget[strTargetID].eleTarget, src ) )\r
- {\r
- strHoveredTargetID = strTargetID;\r
- break;\r
- }\r
- }\r
- \r
- if( strHoveredTargetID != null ) // the hovered target found\r
- CEngine.SendEventToOneTarget( strHoveredTargetID, "bsschover" );\r
-}\r
-\r
-CEngine.BuildTargetObject = function(target_ID,event_type,action_type,\r
- action_setting, event_additional)\r
-{// to build target object \r
- // to get the target object\r
- if( typeof( CEngine.objTarget[target_ID] ) != "object" )\r
- return false;// the engine's AddOneTarget function might have failed.\r
- var TargetObject = CEngine.objTarget[target_ID];\r
- \r
- // to prepare the parameters for the event manager\r
- var arrEvent = event_type.split("|"); // to split the combined event_type string\r
- var arrAction = action_type.split("|");//to split the combined action_type string\r
- for( var trim = 0; trim < arrEvent.length; trim++ )\r
- arrEvent[trim] = CCSSP.TrimSpace(arrEvent[trim]);\r
- \r
- for( trim = 0; trim < arrAction.length; trim++ )\r
- arrAction[trim] = CCSSP.TrimSpace(arrAction[trim]);\r
- \r
- var arrSetting = new Array(); \r
- if( typeof(action_setting) == "string" )\r
- arrSetting = action_setting.split("|");// to split the combined action_setting string\r
- // to calibrate the arrays\r
- for( var i = arrSetting.length; i < arrAction.length; i++ )\r
- {\r
- if( typeof(arrSetting[i]) != "string" )\r
- arrSetting[i] = "";\r
- } \r
-\r
- // to prepare for dealing with the absolute posioning element\r
- TargetObject.eleTarget.ABSX = CCSSP.GetObjectLeft( TargetObject.eleTarget );\r
- TargetObject.eleTarget.ABSY = CCSSP.GetObjectTop( TargetObject.eleTarget );\r
-\r
- if( arrEvent.length > 1 )\r
- {// if event is combined, it must be : "bssctrigger1 | bssctrigger2"\r
- if( arrAction.length != 2 )\r
- return false; // if event is combined, there must be 2 actions\r
- for( i = 0 ; i < 2; i++ )\r
- {\r
- if( TargetObject.SetEventManager(arrEvent[i], arrAction[i], \r
- arrSetting[i], event_additional) == false )\r
- return false; // the event manager has not been set up\r
- }\r
- }\r
- else // the event_type string is not combined\r
- {\r
- for( i = 0 ; i < arrAction.length; i++ )\r
- {\r
- TargetObject.SetEventManager(event_type, arrAction[i], arrSetting[i], event_additional);\r
- // to validate the event manager\r
- if( typeof(TargetObject.objManager[event_type]) != "object" ||\r
- typeof(TargetObject.objManager[event_type][i]) != "object" )\r
- return false; // the event manager has not been set up\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-CEngine.BuildTriggerObject = function(trigger_ID, target_ID)\r
-{// to build the trigger object\r
- var arrTrigger = trigger_ID.split("|"); // to split the combined trigger_ID string\r
- for( var i = 0; i < arrTrigger.length; i ++ )\r
- {// to get the trigger element then add it to the trigger list\r
- arrTrigger[i] = CCSSP.TrimSpace( arrTrigger[i] );\r
- var eleTrigger = CCSSP.GetObject( arrTrigger[i] );\r
- if( eleTrigger == null )\r
- continue; // the trigger_ID string in the HTML code maybe wrong\r
- CEngine.AddOneTrigger( arrTrigger[i], eleTrigger );\r
-\r
- // to get the target object\r
- if( typeof( this.objTrigger[arrTrigger[i]] ) != "object" )\r
- continue;// the engine's AddOneTarget function might have failed.\r
- CEngine.objTrigger[arrTrigger[i]].AddTargetID( target_ID );\r
- }\r
-}\r
-//End the definition of CEngine class\r
-\r
-/// Section End - CCSSP DHTM 1 (JavaScript 1.2)\r
-\r
-/// Section Begin - CCSSP DHTM 2 (JavaScript 1.2)\r
-\r
-//Begin the definition of CAgencyXXXX classes\r
-\r
-//Begin of the CAgencyShow definition\r
-function CAgencyShow( element, bIsShow )\r
-{\r
- this.ele = element;\r
- this.bIsShow = bIsShow;\r
-}\r
-\r
-CAgencyShow.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.ShowObject( this.ele, !this.bIsShow );\r
-}\r
-\r
-CAgencyShow.prototype.UpdateEffect = function()\r
-{\r
- CCSSP.ShowObject( this.ele, this.bIsShow );\r
-}\r
-\r
-CAgencyShow.prototype.EndEffect = function()\r
-{\r
- CCSSP.ShowObject( this.ele, !this.bIsShow );\r
-}\r
-// End of the CAgencyShow definition\r
-\r
-// Begin of CAgencyFly definition\r
-function CAgencyFly( element, settings, bIsIn )\r
-{\r
- this.ele = element;\r
- this.bIsIn = bIsIn;\r
- this.duration = 1000; // default\r
- this.direction = "right";\r
-\r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {// to retrieve the setting\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
- case "direction" : this.direction = arrOneSet[1]; break;\r
- }\r
- }\r
- \r
- if( gbBsIE5 && this.ele.style.position != "absolute" )\r
- this.ele.style.position = "relative";\r
- this.timer = null;\r
- this.aniIndex = CEngine.arrAnimation.length;\r
- CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyFly.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.ShowObject(this.ele, !this.bIsIn );\r
-}\r
-\r
-CAgencyFly.prototype.UpdateEffect = function()\r
-{\r
- if( this.timer == null )\r
- this.ResetParameters();\r
-\r
- var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
- if( percent >= 1.0 )\r
- this.EndEffect();\r
- else\r
- {\r
- var newX = this.startX*(1.0-percent) + this.finalX*percent;\r
- var newY = this.startY*(1.0-percent) + this.finalY*percent;\r
- CCSSP.MoveObjectTo(this.ele, newX, newY);\r
- if( this.timer == null )\r
- this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
- }\r
-}\r
-\r
-CAgencyFly.prototype.EndEffect = function()\r
-{\r
- clearInterval( this.timer );\r
- this.timer = null;\r
-\r
- if( this.bIsIn ) // FlyIn\r
- CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
- else // FlyOut\r
- CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
- CCSSP.ShowObject(this.ele, this.bIsIn );\r
-}\r
-\r
-CAgencyFly.prototype.ResetParameters = function()\r
-{\r
- this.PrepareEffect();\r
- CCSSP.ShowObject(this.ele, true );\r
-\r
- this.startX = 0;\r
- this.startY = 0;\r
- this.finalX = 0;\r
- this.finalY = 0; \r
- \r
- var offsetLeft = CCSSP.GetObjectWindowLeft(this.ele) + this.ele.offsetWidth;\r
- var offsetTop = CCSSP.GetObjectWindowTop(this.ele) + this.ele.offsetHeight;\r
- var offsetRight = CCSSP.GetWindowRight();\r
- var offsetBottom = CCSSP.GetWindowBottom();\r
-\r
- if( this.bIsIn )\r
- { // FlyIn\r
- this.finalX = this.ele.ABSX;\r
- this.finalY = this.ele.ABSY;\r
-\r
- switch( this.direction )\r
- {\r
- case "right": this.startX = offsetRight; this.startY = this.finalY; break;\r
- case "left": this.startX = -offsetLeft; this.startY = this.finalY; break;\r
- case "down": this.startY = offsetBottom; this.startX = this.finalX; break;\r
- case "up": this.startY = -offsetTop; this.startX = this.finalX; break;\r
- case "downright":\r
- this.startX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;\r
- this.startY = this.startX; break;\r
- case "upright":\r
- this.startX = (offsetTop < offsetRight)? offsetTop : offsetRight;\r
- this.startY = -this.startX; break;\r
- case "upleft":\r
- this.startX = -((offsetTop < offsetRight)? offsetTop : offsetRight);\r
- this.startY = this.startX; break;\r
- case "downleft":\r
- this.startX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);\r
- this.startY = -this.startX; break;\r
- }\r
- }\r
- else\r
- { // FlyOut\r
- this.startX = this.ele.ABSX;\r
- this.startY = this.ele.ABSY;\r
-\r
- switch( this.direction )\r
- {\r
- case "right": this.finalX = offsetRight; this.finalY = this.startY; break;\r
- case "left": this.finalX = -offsetLeft; this.finalY = this.startY; break;\r
- case "down": this.finalY = offsetBottom; this.finalX = this.startX; break;\r
- case "up": this.finalY = -offsetTop; this.finalX = this.startX; break;\r
- case "downright":\r
- this.finalX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;\r
- this.finalY = this.finalX; break;\r
- case "upright":\r
- this.finalX = (offsetTop < offsetRight)? offsetTop : offsetRight;\r
- this.finalY = -this.finalX; break;\r
- case "upleft":\r
- this.finalX = -((offsetTop < offsetRight)? offsetTop : offsetRight);\r
- this.finalY = this.finalX; break;\r
- case "downleft":\r
- this.finalX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);\r
- this.finalY = -this.finalX; break;\r
- }\r
- }\r
- CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
- this.startTime = (new Date()).getTime();\r
-}\r
-// End of the CAgencyFly definition\r
-\r
-// Begin of CAgencySpiral\r
-function CAgencySpiral( element, settings, bIsIn )\r
-{\r
- this.ele = element;\r
- this.bIsIn = bIsIn;\r
- this.duration = 1000; // default\r
-\r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {// to retrieve the setting\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
- }\r
- }\r
-\r
- if( gbBsIE5 && this.ele.style.position != "absolute" )\r
- this.ele.style.position = "relative";\r
- this.timer = null;\r
- this.aniIndex = CEngine.arrAnimation.length;\r
- CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencySpiral.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.ShowObject(this.ele, !this.bIsIn );\r
-}\r
-\r
-CAgencySpiral.prototype.UpdateEffect = function()\r
-{\r
- if( this.timer == null )\r
- this.ResetParameters();\r
-\r
- var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
- if( percent >= 1.0 )\r
- this.EndEffect();\r
- else\r
- {\r
- var rf = (this.bIsIn)? (1.0 - percent) : percent; \r
- var t = (1.0-rf) * 4.0 * Math.PI\r
- var rxP = (this.bIsIn)? this.startX : this.finalX; \r
- var ryP = (this.bIsIn)? this.startY : this.finalY; \r
- var rx = (Math.abs(rxP) < 200) ? Math.abs(rxP) : 200;\r
- var ry = (Math.abs(ryP) < 200) ? Math.abs(ryP) : 200;\r
-\r
- var newX = Math.ceil(-rf*Math.cos(t)*rx) + this.ele.ABSX;\r
- var newY = Math.ceil(-rf*Math.sin(t)*ry) + this.ele.ABSY;\r
- CCSSP.MoveObjectTo(this.ele, newX, newY);\r
- if( this.timer == null )\r
- this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
- }\r
-}\r
-\r
-CAgencySpiral.prototype.EndEffect = function()\r
-{\r
- clearInterval( this.timer );\r
- this.timer = null;\r
- \r
- if( this.bIsIn ) // In\r
- CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
- else // Out\r
- CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
- CCSSP.ShowObject(this.ele, this.bIsIn );\r
-}\r
-\r
-CAgencySpiral.prototype.ResetParameters = function()\r
-{\r
- this.PrepareEffect();\r
- CCSSP.ShowObject(this.ele, true );\r
- this.startX = (this.bIsIn)? CCSSP.GetWindowRight() : this.ele.ABSX;\r
- this.startY = (this.bIsIn)? CCSSP.GetWindowBottom() : this.ele.ABSY;\r
- this.finalX = (this.bIsIn)? this.ele.ABSX : CCSSP.GetWindowRight();\r
- this.finalY = (this.bIsIn)? this.ele.ABSY : CCSSP.GetWindowBottom(); \r
- \r
- CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
- this.startTime = (new Date()).getTime();\r
-}\r
-// End of CAgencySpiral\r
-\r
-// Begin of CAgencyElastic\r
-function CAgencyElastic( element, settings)\r
-{\r
- this.ele = element;\r
- this.duration = 1000; // default\r
- this.direction = "right";\r
-\r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {// to retrieve the setting\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
- case "direction" : this.direction = arrOneSet[1]; break;\r
- }\r
- }\r
- \r
- if( gbBsIE5 && this.ele.style.position != "absolute" )\r
- this.ele.style.position = "relative";\r
- this.timer = null;\r
- this.aniIndex = CEngine.arrAnimation.length;\r
- CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyElastic.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.ShowObject(this.ele, false );\r
-}\r
-\r
-CAgencyElastic.prototype.UpdateEffect = function()\r
-{\r
- if( this.timer == null )\r
- this.ResetParameters();\r
-\r
- var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
- if( percent >= 1.0 )\r
- this.EndEffect();\r
- else\r
- {\r
- var newX = this.startX;\r
- var newY = this.startY;\r
- var rf = Math.exp(-percent*3);\r
- var t = percent * 1.5 * Math.PI\r
- var rx = (Math.abs(this.startX) > Math.abs(this.startY)) ? this.startX : this.startY;\r
- switch (this.direction )\r
- {\r
- case "left": \r
- case "right" : newX = rf*Math.cos(t)*rx + this.ele.ABSX; break;\r
- case "up": \r
- case "down" : newY = rf*Math.cos(t)*rx + this.ele.ABSX; break;\r
- }\r
- CCSSP.MoveObjectTo(this.ele, newX, newY);\r
- if( this.timer == null )\r
- this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
- }\r
-}\r
-\r
-CAgencyElastic.prototype.EndEffect = function()\r
-{\r
- CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
- clearInterval( this.timer );\r
- this.timer = null;\r
-}\r
-\r
-CAgencyElastic.prototype.ResetParameters = function()\r
-{\r
- CCSSP.ShowObject(this.ele, true );\r
- this.startX = this.ele.ABSX;\r
- this.finalX = this.ele.ABSX;\r
- this.startY = this.ele.ABSY;\r
- this.finalY = this.ele.ABSY;\r
- \r
- switch (this.direction)\r
- { \r
- case "left": this.startX = -this.ele.offsetWidth; break;\r
- case "right": this.startX = this.ele.offsetWidth; break;\r
- case "up": this.startY = -this.ele.offsetHeight;break;\r
- case "down": this.startY = this.ele.offsetHeight; break;\r
- }\r
- CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
- this.startTime = (new Date()).getTime();\r
-}\r
-// End of CAgencyElastic\r
-\r
-// Begin of CAgencyZoom\r
-function CAgencyZoom( element, settings, bIsIn)\r
-{\r
- this.ele = element;\r
- this.duration = 1000; // default\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {// to retrieve the setting\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
- }\r
- }\r
-\r
- this.bIsIn = bIsIn;\r
- this.timer = null;\r
- this.aniIndex = CEngine.arrAnimation.length;\r
- CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyZoom.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.ShowObject(this.ele, false);\r
-}\r
-\r
-CAgencyZoom.prototype.UpdateEffect = function()\r
-{\r
- if( this.timer == null )\r
- this.ResetParameters();\r
-\r
- var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
- if( percent >= 1.0 )\r
- this.EndEffect();\r
- else\r
- {\r
- var nFactorIn = Math.ceil(50+50*percent);\r
- var nFactorOut = Math.ceil(100+200*(1-percent));\r
- var AlterFontsize = ((this.bIsIn)? nFactorIn : nFactorOut) + "%";\r
- var AlterFactor = ((this.bIsIn)? nFactorIn : nFactorOut) / 100;\r
- \r
- this.UpdateEffectAllChildren(this.ele, AlterFontsize, AlterFactor);\r
- for(var index = 0; index < this.ele.all.length; index++)\r
- this.UpdateEffectAllChildren(this.ele.all[index], AlterFontsize, AlterFactor);\r
- \r
- if( this.timer == null )\r
- this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
- }\r
-}\r
-\r
-CAgencyZoom.prototype.UpdateEffectAllChildren = function(child, FontSize, Factor)\r
-{\r
- if( CCSSP.IsTextTag(child) )\r
- child.style.fontSize = FontSize;\r
- else\r
- {\r
- if( typeof(child.orgWidth) == "number" )\r
- child.style.width = Factor * child.orgWidth;\r
- if( typeof(child.orgHeight) == "number" )\r
- child.style.height = Factor * child.orgHeight;\r
- }\r
-}\r
-\r
-CAgencyZoom.prototype.EndEffect = function()\r
-{\r
- this.EndEffectAllChildren(this.ele);\r
- for(var index = 0; index < this.ele.all.length; index++)\r
- this.EndEffectAllChildren(this.ele.all[index]);\r
- \r
- clearInterval( this.timer );\r
- this.timer = null;\r
-}\r
-\r
-CAgencyZoom.prototype.EndEffectAllChildren = function( child )\r
-{ \r
- if( CCSSP.IsTextTag(child) )\r
- child.style.fontSize = child.orgFontSize;\r
- else\r
- {\r
- if( typeof(child.intactWidth) != "undefined" )\r
- {\r
- child.width = child.intactWidth;\r
- child.height = child.intactHeight;\r
- }\r
- else if( typeof(child.style.intactPixelWidth) != "undefined" )\r
- {\r
- child.style.pixelWidth = child.style.intactPixelWidth;\r
- child.style.pixelHeight = child.style.intactPixelHeight;\r
- }\r
- }\r
-}\r
-\r
-CAgencyZoom.prototype.ResetParameters = function()\r
-{\r
- this.PrepareEffect();\r
- this.ResetParametersAllChildren( this.ele );\r
- for(var index = 0; index < this.ele.all.length; index++)\r
- this.ResetParametersAllChildren(this.ele.all[index]);\r
- \r
- this.startTime = (new Date()).getTime();\r
-}\r
-\r
-CAgencyZoom.prototype.ResetParametersAllChildren = function( child )\r
-{\r
- CCSSP.ShowObject(child, true );\r
- if( (child.tagName == "DIV") && (getParentNode(child).tagName == "TD") )\r
- child.width = "100%";// if the div is inside a cell of table, we need the this hack\r
- \r
- if( CCSSP.IsTextTag(child) )\r
- child.orgFontSize = child.style.fontSize;\r
- else\r
- {\r
- if( child.width > "" || child.height > "" )\r
- {\r
- child.orgWidth = child.intactWidth = child.width;\r
- child.orgHeight = child.intactHeight = child.height;\r
- }\r
- else if( ( typeof(child.orgWidth) != "number" ) && (typeof(child.orgHeight) != "number") )\r
- {\r
- child.orgWidth = child.style.intactPixelWidth = child.style.pixelWidth;\r
- child.orgHeight = child.style.intactPixelHeight = child.style.pixelHeight;\r
- }\r
- }\r
-}\r
-// End of CAgencyZoom\r
-\r
-//// the following effects will use IE's exclusive "filter" function ////\r
-// Begin of CAgencyAlpha definition\r
-function CAgencyAlpha( element, settings, bIsIn )\r
-{// because of "visual filter" style, this won't work in Navigator\r
- this.ele = element;\r
- this.bIsIn = bIsIn;\r
-\r
- // to set the default value\r
- this.startOpacity = (this.bIsIn) ? 0 : 100;\r
- this.endOpacity = (this.bIsIn) ? 100 : 0;\r
- \r
- this.duration = 1000; // default\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {// to retrieve the setting\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
- }\r
- }\r
- \r
- this.timer = null;\r
- this.aniIndex = CEngine.arrAnimation.length;\r
- CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyAlpha.prototype.PrepareEffect = function()\r
-{// to set the visual filter function\r
- // the visual filter ONLY work when set by "Width and Height" or\r
- // absolute position for DIV, SPAN and normal tag ( such as p )\r
- // but, "absolute" cause the following elements overlap, so:\r
- CCSSP.PrepareFilter( this.ele );\r
- CCSSP.ShowObject(this.ele, !this.bIsIn );\r
-}\r
-\r
-CAgencyAlpha.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
- if( this.timer == null )\r
- this.ResetParameters();\r
- if( typeof(this.ele.filters.alpha) != "object" )\r
- {\r
- this.EndEffect();\r
- return;\r
- }\r
-\r
- var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
- if( percent >= 1.0 )\r
- this.EndEffect();\r
- else if( typeof(this.ele.filters.alpha) == "object" )\r
- {\r
- this.ele.filters.alpha.opacity = this.startOpacity*(1.0-percent) + this.endOpacity*percent;\r
- if( this.timer == null )\r
- this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
- }\r
-}\r
-\r
-CAgencyAlpha.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
- clearInterval( this.timer );\r
- this.timer = null;\r
- this.ele.style.filter = "";\r
- CCSSP.ShowObject(this.ele, this.bIsIn );\r
-}\r
-\r
-CAgencyAlpha.prototype.ResetParameters = function()\r
-{\r
- this.PrepareEffect();\r
- CCSSP.ShowObject(this.ele, true );\r
- this.ele.style.filter = "alpha(opacity=" + this.startOpacity + ")";\r
- this.startTime = (new Date()).getTime();\r
-}\r
-// End of the CAgencyAlpha definition\r
-\r
-// Begin of CAgencyWave definition\r
-function CAgencyWave( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
- this.ele = element;\r
-\r
- this.duration = 0; // default\r
- this.strength = 10;\r
- this.freq = 1;\r
- this.lightstrength = 1;\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {// to retrieve the setting\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "duration" : this.duration = 100000/arrOneSet[1]; break;\r
- case "strength" : this.strength = arrOneSet[1]; break;\r
- case "freq" : this.freq = arrOneSet[1]; break;\r
- case "lightstrength" : this.lightstrength = arrOneSet[1]; break;\r
- }\r
- }\r
-\r
- this.timer = null;\r
- this.aniIndex = CEngine.arrAnimation.length;\r
- CEngine.arrAnimation[this.aniIndex] = this;\r
-}\r
-\r
-CAgencyWave.prototype.PrepareEffect = function()\r
-{// to set the visual filter function\r
- CCSSP.PrepareFilter(this.ele);\r
-\r
- CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyWave.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
- if( this.timer == null )\r
- this.ResetParameters();\r
- if( typeof(this.ele.filters.wave) != "object" )\r
- {\r
- this.EndEffect();\r
- return;\r
- }\r
-\r
- if( this.duration > 0 )\r
- {\r
- var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
- if( percent >= 1.0 )\r
- {\r
- this.EndEffect();\r
- return;\r
- }\r
- }\r
- \r
- this.ele.filters.wave.phase += 5;\r
- this.ele.filters.wave.phase %= 100;\r
- if( this.timer == null )\r
- this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 50 );\r
-}\r
-\r
-CAgencyWave.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
- this.ele.style.filter = "";\r
- clearInterval( this.timer );\r
- this.timer = null;\r
-}\r
-\r
-CAgencyWave.prototype.ResetParameters = function()\r
-{\r
- this.PrepareEffect();\r
- this.ele.style.filter = "wave(strength=" + this.strength + ",freq=" + \r
- this.freq +", lightstrength=" + this.lightstrength +",phase=0);";\r
- this.startTime = (new Date()).getTime();\r
-}\r
-// End of the CAgencyWave definition\r
-\r
-// Begin of CAgencyGlow definition\r
-function CAgencyGlow( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
- this.ele = element;\r
-\r
- // to set the default value\r
- this.glowColor = "green";\r
- this.glowStrength = "3";\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "color" : this.glowColor = arrOneSet[1]; break;\r
- case "strength" : this.glowStrength = arrOneSet[1]; break;\r
- }\r
- }\r
-}\r
-\r
-CAgencyGlow.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.PrepareFilter(this.ele);\r
- CCSSP.ShowObject(this.ele, true );\r
- if( this.ele.style.backgroundColor != "" )\r
- {//style.backgroundColor somehow stop the visual filter\r
- this.ele.intactBackgroundColor = this.ele.style.backgroundColor;\r
- this.ele.style.backgroundColor = "";\r
- }\r
-}\r
-\r
-CAgencyGlow.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
- this.PrepareEffect();\r
- this.ele.style.filter = "glow(Color=" + this.glowColor + ", Strength=" + \r
- this.glowStrength + ", enabled=true" +")";\r
-}\r
-\r
-CAgencyGlow.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
- this.ele.style.filter = "";\r
- if( typeof(this.ele.intactBackgroundColor) != "undefined" )\r
- this.ele.style.backgroundColor = this.ele.intactBackgroundColor;\r
-}\r
-// End of the CAgencyGlow definition\r
-\r
-// Begin of CAgencyDropShadow definition\r
-function CAgencyDropShadow( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
- this.ele = element;\r
-\r
- // to set the default value\r
- this.shadowColor = "black"; \r
- this.shadowOffx = "1";\r
- this.shadowOffy = "1";\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "color" : this.shadowColor = arrOneSet[1]; break;\r
- case "offx" : this.shadowOffx = arrOneSet[1]; break;\r
- case "offy" : this.shadowOffy = arrOneSet[1]; break;\r
- }\r
- }\r
-}\r
-\r
-CAgencyDropShadow.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.PrepareFilter(this.ele);\r
- CCSSP.ShowObject(this.ele, true );\r
- \r
- if( this.ele.style.backgroundColor != "" )\r
- {//style.backgroundColor somehow stop the visual filter\r
- this.ele.intactBackgroundColor = this.ele.style.backgroundColor;\r
- this.ele.style.backgroundColor = "";\r
- }\r
-}\r
-\r
-CAgencyDropShadow.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
- this.PrepareEffect();\r
- this.ele.style.filter = "dropshadow(color=" + this.shadowColor + ", offx=" + \r
- this.shadowOffx + ", offy=" + this.shadowOffy + ")";\r
-}\r
-\r
-CAgencyDropShadow.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
- this.ele.style.filter = "";\r
- if( typeof(this.ele.intactBackgroundColor) != "undefined" )\r
- this.ele.style.backgroundColor = this.ele.intactBackgroundColor;\r
-}\r
-// End of the CAgencyDropShadow definition\r
-\r
-// Begin of CAgencyRevealTrans definition\r
-function CAgencyRevealTrans( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
- this.ele = element;\r
-\r
- // to set the default value\r
- this.duration = 1.0; //The value is specified in seconds.milliseconds format (0.0000).\r
- this.transition = 0;\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "type" : this.transition = arrOneSet[1]; break;\r
- case "duration" : this.duration = 100/arrOneSet[1]; break;\r
- }\r
- }\r
-}\r
-\r
-CAgencyRevealTrans.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.PrepareFilter(this.ele);\r
- CCSSP.ShowObject( this.ele, false);\r
-}\r
-\r
-CAgencyRevealTrans.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
- if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
- {\r
- if( this.ele.filters.RevealTrans.status == 2 )\r
- this.ele.filters.RevealTrans.stop(); \r
- }\r
-\r
- this.PrepareEffect();\r
- \r
- this.ele.style.filter = "RevealTrans(duration=" + this.duration + \r
- ", transition=" + this.transition + ")";\r
- \r
- if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
- {\r
- this.ele.filters.RevealTrans.apply();\r
- CCSSP.ShowObject( this.ele, true);\r
- this.ele.filters.RevealTrans.play(); \r
- }\r
- else\r
- CCSSP.ShowObject( this.ele, true);\r
-}\r
-\r
-CAgencyRevealTrans.prototype.EndEffect = function()\r
-{\r
- if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
- this.ele.filters.RevealTrans.stop(); \r
- this.ele.style.filter = "";\r
-}\r
-// End of the CAgencyRevealTrans definition\r
-\r
-// Begin of CAgencyBlur definition\r
-function CAgencyBlur( element, settings )\r
-{// because of "visual filter" style, this won't work in Navigator\r
- this.ele = element;\r
-\r
- // to set the default value\r
- this.strength = "5";\r
- this.direction = "90";\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "strength" : this.strength = arrOneSet[1]; break;\r
- case "direction" : this.direction = arrOneSet[1]; break;\r
- }\r
- }\r
-}\r
-\r
-CAgencyBlur.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.PrepareFilter(this.ele);\r
- CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyBlur.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
- CCSSP.PrepareFilter(this.ele);\r
- this.ele.style.filter = "blur(strength=" + this.strength + \r
- ", direction=" + this.direction + ")";\r
-}\r
-\r
-CAgencyBlur.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
- this.ele.style.filter = "";\r
-}\r
-// End of the CAgencyBlur definition\r
-\r
-// Begin of CAgencyChangeFilter definition\r
-function CAgencyChangeFilter( element, settings ) // flipH, flipV, invert, grey,\r
-{// because of "visual filter" style, this won't work in Navigator\r
- this.ele = element;\r
-\r
- // to set the default value\r
- this.filterFunction = settings;\r
-}\r
-\r
-CAgencyChangeFilter.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.PrepareFilter(this.ele);\r
- CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyChangeFilter.prototype.UpdateEffect = function()\r
-{// to set the visual filter function\r
- CCSSP.PrepareFilter(this.ele);\r
- this.ele.style.filter = this.filterFunction;\r
-}\r
-\r
-CAgencyChangeFilter.prototype.EndEffect = function()\r
-{// to remove the visual filter function\r
- this.ele.style.filter = "";\r
-}\r
-// End of the CAgencyChangeFilter definition\r
-\r
-// The effects below change the style on the fly, so they won't work in Navigator\r
-\r
-// Begin of CAgencyFontChange definition, \r
-function CAgencyFontChange( element, settings )\r
-{//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.\r
- this.ele = element;\r
- \r
- // to retrieve the original font style\r
- this.RetrieveOldFont( this.ele );\r
- \r
- // to set the default font to change\r
- this.newfontFamily = this.ele.oldFontFamily;\r
- this.newfColor = this.ele.oldColor;\r
- this.newtextDecoration = this.ele.oldTextDecoration;\r
- this.newfontWeight = this.ele.oldFontWeight;\r
- this.newfontStyle = this.ele.oldFontStyle;\r
- this.newfontSize = this.ele.oldFontSize;\r
- this.newBackgroundColor = this.ele.oldBackgroundColor;\r
- \r
- var arrAllSet = settings.split(",");\r
- for( var i = 0; i < arrAllSet.length; i ++ )\r
- {// to retrieve the setting\r
- arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
- var arrOneSet = arrAllSet[i].split("=");\r
- for( var j = 0; j < arrOneSet.length; j++ )\r
- arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
- switch( arrOneSet[0] )\r
- {\r
- case "font-family" : this.newfontFamily = arrOneSet[1]; break;\r
- case "color" : this.newfColor = arrOneSet[1]; break;\r
- case "underline" : this.newtextDecoration = (arrOneSet[1]=="on")? "underline" : "none"; break;\r
- case "bold" : this.newfontWeight = (arrOneSet[1]=="on")? "bold" : "normal"; break;\r
- case "italic" : this.newfontStyle = (arrOneSet[1]=="on")? "italic" : "normal"; break;\r
- case "size" : this.newfontSize = arrOneSet[1]; break;\r
- case "background-color" : this.newBackgroundColor = arrOneSet[1]; break;\r
- }\r
- }\r
-}\r
-\r
-CAgencyFontChange.prototype.RetrieveOldFont = function(objChild)\r
-{\r
- if( typeof(objChild.oldFontFamily) == "undefined" )\r
- objChild.oldFontFamily = objChild.style.fontFamily;\r
- if( typeof(objChild.oldColor) == "undefined" )\r
- objChild.oldColor = objChild.style.color;\r
- if( typeof(objChild.oldTextDecoration) == "undefined" )\r
- objChild.oldTextDecoration = objChild.style.textDecoration;\r
- if( typeof(objChild.oldFontWeight) == "undefined" )\r
- objChild.oldFontWeight = objChild.style.fontWeight;\r
- if( typeof(objChild.oldFontStyle) == "undefined" )\r
- objChild.oldFontStyle = objChild.style.fontStyle;\r
- if( typeof(objChild.oldFontSize) == "undefined" )\r
- objChild.oldFontSize = objChild.style.fontSize;\r
- if( typeof(objChild.oldBackgroundColor) == "undefined" )\r
- objChild.oldBackgroundColor = objChild.style.backgroundColor;\r
-}\r
-\r
-CAgencyFontChange.prototype.PrepareEffect = function()\r
-{\r
- // as for expanding text, the child is created after the constructor called\r
- for(var index = 0; index < this.ele.all.length; index++)\r
- this.RetrieveOldFont(this.ele.all[index]);\r
- CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyFontChange.prototype.UpdateEffect = function()\r
-{// to change the font\r
- this.PrepareEffect();\r
- this.UpdateEffectAllChildren( this.ele );\r
- for( var index = 0; index < this.ele.all.length; index++)\r
- this.UpdateEffectAllChildren(this.ele.all[index]);\r
-}\r
-\r
-CAgencyFontChange.prototype.UpdateEffectAllChildren = function(objChild)\r
-{\r
- objChild.style.fontFamily = this.newfontFamily;\r
- objChild.style.color = this.newfColor;\r
- objChild.style.textDecoration = this.newtextDecoration;\r
- objChild.style.fontWeight = this.newfontWeight;\r
- objChild.style.fontStyle = this.newfontStyle;\r
- objChild.style.fontSize = this.newfontSize;\r
- objChild.style.backgroundColor = this.newBackgroundColor;\r
-}\r
-\r
-CAgencyFontChange.prototype.EndEffect = function()\r
-{// to reinstate the original font style\r
- this.EndEffectAllChildren( this.ele );\r
- for( var index = 0; index < this.ele.all.length; index++)\r
- this.EndEffectAllChildren(this.ele.all[index]);\r
-}\r
-\r
-CAgencyFontChange.prototype.EndEffectAllChildren = function( objChild )\r
-{\r
- if( typeof(objChild.oldFontFamily) != "undefined" )\r
- objChild.style.fontFamily = objChild.oldFontFamily;\r
- if( typeof(objChild.oldColor) != "undefined" )\r
- objChild.style.color = objChild.oldColor;\r
- if( typeof(objChild.oldFontWeight) != "undefined" )\r
- objChild.style.fontWeight = objChild.oldFontWeight;\r
- if( typeof(objChild.oldFontStyle) != "undefined" )\r
- objChild.style.fontStyle = objChild.oldFontStyle;\r
- if( typeof(objChild.oldFontSize) != "undefined" )\r
- objChild.style.fontSize = objChild.oldFontSize;\r
- if( typeof(objChild.oldTextDecoration) != "undefined" )\r
- objChild.style.textDecoration = objChild.oldTextDecoration;\r
- if( typeof(objChild.oldBackgroundColor) != "undefined" )\r
- objChild.style.backgroundColor = objChild.oldBackgroundColor;\r
-}\r
-// End of the CAgencyFontChange definition\r
-\r
-// Begin of the CAgencyChangeStyle definition\r
-function CAgencyChangeStyle( element, settings )\r
-{//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.\r
- this.ele = element;\r
- \r
- // to retrieve the original style\r
- this.oldstyle = this.ele.style.cssText;\r
- \r
- // to set the default style\r
- this.newStyle = this.oldstyle;\r
- \r
- if( typeof(settings) == "string" && settings.length > 1 )\r
- this.newStyle = this.oldstyle + " " + settings;\r
-}\r
-\r
-CAgencyChangeStyle.prototype.PrepareEffect = function()\r
-{\r
- CCSSP.ShowObject(this.ele, true );\r
-}\r
-\r
-CAgencyChangeStyle.prototype.UpdateEffect = function()\r
-{// to change the style\r
- this.ele.style.cssText = this.newStyle;\r
-}\r
-\r
-CAgencyChangeStyle.prototype.EndEffect = function()\r
-{// to reinstate the original style\r
- this.ele.style.cssText = this.oldStyle;\r
-}\r
-// End of the CAgencyChangeStyle definition\r
-\r
-//End the definition of CAgencyXXXX classes\r
-\r
-//Begin to collaborate with other event handler settings \r
-CCSSP.RegisterEventHandler( window, "onload", "CEngine.OnPageLoad();BSSCOnLoad();kadovInitTriggersInHead();");\r
-CCSSP.RegisterEventHandler( document, "onclick", "CEngine.OnPageClick();BSSCOnClick();");\r
-CCSSP.RegisterEventHandler( document, "onmouseover", "CEngine.OnMouseOver();BSSCOnMouseOver();" );\r
-CCSSP.RegisterEventHandler( document, "onmouseout", "CEngine.OnMouseOver();BSSCOnMouseOut();" );\r
-CCSSP.RegisterEventHandler( window, "onunload", "BSSCOnUnload();");\r
-//End to collaborate with other event handler settings\r
-\r
-/// Section End - CCSSP DHTM 2 (JavaScript 1.2)\r
-\r
-//// Segment End -- (JavaScript 1.2)
\ No newline at end of file
+++ /dev/null
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>GEOM preferences</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { font-family:'Times New Roman' , serif; margin-left:40px; }\r
-img_whs2 { border:none; border-style:none; width:752px; height:646px; float:none; }\r
-ul.whs3 { list-style:disc; }\r
-p.whs4 { margin-left:40px; }\r
-p.whs5 { margin-left:40px; font-weight:bold; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- addTocInfo("GUI module\nSetting Preferences\nGeometry preferences");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- setRelStartPage("index.htm");\r
-\r
- autoSync(1);\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Geometry preferences</h1>\r
-\r
-<p>In the <span style="font-weight: bold;"><B>Geometry</B></span> module you can \r
- set preferences for visualisation of geometrical figures which can be \r
- used in later sessions with this module. </p>\r
-\r
-<p> </p>\r
-\r
-<p class="whs1"><img src="pics/pref15.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs4"><span style="font-weight: bold;"><B>Default \r
- Shading Color</B></span> - allows to select default shading color. Click on \r
- the colored line to access to the <span style="font-weight: bold;"><B><a href="select_color_and_font.htm">Select Color</a></B></span> dialog box. </p></li>\r
- \r
- <li class=kadov-p><p class="whs5">Step \r
- Value for Spin Boxes - <span style="font-weight: normal;">allows to define \r
- the increment of values set in spin boxes. </span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs5">Default \r
- Display Mode - <span style="font-weight: normal;">allows to choose between</span> \r
- <span style="font-weight: normal;">wireframe or shading.</span></p></li>\r
-</ul>\r
-\r
-<p> </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whstub.js"></script><script language="javascript1.2" src="whstart.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var strDefaultTopic = "about:blank";\r
-var nWebhelpNavPaneMode = 1; //1: DHTML 2:Applet 3:PureHTML 4:Noframeset\r
-var bNoApplet = false;\r
-var strPaneDHTML = "whd_nvp10.htm"; //whd_nvp10.htm if tab enabled, whnframe.htm if tab disabled.\r
-var strPaneApplet = "whd_nvp20.htm";\r
-var strPaneList = "whgdata/whnvp30.htm";\r
-\r
-var strHTML = "";\r
-var strPane = "";\r
-var nViewFrameType = -1;\r
-\r
-function CMRServer()\r
-{\r
- this.m_cAgents = new Array;\r
-}\r
-var cMRServer = new CMRServer;\r
-\r
-//figure out which mode is the best\r
-if (!window.gAgent)\r
-{\r
- // low end browser, we don't even try to determine it.\r
- document.location = "whnjs.htm";\r
-}\r
-else\r
-{\r
- if (!gbNav4&&!gbIE4&&!gbOpera7&&!gbSafari)\r
- document.location = "whnjs.htm";\r
- else if (gbNav4 && !gbNav6 && ((gnVerMinor <= 4.06)))\r
- document.location = "whnjs.htm";\r
- else if (gbMac && gbIE4 && !gbIE5)\r
- document.location = "whnjs.htm";\r
- //figure out which mode is the best\r
- else \r
- {\r
- nViewFrameType=nWebhelpNavPaneMode;\r
- if (nWebhelpNavPaneMode==1||nWebhelpNavPaneMode == 2)\r
- {\r
- var gbDHTML=(nWebhelpNavPaneMode==1);\r
- if (gbNav4) nViewFrameType = 2;\r
- if (gbNav4&&(gnVerMinor < 4.1)) nViewFrameType = 3;\r
- if (gbNav4&&(gnVerMinor == 4.6)) nViewFrameType = 3;\r
- if (gbIE4&&gbDHTML) nViewFrameType = 1;\r
- if (gbIE4&&gbSunOS&&nWebhelpNavPaneMode==2) nViewFrameType = 3;\r
- if (gbNav6&&gbDHTML) nViewFrameType = 1;\r
- if (gbNav6&&!gbNav61&&nWebhelpNavPaneMode == 2) nViewFrameType = 3;\r
- if (gbMac) nViewFrameType = 3;\r
- if (gbOpera7&&nViewFrameType == 2) nViewFrameType = 3;\r
- if ((bNoApplet)&&(nViewFrameType == 2)) nViewFrameType = 3;\r
- }\r
- }\r
-}\r
-\r
-if (nViewFrameType!=-1)\r
-{\r
- var gbWindows = ((gAgent.indexOf("win") != -1) || (gAgent.indexOf("16bit") != -1));\r
- //The colordepth of the 16 color on Windows is 1. \r
- if ((gbWindows) && (gbNav4) && (window.screen) && (window.screen.colorDepth <= 4))\r
- {\r
- alert("WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors.");\r
- nViewFrameType = 3;\r
- }\r
-\r
- //figure out which one is navpane\r
- if (nViewFrameType == 1)\r
- strPane = strPaneDHTML;\r
- else if (nViewFrameType == 2)\r
- strPane = strPaneApplet;\r
- else \r
- strPane = strPaneList;\r
-\r
- var oParam = new Object();\r
- oParam.sTopic = "";\r
- var oMsg = new whMessage(WH_MSG_GETDEFAULTTOPIC, window, 1, oParam);\r
- if (SendMessage(oMsg) && oParam.sTopic != "")\r
- strDefaultTopic = oParam.sTopic;\r
-\r
-\r
- if (nViewFrameType == 1)\r
- {\r
- //DHTML (iframe or xml based)\r
- strHTML += "<frameset id=\"whPfset\" cols=\"260,*\" frameborder=\"1\">";\r
- strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane + "\" scrolling=\"no\"></frame>";\r
- strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
- }\r
- else if (nViewFrameType == 2)\r
- {\r
- //applet (xml based)\r
- strHTML += "<frameset id=\"whPfset\" cols=\"260,*\" framespacing=\"0\" frameborder=\"0\" border=\"0\">";\r
- strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane+ "\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\"></frame>";\r
- strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
- }\r
- else if (nViewFrameType == 3)\r
- {\r
- //generic html (pure html based)\r
- strHTML += "<frameset id=\"whPfset\" cols=\"260,*\">";\r
- strHTML += "<frame title=\"navigation frame\" src=\"" + strPane + "\" name=\"bsscleft\" scrolling=\"no\"></frame>";\r
- strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" scrolling=\"auto\"></frame>";\r
- strHTML += "</frameset>";\r
- } \r
- else if (nViewFrameType == 4)\r
- {\r
- //no navipane at all\r
- strHTML += "<frameset id=\"whPfset\" border=\"0\" cols=\"100%,*\">";\r
- strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" framespacing=\"0\" frameborder=\"0\" border=\"0\" scrolling=\"auto\">";\r
- strHTML += "</frameset>";\r
- }\r
-\r
- document.write(strHTML);\r
-\r
- RegisterListener2(window, WH_MSG_SHOWPANE);\r
- RegisterListener2(window, WH_MSG_HIDEPANE);\r
- RegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
- window.onunload = window_unload;\r
-}\r
-\r
-function window_unload()\r
-{\r
- UnRegisterListener2(window, WH_MSG_SHOWPANE);\r
- UnRegisterListener2(window, WH_MSG_HIDEPANE);\r
- UnRegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- var nMsgId = oMsg.nMessageId;\r
- if (nMsgId == WH_MSG_SHOWPANE)\r
- {\r
- getElement("whPfset").cols = "260,*";\r
- var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "visible");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_GETPANEINFO, this, 1, "");\r
- if (SendMessage(onMsg))\r
- {\r
- onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, onMsg.oParam);\r
- SendMessage(onMsg);\r
- }\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_HIDEPANE)\r
- {\r
- getElement("whPfset").cols = "0,*";\r
- var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "invisible");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, "");\r
- SendMessage(onMsg);\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_ISPANEVISIBLE)\r
- {\r
- var n = parseInt(getElement("whPfset").cols);\r
- if (n > 0)\r
- {\r
- oMsg.oParam.bVisible = true;\r
- }\r
- return false;\r
- }\r
- return true;\r
-}\r
-//-->\r
-</script>\r
-<body>\r
-<noscript>\r
- <p> It seems javascript is disabled in your browser, please enable it and reload again, or click <a href="whnjs.htm">here</a> to view without javascript</p>\r
-</noscript>\r
-</body>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whutils.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var gCSHFileName = "whc_data.htm";\r
-var gCSHSuffixName1 = "_csh.html";\r
-var gCSHSuffixName2 = "_csh.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-gCSHFileName="cshdat_webhelp.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-var gasProj = new Array();\r
-gasProj[0] = _getPath(document.location.href);\r
-var gCurrent = 0;\r
-\r
-function addProject(strProj)\r
-{\r
- var len = gasProj.length;\r
- if (strProj)\r
- {\r
- strProj = _replaceSlash(strProj);\r
- if (strProj.lastIndexOf("/") != strProj.length - 1)\r
- strProj += "/";\r
- var strPPath = _getFullPath(_getPath(document.location.href), strProj);\r
- var bFound = false;\r
- for (var i = 0; i < len; i ++)\r
- {\r
- if (isSamePath(gasProj[i], strPPath))\r
- {\r
- bFound = true;\r
- break;\r
- }\r
- }\r
- if (!bFound)\r
- gasProj[len] = strPPath;\r
- }\r
-}\r
-\r
-function isSamePath(strPath1, strPath2)\r
-{\r
- return strPath1.toLowerCase() == strPath2.toLowerCase();\r
-}\r
-\r
-function goNext()\r
-{\r
- gCurrent ++;\r
- var len = gasProj.length;\r
- if (gCurrent >= len)\r
- return getHomePage()\r
- else\r
- frames["csh"].location = gasProj[gCurrent] + gCSHFileName;\r
- return "";\r
-}\r
-\r
-function getRelHomePage(strLocation)\r
-{\r
- var strCurPPath = _getPath(strLocation);\r
- var strOriPPath = _getPath(getHomePage());\r
- var strRelPath = _getRelativeFileName(strOriPPath, strCurPPath);\r
- var strURL = getHomePage() + "#" + strRelPath;\r
- return strURL;\r
-}\r
-\r
-function getHomePage()\r
-{\r
- var strHomePage;\r
- var strTmp = location.toString();\r
- var nPos = strTmp.indexOf("#");\r
- if (nPos != -1)\r
- {\r
- strHomePage = strTmp.substring(0, nPos);\r
- }\r
- else\r
- {\r
- strHomePage = strTmp;\r
- }\r
- var nPos1 = strHomePage.indexOf(gCSHSuffixName1);\r
- var nPos = strHomePage.indexOf(gCSHSuffixName2);\r
- if (nPos != -1)\r
- {\r
- strHomePage = strHomePage.substring(0,nPos);\r
- if (nPos1 != -1)\r
- strHomePage += ".html";\r
- else\r
- strHomePage += ".htm";\r
- }\r
- return strHomePage;\r
-}\r
-//-->\r
-</script>\r
-</head>\r
-<frameset rows="1,*">\r
-<frame name="dumb" src="about:blank"></frame>\r
-<frame name="csh" src="cshdat_webhelp.htm"></frame> \r
-</frameset>\r
-</html>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whutils.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var gCSHFileName = "whc_data.htm";\r
-var gCSHSuffixName1 = "_rhc.html";\r
-var gCSHSuffixName2 = "_rhc.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-gCSHFileName="cshdat_robohelp.htm";\r
-//-->\r
-</script>\r
-<script language="javascript">\r
-<!--\r
-var gasProj = new Array();\r
-gasProj[0] = _getPath(document.location.href);\r
-var gCurrent = 0;\r
-\r
-function addProject(strProj)\r
-{\r
- var len = gasProj.length;\r
- if (strProj)\r
- {\r
- strProj = _replaceSlash(strProj);\r
- if (strProj.lastIndexOf("/") != strProj.length - 1)\r
- strProj += "/";\r
- var strPPath = _getFullPath(_getPath(document.location.href), strProj);\r
- var bFound = false;\r
- for (var i = 0; i < len; i ++)\r
- {\r
- if (isSamePath(gasProj[i], strPPath))\r
- {\r
- bFound = true;\r
- break;\r
- }\r
- }\r
- if (!bFound)\r
- gasProj[len] = strPPath;\r
- }\r
-}\r
-\r
-function isSamePath(strPath1, strPath2)\r
-{\r
- return strPath1.toLowerCase() == strPath2.toLowerCase();\r
-}\r
-\r
-function goNext()\r
-{\r
- gCurrent ++;\r
- var len = gasProj.length;\r
- if (gCurrent >= len)\r
- return getHomePage()\r
- else\r
- frames["csh"].location = gasProj[gCurrent] + gCSHFileName;\r
- return "";\r
-}\r
-\r
-function getRelHomePage(strLocation)\r
-{\r
- var strCurPPath = _getPath(strLocation);\r
- var strOriPPath = _getPath(getHomePage());\r
- var strRelPath = _getRelativeFileName(strOriPPath, strCurPPath);\r
- var strURL = getHomePage() + "#" + strRelPath;\r
- return strURL;\r
-}\r
-\r
-function getHomePage()\r
-{\r
- var strHomePage;\r
- var strTmp = location.toString();\r
- var nPos = strTmp.indexOf("#");\r
- if (nPos != -1)\r
- {\r
- strHomePage = strTmp.substring(0, nPos);\r
- }\r
- else\r
- {\r
- strHomePage = strTmp;\r
- }\r
- var nPos1 = strHomePage.indexOf(gCSHSuffixName1);\r
- var nPos = strHomePage.indexOf(gCSHSuffixName2);\r
- if (nPos != -1)\r
- {\r
- strHomePage = strHomePage.substring(0,nPos);\r
- if (nPos1 != -1)\r
- strHomePage += ".html";\r
- else\r
- strHomePage += ".htm";\r
- }\r
- return strHomePage;\r
-}\r
-//-->\r
-</script>\r
-</head>\r
-<frameset rows="1,*">\r
-<frame name="dumb" src="about:blank"></frame>\r
-<frame name="csh" src="cshdat_robohelp.htm"></frame> \r
-</frameset>\r
-</html>
\ No newline at end of file
--- /dev/null
+/*!
+
+\page about_salome_page About SALOME
+
+<ul>
+<li>\subpage intro_to_salome_page</li>
+<li>\subpage salome_architecture_page</li>
+<li>\subpage installing_salome_page "Installing SALOME"</li>
+<li>\subpage running_salome_page</li>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page creating_new_study_page Creating a new study
+
+Study is a document within GUI, an abstraction layer between actual
+document data (probably, remote data available through CORBA) and data
+presentation (in the Object Browser). It contains a tree of Data
+Object instances.
+
+<em>To create a new study:</em>
+
+\par
+From the main menu select <b>File > New</b> or in the standard toolbar
+click "New document" button.
+
+\image html newsticn.jpg ""New document" button"
+
+Your study will be created with default name \b Study1. In SALOME you
+can create several studies.
+
+In addition to it, you can create several windows with different
+activated viewers (VTK, OCC, Plot2d) for each study.
+
+<em>To create a new window for a definite study:</em>
+<ol>
+<li>Make your study \b active: maximize it (if it minimized) or click on
+the top control zone of the study window.
+</li>
+<li>\n From the main menu select <b>Window > New Window</b> and from the submenu
+choose the viewer, which will be activated in a new window.
+</li>
+</ol>
+
+The window for your study will be created with a default name \b Study1.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page displaying_studies_page Displaying studies
+
+Starting from SALOME version 3.0.0. you are able to work in a
+multi-desktop environment, which means that you can open as many
+studies as you need, place them wherever you wish on the desktop, in
+brief, work with Salome Platform like with a normal Windows
+application.
+\n Such windows as Object Browser and Python Console are dockable and
+also can be placed at any part of the desktop.
+\n Only one study window in representation area can be active. You can
+change their size and move any windows between representation
+areas. When an area becomes empty, it is not displayed.
+\n All windows are placed inside tabs where you can switch between
+them. If there are several windows (viewers) in your current study and
+you want to display more then one at the same time, you can split
+representation area into two parts, in horizontal or vertical
+direction, to create two representation areas with windows be placed
+in them. To do this, right-click on the tab and select <b>Split
+Vertically</b> or <b>Split Horizontally</b>.
+
+For example, on this screen-shot the active zone has been split
+horizontally to be able to work with OCC and VTK viewers
+simultaneously, the one of the windows was split again, at this time
+vertically to see Plot 2d graphs.
+
+\image html neo-view2.png
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page editing_studies_page Editing studies
+
+\b SALOME has \b Copy/Paste functionality allowing to edit your study
+within a definite component:
+
+<em>To copy/paste a definite object:</em>
+\par
+In the main toolbar click "Copy"/"Paste" button or from the main menu
+choose <b>Edit > Copy/Paste</b> option.
+
+\image html copy-paste.jpg ""Copy" and "Paste" buttons"
+
+\n The availability of \b Copy/Paste operations depends on the module and
+the nature of an operation or an object, so if the module does not
+provide this functionality, it won't be available.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page geometry_preferences_page Geometry preferences
+
+In the \b Geometry module you can set preferences for visualisation of
+geometrical figures which can be used in later sessions with this
+module.
+
+\image html pref15.png
+
+\par
+For all color definitions click on the respective line to access to
+the \ref select_color_and_font_page "Select Color" dialog box.
+
+<ul>
+<li><b>General</b></li>
+<ul>
+<li><b>Default Display Mode</b> - allows to choose between wireframe
+or shading.<li>
+<li><b>Default Shading Color</b> - allows to select default shading
+color.<li>
+<li><b> Default Wireframe Color</b> - allows to select default
+wireframe color (to be applied to any lines not being free boundaries
+or isolated lines).<li>
+<li><b>Color of free boundaries</b> - allows to select default color for free boundaries.<li>
+<li><b>Color of edges, vectors and wires</b> - allows to select
+default color for edges, vectors and wires (isolated lines).<li>
+<li><b>Color of points</b> - allows to select default color for
+vertices.<li>
+<li><b>Color of isolines</b> - allows to select default color for
+isolines.<li>
+<li><b>Step Value for Spin Boxes</b> - allows to define the increment
+of values set in spin boxes.<li>
+</ul>
+</ul>
+
+<ul>
+<li><b>Marker of Points</b></li>
+<ul>
+<li><b>Type</b> - allows to select the symbol for representation of
+points (cross, asterisk, etc.).</li>
+<li><b>Size</b> - allows to define the size of the marker from 1
+(smallest) to 7 (largest).</li>
+</ul>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page getting_started_page Getting started
+
+When you start the SALOME Platform, the following initial desktop window appears:
+
+\image html view2.png
+
+ In general, the SALOME platform is destined
+for performance of different numerical calculations and visualization
+of the resulting data. For that purpose, in the SALOME environment the
+following notion is used - \b Study.
+<br>Study represents a working document in which you can realize all
+operations connected with the SALOME functionality.
+<br>SALOME is a multi-study platform. It means that simultaneously you can
+work with several studies.
+
+\note To proceed working in SALOME you should create or open a new study.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page gui_module_page GUI module
+
+<ul>
+<li>\subpage introduction_to_gui_page</li>
+<li>\subpage getting_started_page</li>
+<li>\subpage salome_desktop_page</li>
+<li>\subpage study_management_page</li>
+<ul>
+<li>\ref creating_new_study_page</li>
+<li>\ref opening_studies_page</li>
+<li>\ref saving_and_closing_studies_page</li>
+<li>\ref editing_studies_page</li>
+<li>\ref displaying_studies_page</li>
+<li>\ref working_with_python_scripts_page</li>
+<li>\ref setting_study_properties_page</li>
+</ul>
+<li>\subpage using_object_browser_page</li>
+<li>\subpage using_registry_tool_page</li>
+<li>\subpage using_catalog_generator_page "Using Catalog Generator"</li>
+<li>\subpage viewers_page</li>
+<ul>
+<li>\ref occ_3d_viewer_page</li>
+<li>\ref vtk_3d_viewer_page</li>
+<li>\ref plot2d_viewer_page</li>
+</ul>
+<li>\subpage setting_preferences_page</li>
+<ul>
+<li>\ref setting_preferences_subpage</li>
+<li>\ref select_color_and_font_page</li>
+<li>\ref salome_preferences_page</li>
+<li>\ref geometry_preferences_page</li>
+<li>\ref mesh_preferences_page</li>
+<li>\ref postpro_preferences_page</li>
+</ul>
+</ul>
+
+*/
--- /dev/null
+/*!
+
+\mainpage GUI Module Reference Documentation
+
+<ul>
+<li>\subpage introduction_page</li>
+<li>\subpage about_salome_page</li>
+<ul>
+<li>\ref intro_to_salome_page</li>
+<li>\ref salome_architecture_page</li>
+<li>\ref installing_salome_page</li>
+<li>\ref running_salome_page</li>
+</ul>
+<li>\subpage gui_module_page "GUI module"</li>
+<ul>
+<li>\ref introduction_to_gui_page</li>
+<li>\ref getting_started_page</li>
+<li>\ref salome_desktop_page</li>
+<li>\ref study_management_page</li>
+<ul>
+<li>\ref creating_new_study_page</li>
+<li>\ref opening_studies_page</li>
+<li>\ref saving_and_closing_studies_page</li>
+<li>\ref editing_studies_page</li>
+<li>\ref displaying_studies_page</li>
+<li>\ref working_with_python_scripts_page</li>
+<li>\ref setting_study_properties_page</li>
+</ul>
+</ul>
+<li>\ref using_object_browser_page</li>
+<li>\ref using_registry_tool_page</li>
+<li>\ref using_catalog_generator_page "Using Catalog Generator"</li>
+<li>\ref viewers_page</li>
+<ul>
+<li>\ref occ_3d_viewer_page</li>
+<li>\ref vtk_3d_viewer_page</li>
+<li>\ref plot2d_viewer_page</li>
+</ul>
+<li>\ref setting_preferences_page</li>
+<ul>
+<li>\ref setting_preferences_subpage</li>
+<li>\ref select_color_and_font_page</li>
+<li>\ref salome_preferences_page</li>
+<li>\ref geometry_preferences_page</li>
+<li>\ref mesh_preferences_page</li>
+<li>\ref postpro_preferences_page</li>
+</ul>
+</ul>
+
+
+*/
--- /dev/null
+/*!
+
+\page installing_salome_page SALOME Installation Wizard Help
+
+<hr>
+<ul>
+<li>\ref installing_products "Installing products with the Installation Wizard"
+<ul>
+<li>\ref gui_mode_install "GUI mode"
+<li>\ref batch_mode_install "Batch mode"
+<li>\ref environment_files "Environment files"
+</ul>
+<li>\ref notes_on_check "Notes on check products version procedure"
+<li>\ref pick_up_env "Pick up the environment"
+<li>\ref modifying_xml "Modifying XML configuration file"
+<li>\ref installation_scripts "Implementing installation scripts for the new products"
+<li>\ref finish_buttons "Customizing Readme page buttons"
+</ul>
+<hr>
+\anchor installing_products
+<h1>Installing products with the <em>Installation Wizard</em></h1>
+
+The Installation Wizard can be launched in two modes: \b GUI and \b
+batch.
+<br>The root directory of the Installation Wizard contains Python
+script \b runInstall. To run the Installation Wizard just type \b runInstall.
+in the terminal window:
+<br><br>[ python ] \b runInstall [options]
+
+Without options this script will launch the SALOME Installation
+Wizard in the default mode (GUI). \n The default installation settings
+can be overridden by using command line options. Each option has a
+short and a long notation:
+
+<b>-g / --gui</b>
+\par
+Runs the Installation Wizard in the GUI mode (this is the default
+mode).
+
+<b>-b / --batch</b>
+\par
+Runs the Installation Wizard in the terminal mode.
+
+<b>-f FILE / --file=FILE</b>
+\par
+The XML configuration file to be used by the Installation Wizard. If
+this option is not used then the installation script tries to define
+the \e Linux version and use the corresponding XML file if it exists. For
+examle, for <em>Linux Mandrake 10.1</em> the <b>config_Mandrake_10.1.xml</b> file
+will be used by default. If no appropriate file is found, the file
+<b>config.xml</b> will be used. This file refers to the basic target platform
+which is <em>Linux Mandrake 10.1</em> for SALOME 3.0 and newer. If <b>config.xml</b>
+file is not found either, a warning message box is shown (in GUI mode)
+or printed to the console (in batch mode) and the Installation Wizard
+quits.
+
+<b>-d DIR / --target=DIR</b>
+\par
+The target directory SALOME platform is to be installed to.
+If used, this option overrides the default target directory, given in
+the configuration XML file (usually <b>${HOME}/salome_\<version\></b>,
+see \ref modifying_xml "here" for more details).
+
+<b>-t DIR / --tmp=DIR</b>
+\par
+The directory, which should be used for temporary files. If given,
+this option overrides the default temporary directory, given in the
+configuration xml file (usually \b /tmp, see \ref modifying_xml "here"
+for more information).
+
+<b>-a / --all-from-sources</b>
+\par
+Forces all the products to be installed from sources (including all
+SALOME modules). If this option is used, all default installation
+modes for all products are ignored.
+\n This option is helpful when the user wants to install SALOME on the
+platform which is not officially supported. In this case, the user can
+try to run the SALOME Installation Wizard with the \b -a option in order
+to build all the products from sources.
+\n <b>Note, that this is a time-consuming operation which can take
+more than 24 hours depending on the computer.</b>
+
+<b>-h / --help</b>
+\par
+Prints help information on the Installation Wizard's use.
+
+<b>-v / --version</b>
+\par
+Prints version information (\b Note: this is the Installation Wizard's
+version number, not the number of SALOME platform version).
+
+The installation procedure supports different \em Linux platforms and
+installs various installation 3d-party prerequisite products which are
+required by SALOME platform. As it was mentioned above, the basic
+target platform for SALOME 3.0 and newer is <em>Linux Mandrake 10.1</em>.
+Use of configuration XML files gives a flexible way to modify the list
+of products to be installed by the Installation Wizard without
+changing the program source code. Just create your own XML
+configuration file and implement installation scripts for the
+prerequisite products you need and then use this XML file with the
+Installation Wizard. This can be done, for example, for some Linux
+platform which is not supported directly by the Installation
+Wizard. See \ref modifying_xml "Modifying XML configuration file" and
+\ref installation_scripts "Implementing installation scripts for the new products"
+sections for more information.
+
+<br>
+\anchor gui_mode_install
+<h2>GUI mode</h2>
+
+The <b>Installation Wizard</b> GUI has been developed using
+Trolltech's <b>Qt 3.0.5</b> toolkit. After launching the Installation
+Wizard in the GUI mode the wizard window is shown to the user. This
+wizard guides the user through several subsequent pages. To navigate
+between the pages use \em "Next" and \em "Back" buttons in the lower
+part of the wizard window. The \em "Cancel" button closes the wizard
+window and quits the installation procedure after the user's
+confirmation. The \em "Help" button opens an additional window to show
+help information.
+
+The first \em "Introduction" page is shown in \ref figure_1 "Figure 1".
+Skip this page by clicking \em "Next":
+
+\anchor figure_1
+\image html intropage.png
+\n <center><b>Figure 1:</b> "Introduction" page</center>
+
+In the second page you are proposed to enter the target directory
+where the SALOME platform should be installed to. You can also click
+<em>"Browse..."</em> and choose the destination folder using the standard
+browse directory dialog box.
+\n If the directory you want to install products to does not exist you
+are prompted to confirm directory creation. If you type a wrong
+directory path, or if you do not have write permissions
+for the directory you use, the corresponding message box is shown.
+
+You can also change the temporary directory (which is used to store
+temporary files required for the installation).
+\n In the bottom part of the window the total disk space required for
+the installation and for the temporary files is displayed (see below
+for more details).
+
+In the GUI mode the Installation Wizard provides two different options
+to install the SALOME platform: \b basic (default option) and
+\b advanced. In the \b basic mode the user should enter the target
+installation directory and temporary folder. All other installation
+options are taken from the XML configuration file (see \ref figure_2 "Figure 2"):
+
+\anchor figure_2
+\image html productpage1.png
+\n <center><b>Figure 2:</b> "Installation settings"</center>
+
+In addition, you have a choice to use "Install all products from
+sources" check box. If this option is turned on, all the products will
+be installed from the sources (using their own build procedures). This
+check box corresponds to the <b>--all-from-sources (-a)</b> option of
+the \b runInstall script (see \ref installing_products "here").
+
+\Note <b>Installation of all products from sources is a long-time
+operation.</b>
+
+To switch to the \b advanced option, click <em>"More..."</em> (see
+\ref figure_3 "Figure 3" ).
+
+In the advanced mode you have a possibility to select products to be
+installed. Each product can have several options of installation: you
+have a possibility to use the native product (provided with Linux
+distribution and installed in the system folders), install already
+precompiled binaries, build the product from sources or not install it
+at all. Available options and default option are taken from the XML
+configuration file. You can mark the products you want to install by
+clicking the corresponding radio-buttons in the list view in the left
+part of the page.
+\n Note, that some products may require some other pre-requisite
+products to be installed (or these prerequisite products should be
+already available on your computer). The installation procedure has a
+special feature to automatically mark these products in the list
+view. For example, in order to install \b PyQt it is necessary to have
+<b>gcc, Python, Qt</b> and \b Sip installed. Therefore all these
+products will also be turned on when you check on \b PyQt. This
+feature can be switched off by clicking the <em>"Automatic
+dependencies"</em> checkbox. Turn on this checkbox if you want all
+prerequisite products to be automatically checked when you select some
+product to be installed. Turn off this checkbox if you want to disable
+this feature.
+
+\anchor figure_3
+\image html productpage.png
+\n <center><b>Figure 3:</b> "Installation settings" page in the 'advanced' mode</center>
+
+If you want to use native products (like \b gcc, \b tcl, etc.), select <em>"use
+native"</em> option.
+\n Special button in the right part of the page - <em>"Unselect All"</em> -
+allows to reset quickly all products to the <em>"not install"</em> state.
+<br><br>
+There are also two checkboxes on this page: <em>"SALOME sources"</em>
+and <em>"SALOME binaries"</em>. These three-state checkboxes allow
+quick selecting/unselecting sources/binaries packages of SALOME
+modules for installation.
+<br><br>
+In addition, when some SALOME sources are selected, one more check box
+becomes available: <em>"Build SALOME sources"</em>. If this option is
+turned on, the selected SALOME modules will be built and installed
+from sources.
+
+\note <b>If this check box is turned on, the corresponding SALOME
+module binaries package installation is disabled, because of SALOME
+module sources and binaries packages conflict</b> (see \ref figure_4 "Figure 4" below).
+
+\anchor figure_4
+\image html productpage2.png
+\n <center><b>Figure 4:</b> "Build SALOME sources" check box
+usage</center>
+
+The box at the right side of the page displays the information about
+currently highlighted product: name, version and short description,
+required disk space, disk space required for temporary files, list of
+prerequisites (this information is provided in the XML file) and
+current user choice.
+<br><br>
+The <em>"Disk space required:"</em> field displays how much disk space
+on the hard drive is required for installation of selected products.
+
+\note <b>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.</b>
+
+The installation procedure uses a special directory to store temporary
+files. The <em>"Space for temporary files:"</em> field shows the information
+about required disk space on the hard drive for extracting and
+compiling the selected products. You can change the temporary
+directory - just type a path to the folder you want to use or click on
+the corresponding <em>"Browse..."</em> button.
+
+\note Actually, temporary files are not stored directly in the
+directory entered by the user. The Installation Wizard creates an
+additional folder in this directory named something like
+INSTALLWORK<b>XXXXX</b> where XXXXX is a unique number. This allows to launch
+several Installation Wizards simultaneously. This temporary directory
+is removed automatically when the installation finishes.
+
+The installation procedure also checks the available disk space. If
+there is not enough disk space on your hard drive you will see a
+corresponding error message box.
+
+\note <b>You are strongly recommended not to use directory names
+containing spaces</b>. Otherwise you can experience
+some troubles with the installation.
+
+To proceed further click <em>"Next"</em>. At this moment the program will make
+some tests to check installation settings: if there is enough disk
+space on the hard drive, check for native products installation,
+dependencies (prerequisites) for each product you have selected to be
+installed. If any test fails you will see the corresponding warning
+message box. Otherwise the wizard will proceed to the next page:
+
+\anchor figure_5
+\image html choicepage.png
+\n <center><b>Figure 5:</b> "Check your choice" page</center>
+
+This page summarizes the installation options you've made on the
+previous pages. You can check again your choice and change it if
+necessary by getting back to the previous page.
+\n When you are sure that everything is OK, click <em>"Next"</em> to
+follow to the \ref figure_6 "next page".
+
+\anchor figure_6
+\image html progresspage1.png
+\n <center><b>Figure 6:</b> "Installation progress" page</center>
+
+To start installation of the selected products click "Start". It
+launches the shell installation script and you will be able to see the
+output of the script in the dialog topmost frame. If any errors occur
+during the installation progress the corresponding messages will be
+printed to the log window in bold red font.
+
+It is possible to break the installation at any time by clicking
+"Stop". Then you can get back to the previous pages if you wish to
+change installation settings or restart installation by pressing again
+"Start" button.
+
+\note <b>In the current implementation it is not possible to resume
+the stopped installation process; it will be re-started from the very
+beginning.</b>
+
+\anchor figure_7
+\image html progresspage.png
+\n <center><b>Figure 7:</b> "Installation progress" page: installation in progress</center>
+
+The <em>"Installation Status"</em> frame window shows you the progress of
+installation. \c "Waiting" status means that installation of this product
+has not been started yet. The product currently being installed is
+marked as \c "Processing". All installed products have \c "Completed"
+status.
+
+You can abort installation and close the installation procedure using
+\em "Cancel" button.
+
+\note <b>This button sends the signal "SIGTERM" to the shell
+script. The script tries to clear all temporary files. The process of
+removing temporary files can take some time, so the installation
+wizard will wait 3 seconds before closing.</b>
+
+At the end of installation (all selected products have been installed
+successfully) you can go back to the previous pages to start a new
+installation or click \em "Next" to go the Readme page:
+
+\anchor figure_8
+\image html readmepage.png
+\n <center><b>Figure 8:</b> "Finish installation" page</center>
+
+In this page you can read important information about the Instalation
+Wizard itself and some tips: how to run and test SALOME or how to
+build SALOME from the sources. This is the contents of the README file
+which you can find in the root directory of the Installation Wizard.
+
+You can also launch SALOME Desktop from this page or read the Release
+Notes file by clicking on the corresponding buttons in the lower part
+of the page (see \ref modifying_xml "here" and \ref finish_buttons
+"here" for more information about customizing these buttons).
+
+<br>
+\anchor batch_mode_install
+<h2>Batch mode</h2>
+
+To launch the Installation Wizard in the batch mode use -\b b (--\b batch)
+parameter.
+\n In this mode the GUI wizard is not shown but all the installation
+status is displayed directly in the console. In the batch mode the
+user does not have a possibility to change installation settings which
+are given in the configuration file, except target and temporary
+directories which can be overridden by the corresponding command line
+options.
+\n The only exception is --\b all-from-sources (-\b a) option which enables
+special installation mode in which all the products (including SALOME
+modules) are installed from sources, ignoring the default mode defined
+in the XML configuration file (see \ref installing_products "here" for details).
+
+\anchor figure_9
+\image html batchmode.png
+\n <center><b>Figure 9:</b> Batch mode</center>
+
+<br>
+\anchor environment_files
+<h2>Environment files</h2>
+
+During the process of installation the script creates some environment
+files to simplify the procedure of launching SALOME. These shell
+scripts set all necessary environment variables for all products you
+have installed. To learn how installation scripts collects the
+environment, see \ref pick_up_env "here". These files are: \b
+salome.csh + \b salome.sh in the <b><em>KERNEL module sources</em></b>
+and <b><em>KERNEL module binaries</em></b> root directories and
+\b env_products.csh + \b env_products.sh and \b env_build.csh +
+\b env_build.sh in the target installation directory.
+
+\note there is some difference between these files: \b env_build.*
+files are optimized to be used for building SALOME modules from
+sources (see \b README file provided with the installation procedure
+on the CD). The \b env_products.* (and \b salome.*) files are
+optimized for SALOME launching. The behavior is defined by the
+environment variable \b ENV_FOR_LAUNCH which is set to \b 0 in
+env_build.* files and to \b 1 in env_products.* (salome.*) files.
+
+<br>
+<hr>
+\anchor notes_on_check
+<h2>Notes on <em>check products version</em> procedure</h2>
+
+Unfortunately there is no exact algorithm to identify the product
+version under Linux platform. The information in this section gives an
+idea how the version is checked for the native/preinstalled products
+(this information refers to the base platform <em>Linux Mandrake
+10.1</em>; and the same algorithms are used for other platforms).
+
+The general rule for all products is that the path to the binaries
+should be set via the \b PATH environment variable, path to the libraries
+should be set via the \b LD_LIBRARY_PATH variable and the python modules
+should be available via the \b PYTHONPATH variable.
+
+\note the information given in this section refers to the prerequisite
+products for SALOME version 3.2.4.
+
+<ul>
+<li>gcc 3.4.1
+\n\n Version number is checked by <b>gcc -dumpversion</b> command. The \b gcc
+executable should be in the \b PATH environment variable. Version should
+be equal to "3.4.1". It is recommended to use native gcc on Mandrake
+10.1.<br><br>
+</li>
+<li>tcl/tk 8.4.5
+\n\n Version number for \b tcl/tk can be found in tclConfig.sh and
+tkConfig.sh files (\b TCL_VERSION and \b TK_VERSION variables
+correspondingly). Version number should be equal to "8.4" (release
+number is not checked). Set the \b TCLHOME environment variable to the
+root directory of tcl/tk installation. It is recommended to use native
+tcl/tk on Mandrake 10.1.<br><br>
+</li>
+<li>boost 1.31.0
+\n\n Version number is defined by \b version.hpp file which is part of
+the boost distribution. This file defines the \b BOOST_VERSION macro
+which should be equal to "103100". In addition the existence of boost
+libraries is checked. Set the \b BOOSTDIR environment variable if you
+have a preinstalled version of boost.<br><br>
+</li>
+<li>Python 2.3.4
+\n\n Version number is checked by \b python -\b V command. The \b python
+executable should be in the \b PATH environment variable. Version
+number should be equal to "2.3.4". It is recommended to use native
+Python on Mandrake 10.1. Set the \b PYTHONHOME environment variable if
+you have a preinstalled version of Python.<br><br>
+</li>
+<li>Swig 1.3.24
+\n\n Version number is checked by \b swig -\b version command. The \b swig
+executable should be in the \b PATH environment variable. Version number
+should be equal to "1.3.24".
+<br><br>
+</li>
+<li>Qt 3.3.3
+\n\n Version number is defined by \b qglobal.h file which is part of the
+Qt distribution. This file defines \b QT_VERSION_STR macro which should be equal to "3.3.3". It is recommended to use native Qt on Mandrake 10.1.
+\n Set the \b QTDIR environment variable if you have a preinstalled version of qt.<br><br>
+</li>
+<li>msg2qm
+\n\n \b msg2qm is a Qt tool which is used to convert text *.po files
+to *.qm resource files. Unfortunately this tool is not included to the
+Linux distribution and provided only in Qt sources package. This is
+the reason why this tool is supplied with the SALOME Installation
+Wizard. There is no way to check the version number of msg2qm tool. Just set
+\b MSG2QM_ROOT environment variable if you have a preinstalled version
+of msg2qm tool.<br><br>
+</li>
+<li>Open CASCADE 6.1.2a2
+\n\n Version number is defined by \b Standard_Version.hxx file which
+is part of the Open CASCADE distribution. This file defines \b
+OCC_VERSION_MAJOR, \b OCC_VERSION_MINOR and \b OCC_VERSION_MAINTENANCE
+macros which should refer to version 6.1.2. \n Set the CASROOT
+environment variable if you have a preinstalled version of Open
+CASCADE.<br><br>
+</li>
+<li>qwt 4.2.0/0.4.2
+\n\n Version number is defined by \b qwt_global.h file which is part of
+the qwt distribution. This file defines \b QWT_VERSION_STR macro which should be equal to "4.2.0".
+\n Set the \b QWTHOME environment variable if you have a preinstalled version of qwt.<br><br>
+</li>
+<li>hdf 5-1.6.4
+\n\n Version number is defined by \b libhdf5.settings file which is
+part of the \b hdf5 distribution. Version should be equal to 1.6.4.
+\n Set the \b HDF5HOME environment variable if you have a preinstalled
+version of hdf5.<br><br>
+</li>
+<li>med 2.2.3
+\n\n Unfortunately there is no formal way to check med version
+number. We check existence of libmed.so.1.0.2 library on the
+computer. If you have any problem with a preinstalled version of med,
+please, reinstall it.
+\n Set the \b MED2HOME environment variable if you have a preinstalled
+version of med.<br><br>
+</li>
+<li>Vtk 4.2.6
+\n\n Unfortunately there is no formal way to check VTK version
+number. We just check the existence of \b libvtkCommon.so library on
+the computer and hope that it is of version we need. If you have any
+problem with a preinstalled version of Vtk, please, reinstall it.
+\n Set the \b VTKHOME environment variable if you have a preinstalled
+version of Vtk.<br><br>
+</li>
+<li>OmniORB 4.0.5, OmniORBpy 2.5, OmniNotify 2.1
+\n\n We just check existence of some omniORB libraries and executable
+on the computer, like \b libomniORB4.so.0.5, \b _omnipymodule.so.2.4,
+\b libCOSNotify4.so.0.1 and \b notifd. \n Set the \b OMNIORBDIR
+environment variable if you have a preinstalled version of omniORB
+products.<br><br>
+</li>
+<li>sip 4.1
+\n\n Version number is checked by \b sip -\b V command. The \b sip
+executable should be in the \b PATH environment variable. Version number should be equal to "4.1".
+\n Set the \b SIPDIR environment variable to the directory where you
+have sip executable preinstalled.<br><br>
+</li>
+<li>PyQt 3.13
+\n\n Version number is defined by \b pyqtconfig.py Python module file
+which is part of the \b PyQt distribution. Version should be equal to "3.13".
+\n Set the \b PYQTDIR environment variable if you have a preinstalled
+version of PyQt.<br><br>
+</li>
+<li>netgen 4.5
+\n\n Unfortunarely we can't find anything about netgen version. We
+just check if \b NETGENROOT environment variable is set. \n Set the\b
+NETGENROOT environment variable if you have a preinstalled version of
+netgen mesher.<br>
+\note netgen 4.5 provided with the SALOME installation Wizard has been patched to improve its performance.
+</li>
+<li>Numeric 23.7
+\n\n Version number is checked by <b>python -c 'import Numeric; print
+Numeric.__version__'</b> command. The \b python executable should be
+in the \b PATH environment variable and \b Numeric module should be
+available for the Python (for example it should be in the \b PYTHONPATH environment variable). Version number should be equal to "23.7". If you have any problem with a preinstalled version of Numeric 23.7, please, reinstall it.
+\n Add the directory where you have a preinstalled version of Numeric
+package to the the \b PYTHONHOME environment variable.<br><br>
+</li>
+<li>graphviz 2.2.1
+\n\n Version number is checked by \b dot -\b V command. The dot
+executable should be in the \b PATH environment variable. Version
+number should be equal to "2.2.1". \n Add \b graphviz bin directory to
+the the \b PATH environment variable.<br><br>
+</li>
+<li>doxygen 1.4.6
+\n\n Version number is checked by \b doxygen --\b version command. The
+\b doxygen executable should be in the \b PATH environment
+variable. Version number should be equal to "1.4.6".<br><br>
+</li>
+<li>\b SALOME module \b sources (3.2.4).
+\n\n For each SALOME module sources package (KERNEL, GUI, GEOM,
+etc...) the root directory contains file configure.in (configure.ac)
+which defines version information.\n Set the \b \<MODULE\>_SRC_DIR environment variable for each SALOME \b
+MODULE sources package installed (where \b MODULE is KERNEL, GUI,
+GEOM, ...).<br><br>
+</li>
+<li>\b SALOME module \b binaries (3.2.4)
+\n\n For each SALOME module binaries package (KERNEL, GUI, GEOM,
+etc...) the \b bin/salome directory contains file \b VERSION which
+defines version information.\n Set \<MODULE\>_ROOT_DIR environment
+variable for each SALOME \b MODULE binaries package installed (where
+\b MODULE is KERNEL, GUI, GEOM, ...).<br><br>
+</li>
+</ul>
+
+If you have native products installed to directories different from
+default ones (not \b /usr/bin, \b /usr/lib...), it is recommended to follow
+the above mentioned instructions. Or you should properly set \b PATH and
+\b LD_LIBRARY_PATH variables \em before starting the Installation
+Wizard. Otherwise the installation script will fail to find
+preinstalled/native products.
+
+\note for some native products (e.g. gcc, Python) the rules of version
+checking are not so strict as described above. Only major and minor
+version numbers should coincide with the prerequisite. Newer version
+of the product can also be used. If some native product has version
+number larger than that required by the installation procedure, the
+user will be prompted by the warning message like this: "<em>You have
+newer version of gcc installed on your computer than that is required
+(3.4.1). Continue?</em>". You can click "\em Yes" to proceed with the
+installation but in this case you should be aware of what you are
+doing. SALOME binaries (including other products) are compiled with
+the predefined prerequisites and most likely can not be run
+successfully if these products are not found. This can be helpful only
+if you plan to build all products from sources.
+
+<br>
+<hr>
+\anchor pick_up_env
+<h2>Pick up the <em>environment</em></h2>
+
+Please, read the following information carefully . This section
+describes how the installation procedure generates the environment
+scripts for the SALOME platform being installed.
+<br><br>
+After installing each product shell the script creates a special
+environment file for the product in its installation folder. The name
+of the file is generated from the name of product by the following
+scheme: \b env_<product_name>.sh (for example \b env_Vtk.sh for the
+Vtk). This file includes all necessary environment settings. At the
+final step of the installation the script picks up all the settings
+files and generates two common environment files from them: \b salome.sh
+and \b salome.csh for \b bash and \b csh shells correspondingly. Such approach
+helps to save time when reinstalling products and you may not bother
+about setting all environment variables manually to build/launch
+SALOME. What you simply need is to source one of these environment
+files.
+<br><br>
+This also concerns those products which are not being installed. For
+example, you install some SALOME binaries to the directory where you
+have previously installed other products. The Installation procedure
+tries to collect environment files from the target directory if it
+finds necessary products installed there. If some product is not found
+in the target directory the corresponding section of
+\b salome.sh/salome.csh files will be skipped.
+\n For native products (like \b gcc, \b tcl, etc...) the installation
+procedure tries to find them first using \b PATH / \b LD_LIBRARY_PATH
+variables and then in the system default directories (\b /usr/bin,
+\b /usr/lib etc., depending on the product).
+<br><br>
+In any case you may edit \b salome.* files after the installation
+procedure finishes, if you want.
+
+\note As it was mentioned \ref environment_files "above" there are
+other environment files which are generated by the installation
+procedure: \b env_products.csh + \b env_products.sh and \b env_build.csh +
+\b env_build.sh. These files can be found in the target installation root
+directory.
+
+<br>
+<hr>
+\anchor modifying_xml
+<h2>Modifying <em>XML</em> configuration <em>file</em></h2>
+
+You can create your own XML configuration file. The Installation
+Wizard can then take it as a command line argument to provide a list
+of products you want to install with it. The list of products and some
+other settings for the Installation Wizard are provided in the XML
+file. The default file which Installation Wizard looks for if no
+command line arguments are given, is \b config.xml.
+\n This section describes the structure of the configuration file.
+\n Optional sections/tags are in brackets.
+
+\code
+<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> ]
+ />
+ ]
+ [ <button label=<button_label>
+ [ tooltip=<button_tooltip> ]
+ script=<button_script>
+ [ disable=<disable_flag> ]
+ />
+ ]
+ [ <button ...
+ />
+ ]
+ [ <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>
+\endcode
+
+<b>\<config\> section</b>
+\n\n This is an optional section; it provides general information about
+the Installation Wizard itself.
+<br><br>
+Attributes:
+<ul>
+<li><b>version</b>
+\n\n The application version number to be shown in the caption.<br><br>
+</li>
+<li><b>caption</b>
+\n\n The application main window caption - if this string contains
+'\%1' text the title will contain the version number in this place (see
+above).<br><br>
+</li>
+<li><b>copyright</b>
+\n\n The application copyright information (shown in the first
+page).<br><br>
+</li>
+<li><b>license</b>
+\n\n The application license information (shown in the first
+page).<br><br>
+</li>
+<li><b>os</b>
+\n\n This parameter defines the directory (relative from
+./Products/BINARIES) where the Installation Wizard will search
+precompiled binaries packages. If this tag is not provided, binaries
+packages are looked for in the ./Products/BINARIES directory.<br><br>
+</li>
+</ul>
+
+<b>\<path\> section</b>
+\n\n This is an optional section; it defines default installation
+directories.
+<br><br>
+Attributes:
+<ul>
+<li><b>targetdir</b>
+\n\n The target directory - the path to the directory where products
+should be installed.<br><br>
+</li>
+<li><b>tempdir</b>
+\n\n The temporary directory - the path to the directory for the
+temporary files.<br><br>
+</li>
+</ul>
+
+<b>\<product\> section</b>
+\n\n This section describes product to be installed with the
+Installation Wizard. The XML file should include a \<product\> section
+for each product to be installed. The products appear in the tree view
+and are installed in the order they are described in the configuration
+file. It is recommended (but not obligatory) to define native products
+at the top of the list before all other products.
+<br><br>
+Attributes:
+<ul>
+<li><b>name</b>
+\n\n Product name.<br><br>
+</li>
+<li><b>version</b>
+\n\n Product version.<br><br>
+</li>
+<li><b>description</b>
+\n\n Product description (optional).<br><br>
+</li>
+<li><b>context</b>
+\n\n Context (optional). The possible values are '<b>salome
+sources</b>', '<b>salome binaries</b>' and '<b>prerequisite</b>'
+(several contexts can be given separated by ":" symbol).<br><br>
+</li>
+<li><b>supported</b>
+\n\n Supported modes of installation. Several modes can be separated
+by comma. Possible value are: <em>install sources, install binaries, use
+native</em>. The Installation script should contain the corresponding
+functions for each of the supported installation modes (see
+\ref installation_scripts "here").<br><br>
+</li>
+<li><b>install</b>
+\n\n Default (starting) installation mode.<br><br>
+</li>
+<li><b>disable</b>
+\n\n If this optional flag has 'true' value, the corresponding product
+will not appear in the list of products and will not be
+installed.<br><br>
+</li>
+<li><b>pickupenv</b>
+\n\n This flag points that pickup environment procedure should be
+performed for this product. If this flag equal to 'true', salome.sh
+and salome.csh files will be created in the product installation
+directory. Usually this option is set to true for SALOME KERNEL module
+sources and binaries package. This is an optional key, default value
+is 'false'.<br><br>
+</li>
+<li><b>dependancies</b>
+\n\n List of prerequisite products, which are necessary to build this
+product, separated by comma.<br><br>
+</li>
+<li><b>installdiskspace</b>
+\n\n Total amount of space (integer, in Kbytes), which the product
+occupies on the hard drive after the installation.<br><br>
+</li>
+<li><b>temporarydiskspace</b>
+\n\n Disk space (integer, in Kbytes) for temporary files, which is
+necessary to build the product from the sources.<br><br>
+</li>
+<li><b>script</b>
+\n\n The installation script name. This script is in charge of the
+installation of the product. It is called automatically by the
+Installation Wizard when necessary from the main program.
+See the \ref installation_scripts "next section" for more information.<br><br>
+</li>
+</ul>
+
+<b>\<button\> section</b>
+\n\n This is an optional section. It allows customization of the last
+"Finish installation" page of the Installation Wizard by adding one or
+more buttons in the lower part of the wizard's window. The script
+which is attached to each such button, can perform some specific
+action, for example, launch the application or show the Release Notes
+file by using an external program. See \ref finish_buttons "here" for
+more details about writing scripts.<br><br>
+Attributes:
+<ul>
+<li><b>label</b>
+\n\n This is the button text.<br><br>
+</li>
+<li><b>tooltip</b>
+\n\n The button tooltip (optional).<br><br>
+</li>
+<li><b>script</b>
+\n\n The script attached to the button.<br><br>
+</li>
+<li><b>disable</b>
+\n\n If this optional flag has 'true' value, the corresponding button
+will not appear in the "<em>Finish installation</em>" page - the section of XML
+file is silently ignored.<br><br>
+</li>
+</ul>
+
+\note If you add new products to be installed with Installation
+Wizard, you should also provide installation script for this
+product. See the next section for more details.
+
+<br>
+<hr>
+\anchor installation_scripts
+<h2>Implementing <em>installation scripts</em> for the new products</h2>
+
+When you want some product to be installed with the Installation
+Wizard, you should add its description \ref modifying_xml "to the configuration file"
+and create the installation script, following the rules described in this section.
+
+There are some obligatory functions which should be implemented in
+this installation script. These functions are automatically called by
+the master installation script or/and its GUI shell when it is
+necessary. \n File \b common.sh contains some service functions which can
+be used in your installation script, like \b make_env(), \b make_dir(),
+\b try_existing(), \b sort_path(), \b find_in_path(), etc.
+
+<ul>
+<li><b>check_version()</b>
+\n\n This function allows to check the version of the product already
+installed on the computer. It should try to find the product (native
+or preinstalled in the target directory) and check its version. This
+helps to avoid unnecessary reinstallation. This is an internal
+function and is not called from the master installation
+script.<br><br>
+</li>
+<li><b>try_native()</b>
+\n\n This function is called when the 'use native' installation mode
+is selected by the user. The function should try to find a native
+version of the product and define possibility of its use. It should
+create the environment file for the product in the temporary directory
+(see also the description of \b print_env() function). It is not
+necessary to implement this function if you do not provide native mode
+installation.<br><br>
+</li>
+<li><b>install_source()</b>
+\n\n This function is called when the 'install sources' installation
+mode is selected by the user. The function is responsible for building
+the product from the sources package. It should create the environment
+file for the product in the temporary directory (see also description
+of \b print_env() function). It is not necessary to implement this
+function if you do not provide sources mode installation.<br><br>
+</li>
+<li><b>install_source_and_build()</b>
+\n\n This function is called when SALOME module is installed and the
+--\b all-from-sources (-\b a) option is used (<em>"Build SALOME sources"</em>
+check box in GUI mode). This function should be used to unpack SALOME
+sources package and then call the build/install procedure for it.
+For more details please refer to the \ref installing_products "this"
+and \ref gui_mode_install "this" sections for more details.<br><br>
+</li>
+<li><b>install_binary()</b>
+\n\n This function is called when the <em>'install binaries'</em> installation
+mode is selected by the user. The function is responsible for the
+extracting of the product from the binaries package. It should create
+environment for the product in the temporary directory (see also
+description of \b print_env() function). It is not necessary to implement
+this function if you do not provide binaries mode
+installation.<br><br>
+</li>
+<li><b>try_preinstalled()</b>
+\n\n This function is called when the 'not install' installation mode
+is selected by the user. In this case the script should inspect the
+target directory to try to find an already preinstalled product, pick
+up and check the environment from there. See \ref pick_up_env "here" for more
+details.<br><br>
+</li>
+<li><b>print_env()</b>
+\n\n This function is in charge of creating the environment script. It
+should create a file with name \b 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.<br><br>
+</li>
+<li><b>pickup_env()</b>
+\n\n This procedure corresponds to the \b pickupenv tag of the
+configuration xml file (see previous section). It should call the
+\b make_env procedure to perform the pick-up environment procedure for
+the product.<br><br>
+</li>
+</ul>
+
+The calling signature of the product installation script is the following:
+<b>\<product_script_name\> \<function_name\> \<temp_folder\>
+\<products_directory\> \<target_directory\> \<dependancies\>
+\<product_name\></b>
+\n\n where \n\n
+<b>\<product_script_name\></b> - installation script name (described in the
+configuration xml file);\n
+<b>\<function_name\></b> - the name of function, corresponding to the selected
+installation mode: \em try_native, \em install_source, \em install_binary or
+\em try_preinstalled;\n
+<b>\<temp_folder\></b> - temporary files directory;\n
+<b>\<products_directory\></b> - directory where the sources/binaries package
+can be found. You should provide the sources package in the
+<em>\<Install_Wizard_root_directory\>/Products/SOURCES</em> directory and
+binaries package in the
+<em>\<InstallWizard_root_directory\>/Products/BINARIES/\<os_version\></em>, where
+\<os_version\> is the target platform description, which appears in the
+corresponding section of the \ref modifying_xml "configuration xml file";
+<em>\<target_directory\></em> - root target directory where the product should be installed to;
+<em>\<dependancies\></em> - single-quoted list of prerequisite products, separated by space;
+<em>\<product_name\></em> - product name itself.
+
+\b Example:
+\n <em>med-2.2.3.sh install_binary /tmp/work
+./Products/BINARIES/Mandrake10.1 /usr/salome 'gcc Hdf' med</em>
+
+Copy the created script into the
+<em>\<Install_Wizard_root_directory\>/config_files</em> sub-directory where all
+installation scripts are stored. Installation Wizard will
+automatically search and call your script during the installation
+procedure.
+
+<br>
+<hr>
+\anchor finish_buttons
+<h2>Customizing <em>Readme page</em> buttons</h2>
+
+The Installation Wizard allows customizing the look-n-feel of the last
+<em>"Finish installation"</em> page. If you want to add one or more buttons to
+this page in order to perform some specific actions at the end of the
+installation (for example, to show the Release Notes file by using
+Open Office) you can put an additional section to the XML
+configuration file. This is the \b \<button\> section (see
+\ref modifying_xml "here" for more details).
+
+To implement the action which will be performed when the user clicks
+the button, you need to create a script and put it to the
+<em>\<Install_Wizard_root_directory\>/config_files</em> directory.
+\n There are some obligatory functions which should be implemented in
+this script. These functions are automatically called by the
+Installation Wizard GUI.
+
+<ul>
+<li><b>check_enabled()</b>
+\n\n This procedure is called by the Installation Wizard when the
+<em>"Finish installation"</em> page is displayed and the status of the buttons
+should be modified according to the installation options. This
+procedure should return \b 0 if the corresponding action can be performed
+and, thus, the button should become enabled. Otherwise, it should
+return \b 1 - in this case the corresponding button will be
+disabled.<br><br>
+</li>
+<li><b>execute()</b>
+\n\n This procedure is invoked when the user clicks the button. This
+procedure should return \b 0 if the corresponding action is done
+successfully and \b 1 if any error occurs.<br><br>
+</li>
+</ul>
+
+The calling signature of the script is the following:
+\n <b>\<product_script_name\> \<function_name\> \<target_directory\>
+\<temp_folder\></b>
+\n\n where \n\n
+\b \<product_script_name\> - the script name itself (retrieved from the XML configuration xml file);
+\n \b \<function_name\> - the name of function;
+\n \b \<target_directory\> - root target directory where the product is installed to;
+\n \b \<temp_folder\> - temporary files directory;
+
+\note The standard Installation Wizard buttons "Launch SALOME" and
+"Release Notes" are implemented with this feature. Refer to scripts
+\b start_salome.sh and \b release_notes.sh for sample implementation.
+
+\note Any button (even standard) can be ignored by the Installation
+Wizard if the attribute \b \<disable\> in the XML configuration file is set
+to the "true" value.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page intro_to_salome_page Introduction to SALOME
+
+
+\b SALOME platform represents a generic open source platform for pre-
+and post-processing in numeric simulations. \b 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.
+
+\image html image54.jpg
+
+<br>SALOME platform integrates a number of modules each having its own function:
+<ul>
+<li>\b KERNEL : provides a common shell for all components, which can be integrated into the SALOME platform.
+<li>\b GUI : provides visual representation: basic widgets, viewers
+etc. Third party modules optionally can have GUI, but in any case they always connected with KERNEL.
+<li>\b Geometry : facilitates construction and optimization of geometrical models using a wide range of CAD functions.
+<li>\b Mesh : generates meshes on geometrical models previously created or imported by the Geometry component.
+<li>\b Supervisor : provides tools for construction of graphs and execution of calculations.
+<li>\b Post-Pro : performs data visualization.
+<li>\b MED : allows to work with MED files.
+</ul>
+
+*/
--- /dev/null
+/*!
+
+\image html icon_about.png
+
+\page introduction_page Introduction
+
+<br>
+
+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.
+\n 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:
+<ul>
+<li>3D modeling (bottom-up construction, import, healing);
+<li>Visualization;
+<li>Computational schemas management;
+<li>Post-processing.
+</ul>
+
+SALOME is tailored for integration of custom components:
+<ul>
+<li>CAD interfaces;
+<li>Mesh generators;
+<li>Finite Element solvers with specific pre-processors.
+</ul>
+
+The SALOME platform is available in Open Source.
+
+<b>Salome Platform:</b>
+<ul>
+<li>Supports interoperability between CAD modeling and computation software (CAD-CAE link)
+<li>Makes easier the integration of new components on heterogeneous systems for numerical computation
+<li>Sets the priority to multi-physics coupling between computation software
+<li>Provides a generic user interface, user-friendly and efficient, which helps to reduce the costs and delays of carrying out the studies
+<li>Reduces training time to the specific time for learning the software solution which has been based on this platform
+<li>All functionalities are accessible through the programmatic
+integrated Python console
+</ul>
+
+\image html image65.gif
+
+<b>What can you do in SALOME? (Some of SALOME main functions)</b>
+<ul>
+<li>Define geometrical models (create/modify geometrical items), import and export them using the BREP, IGES and STEP formats;
+<li>Define meshing of these geometrical items, import and export them;
+<li>Handle physical properties and quantities attached to geometrical items, import and export them to a reusable format;
+<li>Perform computations using a solver (optionally provided): read input data, configure the solver, and write calculation results);
+<li>Visualize result fields in 3D, 2D and export images of their visualization to an appropriate format;
+<li>Manage study schemes: definition, save/restore;
+<li>Manage computation schemes: definition, execution.
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page introduction_to_gui_page Introduction to GUI
+
+\b GUI (Graphical User Interface) provides a common shell for all components, which can be integrated into the SALOME platform.
+
+\b GUI component in SALOME platform provides:
+<ul>
+<li>Common desktop environment (\ref salome_desktop_page "SALOME desktop") for all
+components</li>
+<li>Component integration and management: uploading, switching,
+component menus/toolbars handling</li>
+<li>Study management (creation, saving, loading, editing studies)</li>
+<li>Multi-window management in the framework of one study</li>
+<li>Management of objects created or imported into the SALOME
+application (\ref using_object_browser_page "Object Browser")</li>
+<li>Integrated Python interpreter</li>
+<li>Output messages window</li>
+<li>Additional tools : \ref using_catalog_generator_page "Catalogue Generator",
+\ref using_registry_tool_page "Registry tool"</li>
+<li>Standard viewers for data visualization:</li>
+<ul>
+<li>VTK 3d viewer
+<li>OCC 3d viewer
+<li>Gauss Points viewer
+<li>Plot 2d viewer
+<li>Supervision viewer
+</ul>
+</ul>
+
+
+
+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.
+\n 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
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page mesh_preferences_page Mesh preferences
+
+In the Mesh module you can set mesh preferences, which can be used in
+later sessions with this module.
+
+<h2>General Preferences</h2>
+
+\image html pref21.png
+
+<ul>
+<li><b>Update</b></li>
+<ul>
+<li>If you toggle <b>Automatic Update</b> checkbox, the model in your
+viewer automatically updated whenever you make changes in it.</li>
+</ul>
+<li><b>Quality Controls</b></li>
+<ul>
+<li>If you toggle <b>Display entity</b>, both faces and edges of an
+object will be displayed in the viewer by default.</li>
+<li>If you toggle <b>Use precision</b> checkbox, you can display numbers in
+<b>Quality Control</b> diagrams at the necessary level of precision.</li>
+</ul>
+<li><b>Precision</b> - can be defined by the <b>Number of digits after point</b> in
+the corresponding field. By default, numbers in <b>Quality Control</b>
+diagrams are presented as integers.</li>
+<li><b>Display mode</b> - allows to set Wireframe, Shading, Nodes or Shrink
+presentation mode as default.</li>
+<li><b>Mesh export</b></li>
+<ul>
+<li>If you toggle <b>Automatically create groups for MED export</b> checkbox,
+this operation will be carried out automatically.</li>
+<li>If you toggle <b>Automatic renumbering</b> checkbox, the exported
+mesh will be renumbered automatically</li>
+</ul>
+</ul>
+
+<h2>Mesh Preferences</h2>
+
+\image html pref22.png
+
+<ul>
+<li><b>Nodes</b></li>
+<ul>
+<li><b>Color</b> - allows to select the color of nodes. Click on the
+colored line to access to the \ref select_color_and_font_page "Select Color"
+dialog box.</li>
+<li><b>Size</b> - allows to define the size of nodes.</li>
+</ul>
+<li><b>Elements</b></li>
+<ul>
+<li><b>Fill</b> - allows to select the color of surface of elements
+(seen in Shading mode). Click on the colored line to access to the
+\ref select_color_and_font_page "Select Color" dialog box.</li>
+<li><b>Outline</b> - allows to select the color of borders of
+elements. Click on the colored line to access to the
+\ref select_color_and_font_page "Select Color" dialog box.</li>
+<li><b>Back Face</b> - allows to select the color of interior surface
+of elements. Click on the colored line to access to the
+\ref select_color_and_font_page "Select Color" dialog box.</li>
+<li><b>Width</b> - allows to define the width of lines (edges and borders of elements).</li>
+<li><b>Shrink coef.</b> - allows to define relative space of elements
+compared to gaps between them in shrink mode.</li>
+</ul>
+</ul>
+
+<br><h2>Selection Preferences</h2>
+
+\image html pref23.png
+
+<ul>
+<li><b>Selection</b> - performed with mouse-indexing (preselection)
+and left-clicking on an object, whose appearance changes as defined in
+the <b>Preferences</b>.</li>
+<ul>
+<li><b>Object Color</b> - 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 \ref select_color_and_font_page "Select Color" dialog
+box.</li>
+<li><b>Element color</b> - allows to select the color of surface of selected
+elements (seen in Shading mode). Click on the colored line to access
+to the \ref select_color_and_font_page "Select Color" dialog box.</li>
+<li><b>Width</b> - allows to define the width of selected edges. </li>
+</ul>
+<li><b>Preselection</b> - performed with mouse-indexing on an object,
+whose appearance changes as defined in the <b>Preferences</b>.</li>
+<ul>
+<li><b>Highlight Color</b> - allows to select the color of mesh (edges and
+borders of meshes) of the entity . Click on the colored line to access
+to the \ref select_color_and_font_page "Select Color" dialog box.</li>
+<li><b>Width</b> - allows to define the width of preselected edges.</li>
+</ul>
+<li><b>Precision</b> - in this menu you can set the value of precision
+used for <b>Nodes</b>, <b>Elements</b> and <b>Objects</b>.</li>
+</ul>
+
+<br><h2>Scalar Bar Preferences</h2>
+
+\image html pref24.png
+
+<ul>
+<li><b>Font</b> - in this menu you can set type, face and color for
+the font of <b>Title</b> and <b>Labels</b>.</li>
+<li><b>Colors & Labels</b> - in this menu you can set the <b>number of
+colors</b> and the <b>number of labels</b> in use.<li>
+<li><b>Orientation</b> - here you can choose between vertical and
+horizontal orientation of the <b>Scalar Bar</b></li>.
+<li><b>Origin & Size Vertical & Horizontal</b> - allows to define
+placement (<b>X</b> and <b>Y</b>) and lookout (<b>Width</b> and
+<b>Height</b>) of Scalar Bars</li>
+<ul>
+<li><b>X</b>: abscissa of the point of origin (from the left
+side)</li>
+<li><b>Y</b>: ordinate of the origin of the bar (from the bottom)</li>
+</ul>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page occ_3d_viewer_page OCC 3D Viewer
+
+<b>OCC (Open CasCade) 3D viewer</b> has been developed on the basis of Open
+CASCADE Technology. This is the default viewer for Geometry Module,
+providing good representation of construction and transformation of
+geometrical objects. Only this viewer allows to work with groups and
+sub-shapes. This viewer can also work in Mesh module, however, it
+doesn't allow to visualize meshes.
+
+The functionalities of OCC viewer are available via its Viewer
+Toolbar. Buttons marked with small downward triangles have extended
+functionality which can be accessed by locking on them with left mouse
+button.
+
+\image html image95.gif "Viewer Toolbar"
+
+<hr>
+\image html image77.gif
+\n <center><b>Dump View</b> - exports an object from the viewer in bmp, png, jpg
+or jpeg image format.</center>
+<hr>
+
+\image html image88.gif
+\n <center><b>Show/Hide Trihedron</b> - shows or hides coordinate axes.</center>
+<hr>
+
+\image html image96.gif
+\n <center><b>Fit all</b> - allows to select a point to be the center of a
+scene representing all displayed objects in the visible area.</center>
+<hr>
+
+\image html image97.gif
+\n <center><b>Fit area</b> - resizes the view to place in the visible area
+only the contents of a frame drawn with pressed left mouse button.</center>
+<hr>
+
+\image html image98.gif
+\n <center><b>Zoom</b> - allows to zoom in and out.</center>
+<hr>
+
+\image html image99.gif
+\n <center><b>Panning</b> - if the represented objects are greater that the
+visible area and you don't wish to use <b>Fit all</b> functionality, click on
+this button and you'll be able to drag the scene to see its remote
+parts.</center>
+<hr>
+
+\image html image100.gif
+\n <center><b>Global panning</b> - represents all displayed objects in
+the visible area.</center>
+<hr>
+
+\image html view_rotation_point.png
+\n <center><b>Change rotation point</b> - allows to to choose the point around
+which the rotation is performed.</center>
+
+\image html set_rotation_point_dialog1.png
+
+<center>By default the rotation point is located in the Center of the bounding
+box of an object.</center>
+
+\image html set_rotation_point_dialog2.png
+
+<center>Unchecking <b>Use Bounding Box Center</b> checkbox allows you to
+define the coordinates of the rotation point manually.</center>
+
+<b>Set to Origin</b> button restores the default rotation point
+coordinates.\n
+<b>Select Point from View</b> button allows to select the rotation
+point in the 3D Viewer.
+<hr>
+
+\image html image89.gif
+\n <center><b>Rotation</b> - allows to rotate the selected object using the
+mouse.</center>
+
+\image html image102.gif
+
+<center>These buttons orientate the scene strictly about coordinate axes.</center>
+<hr>
+
+\image html image91.gif
+\n <center><b>Reset</b> - restores the default position (isometric) of
+objects in the scene.</center>
+<hr>
+
+\image html image103.gif
+\n <center><b>Memorise view</b> - saves the current position of
+objects in the scene.</center>
+<hr>
+
+\image html image105.gif
+\n <center><b>Restore view</b> - restores the saved position of
+objects in the scene.</center>
+<hr>
+
+\image html image86.gif
+\n <center><b>Clone view</b> - opens a new duplicate scene.</center>
+<hr>
+
+\image html image106.gif
+\n <center><b>Clipping</b> - allows to create cross-section views
+(clipping planes) of geometrical objects.</center>
+
+\image html clipping.png
+
+<ul>
+<li><b>Base point</b> - allows to define the coordinates of the base
+point for the clipping plane.</li>
+<ul>
+<li><b>Reset</b> - returns the base point to coordinate origin.</li>
+</ul>
+<li><b>Direction</b> - allows to define the orientation of the
+clipping plane.</li>
+<ul>
+<li><b>Invert</b> - allows to select which part of the object will be removed
+and which will remain after clipping.</li>
+</ul>
+<li><b>Preview</b> - allows to see the results of clipping in the
+viewer.</li>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page opening_studies_page Opening studies
+
+In \b SALOME all studies are stored in a special format *.hdf.
+
+<em>To open an existing study:</em>
+\par
+In the main toolbar click "Open document" button or from the main menu select <b>File > Open</b>
+option. From a standard Search File dialog box choose the required
+*.hdf file and click \b Open button.
+
+\image html open.jpg ""Open document" button"
+
+<em>To load an unloaded study (\ref saving_and_closing_studies_page
+"see also"):</em>
+\par
+From the main menu select <b>File > Connect</b> option. In the following
+dialog box select one of the studies, which has been previously
+created and unloaded and click \b Ok button:
+
+\image html loadstudy2.png
+
+\n\b Tip: After opening an existing study, you will see its structure
+in the \ref using_object_browser_page "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 <b>Open With</b> option, which will automatically launch the component
+corresponding to this object.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page plot2d_viewer_page Plot 2D viewer
+
+\n <b>Plot 2d viewer</b> is destined to the representation of 2d
+plots and graphs in Post-Pro module.
+\n Its viewer toolbar gives you fast access to the following
+operations:
+
+\image html image77.gif
+<center><b>Dump View</b> - exports an object from the viewer in bmp,
+png, jpg or jpeg image format.</center>
+
+\image html image96.gif
+<center><b>Fit all</b> - scales the display to show the entire
+scene. Use this to resize the scene so that it could fit within the
+Viewer boundary.</center>
+
+\image html image97.gif
+<center><b>Fit area</b> - resizes the view to place in the visible
+area only the contents of a frame drawn with pressed left mouse
+button.</center>
+
+\image html image98.gif
+<center><b>Zoom</b> - allows to zoom in and out.</center>
+
+\image html image99.gif
+<center>\b Panning - if the represented objects are greater that the
+visible area and you don't wish to use Fit all functionality, click on
+this button and you'll be able to drag the scene to see its remote
+parts.</center>
+
+\image html image100.gif
+<center><b>Global panning</b> - allows to define the center of the
+scene presenting all displayed objects in the visible area.</center>
+
+\image html plot2d_points.gif
+<center><b>Draw Points</b> - represents points on the graph.</center>
+
+\image html plot2d_lines.gif
+<center><b>Draw Lines</b> - represents lines on the graph.</center>
+
+\image html plot2d_splines.gif
+<center><b>Draw Splines</b> - represents splines on the graph.</center>
+
+\image html plot2d_logarithmic_horizontal.gif
+<center><b>Horizontal axis logarithmic</b> - changes the scaling on
+horizontal axis to logarithmic.</center>
+
+\image html plot2d_logarithmic_vertical.gif
+<center><b>Vertical axis logarithmic</b> - changes the scaling on vertical
+axis to logarithmic.</center>
+
+\image html plot2d_legend.gif
+<center><b>Show Legend</b> - reveals all verbal and numerical
+information on the graphs.</center>
+
+\image html plot2d_settings.gif
+<center>\b Settings - calls a menu, in which you can specify advanced
+settings for your Plot 2d Viewer.</center>
+
+\image html plot2d_clone.gif
+<center><b>Clone view</b> - opens a new duplicate scene.</center>
+
+\anchor settings
+\n \image html plot2d_view_settings.png
+
+The options are as follows:
+<ul>
+<li><b>Main title:</b> the title of the XY plot. By default, it will
+consist of the names of the tables, on the basis of which the curve
+lines have been constructed.</li>
+<li><b>Curve type:</b> you can select from \b Points, \b Lines and \b Spline.</li>
+<li><b>Show legend:</b> here you can define the position of the
+description table on the XY plot (to the \b Left, to the \b Right, on
+\b Top or on \b Bottom).</li>
+<li><b>Marker size</b> - size of the points (markers) forming curve lines.</li>
+<li><b>Background color</b> of the XY plot.</li>
+<li><b>Scale mode:</b> here you can select the type of scaling (\b
+Linear or \b Logarithmic) along <b>X (Horizontal)</b> or <b>Y (Vertical)</b> axes.</li>
+</ul>
+
+You can define settings for each axis separately:
+<ul>
+<li>\b Horizontal or \b Vertical axis title.</li>
+<li><b>Grid/Axes marks:</b> here you can define the maximum number of major
+and minor scale divisions for a specified axis. The real number of
+intervals fits to {1,2,5}*10^N, where N is a natural number, and
+doesn't exceed the maximum.</li>
+<li><b>Save settings as default:</b> If this check box is marked, all
+XY plots will be displayed with these defined properties.</li>
+</ul>
+
+*/
--- /dev/null
+/*!
+
+\page postpro_preferences_page Post-Pro Preferences
+
+In the Post-Pro module you can set preferences, default settings,
+which can be used in later sessions with this module.
+
+<h2>MED import Preferences</h2>
+
+\image html ppref1.png
+
+<ul>
+<li><b>MED files import</b></li>
+<ul>
+<li><b>Use Build Progress</b> - when this option is checked you can choose
+all other import MED options at the moment of loading of each file
+using <b>Build Progress</b> menu, otherwise the loading will be done
+according to the <b>Preferences</b> without addressing to the
+user.</li>
+<li><b>Full MED Loading</b> - when this option is checked, the MED file is
+fully loaded in the study, and no additional access to the MED file is
+needed during the session. Reversibly, when unchecked, the MED file is
+loaded on demand. This is the default behaviour in SALOME and
+recommended for big files to optimize memory usage.</li>
+<li><b>Build at once</b> - when this option is checked, you can't
+perform any operations until the MED file is fully loaded and
+processed.</li>
+<li><b>Build fields</b> - when this option is checked, the fields are
+built automatically at loading.</li>
+<li><b>Build min/max</b> - when this option is checked, minimum and
+maximum values of the time stamps are found at loading.</li>
+<li><b>Build groups</b> - when this option is checked, the groups and
+families are built automatically at loading.</li>
+<li><b>Close dialog at finish</b> - when this option is checked, the
+dialog box is closed after loading of the selected MED file. When
+unchecked, it allows loading other MED files.</li>
+</ul>
+</ul>
+
+<br><h2>Scalar Bar Preferences</h2>
+
+\image html pref31.png
+
+<ul>
+<li><b>Scalar Range</b></li>
+<ul>
+<li><b>Scalar Mode</b> - this feature allows refining the value to be
+inspected:</li>
+<ul>
+<li><b>Modulus:</b> value of a scalar or modulus of a vector.</li>
+<li><b>Component N:</b> Nth component of a vector, a tensor or a matrix.</li>
+</ul>
+<li><b>Logarithmic Scaling</b> - this checkbox toggles logarithmic
+scaling.</li>
+<li><b>Ranges to Use</b> - you can use either Field Range or Imposed Range.</li>
+</ul>
+<li><b>Min and Max for Imposed Range</b> - in this menu you can set
+the limits for your Imposed Range, if you have chosen to use it.</li>
+<li><b>Font</b> - in this menu you can set type, face and color for
+the font of <b>Title</b> and <b>Labels</b>.</li>
+<li><b>Colors & Labels</b> - in this menu you can set the <b>number of
+colors</b> and the <b>number of labels</b> in the Scalar bar.</li>
+<li><b>Orientation</b> - here you can choose between vertical and horizontal
+orientation of the Scalar Bar.</li>
+<li><b>Origin & Size Vertical & Horizontal</b> - allows to define
+placement (<b>X</b> and <b>Y</b>) and lookout (<b>Width</b> and
+<b>Height</b>) of Scalar Bars.</li>
+<ul>
+<li><b>X:</b> abscissa of the point of origin (from the left
+side)</li>
+<li><b>Y:</b> ordinate of the origin of the bar (from the bottom)</li>
+</ul>
+<li><b>Scalar bars default position</b></li>
+<ul>
+<li><b>Arrange Scalar Bars</b> - this option prevents superposition of
+scalar bars during visualisation of several fields in the same
+window. If checked, a separate scalar bar is displayed for each
+presentation.</li>
+</ul>
+</ul>
+
+<br><h2>Cut Lines Preferences</h2>
+
+\image html ppref2.png
+
+<ul>
+<li><b>CutLine Preferences</b></li>
+<ul>
+<li><b>Show preview</b> check box allows to edit the parameters of the
+presentation and simultaneously observe the preview of this
+presentation in the viewer.</li>
+<li><b>Invert all curves</b> check box allows to invert the resulting
+curves.</li>
+<li><b>Use absolute length</b> check box allows to use absolute length
+for curves.</li>
+<li><b>Generate Data Table:</b> If this check box is marked, <b>Post
+Pro</b> will automatically generate a data table on the basis of your
+Cut Lines presentation. This table will be created in the structure of
+the study.</li>
+<li><b>Generate Curves:</b> If this check box is marked, <b>Post Pro</b> will
+automatically generate curve lines on the basis of values taken from
+the generated data table. These curves will be created in the
+structure of the study and can be visualized in a XY plot.</li>
+</ul>
+</ul>
+
+<br><h2>Sweep Preferences</h2>
+
+\image html ppref3.png
+
+<ul>
+<li><b>Sweeping preferences</b></li>
+<ul>
+<li><b>Mode of the Sweeping</b> - allows to choose between Linear,
+Cosinusoidal and sinusoidal sweeping.</li>
+<li><b>Time step</b> - in this menu you can set the time of
+representation of one step.</li>
+<li><b>Number of cycles</b> - in this menu you can define the number
+of times this animation will be repeated.</li>
+<li><b>Number of steps</b> - in this menu you can define the number of
+steps, which will compose the whole animation.</li>
+<li><b>Parameter varies</b> - allows to choose the range for the
+parameter: from 0 to Pi or from Pi to -Pi.</li>
+</ul>
+</ul>
+
+<ul>
+<li><b>Animation preferences</b></li>
+<ul>
+<li><b>Speed</b> - allows to define the speed of the animation.</li>
+<li><b>Cycled animation</b> - allows to start a cycled animation of the presentation.</li>
+<li><b>Use proportional timing</b> - allows to render the animation with proportional periods of time between every frame (not depending on the time stamps).</li>
+<li><b>Clean memory at each frame</b> - this option allows to optimize the performance of the operation.</li>
+</ul>
+</ul>
+
+<br><h2>Representation Preferences</h2>
+
+\image html pref33.png
+
+<ul>
+<li><b>Representation properties</b> - these checkboxes allow to
+choose the default representation type for each field presentation.</li>
+<ul>
+<li><b>Use Shading</b> - when this option is checked, the objects will
+be displayed with shading.</li>
+<li><b>Display only on creation</b> - when this option is checked, all
+previously created presentations will be automatically removed from
+the viewer when a new presentation is created and displayed. You can
+restore the previously created presentations using the Object
+Browser.</li>
+</ul>
+</ul>
+
+<br><h2>3D Cache</h2>
+
+\image.html pref40.png
+
+<ul>
+<li><b>3D Cache Preferences</b> - allow to define the mode of usage
+and the size of the 3D Cache, which enables to save in RAM and quickly
+restore the states of field animation.</li>
+<ul>
+<li><b>Memory Mode</b> - allows to define the mode of usage
+of the 3D Cache: <b>Minimal</b> actually disables the Cache,
+<b>Limited</b> Cache size depends on the current system
+configuration.</li>
+<li><b>Memory Limit</b> - allows to define the maximum size of the 3D
+Cache</li>
+</ul>
+</ul>
+
+
+<br><h2>Gauss Points Preferences</h2>
+
+\image html pref34.png
+
+<ul>
+<li><b>Primitive</b> - this menu allows user to choose the graphic
+primitive to use to present the results at Gauss points in the
+viewer.</li>
+<ul>
+<li><b>Primitive type</b> - provides choice between <b>Point
+sprites</b>, <b>Open GL points</b> and <b>Geometrical Spheres</b>.</li>
+<li><b>Maximum Size (Clamp)</b> - defines the maximum size of sprite
+points ranging from 1 to 512. By default the value is set to 256
+pixels.</li>
+<li><b>Main Texture</b> - path to the <b>Main Texture</b> (16x16
+pixels) which defines the shape of the point sprite used for
+rendering.</li>
+<li><b>Alpha Channel Texture (16*16)</b> - path to the <b>Alpha
+Channel Texture</b> which defines the texture of the point
+sprite.</li>
+<li><b>Alpha Channel Threshold</b> - defines the level of transparency
+ranging from 0 to 1.</li>
+<li><b>Geometrical Sphere Resolution</b> - defines the number of faces
+of <b>Geometry Spheres</b>.</li>
+<li><b>Notify when number of faces exceeds</b> - limitation of the
+number of faces; the user will be warned if it exceeds the given
+value.</li>
+</ul>
+</ul>
+
+<ul>
+<li><b>Size</b> - in this menu you can define:</li>
+<ul>
+<li><b>Range value for min and max size</b> - these two parameters
+will be respectively multiplied by a reference length (average size of
+cells of the mesh) to define the range for minimum and maximum size of
+a point during rendering (at magnification = 100%). Default values
+are:</li>
+<ul>
+<li><b>Rainbow</b> scale: <b>min</b> = <b>10%</b>, <b>max</b> =
+<b>33%</b></li>
+<ul>
+<li>Min size is associated to the smallest real value (including
+negative values).</li>
+<li>Max size is associated to the largest real value.</li>
+</ul>
+<li><b>Bicolor</b> scale: <b>min</b> = <b>0</b> (not editable),
+<b>max</b> = <b>33%</b></li>
+<ul>
+<li>Null size is associated to the 0 scalar value.</li>
+<li>Max size is associated to the largest absolute value.</li>
+</ul>
+</ul>
+Both values are dynamically updated by the system according to the
+selected scalar bar. In the case of a Bicolor scale, the minimum value
+is set to 0 in the dialog and the control is disabled.
+<li><b>Magnification (%)</b> corresponds to the change of size of
+results at Gauss point primitives in 2D space. Acceptable values range
+from 0 to N; 100% means no magnification, 50% means half of its size,
+200% mean twice its size and so forth. By default this value is set to
+100%.</li>
+<li><b>+/- Ratio</b> corresponds to the number by which the
+magnification will be respectively multiplied or divided at edition,
+ranging from 0.01 to 10. By default this value is set to 2.</li>
+</ul>
+</ul>
+
+<ul>
+<li><b>Geometry</b></li>
+<ul>
+<li><b>Size of points (%)</b> defines a value that will be multiplied
+by a reference length (representative of the average size of cells of
+the mesh) to define the size of points during rendering (at
+magnification = 100%). Default values 10%.</li>
+<li><b>Color</b> - allows to select the color of points used for
+presentations. Click on the colored line to access to the \ref
+select_color_and_font_page "Select Color" dialog box.</li>
+</ul>
+</ul>
+
+<ul>
+<li><b>Gauss Points Scalar Bar</b></li>
+<ul>
+<li><b>Active Bar</b> - this option allows to choose <b>Local</b> or
+<b>Global</b> Bar as active.</li>
+<li><b>Display Global Bar</b> - this option allows to visualize or to
+hide the Global Bar.</li>
+<li><b>Scalar Bar Mode</b> - this option allows to choose between
+<b>Bicolor</b> and <b>Rainbow</b> Scalar Bar Mode.</li>
+<li><b>Spacing</b> - allows to define Spacing from 0.01 to 1.</li>
+</ul>
+</ul>
+
+<br><br><b>Inside<b> and </b>Outside Cursor Preferences</b> allow to set
+<b>Primitives</b>, <b>Size</b> and <b>Magnification</b> for the
+respective zones.
+
+<br><h2>Picking Preferences</h2>
+
+\image html pref37.png
+
+<ul>
+<li><b>Cursor</b> - allows to adjust the Size of the cursor used for
+Picking (ranging from 0.1 to 1), the Height of the pyramids (ranging
+from 0 to 10) and the Selection cursor color.</li>
+<li><b>Tolerance</b> - defines at which distance of the cursor from
+the point it becomes selected (ranges from 0.001 to 10).</li>
+<li><b>Information window</b> - allows to define the
+<b>Transparency</b> (from 0% = opaque to 100% = transparent) and
+<b>Position</b> of the window, which can be:</li>
+<ul>
+<li><b>Centred below the point</b>, or</li>
+<li>located at <b>Top-left corner of the 3D view</b></li>
+</ul>
+<li><b>Movement of the Camera</b> can also be define by the user.</li>
+<ul>
+<li><b>Zoom at first selected point</b> - This value is used to define
+the focal distance at the first selected point (at the end of the
+movement of the camera). This value is a ratio that will be multiplied
+by the current zoom value.</li>
+<li><b>Number of steps between two positions</b> - defines the
+smoothness of camera movement at selection by the number of
+iterations. If set to 1 the camera is zoomed and centered at the point
+momentarily. Greater numbers mean very slow camera movement.</li>
+</ul>
+<li><b>Display parent mesh element</b> - allows to visualize or hide
+the patent mesh element of the selected gauss point.</li>
+</ul>
+
+<br><h2>Navigation Preferences</h2>
+
+\image html pref38.png
+
+<br>
+<ul>
+<li><b>Mouse</b></li>
+<ul>
+<li><b>Mouse Behaviour</b> - this option allows to choose one of the
+modes of work with mouse in Gauss Viewer.</li>
+<ul>
+<li><b>Salome Standard Controls</b> - allows to manipulate objects in the
+viewer with the mouse and locked Ctrl button: increase or decrease the
+zoom ratio with the left mouse button, translate object in any
+direction with the central mouse button or rotate it with the right
+mouse button.</li>
+<li><b>Keyboard Free</b> - allows to manipulate objects in the viewer
+with the mouse without locking Ctrl button. In this case the
+operations are assigned to the buttons differently: rotation is made
+with the left button, translation with the right and zoom with both
+pressed in the same time.</li>
+</ul>
+</ul>
+</ul>
+
+<ul>
+<li><b>Keyboard</b></li>
+<ul>
+<li><b>[+]/[-] Speed Increment</b> - defines the number of units by
+which the speed increases or respectively decreases after pressing [+]
+or [-] keyboard buttons.</li>
+</ul>
+</ul>
+
+<ul>
+<li><b>Spacemouse</b> - a mouse-like manipulator device specially designed
+for working with 3D presentations, objects, etc. You can reassign the
+actions listed below to any of its buttons.</li>
+<ul>
+<li><b>Decrease Speed Increment</b> - decreases by 1 the speed increment used for the keyboard (same as [-] key).</li>
+<li><b>Increase Speed Increment</b> - increase by 1 the speed increment used for the keyboard (same as [+] key).</li>
+<li><b>Decrease Gauss Points Magnification</b> - divides the current magnification by the magnification ratio.</li>
+<li><b>Increase Gauss Points Magnification</b> - multiplies the current magnification by the magnification ratio.</li>
+<li><b>Dominant / combined switch</b> - toggles button to switch to dominant or combined movements.</li>
+</ul>
+</ul>
+
+<br><h2>Recorder Preferences</h2>
+
+\image html pref38.png
+
+<ul>
+<li><b>Settings</b></li>
+<ul>
+<li><b>Mode</b> - allows to choose from two recording regimes:</li>
+<ul>
+<li><b>Recording all displayed frames</b> - records exactly at the FPS rate specified by the user.</li>
+<li><b>Recording at a given FPS</b> - records only when the contents
+of the viewer change (some activity is performed). In the AVI file
+non-recorded images are substituted with the copies of the latest
+recorded image, which produces files with lower quality but requires
+less system resources. </li>
+</ul>
+<li><b>FPS</b> - allows to define the FPS (frames per second) rate for
+the clip. Set greater value for better quality.</li>
+<li><b>Quality</b> - allows to set the quality of the clip in the
+interval between 0 and 100.</li>
+<li><b>Progressive</b> - allows to record a progressive API
+file.</li>
+</ul>
+</ul>
+
+*/
--- /dev/null
+/*!
+
+\page running_salome_page Running SALOME
+
+<em>To launch SALOME:</em>
+<ol>
+<li>Install the SALOME package into a definite directory (ex. \b 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.</li>
+<li>The installation shell script will create a special file:
+<b>salome.csh</b> (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: <br><br>
+<tt>source salome.csh</tt>
+
+<b>Tip:</b> During the installation procedure you have a possibility to set your profile automatically.</li>
+
+<li> Launch SALOME platform, using the following Python script located
+in the <b>SALOME/KERNEL/bin/salome</b> directory:<br><br>
+<ul>
+<li>\b runSalome.py [command line options]
+</ul>
+</li>
+</ol>
+
+\anchor batch_mode_run
+
+<table>
+<tr>
+<td><h2>Options</h2></td>
+<td><h2>Description</h2></td>
+</tr>
+<tr>
+<td>--\b help or -\b h</td>
+<td>print this help</td>
+</tr>
+<tr>
+<td>--\b gui or -\b g</td>
+<td>launch with GUI</td>
+</tr>
+<tr>
+<td> --\b terminal or -\b t</td>
+<td>launch without GUI in batch mode</td>
+</tr>
+<tr>
+<td>--\b logger or -\b l</td>
+<td>redirects log messages in the file <em>logger.log</em></td>
+</tr>
+<tr>
+<td>--\b file=<b>\<FILE\></b> or -\b f=<b>\<FILE\></b></td>
+<td>redirects log messages in a custom file</td>
+</tr>
+<tr>
+<td>--\b xterm or -\b x</td>
+<td>the servers open an xterm window and log messages are displayed in this window</td>
+</tr>
+<tr>
+<td>--\b modules=\b module1,\b module2,... or -\b m=\b module1,\b module2,...</td>
+<td>list of SALOME modules which will be loaded into the module catalogue</td>
+</tr>
+<tr>
+<td>--\b embedded=<b>registry,study,moduleCatalog,cppContainer</b>,
+or -\b e=<b>registry,study,moduleCatalog,cppContainer</b></td>
+<td>embedded CORBA servers (default: registry,study,moduleCatalog,cppContainer)
+note that logger,pyContainer,supervContainer can't be embedded</td>
+</tr>
+<tr>
+<td>--\b standalone=<b>registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer</b>, or
+-\b s=<b>registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer</b></td>
+<td>standalone CORBA servers (default: pyContainer,supervContainer)</td>
+</tr>
+<tr>
+<td>--\b containers=<b>cpp,python,superv</b>
+or -\b c=<b>cpp,python,superv</b></td>
+<td>launch of cpp, python and supervision containers</td>
+</tr>
+<tr>
+<td>--\b portkill or -\b p</td>
+<td>kill SALOME launched with the current port</td>
+</tr>
+<tr>
+<td>--\b killall or -\b k</td>
+<td>kill SALOME</td>
+</tr>
+<tr>
+<td>--<b>interp</b>=<b>n</b> or -<b>i</b>=<b>n</b></td>
+<td>number of additional xterm to open, with session environment</td>
+</tr>
+<tr>
+<td>-\b z</td>
+<td>display splash screen</td>
+</tr>
+<tr>
+<td>-\b r</td>
+<td>disable centralized exception handling mechanism</td>
+</tr>
+</table>
+
+<b>Tip:</b> If the \b runSalome.py script is launched without prompting
+any options, they will be taken by default from the file <b>SalomeApp.xml
+(SALOME/GUI/share/salome/resources/SalomeApp.xml)</b>. 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.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page salome_architecture_page SALOME architecture
+
+
+\b SALOME architecture is based on \b 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
+\b SALOME platform implement predefined interfaces. Each component
+provides data for the \b SALOME study in a form of links (stored in
+the Study) to the specific data created and stored in the
+component. All components represent \b CORBA servers and it allows to
+run them on different host stations.
+
+\image html image67.gif
+
+
+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 \b 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 http://www.omg.org
+
+\note In \b SALOME there is a possibility to run
+definite components in the so-called \ref batch_mode_run "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:
+<ol>
+<li>\b 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.</li>
+<li>\b Productivity : the implementation of code is simple for the
+user and the reuse of components (within other environments for
+macro-components) is noticeably facilitated.</li>
+<li> \b Performance :\b SALOME is able to more finely simulate
+phenomena that is more complex in scale and in physical coupling
+requirements. \b SALOME economically exploits the performance of used
+machines (massively parallel processors, PC clusters, etc).</li>
+<li> \b 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. \b SALOME is able to easily follow these
+developments.</li>
+</ol>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page salome_desktop_page SALOME desktop
+
+The main SALOME Desktop consists of the following sections and
+toolbars:
+
+\image html geomview-alt.png
+
+<b>Basic parts of the SALOME Desktop:</b>
+<ul>
+<li><b>Main menu</b> - 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.</li>
+<li><b>Standard Toolbar</b> - This toolbar contains icons allowing
+creating/saving studies, correcting mistakes, copying/pasting
+objects.</li>
+<li><b>Components Toolbar</b> - This toolbar is destined for uploading
+components in SALOME platform.</li>
+<li><b>Module Toolbar</b> - This toolbar contains icons specific to the
+loaded module.</li>
+<li><b>Viewer Toolbar</b> - This is a set of tools destined for visualization
+of the presentations in the viewer.</li>
+</ul>
+
+ All toolbars in the
+\b 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 <b>View > Toolbars</b>, 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.
+
+<b>Parts of the study window:</b>
+<ul>
+<li><b>Object Browser</b> - Management of objects created or imported into
+SALOME application.</li>
+<li>\b Viewer - This window is destined for visualization of
+presentations.</li>
+<li><b>Python console</b> - 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
+<b>Copy/Paste/SelectAll/ClearAll</b> options.</li>
+</ul>
+
+ 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 <b>Multi-Desktop Approach</b>. 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.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page salome_preferences_page SALOME preferences
+
+To begin setting preferences for your study, select \b Preferences in the
+main menu, the following dialog box will appear:
+
+\image html pref11.png
+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.
+
+<h2>General Preferences</h2>
+
+<ul>
+<li><b>Study Properties</b></li>
+<ul>
+<li><b>MultiFile Save</b> - 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).</li>
+<li><b>ASCII Save</b> - if checked in, your study will be saved in
+ASCII format file (or files).</li>
+<li><b>Store positions of windows</b> - 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.</li>
+<li><b>Store/restore last GUI state</b> - 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.</li>
+</ul>
+<li><b>External browser</b></li>
+<ul>
+<li>\b 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 "<b>...</b>" button(see
+the picture below) to browse for the application you need in the data
+tree of your computer.</li>
+<li>\b Parameters</li>
+</ul>
+<li><b>Python console properties</b> - here you can quickly set the
+parameters (style, size, face) of the font used in your Python
+console.</li>
+</ul>
+\par
+For detailed settings in \ref select_color_and_font_page "Select Font"
+dialog box press the "<b>...</b>" button(see the picture below).
+
+\image html image69.gif ""..." button"
+
+<br><h2>Viewers Preferences</h2>
+
+\image html pref12.png
+
+<ul>
+<li><b>OCC and VTK 3D Viewers</b></li>
+<ul>
+<li><b>Trihedron size</b> - this submenu allows to set the size of
+coordinate axes displayed in the viewer.</li>
+<li><b>Background Color</b> - this submenu allows to select background
+color. Click on the colored line to access to the
+\ref select_color_and_font_page "Select Color" dialog box.</li>
+<li><b>Number of isolines along U</b> (or <b>V</b>) - this submenu allows to specify
+the number of isolines along the axes of coordinates.</li>
+<li><b>Relative size</b> - if checked in, trihedron axes scale to fit the
+size of the area displayed in 3D Viewer.</li>
+</ul>
+<br>
+<li><b>Plot2d Viewer</b></li>
+<ul>
+<li><b>Legend Position</b> - 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.</li>
+<li><b>Curve Type</b> - this allows to set the representation of graphs in
+your presentations. You can see only <b>Points</b>, points connected with
+<b>Lines</b> or points connected with smooth <b>Splines</b>.</li>
+<li><b>Marker Size</b> - this submenu allows you to set the size of
+markers in your graphs</li>
+<li><b>Horizontal & Vertical Axis Scale</b> - this submenu allows you to set
+the scale for vertical and horizontal axes. It can be either <b>Linear</b> or
+<b>Logarithmic</b></li>
+<li>Background Color - this submenu allows to select the background
+color. Click on the colored line to access to the
+\ref select_color_and_font_page "Select Color" dialog box.</li>
+</ul>
+<br>
+<li><b>Graph Supervisor</b></li>
+<ul>
+<li><b>Background Color</b> - this submenu allows to select background
+color. Click on the colored line to access to the
+\ref select_color_and_font_page "Select Color" dialog box.</li>
+<li><b>Title Color</b> - this submenu allows to select title color. Click on
+the colored line to access to the
+\ref select_color_and_font_page "Select Color" dialog box.</li>
+</ul>
+</ul>
+
+<br><h2>Directories Preferences</h2>
+
+\image html pref13.png
+
+<ul>
+<li>
+<b>Quick Directory List</b> - this section allows to create and manage
+a custom quick directory list. To add a directory in the list, press
+the "Add directory" button:
+\image html image70.gif
+
+then the "<b>...</b>" button and browse the data tree for the
+directory you need.
+The "Up" and "Down" buttons(see the picture below) help you to sort
+the directories in the list:
+\image html image73.gif
+
+\image html image75.gif
+To remove the selected directory from the list, press the "Delete"
+button:
+\image html image72.gif
+</li>
+</ul>
+
+<br><h2>Object Browser Preferences</h2>
+
+\image html pref14.png
+
+<ul>
+<li><b>Object browser settings</b></li>
+<ul>
+<li><b>Auto size for the first column</b> - this checkbox enables automatic
+resizing for the first column.</li>
+<li><b>Auto size for other columns</b> - this checkbox enables
+automatic resizing for the other columns.</li>
+</ul>
+</ul>
+
+<ul>
+<li><b>Default columns</b> - these checkboxes allow to display or hide <b>Value</b>,
+<b>Entry</b>, <b>IOR</b> and <b>Reference entry</b> columns in the Object Browser.</li>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page saving_and_closing_studies_page Saving and closing studies
+
+In \b SALOME a study can be saved in \b HDF binary (by default) or \b ASCII
+files (see also: \ref salome_preferences_page "Setting ASCII save option").
+
+You can also specify two options of saving your study:
+<ul>
+<li><b>In one HDF file:</b> in this case all components used during this
+study session will write their data into one common HDF file.
+</li>
+<li>
+<b>In multiple files</b> (see also: \ref salome_preferences_page
+"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 \b ALL saved files should be stored in the \b 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.
+</li>
+</ul>
+
+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.
+
+<em>To save an existing study:</em>
+\par
+In the main toolbar click "Save document" button or from the main menu
+select <b>File > Save</b> option. Your study will be automatically
+updated.
+
+\image html save.jpg ""Save document" button"
+
+\note 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.
+
+<em>To save a study with a new name:</em>
+\par
+From the main menu select <b>File > Save as</b> option. In the standard
+Search File dialog box enter a new name for your study and click \b Save
+button.
+
+<em>To save the current layout of the GUI:</em>
+\par
+From the main menu select <b>File > Save VISU State</b>. The current
+state of the graphic interface is published in Object Browser in the
+folder GUI states and can be at any time \b Restored, \b Renamed or \b
+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).
+
+<em>To close a study:</em>
+\par
+In the main toolbar click "Close document" button or from the main menu select <b>File > Close</b>
+option or click on the cross in the upper right corner of the study
+window.
+
+\image html image94.gif ""Close document" button"
+
+\note If your study hasn't been previously saved, this option will
+call the following dialog box with several options:
+
+\image html closestudy.png
+
+\n\b Unload option allows to unload your current study from the SALOME
+Desktop. In the same working session you can reload it again (see:
+\ref opening_studies_page "Opening studies"). But if you quit the SALOME application, all changes
+in the unloaded study will be lost.
+
+*/
--- /dev/null
+/*!
+
+\page select_color_and_font_page Select Color and Font
+
+<b>Select Color</b> and <b>Select Font</b> menus are used in many
+Preferences.
+
+<br><h2>Select color</h2>
+
+\image html selectcolor.png
+
+This menu allows to choose from either predefined <b>Basic Colors</b>
+grouped in the upper left corner of the window or <b>Custom Colors</b>, which
+you can define yourselves. To define a Custom Color, click on one of
+the Custom Color cells, select the color you need in the field of
+colors or by typing in its numeric parameters in the lower right
+corner of the window, then click <b>Add to Custom Colors</b> button. The
+chosen color will be added to <b>Custom Colors</b> table.
+
+<br><h2>Select font</h2>
+
+\image html selectfont.png
+
+This menu provides a wide choice of \b Fonts, <b>Font Styles</b> and
+\b Sizes. Characters can be underlined or struck out. It is possible to
+preview them in the \b Sample window. \b Script dialog-box gives the
+possibility to use not only Latin and Latin Extended but also
+Cyrillic, Greek, Arabic, Runic and many other subsets.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page setting_preferences_subpage Setting Preferences
+
+In \b SALOME you can set preferences for each module in the common editor
+of preferences. SALOME preferences refer to the whole GUI SALOME
+session, other preferences are module-specific and are accessible only
+after you load a respective module.
+\n When you change settings (click \b OK or \b Apply button) each module
+receives the notification about what preferences are changed. You can
+also click \b Defaults button to restore default preferences or \b Close
+button to quit the menu without any changes.
+\n \b Import button allows to load a user file containing preferences
+from your home directory through a standard Import dialog box.
+
+\image html import.png
+
+This file has no extension and by default starts with
+.SalomeApprc. followed by Salome version number. There exists one file
+for each Salome version in use.
+\n The preferences, set during the current study session, are
+automatically saved in this file at the end of the session. Next time
+you launch SALOME application, these preferences will be restored.
+
+\note The preferences you set will be default preferences for all \b new
+objects, but they are not retroactive and do not automatically apply
+to the existing objects.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page setting_preferences_page Setting Preferences
+
+<ul>
+<li>\subpage setting_preferences_subpage</li>
+<li>\subpage select_color_and_font_page</li>
+<li>\subpage salome_preferences_page</li>
+<li>\subpage geometry_preferences_page</li>
+<li>\subpage mesh_preferences_page</li>
+<li>\subpage postpro_preferences_page</li>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page setting_study_properties_page Setting study properties
+
+<em>To view the properties of the current study:</em>
+\par
+From the main menu select \b File > \b Properties option. The following
+dialog box will appear:
+
+\image html studyproperties.png
+
+This dialog box gives complete information about your study.
+
+<em>To change the name of the study author:</em>
+\par
+In this dialog box click on the \b Author field and enter a new name.
+
+<em>To view the list of changes made with your study:</em>
+\par
+In this dialog box click on the \b 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.
+
+<em>To lock your study for modifications:</em>
+\par
+In the dialog box shown on the picture above click on the \b Locked
+field and choose \b 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:
+
+\image html lockedstudy.png
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page study_management_page Study management
+
+<ul>
+<li>\subpage creating_new_study_page</li>
+<li>\subpage opening_studies_page</li>
+<li>\subpage saving_and_closing_studies_page</li>
+<li>\subpage editing_studies_page</li>
+<li>\subpage displaying_studies_page</li>
+<li>\subpage working_with_python_scripts_page</li>
+<li>\subpage setting_study_properties_page</li>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page using_catalog_generator_page 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
+<b>Catalog Generator</b> 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:
+\b CatalogModuleGeneral.xml and \b 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.
+
+<em>To open the Catalog Generator:</em>
+\par
+From the main menu choose <b>Tools > Catalog Generator</b>, the following
+dialog box will appear:
+
+\image html cataloggenerator.png
+
+<br>In this dialog box you can specify:
+<ul>
+<li>Name and location of the IDL file describing the interface of your
+component (Click the \b Browse button to find it using the data tree).</li>
+<li>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 \b Browse button to find
+it using the data tree).</li>
+<li>Name of the author.</li>
+<li>Name of the component.</li>
+<li>Name of the user.</li>
+<li>Version.</li>
+<li>Capability of multi study support.</li>
+<li>Type of the component.</li>
+<li>Icon of your component (Click the \b Browse button to find it using
+the data tree).</li>
+</ul>
+
+\note 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.
+
+\b Tip: You can use the <b>Catalog Generator</b> tool, if you would like to \b
+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)
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page using_object_browser_page Using Object Browser
+
+The <b>Object Browser</b> in SALOME is destined for displaying the
+structure of the current study in a tree-like form. It contains:
+
+<ul>
+<li>components, loaded during the current session</li>
+<li>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)
+</li>
+<li>references to different objects (they are highlighted in red)</li>
+</ul>
+
+\image html objectbrowser1.png
+
+\note The <b>Object Browser</b> 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
+\ref salome_preferences_page "setting study preferences" or
+right-clicking on the attributes bar and toggling the necessary
+attributes.
+
+\image html objectbrowser2.png
+
+<ul>
+<li>\b Entry - Identification index of the object in the structure of
+the study</li>
+<li>\b IOR - Interoperable Object Reference</li>
+<li><b>Reference entry</b> - Identification index of the references
+to the objects</li>
+<li>\b Value - Displays the value of the first object attribute</li>
+</ul>
+
+\note <b>Entry, IOR and Reference entry</b> attributes are displayed for debugging purposes only.
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page using_registry_tool_page Using Registry tool
+
+\b 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.
+
+<em>To view the Registry:</em>
+\par
+From the main menu choose <b>Tools > Registry display</b>, the
+following dialog box will appear:
+
+\image html registry1.png
+
+\b 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:
+
+<ul>
+<li>\b Component: name of the started component
+<li>\b PID: process identification number
+<li>\b User \b Name: name of the user launching the component
+<li>\b Machine: name of the machine, on which the process has been started
+<li>\b begins: date and time of the starting of the component
+<li>\b hello: date and time of the last call to the component
+</ul>
+
+\b 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).
+
+\b Refresh button allows to refresh the current list of processes
+(components).
+
+\b Interval button allows to set an interval for refreshment of the
+current list of processes (components).
+
+\image html registry3.png
+
+<em>To display complete information on a definite process
+(component):</em>
+\par
+Double-click on this process (component). The following window will
+appear:
+
+\image html registry4.png
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page viewers_page Viewers
+
+<ul>
+<li>\subpage occ_3d_viewer_page</li>
+<li>\subpage vtk_3d_viewer_page</li>
+<li>\subpage plot2d_viewer_page</li>
+</ul>
+
+*/
--- /dev/null
+/*!
+
+\page vtk_3d_viewer_page VTK 3D Viewer
+
+<b>VTK 3D viewer</b> is the default viewer for Mesh Module, allowing to
+visualize meshes. It is also used in Post-Pro module for all 3D
+presentations except for Gauss Points.
+
+The functionalities of VTK viewer are available via its Viewer
+Toolbar. Buttons marked with small downward triangles have extended
+functionality which can be accessed by locking on them with left mouse
+button.
+
+\image html image157.gif "Viewer Toolbar"
+
+<hr>
+\image html image77.gif
+\n <center><b>Dump View</b> - exports an object from the viewer in bmp, png, jpg
+or jpeg image format.</center>
+<hr>
+
+\image html image88.gif
+\n <center><b>Show/Hide Trihedron</b> - shows or hides coordinate axes.</center>
+<hr>
+
+\image html image96.gif
+\n <center><b>Fit all</b> - scales the presentation so that it could
+fit within the Viewer boundaries. </center>
+<hr>
+
+\image html image97.gif
+\n <center><b>Fit area</b> - resizes the view to place in the visible area
+only the contents of a frame drawn with pressed left mouse button.</center>
+<hr>
+
+\image html image98.gif
+\n <center><b>Zoom</b> - allows to zoom in and out.</center>
+<hr>
+
+\image html image99.gif
+\n <center><b>Panning</b> - if the represented objects are greater that the
+visible area and you don't wish to use <b>Fit all</b> functionality, click on
+this button and you'll be able to drag the scene to see its remote
+parts.</center>
+<hr>
+
+\image html image100.gif
+\n <center><b>Global panning</b> - allows to select a point to be the
+center of the presentation showing all displayeed objects in the
+visible ares <center>
+<hr>
+
+\image html view_rotation_point.png
+\n <center><b>Change rotation point</b> - allows to to choose the point around
+which the rotation is performed.</center>
+
+\image html set_rotation_point_dialog1.png
+
+<center>By default the rotation point is located in the Center of the bounding
+box of an object.</center>
+
+\image html set_rotation_point_dialog2.png
+
+<center>Unchecking <b>Use Bounding Box Center</b> checkbox allows you to
+define the coordinates of the rotation point manually.</center>
+
+<b>Set to Origin</b> button restores the default rotation point
+coordinates.\n
+<b>Select Point from View</b> button allows to select the rotation
+point in the 3D Viewer.
+<hr>
+
+\image html image89.gif
+\n <center><b>Rotation</b> - allows to rotate the selected object using the
+mouse.</center>
+
+\image html image102.gif
+
+<center>These buttons orientate the scene strictly about coordinate axes.</center>
+<hr>
+
+\image html image91.gif
+\n <center><b>Reset</b> - restores the default position (isometric) of
+objects in the scene.</center>
+<hr>
+
+\image html urbutton.png
+\n <center><b>Update Rate</b> - allows to define the Update Rate for
+the presentations displayed in the viewer</center>
+
+\image html updaterate.png
+
+<ul>
+<li><b>Desired Update Rate, FPS</b> - allows to set the target Update
+Rate</li>
+<li><b>Still Update Rate, FPS</b> - allows to set the Update Rate for
+the periods when both the user and the application do not perform any
+actions in the viewer</li>
+<li><b>Current Update Rate, FPS</b> - shows the Update Rate currently
+available on your configuration</li>
+<li><b>Number of Cells</b> - shows the number of cells currently in
+display</li>
+</ul>
+
+\image html image108.gif
+\n <center><b>Scaling</b> - represents objects deformed (stretched or
+stuffed) along the axes of coordinates.</center>
+<hr>
+
+\image html image109.gif
+\n <center><b>Graduated axes</b> - allows to define parameters of axes
+and graduate them.</center>
+
+\image html graduatedaxes1.png
+
+<ul>
+<li><b>Axis name</b></li>
+<ul>
+<li><b>Is visible</b> - if checked the axis name is displayed in the
+viewer.</li>
+<li><b>Name</b> - allows to redefine the name of the axis.</li>
+<li><b>Font</b> - allows to define color and properties of the font of
+axis name.</li>
+</ul>
+<li><b>Labels</b></li>
+<ul>
+<li><b>Is visible</b> - if checked the labels are displayed in the
+viewer.</li>
+<li><b>Number</b> - allows to define the number of labels.</li>
+<li><b>Offset</b> - allows to define the distance between labels.</li>
+<li><b>Font</b> - allows to define color and properties of the font of
+labels names.</li>
+</ul>
+<li><b>Tick marks</b></li>
+<ul>
+<li><b>Is visible</b> - if checked the tick marks are displayed in the
+viewer.</li>
+<li><b>Length</b> - allows to define the length of tick marks.</li>
+</ul>
+<li><b>Is visible</b> - if checked the axis is displayed in the
+viewer. </li>
+</ul>
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+
+\page working_with_python_scripts_page Working with Python Scripts
+
+\b 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.
+\n 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 SALOME 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
+SALOME document, which re-creates the SALOME Study, adds the
+stored Salome components to the SALOME 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 \b File --> <b>Dump study</b>
+\n The following dialog box allowing to browse for the location and
+define the name for a Python file will appear:
+
+\image html dumpstudy.png
+
+\par
+<ul>
+<li>
+<b>Publish in study</b> - 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.
+</li>
+<li>
+<b>Save GUI state</b> - if checked in, the current application layout will be
+saved in the Python file.
+</li>
+</ul>
+To confirm your choice click \b Save.
+
+Reversibly it is possible to load a saved Python Script selecting in
+the main menu \b File -> <b>Load Script</b>.
+
+\image html loadscript.png
+
+\par
+To confirm your choice click \b Open.
+
+*/
+++ /dev/null
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Introduction to GUI</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { font-family:'Times New Roman' , serif; }\r
-ul.whs2 { list-style:disc; }\r
-p.whs3 { font-family:'Times New Roman' , serif; margin-left:40px; }\r
-p.whs4 { margin-left:40px; font-family:'Times New Roman' , serif; }\r
-p.whs5 { font-family:'Times New Roman' , serif; margin-left:120px; }\r
-p.whs6 { margin-left:120px; font-family:'Times New Roman' , serif; }\r
-p.whs7 { text-align:justify; }\r
-p.whs8 { margin-left:0px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
- var strNSS = "<style type='text/css'>";\r
- strNSS += "p.whs8 {margin-left:1pt; }";\r
- strNSS +="</style>";\r
- document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="BSSC Special Effects" src="ehlpdhtm.js"></script><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- addTocInfo("GUI module\nIntroduction to GUI");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- setRelStartPage("index.htm");\r
-\r
- autoSync(1);\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Introduction to GUI</h1>\r
-\r
-<p class="whs1"><span style="font-family: 'Times New Roman', serif;"><span \r
- style="font-weight: bold;"><B>GUI</B></span> (Graphical User Interface) provides \r
- a common shell for all components, which can be integrated into the SALOME \r
- platform.</span></p>\r
-\r
-<p class="whs1"> </p>\r
-\r
-<p class="whs1"><span style="font-weight: bold;"><B>GUI \r
- </B></span>component in SALOME platform provides:</p>\r
-\r
-<p class="whs1"> </p>\r
-\r
-<ul type="disc" class="whs2">\r
- \r
- <li class=kadov-p><p class="whs3">Common \r
- desktop environment (<a href="kernel/salome_pro_desktop.htm">SALOME desktop</a>) \r
- for all components</p></li>\r
- \r
- <li class=kadov-p><p class="whs3">Component \r
- integration and management: uploading, switching, component menus/toolbars \r
- handling </p></li>\r
- \r
- <li class=kadov-p><p class="whs3">Study \r
- management (creation, saving, loading, editing studies)</p></li>\r
- \r
- <li class=kadov-p><p class="whs3">Multi-window \r
- management in the framework of one study</p></li>\r
- \r
- <li class=kadov-p><p class="whs3">Management \r
- of objects created or imported into the SALOME application (<a href="kernel/using_object_browser.htm">Object \r
- Browser</a>) </p></li>\r
- \r
- <li class=kadov-p><p class="whs3">Integrated \r
- Python interpreter </p></li>\r
- \r
- <li class=kadov-p><p class="whs3">Output \r
- messages window</p></li>\r
- \r
- <li class=kadov-p><p class="whs3">Additional \r
- tools : <a href="kernel/using_catalog_generator.htm">Catalogue Generator</a>, \r
- <a href="kernel/using_registry.htm">Registry tool</a></p></li>\r
- \r
- <li class=kadov-p><p class="whs4">Standard \r
- viewers for data visualization:</p></li>\r
-</ul>\r
-\r
-<p class="whs5">- \r
- VTK 3d viewer,</p>\r
-\r
-<p class="whs5">- \r
- OCC 3d viewer,</p>\r
-\r
-<p class="whs5">- \r
- Gauss Points viewer</p>\r
-\r
-<p class="whs5">- \r
- Plot 2d viewer,</p>\r
-\r
-<p class="whs6">- \r
- Supervision viewer.</p>\r
-\r
-<p class="whs7"> </p>\r
-\r
-<p class="whs8">Since version 3.0.0 SALOME GUI is based on \r
- SUIT (Salome User Interface Toolkit) that proposes very flexible, powerful \r
- and safe mechanisms of interaction with SALOME tool components (both CORBA \r
- and standalone), resources management, viewers and selection handling, \r
- exception/signals processing, bringing to top multi-desktop dockable-windowed \r
- user interface which improves the usability of SALOME GUI.</p>\r
-\r
-<p class="whs8">All Graphical User Interfaces of standard \r
- modules have plug-in structure, i.e. each module is placed in a dynamic \r
- library which is loaded on demand. All modules can create their own menu \r
- items, buttons in toolbar, windows etc</p>\r
-\r
-<p class="whs5"> </p>\r
-\r
-\r
-\r
-<a href="javascript:void(0);" onClick="var e; if (parseInt(navigator.appVersion)>=4){e=event;} if (parseInt(navigator.appVersion) >=2 && typeof(PickupDialog_Invoke) == 'function') PickupDialog_Invoke(e,'','Introduction to SALOME','Introduction_to_SALOME_PRO.htm','SALOME desktop','SALOME_PRO_desktop.htm');return false;" title="Related Topics"><img src="ss_btn_related_topics.gif" border=0 height=17 width=82 alt="Related Topics"></a>\r
-\r
-\r
- \r
-\r
-<script type="text/javascript" language="JavaScript" title="WebHelpRelatedTopics"><!--\r
-if (parseInt(navigator.appVersion) >= 3 && typeof (WritePopupMenuLayer) == "function")\r
- WritePopupMenuLayer();\r
-//--></script><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-|SourceProjectName:KERNEL.hpr\r
-|DestinationProjectName:index.htm\r
-whhost.js\r
-whmsg.js\r
-whmozemu.js\r
-whproxy.js\r
-whstub.js\r
-whutils.js\r
-whver.js\r
-whform.js\r
-whphost.js\r
-whstart.js\r
-whtopic.js\r
-whframes.js\r
-whlang.js\r
-whskin_info.htm\r
-whskin_blank.htm\r
-whskin_pickup.htm\r
-whskin_homepage.htm\r
-whskin_tw.htm\r
-whnjs.htm\r
-whthost.js\r
-whtdhtml.htm\r
-whihost.js\r
-whibody.htm\r
-whiform.htm\r
-whfhost.js\r
-whfbody.htm\r
-whfform.htm\r
-whghost.js\r
-whgbody.htm\r
-whgdhtml.htm\r
-whgdef.htm\r
-whproj.js\r
-whproj.xml\r
-whproj.htm\r
-whxdata\whtoc.xml\r
-whxdata\whidx.xml\r
-whxdata\whfts.xml\r
-whxdata\whglo.xml\r
-whdata\whtoc.js\r
-whdata\whtoc.htm\r
-whdata\whtdata.js\r
-whdata\whidx.js\r
-whdata\whidx.htm\r
-whdata\whidata.js\r
-whdata\whfts.js\r
-whdata\whfts.htm\r
-whdata\whglo.js\r
-whdata\whglo.htm\r
-whdata\whgdata.js\r
-whdata\whftdata.js\r
-whdata\whfwdata.js\r
-whres.xml\r
-webhelp.jar\r
-webhelp.cab\r
-whgdata\whnvp30.htm\r
-whgdata\whnvp31.htm\r
-whgdata\whnvp32.htm\r
-whgdata\whnvp33.htm\r
-whgdata\whnvt30.htm\r
-whgdata\whnvt31.htm\r
-whgdata\whnvt32.htm\r
-whgdata\whnvt33.htm\r
-whgdata\whnvf30.htm\r
-whgdata\whnvf31.htm\r
-whgdata\whnvf32.htm\r
-whgdata\whnvf33.htm\r
-whgdata\whnvl31.htm\r
-whgdata\whnvl32.htm\r
-whgdata\whnvl33.htm\r
-whgdata\whexpbar.gif\r
-cshdat_webhelp.htm\r
-whcsh_home.htm\r
-whcshdata.htm\r
-cshdat_robohelp.htm\r
-whd_topic.xml\r
-whd_nvp10.htm\r
-whd_nvp20.htm\r
-whd_tabs.htm\r
-whd_dpns.htm\r
-whd_tab0.gif\r
-whd_tab1.gif\r
-whd_tab2.gif\r
-whd_tab3.gif\r
-whd_tab4.gif\r
-whd_tab5.gif\r
-whd_tab6.gif\r
-whd_tab7.gif\r
-whd_tab8.gif\r
-whd_toc1.gif\r
-whd_toc2.gif\r
-whd_toc3.gif\r
-whd_toc4.gif\r
-whd_show0.gif\r
-whd_show1.gif\r
-whd_show2.gif\r
-whd_hide0.gif\r
-whd_hide1.gif\r
-whd_hide2.gif\r
-whd_sync0.gif\r
-whd_sync1.gif\r
-whd_sync2.gif\r
-whd_prev0.gif\r
-whd_prev1.gif\r
-whd_prev2.gif\r
-whd_next0.gif\r
-whd_next1.gif\r
-whd_next2.gif\r
-whd_wbsh0.gif\r
-whd_wbsh1.gif\r
-whd_wbsh2.gif\r
-whidhtml.htm\r
-whfdhtml.htm\r
-index_hha.hhk\r
-index.hhc\r
-index.hhk\r
-dump_study.htm\r
-geom_preferences.htm\r
-introduction_to_gui.htm\r
-kernel\about_salome_pro_architecture.htm\r
-kernel\about_salome_pro_help_system.htm\r
-kernel\creating_a_new_study.htm\r
-kernel\displaying_studies.htm\r
-kernel\editing_studies.htm\r
-kernel\getting_properties_of_the_study.htm\r
-kernel\getting_started2.htm\r
-kernel\introduction.htm\r
-kernel\introduction_to_salome_pro.htm\r
-kernel\navigating_topics.htm\r
-kernel\opening_studies.htm\r
-kernel\readme.html\r
-kernel\running_salome_pro.htm\r
-kernel\salome_pro_desktop.htm\r
-kernel\saving_a_study.htm\r
-kernel\setting_preferences.htm\r
-kernel\using_catalog_generator.htm\r
-kernel\using_left-hand_tabs.htm\r
-kernel\using_object_browser.htm\r
-kernel\using_registry.htm\r
-mesh_preferences.htm\r
-post-pro_preferences.htm\r
-select_color_and_font.htm\r
-setting_preferences.htm\r
-ehelp.xml\r
-robohhre.lng\r
-texture_horiz_ltbluebubbles.jpg\r
-index.glo\r
-default.css\r
-pics\registry1.png\r
-pics\open.jpg\r
-pics\icon_about.png\r
-pics\registry3.png\r
-pics\studyproperties.png\r
-pics\readmepage.png\r
-pics\registry4.png\r
-pics\cataloggenerator.png\r
-tip1.gif\r
-pics\pref31.png\r
-pics\save.jpg\r
-pics\pref32.png\r
-pics\pref21.png\r
-image70.gif\r
-pics\newsticn.jpg\r
-pics\pref33.png\r
-pics\pref22.png\r
-pics\pref11.png\r
-image71.gif\r
-pics\pref34.png\r
-pics\pref23.png\r
-pics\pref12.png\r
-image94.gif\r
-closestudy.png\r
-image72.gif\r
-pics\copy-paste.jpg\r
-pics\pref24.png\r
-pics\pref13.png\r
-pics\selectfont.png\r
-pics\view2.png\r
-image54.jpg\r
-image73.gif\r
-pics\selectcolor.png\r
-pics\exemple.gif\r
-pics\pref14.png\r
-pics\dumpstudy.png\r
-pics\neo-view2.png\r
-pics\pref37.png\r
-pics\pref15.png\r
-image75.gif\r
-i_blue.jpg\r
-pics\productpage.png\r
-pics\pref38.png\r
-image65.gif\r
-note1.gif\r
-pics\intropage.png\r
-pics\pref39.png\r
-pics\import.png\r
-pics\objectbrowser1.png\r
-pics\progresspage.png\r
-pics\objectbrowser2.png\r
-image67.gif\r
-pics\loadscript.png\r
-pics\geomview-alt.png\r
-pics\lockedstudy.png\r
-pics\loadstudy2.png\r
-image68.gif\r
-pics\choicepage.png\r
-image69.gif\r
-index.ppf\r
-ehlpdhtm.js\r
-ss_btn_related_topics.gif\r
-default_ns.css\r
-whxdata\whtdata0.xml\r
-whxdata\whftdata0.xml\r
-whxdata\whfwdata0.xml\r
-whxdata\whgdata0.xml\r
-whdata\whtdata0.htm\r
-whdata\whftdata0.htm\r
-whdata\whfwdata0.htm\r
-whdata\whgdata0.htm\r
-whgdata\whlstt0.htm\r
-whgdata\whlstt1.htm\r
-whgdata\whlstt2.htm\r
-whgdata\whlstt3.htm\r
-whgdata\whlstt4.htm\r
-whgdata\whlstt5.htm\r
-whgdata\whlsti0.htm\r
-whgdata\whlstfl0.htm\r
-whgdata\whlstfl1.htm\r
-whgdata\whlstfl2.htm\r
-whgdata\whlstfl3.htm\r
-whgdata\whlstfl4.htm\r
-whgdata\whlstfl5.htm\r
-whgdata\whlstfl6.htm\r
-whgdata\whlstfl7.htm\r
-whgdata\whlstfl8.htm\r
-whgdata\whlstfl9.htm\r
-whgdata\whlstfl10.htm\r
-whgdata\whlstfl11.htm\r
-whgdata\whlstfl12.htm\r
-whgdata\whlstfl13.htm\r
-whgdata\whlstfl14.htm\r
-whgdata\whlstfl15.htm\r
-whgdata\whlstfl16.htm\r
-whgdata\whlstfl17.htm\r
-whgdata\whlstfl18.htm\r
-whgdata\whlstfl19.htm\r
-whgdata\whlstfl20.htm\r
-whgdata\whlstfl21.htm\r
-whgdata\whlstfl22.htm\r
-whgdata\whlstfl23.htm\r
-whgdata\whlstfl24.htm\r
-whgdata\whlstfl25.htm\r
-whgdata\whlstfl26.htm\r
-whgdata\whlstf0.htm\r
-whgdata\whlstf1.htm\r
-whgdata\whlstf2.htm\r
-whgdata\whlstf3.htm\r
-whgdata\whlstf4.htm\r
-whgdata\whlstf5.htm\r
-whgdata\whlstf6.htm\r
-whgdata\whlstf7.htm\r
-whgdata\whlstf8.htm\r
-whgdata\whlstf9.htm\r
-whgdata\whlstf10.htm\r
-whgdata\whlstf11.htm\r
-whgdata\whlstg0.htm\r
-index.htm\r
-index_csh.htm\r
-index_rhc.htm\r
--- /dev/null
+<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
+\r
+<html>\r
+\r
+<!--(==============================================================)-->\r
+<!--(Document created with RoboEditor. )============================-->\r
+<!--(==============================================================)-->\r
+\r
+<head>\r
+\r
+<title>SALOME Installation Wizard Help</title>\r
+\r
+<!--(Meta)==========================================================-->\r
+\r
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">\r
+<meta name=Author content="Vadim SANDLER, Open CASCADE SAS (vadim.sandler@opencascade.com)">\r
+<meta name=Copyright content="2002-2006 CEA">\r
+<meta name=generator content="RoboHELP by eHelp Corporation - www.ehelp.com">\r
+<meta name=generator-major-version content=0.1>\r
+<meta name=generator-minor-version content=1>\r
+<meta name=filetype content=kadov>\r
+<meta name=filetype-version content=1>\r
+<meta name=page-count content=1>\r
+<meta name=layout-height content=18589>\r
+<meta name=layout-width content=901>\r
+\r
+\r
+\r
+<!--(Style Sheet)===================================================-->\r
+\r
+<style>\r
+<!--\r
+\r
+A:visited {\r
+ color: #551a8b;\r
+}\r
+\r
+A:active {\r
+ color: #ff0000;\r
+}\r
+\r
+A:link {\r
+ color: #0000ee;\r
+}\r
+\r
+-->\r
+</style>\r
+\r
+\r
+<!--(Body)==========================================================-->\r
+\r
+\r
+</head>\r
+\r
+<body style="color: #000000;">\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<!--(Table)=========================================================-->\r
+<table nosave\r
+ x-use-null-cells\r
+ style="width: 100%;"\r
+ width=100%>\r
+\r
+<tr nosave>\r
+<td nosave>\r
+<h1><a href="http://www.opencascade.com"><img src="logocorp.png"\r
+ style="width: 139px;\r
+ height: 47px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=139\r
+ height=47\r
+ border=0> </a></h1>\r
+</td>\r
+<td>\r
+<h3 style="text-align: center;"\r
+ align=center><font style="font-size: xx-large;"\r
+ size=7><font style="color: #000099;"\r
+ color=#000099>SALOME Installation Wizard \r
+ Help</font></font></h3>\r
+</td>\r
+<td>\r
+<div style="text-align: right;"\r
+ align=right>\r
+<!--kadov_tag{{<implicit_p>}}--><a href="http://www.opencascade.org/SALOME/"><img \r
+ src="application.png"\r
+ style="width: 109px;\r
+ height: 47px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=109\r
+ height=47\r
+ border=0> </a>\r
+</div></td></tr>\r
+</table>\r
+\r
+<div style="text-align: right;"\r
+ align=right>\r
+ \r
+</div>\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#install_from_wizard">Installing products \r
+ with the Installation Wizard</a></li>\r
+ \r
+ <ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#gui_mode">GUI mode</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#batch_mode">Batch mode</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#env_files">Environment files</a></li>\r
+ </ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#check_version_proc">Notes on check products \r
+ version procedure</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#pick_up_env">Pick up the environment</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#xml_files">Modifying XML configuration \r
+ file</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#new_products">Implementing installation \r
+ scripts for the new products</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#finish_buttons">Customizing Readme page \r
+ buttons</a></li>\r
+</ul>\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+<h3><a name=install_from_wizard></a>Installing products with the <font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>Installation Wizard</font></h3>\r
+\r
+<span>The Installation Wizard can be launched in two modes: </span><span \r
+ style="font-weight: bold;">GUI </span><span>and </span><span \r
+ style="font-weight: bold;">batch</span><span>. \r
+ <br>\r
+The root directory of the Installation Wizard contains Python script </span><span \r
+ style="font-weight: bold;">runInstall</span><span>. To run the Installation \r
+ Wizard just type <b>runInstall</b> in the terminal window: \r
+\r
+</span><p>[ python ] <b>runInstall </b>[options]</p>\r
+\r
+<p>Without options this script will launch the SALOME Installation Wizard \r
+ in the default mode (GUI).<br>\r
+The default installation settings can be overridden by using command line \r
+ options. Each option has a short and a long notation:</p>\r
+\r
+<p><b style="font-weight: bold;">-g / --gui</b></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>Runs the Installation Wizard in the GUI mode (this is the default \r
+ mode). \r
+</span></div>\r
+\r
+<p><b style="font-weight: bold;">-b / --batch</b></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>Runs the Installation Wizard in the terminal mode. \r
+</span></div>\r
+\r
+<p><b style="font-weight: bold;">-f FILE / --file=</b><span \r
+ style="font-weight: bold;">FILE</span></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>The XML configuration file to be used by the Installation Wizard. \r
+ If this option is not used then the installation script tries to define \r
+ the <i>Linux </i>version and use the corresponding XML file if it exists. \r
+ For examle, for </span><span style="color: rgb(0, 0, 153);">Linux Mandrake \r
+ 10.1</span><span> the <b>config_Mandrake_10.1.xml</b> file \r
+ will be used by default. If no appropriate file is found, the file <b>config.xml</b> \r
+ will be used. This file refers to the basic target platform which is </span><span style="color: rgb(0, 0, 153);">Linux Mandrake 10.1</span><span> for SALOME \r
+ 3.0 and newer. If </span><span \r
+ style="font-weight: bold;">config.xml</span><span> \r
+ file is not found either, a warning message box is shown (in GUI mode) \r
+ or printed to the console (in batch mode) and the Installation Wizard \r
+ quits. \r
+</span></div>\r
+\r
+<p><b style="font-weight: bold;">-d DIR / --target=DIR</b></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>The target directory SALOME platform is to be installed to. If used, \r
+ this option overrides the default target directory, given in the configuration \r
+ XML file (usually</span><span \r
+ style="font-weight: bold;"> ${HOME}/salome_<version></span><span>, \r
+ see <a href="#xml_files"\r
+ style="font-size: 12pt;">here</a> for more details). \r
+</span></div>\r
+\r
+<p><b style="font-weight: bold;">-t DIR / --tmp=DIR </b></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>The directory, which should be used for temporary files. If given, \r
+ this option overrides the default temporary directory, given in the configuration \r
+ xml file (usually </span><span \r
+ style="font-weight: bold;">/tmp</span><span>, \r
+ see <a href="#xml_files"\r
+ style="font-size: 12pt;">here</a> for more information). \r
+</span></div>\r
+\r
+<p><b style="font-weight: bold;">-a / --all-from-sources</b></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>Forces all the products to be installed from sources (including all \r
+ SALOME modules). If this option is used, all default installation modes \r
+ for all products are ignored.<br>\r
+This option is helpful when the user wants to install SALOME on the platform \r
+ which is not officially supported. In this case, the user can try to run \r
+ the SALOME Installation Wizard with the </span><span \r
+ style="font-weight: bold;">-a</span><span> \r
+ option in order to build all the products from sources.</span><span style="font-weight: bold; color: #ff0000;"><br>\r
+Note, that this is a time-consuming operation which can take more than \r
+ 24 hours depending on the computer.</span><span> \r
+</span></div>\r
+\r
+<p><b style="font-weight: bold;">-h / --help</b></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>Prints help information on the Installation Wizard's use. \r
+</span></div>\r
+\r
+<p><b style="font-weight: bold;">-v / --version</b></p>\r
+\r
+<div style="margin-left: 40px;">\r
+<span>Prints version information (</span><span \r
+ style="font-weight: bold;">Note: \r
+ </span><span>this is the Installation Wizard's version number, not the \r
+ number of SALOME platform version). \r
+</span></div>\r
+\r
+<p>The installation procedure supports different <span style="color: rgb(0, 0, 153);">Linux \r
+ </span>platforms and installs various installation 3d-party prerequisite \r
+ products which are required by SALOME platform. As it was mentioned above, \r
+ the basic target platform for SALOME 3.0 and newer is <span style="color: rgb(0, 0, 153);">Linux \r
+ Mandrake 10.1</span>.<br>\r
+Use of configuration XML files gives a flexible way to modify the list \r
+ of products to be installed by the Installation Wizard without changing \r
+ the program source code. Just create your own XML configuration file and \r
+ implement installation scripts for the prerequisite products you need \r
+ and then use this XML file with the Installation Wizard. This can be done, \r
+ for example, for some <span style="color: rgb(0, 0, 153);">Linux </span>platform \r
+ which is not supported directly by the Installation Wizard. See <a href="#xml_files"\r
+ style="font-size: 12pt;">Modifying XML configuration file</a> and <a \r
+ href="#new_products"\r
+ style="font-size: 12pt;">Implementing installation scripts for the \r
+ new products</a> sections for more information. </p>\r
+\r
+<h3 style="margin-left: 40px;"><a name=gui_mode></a>GUI mode</h3>\r
+\r
+<p>The <font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>Installation Wizard</font> GUI has been developed \r
+ using <span style="color: rgb(0, 0, 153);">Trolltech's </span><span \r
+ style="font-weight: bold;">Qt \r
+ 3.0.5 </span>toolkit. After launching the Installation Wizard in the GUI \r
+ mode the wizard window is shown to the user. This wizard guides the user \r
+ through several subsequent pages. To navigate between the pages use <i>"Next"</i> \r
+ and <i>"Back"</i> buttons in the lower part of the wizard window. \r
+ The <i>"Cancel"</i> button closes the wizard window and \r
+ quits the installation procedure after the user's confirmation. The <i>"Help"</i> \r
+ button opens an additional window to show help information. </p>\r
+\r
+<p>The first "<span style="font-style: italic;">Introduction"</span> \r
+ page is shown in <a href="#IntroPage">Figure 1</a>. Skip this page by \r
+ clicking <i>"Next"</i>: </p>\r
+\r
+<a name=IntroPage></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img alt="Intro page"\r
+ src="intropage.png"\r
+ style="width: 586px;\r
+ height: 364px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=364\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 1:</b> "Introduction" \r
+ page</p>\r
+\r
+<p>In the second page you are proposed to enter the target directory where \r
+ the SALOME platform should be installed to. You can also click <i>"Browse..."</i> \r
+ and choose the destination folder using the standard browse directory \r
+ dialog box. <br>\r
+If the directory you want to install products to does not exist you are \r
+ prompted to confirm directory creation. If you type a wrong directory \r
+ path, or if you do not have write permissions for the directory you use, \r
+ the corresponding message box is shown.</p>\r
+\r
+<p>You can also change the temporary directory (which is used to store \r
+ temporary files required for the installation).<br>\r
+In the bottom part of the window the total disk space required for the \r
+ installation and for the temporary files is displayed (see below for more \r
+ details).</p>\r
+\r
+<p>In the GUI mode the Installation Wizard provides two different options \r
+ to install the SALOME platform: <span \r
+ style="font-weight: bold;">basic</span> \r
+ (default option) and <span \r
+ style="font-weight: bold;">advanced.</span> \r
+ In the <span \r
+ style="font-weight: bold;">basic</span> mode the user should \r
+ enter the target installation directory and temporary folder. All other \r
+ installation options are taken from the XML configuration file (see <a \r
+ href="#Product_page1">Fig.2</a>):</p>\r
+\r
+<a name=Product_page1></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img alt="Intro page"\r
+ src="productpage1.png"\r
+ style="width: 586px;\r
+ height: 364px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=364\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 2:</b> "Installation \r
+ settings" </p>\r
+\r
+<p>In addition, you have a choice to use "Install all products from \r
+ sources" check box. If this option is turned on, all the products \r
+ will be installed from the sources (using their own build procedures). \r
+ This check box corresponds to the <span \r
+ style="font-weight: bold;">--all-from-sources</span> \r
+ (<span \r
+ style="font-weight: bold;">-a</span>) option of the <span \r
+ style="font-weight: bold;">runInstall</span> \r
+ script (see <a href="#install_from_wizard">here</a>). </p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><img \r
+ src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 35px;\r
+ height: 37px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=35\r
+ height=37\r
+ border=0><span \r
+ style="font-weight: bold;"> Installation of all products \r
+ from sources is a long-time operation.</span></p>\r
+\r
+<p>To switch to the <span \r
+ style="font-weight: bold;">advanced</span> option, \r
+ click <i>"More..."</i> (see <a href="#ProductPage2">Fig.3</a> \r
+ ).</p>\r
+\r
+<p>In the advanced mode you have a possibility to select products to be \r
+ installed. Each product can have several options of installation: you \r
+ have a possibility to use the native product (provided with Linux distribution \r
+ and installed in the system folders), install already precompiled binaries, \r
+ build the product from sources or not install it at all. Available options \r
+ and default option are taken from the XML configuration file. You can \r
+ mark the products you want to install by clicking the corresponding radio-buttons \r
+ in the list view in the left part of the page. <br>\r
+Note, that some products may require some other pre-requisite products \r
+ to be installed (or these prerequisite products should be already available \r
+ on your computer). The installation procedure has a special feature to \r
+ automatically mark these products in the list view. For example, in order \r
+ to install <b><i>PyQt</i></b> it is necessary to have <b><i>gcc, Python</i></b>,<b><i> \r
+ Qt</i></b> and <b><i>Sip</i></b> installed. Therefore all these products \r
+ will also be <!--kadov_tag{{<spaces>}}--> <!--kadov_tag{{</spaces>}}-->turned \r
+ on when you check on <b><i>PyQt</i></b>. This feature can be switched \r
+ off by clicking the <i>"Automatic dependencies"</i> checkbox. \r
+ Turn on this checkbox if you want all prerequisite products to be automatically \r
+ checked when you select some product to be installed. Turn off this checkbox \r
+ if you want to disable this feature.</p>\r
+\r
+<a name=ProductPage2></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img src="productpage.png"\r
+ alt="Products page"\r
+ style="float: none;\r
+ width: 586px;\r
+ height: 525px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=525\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 3:</b> "Installation \r
+ settings" page in the 'advanced' mode</p>\r
+\r
+<p>If you want to use native products (like <span \r
+ style="font-weight: bold;">gcc</span>, \r
+ <span \r
+ style="font-weight: bold;">tcl</span>, etc.), select <i>"use \r
+ native" </i>option. <br>\r
+Special button in the right part of the page - <i>"Unselect All" \r
+ </i>- allows to reset quickly all products to the <i>"not install"</i> \r
+ state. </p>\r
+\r
+<p>There are also two checkboxes on this page: <i>"SALOME sources"</i> \r
+ and <i>"SALOME binaries"</i>. These three-state checkboxes allow \r
+ quick selecting/unselecting sources/binaries packages of SALOME modules \r
+ for installation.</p>\r
+\r
+<p>In addition, when some SALOME sources are selected, one more check box \r
+ becomes available: <span style="font-style: italic;">"Build SALOME \r
+ sources"</span>. If this option is turned on, the selected SALOME \r
+ modules will be built and installed from sources.<span \r
+ style="font-weight: bold;"><br>\r
+ </span></p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><span \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0> If this check box is turned on, \r
+ the corresponding SALOME module binaries package installation is disabled, \r
+ because of <!--kadov_tag{{<spaces>}}--> <!--kadov_tag{{</spaces>}}-->SALOME \r
+ module sources and binaries packages conflict </span>(see <a href="#ProductPage3">Fig. \r
+ 4</a> below). </p>\r
+\r
+<a name=ProductPage3></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img src="productpage2.png"\r
+ alt="Products page"\r
+ style="width: 586px;\r
+ height: 525px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=525\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 4:</b> "Build \r
+ SALOME sources" check box usage</p>\r
+\r
+<p>The box at the right side of the page displays the information about \r
+ currently highlighted product: name, version and short description, required \r
+ disk space, disk space required for temporary files, list of prerequisites \r
+ (this information is provided in the XML file) and current user choice. \r
+ </p>\r
+\r
+The <i>"Disk space required:"</i> field displays how much disk \r
+ space on the hard drive is required for installation of selected products. \r
+ \r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><b style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></b><span \r
+ style="font-weight: bold;">Please, \r
+ take into account that the displayed amount of required disk space is \r
+ approximate and may differ when you install products on your hard drive.</span> \r
+ </p>\r
+\r
+<p>The installation procedure uses a special directory to store temporary \r
+ files. The <i>"Space for temporary files:"</i> field shows the \r
+ information about required disk space on the hard drive for extracting \r
+ and compiling the selected products. You can change the temporary directory \r
+ - just type a path to the folder you want to use or click on the corresponding \r
+ <i>"Browse..."</i> button. <span \r
+ style="font-weight: bold;"><br>\r
+ </span></p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><span><b \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></b></span><b \r
+ style="font-weight: bold;"><span style="font-weight: normal;">A</span></b>ctually, \r
+ temporary files are not stored directly in the directory entered by the \r
+ user. The Installation Wizard creates an additional folder in this directory \r
+ named something like INSTALLWORK<span \r
+ style="font-weight: bold;">XXXXX</span> \r
+ where XXXXX is a unique number. This allows to launch several Installation \r
+ Wizards simultaneously. This temporary directory is removed automatically \r
+ when the installation finishes.</p>\r
+\r
+<p>The installation procedure also checks the available disk space. If \r
+ there is not enough disk space on your hard drive you will see a corresponding \r
+ error message box. </p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><b style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0>You are strongly recommended not \r
+ to use directory names containing spaces. </b>Otherwise you can experience \r
+ some troubles with the installation.<b> </b></p>\r
+\r
+<p>To proceed further click <i>"Next"</i>. At this moment the \r
+ program will make some tests to check installation settings: if there \r
+ is enough disk space on the hard drive, check for native products installation, \r
+ dependencies (prerequisites) for each product you have selected to be \r
+ installed. If any test fails you will see the corresponding warning message \r
+ box. Otherwise the wizard will proceed to the next page: </p>\r
+\r
+<a name=ChoicePage></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img src="choicepage.png"\r
+ alt="Choice page"\r
+ style="width: 586px;\r
+ height: 485px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=485\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 5:</b> "Check \r
+ your choice" page</p>\r
+\r
+<p>This page summarizes the installation options you've made on the previous \r
+ pages. You can check again your choice and change it if necessary by getting \r
+ back to the previous page. <br>\r
+When you are sure that everything is OK, click <i>"Next"</i> \r
+ to follow to the <a href="#ProgressPage">next page</a>. </p>\r
+\r
+<a name=ProgressPage></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img alt="Progress page"\r
+ src="progresspage1.png"\r
+ style="width: 586px;\r
+ height: 364px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=364\r
+ border=0></p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 6:</b> "Installation \r
+ progress" page</p>\r
+\r
+<p style="text-align: justify;">To start installation of the selected products \r
+ click "Start". It launches the shell installation script and \r
+ you will be able to see the output of the script in the <!--kadov_tag{{<spaces>}}--> <!--kadov_tag{{</spaces>}}-->dialog \r
+ topmost frame. If any errors occur during the installation progress the \r
+ corresponding messages will be printed to the log window in bold red font.</p>\r
+\r
+<p style="text-align: justify;">It is possible to break the installation \r
+ at any time by clicking "Stop". Then you can get back to the \r
+ previous pages if you wish to change installation settings or restart \r
+ installation by pressing again "Start" button.</p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><b><span \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0> I</span></b><span \r
+ style="font-weight: bold;">n the current implementation \r
+ it is not possible to resume the stopped installation process; it will \r
+ be re-started from the very beginning.</span> </p>\r
+\r
+<a name=ProgressPage1></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img alt="Progress page"\r
+ src="progresspage.png"\r
+ style="width: 586px;\r
+ height: 364px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=364\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 7:</b> "Installation \r
+ progress" page: installation in progress</p>\r
+\r
+<p>The <i>"Installation Status"</i> frame window shows you the \r
+ progress of installation. "<font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>Waiting</font>" \r
+ status means that installation of this product has not been started yet. \r
+ The product currently being installed is marked as "<font style="color: #ff9900;"\r
+ color=#FF9900>Processing</font>". All installed products have \r
+ "<font style="color: #33ff33;"\r
+ color=#33FF33>Completed</font>" status. </p>\r
+\r
+<p>You can abort installation and close the installation procedure using \r
+ <i>"Cancel"</i> button. </p>\r
+\r
+ \r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><span \r
+ style="font-weight: bold;"><b style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0>T</b>his button sends the signal "SIGTERM" to the \r
+ shell script. The script tries to clear all temporary files. The process \r
+ of removing temporary files can take some time, so the installation wizard \r
+ will wait 3 seconds before closing.</span> </p>\r
+\r
+<p>At the end of installation (all selected products have been installed \r
+ successfully) you can go back to the previous pages to start a new installation \r
+ or click <i>"Next" </i>to go the Readme page: </p>\r
+\r
+<a name=readmepage></a>\r
+\r
+<p style="text-align: center;"\r
+ align=center> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><img alt="Read page"\r
+ src="readmepage.png"\r
+ style="width: 586px;\r
+ height: 484px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=586\r
+ height=484\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 8:</b> "Finish \r
+ installation" page</p>\r
+\r
+<p>In this page you can read important information about the Instalation \r
+ Wizard itself and some tips: how to run and test SALOME or how to build \r
+ SALOME from the sources. This is the contents of the README file which \r
+ you can find in the root directory of the Installation Wizard. <br>\r
+You can also launch SALOME Desktop from this page or read the Release Notes \r
+ file by clicking on the corresponding buttons in the lower part of the \r
+ page (see <a href="#xml_files">here</a> and <a href="#finish_buttons">here</a> \r
+ for more information about customizing these buttons).</p>\r
+\r
+<h3 style="margin-left: 40px;"><a name=batch_mode></a>Batch mode</h3>\r
+\r
+<p>To launch the Installation Wizard in the batch mode use <span \r
+ style="font-weight: bold;">-b</span> \r
+ (<span \r
+ style="font-weight: bold;">--batch</span>) parameter.<br>\r
+In this mode the GUI wizard is not shown but all the installation status \r
+ is displayed directly in the console. In the batch mode the user does \r
+ not have a possibility to change installation settings which are given \r
+ in the configuration file, except target and temporary directories which \r
+ can be overridden by the corresponding command line options.<br>\r
+The only exception is <span \r
+ style="font-weight: bold;">--all-from-sources</span> \r
+ (<span \r
+ style="font-weight: bold;">-a</span>) option which enables special \r
+ installation mode in which all the products (including SALOME modules) \r
+ are installed from sources, ignoring the default mode defined in the XML \r
+ configuration file (see <a href="#install_from_wizard">here</a> for details).</p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><!--kadov_tag{{<spaces>}}--> <!--kadov_tag{{</spaces>}}--><a \r
+ name=BatchMode></a><br>\r
+<br>\r
+<img alt="Batch mode"\r
+ src="batchmode.png"\r
+ style="width: 660px;\r
+ height: 410px;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=660\r
+ height=410\r
+ border=0> </p>\r
+\r
+<p style="text-align: center;"\r
+ align=center><b style="font-weight: bold;">Figure 9:</b> Batch mode</p>\r
+\r
+<h3 style="margin-left: 40px;"><a name=env_files></a>Environment files</h3>\r
+\r
+<p>During the process of installation the script creates some environment \r
+ files to simplify the procedure of launching SALOME. These shell scripts \r
+ set all necessary environment variables for all products you have installed. \r
+ To learn how installation scripts collects the environment, see <a href="#pick_up_env">here</a>. \r
+ These files are: <b>salome.csh</b> + <b>salome.sh</b> in the <span style="font-style: italic; font-weight: bold;">KERNEL \r
+ module</span><b><i> sources</i></b> and <span style="font-style: italic; font-weight: bold;">KERNEL \r
+ module</span><b><i> binaries</i></b> root directories and <b>env_products.csh</b> \r
+ + <b>env_products.sh </b>and <span \r
+ style="font-weight: bold;">env_build.csh \r
+ </span>+ <span \r
+ style="font-weight: bold;">env_build.sh</span> in the target \r
+ installation directory.</p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><b><span \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></span></b><span \r
+ style="font-weight: bold;">Note:</span> there is some \r
+ difference between these files: <span \r
+ style="font-weight: bold;">env_build.*</span> \r
+ files are optimized to be used for building SALOME modules from sources \r
+ (see <span \r
+ style="font-weight: bold;">README </span>file provided with \r
+ the installation procedure on the CD). The <span \r
+ style="font-weight: bold;">env_products.*</span> \r
+ (and<span \r
+ style="font-weight: bold;"> salome.*</span>) files are optimized \r
+ for SALOME launching. The behavior is defined by the environment variable<span \r
+ style="font-weight: bold;"> </span><b>ENV_FOR_LAUNCH</b> which is set \r
+ to <span \r
+ style="font-weight: bold;">0</span> in env_build.* files and \r
+ to <span \r
+ style="font-weight: bold;">1</span> in env_products.* (salome.*) \r
+ files. </p>\r
+\r
+<!--kadov_tag{{<implicit_empty_p>}}--> <br><!--kadov_tag{{</implicit_empty_p>}}-->\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+<h3><a name=check_version_proc></a>Notes on<font \r
+ style="color: #ff0000;"\r
+ color=#FF0000> check products \r
+ version</font> procedure</h3>\r
+\r
+Unfortunately there is no exact algorithm to identify the product version \r
+ under Linux platform. The information in this section gives an idea how \r
+ the version is checked for the native/preinstalled products (this information \r
+ refers to the base platform <span style="color: rgb(0, 0, 153);">Linux \r
+ Mandrake 10.1</span>; and the same algorithms are used for other platforms). \r
+ <br>\r
+The general rule for all products is that the path to the binaries should \r
+ be set via the <span \r
+ style="font-weight: bold;">PATH</span> environment \r
+ variable, path to the libraries should be set via the <span \r
+ style="font-weight: bold;">LD_LIBRARY_PATH</span> \r
+ variable and the python modules should be available via the <span \r
+ style="font-weight: bold;">PYTHONPATH</span> \r
+ variable. \r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><b><span \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></span></b><span \r
+ style="font-weight: bold;">Note:</span> the information \r
+ given in this section refers to the prerequisite products for SALOME version \r
+ 3.2.4. </p>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>gcc 3.4.1</li>\r
+</ul>\r
+\r
+Version number is checked by <span \r
+ style="font-weight: bold;">gcc -dumpversion</span> \r
+ command. The <span \r
+ style="font-weight: bold;">gcc</span> executable should \r
+ be in the <span \r
+ style="font-weight: bold;">PATH</span> environment variable. \r
+ Version should be equal to "3.4.1". It is recommended to use \r
+ native gcc on Mandrake 10.1. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>tcl/tk 8.4.5</li>\r
+</ul>\r
+\r
+Version number for <span \r
+ style="font-weight: bold;">tcl/tk</span> can be \r
+ found in tclConfig.sh and tkConfig.sh files (<span \r
+ style="font-weight: bold;">TCL_VERSION</span> \r
+ and <span \r
+ style="font-weight: bold;">TK_VERSION</span> variables correspondingly). \r
+ Version number should be equal to "8.4" (release number is not \r
+ checked). <br>\r
+Set the <span \r
+ style="font-weight: bold;">TCLHOME</span> environment variable \r
+ to the root directory of tcl/tk installation.<br>\r
+It is recommended to use native tcl/tk on Mandrake 10.1. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>boost 1.31.0</li>\r
+</ul>\r
+\r
+Version number is defined by <span \r
+ style="font-weight: bold;">version.hpp</span> \r
+ file which is part of the boost distribution. This file defines the <span \r
+ style="font-weight: bold;">BOOST_VERSION</span> macro which should be \r
+ equal to "103100". In addition the existence of boost libraries \r
+ is checked. <br>\r
+Set the <span \r
+ style="font-weight: bold;">BOOSTDIR</span> environment variable \r
+ if you have a preinstalled version of boost. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>Python 2.3.4</li>\r
+</ul>\r
+\r
+Version number is checked by <span \r
+ style="font-weight: bold;">python -V</span> \r
+ command. The <span \r
+ style="font-weight: bold;">python</span> executable \r
+ should be in the <span \r
+ style="font-weight: bold;">PATH</span> environment \r
+ variable. Version number should be equal to "2.3.4". It is recommended \r
+ to use native Python on Mandrake 10.1.<br>\r
+Set the <span \r
+ style="font-weight: bold;">PYTHONHOME</span> environment \r
+ variable if you have a preinstalled version of Python. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>Swig 1.3.24</li>\r
+</ul>\r
+\r
+Version number is checked by <span \r
+ style="font-weight: bold;">swig -version</span> \r
+ command. The <span \r
+ style="font-weight: bold;">swig</span> executable should \r
+ be in the <span \r
+ style="font-weight: bold;">PATH</span> environment variable. \r
+ Version number should be equal to "1.3.24". \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>Qt 3.3.3</li>\r
+</ul>\r
+\r
+Version number is defined by <span \r
+ style="font-weight: bold;">qglobal.h</span> \r
+ file which is part of the Qt distribution. This file defines <span \r
+ style="font-weight: bold;">QT_VERSION_STR</span> \r
+ macro which should be equal to "3.3.3". It is recommended to \r
+ use native Qt on Mandrake 10.1.<br>\r
+Set the <span \r
+ style="font-weight: bold;">QTDIR</span> environment variable \r
+ if you have a preinstalled version of qt. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>msg2qm</li>\r
+</ul>\r
+\r
+<span \r
+ style="font-weight: bold;">msg2qm</span> is a Qt tool which is used \r
+ to convert text *.po files to *.qm resource files. Unfortunately this \r
+ tool is not included to the Linux distribution and provided only in Qt \r
+ sources package. This is the reason why this tool is supplied with the \r
+ SALOME Installation Wizard.<br>\r
+There is no way to check the version number of msg2qm tool. Just set <span \r
+ style="font-weight: bold;">MSG2QM_ROOT</span> environment variable if \r
+ you have a preinstalled version of msg2qm tool. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>Open CASCADE 6.1.2a2</li>\r
+</ul>\r
+\r
+Version number is defined by <span \r
+ style="font-weight: bold;">Standard_Version.hxx</span> \r
+ file which is part of the Open CASCADE distribution. This file defines \r
+ <span \r
+ style="font-weight: bold;">OCC_VERSION_MAJOR,</span> <span \r
+ style="font-weight: bold;">OCC_VERSION_MINOR</span> \r
+ and <span \r
+ style="font-weight: bold;">OCC_VERSION_MAINTENANCE</span> macros \r
+ which should refer to version 6.1.2.<br>\r
+Set the <span \r
+ style="font-weight: bold;">CASROOT</span> environment variable \r
+ if you have a preinstalled version of Open CASCADE. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>qwt 4.2.0/0.4.2</li>\r
+</ul>\r
+\r
+Version number is defined by <span \r
+ style="font-weight: bold;">qwt_global.h</span> \r
+ file which is part of the qwt distribution. This file defines <span \r
+ style="font-weight: bold;">QWT_VERSION_STR</span> \r
+ macro which should be equal to "4.2.0".<br>\r
+Set the <span \r
+ style="font-weight: bold;">QWTHOME</span> environment variable \r
+ if you have a preinstalled version of qwt. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>hdf 5-1.6.4</li>\r
+</ul>\r
+\r
+Version number is defined by <span \r
+ style="font-weight: bold;">libhdf5.settings</span> \r
+ file which is part of the <span \r
+ style="font-weight: bold;">hdf5</span> \r
+ distribution. Version should be equal to 1.6.4.<br>\r
+Set the <span \r
+ style="font-weight: bold;">HDF5HOME</span> environment variable \r
+ if you have a preinstalled version of hdf5. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>med 2.2.3</li>\r
+</ul>\r
+\r
+Unfortunately there is no formal way to check med version number. We check \r
+ existence of libmed.so.1.0.2 library on the computer. If you have any \r
+ problem with a preinstalled version of med, please, reinstall it.<br>\r
+Set the <span \r
+ style="font-weight: bold;">MED2HOME</span> environment variable \r
+ if you have a preinstalled version of med. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>Vtk 4.2.6</li>\r
+</ul>\r
+\r
+Unfortunately there is no formal way to check VTK version number. We just \r
+ check the existence of <span \r
+ style="font-weight: bold;">libvtkCommon.so</span> \r
+ library on the computer and hope that it is of version we need. If you \r
+ have any problem with a preinstalled version of Vtk, please, reinstall \r
+ it.<br>\r
+Set the <span \r
+ style="font-weight: bold;">VTKHOME</span> environment variable \r
+ if you have a preinstalled version of Vtk. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>OmniORB 4.0.5, OmniORBpy 2.5, OmniNotify 2.1</li>\r
+</ul>\r
+\r
+We just check existence of some omniORB libraries and executable on the \r
+ computer, like <span \r
+ style="font-weight: bold;">libomniORB4.so.0.5</span>, \r
+ <span \r
+ style="font-weight: bold;">_omnipymodule.so.2.4</span>, <span \r
+ style="font-weight: bold;">libCOSNotify4.so.0.1</span> \r
+ and <span \r
+ style="font-weight: bold;">notifd</span>.<br>\r
+Set the <span \r
+ style="font-weight: bold;">OMNIORBDIR</span> environment \r
+ variable if you have a preinstalled version of omniORB products. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>sip 4.1</li>\r
+</ul>\r
+\r
+Version number is checked by <span \r
+ style="font-weight: bold;">sip -V</span> \r
+ command. The <span \r
+ style="font-weight: bold;">sip</span> executable should \r
+ be in the <span \r
+ style="font-weight: bold;">PATH</span> environment variable. \r
+ Version number should be equal to "4.1".<br>\r
+Set the <span \r
+ style="font-weight: bold;">SIPDIR</span> environment variable \r
+ to the directory where you have sip executable preinstalled. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>PyQt 3.13</li>\r
+</ul>\r
+\r
+Version number is defined by <span \r
+ style="font-weight: bold;">pyqtconfig.py</span> \r
+ Python module file which is part of the <span \r
+ style="font-weight: bold;">PyQt</span> \r
+ distribution. Version should be equal to "3.13".<br>\r
+Set the <span \r
+ style="font-weight: bold;">PYQTDIR </span>environment variable \r
+ if you have a preinstalled version of PyQt. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>netgen 4.5</li>\r
+</ul>\r
+\r
+Unfortunarely we can't find anything about netgen version. We just check \r
+ if <span \r
+ style="font-weight: bold;">NETGENROOT</span> environment variable \r
+ is set.<br>\r
+Set the <span \r
+ style="font-weight: bold;">NETGENROOT</span> environment \r
+ variable if you have a preinstalled version of netgen mesher. \r
+\r
+<!--begin!kadov{{--><br><!--}}end!kadov--><!--kadov_tag{{<implicit_p>}}--> \r
+ \r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><span \r
+ style="font-weight: bold;"><b style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></b>Note: </span>netgen 4.5 provided with the SALOME installation \r
+ Wizard has been patched to improve its performance. </p>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>Numeric 23.7</li>\r
+</ul>\r
+\r
+Version number is checked by <span \r
+ style="font-weight: bold;">python -c \r
+ 'import Numeric; print Numeric.__version__'</span> command. The <span \r
+ style="font-weight: bold;">python</span> executable should be in the <span \r
+ style="font-weight: bold;">PATH</span> environment variable and <span \r
+ style="font-weight: bold;">Numeric</span> module should be available for \r
+ the Python (for example it should be in the <span \r
+ style="font-weight: bold;">PYTHONPATH</span> \r
+ environment variable). Version number should be equal to "23.7". \r
+ If you have any problem with a preinstalled version of Numeric 23.7, please, \r
+ reinstall it.<br>\r
+Add the directory where you have a preinstalled version of Numeric \r
+ package to the the <span \r
+ style="font-weight: bold;">PYTHONHOME </span>environment \r
+ variable. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>graphviz 2.2.1</li>\r
+</ul>\r
+\r
+Version number is checked by <span \r
+ style="font-weight: bold;">dot -V</span> \r
+ command. The <span \r
+ style="font-weight: bold;">dot</span> executable should \r
+ be in the <span \r
+ style="font-weight: bold;">PATH</span> environment variable. \r
+ Version number should be equal to "2.2.1".<br>\r
+Add <span \r
+ style="font-weight: bold;">graphviz</span> bin directory to the \r
+ the <span \r
+ style="font-weight: bold;">PATH</span> environment variable. \r
+ \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p>doxygen 1.4.6</li>\r
+</ul>\r
+\r
+Version number is checked by <span \r
+ style="font-weight: bold;">doxygen --version</span> \r
+ command. The <span \r
+ style="font-weight: bold;">doxygen</span> executable \r
+ should be in the <span \r
+ style="font-weight: bold;">PATH</span> environment \r
+ variable. Version number should be equal to "1.4.6". \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-weight: bold; color: rgb(0, 0, 153);">SALOME \r
+ </span>module <span style="font-weight: bold; color: rgb(0, 0, 153);">sources</span> \r
+ (3.2.4).</li>\r
+</ul>\r
+\r
+For each SALOME module sources package (KERNEL, GUI, GEOM, etc...) the \r
+ root directory contains file configure.in (configure.ac) which defines \r
+ version information.<br>\r
+Set the <span \r
+ style="font-weight: bold;"><MODULE>_SRC_DIR</span> \r
+ environment variable for each SALOME <span \r
+ style="font-weight: bold;">MODULE</span> \r
+ sources package installed (where <span \r
+ style="font-weight: bold;">MODULE</span> \r
+ is KERNEL, GUI, GEOM, ...). \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-weight: bold; color: rgb(0, 0, 153);">SALOME \r
+ </span>module <span style="font-weight: bold; color: rgb(0, 0, 153);">binaries \r
+ </span>(3.2.4)</li>\r
+</ul>\r
+\r
+For each SALOME module binaries package (KERNEL, GUI, GEOM, etc...) the \r
+ <span \r
+ style="font-weight: bold;">bin/salome</span> directory contains \r
+ file <span \r
+ style="font-weight: bold;">VERSION</span> which defines version \r
+ information.<br>\r
+Set <span \r
+ style="font-weight: bold;"><MODULE>_ROOT_DIR</span> environment \r
+ variable for each SALOME <span \r
+ style="font-weight: bold;">MODULE</span> \r
+ binaries package installed (where <span \r
+ style="font-weight: bold;">MODULE</span> \r
+ is KERNEL, GUI, GEOM, ...). \r
+\r
+<p>If you have native products installed to directories different from \r
+ default ones (not <b>/usr/bin</b>, <b>/usr/lib</b>...), it is recommended \r
+ to follow the above mentioned instructions. Or you should properly set \r
+ <span \r
+ style="font-weight: bold;">PATH</span> and <span \r
+ style="font-weight: bold;">LD_LIBRARY_PATH</span> \r
+ variables <b><font style="color: #ff0000;"\r
+ color=#FF0000>before</font></b> starting the Installation \r
+ Wizard. Otherwise the installation script will fail to find preinstalled/native \r
+ products. </p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><span><b \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></b></span><b style="font-weight: bold;">Note:</b> for some native \r
+ products (e.g. gcc, Python) the rules of version checking are not so strict \r
+ as described above. Only major and minor version numbers should coincide \r
+ with the prerequisite. Newer version of the product can also be used. \r
+ If some native product has version number larger than that required by \r
+ the installation procedure, the user will be prompted by the warning message \r
+ like this: <i>"You have newer version of gcc installed on your computer \r
+ than that is required (3.4.1). Continue?"</i>. You can click <i>"Yes"</i> \r
+ to proceed with the installation but in this case you should be aware \r
+ of what you are doing. SALOME binaries (including other products) are \r
+ compiled with the predefined prerequisites and most likely can not be \r
+ run successfully if these products are not found. This can be helpful \r
+ only if you plan to build all products from sources. </p>\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+<h3><a name=pick_up_env></a>Pick up the <font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>environment</font></h3>\r
+\r
+Please, read the following information carefully . This section describes \r
+ how the installation procedure generates the environment scripts for the \r
+ SALOME platform being installed. \r
+\r
+<p>After installing each product shell the script creates a special environment \r
+ file for the product in its installation folder. The name of the file \r
+ is generated from the name of product by the following scheme: <b>env_<product_name>.sh</b> \r
+ (for example <b>env_Vtk.sh </b>for the Vtk). This file includes all necessary \r
+ environment settings. At the final step of the installation the script \r
+ picks up all the settings files and generates two common environment files \r
+ from them: <b>salome.sh</b> and <b>salome.csh </b>for <span \r
+ style="font-weight: bold;">bash</span> \r
+ and <span \r
+ style="font-weight: bold;">csh</span> shells correspondingly. \r
+ Such approach helps to save time when reinstalling products and you may \r
+ not bother about setting all environment variables manually to build/launch \r
+ SALOME. What you simply need is to source one of these environment files. \r
+ </p>\r
+\r
+<p>This also concerns those products which are not being installed. For \r
+ example, you install some SALOME binaries to the directory where you have \r
+ previously installed other products. The Installation procedure \r
+ tries to collect environment files from the target directory if it finds \r
+ necessary products installed there. If some product is not found in the \r
+ target directory the corresponding section of <b>salome.sh/salome.csh</b> \r
+ files will be skipped. <br>\r
+For native products (like <i><b>gcc, tcl, etc...)</b></i> the installation \r
+ procedure tries to find them first using <b>PATH</b> / <b>LD_LIBRARY_PATH</b> \r
+ variables and then in the system default directories (<b>/usr/bin, /usr/lib</b> \r
+ etc., depending on the product). </p>\r
+\r
+<p>In any case you may edit <b>salome.*</b> files after the installation \r
+ procedure finishes, if you want.</p>\r
+\r
+ \r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><span><b \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></b></span><span \r
+ style="font-weight: bold;">Note:</span> \r
+ as it was mentioned <a href="#env_files">above</a> there are other environment \r
+ files which are generated by the installation procedure: <span \r
+ style="font-weight: bold;">env_products.csh</span> \r
+ + <span \r
+ style="font-weight: bold;">env_products.sh</span> and <span \r
+ style="font-weight: bold;">env_build.csh</span> \r
+ + <span \r
+ style="font-weight: bold;">env_build.sh</span>. These files can \r
+ be found in the target installation root directory.</p>\r
+\r
+<!--kadov_tag{{<implicit_empty_p>}}--> <br><!--kadov_tag{{</implicit_empty_p>}}-->\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+<h3><a name=xml_files></a>Modifying <font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>XML</font> configuration \r
+ <font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>file</font></h3>\r
+\r
+You can create your own XML configuration file. The Installation Wizard \r
+ can then take it as a command line argument to provide a list of products \r
+ you want to install with it. The list of products and some other settings \r
+ for the Installation Wizard are provided in the XML file. The default \r
+ file which Installation Wizard looks for if no command line arguments \r
+ are given, is <b>config.xml</b>.<br>\r
+This section describes the structure of the configuration file. <br>\r
+XML tags are in bold blue, optional sections/tags are in brackets. \r
+\r
+<p><font style="font-family: Courier;"\r
+ face=Courier><b style="font-weight: bold;"><font style="color: #000099;"\r
+ color=#000099><document></font></b> \r
+ <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+ </b>[</font><b><font style="color: #000099;"\r
+ color=#000099> <config</font></b><font style="color: #000000;"\r
+ color=#000000> [ version=<install_wizard_version> ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [ \r
+ caption=<install_wizard_caption> ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [ \r
+ copyright=<install_wizard_copyright> ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [ \r
+ license=<install_wizard_license_info> ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [ \r
+ os=<target_platform> ]</font><b><font style="color: #000099;"\r
+ color=#000099><br>\r
+ /></font></b><font style="color: #000000;"\r
+ color=#000000> <br>\r
+ ]</font> <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+ </b>[ </font><b><font style="color: #000099;"\r
+ color=#000099><path</font></b><font style="color: #000000;"\r
+ color=#000000> [ targetdir=<target_directory> ]</font> \r
+ <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [ \r
+ tempdir=<temp_directory> ]</font><b><font style="color: #000099;"\r
+ color=#000099><br>\r
+ /> </font></b><font style="color: #000000;"\r
+ color=#000000><br>\r
+ ]</font> <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+ </b>[ </font><b><font style="color: #000099;"\r
+ color=#000099><button</font></b><font style="color: #000000;"\r
+ color=#000000> label=<button_label> </font> \r
+ <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ [ tooltip=<button_tooltip> ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ script=<button_script> </font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ [ disable=<disable_flag> ]</font><b><font style="color: #000099;"\r
+ color=#000099><br>\r
+ /> </font></b><font style="color: #000000;"\r
+ color=#000000><br>\r
+ ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [</font><b><font style="color: #000099;"\r
+ color=#000099> <button</font></b><font style="color: #000000;"\r
+ color=#000000> ... </font><font style="color: #000099;"\r
+ color=#000099><br>\r
+ /<b>></b></font><font style="color: #000000;"\r
+ color=#000000><br>\r
+ ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [</font><b><font style="color: #000099;"\r
+ color=#000099> <product</font></b><font style="color: #000000;"\r
+ color=#000000> name=<product_name></font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ version=<product_version></font> <br>\r
+ [ context=<product_context> \r
+ ]<br>\r
+ [ description=<product_description> \r
+ ]<font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ install=<installation_mode></font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ supported=<supported_installation_modes></font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [ \r
+ disable=<disable_flag> ]<br>\r
+ [ pickupenv=<pickup_env_flag> \r
+ ]<br>\r
+ \r
+ dependancies=<list_of_prerequisites></font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ installdiskspace=<install_disk_space></font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ temporarydiskspace=<tmp_disk_space></font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ \r
+ script=<installation_script_name></font><font style="color: #000099;"\r
+ color=#000099><br>\r
+ /<b>></b></font><font style="color: #000000;"\r
+ color=#000000> \r
+ <br>\r
+ ]</font> <font style="color: #000000;"\r
+ color=#000000><br>\r
+ [</font><b><font style="color: #000099;"\r
+ color=#000099> <product</font></b><font style="color: #000000;"\r
+ color=#000000> ... </font><font style="color: #000099;"\r
+ color=#000099><br>\r
+ /<b>></b></font><font style="color: #000000;"\r
+ color=#000000> \r
+ <br>\r
+ ]<br>\r
+ ...</font><b><font style="color: #000099;"\r
+ color=#000099><br>\r
+</document></font></b> </font></p>\r
+\r
+<h4><font style="color: #000000;"\r
+ color=#000000><config> section</font></h4>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>This is an optional section; it provides general \r
+ information about the Installation Wizard itself.<br>\r
+<br>\r
+Attributes:</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">version</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The application version number to be shown in the \r
+ caption.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">caption</b></font></li>\r
+</ul>\r
+\r
+The application main window caption - if this string contains '%1' text \r
+ the title will contain the version number in this place (see above). \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">copyright</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The application copyright information (shown in the \r
+ first page).</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">license</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The application license information (shown in the \r
+ first page).</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">os</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>This parameter defines the directory (relative from \r
+ ./Products/BINARIES) where the Installation Wizard will search precompiled \r
+ binaries packages. If this tag is not provided, binaries packages are \r
+ looked for in the ./Products/BINARIES directory.</font> \r
+\r
+<h4><b style="font-weight: bold;"><font style="color: #000000;"\r
+ color=#000000><path> section</font></b></h4>\r
+\r
+This is an optional section; it defines default installation directories.<font style="color: #000000;"\r
+ color=#000000><br>\r
+<br>\r
+Attributes:</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">targetdir</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The target directory - the path to the directory \r
+ where products should be installed.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">tempdir</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The temporary directory - the path to the directory \r
+ for the temporary files.</font> \r
+\r
+<h4><b style="font-weight: bold;"><product> section</b></h4>\r
+\r
+This section describes product to be installed with the Installation Wizard. \r
+ The XML file should include a <product> section for each product \r
+ to be installed. The products appear in the tree view and are installed \r
+ in the order they are described in the configuration file. It is recommended \r
+ (but not obligatory) to define native products at the top of the list \r
+ before all other products.<font style="color: #000000;"\r
+ color=#000000><br>\r
+<br>\r
+Attributes:</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">name</b></font></li>\r
+</ul>\r
+\r
+Product name. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">version</b></font></li>\r
+</ul>\r
+\r
+<span>Product</span> version. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">description</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>Product description (optional).</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">context</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>Context (optional). The possible values are <b>'salome \r
+ sources'</b>, <b>'salome binaries'</b> and <b>'prerequisite'</b> (several \r
+ contexts can be given separated by ":" symbol).</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">supported</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>Supported modes of installation. Several modes can \r
+ be separated by comma. Possible value are: <i>install sources</i>, <i>install \r
+ binaries</i>, <i>use native</i>. The Installation script should contain \r
+ the corresponding functions for each of the supported installation modes \r
+ (see <a href="#new_products">here</a>).</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">install</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>Default (starting) installation mode.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">disable</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>If this optional flag has 'true' value, the corresponding \r
+ product will not appear in the list of products and will not be installed.</font> \r
+ \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;">pickupenv</b></li>\r
+</ul>\r
+\r
+This flag points that pickup environment procedure should be performed \r
+ for this product. If this flag equal to 'true', salome.sh and salome.csh \r
+ files will be created in the product installation directory. Usually \r
+ this option is set to true for SALOME KERNEL module sources and binaries \r
+ package. This is an optional key, default value is 'false'<b>.</b> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">dependancies</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>List of prerequisite products, which are necessary \r
+ to build this product, separated by comma.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">installdiskspace</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>Total amount of space (integer, in Kbytes), which \r
+ the product occupies on the hard drive after the installation.</font> \r
+ \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">temporarydiskspace</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>Disk space (integer, in Kbytes) for temporary files, \r
+ which is necessary to build the product from the sources.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">script</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The installation script name. This script is in charge \r
+ of the installation of the product. It is called automatically by the \r
+ Installation Wizard when necessary from the main program. See the <a href="#new_products">next \r
+ section</a> for more information.</font> \r
+\r
+<h4><b style="font-weight: bold;"><button> section</b></h4>\r
+\r
+This is an optional section. It allows customization of the last <i>"Finish \r
+ installation"</i> page of the Installation Wizard by adding one or \r
+ more buttons in the lower part of the wizard's window. The script which \r
+ is attached to each such button, can perform some specific action, for \r
+ example, launch the application or show the Release Notes file by using \r
+ an external program. See <a href="#finish_buttons">here</a> for more details \r
+ about writing scripts.<font style="color: #000000;"\r
+ color=#000000><br>\r
+<br>\r
+Attributes:</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">label</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>This is the button text.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">tooltip</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The button tooltip (optional).</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">script</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>The script attached to the button.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">disable</b></font></li>\r
+</ul>\r
+\r
+<p style="background-color: #ffffff;">If this optional flag has 'true' \r
+ value, the corresponding button will not appear in the <i>"Finish \r
+ installation"</i> page - the section of XML file is silently ignored.<b> </b></p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><b \r
+ style="font-weight: bold;"><span style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></span><span style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');">Note:</span></b><span style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"> \r
+ If you add new products to be installed with Installation Wizard, you \r
+ should also provide installation script for this product. See the next \r
+ section for more details. </span></p>\r
+\r
+<!--kadov_tag{{<implicit_empty_p>}}--> <br><!--kadov_tag{{</implicit_empty_p>}}-->\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+<h3><a name=new_products></a>Implementing <font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>installation \r
+ scripts</font> for the new products</h3>\r
+\r
+When you want some product to be installed with the Installation Wizard, \r
+ you should add its description <a href="#xml_files">to the configuration \r
+ file</a> and create the installation script, following the rules described \r
+ in this section. <br>\r
+<br>\r
+There are some obligatory functions which should be implemented in this \r
+ installation script. These functions are automatically called by the master \r
+ installation script or/and its GUI shell when it is necessary.<font style="color: #000000;"\r
+ color=#000000><br>\r
+File <b>common.sh</b> contains some service functions which can be used \r
+ in your installation script, like <b>make_env()</b>,<b> make_dir()</b>, \r
+ <b>try_existing()</b>, <b>sort_path()</b>,<b> find_in_path()</b>, etc.</font> \r
+ \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;">check_version()</b></li>\r
+</ul>\r
+\r
+This function allows to check the version of the product already installed \r
+ on the computer. It should try to find the product (native or preinstalled \r
+ in the target directory) and check its version. This helps to avoid unnecessary \r
+ reinstallation. This is an internal function and is not called from the \r
+ master installation script. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><b style="font-weight: bold;"><font style="color: #000000;"\r
+ color=#000000>try_native()</font></b></li>\r
+</ul>\r
+\r
+This function is called when the <i>'use native' </i>installation mode \r
+ is selected by the user. The function should try to find a native version \r
+ of the product and define possibility of its use. It should create the \r
+ environment file for the product in the temporary directory (see also \r
+ the description of <b>print_env(</b><span \r
+ style="font-weight: bold;">)</span> \r
+ function). It is not necessary to implement this function if you do not \r
+ provide native mode installation. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">install_source()</b></font></li>\r
+</ul>\r
+\r
+This function is called when the <i>'install sources</i>' installation \r
+ mode is selected by the user. The function is responsible for building \r
+ the product from the sources package. It should create the environment \r
+ file for the product in the temporary directory (see also description \r
+ of <b>print_env(</b><span \r
+ style="font-weight: bold;">)</span> function). \r
+ It is not necessary to implement this function if you do not provide sources \r
+ mode installation. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">install_source_and_build()</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>This function is called when SALOME module is installed \r
+ and the <span style="font-weight: bold;">--all-from-sources</span> (<span style="font-weight: bold;">-a</span>) option is used (<span style="font-style: italic;">"Build \r
+ SALOME sources"</span> check box in GUI mode). This function should \r
+ be used to unpack SALOME sources package and then call the build/install \r
+ procedure for it.<br>\r
+For more details please refer to the <a href="#install_from_wizard">this</a> \r
+ and <a href="#gui_mode">this</a> sections for more details.</font> \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">install_binary()</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>This function is called when the <i>'install binaries'</i> \r
+ installation mode is selected by the user. The function is responsible \r
+ for the extracting of the product from the binaries package. It should \r
+ create environment for the product in the temporary directory (see also \r
+ description of <b>print_env(</b>) function). It is not necessary to implement \r
+ this function if you do not provide binaries mode installation. \r
+\r
+</font><ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;">try_preinstalled()</b></li>\r
+</ul>\r
+\r
+This function is called when<i><span style="font-style: normal;"> the</span> \r
+ 'not install'</i> installation mode is selected by the user. In this case \r
+ the script should inspect the target directory to try to find an already \r
+ preinstalled product, pick up and check the environment from there. See \r
+ <a href="#pick_up_env">here</a> for more details. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;">print_env()</b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000>This function is in charge of creating the environment \r
+ script. It should create a file with name </font><b>env_<product_name>.sh</b> \r
+ in the temporary directory and then copy it into the product installation \r
+ directory. The file should contain all necessary environment variables \r
+ settings for the product. It will be collected during the 'pick-up-environment' \r
+ procedure. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;">pickup_env()</b></li>\r
+</ul>\r
+\r
+This procedure corresponds to the <b>pickupenv</b> tag of the configuration \r
+ xml file (see previous section). It should call the <b>make_env</b> procedure \r
+ to perform the pick-up environment procedure for the product.<font style="color: #000000;"\r
+ color=#000000><br>\r
+<br>\r
+The calling signature of the product installation script is the following:</font> \r
+ <b><font style="color: #000000;"\r
+ color=#000000><br>\r
+<product_script_name> <function_name> <temp_folder> <products_directory> \r
+ <target_directory> <dependancies> <product_name></font></b> \r
+ \r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000>where</font> </p>\r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><product_script_name></b> \r
+ - installation script name (described in the configuration xml file);</font> \r
+ <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+<function_name></b> - the name of function, corresponding to the \r
+ selected installation mode: <i>try_native, install_source, install_binary</i> \r
+ or <i>try_preinstalled</i>;</font> <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+<temp_folder></b> - temporary files directory;</font> <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+<products_directory></b> - directory where the sources/binaries package \r
+ can be found. You should provide the sources package in the <i><Install_Wizard_root_directory>/Products/SOURCES</i> \r
+ directory and binaries package in the <i><InstallWizard_root_directory>/Products/BINARIES/<os_version></i>, \r
+ where <os_version> is the target platform description, which appears \r
+ in the corresponding section of the <a href="#xml_files">configuration \r
+ xml file</a>.</font> <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+<target_directory></b> - root target directory where the product \r
+ should be installed to;</font> <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+<dependancies></b> - single-quoted list of prerequisite products, \r
+ separated by space;</font> <font style="color: #000000;"\r
+ color=#000000><b><br>\r
+<product_name> </b>- product name itself.</font> </p>\r
+\r
+<p><font style="font-weight: bold;">Example:</font> <i><br>\r
+med-2.2.3.sh install_binary /tmp/work ./Products/BINARIES/Mandrake10.1 \r
+ /usr/salome 'gcc Hdf' med</i> </p>\r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000>Copy the created script into the <i><Install_Wizard_root_directory>/config_files</i> \r
+ sub-directory where all installation scripts are stored. Installation \r
+ Wizard will automatically search and call your script during the installation \r
+ procedure.</font> </p>\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+ \r
+\r
+<h3><a name=finish_buttons></a>Customizing <font \r
+ style="color: #ff0000;"\r
+ color=#FF0000>Readme page</font> \r
+ buttons</h3>\r
+\r
+The Installation Wizard allows customizing the look-n-feel of the last \r
+ <i>"Finish installation"</i> page. If you want to add one or \r
+ more buttons to this page in order to perform some specific actions at \r
+ the end of the installation (for example, to show the Release Notes file \r
+ by using Open Office) you can put an additional section to the XML configuration \r
+ file. This is the <b><button></b> section (see <a href="#xml_files">here</a> \r
+ for more details). \r
+\r
+<!--begin!kadov{{--><br><!--}}end!kadov--><!--kadov_tag{{<implicit_p>}}--> \r
+ \r
+\r
+<!--begin!kadov{{--><br><!--}}end!kadov--><!--kadov_tag{{<implicit_p>}}-->To \r
+ implement the action which will be performed when the user clicks the \r
+ button, you need to create a script and put it to the <i><Install_Wizard_root_directory>/config_files</i> \r
+ directory.<br>\r
+There are some obligatory functions which should be implemented in this \r
+ script. These functions are automatically called by the Installation Wizard \r
+ GUI. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;">check_enabled()</b></li>\r
+</ul>\r
+\r
+This procedure is called by the Installation Wizard when the <i>"Finish \r
+ installation"</i> page is displayed and the status of the buttons \r
+ should be modified according to the installation options. This procedure \r
+ should return <b>0</b> if the corresponding action can be performed and, \r
+ thus, the button should become enabled. Otherwise, it should return <b>1</b> \r
+ - in this case the corresponding button will be disabled. \r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;">execute()</b></li>\r
+</ul>\r
+\r
+This procedure is invoked when the user clicks the button. This procedure \r
+ should return <b>0</b> if the corresponding action is done successfully \r
+ and <b>1</b> if any error occurs.<br>\r
+<br>\r
+The calling signature of the script is the following:<b><font style="color: #000000;"\r
+ color=#000000><br>\r
+<product_script_name> <function_name> <target_directory> \r
+ <temp_folder></font></b> \r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000>where</font> </p>\r
+\r
+<p><b style="font-weight: bold;"><product_script_name></b> - the \r
+ script name itself (retrieved from the XML configuration xml file); <b><br>\r
+<function_name></b> - the name of function; <b><br>\r
+<target_directory></b> - root target directory where the product \r
+ is installed to; <b><br>\r
+<temp_folder> </b>- temporary files directory; <b><br>\r
+ </b></p>\r
+\r
+<p style="background-image: url('../Texture_horiz_ltbluebubbles.jpg');"><b><span \r
+ style="font-weight: bold;"><img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></span>Note:</b> The standard \r
+ Installation Wizard buttons "Launch SALOME" and "Release \r
+ Notes" are implemented with this feature. Refer to scripts <b>start_salome.sh</b> \r
+ and <b>release_notes.sh</b> for sample implementation.<b><span \r
+ style="font-weight: bold;"><br>\r
+<br>\r
+<img src="../note1.gif"\r
+ x-maintain-ratio=TRUE\r
+ style="border: none;\r
+ width: 36px;\r
+ height: 38px;\r
+ float: none;\r
+ border-style: none;\r
+ border-style: none;"\r
+ width=36\r
+ height=38\r
+ border=0></span>Note:</b> Any button (even standard) can be \r
+ ignored by the Installation Wizard if the attribute <b><disable></b> \r
+ in the XML configuration file is set to the "true" value. </p>\r
+\r
+\r
+<!--(HR)============================================================-->\r
+<hr style="/*begin!kadov{{*/ float: aligncenter; /*}}end!kadov*/ ">\r
+\r
+\r
+ \r
+\r
+</body>\r
+\r
+</html>\r
<html>\r
\r
<head>\r
-<title>Installation Wizard</title>\r
+<title>SALOME Installation Wizard Help</title>\r
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="../default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
+<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com"><style>\r
<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='../default.css'>");}\r
-//-->\r
-</script>\r
-<style>\r
-<!--\r
-body { }\r
+A:visited { color:#551a8b; }\r
+A:active { color:#ff0000; }\r
+A:link { color:#0000ee; }\r
-->\r
</style><style type="text/css">\r
<!--\r
-h1.whs1 { font-size:24pt; }\r
-hr.whs2 { float:aligncenter; }\r
-p.whs3 { background-color:#ffffff; }\r
-p.whs4 { font-weight:bold; }\r
-table.whs5 { x-cell-content-align:top; width:100%; border-left-style:Solid; border-left-color:#c0c0c0; border-left-width:0px; border-top-style:Solid; border-top-color:#c0c0c0; border-top-width:0px; border-right-style:Solid; border-right-color:#c0c0c0; border-right-width:0px; border-bottom-style:Solid; border-bottom-color:#c0c0c0; border-bottom-width:0px; border-spacing:0px; }\r
-col.whs6 { width:19.092%; }\r
-col.whs7 { width:80.908%; }\r
-tr.whs8 { x-cell-content-align:top; }\r
-td.whs9 { width:19.092%; padding-right:10px; padding-left:10px; border-left-color:#c0c0c0; border-top-style:Solid; border-top-color:#c0c0c0; border-right-style:Solid; border-right-color:#c0c0c0; border-bottom-style:Solid; border-bottom-color:#c0c0c0; border-bottom-width:1px; border-right-width:1px; border-left-width:1px; border-left-style:solid; border-top-width:1px; }\r
-td.whs10 { width:80.908%; padding-right:10px; padding-left:10px; border-top-style:Solid; border-top-color:#c0c0c0; border-right-style:Solid; border-right-color:#c0c0c0; border-bottom-style:Solid; border-bottom-color:#c0c0c0; border-bottom-width:1px; border-top-width:1px; border-right-width:1px; }\r
-td.whs11 { width:19.092%; padding-right:10px; padding-left:10px; border-left-color:#c0c0c0; border-right-style:Solid; border-right-color:#c0c0c0; border-bottom-style:Solid; border-bottom-color:#c0c0c0; border-bottom-width:1px; border-right-width:1px; border-left-width:1px; border-left-style:solid; }\r
-td.whs12 { width:80.908%; padding-right:10px; padding-left:10px; border-right-style:Solid; border-right-color:#c0c0c0; border-bottom-style:Solid; border-bottom-color:#c0c0c0; border-bottom-width:1px; border-right-width:1px; }\r
-td.whs13 { width:80.908%; padding-right:10px; padding-left:10px; border-right-color:#c0c0c0; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#c0c0c0; border-bottom-width:1px; border-right-width:1px; }\r
-p.whs14 { text-align:center; }\r
-img_whs15 { border:none; width:586px; height:366px; float:none; }\r
-p.whs16 { text-align:center; font-style:italic; }\r
-img_whs17 { border:none; width:586px; height:553px; border-style:none; float:none; }\r
-p.whs18 { background-image:url('../texture_horiz_ltbluebubbles.jpg'); }\r
-img_whs19 { border:none; width:36px; height:38px; float:none; border-style:none; }\r
-img_whs20 { border:none; width:586px; height:553px; float:none; border-style:none; }\r
-img_whs21 { border:none; width:586px; height:366px; float:none; border-style:none; }\r
-img_whs22 { border:none; width:35px; height:37px; float:none; border-style:none; }\r
-img_whs23 { border:none; width:586px; height:486px; float:none; border-style:none; }\r
-table.whs24 { background-repeat:repeat; background-attachment:scroll; width:100%; background-image:url('../texture_horiz_ltbluebubbles.jpg'); float:alignleft; x-cell-content-align:Center; border-spacing:0px; }\r
-tr.whs25 { x-cell-content-align:center; }\r
-th.whs26 { border-top-style:Solid; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; border-left-color:#000080; border-left-width:1px; border-left-style:Solid; border-top-color:#000080; border-top-width:1px; }\r
-p.whs27 { text-align:center; font-size:12pt; }\r
-th.whs28 { border-top-style:Solid; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; border-top-color:#000080; border-top-width:1px; }\r
-th.whs29 { border-top-style:Solid; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-top-color:#000080; border-top-width:1px; border-right-color:#000080; border-right-width:1px; }\r
-td.whs30 { border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; border-left-color:#000080; border-left-width:1px; border-left-style:Solid; }\r
-td.whs31 { border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; }\r
-td.whs32 { x-cell-content-align:top; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; border-left-color:#000080; border-left-width:1px; border-left-style:Solid; }\r
-td.whs33 { x-cell-content-align:top; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; }\r
-td.whs34 { vertical-align:top; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; border-left-color:#000080; border-left-width:1px; border-left-style:Solid; }\r
-td.whs35 { vertical-align:top; border-right-style:Solid; border-bottom-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; border-right-color:#000080; border-right-width:1px; }\r
-td.whs36 { border-right-style:Solid; border-bottom-style:Solid; border-right-color:#000080; border-right-width:1px; border-left-color:#000080; border-left-width:1px; border-left-style:Solid; border-bottom-color:#000080; border-bottom-width:1px; }\r
-td.whs37 { border-right-style:Solid; border-bottom-style:Solid; border-right-color:#000080; border-right-width:1px; border-bottom-color:#000080; border-bottom-width:1px; }\r
+p.whs1 { text-align:center; }\r
+table.whs2 { width:100%; }\r
+img_whs3 { width:139px; height:47px; border-style:none; }\r
+h3.whs4 { text-align:center; }\r
+div.whs5 { text-align:right; }\r
+img_whs6 { width:109px; height:47px; border-style:none; }\r
+hr.whs7 { float:aligncenter; }\r
+div.whs8 { margin-left:40px; }\r
+h3.whs9 { margin-left:40px; }\r
+img_whs10 { width:586px; height:364px; border-style:none; }\r
+p.whs11 { background-image:url('../texture_horiz_ltbluebubbles.jpg'); }\r
+img_whs12 { border:none; width:35px; height:37px; float:none; border-style:none; }\r
+img_whs13 { float:none; width:586px; height:525px; border-style:none; }\r
+img_whs14 { border:none; width:36px; height:38px; float:none; border-style:none; }\r
+img_whs15 { width:586px; height:525px; border-style:none; }\r
+img_whs16 { width:586px; height:485px; border-style:none; }\r
+p.whs17 { text-align:justify; }\r
+img_whs18 { width:586px; height:484px; border-style:none; }\r
+img_whs19 { width:660px; height:410px; border-style:none; }\r
+p.whs20 { background-color:#ffffff; }\r
-->\r
</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
<!--\r
//-->\r
</script>\r
</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
+<body style="color: #000000;"><script type="text/javascript" language="javascript1.2">\r
<!--\r
if (window.writeIntopicBar)\r
writeIntopicBar(4);\r
//-->\r
</script>\r
-<h1 class="whs1">Installing SALOME</h1>\r
+<p align="center" class="whs1"> </p>\r
+\r
+<table nosave x-use-null-cells width="100%" class="whs2">\r
+\r
+<tr nosave>\r
+<td nosave>\r
+<h1><a href="http://www.opencascade.com"><img src="logocorp.png" width="139px" height="47px" border="0" class="img_whs3"> </a></td>\r
+<td>\r
+<h3 align="center" class="whs4"><font style="font-size: xx-large;"\r
+ size=7><font style="color: #000099;"\r
+ color=#000099>SALOME Installation Wizard \r
+ Help</font></font></td>\r
+<td>\r
+<div align="right" class="whs5">\r
+<a href="http://www.opencascade.org/SALOME/"><img src="application.png" width="109px" height="47px" border="0" class="img_whs6"> </a>\r
+</div></td></tr>\r
+</table>\r
\r
+<div align="right" class="whs5">\r
+ \r
+</div>\r
\r
-<hr class="whs2">\r
+\r
+<hr class="whs7">\r
\r
\r
<ul>\r
class=kadov-p><a href="#install_from_wizard">Installing products \r
with the Installation Wizard</a></li>\r
\r
+ <ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#gui_mode">GUI mode</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#batch_mode">Batch mode</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#env_files">Environment files</a></li>\r
+ </ul>\r
+ \r
<li class=kadov-p\r
class=kadov-p><a href="#check_version_proc">Notes on check products \r
version procedure</a></li>\r
class=kadov-p><a href="#xml_files">Modifying XML configuration \r
file</a></li>\r
\r
- <li class=kadov-p><p class="whs3"><a href="#new_products">Implementing \r
- installation scripts for the new products</a></p></li>\r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#new_products">Implementing installation \r
+ scripts for the new products</a></li>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><a href="#finish_buttons">Customizing Readme page \r
+ buttons</a></li>\r
</ul>\r
\r
\r
-<hr class="whs2">\r
+<hr class="whs7">\r
\r
\r
<h3><a name=install_from_wizard></a>Installing products with the <font \r
style="color: #ff0000;"\r
color=#FF0000>Installation Wizard</font></h3>\r
\r
-<p>The Installation Wizard can be launched in two modes: GUI and batch. \r
- <br>\r
-The root directory of the Installation Wizard contains python script <span \r
- style="font-weight: bold;"><B>runInstall</B></span>. To run the Installation \r
- Wizard just type <b>runInstall</b> in terminal window:</p>\r
-\r
-<p class="whs4">[ python ] runInstall [<options>]. \r
- <span style="font-weight: normal;">Each \r
- option has short and long notation:</span></p>\r
-\r
-<p class="whs4"> </p>\r
-\r
-<table x-use-null-cells cellspacing="0" width="100%" class="whs5">\r
-<script language='JavaScript'><!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4)) document.write("</table><table x-use-null-cells cellspacing='0' width='100%' border='1' bordercolor='silver' bordercolorlight='silver' bordercolordark='silver'>");\r
-//--></script>\r
-<col class="whs6">\r
-<col class="whs7">\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="19.092%" class="whs9">\r
-<p class="whs4"><b style="font-weight: bold;">-g / \r
- --gui </b></td>\r
-<td width="80.908%" class="whs10">\r
-<p>Runs the Installation Wizard in the GUI mode (default option). In this \r
- case only<span style="font-weight: bold;"><B> <xml-file></B></span> key \r
- is taken into account. Other parameters are ignored. </td></tr>\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="19.092%" class="whs11">\r
-<p><b style="font-weight: bold;">-b / \r
- --batch \r
- </b></td>\r
-<td width="80.908%" class="whs12">\r
-<p>Runs the Installation Wizard in command-line mode. </td></tr>\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="19.092%" class="whs11">\r
-<p><b style="font-weight: bold;">-f <</b><span \r
- style="font-weight: bold;"><B>FILE> / --file=<FILE></B></span> \r
- </td>\r
-<td width="80.908%" class="whs12">\r
-<p>The configuration file to be used by the Installation Wizard. \r
- If this parameter is not used then the installation script tries to define \r
- the <i><span style="font-style: italic;"><I>Linux</I></span> </i>version and \r
- use the corresponding xml file. For example, <b>config_Mandrake10_1.xml</b> \r
- file is to be used for <i>Linux \r
- Mandrake 10.1</i>. If the appropriate file is not found, the file <b>config.xml</b> \r
- will be used. This file refers to the basic target platform which \r
- is Linux Mandrake 10.1 for SALOME 3.0 and higher. If config.xml file is \r
- also not found, the warning message box is shown (in GUI mode) or printed \r
- to the console (in batch mode) and the Installation Wizard quits.</td></tr>\r
-\r
-<tr valign="top" class="whs8">\r
-<td colspan="1" rowspan="1" width="19.092%" class="whs11">\r
-<p><span style="font-weight: bold;"><B>-d <DIR> / --target=<DIR></B></span> \r
- </td>\r
-<td colspan="1" rowspan="1" width="80.908%" class="whs12">\r
-<p>The target directory for SALOME platform to be installed to. If used, \r
- this option \r
- overrides the default target directory, defined in the configuration XML \r
- file (usually ${HOME}/salome_<version>).</td></tr>\r
-\r
-<tr valign="top" class="whs8">\r
-<td colspan="1" rowspan="1" width="19.092%" class="whs11">\r
-<p> <b>-t <</b><span style="font-weight: bold;"><B>DIR> / --tmp=<DIR></B></span> \r
- </td>\r
-<td colspan="1" rowspan="1" width="80.908%" class="whs12">\r
-<p>The directory, which is used for temporary files. If used, this option \r
- overrides the default temporary directory, given in the configuration \r
- xml file (usually <span style="font-weight: bold;"><B>/tmp</B></span>, see <a \r
- href="#xml_files">here</a>).</td></tr>\r
-\r
-<tr valign="top" class="whs8">\r
-<td width="19.092%" class="whs11">\r
-<p><span style="font-weight: bold;"><B>-h / --help</B></span> \r
- </td>\r
-<td width="80.908%" class="whs12">\r
-<p>Prints help information about available options. </td></tr>\r
-\r
-<tr valign="top" class="whs8">\r
-<td colspan="1" rowspan="1" width="19.092%" class="whs11">\r
-<p class="whs4">-v / --version </td>\r
-<td colspan="1" rowspan="1" width="80.908%" class="whs13">\r
-<p>Prints version information (Note: this is the Installation Wizard's \r
- version number, not of SALOME platform). </td></tr>\r
-<script language='JavaScript'><!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4)) document.write("</table></table><table>");\r
-//--></script>\r
-</table>\r
-\r
-<p> \r
- <b><span style="font-weight: normal;"><br>\r
-T</span></b>o run the Installation Wizard in the GUI mode, just type <b>runInstall</b>. \r
- </p>\r
-\r
-<p> </p>\r
-\r
-<p>The installation procedure can support some different Linux platforms \r
- and various number of products. As it was mentioned above the basic target \r
- platform for SALOME 3.0.0 and higher is <i>Linux Mandrake 10.1</i>.<br> </p>\r
-\r
-<p>The using of configuration xml files gives flexible way to modify the \r
- list of products to be installed by the Installation Wizard without changing \r
- program's source code. Just create your own configuration file and implement \r
- installation scripts for products you want to be provided by Wizard. See \r
- <a href="#xml_files">modifying XML configuration file</a> and <a href="#new_products">implementing \r
- installation scripts for the new products</a> for more information. </p>\r
-\r
-<p> </p>\r
-\r
-<p>The <font style="color: #ff0000;"\r
- color=#FF0000>Installation Wizard</font> was built with using \r
- of the <span style="font-style: italic;"><I>Trolltech's</I></span> <b><i>Qt \r
- 3.0.5 </i></b>library. The program contains several pages. To navigate \r
- between pages use <i>"Next"</i> and <i>"Back"</i> \r
- buttons in the lower part of the wizard window. <i>"Cancel"</i> \r
- button closes dialog window and quits the installation procedure. To invoke \r
- this help information click <i>"Help"</i> button. </p>\r
-\r
-<p> </p>\r
-\r
-<p>Skip the first <i>"Introduction"</i> page by pressing <i>"Next"</i> \r
- button: </p>\r
-\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The Installation Wizard can be launched \r
+ in two modes: </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>GUI \r
+ </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>batch</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. <br>\r
+The root directory of the Installation Wizard contains Python script </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>runInstall</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. \r
+ To run the Installation Wizard just type <b>runInstall</b> in the terminal \r
+ window: </font></span>\r
\r
-<p align="center" class="whs14"><img src="../pics/intropage.png" x-maintain-ratio="TRUE" width="586px" height="366px" border="0" class="img_whs15"></p>\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">[ python ] </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">runInstall \r
+ </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">[options]</font></span></p>\r
\r
-<p> </p>\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Without options this script will launch \r
+ the SALOME Installation Wizard in the default mode (GUI).<br>\r
+The default installation settings can be overridden by using command line \r
+ options. Each option has a short and a long notation:</font></span></p>\r
\r
-<p align="center" class="whs14"><b style="font-weight: bold;">Figure 1:</b> "Introduction" \r
- page</p>\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-g / --gui</font></span></b></p>\r
\r
-<p> </p>\r
-\r
-<p>In the second page you are proposed to enter the target directory where \r
- all selected products should be installed to. You can also press the <i>"Browse..."</i> \r
- button and choose the folder for installation using standard <b><i>Qt</i></b>'s \r
- browse directory dialog box. <br>\r
-If the directory you want to install products to does not exist you will \r
- be prompted to confirm the directory creation. If you type a wrong directory \r
- path, or if you have no permission for the directory you use, the corresponding \r
- message box will appear. </p>\r
-\r
-<p>The Installation Wizard has two modes of the installation: basic (default) \r
- and advanced. In the basic mode it is necessary just to enter the target \r
- directory. If you want to use the advanced mode, click the <i>"More..."</i> \r
- button. </p>\r
-\r
-<p> </p>\r
-\r
-<p>In the advanced mode you have the possibility to select products to \r
- be installed (see <a href="#ProductPage">Fig.2</a> ). Each product can \r
- have several options of installation: you have a possibility to use native \r
- products, install already precompiled binaries, build product from the \r
- sources or not install it at all. Possible options and default choice \r
- are provided by the configuration file. You can mark the products you \r
- want to install by clicking the corresponding radio buttons in the list \r
- view in the left part of the page. Note that some products can be installed \r
- only together with other products (or these prerequisite products should \r
- be already installed on your computer). The installation procedure has \r
- a special feature to automatically mark these products in the list view. \r
- For example, in order to install <b><i>PyQt</i></b> it is necessary to \r
- have <b><i>gcc, Python</i></b>,<b><i> Qt</i></b> and <b><i>Sip</i></b> \r
- installed. Therefore all these products will be marked when you check \r
- <b><i>PyQt</i></b>. This feature can be switched off by clicking the <i>"Auto \r
- set prerequisites products"</i> checkbox. <br> </p>\r
-\r
-<p>Special button in the right part of the page - <i>"Unselect All" \r
- </i>- allows to quickly reset all products to the <i>"not install"</i> \r
- state. <br>\r
-If you want to use native products (like <span style="font-weight: bold;"><B>gcc</B></span>, \r
- <span style="font-weight: bold;"><B>tcl</B></span>, etc.), select the <i>"use \r
- native" </i>option. </p>\r
-\r
-<p> </p>\r
-\r
-<p>There are also two checkboxes on this page: <i>"SALOME sources"</i> \r
- and <i>"SALOME binaries"</i>. These three-state checkboxes allow \r
- quick selecting/unselecting SALOME packages for the installation.</p>\r
-\r
-<p> </p>\r
-\r
-<p>The box in the right part of the page displays the information about \r
- currently highlighted product: name, version, short description (if provided \r
- in XML file), required disk space, disk space required for temporary files, \r
- list of prerequisites and current user choice. </p>\r
-\r
-<a name=ProductPage></a>\r
-\r
-<p align="center" class="whs16"><img src="../pics/productpage.png" x-maintain-ratio="TRUE" width="586px" height="553px" border="0" class="img_whs17"></p>\r
-\r
-<p align="center" class="whs14"> </p>\r
-\r
-<p align="center" class="whs14"><b style="font-weight: bold;">Figure 2:</b> "Installation \r
- settings" page in the advanced mode</p>\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Runs the Installation Wizard in the GUI \r
+ mode (this is the default mode). </font></span>\r
+</div>\r
\r
-<p align="center" class="whs14"> </p>\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-b / --batch</font></span></b></p>\r
\r
-<p>The <i>"Total disk space required:"</i> field displays how \r
- much disk space on the hard drive is required for installation of selected \r
- products. </p>\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Runs the Installation Wizard in the terminal \r
+ mode. </font></span>\r
+</div>\r
\r
-<p> </p>\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-f FILE \r
+ / --file=</font></span></b><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>FILE</B></font></span></p>\r
+\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The XML configuration file to be used by \r
+ the Installation Wizard. If this option is not used then the installation \r
+ script tries to define the <i>Linux </i>version and use the corresponding \r
+ XML file if it exists. For examle, for </font></span><span style="font-size: 12pt; color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;">Linux \r
+ Mandrake 10.1</font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> the <b>config_Mandrake_10.1.xml</b> \r
+ file will be used by default. If no appropriate file is found, the file \r
+ <b>config.xml</b> will be used. This file refers to the basic target platform \r
+ which is </font></span><span style="font-size: 12pt; color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;">Linux \r
+ Mandrake 10.1</font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> for SALOME 3.0 and \r
+ newer. If </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>config.xml</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> file is not found either, a warning message \r
+ box is shown (in GUI mode) or printed to the console (in batch mode) and \r
+ the Installation Wizard quits. </font></span>\r
+</div>\r
\r
- \r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-d DIR \r
+ / --target=DIR</font></span></b></p>\r
\r
-<p class="whs18"><b \r
- style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"> </b>Please, take into account \r
- that the displayed amount of required disk space is approximate and may \r
- differ when you install products on your hard drive. </p>\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The target directory SALOME platform is \r
+ to be installed to. If used, this option overrides the default target \r
+ directory, given in the configuration XML file (usually</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B> \r
+ ${HOME}/salome_<version></B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, \r
+ see <a href="#xml_files"\r
+ style="font-size: 12pt;">here</a> for more details). </font></span>\r
+</div>\r
\r
-<p> </p>\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-t DIR \r
+ / --tmp=DIR </font></span></b></p>\r
\r
-<p>The installation procedure uses a special directory to store temporary \r
- files. The <i>"Space for temporary files:"</i> field shows the \r
- information about required disk space on the hard drive for extracting \r
- and compiling of the selected products. You can change the default directory \r
- - just type path to the folder you want to use or click on the corresponding \r
- <i>"Browse..."</i> button. </p>\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The directory, which should be used for \r
+ temporary files. If given, this option overrides the default temporary \r
+ directory, given in the configuration xml file (usually </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>/tmp</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, see <a href="#xml_files"\r
+ style="font-size: 12pt;">here</a> for \r
+ more information). </font></span>\r
+</div>\r
\r
-<p> </p>\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-a / --all-from-sources</font></span></b></p>\r
+\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Forces all the products to be installed \r
+ from sources (including all SALOME modules). If this option is used, all \r
+ default installation modes for all products are ignored.<br>\r
+This option is helpful when the user wants to install SALOME on the platform \r
+ which is not officially supported. In this case, the user can try to run \r
+ the SALOME Installation Wizard with the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>-a</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> option in order to build all the products from \r
+ sources.</font></span><span style="font-weight: bold;\r
+ font-size: 12pt;\r
+ color: #ff0000;"><font size=3 color=red style="font-size:12.000000pt;"><B><br>\r
+Note, that this is a time-consuming operation which can take more than \r
+ 24 hours depending on the computer.</B></font></span><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span>\r
+</div>\r
\r
-<p class="whs18"><b \r
- style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"></b> In fact, temporary files \r
- are not stored in the directory entered by user. The Installation Wizard \r
- creates in this directory an additional folder named something like INSTALLWORK<span \r
- style="font-weight: bold;"><B>XXXXX</B></span> where XXXXX is a unique number. \r
- This allows to launch several Installation Wizards simultaneously. This \r
- temporary directory is removed automatically when the installation finishes.</p>\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-h / --help</font></span></b></p>\r
\r
-<p> </p>\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Prints help information on the Installation \r
+ Wizard's use. </font></span>\r
+</div>\r
\r
-<p>The installation procedure also checks the available disk space in the \r
- selected directories according to the products selected. If there is not \r
- enough disk space on your hard drive you will see the corresponding error \r
- message box.</p>\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">-v / --version</font></span></b></p>\r
\r
-<p> </p>\r
+<div class="whs8">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Prints version information (</font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Note: </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">this \r
+ is the Installation Wizard's version number, not the number of SALOME \r
+ platform version). </font></span>\r
+</div>\r
\r
-<p class="whs18"><b \r
- style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"> </b>Unfortunately, the configure \r
- procedure has a very annoying bug under Linux platform. The directory \r
- should be obligatory entered without spaces. For example, the configure \r
- procedure for <b><i>gcc</i></b> won't work if you pass the following parameter: \r
- <i>--prefix="/New Folder 1"</i>. <b>Therefore you are strongly \r
- recommended not to use directory names containing spaces.</b></p>\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The installation procedure supports different \r
+ </font></span><span style="font-size: 12pt; color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;">Linux </font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">platforms and installs various installation 3d-party \r
+ prerequisite products which are required by SALOME platform. As it was \r
+ mentioned above, the basic target platform for SALOME 3.0 and newer is \r
+ </font></span><span style="font-size: 12pt; color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;">Linux Mandrake \r
+ 10.1</font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">.<br>\r
+Use of configuration XML files gives a flexible way to modify the list \r
+ of products to be installed by the Installation Wizard without changing \r
+ the program source code. Just create your own XML configuration file and \r
+ implement installation scripts for the prerequisite products you need \r
+ and then use this XML file with the Installation Wizard. This can be done, \r
+ for example, for some </font></span><span style="font-size: 12pt; color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;">Linux \r
+ </font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">platform which is not supported \r
+ directly by the Installation Wizard. See </font></span><a href="#xml_files"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Modifying XML configuration file</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><a href="#new_products"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Implementing \r
+ installation scripts for the new products</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ sections for more information. </font></span></p>\r
+\r
+<h3 class="whs9"><a name=gui_mode></a>GUI mode</h3>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The </font></span><font style="color: #ff0000;"\r
+ color=#FF0000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Installation Wizard</font></span></font><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ GUI has been developed using </font></span><span style="font-size: 12pt; color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;">Trolltech's \r
+ </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Qt 3.0.5 </B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">toolkit. After launching the Installation Wizard \r
+ in the GUI mode the wizard window is shown to the user. This wizard guides \r
+ the user through several subsequent pages. To navigate between the pages \r
+ use </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Next"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Back"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> buttons in the lower part of the wizard window. \r
+ The </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Cancel"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> button closes the wizard window and quits \r
+ the installation procedure after the user's confirmation. The </font></span><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Help"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ button opens an additional window to show help information. </font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The first "</font></span><span style="font-style: italic; font-size: 12pt;"><font size=3 style="font-size:12pt;"><I>Introduction"</I></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> page is shown in </font></span><a href="#IntroPage"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure 1</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. \r
+ Skip this page by clicking </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Next"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">: </font></span></p>\r
+\r
+<a name=IntroPage></a>\r
+\r
+<p align="center" class="whs1"> </p>\r
+\r
+<p align="center" class="whs1"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><img alt="Intro page" src="intropage.png" width="586px" height="364px" border="0" class="img_whs10"> </font></span></p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 1:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Introduction" \r
+ page</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">In the second page you are proposed to \r
+ enter the target directory where the SALOME platform should be installed \r
+ to. You can also click </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Browse..."</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and choose the destination folder using the \r
+ standard browse directory dialog box. <br>\r
+If the directory you want to install products to does not exist you are \r
+ prompted to confirm directory creation. If you type a wrong directory \r
+ path, or if you do not have write permissions for the directory you use, \r
+ the corresponding message box is shown.</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">You can also change the temporary directory \r
+ (which is used to store temporary files required for the installation).<br>\r
+In the bottom part of the window the total disk space required for the \r
+ installation and for the temporary files is displayed (see below for more \r
+ details).</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">In the GUI mode the Installation Wizard \r
+ provides two different options to install the SALOME platform: </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>basic</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ (default option) and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>advanced.</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> In the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>basic</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> mode the user should enter the target installation \r
+ directory and temporary folder. All other installation options are taken \r
+ from the XML configuration file (see </font></span><a href="#Product_page1"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Fig.2</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">):</font></span></p>\r
+\r
+<a name=Product_page1></a>\r
+\r
+<p align="center" class="whs1"> </p>\r
+\r
+<p align="center" class="whs1"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><img alt="Intro page" src="productpage1.png" width="586px" height="364px" border="0" class="img_whs10"> </font></span></p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 2:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Installation settings" \r
+ </font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">In addition, you have a choice to use \r
+ "Install all products from sources" check box. If this option \r
+ is turned on, all the products will be installed from the sources (using \r
+ their own build procedures). This check box corresponds to the </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>--all-from-sources</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>-a</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">) option of the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>runInstall</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> script (see </font></span><a href="#install_from_wizard"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">). \r
+ </font></span></p>\r
+\r
+<p class="whs11"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="35px" height="37px" border="0" class="img_whs12"></font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B> \r
+ Installation of all products from sources is a long-time operation.</B></font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">To switch to the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>advanced</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> option, click </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"More..."</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (see </font></span><a href="#ProductPage2"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Fig.3</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> ).</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">In the advanced mode you have a possibility \r
+ to select products to be installed. Each product can have several options \r
+ of installation: you have a possibility to use the native product (provided \r
+ with Linux distribution and installed in the system folders), install \r
+ already precompiled binaries, build the product from sources or not install \r
+ it at all. Available options and default option are taken from the XML \r
+ configuration file. You can mark the products you want to install by clicking \r
+ the corresponding radio-buttons in the list view in the left part of the \r
+ page. <br>\r
+Note, that some products may require some other pre-requisite products \r
+ to be installed (or these prerequisite products should be already available \r
+ on your computer). The installation procedure has a special feature to \r
+ automatically mark these products in the list view. For example, in order \r
+ to install </font></span><b><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">PyQt</font></span></i></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> it is necessary to have </font></span><b><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">gcc, \r
+ Python</font></span></i></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">,</font></span><b><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> Qt</font></span></i></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ and </font></span><b><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Sip</font></span></i></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> installed. Therefore all these products will \r
+ also be turned \r
+ on when you check on </font></span><b><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">PyQt</font></span></i></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. This feature can be switched off by clicking \r
+ the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Automatic dependencies"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> checkbox. Turn on this checkbox if you want \r
+ all prerequisite products to be automatically checked when you select \r
+ some product to be installed. Turn off this checkbox if you want to disable \r
+ this feature.</font></span></p>\r
+\r
+<a name=ProductPage2></a>\r
+\r
+<p align="center" class="whs1"> </p>\r
+\r
+<p align="center" class="whs1"><img src="productpage.png" alt="Products page" width="586px" height="525px" border="0" class="img_whs13"> </p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 3:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Installation settings" \r
+ page in the 'advanced' mode</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">If you want to use native products (like \r
+ </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>gcc</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>tcl</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, etc.), select </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"use \r
+ native" </font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">option. <br>\r
+Special button in the right part of the page - </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Unselect \r
+ All" </font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">- allows to reset \r
+ quickly all products to the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"not \r
+ install"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> state. </font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">There are also two checkboxes on this \r
+ page: </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"SALOME sources"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"SALOME \r
+ binaries"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. These three-state \r
+ checkboxes allow quick selecting/unselecting sources/binaries packages \r
+ of SALOME modules for installation.</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">In addition, when some SALOME sources \r
+ are selected, one more check box becomes available: </font></span><span style="font-style: italic; font-size: 12pt;"><font size=3 style="font-size:12pt;"><I>"Build \r
+ SALOME sources"</I></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. If this option \r
+ is turned on, the selected SALOME modules will be built and installed \r
+ from sources.</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><br>\r
+ </B></font></span></p>\r
+\r
+<p class="whs11"><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"> If this check \r
+ box is turned on, the corresponding SALOME module binaries package installation \r
+ is disabled, because of SALOME \r
+ module sources and binaries packages conflict </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">(see \r
+ </font></span><a href="#ProductPage3"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Fig. 4</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> below). </font></span></p>\r
+\r
+<a name=ProductPage3></a>\r
+\r
+<p align="center" class="whs1"><img src="productpage2.png" alt="Products page" width="586px" height="525px" border="0" class="img_whs15"> </p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 4:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Build SALOME sources" \r
+ check box usage</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The box at the right side of the page \r
+ displays the information about currently highlighted product: name, version \r
+ and short description, required disk space, disk space required for temporary \r
+ files, list of prerequisites (this information is provided in the XML \r
+ file) and current user choice. </font></span></p>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Disk \r
+ space required:"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> field \r
+ displays how much disk space on the hard drive is required for installation \r
+ of selected products. </font></span>\r
+\r
+<p class="whs11"><b \r
+ style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></font></span></b><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Please, \r
+ take into account that the displayed amount of required disk space is \r
+ approximate and may differ when you install products on your hard drive.</B></font></span><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The installation procedure uses a special \r
+ directory to store temporary files. The </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Space \r
+ for temporary files:"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> field \r
+ shows the information about required disk space on the hard drive for \r
+ extracting and compiling the selected products. You can change the temporary \r
+ directory - just type a path to the folder you want to use or click on \r
+ the corresponding </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Browse..."</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> button. </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><br>\r
+ </B></font></span></p>\r
+\r
+<p class="whs11"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><b style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></b></font></span><b><span \r
+ style="font-weight: normal; font-size: 12pt;"><font size=3 style="font-size:12pt;">A</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">ctually, \r
+ temporary files are not stored directly in the directory entered by the \r
+ user. The Installation Wizard creates an additional folder in this directory \r
+ named something like INSTALLWORK</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>XXXXX</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> where XXXXX is a unique number. This allows \r
+ to launch several Installation Wizards simultaneously. This temporary \r
+ directory is removed automatically when the installation finishes.</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The installation procedure also checks \r
+ the available disk space. If there is not enough disk space on your hard \r
+ drive you will see a corresponding error message box. </font></span></p>\r
+\r
+<p class="whs11"><b \r
+ style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14">You are strongly recommended not to use directory names containing \r
+ spaces. </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Otherwise you can experience \r
+ some troubles with the installation.</font></span><b><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span></b></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">To proceed further click </font></span><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Next"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. \r
+ At this moment the program will make some tests to check installation \r
+ settings: if there is enough disk space on the hard drive, check for native \r
+ products installation, dependencies (prerequisites) for each product you \r
+ have selected to be installed. If any test fails you will see the corresponding \r
+ warning message box. Otherwise the wizard will proceed to the next page: \r
+ </font></span></p>\r
+\r
+<a name=ChoicePage></a>\r
+\r
+<p align="center" class="whs1"> </p>\r
+\r
+<p align="center" class="whs1"><img src="choicepage.png" alt="Choice page" width="586px" height="485px" border="0" class="img_whs16"> </p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 5:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Check your choice" \r
+ page</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This page summarizes the installation \r
+ options you've made on the previous pages. You can check again your choice \r
+ and change it if necessary by getting back to the previous page. <br>\r
+When you are sure that everything is OK, click </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Next"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> to follow to the </font></span><a href="#ProgressPage"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">next page</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. \r
+ </font></span></p>\r
+\r
+<a name=ProgressPage></a>\r
+\r
+<p align="center" class="whs1"> </p>\r
+\r
+<p align="center" class="whs1"><img alt="Progress page" src="progresspage1.png" width="586px" height="364px" border="0" class="img_whs10"></p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 6:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Installation progress" \r
+ page</font></span></p>\r
+\r
+<p class="whs17"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">To start \r
+ installation of the selected products click "Start". It launches \r
+ the shell installation script and you will be able to see the output of \r
+ the script in the dialog \r
+ topmost frame. If any errors occur during the installation progress the \r
+ corresponding messages will be printed to the log window in bold red font.</font></span></p>\r
+\r
+<p class="whs17"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">It is possible \r
+ to break the installation at any time by clicking "Stop". Then \r
+ you can get back to the previous pages if you wish to change installation \r
+ settings or restart installation by pressing again "Start" button.</font></span></p>\r
+\r
+<p class="whs11"><b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"> I</B></font></span></b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>n the current implementation \r
+ it is not possible to resume the stopped installation process; it will \r
+ be re-started from the very beginning.</B></font></span><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+<a name=ProgressPage1></a>\r
+\r
+<p align="center" class="whs1"> </p>\r
+\r
+<p align="center" class="whs1"><img alt="Progress page" src="progresspage.png" width="586px" height="364px" border="0" class="img_whs10"> </p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 7:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Installation progress" \r
+ page: installation in progress</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Installation \r
+ Status"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> frame window shows \r
+ you the progress of installation. "</font></span><font style="color: #ff0000;"\r
+ color=#FF0000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Waiting</font></span></font><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">" \r
+ status means that installation of this product has not been started yet. \r
+ The product currently being installed is marked as "</font></span><font \r
+ style="color: #ff9900;"\r
+ color=#FF9900><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Processing</font></span></font><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">". All installed products have "</font></span><font \r
+ style="color: #33ff33;"\r
+ color=#33FF33><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Completed</font></span></font><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">" status. </font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">You can abort installation and close \r
+ the installation procedure using </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Cancel"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> button. </font></span></p>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> </font></span>\r
+\r
+<p class="whs11"><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><b style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14">T</b>his button sends the signal "SIGTERM" to the \r
+ shell script. The script tries to clear all temporary files. The process \r
+ of removing temporary files can take some time, so the installation wizard \r
+ will wait 3 seconds before closing.</B></font></span><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">At the end of installation (all selected \r
+ products have been installed successfully) you can go back to the previous \r
+ pages to start a new installation or click </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Next" \r
+ </font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">to go the Readme page: </font></span></p>\r
+\r
+<a name=readmepage></a>\r
+\r
+<p align="center" class="whs1"> </p>\r
+\r
+<p align="center" class="whs1"><img alt="Read page" src="readmepage.png" width="586px" height="484px" border="0" class="img_whs18"> </p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 8:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> "Finish installation" \r
+ page</font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">In this page you can read important information \r
+ about the Instalation Wizard itself and some tips: how to run and test \r
+ SALOME or how to build SALOME from the sources. This is the contents of \r
+ the README file which you can find in the root directory of the Installation \r
+ Wizard. <br>\r
+You can also launch SALOME Desktop from this page or read the Release Notes \r
+ file by clicking on the corresponding buttons in the lower part of the \r
+ page (see </font></span><a href="#xml_files"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><a href="#finish_buttons"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> for more information about customizing these \r
+ buttons).</font></span></p>\r
+\r
+<h3 class="whs9"><a name=batch_mode></a>Batch mode</h3>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">To launch the Installation Wizard in \r
+ the batch mode use </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>-b</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>--batch</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">) parameter.<br>\r
+In this mode the GUI wizard is not shown but all the installation status \r
+ is displayed directly in the console. In the batch mode the user does \r
+ not have a possibility to change installation settings which are given \r
+ in the configuration file, except target and temporary directories which \r
+ can be overridden by the corresponding command line options.<br>\r
+The only exception is </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>--all-from-sources</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>-a</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">) option which enables special installation mode \r
+ in which all the products (including SALOME modules) are installed from \r
+ sources, ignoring the default mode defined in the XML configuration file \r
+ (see </font></span><a href="#install_from_wizard"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> for details).</font></span></p>\r
+\r
+<p align="center" class="whs1"> <a \r
+ name=BatchMode></a><br>\r
+<br>\r
+<img alt="Batch mode" src="batchmode.png" width="660px" height="410px" border="0" class="img_whs19"> </p>\r
+\r
+<p align="center" class="whs1"><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Figure \r
+ 9:</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> Batch mode</font></span></p>\r
+\r
+<h3 class="whs9"><a name=env_files></a>Environment files</h3>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">During the process of installation the \r
+ script creates some environment files to simplify the procedure of launching \r
+ SALOME. These shell scripts set all necessary environment variables for \r
+ all products you have installed. To learn how installation scripts collects \r
+ the environment, see </font></span><a href="#pick_up_env"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. These files are: </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">salome.csh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> + </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">salome.sh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> in the </font></span><span style="font-style: italic;\r
+ font-weight: bold;\r
+ font-size: 12pt;"><font size=3 style="font-size:12pt;"><I><B>KERNEL \r
+ module</B></I></font></span><b><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> sources</font></span></i></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><span style="font-style: italic;\r
+ font-weight: bold;\r
+ font-size: 12pt;"><font size=3 style="font-size:12pt;"><I><B>KERNEL \r
+ module</B></I></font></span><b><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> binaries</font></span></i></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> root directories and </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">env_products.csh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> + </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">env_products.sh \r
+ </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_build.csh \r
+ </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">+ </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_build.sh</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> in the target installation directory.</font></span></p>\r
+\r
+<p class="whs11"><b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></B></font></span></b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Note:</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ there is some difference between these files: </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_build.*</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> files are optimized to be used for building \r
+ SALOME modules from sources (see </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>README \r
+ </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">file provided with the installation \r
+ procedure on the CD). The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_products.*</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (and</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B> \r
+ salome.*</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">) files are optimized for \r
+ SALOME launching. The behavior is defined by the environment variable</font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"> <font size=3 style="font-size:12pt;"><B></B></font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">ENV_FOR_LAUNCH</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> which is set to </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>0</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> in env_build.* files and to </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>1</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> in env_products.* (salome.*) files. </font></span></p>\r
+\r
+ <br>\r
+\r
+\r
+<hr class="whs7">\r
\r
-<p> </p>\r
\r
-<p>To proceed further click the <i>"Next"</i> button. At this \r
- moment the program will make some tests to check installation settings: \r
- whether there is enough disk space on the hard drive, whether native products \r
- are preinstalled, and the dependencies (prerequisites) for each product \r
- you have selected to be installed. If any test fails you will see the \r
- corresponding warning message box. Otherwise the wizard will follow to \r
- the next page:</p>\r
+<h3><a name=check_version_proc></a>Notes on<font style="color: #ff0000;"\r
+ color=#FF0000> check products \r
+ version</font> procedure</h3>\r
\r
- \r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Unfortunately there is no exact algorithm \r
+ to identify the product version under Linux platform. The information \r
+ in this section gives an idea how the version is checked for the native/preinstalled \r
+ products (this information refers to the base platform </font></span><span style="font-size: 12pt; color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;">Linux \r
+ Mandrake 10.1</font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">; and the same algorithms \r
+ are used for other platforms). <br>\r
+The general rule for all products is that the path to the binaries should \r
+ be set via the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable, path to the libraries \r
+ should be set via the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>LD_LIBRARY_PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> variable and the python modules should be available \r
+ via the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PYTHONPATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> variable. </font></span>\r
+\r
+<p class="whs11"><b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></B></font></span></b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Note:</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ the information given in this section refers to the prerequisite products \r
+ for SALOME version 3.2.4. </font></span></p>\r
\r
-<p align="center" class="whs14"><img src="../pics/choicepage.png" x-maintain-ratio="TRUE" width="586px" height="553px" border="0" class="img_whs20"></p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">gcc 3.4.1</font></span></li>\r
+</ul>\r
\r
-<p align="center" class="whs14"> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is checked by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>gcc -dumpversion</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> command. The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>gcc</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> executable should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable. Version should be equal \r
+ to "3.4.1". It is recommended to use native gcc on Mandrake \r
+ 10.1. </font></span>\r
\r
-<p align="center" class="whs14"><b style="font-weight: bold;">Figure 3:</b> "Check \r
- your choice" page</p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">tcl/tk 8.4.5</font></span></li>\r
+</ul>\r
\r
-<p align="center" class="whs14"> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number for </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>tcl/tk</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> can be found in tclConfig.sh and tkConfig.sh \r
+ files (</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>TCL_VERSION</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>TK_VERSION</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> variables correspondingly). Version number should \r
+ be equal to "8.4" (release number is not checked). <br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>TCLHOME</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable to the root directory of \r
+ tcl/tk installation.<br>\r
+It is recommended to use native tcl/tk on Mandrake 10.1. </font></span>\r
\r
-<p>This page summarizes the installation settings you've made on the previous \r
- pages. You can check again your choice to change it if necessary. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">boost 1.31.0</font></span></li>\r
+</ul>\r
\r
- \r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is defined by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>version.hpp</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ file which is part of the boost distribution. This file defines the </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>BOOST_VERSION</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> macro which should be equal to "103100". \r
+ In addition the existence of boost libraries is checked. <br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>BOOSTDIR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of boost. </font></span>\r
\r
-<p>When you are sure that everything is OK, press the <i>"Next"</i> \r
- button to follow to the next page. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Python 2.3.4</font></span></li>\r
+</ul>\r
\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is checked by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>python -V</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ command. The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>python</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> executable should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable. Version number should \r
+ be equal to "2.3.4". It is recommended to use native Python \r
+ on Mandrake 10.1.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PYTHONHOME</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of Python. </font></span>\r
\r
-<p align="center" class="whs14"> <img src="../pics/progresspage.png" x-maintain-ratio="TRUE" width="586px" height="366px" border="0" class="img_whs21"></p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Swig 1.3.24</font></span></li>\r
+</ul>\r
\r
-<p align="center" class="whs14"> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is checked by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>swig -version</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> command. The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>swig</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> executable should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable. Version number should \r
+ be equal to "1.3.24". </font></span>\r
\r
-<p align="center" class="whs14"><b style="font-weight: bold;">Figure 4:</b> "Installation \r
- progress" page</p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Qt 3.3.3</font></span></li>\r
+</ul>\r
\r
-<p align="center" class="whs14"> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is defined by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>qglobal.h</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ file which is part of the Qt distribution. This file defines </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>QT_VERSION_STR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> macro which should be equal to "3.3.3". \r
+ It is recommended to use native Qt on Mandrake 10.1.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>QTDIR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of qt. </font></span>\r
\r
-<p>To start installation of the selected products click <i>"Start"</i> \r
- button. It launches the shell installation script and you will be able \r
- to see the output of the script in the dialog's topmost frame. \r
- In case of any installation problems (for example, you have accidentally \r
- removed the temporary directory) the script will ask you: <i>"Would \r
- you like to continue : (Y,N) ?"</i>. You can answer this question \r
- by typing [Y] or [N] in the middle text edit control frame. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">msg2qm</font></span></li>\r
+</ul>\r
\r
-<p> </p>\r
+<span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>msg2qm</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ is a Qt tool which is used to convert text *.po files to *.qm resource \r
+ files. Unfortunately this tool is not included to the Linux distribution \r
+ and provided only in Qt sources package. This is the reason why this tool \r
+ is supplied with the SALOME Installation Wizard.<br>\r
+There is no way to check the version number of msg2qm tool. Just set </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>MSG2QM_ROOT</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ environment variable if you have a preinstalled version of msg2qm tool. \r
+ </font></span>\r
\r
-<p class="whs18"><b \r
- style="font-weight: bold;"><img src="../tip1.gif" x-maintain-ratio="TRUE" width="35px" height="37px" border="0" class="img_whs22"></b> press [Enter] when you finish \r
- typing data. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Open CASCADE 6.1.2a2</font></span></li>\r
+</ul>\r
\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is defined by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Standard_Version.hxx</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> file which is part of the Open CASCADE distribution. \r
+ This file defines </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>OCC_VERSION_MAJOR,</B></font></span><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>OCC_VERSION_MINOR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>OCC_VERSION_MAINTENANCE</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> macros which should refer to version 6.1.2.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>CASROOT</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of Open CASCADE. </font></span>\r
\r
-<p>The <i>"Installation Status"</i> frame window shows you the \r
- progress of installation. It contains a list of all selected products \r
- with brief descriptions. "<font style="color: #ff0000;"\r
- color=#FF0000>Waiting</font>" \r
- description means that installation of this product have not started yet. \r
- Currently the product being installed is marked as "<font style="color: #ff9900;"\r
- color=#FF9900>Processing</font>". All installed products have \r
- "<font style="color: #33ff33;"\r
- color=#33FF33>Completed</font>" description. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">qwt 4.2.0/0.4.2</font></span></li>\r
+</ul>\r
\r
-<p>You can abort installation and close the installation procedure using \r
- the <i>"Cancel"</i> button. It sends the signal "SIGTERM" \r
- to the shell script. The script has a signal handler and will try to clear \r
- all temporary files. The process of removing temporary files can take \r
- some time, so the installation wizard will wait 3 seconds before closing. \r
- </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is defined by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>qwt_global.h</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ file which is part of the qwt distribution. This file defines </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>QWT_VERSION_STR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> macro which should be equal to "4.2.0".<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>QWTHOME</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of qwt. </font></span>\r
\r
-<p>At the end of installation (when all selected products have been installed \r
- successfully) you can go back to the previous pages to start a new installation \r
- or click the <i>"Next"</i> button to go the Readme page: </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">hdf 5-1.6.4</font></span></li>\r
+</ul>\r
\r
- \r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is defined by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>libhdf5.settings</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> file which is part of the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>hdf5</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> distribution. Version should be equal to 1.6.4.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>HDF5HOME</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of hdf5. </font></span>\r
\r
-<p align="center" class="whs14"><img src="../pics/readmepage.png" x-maintain-ratio="TRUE" width="586px" height="486px" border="0" class="img_whs23"></p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">med 2.2.3</font></span></li>\r
+</ul>\r
\r
-<p align="center" class="whs14"> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Unfortunately there is no formal way to \r
+ check med version number. We check existence of libmed.so.1.0.2 library \r
+ on the computer. If you have any problem with a preinstalled version of \r
+ med, please, reinstall it.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>MED2HOME</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of med. </font></span>\r
\r
-<p align="center" class="whs14"><b style="font-weight: bold;">Figure 5:</b> "Finish \r
- installation" page</p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Vtk 4.2.6</font></span></li>\r
+</ul>\r
\r
-<p align="center" class="whs14"> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Unfortunately there is no formal way to \r
+ check VTK version number. We just check the existence of </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>libvtkCommon.so</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> library on the computer and hope that it is \r
+ of version we need. If you have any problem with a preinstalled version \r
+ of Vtk, please, reinstall it.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>VTKHOME</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of Vtk. </font></span>\r
\r
-<p>In this page you can read some important information about the Instalation \r
- Wizard itself and some hints: how to run and test SALOME or how to build \r
- SALOME from the sources. This is the content of the README file which \r
- you can find in the root directory of the Installation Wizard. <br>\r
-You can also launch SALOME Desktop from this page by clicking the <i>"Launch \r
- SALOME" </i>button. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">OmniORB 4.0.5, OmniORBpy \r
+ 2.5, OmniNotify 2.1</font></span></li>\r
+</ul>\r
\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">We just check existence of some omniORB \r
+ libraries and executable on the computer, like </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>libomniORB4.so.0.5</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>_omnipymodule.so.2.4</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>libCOSNotify4.so.0.1</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>notifd</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>OMNIORBDIR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of omniORB products. </font></span>\r
\r
-<p><a name=env_files></a>During the process of installation the script \r
- creates some environment files to simplify the procedure of launching \r
- SALOME. These shell scripts set all necessary environment variables for \r
- all products you have installed. To learn how installation scripts collect \r
- the environment, see <a href="#pick_up_env"> here</a>. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">sip 4.1</font></span></li>\r
+</ul>\r
\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is checked by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>sip -V</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ command. The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>sip</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> executable should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable. Version number should \r
+ be equal to "4.1".<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>SIPDIR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable to the directory where \r
+ you have sip executable preinstalled. </font></span>\r
\r
-<p>These files are: <b>salome.csh</b> + <b>salome.sh</b> in the <span style="font-weight: bold;"><B>KERNEL \r
- module</B></span><b><i> sources</i></b> and <span style="font-weight: bold;"><B>KERNEL \r
- module</B></span><b><i> binaries</i></b> root directories and <b>env_products.csh</b> \r
- + <b>env_products.sh </b>in the target directory.</p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">PyQt 3.13</font></span></li>\r
+</ul>\r
\r
- \r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is defined by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>pyqtconfig.py</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> Python module file which is part of the </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PyQt</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ distribution. Version should be equal to "3.13".<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PYQTDIR \r
+ </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">environment variable if you have \r
+ a preinstalled version of PyQt. </font></span>\r
\r
-<p class="whs18"><b \r
- style="font-weight: bold;"><img src="../tip1.gif" x-maintain-ratio="TRUE" width="35px" height="37px" border="0" class="img_whs22"></b> <b>salome.(c)sh</b> and <b>env_products.(c)sh \r
- files</b> are slightly different: env_products.* files are optimized to \r
- be used for the building of SALOME modules from the sources (see <span \r
- style="font-weight: bold;"><B>README </B></span>file provided with the installation \r
- procedure on the CD). The salome.* files are optimized for the SALOME \r
- launching. This difference is defined by the environment variable<span \r
- style="font-weight: bold;"> <B></B></span><b>ENV_FOR_LAUNCH</b> which is set \r
- to 0 in env_products.* files and to 1 in salome.* files. </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">netgen 4.5</font></span></li>\r
+</ul>\r
\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Unfortunarely we can't find anything about \r
+ netgen version. We just check if </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>NETGENROOT</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable is set.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>NETGENROOT</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable if you have a preinstalled \r
+ version of netgen mesher. </font></span>\r
\r
-<hr class="whs2">\r
+<br><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> </font></span>\r
\r
+<p class="whs11"><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><b style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></b>Note: </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">netgen 4.5 \r
+ provided with the SALOME installation Wizard has been patched to improve \r
+ its performance. </font></span></p>\r
\r
-<h3><a name=check_version_proc></a>Notes on<font style="color: #ff0000;"\r
- color=#FF0000> check products \r
- version</font> procedure</h3>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Numeric 23.7</font></span></li>\r
+</ul>\r
\r
-<p>Unfortunately under Linux platform there is no exact algorithm to identify \r
- the product's version. The table below gives an idea how the version is \r
- checked for the preinstalled products for the Linux Mandrake 10.1 platform. \r
- </p>\r
-\r
-<p> </p>\r
-\r
-<div align=left>\r
-<table nosave x-use-null-cells cellspacing="0" background="../texture_horiz_ltbluebubbles.jpg" width="100%" class="whs24">\r
-\r
-<tr nosave valign="middle" class="whs25">\r
-<th nosave class="whs26">\r
-<p align="center" class="whs27">Product </th>\r
-<th nosave class="whs28">\r
-<p align="center" class="whs27">Algorithm of checking </th>\r
-<th nosave class="whs28">\r
-<p align="center" class="whs27">Preliminary steps before launching <br>\r
-the installation procedure </th>\r
-<th nosave class="whs29">\r
-<p align="center" class="whs27">Notes </th></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">gcc 3.4.1</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>ver</B></span>=`gcc \r
- -dumpversion`</td>\r
-<td class="whs31">\r
-<p align="center" class="whs14">- </td>\r
-<td class="whs31">It is recommended to use the native \r
- gcc for Mandrake 10.1.</td></tr>\r
-\r
-<tr nosave valign="middle" class="whs25">\r
-<td class="whs30">tcl 8.4.5</td>\r
-<td nosave class="whs31"><span style="font-weight: bold;"><B>1)</B></span> \r
- check if <span style="font-weight: bold;"><B>TCLHOME</B></span> variable is set<span \r
- style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of tclsh8.4<span style="font-weight: bold;"><B><br>\r
-3)</B></span> existence of wish8.4 <span style="font-weight: bold;"><B><br>\r
-4)</B></span> existence of libtcl8.4.so <span style="font-weight: bold;"><B><br>\r
-5)</B></span> existence of libtk8.4.so</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>TCLHOME</B></span> \r
- if you have a preinstalled version of tcl. <br>\r
-add a directory where libraries can be found to the <span style="font-weight: bold;"><B>LD_LIBRARY_PATH</B></span></td>\r
-<td class="whs31">Unfortunately there is no strict \r
- way to check the tcl version number.<br>\r
-It is recommended to use the native tcl/tk for Mandrake 10.1.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td valign="top" class="whs32">boost 1.31.0</td>\r
-<td valign="top" class="whs33"><span style="font-weight: bold;"><B>1)</B></span> check if <span \r
- style="font-weight: bold;"><B>BOOSTDIR</B></span> variable is set.<span style="font-weight: bold;"><B><br>\r
-2)</B></span> <span style="font-weight: bold;"><B>ver</B></span>=`egrep 'BOOST_VERSION \r
- [0-9]+' ${BOOSTDIR}/boost/version.hpp | sed 's/.*BOOST_VERSION \([0-9]\+\)/\1/g'`</td>\r
-<td valign="top" class="whs33">set <span style="font-weight: bold;"><B>BOOSTDIR</B></span> if \r
- you have a preinstalled version of boost</td>\r
-<td valign="top" class="whs33">we use file version.hpp in the boost distribution to get \r
- the version information.<span style="font-weight: bold;"><B><br>\r
-ver</B></span> should be equal to 103100.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Open CASCADE \r
-<p>Technology 6.1</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1)</B></span> \r
- check if <span style="font-weight: bold;"><B>CASROOT</B></span> variable is set<span \r
- style="font-weight: bold;"><B><br>\r
-2)</B></span> ver_major=`grep "!define OCC_VERSION_MAJOR" ${CASROOT}/inc/Standard_Version.hxx \r
- | awk '{print $3}'`<span style="font-weight: bold;"><B><br>\r
-3)</B></span> ver_minor=`grep "!define OCC_VERSION_MINOR" ${CASROOT}/inc/Standard_Version.hxx \r
- | awk '{print $3}'`<span style="font-weight: bold;"><B><br>\r
-4)</B></span> <span style="font-weight: bold;"><B>ver</B></span>="$ver_major.$ver_minor"<span \r
- style="font-weight: bold;"><B><br>\r
-5)</B></span> Check the existence of libStdPlugin.so in OpenCASCADE distribution,</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>CASROOT</B></span> \r
- if you have a preinstalled version of Open CASCADE</td>\r
-<td class="whs31">Open CASCADE's Standard_Version.hxx \r
- file provides the version information.<span style="font-weight: bold;"><B><br>\r
-ver</B></span> should be equal to 6.1.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Python 2.3.4</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1)</B></span> \r
- <span style="font-weight: bold;"><B>PYTHONHOME</B></span> variable should be \r
- set<span style="font-weight: bold;"><B><br>\r
-2)</B></span> isPython=`which python` <span style="font-weight: bold;"><B><br>\r
-3)</B></span> <span style="font-weight: bold;"><B>ver</B></span>=`python -V`</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>PYTHONHOME</B></span> \r
- to root Python distribution folder;<br>\r
-add the directory where python can be found to the <span style="font-weight: bold;"><B>PATH</B></span> \r
- variable</td>\r
-<td class="whs31">Python should exist and <span style="font-weight: bold;"><B>ver</B></span> \r
- should be equal to 2.3.4 <br>\r
-It is recommended to use the native Python for Mandrake 10.1.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Swig 1.3.24</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>ver</B></span>=`swig \r
- -version 2>&1 | grep -i version | awk '{ print $3 }' | sed -e 's/^\([0-9.]*\)\(.*\)/\1/'`</td>\r
-<td class="whs31">add the directory where swig binary \r
- can be found to the <span style="font-weight: bold;"><B>PATH</B></span> variable</td>\r
-<td class="whs31">Swig should exist and <span style="font-weight: bold;"><B>ver</B></span> \r
- should be equal to 1.3.24.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Qt 3.3.3</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- QTDIR</B></span> variable should be set.<span style="font-weight: bold;"><B><br>\r
-2) ver</B></span>=`grep "QT_VERSION_STR" ${QTDIR}/include/qglobal.h \r
- | sed -e 's%^#define QT_VERSION_STR\([[:space:]]*\)%%g' -e 's%\"%%g'`</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>QTDIR</B></span> \r
- if you have a preinstalled version of qt</td>\r
-<td class="whs31">Qt's qglobal.h file provides version \r
- information: <span style="font-weight: bold;"><B>ver</B></span> should be equal \r
- to 3.3.3.<br>\r
-It is recommended to use the native Qt for Mandrake 10.1.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs34">msg2qm (Qt 3.3.3 compatible)</td>\r
-<td class="whs35"><span style="font-weight: bold;"><B>MSG2QM_ROOT</B></span> \r
- variable should be set.</td>\r
-<td class="whs35">set <span style="font-weight: bold;"><B>MSG2QM_ROOT</B></span> \r
- if you have preinstalled version of msg2qm tool</td>\r
-<td class="whs35">msg2qm is a Qt tool used to convert \r
- text *.po files to *.qm resource files. Unfortunately this tool is not \r
- included in the Qt distribution and is provided only in its sources package. \r
- We distribute this tool with the Installation Wizard.<br>\r
-In addition there is no way to check the version number of msg2qm tool.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Qwt 4.2.0/0.2.4</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1)</B></span> \r
- <span style="font-weight: bold;"><B>QWTHOME</B></span> variable should be set.<span \r
- style="font-weight: bold;"><B><br>\r
-2)</B></span> check if libqwt.so.4.2.0 exists</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>QWTHOME</B></span> \r
- if you have a preinstalled version of qwt</td>\r
-<td class="whs31">Unfortunately there is no strict \r
- way to check the qwt version number.<br>\r
-We try to find libqwt.so.4.2.0 in the ${<span style="font-weight: bold;"><B>QWTHOME</B></span>}/lib \r
- folder. </td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Hdf 51.6.3</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- HDF5HOME</B></span> variable should be set.<span style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of libhdf5.so.0.0.0 <span style="font-weight: bold;"><B><br>\r
-3)</B></span> existence of libhdf5.settings<span style="font-weight: bold;"><B><br>\r
-4)</B></span> <span style="font-weight: bold;"><B>ver</B></span>=`grep "HDF5 \r
- Version:" ${HDF5HOME}/lib/libhdf5.settings | awk '{print $3}'`</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>HDF5HOME</B></span> \r
- if you have a preinstalled version of hdf</td>\r
-<td class="whs31">We try to find libhdf5.so.0.0.0 and \r
- libhdf5.settings in ${<span style="font-weight: bold;"><B>HDF5HOME</B></span>}/lib \r
- folder. <br>\r
-File libhdf5.settings contains the following version information: <br>\r
-HDF5 Version: 1.6.3</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Med 2.2.3</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- MED2HOME</B></span> variable should be set.<span style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of libmed.so.1.0.1</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>MED2HOME</B></span> \r
- if you have a preinstalled version of med</td>\r
-<td class="whs31">Unfortunately there is no strict \r
- way to check the med version number.<br>\r
-We try to find libmed.so.1.0.1 in ${<span style="font-weight: bold;"><B>MED2HOME</B></span>}/lib \r
- folder. <br>\r
-If you have a problem with the preinstalled version of med, please, reinstall \r
- it.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Vtk 4.2.6</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- VTKHOME</B></span> variable should be set.<span style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of libvtkCommon.so</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>VTKHOME</B></span> \r
- if you have a preinstalled version of vtk</td>\r
-<td class="whs31">Unfortunately there is no strict \r
- way to check the VTK version number.<br>\r
-We try to find libvtkCommon.so in ${<span style="font-weight: bold;"><B>VTKHOME</B></span>}/lib/vtk \r
- folder. <br>\r
-If you have a problem with the preinstalled version of vtk, please, reinstall \r
- it.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td valign="top" class="whs32">Netgen 4.5</td>\r
-<td valign="top" class="whs33"><span style="font-weight: bold;"><B>NETGENROOT</B></span> variable \r
- should be set. </td>\r
-<td valign="top" class="whs33">set <span style="font-weight: bold;"><B>NETGENROOT</B></span> if \r
- you have a preinstalled version of Netgen.</td>\r
-<td valign="top" class="whs33">Unfortunately we can't find anything about NETGEN version.<br>\r
-We just check if the <span style="font-weight: bold;"><B>NETGENROOT</B></span> \r
- environment variable is set. The NETGEN version should be patched.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">OmniORB 4.0.5, <br>\r
-OmniORBpy 2.5, <br>\r
-OmniNotify 2.1</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- OMNIORBDIR</B></span> variable should be set.<span style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of libomniORB4.so.0.5 <span style="font-weight: bold;"><B><br>\r
-3)</B></span> existence of _omnipymodule.so.2.5 <span style="font-weight: bold;"><B><br>\r
-4)</B></span> existence of libCOSNotify4.so.0.1 <span style="font-weight: bold;"><B><br>\r
-5)</B></span> existence of notifd</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>OMNIORBDIR</B></span> \r
- if you have a preinstalled version of omni</td>\r
-<td class="whs31">We try to find several omni libraries \r
- and binaries in the ${<span style="font-weight: bold;"><B>OMNIORBDIR</B></span>}/lib \r
- and ${<span style="font-weight: bold;"><B>OMNIORBDIR</B></span>}/bin directories.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Numeric 23.7</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>ver</B></span>=`python \r
- -c 'import Numeric; print Numeric.__version__' 2>/dev/null`</td>\r
-<td class="whs31">add the directory where you \r
- have the preinstalled version of Numeric package to your <span style="font-weight: bold;"><B>PYTHONHOME \r
- </B></span>variable</td>\r
-<td class="whs31">If you have problem with the preinstalled \r
- version of Numeric 23.7, please, reinstall it.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Sip 4.1</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- SIPDIR</B></span> variable should be set.<span style="font-weight: bold;"><B><br>\r
-2) ver</B></span>=`${SIPDIR}/sip -V | awk '{print $1}'`</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>SIPDIR</B></span> \r
- to the directory where you have sip preinstalled</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>ver</B></span> \r
- should be equal to 4.1. </td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">PyQt 3.13</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- PYQTDIR</B></span> variable should be set.<span style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of qt.so library</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>PYQTDIR</B></span> \r
- to the directory where you have PyQt preinstalled</td>\r
-<td class="whs31">Unfortunately we can't exactly check \r
- the PyQt version number. <br>\r
-We just try to find qt.so in ${<span style="font-weight: bold;"><B>PYQTDIR</B></span>}. \r
- \r
-<p>Note that PyQt officially doesn't support Qt 3.3.3, but nevertheless \r
- it can be used.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Doxygen 1.4.6</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1)</B></span> \r
- existence of doxygen <span style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of doxytag <span style="font-weight: bold;"><B><br>\r
-3)</B></span> existence of doxywizard<span style="font-weight: bold;"><B><br>\r
-4)</B></span> <span style="font-weight: bold;"><B>ver</B></span>=`doxygen --version`</td>\r
-<td class="whs31">add the directory where you have \r
- doxygen binaries preinstalled to the <span style="font-weight: bold;"><B>PATH</B></span> \r
- variable.</td>\r
-<td class="whs31">doxygen, doxytag, doxywizard binaries \r
- should exist; <span style="font-weight: bold;"><B>ver</B></span> should be equal \r
- to 1.4.6.<br>\r
-If you have problems with the preinstalled version of doxygen, reinstall \r
- it. <br>\r
-It is recommended to use the native doxygen for Mandrake 10.1.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30">Graphviz 2.2.1</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1)</B></span> \r
- existence of dot binary.<span style="font-weight: bold;"><B><br>\r
-2)</B></span> <span style="font-weight: bold;"><B>ver</B></span>=`dot -V 2>&1 \r
- | awk '{print $3}'`</td>\r
-<td class="whs31">add the graphviz bin directory to \r
- the <span style="font-weight: bold;"><B>PATH</B></span> environment variable</td>\r
-<td class="whs31">We try to find dot program in the \r
- ${<span style="font-weight: bold;"><B>PATH</B></span>}.<span style="font-weight: bold;"><B><br>\r
-ver</B></span> should be equal to 2.2.1.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs30"><span style="font-weight: bold;"><B>MODULE</B></span> \r
- binaries<br>\r
-(where <span style="font-weight: bold;"><B>MODULE</B></span> = KERNEL, GUI, GEOM, \r
- ...)</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>1) \r
- MODULE_ROOT_DIR</B></span> variable should be set<span style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of VERSION file <span style="font-weight: bold;"><B><br>\r
-3) ver</B></span>=`cat ${<span style="font-weight: bold;"><B>MODULE_ROOT_DIR</B></span>}/bin/salome/VERSION \r
- | awk -F: '{print $NF}' | tr -d '[:space:]'`</td>\r
-<td class="whs31">set <span style="font-weight: bold;"><B>MODULE_ROOT_DIR</B></span> \r
- if you have preinstalled binaries of <span style="font-weight: bold;"><B>MODULE</B></span> \r
- version 3.2.0.</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>MODULE</B></span> \r
- binaries should exist and <span style="font-weight: bold;"><B>ver</B></span> \r
- should be equal to 3.2.0.</td></tr>\r
-\r
-<tr valign="middle" class="whs25">\r
-<td class="whs36"><span style="font-weight: bold;"><B>MODULE</B></span> \r
- sources<br>\r
-(where <span style="font-weight: bold;"><B>MODULE</B></span> = KERNEL, GUI, GEOM, \r
- ...)</td>\r
-<td class="whs37"><span style="font-weight: bold;"><B>1)</B></span> \r
- existence of <span style="font-weight: bold;"><B>MODULE_SRC_DIR</B></span> <span \r
- style="font-weight: bold;"><B><br>\r
-2)</B></span> existence of VERSION file <span style="font-weight: bold;"><B><br>\r
-3) ver</B></span>=`cat ${<span style="font-weight: bold;"><B>MODULE_SRC_DIR</B></span>}/bin/VERSION \r
- | awk -F: '{print $NF}' | tr -d '[:space:]'`</td>\r
-<td class="whs37">set <span style="font-weight: bold;"><B>MODULE_SRC_DIR</B></span> \r
- if you have preinstalled sources of <span style="font-weight: bold;"><B>MODULE</B></span> \r
- version 3.2.0.</td>\r
-<td class="whs31"><span style="font-weight: bold;"><B>MODULE</B></span> \r
- sources should exist and ver should be equal to 3.2.0.</td></tr>\r
-</table>\r
-</div>\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is checked by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>python -c 'import Numeric; \r
+ print Numeric.__version__'</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> command. \r
+ The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>python</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> executable should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Numeric</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> module should be available for the Python (for \r
+ example it should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PYTHONPATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable). Version number should \r
+ be equal to "23.7". If you have any problem with a preinstalled \r
+ version of Numeric 23.7, please, reinstall it.<br>\r
+Add the directory where you have a preinstalled version of Numeric \r
+ package to the the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PYTHONHOME \r
+ </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">environment variable. </font></span>\r
\r
-<p> </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">graphviz 2.2.1</font></span></li>\r
+</ul>\r
\r
-<p class="whs18"><b \r
- style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"></b> For native products the installation \r
- procedure sets proper environment variables itself, and you do not need \r
- to set such variables like, e.g. <b>TCLHOME</b> or <b>PYTHONHOME</b>. \r
- <br>\r
-If you have native products installed to directories different from default \r
- ones (not <b>/usr/bin</b>, <b>/usr/lib</b>...), it is recommended to follow \r
- the above description. Or you should properly set <span style="font-weight: bold;"><B>PATH</B></span> \r
- and <span style="font-weight: bold;"><B>LD_LIBRARY_PATH</B></span> variables \r
- <b><font style="color: #ff0000;"\r
- color=#FF0000>before</font></b> starting the Installation Wizard. \r
- Otherwise the installation script will fail to find the preinstalled products.</p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is checked by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>dot -V</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ command. The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>dot</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> executable should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable. Version number should \r
+ be equal to "2.2.1".<br>\r
+Add </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>graphviz</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> bin directory to the the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable. </font></span>\r
\r
-<p> </p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">doxygen 1.4.6</font></span></li>\r
+</ul>\r
\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Version number is checked by </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>doxygen --version</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> command. The </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>doxygen</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> executable should be in the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable. Version number should \r
+ be equal to "1.4.6". </font></span>\r
\r
-<p class="whs18"><span \r
- style="font-weight: bold;"><B><b style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"></b> </B></span>For some native products (e.g. gcc, Python) the \r
- rules of version checking are not so strict as described in the table. \r
- Only major and minor version numbers should coincide with the prerequisite. \r
- Release number can be larger. This is done to give a possibility to use \r
- native products for newer versions of Linux. If some native product has \r
- a version number larger than the one required by the installation procedure, \r
- the user will be prompted by the warning message like this: <i>"You \r
- have a newer version of gcc installed on your computer than that is required \r
- (3.4.1). Continue?"</i>. You can press the <i>"Yes"</i> \r
- button to proceed with the installation but in this case you should be \r
- aware of what you are doing. SALOME binaries (including other products) \r
- are compiled with the predefined prerequisites and most likely can not \r
- be run successfully if these products are not found. This can be only \r
- helpful if you intend to build all products from the sources.</p>\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-weight: bold;\r
+ font-size: 12pt;\r
+ color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;"><B>SALOME </B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">module </font></span><span style="font-weight: bold;\r
+ font-size: 12pt;\r
+ color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;"><B>sources</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (3.2.4).</font></span></li>\r
+</ul>\r
\r
-<p> </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">For each SALOME module sources package (KERNEL, \r
+ GUI, GEOM, etc...) the root directory contains file configure.in (configure.ac) \r
+ which defines version information.<br>\r
+Set the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><MODULE>_SRC_DIR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable for each SALOME </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>MODULE</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ sources package installed (where </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>MODULE</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> is KERNEL, GUI, GEOM, ...). </font></span>\r
\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><span style="font-weight: bold;\r
+ font-size: 12pt;\r
+ color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;"><B>SALOME </B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">module </font></span><span style="font-weight: bold;\r
+ font-size: 12pt;\r
+ color: rgb(0, 0, 153);"><font size=3 style="font-size:12pt;"><B>binaries \r
+ </B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">(3.2.4)</font></span></li>\r
+</ul>\r
\r
-<hr class="whs2">\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">For each SALOME module binaries package \r
+ (KERNEL, GUI, GEOM, etc...) the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>bin/salome</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> directory contains file </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>VERSION</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> which defines version information.<br>\r
+Set </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><MODULE>_ROOT_DIR</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> environment variable for each SALOME </font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>MODULE</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ binaries package installed (where </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>MODULE</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> is KERNEL, GUI, GEOM, ...). </font></span>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">If you have native products installed \r
+ to directories different from default ones (not </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">/usr/bin</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">/usr/lib</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">...), it is recommended to follow the above mentioned \r
+ instructions. Or you should properly set </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>LD_LIBRARY_PATH</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> variables </font></span><b><font style="color: #ff0000;"\r
+ color=#FF0000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">before</font></span></font></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ starting the Installation Wizard. Otherwise the installation script will \r
+ fail to find preinstalled/native products. </font></span></p>\r
+\r
+<p class="whs11"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><b style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></b></font></span><b \r
+ style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Note:</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> for some native products (e.g. gcc, Python) \r
+ the rules of version checking are not so strict as described above. Only \r
+ major and minor version numbers should coincide with the prerequisite. \r
+ Newer version of the product can also be used. If some native product \r
+ has version number larger than that required by the installation procedure, \r
+ the user will be prompted by the warning message like this: </font></span><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"You have newer version of gcc installed \r
+ on your computer than that is required (3.4.1). Continue?"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. You can click </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Yes"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> to proceed with the installation but in this \r
+ case you should be aware of what you are doing. SALOME binaries (including \r
+ other products) are compiled with the predefined prerequisites and most \r
+ likely can not be run successfully if these products are not found. This \r
+ can be helpful only if you plan to build all products from sources. </font></span></p>\r
+\r
+\r
+<hr class="whs7">\r
\r
\r
<h3><a name=pick_up_env></a>Pick up the <font style="color: #ff0000;"\r
color=#FF0000>environment</font></h3>\r
\r
-<p>Please, read carefully the following information. This section describes \r
- how the installation procedure collects the environment. </p>\r
-\r
-<p>After installing each product the shell script creates a special environment \r
- file for each product in its target folder . The name of the file is generated \r
- from the name of the product according to the following scheme: <b>env_<product_name>.sh.</b> \r
- This file includes all necessary product settings. For example for Vtk \r
- the file is <b>env_Vtk.sh</b>. Environment files allow to pick up all \r
- environment settings which are necessary to build and launch SALOME. When \r
- installing SALOME sources and/or binaries, the installation procedure \r
- picks up all the settings files and generates two scripts: <b>salome.sh</b> \r
- and <b>salome.csh </b>for sh and csh correspondingly. Such approach helps \r
- to save time when reinstalling products and you may not care about setting \r
- all environment variables manually to build/launch SALOME. What you need \r
- is just to use one of these scripts. </p>\r
-\r
-<p>This also concerns those products which are not currently installed. \r
- For example, you install some SALOME binaries to the directory where you \r
- have previously installed other products. The installation procedure \r
- still tries to collect the environment files from the target directory \r
- if it finds necessary products there. If some product are not found in \r
- the target directory the corresponding section of <b>salome.sh/salome.csh</b> \r
- files will be skipped. <br>\r
-For native products (like <i><b>gcc, tcl, etc...)</b></i> the installation \r
- procedure tries to find them first using <b>PATH</b> / <b>LD_LIBRARY_PATH</b> \r
- variables and then in the system default directories (<b>/usr/bin, /usr/lib</b> \r
- etc., depending on the product). </p>\r
-\r
-<p>In any case you may edit <b>salome.*</b> files after the installation \r
- procedure finishes, as you want.<span style="font-weight: bold;"><B><br>\r
- </B></span></p>\r
-\r
-<p class="whs18"><b \r
- style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"></b> Note: as it was mentioned \r
- <a href="#env_files"\r
- style="font-weight: normal;">above</a> there are two more environment \r
- files which are generated by the installation procedure: env_products.csh \r
- and env_products.sh. These files can be found in the target installation \r
- root directory.</p>\r
-\r
-<p> </p>\r
-\r
-\r
-<hr class="whs2">\r
+P<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">lease, read the following information carefully \r
+ . This section describes how the installation procedure generates the \r
+ environment scripts for the SALOME platform being installed. </font></span>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">After installing each product shell the \r
+ script creates a special environment file for the product in its installation \r
+ folder. The name of the file is generated from the name of product by \r
+ the following scheme: </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">env_<product_name>.sh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (for example </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">env_Vtk.sh \r
+ </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">for the Vtk). This file includes \r
+ all necessary environment settings. At the final step of the installation \r
+ the script picks up all the settings files and generates two common environment \r
+ files from them: </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">salome.sh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">salome.csh \r
+ </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">for </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>bash</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>csh</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> shells correspondingly. Such approach helps \r
+ to save time when reinstalling products and you may not bother about setting \r
+ all environment variables manually to build/launch SALOME. What you simply \r
+ need is to source one of these environment files. </font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This also concerns those products which \r
+ are not being installed. For example, you install some SALOME binaries \r
+ to the directory where you have previously installed other products. \r
+ The Installation procedure tries to collect environment files from the \r
+ target directory if it finds necessary products installed there. If some \r
+ product is not found in the target directory the corresponding section \r
+ of </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">salome.sh/salome.csh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> files will be skipped. <br>\r
+For native products (like </font></span><i><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">gcc, \r
+ tcl, etc...)</font></span></b></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> the installation \r
+ procedure tries to find them first using </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">PATH</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> / </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">LD_LIBRARY_PATH</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> variables and then in the system default directories \r
+ (</font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">/usr/bin, /usr/lib</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> etc., depending on the product). </font></span></p>\r
+\r
+<p><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">In any case you may edit </font></span><b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">salome.*</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ files after the installation procedure finishes, if you want.</font></span></p>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> </font></span>\r
+\r
+<p class="whs11"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><b style="font-weight: bold;"><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></b></font></span><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>Note:</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ as it was mentioned </font></span><a href="#env_files"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">above</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> there are other environment files which are \r
+ generated by the installation procedure: </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_products.csh</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> + </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_products.sh</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_build.csh</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> + </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>env_build.sh</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. These files can be found in the target installation \r
+ root directory.</font></span></p>\r
+\r
+ <br>\r
+\r
+\r
+<hr class="whs7">\r
\r
\r
<h3><a name=xml_files></a>Modifying <font style="color: #ff0000;"\r
<font style="color: #ff0000;"\r
color=#FF0000>file</font></h3>\r
\r
-<p>You can create your own configuration file. The Installation Wizard \r
- can then take it as a command line argument to provide a list of products \r
- you want to install with it. The list of products and some other settings \r
- for the Installation Wizard are provided in the XML file. The default \r
- file the Installation Wizard looks for if no command line arguments are \r
- given, is <b>config.xml</b>. This section describes the structure of the \r
- configuration file. <br>\r
-XML tags are in bold blue, optional sections/tags are in brackets. </p>\r
-\r
-<p><b style="font-weight: bold;"><font style="color: #000099;"\r
- color=#000099><document></font></b> \r
- <font style="color: #000000;"\r
- color=#000000><b><br>\r
- </b>[</font><b><font style="color: #000099;"\r
- color=#000099> <config</font></b><font \r
- style="color: #000000;"\r
- color=#000000> [ version=<install_wizard_version> ]</font> <font \r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">You can create your own XML configuration \r
+ file. The Installation Wizard can then take it as a command line argument \r
+ to provide a list of products you want to install with it. The list of \r
+ products and some other settings for the Installation Wizard are provided \r
+ in the XML file. The default file which Installation Wizard looks for \r
+ if no command line arguments are given, is </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">config.xml</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">.<br>\r
+This section describes the structure of the configuration file. <br>\r
+XML tags are in bold blue, optional sections/tags are in brackets. </font></span>\r
+\r
+<p><font style="font-family: Courier;"\r
+ face=Courier><b style="font-weight: bold;"><font style="color: #000099;"\r
+ color=#000099><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><document></font></span></font></b><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">[</font></span></font><b><font \r
+ style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> <config</font></span></font></b><font \r
style="color: #000000;"\r
- color=#000000><br>\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> [ version=<install_wizard_version> \r
+ ]</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
[ \r
- caption=<install_wizard_caption> ]</font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ caption=<install_wizard_caption> ]</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
[ \r
- copyright=<install_wizard_copyright> ]</font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ copyright=<install_wizard_copyright> ]</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
[ \r
- license=<install_wizard_license_info> ]</font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ license=<install_wizard_license_info> ]</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
[ \r
- os=<target_platform> ]</font><b><font style="color: #000099;"\r
- color=#000099><br>\r
- /></font></b><font style="color: #000000;"\r
- color=#000000> <br>\r
- ]</font> <font style="color: #000000;"\r
- color=#000000><b><br>\r
- </b>[ </font><b><font style="color: #000099;"\r
- color=#000099><path</font></b><font \r
+ os=<target_platform> ]</font></span></font><b><font style="color: #000099;"\r
+ color=#000099><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ /></font></span></font></b><font style="color: #000000;"\r
+ color=#000000><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"><br>\r
+ ]</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font \r
style="color: #000000;"\r
- color=#000000> [ targetdir=<target_directory> ]</font> \r
- <font style="color: #000000;"\r
- color=#000000><br>\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">[ </font></span></font><b><font \r
+ style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><path</font></span></font></b><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> [ targetdir=<target_directory> \r
+ ]</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
[ \r
- tempdir=<temp_directory> ]</font><b><font \r
+ tempdir=<temp_directory> ]</font></span></font><b><font \r
style="color: #000099;"\r
- color=#000099><br>\r
- /> </font></b><font style="color: #000000;"\r
- color=#000000><br>\r
- ]</font> <font style="color: #000000;"\r
- color=#000000><br>\r
- [</font><b><font style="color: #000099;"\r
- color=#000099> <product</font></b><font \r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ /> </font></span></font></b><font style="color: #000000;"\r
+ color=#000000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ ]</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font \r
style="color: #000000;"\r
- color=#000000> name=<product_name></font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">[ </font></span></font><b><font \r
+ style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><button</font></span></font></b><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> label=<button_label> </font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ \r
+ [ tooltip=<button_tooltip> ]</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ \r
+ script=<button_script> </font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ \r
+ [ disable=<disable_flag> ]</font></span></font><b><font \r
+ style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ /> </font></span></font></b><font style="color: #000000;"\r
+ color=#000000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ ]</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ [</font></span></font><b><font style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ <button</font></span></font></b><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ ... </font></span></font><font style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ /</font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">></font></span></b></font><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ ]</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ [</font></span></font><b><font style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ <product</font></span></font></b><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ name=<product_name></font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
\r
- version=<product_version></font> <br>\r
+ version=<product_version></font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"><br>\r
[ context=<product_context> \r
]<br>\r
[ description=<product_description> \r
- ]<font style="color: #000000;"\r
- color=#000000><br>\r
+ ]</font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
\r
- install=<installation_mode></font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ install=<installation_mode></font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
\r
- supported=<supported_installation_modes></font> <font style="color: #000000;"\r
- color=#000000><br>\r
- \r
- disable=<disable_flag><br>\r
+ supported=<supported_installation_modes></font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ [ \r
+ disable=<disable_flag> ]<br>\r
[ pickupenv=<pickup_env_flag> \r
- ]</font><font style="color: #000000;"\r
- color=#000000><br>\r
+ ]<br>\r
\r
- dependancies=<list_of_prerequisites></font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ dependancies=<list_of_prerequisites></font></span></font><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> </font></span><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
\r
- installdiskspace=<install_disk_space></font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ installdiskspace=<install_disk_space></font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
\r
- temporarydiskspace=<tmp_disk_space></font> <font style="color: #000000;"\r
- color=#000000><br>\r
+ temporarydiskspace=<tmp_disk_space></font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
\r
- script=<installation_script_name></font><font style="color: #000099;"\r
- color=#000099><br>\r
- /<b>></b></font><font style="color: #000000;"\r
- color=#000000> \r
- <br>\r
- ]</font> <font style="color: #000000;"\r
- color=#000000><br>\r
- [</font><b><font style="color: #000099;"\r
- color=#000099> <product</font></b><font \r
+ script=<installation_script_name></font></span></font><font style="color: #000099;"\r
+ color=#000099><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ /</font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">></font></span></b></font><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"><br>\r
+ ]</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ [</font></span></font><b><font style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ <product</font></span></font></b><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ ... </font></span></font><font style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ /</font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">></font></span></b></font><font \r
style="color: #000000;"\r
- color=#000000> ... </font><font style="color: #000099;"\r
- color=#000099><br>\r
- /<b>></b></font><font style="color: #000000;"\r
- color=#000000> \r
- <br>\r
- ]</font> <font style="color: #000000;"\r
- color=#000000><br>\r
- <b> .</b></font><b><font style="color: #000099;"\r
- color=#000099>..</font></b> \r
- <b><font style="color: #000099;"\r
- color=#000099><br>\r
-</document></font></b> </p>\r
+ color=#000000><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"><br>\r
+ ]<br>\r
+ ...</font></span></font><b><font style="color: #000099;"\r
+ color=#000099><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+</document></font></span></font></b><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span></font></p>\r
\r
<h4><font style="color: #000000;"\r
- color=#000000><config> section</font></h4>\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><config> \r
+ section</font></span></font></h4>\r
\r
<font style="color: #000000;"\r
- color=#000000>This is an optional section - it contains general \r
- information the Installation Wizard itself.</font> \r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This is an optional \r
+ section; it provides general information about the Installation Wizard \r
+ itself.<br>\r
+<br>\r
+Attributes:</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
\r
<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">version</b>: \r
- Installation Wizard version number;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">version</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The application version \r
+ number to be shown in the caption.</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
- class=kadov-p><b style="font-weight: bold;">caption</b>: Installation \r
- Wizard main window title - if this string contains the '%1' text - the \r
- title will contain a version number in this place (see above);</li>\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">caption</font></span></b></font></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The application main window caption - if \r
+ this string contains '%1' text the title will contain the version number \r
+ in this place (see above). </font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">copyright</b>: \r
- Installation Wizard copyright information (appears on the first page of \r
- the program);</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">copyright</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The application copyright \r
+ information (shown in the first page).</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">license</b>: \r
- Installation Wizard license information (appears on the first page of \r
- the program);</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">license</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The application license \r
+ information (shown in the first page).</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">os</b>: \r
- Contains directory name (relative from ./Products/BINARIES) where the \r
- Installation Wizard should search precompiled binaries packages. If this \r
- tag is skipped, binaries are implied to be in the ./Products/BINARIES \r
- directory.</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">os</font></span></b></font></li>\r
</ul>\r
\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This parameter defines \r
+ the directory (relative from ./Products/BINARIES) where the Installation \r
+ Wizard will search precompiled binaries packages. If this tag is not provided, \r
+ binaries packages are looked for in the ./Products/BINARIES directory.</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
<h4><b style="font-weight: bold;"><font style="color: #000000;"\r
- color=#000000><path> section</font></b></h4>\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><path> \r
+ section</font></span></font></b></h4>\r
\r
-This is an optional section - it contains default directories. \r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This is an optional section; it defines \r
+ default installation directories.</font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<br>\r
+Attributes:</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
\r
<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">targetdir</b>: \r
- Starting target directory - path to the directory where products should \r
- be installed;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">targetdir</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The target directory \r
+ - the path to the directory where products should be installed.</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">tempdir</b>: \r
- Starting temp directory - path to the directory for the temporary files.</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">tempdir</font></span></b></font></li>\r
</ul>\r
\r
-<h4><b style="font-weight: bold;"><product> section</b></h4>\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The temporary directory \r
+ - the path to the directory for the temporary files.</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<h4><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><product> \r
+ section</font></span></b></h4>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This section describes product to be installed \r
+ with the Installation Wizard. The XML file should include a <product> \r
+ section for each product to be installed. The products appear in the tree \r
+ view and are installed in the order they are described in the configuration \r
+ file. It is recommended (but not obligatory) to define native products \r
+ at the top of the list before all other products.</font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<br>\r
+Attributes:</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">name</font></span></b></font></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Product name. </font></span>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">version</font></span></b></font></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Product version. </font></span>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">description</font></span></b></font></li>\r
+</ul>\r
\r
-This section describes the products that are to be installed with the Installation \r
- Wizard. Products appear in the products tree and are installed in the \r
- order they are described in the configuration file. It is recommended \r
- to insert native products at the top of the list before all other products. \r
- \r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Product description \r
+ (optional).</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
\r
<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">name</b>: \r
- Name of the product;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">context</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Context (optional). \r
+ The possible values are </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">'salome \r
+ sources'</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">'salome \r
+ binaries'</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">'prerequisite'</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ (several contexts can be given separated by ":" symbol).</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">version</b>: \r
- Version of the product;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">supported</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Supported modes of \r
+ installation. Several modes can be separated by comma. Possible value \r
+ are: </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">install sources</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">install \r
+ binaries</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">use \r
+ native</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">. The Installation script \r
+ should contain the corresponding functions for each of the supported installation \r
+ modes (see </font></span><a href="#new_products"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">).</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">description</b>: \r
- Description of the product (optional);</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">install</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Default (starting) \r
+ installation mode.</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">context</b>: \r
- Context of the product (optional); the possible values are <b>'salome \r
- sources'</b>, <b>'salome binaries'</b> and <b>'prerequisite'</b>;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">disable</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">If this optional flag \r
+ has 'true' value, the corresponding product will not appear in the list \r
+ of products and will not be installed.</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">pickupenv</font></span></b></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This flag points that pickup environment \r
+ procedure should be performed for this product. If this flag equal to \r
+ 'true', salome.sh and salome.csh files will be created in \r
+ the product installation directory. Usually this option is set to true \r
+ for SALOME KERNEL module sources and binaries package. This is an optional \r
+ key, default value is 'false'</font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">.</font></span></b><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">supported</b>: \r
- Supported modes of installation, should contain one or more of the following \r
- options, separated by a comma: <i>install sources</i>, <i>install binaries</i>, \r
- <i>use native</i>. The Installation script should contain corresponding \r
- functions for each of supported installation modes;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">dependancies</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">List of prerequisite \r
+ products, which are necessary to build this product, separated by comma.</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">install</b>: \r
- Default (starting) installation mode;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">installdiskspace</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Total amount of space \r
+ (integer, in Kbytes), which the product occupies on the hard drive after \r
+ the installation.</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">disable</b>: \r
- If this flag has 'true' value, the corresponding product will not appear \r
- in the list of products tree and will not be installed;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">temporarydiskspace</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Disk space (integer, \r
+ in Kbytes) for temporary files, which is necessary to build the product \r
+ from the sources.</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
- class=kadov-p><b style="font-weight: bold;">pickupenv</b>: This \r
- flag points that the pickup environment procedure should be performed \r
- for this module. If this flag is equal to <b>true</b>, salome.sh \r
- and salome.csh files will be created in the product's installation \r
- directory. Usually this option is set to true for SALOME KERNEL module \r
- sources and the binaries package. This is an optional key, the default \r
- value is <b>false.</b></li>\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">script</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The installation script \r
+ name. This script is in charge of the installation of the product. It \r
+ is called automatically by the Installation Wizard when necessary from \r
+ the main program. See the </font></span><a href="#new_products"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">next \r
+ section</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> for more information.</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<h4><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><button> \r
+ section</font></span></b></h4>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This is an optional section. It allows customization \r
+ of the last </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Finish installation"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> page of the Installation Wizard by adding one \r
+ or more buttons in the lower part of the wizard's window. The script which \r
+ is attached to each such button, can perform some specific action, for \r
+ example, launch the application or show the Release Notes file by using \r
+ an external program. See </font></span><a href="#finish_buttons"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> for more details about writing scripts.</font></span><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<br>\r
+Attributes:</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">dependancies</b>: \r
- list of prerequisite products, which are necessary to build this product, \r
- separated by a comma;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">label</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This is the button \r
+ text.</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">installdiskspace</b>: \r
- Total amount of space (integer, in Kbytes), which the product occupies \r
- on the hard drive after the installation;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">tooltip</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The button tooltip \r
+ (optional).</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">temporarydiskspace</b>: \r
- Disk space (integer, in Kbytes) for the temporary files, which are necessary \r
- to build the product from the sources;</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">script</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The script attached \r
+ to the button.</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">script</b>: \r
- Installation script name. This script is in charge of installation of \r
- the product. It is called when necessary from the main program. See the \r
- <a href="#new_products">next section</a> for more information.</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">disable</font></span></b></font></li>\r
</ul>\r
\r
- \r
+<p class="whs20"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">If \r
+ this optional flag has 'true' value, the corresponding button will not \r
+ appear in the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Finish installation"</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> page - the section of XML file is silently ignored.</font></span><b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> </font></span></b></p>\r
\r
-<p class="whs18"><span \r
- style="font-weight: bold;"><B><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"></B></span> If you add new products \r
- to be installed with the Installation Wizard, you should also provide \r
- the installation script for this product. See the next section for more \r
- details. </p>\r
+<p class="whs11"><b \r
+ style="font-weight: bold;"><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></B></font></span><span style="font-size:12pt; background-image:url('../texture_horiz_ltbluebubbles.jpg'); "><font size=3 style="font-size:12pt;">Note:</font></span></b><span style="font-size:12pt; background-image:url('../texture_horiz_ltbluebubbles.jpg'); "><font size=3 style="font-size:12pt;"> \r
+ If you add new products to be installed with Installation Wizard, you \r
+ should also provide installation script for this product. See the next \r
+ section for more details. </font></span></p>\r
\r
+ <br>\r
\r
-<hr class="whs2">\r
+\r
+<hr class="whs7">\r
\r
\r
<h3><a name=new_products></a>Implementing <font style="color: #ff0000;"\r
color=#FF0000>installation \r
scripts</font> for the new products</h3>\r
\r
-<p>When you want some product to be installed with the Installation Wizard, \r
- you should add its description <a href="#xml_files">in the configuration \r
- file</a> and create a bash installation script, following the rules described \r
- in this section. <br>\r
-There are some obligatory functions to be provided in this installation \r
- script. These functions are automatically called by the master installation \r
- script or/and its GUI shell when it is necessary.<br>\r
-File <b>common.sh</b> contains some service functions which can be used \r
- in your installation script, like <b>make_env()</b>,<b> make_dir()</b>, \r
- <b>try_existing()</b>, <b>sort_path()</b>,<b> find_in_path()</b>, etc. \r
- </p>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">When you want some product to be installed \r
+ with the Installation Wizard, you should add its description </font></span><a \r
+ href="#xml_files"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">to the configuration \r
+ file</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and create the installation \r
+ script, following the rules described in this section. <br>\r
+<br>\r
+There are some obligatory functions which should be implemented in this \r
+ installation script. These functions are automatically called by the master \r
+ installation script or/and its GUI shell when it is necessary.</font></span><font \r
+ style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+File </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">common.sh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> contains some service functions which can be \r
+ used in your installation script, like </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">make_env()</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">,</font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> make_dir()</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">try_existing()</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">sort_path()</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">,</font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> find_in_path()</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, etc.</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span>\r
\r
<ul>\r
\r
<li class=kadov-p\r
- class=kadov-p><b style="font-weight: bold;">check_version()</b>: \r
- This function allows to check the version of the product already installed \r
- on the computer. It should try to find the product (native or preinstalled \r
- in the target directory) and check it version. This helps to avoid unnecessary \r
- reinstallation. This is internal function and is not called</li>\r
+ class=kadov-p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">check_version()</font></span></b></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This function allows to check the version \r
+ of the product already installed on the computer. It should try to find \r
+ the product (native or preinstalled in the target directory) and check \r
+ its version. This helps to avoid unnecessary reinstallation. This is an \r
+ internal function and is not called from the master installation script. \r
+ </font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><b style="font-weight: bold;"><font style="color: #000000;"\r
- color=#000000>try_native()</font></b><font \r
- style="color: #000099;"\r
- color=#000099>: </font><font style="color: #000000;"\r
- color=#000000>This function is called when \r
- the <i>'use native' </i>installation mode is selected by the user. The \r
- function should try to find the native version of the product and define \r
- the possibility of it usage. It should create the environment for the \r
- product in the temporary directory (see also the description of <b>print_env(</b>) \r
- function). If you do not provide the native mode installation, you can \r
- omit this function.</font></li>\r
+ color=#000000><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">try_native()</font></span></font></b></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This function is called when the </font></span><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">'use native' </font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">installation \r
+ mode is selected by the user. The function should try to find a native \r
+ version of the product and define possibility of its use. It should create \r
+ the environment file for the product in the temporary directory (see also \r
+ the description of </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">print_env(</font></span></b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>)</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ function). It is not necessary to implement this function if you do not \r
+ provide native mode installation. </font></span>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
+ class=kadov-p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">install_source()</font></span></b></font></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This function is called when the </font></span><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">'install sources</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">' \r
+ installation mode is selected by the user. The function is responsible \r
+ for building the product from the sources package. It should create the \r
+ environment file for the product in the temporary directory (see also \r
+ description of </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">print_env(</font></span></b><span \r
+ style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>)</B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ function). It is not necessary to implement this function if you do not \r
+ provide sources mode installation. </font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">install_source()</b>: \r
- This function is called when the <i>'install sources</i>' installation \r
- mode is selected by the user. The function is responsible for the building \r
- of the product from the sources package. It should create the environment \r
- for the product in the temporary directory (see also the description of \r
- <b>print_env(</b>) function). If you do not provide the sources mode installation, \r
- you can omit this function</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">install_source_and_build()</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This function is called \r
+ when SALOME module is installed and the </font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>--all-from-sources</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> (</font></span><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B>-a</B></font></span><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">) option is used (</font></span><span style="font-style: italic; font-size: 12pt;"><font size=3 style="font-size:12pt;"><I>"Build \r
+ SALOME sources"</I></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> check box in \r
+ GUI mode). This function should be used to unpack SALOME sources package \r
+ and then call the build/install procedure for it.<br>\r
+For more details please refer to the </font></span><a href="#install_from_wizard"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">this</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ and </font></span><a href="#gui_mode"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">this</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> sections for more details.</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">install_binary()</b>: \r
- This function is called when the <i>'install binaries'</i> installation \r
- mode is selected by the user. The function is responsible for the extracting \r
- the product from the binaries package. Should create environment for the \r
- product in the temporary directory (see also the description of <b>print_env(</b>) \r
- function). If you do not provide the binaries mode installation, you can \r
- omit this function.</font></li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">install_binary()</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This function is called \r
+ when the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">'install binaries'</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> installation mode is selected by the user. The \r
+ function is responsible for the extracting of the product from the binaries \r
+ package. It should create environment for the product in the temporary \r
+ directory (see also description of </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">print_env(</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">) function). It is not necessary to implement \r
+ this function if you do not provide binaries mode installation. </font></span></font>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
- class=kadov-p><b style="font-weight: bold;">try_preinstalled()</b>: \r
- <font style="color: #000000;"\r
- color=#000000>This function is called when the<i> 'not install'</i> \r
- installation mode is selected by the user. In this case the script should \r
- inspect the target directory to try to find the already preinstalled product, \r
- pick up and check the environment from there. See <a href="#pick_up_env">here</a> \r
- for more details.</font></li>\r
+ class=kadov-p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">try_preinstalled()</font></span></b></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This function is called when</font></span><i><span \r
+ style="font-style: normal; font-size: 12pt;"><font size=3 style="font-size:12pt;"> the</font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ 'not install'</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> installation mode \r
+ is selected by the user. In this case the script should inspect the target \r
+ directory to try to find an already preinstalled product, pick up and \r
+ check the environment from there. See </font></span><a href="#pick_up_env"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ for more details. </font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
+ style="/*begin!kadov{{*/ color: #000000; /*}}end!kadov*/ "\r
class=kadov-p><font style="color: #000000;"\r
- color=#000000><b style="font-weight: bold;">print_env()</b>: \r
- This function is in charge of the environment script creation. It should \r
- create a file with the name </font><b>env_<product_name>.sh</b> \r
- in the temporary directory and then copy it into the product installation \r
- directory. The file should contain all necessary environment variables \r
- settings for the product. It will be collected during the 'pick-up-environment' \r
- procedure.</li>\r
+ color=#000000><b style="font-weight: bold;"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">print_env()</font></span></b></font></li>\r
+</ul>\r
+\r
+<font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This function is in \r
+ charge of creating the environment script. It should create a file with \r
+ name </font></span></font><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">env_<product_name>.sh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> in the temporary directory and then copy it \r
+ into the product installation directory. The file should contain all necessary \r
+ environment variables settings for the product. It will be collected during \r
+ the 'pick-up-environment' procedure. </font></span>\r
+\r
+<ul>\r
\r
<li class=kadov-p\r
- class=kadov-p><b style="font-weight: bold;">pickup_env()</b>: This \r
- procedure corresponds to the <b>pickupenv</b> tag of the configuration \r
- xml file (see previous section). Should call the <b>make_env</b> procedure \r
- to perform the pick-up environment procedure for the product.</li>\r
+ class=kadov-p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">pickup_env()</font></span></b></li>\r
</ul>\r
\r
-<font style="color: #000000;"\r
- color=#000000>The calling signature of the product installation \r
- script is the following:</font> <b><font style="color: #000000;"\r
- color=#000000><br>\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This procedure corresponds to the </font></span><b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">pickupenv</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ tag of the configuration xml file (see previous section). It should call \r
+ the </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">make_env</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> procedure to perform the pick-up environment \r
+ procedure for the product.</font></span><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<br>\r
+The calling signature of the product installation script is the following:</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><b><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
<product_script_name> <function_name> <temp_folder> <products_directory> \r
- <target_directory> <dependancies> <product_name></font></b> \r
- \r
-\r
-<p>where <b><br>\r
-<product_script_name></b> - installation script name (described in \r
- configuration xml file); <b><br>\r
-<function_name></b> - name of the function, corresponding to the \r
- selected installation mode: <i>try_native, install_source, install_binary</i> \r
- or <i>try_preinstalled</i>; <b><br>\r
-<temp_folder></b> - temporary files directory; <b><br>\r
-<products_directory></b> - directory where the sources/binaries package \r
- can be found. You should provide the sources package in the <i><Install_Wizard_root_directory>/Products/SOURCES</i> \r
- directory and binaries package in the <i><InstallWizard_root_directory>/Products/BINARIES/<os_version></i>, \r
- where <os_version> is target platform description, which appears \r
- in the corresponding section of the <a href="#xml_files">configuration \r
- xml file</a>. <b><br>\r
-<target_directory></b> - root target directory where the product \r
- should be installed to; <b><br>\r
-<dependancies></b> - single-quoted list of prerequisite products, \r
- separated by space; <b><br>\r
-<product_name> </b>- product name itself. </p>\r
-\r
-<p> </p>\r
-\r
-<p class="whs18"><i \r
- style="font-style: italic;"><img src="../pics/exemple.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs19"></i><i>med-2.2.2.sh install_binary \r
- /tmp/work ./Products/BINARIES/Mandrake10.1 /usr/salome 'gcc Hdf' med</i> \r
- </p>\r
-\r
-<p class="whs18"><i \r
- style="font-style: italic;"><span style="background-image:url('../texture_horiz_ltbluebubbles.jpg'); "><font \r
+ <target_directory> <dependancies> <product_name></font></span></font></b><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">where</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><product_script_name></font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - installation script name (described in the \r
+ configuration xml file);</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<function_name></font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - the name \r
+ of function, corresponding to the selected installation mode: </font></span><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">try_native, install_source, install_binary</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> or </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">try_preinstalled</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">;</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<temp_folder></font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - temporary \r
+ files directory;</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font \r
style="color: #000000;"\r
- color=#000000>C</i>opy the created script into the <i><Install_Wizard_root_directory>/config_files</i> \r
- sub-directory where all installation scripts are stored. Installation \r
- Wizard will automatically search and call your script during the installation \r
- procedure.</font> </span></p>\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<products_directory></font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - \r
+ directory where the sources/binaries package can be found. You should \r
+ provide the sources package in the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><Install_Wizard_root_directory>/Products/SOURCES</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> directory and binaries package in the </font></span><i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><InstallWizard_root_directory>/Products/BINARIES/<os_version></font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">, where <os_version> is the target platform \r
+ description, which appears in the corresponding section of the </font></span><a \r
+ href="#xml_files"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">configuration xml file</font></span></a><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">.</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<target_directory></font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - root \r
+ target directory where the product should be installed to;</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<dependancies></font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - single-quoted \r
+ list of prerequisite products, separated by space;</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><font style="color: #000000;"\r
+ color=#000000><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<product_name> </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">- product \r
+ name itself.</font></span></font><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+<p><font style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Example:</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+med-2.2.3.sh install_binary /tmp/work ./Products/BINARIES/Mandrake10.1 \r
+ /usr/salome 'gcc Hdf' med</font></span></i><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Copy the created script \r
+ into the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><Install_Wizard_root_directory>/config_files</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> sub-directory where all installation scripts \r
+ are stored. Installation Wizard will automatically search and call your \r
+ script during the installation procedure.</font></span></font><span style="font-size: 12pt;"> \r
+ <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+\r
+<hr class="whs7">\r
\r
\r
-<hr class="whs2">\r
+ \r
\r
+<h3><a name=finish_buttons></a>Customizing <font style="color: #ff0000;"\r
+ color=#FF0000>Readme page</font> \r
+ buttons</h3>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">The Installation Wizard allows customizing \r
+ the look-n-feel of the last </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Finish \r
+ installation"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> page. If \r
+ you want to add one or more buttons to this page in order to perform some \r
+ specific actions at the end of the installation (for example, to show \r
+ the Release Notes file by using Open Office) you can put an additional \r
+ section to the XML configuration file. This is the </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><button></font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> section (see </font></span><a href="#xml_files"><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">here</font></span></a><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ for more details). </font></span>\r
+\r
+<br><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> </font></span>\r
+\r
+<br><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;">To implement the action which will be performed \r
+ when the user clicks the button, you need to create a script and put it \r
+ to the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><Install_Wizard_root_directory>/config_files</font></span></i><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> directory.<br>\r
+There are some obligatory functions which should be implemented in this \r
+ script. These functions are automatically called by the Installation Wizard \r
+ GUI. </font></span>\r
\r
- \r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">check_enabled()</font></span></b></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This procedure is called by the Installation \r
+ Wizard when the </font></span><i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">"Finish \r
+ installation"</font></span></i><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> page is displayed \r
+ and the status of the buttons should be modified according to the installation \r
+ options. This procedure should return </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">0</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> if the corresponding action can be performed \r
+ and, thus, the button should become enabled. Otherwise, it should return \r
+ </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">1</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ - in this case the corresponding button will be disabled. </font></span>\r
+\r
+<ul>\r
+ \r
+ <li class=kadov-p\r
+ class=kadov-p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">execute()</font></span></b></li>\r
+</ul>\r
+\r
+<span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">This procedure is invoked when the user \r
+ clicks the button. This procedure should return </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">0</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> if the corresponding action is done successfully \r
+ and </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">1</font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> \r
+ if any error occurs.<br>\r
+<br>\r
+The calling signature of the script is the following:</font></span><b><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<product_script_name> <function_name> <target_directory> \r
+ <temp_folder></font></span></font></b><span style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span>\r
+\r
+<p><font style="color: #000000;"\r
+ color=#000000><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">where</font></span></font><span \r
+ style="font-size: 12pt;"> <font size=3 style="font-size:12pt;"></font></span></p>\r
+\r
+<p><b style="font-weight: bold;"><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><product_script_name></font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - the script name itself (retrieved from the \r
+ XML configuration xml file); </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<function_name></font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - the name \r
+ of function; </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<target_directory></font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> - root \r
+ target directory where the product is installed to; </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+<temp_folder> </font></span></b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">- temporary \r
+ files directory; </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><br>\r
+ </font></span></b></p>\r
+\r
+<p class="whs11"><b \r
+ style="font-weight: bold;"><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Note:</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> The standard Installation Wizard buttons "Launch \r
+ SALOME" and "Release Notes" are implemented with this feature. \r
+ Refer to scripts </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">start_salome.sh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> and </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">release_notes.sh</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> for sample implementation.</font></span><b><span style="font-weight: bold; font-size: 12pt;"><font size=3 style="font-size:12pt;"><B><br>\r
+<br>\r
+<img src="../note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs14"></B></font></span><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;">Note:</font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> Any button (even standard) can be ignored by \r
+ the Installation Wizard if the attribute </font></span><b><span style="font-size: 12pt;"><font size=3 style="font-size:12pt;"><disable></font></span></b><span \r
+ style="font-size: 12pt;"><font size=3 style="font-size:12pt;"> in the XML configuration file is set to the \r
+ "true" value. </font></span></p>\r
+\r
+\r
+<hr class="whs7">\r
\r
-<br> \r
- \r
+\r
+ \r
\r
<script type="text/javascript" language="javascript1.2">\r
<!--\r
<span style="font-weight: bold;"><B>-l</B></span> </td>\r
<td colspan="1" rowspan="1" width="421px" class="whs21">\r
<p>redirects log \r
- messages into a file defined by the command --file or -f</td></tr>\r
+ messages in the file <span style="font-style: italic;"><I>logger.log</I></span></td></tr>\r
\r
<tr valign="top" class="whs16">\r
<td colspan="1" rowspan="1" width="645px" class="whs20">\r
<p class="whs22">--file=<FILE> <span style="font-weight: normal; font-style: italic;"><I>or</I></span> \r
-f=<FILE></td>\r
<td colspan="1" rowspan="1" width="421px" class="whs21">\r
-<p>allows to define a file for log messages </td></tr>\r
+<p>redirects log \r
+ messages in a custom file</td></tr>\r
\r
<tr valign="top" class="whs16">\r
<td colspan="1" rowspan="1" width="645px" class="whs20">\r
<p class="whs31">\r
<a href="javascript:void(0);" onClick="var e; if (parseInt(navigator.appVersion)>=4){e=event;} if (parseInt(navigator.appVersion) >=2 && typeof(PickupDialog_Invoke) == 'function') PickupDialog_Invoke(e,'','About SALOME architecture','about_salome_pro_architecture.htm','Introduction to SALOME ','introduction_to_salome_pro.htm');return false;" title="Related Topics"><img src="../ss_btn_related_topics.gif" border=0 height=17 width=82 alt="Related Topics"></a>\r
\r
-\r
</p>\r
\r
<p class="whs31"> </p>\r
+++ /dev/null
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>MESH preferences</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { font-weight:bold; }\r
-img_whs2 { border:none; border-style:none; width:752px; height:646px; float:none; }\r
-ul.whs3 { list-style:disc; }\r
-p.whs4 { margin-left:48px; }\r
-p.whs5 { font-weight:bold; margin-left:0px; }\r
-p.whs6 { margin-left:0px; font-weight:bold; }\r
-p.whs7 { font-weight:bold; margin-left:48px; }\r
-p.whs8 { margin-left:0px; font-weight:normal; }\r
-p.whs9 { margin-left:38px; }\r
-p.whs10 { margin-left:38px; font-weight:bold; }\r
-p.whs11 { font-weight:bold; margin-left:38px; }\r
-p.whs12 { font-weight:normal; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
- var strNSS = "<style type='text/css'>";\r
- strNSS += "p.whs5 {margin-left:1pt; }";\r
- strNSS += "p.whs6 {margin-left:1pt; }";\r
- strNSS += "p.whs8 {margin-left:1pt; }";\r
- strNSS +="</style>";\r
- document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- addTocInfo("GUI module\nSetting Preferences\nMesh preferences");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- setRelStartPage("index.htm");\r
-\r
- autoSync(1);\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Mesh preferences</h1>\r
-\r
-<p>In the Mesh module you can set mesh preferences, which can be used in \r
- later sessions with this module. </p>\r
-\r
-<p> </p>\r
-\r
-<p class="whs1">General Preferences</p>\r
-\r
-<p> </p>\r
-\r
-<p><img src="pics/pref21.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Update</p></li>\r
- \r
- <ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1"> <span \r
- style="font-weight: normal;">If you toggle</span> \r
- Automatic Update<span style="font-weight: normal;"> checkbox, the model \r
- in your viewer automatically updated whenever you make changes in it.</span></p></li>\r
- </ul>\r
- \r
- <li class=kadov-p><p class="whs1">Quality Controls.</p></li>\r
- \r
- <li class=kadov-p><p class="whs4">If you toggle <span \r
- style="font-weight: bold;"><B>Display entity, </B></span>both faces and edges \r
- of an object will be displayed in the viewer by default .<span style="font-weight: bold;"> \r
- <B></B></span></p></li>\r
- \r
- <li class=kadov-p><p class="whs4">If you toggle <span \r
- style="font-weight: bold;"><B>Use precision</B></span> checkbox, you can display \r
- numbers in<span style="font-weight: bold;"><B> Quality Control</B></span> diagrams \r
- at the necessary level of precision.</p></li>\r
- \r
- <li class=kadov-p><p class="whs5">Precision \r
- - <span style="font-weight: normal;">can be defined by</span> <span style="font-weight: normal;">the \r
- </span>Number of digits after point<span style="font-weight: normal;"> \r
- in the corresponding field. By default, numbers in </span>Quality Control<span \r
- style="font-weight: normal;"> diagrams are presented as integers.</span> \r
- </p></li>\r
- \r
- <li class=kadov-p><p class="whs5">Display \r
- mode - <span style="font-weight: normal;">allows to set Wireframe, Shading, \r
- Nodes or Shrink presentation mode as default.</span> </p></li>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs6">Mesh \r
- export </p></li>\r
- \r
- <li class=kadov-p><p class="whs4">If you toggle <span \r
- style="font-weight: bold;"><B>Automatically create groups for MED export</B></span> \r
- checkbox, this operation will be carried out automatically.</p></li>\r
-</ul>\r
-\r
-<p class="whs7"> </p>\r
-\r
-<p class="whs5"> </p>\r
-\r
-<p class="whs6">Mesh Preferences</p>\r
-\r
-<p class="whs8"> </p>\r
-\r
-<p class="whs1"><img src="pics/pref22.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Nodes</B></span> \r
- </p></li>\r
- \r
- <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Color</B></span> \r
- - allows \r
- to select the color of nodes. Click on the colored line to access to the \r
- <span style="font-weight: bold;"><B><a href="select_color_and_font.htm">Select \r
- Color</a></B></span> dialog box. </p></li>\r
- \r
- <li class=kadov-p><p class="whs10">Size \r
- - <span style="font-weight: normal;">allows to define the size of nodes.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs1">Elements</p></li>\r
- \r
- <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Fill \r
- </B></span> - \r
- allows to select the color of surface of elements (seen in Shading mode). \r
- Click on the colored line to access to the <span style="font-weight: bold;"><B><a href="select_color_and_font.htm">Select Color</a></B></span> dialog box. </p></li>\r
- \r
- <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Outline</B></span> \r
- - allows to select the color of borders of elements. Click on the colored \r
- line to access to the <span style="font-weight: bold;"><B><a href="select_color_and_font.htm">Select \r
- Color</a></B></span> dialog box. </p></li>\r
- \r
- <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Back \r
- Face</B></span> - allows to select the color of interior surface of elements. \r
- Click on the colored line to access to the <span style="font-weight: bold;"><B><a href="select_color_and_font.htm">Select Color</a></B></span> dialog box. </p></li>\r
- \r
- <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Width</B></span> \r
- - allows to define the width of lines (edges and borders of elements).</p></li>\r
- \r
- <li class=kadov-p><p class="whs10">Shrink \r
- coef. - <span style="font-weight: normal;">allows to define relative space \r
- of elements compared to gaps between them in shrink mode</span></p></li>\r
-</ul>\r
-\r
-<p> </p>\r
-\r
-<p class="whs1">Selection Preferences</p>\r
-\r
-<p> </p>\r
-\r
-<p><img src="pics/pref23.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Selection - <span style="font-weight: normal;">performed \r
- with mouse-indexing (preselection) and left-clicking on an object, whose \r
- appearance changes as defined in the</span> Preferences.</p></li>\r
- \r
- <li class=kadov-p><p class="whs11">Object \r
- Color - <span style="font-weight: normal;">allows \r
- to select the color of mesh (edges and borders of meshes) of the selected \r
- entity. Click on the colored line to access to the <a href="select_color_and_font.htm" style="font-weight: bold;">Select \r
- Color</a> dialog box.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs11">Element \r
- color - <span style="font-weight: normal;">allows to select the color \r
- of surface of selected elements (seen in Shading mode).</span> <span style="font-weight: normal;">Click \r
- on the colored line to access to the <a href="select_color_and_font.htm" style="font-weight: bold;">Select \r
- Color</a> dialog box.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Width</B></span> \r
- - allows to define the width of selected edges.</p></li>\r
- \r
- <li class=kadov-p><p class="whs1">Preselection - <span \r
- style="font-weight: normal;">performed with mouse-indexing on an object, \r
- whose appearance changes as defined in the</span> Preferences.</p></li>\r
- \r
- <li class=kadov-p><p class="whs11">Highlight \r
- Color - <span style="font-weight: normal;">allows \r
- to select the color of mesh (edges and borders of meshes) of the entity \r
- . Click on the colored line to access to the <a href="select_color_and_font.htm" style="font-weight: bold;">Select \r
- Color</a> dialog box.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs9"><span style="font-weight: bold;"><B>Width</B></span> \r
- - allows to define the width of preselected edges.</p></li>\r
- \r
- <li class=kadov-p><p class="whs1">Precision<span style="font-weight: normal;"> \r
- - in this menu you can set the value of precision used for </span>Nodes<span \r
- style="font-weight: normal;"> and </span>Elements<span style="font-weight: normal;">.</span></p></li>\r
-</ul>\r
-\r
-<p class="whs1"> </p>\r
-\r
-<p class="whs1">Scalar Bar Preferences</p>\r
-\r
-<p class="whs12"> </p>\r
-\r
-<p class="whs12"><img src="pics/pref24.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Font - </B></span>in \r
- this menu you can set type, face and color for the font of<span style="font-weight: bold;"><B> \r
- Title</B></span> and<span style="font-weight: bold;"><B> Labels.</B></span></p></li>\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Colors & \r
- Labels - </B></span>in this menu you can set the<span style="font-weight: bold;"><B> \r
- number of colors </B></span>and the<span style="font-weight: bold;"><B> number \r
- of labels</B></span> in use<span style="font-weight: bold;"><B>.</B></span></p></li>\r
- \r
- <li class=kadov-p><p class="whs1">Orientation - <span \r
- style="font-weight: normal;">here you can choose between vertical and \r
- horizontal orientation of the</span> Scalar Bar.</p></li>\r
- \r
- <li class=kadov-p><p class="whs5">Origin \r
- & Size Vertical & Horizontal - a<span style="font-weight: normal;">llows \r
- to define placement (</span>X <span style="font-weight: normal;">and</span> \r
- Y<span style="font-weight: normal;">) and lookout (</span>Width and Height) \r
- <span style="font-weight: normal;">of Scalar Bars</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs11">X: \r
- <span style="font-weight: normal;">abscissa of the point of origin (from \r
- the left side)</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs11">Y: \r
- <span style="font-weight: normal;">ordinate of the origin of the bar (from \r
- the bottom)</span></p></li>\r
-</ul>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Post-Pro Preferences</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { font-weight:bold; }\r
-img_whs2 { border:none; border-style:none; width:752px; height:646px; float:none; }\r
-ul.whs3 { list-style:disc; }\r
-p.whs4 { font-weight:normal; }\r
-p.whs5 { font-weight:bold; margin-left:57px; }\r
-p.whs6 { font-weight:bold; margin-left:0px; }\r
-p.whs7 { font-weight:bold; margin-left:38px; }\r
-p.whs8 { margin-left:0px; font-weight:bold; }\r
-p.whs9 { margin-left:38px; font-weight:bold; }\r
-p.whs10 { margin-left:0px; text-align:justify; }\r
-p.whs11 { margin-left:38px; }\r
-img_whs12 { border:none; width:752px; height:646px; float:none; }\r
-p.whs13 { font-weight:bold; margin-left:36px; }\r
-p.whs14 { margin-left:0px; text-align:justify; font-weight:bold; }\r
-p.whs15 { margin-left:0px; text-align:justify; font-weight:normal; }\r
-p.whs16 { text-align:justify; font-weight:bold; margin-left:38px; }\r
-ol.whs17 { list-style:disc; }\r
-ul.whs18 { list-style:square; }\r
-p.whs19 { font-style:normal; }\r
-p.whs20 { margin-left:76px; }\r
-p.whs21 { text-align:justify; font-weight:bold; margin-left:0px; }\r
-p.whs22 { margin-left:38px; text-align:justify; font-weight:bold; }\r
-p.whs23 { text-align:justify; font-weight:bold; margin-left:76px; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
- var strNSS = "<style type='text/css'>";\r
- strNSS += "p.whs6 {margin-left:1pt; }";\r
- strNSS += "p.whs8 {margin-left:1pt; }";\r
- strNSS += "p.whs10 {margin-left:1pt; }";\r
- strNSS += "p.whs14 {margin-left:1pt; }";\r
- strNSS += "p.whs15 {margin-left:1pt; }";\r
- strNSS += "p.whs21 {margin-left:1pt; }";\r
- strNSS +="</style>";\r
- document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- addTocInfo("GUI module\nSetting Preferences\nPost-Pro Preferences");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- setRelStartPage("index.htm");\r
-\r
- autoSync(1);\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Post-Pro Preferences</h1>\r
-\r
-<p>In the Post-Pro module you can set preferences, default settings, which \r
- can be used in later sessions with this module. </p>\r
-\r
-<p> </p>\r
-\r
-<p class="whs1">Scalar Bar Preferences</p>\r
-\r
-<p> </p>\r
-\r
-<p><img src="pics/pref31.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs1"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Scalar Range </p></li>\r
- \r
- <ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs4"><span style="font-weight: bold;"><B>Scalar \r
- Mode</B></span> - this feature allows refining the value to be inspected:</p></li>\r
- \r
- <li class=kadov-p><p class="whs5">Modulus: \r
- <span style="font-weight: normal;">value of a scalar or modulus of a vector.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs5">Component \r
- N: <span style="font-weight: normal;">Nth component of a vector, a tensor \r
- or a matrix..</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs4"><span style="font-weight: bold;"><B>Logarithmic \r
- Scaling</B></span> - this checkbox toggles logarithmic scaling.</p></li>\r
- \r
- <li class=kadov-p><p class="whs4"><span style="font-weight: bold;"><B>Ranges \r
- to Use</B></span> - you can use either Field Range or Imposed Range.<span \r
- style="margin-left: 0px;"> </span><span style="margin-left: 0px; text-indent: 12px;">.</span></p></li>\r
- </ul>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Min and Max for \r
- Imposed Range</B></span> - in this menu you \r
- can set the limits for your Imposed Range, if you have chosen to use it.</p></li>\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Font - </B></span>in \r
- this menu you can set type, face and color for the font of<span style="font-weight: bold;"><B> \r
- Title</B></span> and<span style="font-weight: bold;"><B> Labels.</B></span></p></li>\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Colors & \r
- Labels - </B></span>in this menu you can set the<span style="font-weight: bold;"><B> \r
- number of colors </B></span>and the<span style="font-weight: bold;"><B> number \r
- of labels</B></span> in the Scalar bar<span style="font-weight: bold;"><B>.</B></span></p></li>\r
- \r
- <li class=kadov-p><p class="whs1">Orientation - <span \r
- style="font-weight: normal;">here you can choose between vertical and \r
- horizontal orientation of the</span> <span style="font-weight: normal;">Scalar \r
- Bar.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs6">Origin \r
- & Size Vertical & Horizontal - a<span style="font-weight: normal;">llows \r
- to define placement (</span>X <span style="font-weight: normal;">and</span> \r
- Y<span style="font-weight: normal;">) and lookout (</span>Width and Height) \r
- <span style="font-weight: normal;">of Scalar Bars</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">X: \r
- <span style="font-weight: normal;">abscissa of the point of origin (from \r
- the left side)</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Y: \r
- <span style="font-weight: normal;">ordinate of the origin of the bar (from \r
- the bottom)</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs8">Scalar \r
- bars default position</p></li>\r
- \r
- <li class=kadov-p><p class="whs9">Arrange \r
- Scalar Bars - <span style="font-weight: normal;">this option prevents \r
- superposition of scalar bars during visualisation of several fields in \r
- the same window. If checked, a separate scalar bar is displayed for each \r
- presentation.</span></p></li>\r
-</ul>\r
-\r
-<p> </p>\r
-\r
-<p class="whs1">Sweep, MED Import Preferences</p>\r
-\r
-<p class="whs1"> </p>\r
-\r
-<p class="whs4"><img src="pics/pref32.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs4"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Sweeping preferences</p></li>\r
- \r
- <ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs10"><span \r
- style="font-weight: bold;"><B>Time step -</B></span> in this menu you can set \r
- the<span style="font-weight: bold;"> <B></B></span>time of representation of \r
- one step.</p></li>\r
- \r
- <li class=kadov-p><p class="whs10"><span \r
- style="font-weight: bold;"><B>Number of cycles -</B></span> in this menu you \r
- can define the number of times this animation will be repeated.</p></li>\r
- \r
- <li class=kadov-p><p class="whs10"><span \r
- style="font-weight: bold;"><B>Number of steps</B></span> - in this menu you can \r
- define the number of steps, which will compose the whole animation.</p></li>\r
- </ul>\r
-</ul>\r
-\r
-<p class="whs10"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">MED files import </p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Use \r
- Build Progress - <span style="font-weight: normal;">when this option is \r
- checked you can choose all other import MED options at the moment of loading \r
- of each file using </span>Build Progress<span style="font-weight: normal;"> \r
- menu, otherwise the loading will be done according to the </span>Preferences<span \r
- style="font-weight: normal;"> without addressing to the user.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Full \r
- MED Loading - <span style="font-weight: normal;">when this option is checked, \r
- the MED file is fully loaded in the study, and no additional access to \r
- the MED file is needed during the session. Reversibly, when unchecked, \r
- the MED file is loaded on demand. This is the default behaviour in SALOME \r
- and recommended for big files to optimize memory usage.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs11"><span style="font-weight: bold;"><B>Build \r
- at once</B></span> - when this option is checked, you can't perform any operations \r
- until the MED file is fully loaded and processed. </p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Build \r
- fields - <span style="font-weight: normal;">when \r
- this</span> <span style="font-weight: normal;">option is checked, the \r
- fields are built automatically at loading. </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Build \r
- min/max - <span style="font-weight: normal;">when this option is checked, \r
- minimum and maximum values of the time stamps are found at loading. </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Build \r
- groups - <span style="font-weight: normal;">when this</span> <span style="font-weight: normal;">option \r
- is checked, the groups and families are built automatically at loading. \r
- </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Close \r
- dialog at finish - <span style="font-weight: normal;">when this option \r
- is checked, the dialog box is closed after loading of the selected MED \r
- file. When unchecked, it allows loading other MED files. </span></p></li>\r
-</ul>\r
-\r
-<p class="whs7"> </p>\r
-\r
-<p class="whs8">Representation Preferences</p>\r
-\r
-<p class="whs8"> </p>\r
-\r
-<p class="whs6"><img src="pics/pref33.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs12"></p>\r
-\r
-<p class="whs6"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Representation properties \r
- - <span style="font-weight: normal;">these checkboxes allow to choose \r
- the default representation type for each field presentation.</span><span \r
- style="margin-left: 40px; text-align: justify;"> </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Use \r
- Shading - <span style="font-weight: normal;">when this</span> <span style="font-weight: normal;">option \r
- is checked, the objects will be displayed with shading.</span></p></li>\r
-</ul>\r
-\r
-<p class="whs6"> </p>\r
-\r
-<p class="whs6"> </p>\r
-\r
-<p class="whs6">Gauss Points Preferences</p>\r
-\r
-<p class="whs13"> </p>\r
-\r
-<p class="whs6"><img src="pics/pref34.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs13"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Primitive - <span style="font-weight: normal;">this \r
- menu allows user to choose the graphic primitive to use to present the \r
- results at Gauss points in the viewer.</span><span style="margin-left: 40px; text-align: justify;"> \r
- </span></p></li>\r
- \r
- <ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs14">Primitive type \r
- - <span style="font-weight: normal;">provides choice between </span>Point \r
- sprites<span style="font-weight: normal;">, </span>Open GL points<span \r
- style="font-weight: normal;"> and </span>Geometrical Spheres<span style="font-weight: normal;">.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs15"><span style="font-weight: bold;"><B>Maximum \r
- Size</B></span> <span style="font-weight: bold;"><B>(Clamp)</B></span> - defines \r
- the maximum size of sprite points ranging from 1 to 512. By default the \r
- value is set to 256 pixels. </p></li>\r
- \r
- <li class=kadov-p><p class="whs14">Main Texture - \r
- <span style="font-weight: normal;">path \r
- to the </span>Main Texture<span style="font-weight: normal;"> (16x16 pixels) \r
- which defines the shape of the point sprite used for rendering.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs10"><span \r
- style="font-weight: bold;"><B>Alpha Channel Texture (16*16) -</B></span> path \r
- to the <span style="font-weight: bold;"><B>Alpha Channel Texture</B></span> which \r
- defines the transparency of the point sprite.</p></li>\r
- \r
- <li class=kadov-p><p class="whs14">Alpha Channel Threshold \r
- - <span style="font-weight: normal;">defines the level of transparency \r
- ranging from 0 to 1.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs14">Geometrical Sphere \r
- Resolution - <span style="font-weight: normal;">defines the number of \r
- faces of</span> Geometry Spheres.</p></li>\r
- \r
- <li class=kadov-p><p class="whs14">Notify when number \r
- of faces exceeds -<span style="font-weight: normal;"> limitation of the \r
- number of faces;</span> <span style="font-weight: normal;">the user will \r
- be warned if it exceeds the given value.</span></p></li>\r
- </ul>\r
-</ul>\r
-\r
-<p class="whs13"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Size - in this menu \r
- you can define</p></li>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs16">Range value for min \r
- and max size - <span style="font-weight: normal;">these two parameters \r
- will be respectively multiplied by a reference length (average size of \r
- cells of the mesh) to define the range for minimum and maximum size of \r
- a point during rendering (at magnification = 100%). Default values are:</span></p></li>\r
- \r
- <ol type="disc" class="whs17">\r
- \r
- <ul type="disc" class="whs3">\r
- \r
- <li style="list-style: circle;"\r
- type=circle\r
- class=kadov-p><p><span style="font-weight: bold;"><B>Rainbow</B></span> \r
- scale: <span style="font-weight: bold;"><B>min = 10%</B></span>, <span style="font-weight: bold;"><B>max \r
- = 33%</B></span></p></li>\r
- \r
- <ul type="square" class="whs18">\r
- \r
- <li class=kadov-p><p class="whs19">Min size \r
- is associated to the smallest real value (including negative values).</p></li>\r
- \r
- <li class=kadov-p><p class="whs19">Max size \r
- is associated to the largest real value.</p></li>\r
- </ul>\r
- \r
- <li style="list-style: circle;"\r
- type=circle\r
- class=kadov-p><p><span style="font-weight: bold;"><B>Bicolor</B></span> \r
- scale: <span style="font-weight: bold;"><B>min = 0</B></span> (not editable), \r
- <span style="font-weight: bold;"><B>max = 33%</B></span></p></li>\r
- \r
- <ul type="square" class="whs18">\r
- \r
- <li class=kadov-p><p class="whs19">Null size \r
- is associated to the 0 scalar value.</p></li>\r
- \r
- <li class=kadov-p><p class="whs19">Max size \r
- is associated to the largest absolute value.</p></li>\r
- </ul>\r
- </ul>\r
- </ol>\r
-</ul>\r
-\r
-<p class="whs20">Both values are dynamically updated by the \r
- system according to the selected scalar bar. In the case of a <span style="font-weight: bold;"><B>Bicolor</B></span> \r
- scale, the minimum value is set to 0 in the dialog and the control is \r
- disabled.</p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs11"><span style="font-weight: bold;"><B>Magnification \r
- (%)</B></span> corresponds to the change of size of results at Gauss point \r
- primitives in 2D space. Acceptable values range from 0 to N; 100% means \r
- no magnification, 50% means half of its size, 200% mean twice its size \r
- and so forth. By default this value is set to 100%.</p></li>\r
- \r
- <li class=kadov-p><p class="whs11"><span style="font-weight: bold;"><B>+/- \r
- Ratio</B></span> corresponds to the number by which the magnification will \r
- be respectively multiplied or divided at edition, ranging from 0.01 to \r
- 10. By default this value is set to 2.</p></li>\r
-</ul>\r
-\r
-<p class="whs1"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Geometry </p></li>\r
- \r
- <li class=kadov-p><p class="whs11"><span style="font-weight: bold;"><B>Size \r
- of points (%) </B></span>defines a value that will be multiplied by a reference \r
- length (representative of the average size of cells of the mesh) to define \r
- the size of points during rendering (at magnification = 100%). Default \r
- values 10%.</p></li>\r
- \r
- <li class=kadov-p><p class="whs13">Background \r
- Color - <span style="font-weight: normal;"> allows \r
- to select the color of points used for presentations. Click on the colored \r
- line to access to the </span><a href="select_color_and_font.htm">Select \r
- Color</a><span style="font-weight: normal;"> dialog box. </span></p></li>\r
-</ul>\r
-\r
-<p class="whs14"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Gauss Points Scalar \r
- Bar</p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Active \r
- Bar - <span style="font-weight: normal;">this option allows to choose</span> \r
- Local<span style="font-weight: normal;"> or</span> Global <span style="font-weight: normal;">Bar \r
- as active.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Display \r
- Global Bar - <span style="font-weight: normal;">this option allows to \r
- visualize or to hide the Global Bar.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Scalar \r
- Bar Mode - <span style="font-weight: normal;">this option allows to choose</span> \r
- <span style="font-weight: normal;">between</span> Bicolor <span style="font-weight: normal;">and</span> \r
- Rainbow <span style="font-weight: normal;">Scalar Bar Mode.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs7">Spacing \r
- - <span style="font-weight: normal;">allows to define Spacing from 0.01 \r
- to 1.</span></p></li>\r
-</ul>\r
-\r
-<p class="whs14"> </p>\r
-\r
-<p class="whs6">Inside <span style="font-weight: normal;">and</span> \r
- Outside Cursor Preferences<span style="font-weight: normal;"> allow to \r
- set</span> Primitives, Size<span style="font-weight: normal;"> and</span> \r
- Magnification<span style="font-weight: normal;"> for the respective zones.</span> \r
- </p>\r
-\r
-<p class="whs6"> </p>\r
-\r
-<p class="whs21">Picking Preferences</p>\r
-\r
-<p class="whs21"> </p>\r
-\r
-<p class="whs21"><img src="pics/pref37.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs5"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Cursor</B></span> \r
- - allows to adjust the Size of the cursor used for Picking (ranging from \r
- 0.1 to 1), the Height of the pyramids (ranging from 0 to 10) and the Selection \r
- cursor color. </p></li>\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Tolerance</B></span> \r
- - defines at which distance of the cursor from the point it becomes selected \r
- (ranges from 0.001 to 10). </p></li>\r
- \r
- <li class=kadov-p><p><span style="font-weight: bold;"><B>Information window \r
- -</B></span> allows to define the <span style="font-weight: bold;"><B>Transparency</B></span> \r
- (from 0% = opaque to 100% = transparent) and <span style="font-weight: bold;"><B>Position</B></span> \r
- of the window, which can be: </p></li>\r
- \r
- <li class=kadov-p><p class="whs11"><span style="font-weight: bold;"><B>Centred \r
- below the point</B></span>, or</p></li>\r
- \r
- <li class=kadov-p><p class="whs11">located at <span style="font-weight: bold;"><B>Top-left \r
- corner of the 3D view</B></span></p></li>\r
- \r
- <li class=kadov-p><p class="whs8">Movement \r
- of the Camera <span style="font-weight: normal;">can also be define by \r
- the user. </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs11"><span style="font-weight: bold;"><B>Zoom \r
- at first selected point -</B></span> This value is used to define the focal \r
- distance at the first selected point (at the end of the movement of the \r
- camera). This value is a ratio that will be multiplied by the current \r
- zoom value.</p></li>\r
- \r
- <li class=kadov-p><p class="whs9">Number \r
- of steps between two positions - <span style="font-weight: normal;">defines \r
- the smoothness of camera movement at selection by the number of iterations. \r
- If set to 1 the camera is zoomed and centered at the point momentarily. \r
- Greater numbers mean very slow camera movement.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs6">Display \r
- parent mesh element - <span style="font-weight: normal;">allows to visualize \r
- or hide the patent mesh element of the selected gauss point.</span> </p></li>\r
-</ul>\r
-\r
-<p class="whs16"> </p>\r
-\r
-<p class="whs21">Navigation Preferences</p>\r
-\r
-<p class="whs16"> </p>\r
-\r
-<p class="whs21"><img src="pics/pref38.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs22"> </p>\r
-\r
-<p class="whs13"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Mouse</p></li>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs16">Mouse Behaviour - <span \r
- style="font-weight: normal;">this option allows to choose one of the modes \r
- of work with mouse in Gauss Viewer. </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs23">Salome Standard Controls \r
- - <span style="font-weight: normal;">allows to manipulate objects in the \r
- viewer with the mouse and locked Ctrl button: increase or decrease the \r
- zoom ratio with the left mouse button, translate object in any direction \r
- with the central mouse button or rotate it with the right mouse button. \r
- </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs23">Keyboard Free - <span \r
- style="font-weight: normal;">allows to manipulate objects in the viewer \r
- with the mouse without locking Ctrl button</span>. <span style="font-weight: normal;">In \r
- this case the operations are assigned to the buttons differently: rotation \r
- is made with the left button, translation with the right and zoom with \r
- both pressed in the same time.</span> </p></li>\r
-</ul>\r
-\r
-<p class="whs13"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Keyboard</p></li>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs16">[+]/[-] Speed Increment \r
- - <span style="font-weight: normal;">defines the number of units by which \r
- the speed increases or respectively decreases after pressing [+] or [-] \r
- keyboard buttons.</span></p></li>\r
-</ul>\r
-\r
-<p class="whs13"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Spacemouse -<span style="font-weight: normal;"> \r
- a mouse-like manipulator device specially designed for working with 3D \r
- presentations, objects, etc. You can reassign the actions listed below \r
- to any of its buttons. </span></p></li>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs16">Decrease Speed Increment \r
- - <span style="font-weight: normal;">decreases by 1 the speed increment \r
- used for the keyboard (same as [-] key).</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs16">Increase Speed Increment \r
- - <span style="font-weight: normal;">increase by 1 the speed increment \r
- used for the keyboard (same as [+] key).</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs16">Decrease Gauss Points \r
- Magnification - <span style="font-weight: normal;">divides the current \r
- magnification by the magnification ratio.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs16">Increase Gauss Points \r
- Magnification -<span style="font-weight: normal;"> multiplies the current \r
- magnification by the magnification ratio.</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs16">Dominant / combined \r
- switch -<span style="font-weight: normal;"> toggles button to switch to \r
- dominant or combined movements.</span></p></li>\r
-</ul>\r
-\r
-<p class="whs16"> </p>\r
-\r
-<p class="whs16"> </p>\r
-\r
-<p class="whs21">Recorder Preferences</p>\r
-\r
-<p class="whs21"> </p>\r
-\r
-<p class="whs21"><img src="pics/pref39.png" x-maintain-ratio="TRUE" width="752px" height="646px" border="0" class="img_whs2"></p>\r
-\r
-<p class="whs1"> </p>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs1">Settings</p></li>\r
-</ul>\r
-\r
-<ul type="disc" class="whs3">\r
- \r
- <li class=kadov-p><p class="whs16">Mode - <span style="font-weight: normal;">allows \r
- to choose from</span> <span style="font-weight: normal;">two recording \r
- regimes:</span></p></li>\r
- \r
- <li class=kadov-p><p class="whs23">Recording all displayed \r
- frames - <span style="font-weight: normal;">records exactly at the FPS \r
- rate specified by the user.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs23">Recording at a given \r
- FPS - <span style="font-weight: normal;">records only when the contents \r
- of the viewer change (some activity is performed). In \r
- the AVI file non-recorded images are substituted with the copies of the \r
- latest recorded image, which produces files with lower quality but requires \r
- less system resources.</span> </p></li>\r
- \r
- <li class=kadov-p><p class="whs16">FPS - <span style="font-weight: normal;">allows \r
- to define the FPS (frames per second) rate for the clip. Set greater value \r
- for better quality. </span></p></li>\r
- \r
- <li class=kadov-p><p class="whs16">Quality - <span style="font-weight: normal;">allows \r
- to set the quality of the clip in the interval between 0 and 100.</span> \r
- </p></li>\r
- \r
- <li class=kadov-p><p class="whs16">Progressive - <span \r
- style="font-weight: normal;">allows to record a progressive API file.</span> \r
- </p></li>\r
-</ul>\r
-\r
-<p class="whs16"> </p>\r
-\r
-<p class="whs16"> </p>\r
-\r
-<p> </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-[GlossaryTab]\r
-TabCaption=&Glossary\r
-TermCaption=&Term\r
-DefinitionCaption=&Definition For:\r
-\r
-[BrowseSequence]\r
-PreCaption=Previous\r
-PreTooltip=Previous Topic\r
-NextCaption=Next\r
-NextTooltip=Next Topic\r
-BlockTooltip=Select Block\r
-\r
-[Common]\r
-Contents=Contents\r
-Index=Index\r
-Search=Search\r
-Glossary=Glossary\r
-Logo/Author=Powered By\r
-Show=Show\r
-Hide=Hide\r
-SyncToc=SyncToc\r
-Prev=<<\r
-Next=>>\r
-Disabled Prev=<<\r
-Disabled Next=>>\r
-Seperate = |\r
-\r
-[WebHelp]\r
-Cancel=Cancel\r
-CantOpenURLorFile=Can't open URL or file\r
-CompletingContents=Completing Contents...\r
-Display=Display\r
-Term=Term:\r
-Definition=Definition:\r
-Done=Done\r
-Find=Find\r
-IndexInputPrompt=Type in the keyword to find:\r
-RelateTopicListPrompt=Click a topic, then click Display.\r
-LoadingData=Loading data, please wait...\r
-LoadingContents=Loading contents, please wait...\r
-LoadingContentsData=Loading, click here to cancel...\r
-LoadingFTS=Reading Search Data...\r
-LoadingIndex=Loading Index...\r
-LoadingTOCItem=Loading Table of Contents:\r
-Searching=Searching...\r
-FtsInputPrompt=Type in the word(s) to search for:\r
-TopicsFound=Topics Found\r
-BrowserLimitedMessage=Your browser does not support frames. We recommend that you update your browser to a version that supports frames.\r
-SuggestViewNoFrameMessage=To view the Help system without frames click on this\r
-SuggestViewNoFrameMsg2=hyperlink.\r
-TopicsNotFound=No Topics Found.\r
-CantSearch=Cannot search for that phrase.\r
-JS_alert_appletNotLoad = Unable to load applet. If you are using an old version of Netscape, the prefs.js file needs to be edited.\r
-JS_alert_colorlimitation=WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors.\r
-Blank_topic_text=This topic was created by WinHelp Project Conversion Wizard, and is the destination of a missing topic or broken hyperlink.\r
-JS_alert_ProjectLoadingFail=Could not load correctly, please click Refresh.\r
-JS_alert_cantLoadProject=Can't load project:\r
-JS_alert_ErrorInLoading=Error in Loading navigation component. Please regenerate WebHelp.\r
-IndexBtnText=Go\r
-FtsBtnText=Go\r
-ToolBarSearchBtnText=Go\r
-InTopicSearchBtnText=Go\r
-SearchLabel=Search\r
-SearchPrompt=- Search -\r
-PreTooltip=Previous Topic\r
-NextTooltip=Next Topic\r
-WebSearch=WebSearch\r
-SyncTocTooltip=Sync TOC\r
-Book=Book\r
-Page=Page\r
-Remote_Page=Remote Page\r
-Show_Navigation_Component=Show Navigation Component\r
-Hide_Navigation_Component=Hide Navigation Component\r
-nls_edit_label=Type in your question:\r
-nls_button_go_hint=Go Search\r
-nls_button_go_text=Go\r
-nls_body_instruction=Enter your question in the text box above, then click GO.\r
-nls_body_empty=Sorry, we were unable to find a good answer for your question.\r
-IndexSelectTopicTitle=Select a Topic\r
-IndexSelectTopicLabel=Select a topic, then click Display\r
-IndexSelectTopicError=Please select a topic.\r
-IndexAlphabetBookmarks=ABCDEFGHIJKLMNOPQRSTUVWXYZ\r
-MergeError1=The merged Help system\r
-MergeError2=is using a different language from the master Help system, which will cause the index and full-text search functionality to be disabled in the merged Help system.\r
-PoweredBy=Powered by\r
-GeneratedBy=Generated by\r
-Author=Author\r
-About=About\r
-Print=Print\r
-\r
-[PrintedDoc]\r
-TableOfContents=Table Of Contents\r
-TitlePage=Title Page\r
-ChapterFileNamePrefix=Chapter_\r
-TitlePageFileName=Chapter__Title_Page.doc\r
-CrossReferencePrefix=See\r
-GlossaryHeadingStyleName=Glossary Heading\r
-GlossaryTermStyleName=Glossary Term\r
-GlossaryDefinitionStyleName=Glossary Definition\r
-TitlePageTitleStyleName=Title Page Title\r
-TocPageTitleStyleName=Table of Contents Page Title\r
+++ /dev/null
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Select Color and Font</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-p.whs1 { margin-left:40px; }\r
-img_whs2 { border:none; width:492px; height:392px; float:none; border-style:none; }\r
-p.whs3 { font-family:'Times New Roman' , serif; }\r
-img_whs4 { border:none; width:510px; height:393px; float:none; border-style:none; }\r
-p.whs5 { font-family:'Times New Roman' , serif; font-weight:bold; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- addTocInfo("GUI module\nSetting Preferences\nSelect Color and Font");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- setRelStartPage("index.htm");\r
-\r
- autoSync(1);\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Select Color and Font</h1>\r
-\r
-<p><span style="font-weight: bold;"><B>Select Color</B></span> and <span style="font-weight: bold;"><B>Select \r
- Font</B></span> menus are used in many Preferences.</p>\r
-\r
-<h3>Select color</h3>\r
-\r
-<p class="whs1"><img src="pics/selectcolor.png" x-maintain-ratio="TRUE" width="492px" height="392px" border="0" class="img_whs2"></p>\r
-\r
-<p> </p>\r
-\r
-<p class="whs3">This menu allows \r
- to choose from either predefined <span style="font-weight: bold;"><B>Basic \r
- Colors </B></span>grouped in the upper left corner of the window or <span \r
- style="font-weight: bold;"><B>Custom Colors,</B></span> which you can define \r
- yourselves. To define a Custom Color, click on one of the Custom Color \r
- cells, select the color you need in the field of colors or by typing in \r
- its numeric parameters in the lower right corner of the window, then click \r
- <span style="font-weight: bold;"><B>Add to Custom Colors</B></span> button. The \r
- chosen color will be added to <span style="font-weight: bold;"><B>Custom \r
- Colors</B></span> table. </p>\r
-\r
-<h3>Select Font</h3>\r
-\r
-<p class="whs1"><img src="pics/selectfont.png" x-maintain-ratio="TRUE" width="510px" height="393px" border="0" class="img_whs4"></p>\r
-\r
-<p class="whs5"> </p>\r
-\r
-<p class="whs5"><span \r
- style="font-weight: normal;">This menu provides a wide choice of </span>Fonts, \r
- Font Styles <span style="font-weight: normal;">and</span> Sizes. <span \r
- style="font-weight: normal;">Characters can be underlined or struck out. \r
- It is possible to preview them in the</span> Sample <span style="font-weight: normal;">window.</span> \r
- <span style="font-family: 'Times New Roman', serif; font-weight: bold;"><B>Script</B></span><span \r
- style="font-family: 'Times New Roman', serif; font-weight: normal;"> dialog-box \r
- gives the possibility to use not only Latin and Latin Extended but also \r
- Cyrillic, Greek, Arabic, Runic and many other subsets. </span></p>\r
-\r
-<p class="whs5"> </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">\r
-\r
-<html>\r
-\r
-<head>\r
-<title>Setting Preferences</title>\r
-<meta http-equiv="content-type" content="text/html; charset=windows-1252">\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">\r
-<!--\r
-if (navigator.appName !="Netscape")\r
-{ document.write("<link rel='stylesheet' href='default.css'>");}\r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-img_whs1 { border:none; width:541px; height:309px; float:none; border-style:none; }\r
-p.whs2 { font-family:'Times New Roman' , serif; }\r
-p.whs3 { margin-left:0px; background-image:url('texture_horiz_ltbluebubbles.jpg'); text-align:justify; }\r
-img_whs4 { border:none; float:none; width:36px; height:38px; border-style:none; }\r
-p.whs5 { font-style:italic; color:#ff0000; margin-left:40px; text-align:justify; }\r
--->\r
-</style><script type="text/javascript" language="JavaScript">\r
-<!--\r
-if ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))\r
-{\r
- var strNSS = "<style type='text/css'>";\r
- strNSS += "p.whs3 {margin-left:1pt; }";\r
- strNSS +="</style>";\r
- document.write(strNSS);\r
-}\r
-//-->\r
-</script>\r
-<script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">\r
-<!--\r
-function reDo() {\r
- if (innerWidth != origWidth || innerHeight != origHeight)\r
- location.reload();\r
-}\r
-if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
-}\r
-onerror = null; \r
-//-->\r
-</script>\r
-<style type="text/css">\r
-<!--\r
-div.WebHelpPopupMenu { position:absolute; left:0px; top:0px; z-index:4; visibility:hidden; }\r
-p.WebHelpNavBar { text-align:right; }\r
--->\r
-</style><script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>\r
-<script type="text/javascript" language="javascript" src="whver.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>\r
-<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- addTocInfo("GUI module\nSetting Preferences\nSetting Preferences");\r
-addButton("show",BTN_IMG,"Show","","","","",0,0,"whd_show0.gif","whd_show2.gif","whd_show1.gif");\r
-addButton("hide",BTN_IMG,"Hide","","","","",0,0,"whd_hide0.gif","whd_hide2.gif","whd_hide1.gif");\r
-\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- setRelStartPage("index.htm");\r
-\r
- autoSync(1);\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body><script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(4);\r
-//-->\r
-</script>\r
-<h1>Setting Preferences</h1>\r
-\r
-<p>In <span style="font-weight: bold;"><B>SALOME </B></span>you can set preferences \r
- for each module in the common editor of preferences. SALOME preferences \r
- refer to the whole GUI SALOME session, other preferences are module-specific \r
- and are accessible only after you load a respective module. </p>\r
-\r
-<p>When you change settings (click <span style="font-weight: bold;"><B>OK</B></span> \r
- or <span style="font-weight: bold;"><B>Apply</B></span> button) each module receives \r
- the notification about what preferences are changed. You can also click \r
- <span style="font-weight: bold;"><B>Defaults</B></span> button to restore default \r
- preferences or <span style="font-weight: bold;"><B>Close</B></span> button to \r
- quit the menu without any changes. </p>\r
-\r
-<p><span style="font-weight: bold;"><B>Import</B></span> button allows to load \r
- a user file containing preferences from your home directory through a \r
- standard Import dialog box.</p>\r
-\r
-<p> </p>\r
-\r
-<p><img src="pics/import.png" x-maintain-ratio="TRUE" width="541px" height="309px" border="0" class="img_whs1"></p>\r
-\r
-<p> </p>\r
-\r
-<p>This file has no extension and by default starts with .SalomeApprc. \r
- followed by Salome version number. There exists one file for each Salome \r
- version in use.</p>\r
-\r
-<p>The preferences, set during the current study session, are automatically \r
- saved in this file at the end of the session. Next time you launch SALOME \r
- application, these preferences will be restored.</p>\r
-\r
-<p class="whs2"> </p>\r
-\r
-<p class="whs3"><img src="note1.gif" x-maintain-ratio="TRUE" width="36px" height="38px" border="0" class="img_whs4">The preferences you set \r
- will be default preferences for all <span style="font-weight: bold;"><B>new</B></span> \r
- objects, but they are not retroactive and do not automatically apply to \r
- the existing objects. </p>\r
-\r
-<p class="whs5"> </p>\r
-\r
-<p class="whs2"> </p>\r
-\r
-<p class="whs2"> </p>\r
-\r
-<p class="whs2"> </p>\r
-\r
-<script type="text/javascript" language="javascript1.2">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(0);\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+</head>
+<body>
+<hr style="width: 100%; height: 2px;">
+<div style="text-align: center;">Copyright © 2003-2007 CEA, EDF<br>
+</div>
+</body>
+</html>
--- /dev/null
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>$title</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+</head>
+<hr>
+<center>
+SALOME documentation central
+</center>
+<hr>
+++ /dev/null
-<html>\r
-<script language="javascript1.2" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-if(gbIE4||gbNav61)\r
-{\r
- document.write("<body></body>");\r
-}\r
-else\r
-{\r
- document.write("<frameset rows=\"100%,*\"><frame name=\"data_frm\" src=\"about:blank\"><frame name=\"dumb_frm\" src=\"about:blank\"></frameset>");\r
-}\r
-var gCSHFileName="whcshdata.htm";\r
-\r
-var gHomePage="index.htm";\r
-var gaProj=new Array();\r
-gaProj[0]=new Object();\r
-gaProj[0].sProjPath=_replaceSlash(_getPath(document.location.href));\r
-gaProj[0].nLoadState=0;\r
-var gCurrent=0;\r
-\r
-var gsTopicURL="";\r
-var gnCurProj=0;\r
-var gnCommand=-1;\r
-var CMD_SHOWTOC=1;\r
-var CMD_SHOWINDEX=2;\r
-var CMD_SHOWSEARCH=3;\r
-var CMD_SHOWGLOSSARY=4;\r
-var CMD_SHOWNONE=0;\r
-\r
-var RHWO_LOCATION=0x01; /*need location bar?*/\r
-var RHWO_MENUBAR=0x02; /*need menubar?*/ \r
-var RHWO_RESIZABLE=0x04; /*resizable window?*/\r
-var RHWO_TOOLBAR=0x08; /*need toolbar?*/\r
-var RHWO_STATUS=0x10; /*need statusbar?*/\r
-var RHWO_SCROLLBARS=0x20; /*need scrollbars?*/\r
-\r
-var gsStr="";\r
-var gnId=-1;\r
-var gsWindow="";\r
-var gsJava="false";\r
-var gbUseStr=false;\r
-var gbURLReady=false;\r
-var goWnd=new Object();\r
-goWnd.sName="whCshDefault";\r
-goWnd.nBOptions=RHWO_RESIZABLE|RHWO_SCROLLBARS;\r
-goWnd.sBLeft="49%";\r
-goWnd.sBTop="0";\r
-goWnd.sBWidth="49%";\r
-goWnd.sBHeight="49%";\r
-goWnd.nPanes=1;\r
-var goFullWnd=new Object();\r
-goFullWnd.sName="whDefault";\r
-goFullWnd.nBOptions=RHWO_RESIZABLE|RHWO_SCROLLBARS;\r
-goFullWnd.sBLeft="20%";\r
-goFullWnd.sBTop="0";\r
-goFullWnd.sBWidth="79%";\r
-goFullWnd.sBHeight="79%";\r
-goFullWnd.nPanes=2;\r
-\r
-var goNewWnd=null;\r
-var gbLoadWnd=false;\r
-var gsURL="";\r
-\r
-function showCSH(sParam)\r
-{\r
- //id=\r
- //str=\r
- //url=\r
- //cmd=\r
- //with the format #<a=xxx>>b=xxx>>c=xxx...\r
- parseParam(sParam);\r
- SwitchURL();\r
-}\r
-\r
-function IsWndReady()\r
-{\r
- if(gaProj[0].nLoadState==0)\r
- {\r
- var sCshFile=_getFullPath(gaProj[0].sProjPath,gCSHFileName);\r
- gaProj[0].nLoadState=1;\r
- setTimeout("loadFail("+0+");",3000);\r
- loadDataCsh(sCshFile);\r
- gbLoadWnd=true;\r
- return false;\r
- }\r
- else\r
- return true;\r
-}\r
-\r
-function SwitchURL()\r
-{\r
- if(gbURLReady)\r
- {\r
- var sURL="";\r
- var oWnd=null;\r
- if(gsTopicURL)\r
- {\r
- sURL=_getPath(document.location.href)+gHomePage+"#"+gsTopicURL;\r
- oWnd=goWnd;\r
- }\r
- else\r
- {\r
- if(gnCommand!=-1)\r
- sURL=_getPath(document.location.href)+gHomePage+"#>>cmd="+gnCommand;\r
- else\r
- sURL=_getPath(document.location.href)+gHomePage;\r
- oWnd=goFullWnd;\r
- }\r
- if(gsWindow)\r
- {\r
- if(!IsWndReady())\r
- return false;\r
- if(gaProj[gnCurProj].aWnd)\r
- {\r
- var aWnd=gaProj[gnCurProj].aWnd;\r
- var bFound=false;\r
- for(var i=0;i<aWnd.length;i++)\r
- {\r
- if(aWnd[i].sName.toLowerCase()==gsWindow.toLowerCase())\r
- {\r
- oWnd=aWnd[i];\r
- bFound=true;\r
- break;\r
- }\r
- }\r
- if(!bFound&&gnCurProj!=0)\r
- {\r
- var aWnd=gaProj[0].aWnd;\r
- for(var j=0;j<aWnd.length;j++)\r
- {\r
- if(aWnd[j].sName.toLowerCase()==gsWindow.toLowerCase())\r
- {\r
- oWnd=aWnd[j];\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- if(sURL&&oWnd)\r
- {\r
- strURLOpt="";\r
- if(oWnd.sCaption)\r
- strURLOpt+=">>cap="+oWnd.sCaption;\r
- if(oWnd.nPanes==1)\r
- strURLOpt+=">>pan="+oWnd.nPanes;\r
- else if(oWnd.nPanes==2)\r
- {\r
- strURLOpt+=">>pan="+oWnd.nPanes;\r
- if(oWnd.nPOptions)\r
- strURLOpt+=">>pot="+oWnd.nPOptions;\r
- if(oWnd.sPButtons)\r
- strURLOpt+=">>pbs="+oWnd.sPButtons;\r
- if(oWnd.sPDefBtn)\r
- strURLOpt+=">>pdb="+oWnd.sPDefBtn;\r
- }\r
- if(strURLOpt)\r
- {\r
- if(sURL.indexOf("#")==-1)\r
- sURL+="#";\r
- sURL+=strURLOpt;\r
- }\r
- if(gsJava=="false")\r
- {\r
- var strOpt=getBrowserOptionString(oWnd);\r
- var sNewName=convertWindowName(oWnd.sName);\r
- if(gbNav4)\r
- {\r
- if (gbNav6)\r
- {\r
- gsURL = sURL;\r
- goNewWnd=window.open("about:blank",sNewName,strOpt);\r
- setTimeout("postWindowNSOpen();",100);\r
- }\r
- else\r
- {\r
- window.open("about:blank",sNewName,strOpt);\r
- var oNewWnd=window.open(sURL,sNewName);\r
- window.close();\r
- oNewWnd.focus();\r
- }\r
- }\r
- else\r
- {\r
- if(gbIE5)\r
- {\r
- window.open("about:blank",sNewName,strOpt);\r
- goNewWnd=window.open(sURL,sNewName);\r
- }\r
- else\r
- {\r
- gsURL = sURL; // IE4 had hard time to handle bookmark.\r
- goNewWnd=window.open("about:blank",sNewName,strOpt);\r
- }\r
- setTimeout("postWindowOpen();",100);\r
- }\r
- }\r
- else\r
- document.location=sURL;\r
- }\r
- }\r
-}\r
-\r
-function convertWindowName(strName)\r
-{\r
- var strNewName = strName;\r
- var strResultName = "";\r
- var re=new RegExp("_","g");\r
- strNewName = strName.replace(re,"__");\r
- for (var i=0;i<strNewName.length;i++)\r
- if (!(strNewName[i] == '_' ||\r
- (strNewName[i] <= '9' && strNewName[i] >= '0') ||\r
- (strNewName[i] <= 'z' && strNewName[i] >= 'a') ||\r
- (strNewName[i] <= 'Z' && strNewName[i] >= 'A')))\r
- {\r
- strResultName += "_" + strNewName.charCodeAt(i);\r
- }\r
- else\r
- strResultName += strNewName[i];\r
- return strResultName;\r
-}\r
-\r
-function postWindowNSOpen()\r
-{\r
- if(goNewWnd)\r
- {\r
- if (gsURL)\r
- goNewWnd.document.location.href=gsURL;\r
- window.close();\r
- goNewWnd.focus();\r
- }\r
-}\r
-\r
-function postWindowOpen()\r
-{\r
- if(goNewWnd)\r
- {\r
- if (gsURL&&!gbIE5&&gbIE4)\r
- goNewWnd.document.location.href=gsURL;\r
- goNewWnd.focus();\r
- }\r
-}\r
-\r
-function parseParam(sParam)\r
-{\r
- if(sParam)\r
- {\r
- var nBPos=0;\r
- do\r
- {\r
- var nPos=sParam.indexOf(">>",nBPos);\r
- if(nPos!=-1)\r
- {\r
- if(nPos>0)\r
- {\r
- var sPart=sParam.substring(nBPos,nPos);\r
- parsePart(sPart);\r
- }\r
- nBPos=nPos+2;\r
- }\r
- else\r
- {\r
- var sPart=sParam.substring(nBPos);\r
- parsePart(sPart);\r
- break;\r
- }\r
- }while(nBPos<sParam.length);\r
- }\r
-}\r
-\r
-function parsePart(sPart)\r
-{\r
- if(sPart.toLowerCase().indexOf("id=")==0)\r
- {\r
- fetchURLById(sPart.substring(3));\r
- gbURLReady=false;\r
- }\r
- else if(sPart.toLowerCase().indexOf("str=")==0)\r
- {\r
- fetchURLByStr(sPart.substring(4));\r
- gbURLReady=false;\r
- }\r
- else if(sPart.toLowerCase().indexOf("url=")==0)\r
- {\r
- gsTopicURL=sPart.substring(4);\r
- gbURLReady=true;\r
- }\r
- else if(sPart.toLowerCase().indexOf("cmd=")==0)\r
- {\r
- var sCmd=sPart.substring(4);\r
- if(sCmd.toLowerCase()=="toc")\r
- {\r
- gnCommand=CMD_SHOWTOC;\r
- }\r
- else if(sCmd.toLowerCase()=="idx")\r
- {\r
- gnCommand=CMD_SHOWINDEX;\r
- }\r
- else if(sCmd.toLowerCase()=="fts")\r
- {\r
- gnCommand=CMD_SHOWSEARCH;\r
- }\r
- else if(sCmd.toLowerCase()=="glo")\r
- {\r
- gnCommand=CMD_SHOWGLOSSARY;\r
- }\r
- else if(sCmd.toLowerCase()=="none")\r
- {\r
- gnCommand=CMD_SHOWNONE;\r
- }\r
- gbURLReady=true;\r
- }\r
- else if(sPart.toLowerCase().indexOf("wnd=")==0)\r
- {\r
- gsWindow=_browserStringToText(sPart.substring(4));\r
- }\r
- else if(sPart.toLowerCase().indexOf("java=")==0)\r
- {\r
- gsJava=sPart.substring(5);\r
- }\r
-}\r
-\r
-function fetchURLById(sId)\r
-{\r
- var nId=parseInt(sId);\r
- gsTopicURL="";\r
- fetchURL("",nId,false);\r
-}\r
-\r
-function fetchURLByStr(sStr)\r
-{\r
- gsTopicURL="";\r
- fetchURL(sStr,0,true);\r
-}\r
-\r
-function fetchURL(sStr,nId,bUseStr)\r
-{\r
- var bNeedLoad=false;\r
- var bFound=false;\r
- for(var i=0;i<gaProj.length;i++)\r
- {\r
- if(gaProj[i].nLoadState==3)\r
- {\r
- if(gaProj[i].aCsh)\r
- {\r
- for(var j=0;j<gaProj[i].aCsh.length;j++)\r
- {\r
- var sTopicURL="";\r
- if(bUseStr)\r
- {\r
- if(gaProj[i].aCsh[j].strAliasId.toLowerCase()==sStr.toLowerCase())\r
- sTopicURL=gaProj[i].aCsh[j].strUrl;\r
- }\r
- else\r
- {\r
- if(gaProj[i].aCsh[j].nTopicNum==nId)\r
- sTopicURL=gaProj[i].aCsh[j].strUrl;\r
- }\r
- if(sTopicURL)\r
- {\r
- if(i!=0)\r
- {\r
- gnCurProj=i;\r
- if(gaProj[i].sProjPath.indexOf(gaProj[0].sProjPath)==0)\r
- {\r
- var sRelPath=gaProj[i].sProjPath.substring(gaProj[0].sProjPath.length);\r
- gsTopicURL=sRelPath+sTopicURL;\r
- }\r
- else\r
- gsTopicURL=gaProj[i].sProjPath+sTopicURL;\r
- }\r
- else\r
- gsTopicURL=sTopicURL;\r
- bFound=true;\r
- break;\r
- }\r
- }\r
- }\r
- \r
- }\r
- else if(gaProj[i].nLoadState==0)\r
- {\r
- gsStr=sStr;\r
- gnId=nId;\r
- gbUseStr=bUseStr;\r
- var sCshFile=_getFullPath(gaProj[i].sProjPath,gCSHFileName);\r
- gaProj[i].nLoadState=1;\r
- setTimeout("loadFail("+i+");",3000);\r
- loadDataCsh(sCshFile);\r
- bNeedLoad=true;\r
- }\r
- if(bFound||bNeedLoad)\r
- break;\r
- }\r
- if(!bNeedLoad)\r
- {\r
- gbURLReady=true;\r
- SwitchURL();\r
- }\r
-}\r
-\r
-function loadDataCsh(sFile)\r
-{\r
- if(gbIE4||gbNav61)\r
- loadData(sFile);\r
- else\r
- {\r
- window.frames[0].location=sFile;\r
- }\r
-}\r
-\r
-function loadFail(nProj)\r
-{\r
- if(gaProj[nProj].nLoadState==1)\r
- {\r
- gaProj[nProj].nLoadState=2;\r
- if(!gbLoadWnd)\r
- fetchURL(gsStr,gnId,gbUseStr);\r
- else\r
- SwitchURL();\r
- }\r
-}\r
-\r
-function putCshData(strProj,aCsh,aWnd,aRmtProj)\r
-{\r
- if(strProj)\r
- {\r
- strProj=_replaceSlash(strProj);\r
- if(strProj.lastIndexOf("/")!=strProj.length-1)\r
- strProj+="/";\r
- for(var i=0;i<gaProj.length;i++)\r
- {\r
- if(gaProj[i].sProjPath)\r
- {\r
- if(isSamePath(gaProj[i].sProjPath,strProj))\r
- {\r
- gaProj[i].nLoadState=3;\r
- gaProj[i].aCsh=aCsh;\r
- gaProj[i].aWnd=aWnd;\r
- break;\r
- }\r
- }\r
- }\r
- if(aRmtProj&&aRmtProj.length)\r
- {\r
- for(var j=0;j<aRmtProj.length;j++)\r
- {\r
- var strRPath=_getFullPath(strProj,aRmtProj[j]);\r
- var bFound=false;\r
- for (var k=0;k<gaProj.length;k++)\r
- {\r
- if(gaProj[k].sProjPath)\r
- {\r
- if(isSamePath(gaProj[k].sProjPath,strRPath))\r
- {\r
- bFound=true;\r
- break;\r
- }\r
- }\r
- }\r
- if(!bFound)\r
- {\r
- var len=gaProj.length;\r
- gaProj[len]=new Object();\r
- gaProj[len].sProjPath=strRPath;\r
- gaProj[len].nLoadState=0;\r
- }\r
- }\r
- }\r
- if(!gbLoadWnd)\r
- fetchURL(gsStr,gnId,gbUseStr);\r
- else\r
- SwitchURL();\r
- \r
- }\r
-}\r
-\r
-function isSamePath(strPath1,strPath2)\r
-{\r
- return strPath1.toLowerCase()==strPath2.toLowerCase();\r
-}\r
-\r
-function getRelHomePage(strLocation)\r
-{\r
- var strCurPPath=_getPath(strLocation);\r
- var strOriPPath=_getPath(getHomePage());\r
- var strRelPath=_getRelativeFileName(strOriPPath,strCurPPath);\r
- var strURL=getHomePage()+"#"+strRelPath;\r
- return strURL;\r
-}\r
-\r
-function getHomePage()\r
-{\r
- var strHomePage;\r
- var strTmp=location.toString();\r
- var nPos=strTmp.indexOf("#");\r
- if(nPos!=-1)\r
- {\r
- strHomePage=strTmp.substring(0,nPos);\r
- }\r
- else\r
- {\r
- strHomePage=strTmp;\r
- }\r
- return strHomePage;\r
-}\r
-\r
-function getBrowserOptionString(oWnd)\r
-{\r
- var strOpts="";\r
- if(oWnd.bUseDefault)\r
- return strOpts;\r
- if(oWnd.nBOptions&RHWO_LOCATION)\r
- strOpts+="location=yes";\r
- else\r
- strOpts+="location=no";\r
- if(oWnd.nBOptions&RHWO_TOOLBAR)\r
- strOpts+=",toolbar=yes"; \r
- else\r
- strOpts+=",toolbar=no"; \r
- if(oWnd.nBOptions&RHWO_MENUBAR)\r
- strOpts+=",menubar=yes"; \r
- else\r
- strOpts+=",menubar=no";\r
- if(oWnd.nBOptions&RHWO_STATUS)\r
- strOpts+=",status=yes"; \r
- else\r
- strOpts+=",status=no"; \r
- if(oWnd.nBOptions&RHWO_SCROLLBARS)\r
- strOpts+=",scrollbars=yes";\r
- else\r
- strOpts+=",scrollbars=no"; \r
- if(oWnd.nBOptions&RHWO_RESIZABLE)\r
- strOpts+=",resizable=yes";\r
- else\r
- strOpts+=",resizable=no";\r
- if(oWnd.sBTop)\r
- {\r
- var nTop=getSValue(oWnd.sBTop,screen.height);\r
- strOpts+=",top="+nTop;\r
- strOpts+=",screenY="+nTop;\r
- }\r
- if(oWnd.sBLeft)\r
- {\r
- var nLeft=getSValue(oWnd.sBLeft,screen.width);\r
- strOpts+=",left="+nLeft;\r
- strOpts+=",screenX="+nLeft;\r
- }\r
- if(oWnd.sBWidth)\r
- {\r
- var nWidth=getSValue(oWnd.sBWidth,screen.width);\r
- strOpts+=",width="+nWidth;\r
- strOpts+=",outerWidth="+nWidth;\r
- }\r
- if(oWnd.sBHeight)\r
- {\r
- var nHeight=getSValue(oWnd.sBHeight,screen.height);\r
- strOpts+=",height="+nHeight;\r
- strOpts+=",outerHeight="+nHeight;\r
- }\r
- return strOpts;\r
-}\r
-\r
-function getSValue(sValue,nLength)\r
-{\r
- var nValue=0;\r
- var nPos=sValue.indexOf("%");\r
- if(nPos!=-1)\r
- {\r
- if(nPos>0)\r
- {\r
- var nPart=parseInt(sValue.substring(0,nPos));\r
- nValue=nLength*nPart/100;\r
- }\r
- }\r
- else\r
- nValue=parseInt(sValue);\r
- return nValue;\r
-}\r
-\r
-\r
-window.onload=window_OnLoad;\r
-\r
-function window_OnLoad()\r
-{\r
- if(document.location.hash.length>0)\r
- {\r
- showCSH(document.location.hash.substring(1));\r
- }\r
-\r
- if(gsJava=="false")\r
- window.moveTo(screen.width,screen.height);\r
-}\r
-//-->\r
-</script>\r
-</html>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript1.2" src="whver.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="JavaScript">\r
-<!--\r
-var gaCsh=new Array();\r
-\r
-var gaWindow=new Array();\r
-\r
-var gaRmtProj=new Array();\r
-\r
-var gsProjPath=_getPath(document.location.href);\r
-\r
-function CshEntityItem(strAliasId,nTopicNum,strUrl)\r
-{\r
- this.strAliasId=strAliasId;\r
- this.nTopicNum=nTopicNum;\r
- this.strUrl=strUrl;\r
-}\r
-\r
-function CshWindow(sWName,bBUseDefault,nWBOptions,sWBLeft,sWBTop,sWBWidth,sWBHeight,sWCaption,nWPanes,nWPOptions,sWPButtons,sWPDefBtn)\r
-{\r
- this.sName=sWName;\r
- this.bUseDefault=bBUseDefault;\r
- if(!this.bUseDefault)\r
- {\r
- this.nBOptions=nWBOptions;\r
- this.sBLeft=sWBLeft;\r
- this.sBTop=sWBTop;\r
- this.sBWidth=sWBWidth;\r
- this.sBHeight=sWBHeight;\r
- }\r
- this.sCaption=sWCaption;\r
- this.nPanes=nWPanes;\r
- if(this.nPanes==2)\r
- {\r
- this.nPOptions=nWPOptions;\r
- this.sPButtons=sWPButtons;\r
- this.sPDefBtn=sWPDefBtn;\r
- }\r
-}\r
-\r
-function addRemoteProject(sPath)\r
-{\r
- if(sPath.length!=0)\r
- {\r
- if(sPath.lastIndexOf("/")!=sPath.length-1)\r
- sPath+="/";\r
- gaRmtProj[gaRmtProj.length]=sPath; \r
- }\r
-}\r
-\r
-//Set Context-sensitive help entity...\r
-function SetCsh(n,strAliasId,nTopicNum,strUrl)\r
-{\r
- gaCsh[n]=new CshEntityItem(strAliasId,nTopicNum,strUrl);\r
-}\r
-\r
-function addWindow(sWName,bBUseDefault,nWBOptions,sWBLeft,sWBTop,sWBWidth,sWBHeight,sWCaption,nWPanes,nWPOptions,sWPButtons,sWPDefBtn)\r
-{\r
- gaWindow[gaWindow.length]=new CshWindow(sWName,bBUseDefault,nWBOptions,sWBLeft,sWBTop,sWBWidth,sWBHeight,sWCaption,nWPanes,nWPOptions,sWPButtons,sWPDefBtn);\r
-}\r
-\r
-\r
-\r
-\r
-\r
-window.onload=window_OnLoad;\r
-\r
-function window_OnLoad()\r
-{\r
- if(parent&&parent!=this&&parent.putCshData)\r
- {\r
- parent.putCshData(gsProjPath,gaCsh,gaWindow,gaRmtProj);\r
- }\r
-}\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Navigator Pane</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body border=0 topmargin=0 bottommargin=0 rightmargin=0 leftmargin=0 scroll=no>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whphost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsNavReDirect="whgdata/whnvp30.htm";\r
-var gbReDirectThis=false;\r
- var bPreferXML = false;\r
- var strProjectFileXML = "whproj.xml";\r
- var strProjectFileHTM = "whproj.htm"; \r
-if(window.gbWhPHost)\r
-{\r
- addProject(bPreferXML, strProjectFileXML, strProjectFileHTM);\r
- addPane("toc","whtdhtml.htm");\r
- addPane("fts","whfdhtml.htm");\r
- addPane("glo","whgdhtml.htm");\r
- setShowPane("toc");\r
-\r
-}\r
-else\r
- document.location.reload();\r
-\r
-if (window.gbNav6)\r
-{\r
- var oMsg=new whMessage(WH_MSG_RELOADNS6,this, 1,null);\r
- SendMessage(oMsg);\r
-}\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>Navigation Pane</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-</head>\r
-<frameset rows="30,*" border="0" frameborder="0">\r
- <frame name="navtabs" title="tab selection frame" src="whd_tabs.htm" noresize frameborder="no" scrolling="no" border="0" marginheight="0" marginwidth="0" ></frame>\r
- <frame name="navpane" title="navigation frame" src="whd_dpns.htm" ></frame>\r
-</frameset>\r
-</html>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>navigation pane</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsInitPane="toc";\r
-var gsCurrentPane="";\r
-var gbLoading = "unknown";\r
-var gbTryTime = 0;\r
-var gbMaxTryTime = 6;\r
-var gbPassPhase0 = 0;\r
-var gbretried = 0;\r
-var gbmaxretry = 3;\r
-var gbretrytime = new Array();\r
-\r
-var origWidth = 0;\r
-var origHeight = 0;\r
-\r
-gbretrytime[0]= 5000;\r
-gbretrytime[1]= 30000;\r
-gbretrytime[2]= 60000;\r
-\r
-function addPane(sName, sFile)\r
-{\r
-}\r
-\r
-function setShowPane(sName)\r
-{\r
- gsInitPane=sName;\r
-}\r
-\r
- addPane("toc","whtdhtml.htm");\r
- addPane("fts","whfdhtml.htm");\r
- addPane("glo","whgdhtml.htm");\r
- setShowPane("toc");\r
-\r
-\r
-function window_unload()\r
-{\r
- UnRegisterListener2(this, WH_MSG_SHOWTOC);\r
- UnRegisterListener2(this, WH_MSG_SHOWIDX);\r
- UnRegisterListener2(this, WH_MSG_SHOWFTS);\r
- UnRegisterListener2(this, WH_MSG_SHOWGLO);\r
- UnRegisterListener2(this, WH_MSG_SYNCTOC);\r
- UnRegisterListener2(this, WH_MSG_SEARCHTHIS);\r
- UnRegisterListener2(this, WH_MSG_GETPANEINFO);\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- var bHidePane=false;\r
- var oMsg=new whMessage(WH_MSG_GETCMD,this,1,null);\r
- if (SendMessage(oMsg))\r
- {\r
- if(oMsg.oParam>0)\r
- {\r
- if(oMsg.oParam==1)\r
- gsInitPane="toc";\r
- else if(oMsg.oParam==2)\r
- gsInitPane="idx";\r
- else if(oMsg.oParam==3)\r
- gsInitPane="fts";\r
- else if(oMsg.oParam==4)\r
- gsInitPane="glo";\r
- }\r
- else if(oMsg.oParam==0)\r
- {\r
- bHidePane=true;\r
- }\r
- }\r
- if (bHidePane)\r
- {\r
- oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null)\r
- SendMessage(oMsg);\r
- }\r
- else if (gsInitPane == "toc")\r
- {\r
- oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null)\r
- SendMessage(oMsg); \r
- }\r
- else if (gsInitPane=="idx")\r
- {\r
- oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null)\r
- SendMessage(oMsg); \r
- }\r
- else if (gsInitPane=="fts")\r
- {\r
- oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)\r
- SendMessage(oMsg); \r
- }\r
- else if (gsInitPane=="glo")\r
- {\r
- oMsg=new whMessage(WH_MSG_SHOWGLO,this,1,null)\r
- SendMessage(oMsg); \r
- }\r
-}\r
-\r
-function CheckLoadingPhase0()\r
-{\r
- if (!gbPassPhase0) {\r
- setTimeout("CheckLoadingPhase0()", 1000);\r
- document.applets[0];\r
- gbPassPhase0 = 1;\r
- }\r
- else {\r
- CheckLoadingPhase1();\r
- }\r
-}\r
-\r
-function CheckLoadingPhase1()\r
-{\r
- if (gbNav4) {\r
- if ("unknown" == gbLoading && document.readystate < 4) {\r
- setTimeout("CheckLoadingPhase1()", 1000);\r
- }\r
- else if ("unknown" == gbLoading) {\r
- CheckLoadingPhase2();\r
- }\r
- }\r
-}\r
-\r
-function CheckLoadingPhase2()\r
-{\r
- if (gbNav4) {\r
- gbTryTime ++;\r
- if ("unknown" == gbLoading) {\r
- if (gbTryTime <= gbMaxTryTime )\r
- setTimeout("CheckLoadingPhase2()", 1000);\r
- else {\r
- if (gnVerMinor != 4.60) {\r
- alert("Unable to load applet. If you are using an old version of Netscape, the prefs.js file needs to be edited.");\r
- }\r
- } \r
- }\r
- }\r
-}\r
-\r
-function CheckAppletLoaded()\r
-{\r
- if (typeof(document.webhelp) == "undefined")\r
- {\r
- document.location.reload();\r
- if (gbretried < gbmaxretry)\r
- {\r
- gbretried ++;\r
- setTimeout("CheckAppletLoaded();", gbretrytime[gbretried]);\r
- }\r
- }\r
-}\r
-\r
-function reDo() \r
-{\r
- if (innerWidth != origWidth || innerHeight != origHeight) \r
- {\r
- //reloaded applet if nessary\r
- gbretried = 0;\r
-\r
- if (gnVerMinor == 4.60) \r
- {\r
- //reload the applet again.\r
- document.location.reload();\r
- gbretried ++;\r
- }\r
- setTimeout("CheckAppletLoaded();", gbretrytime[gbretried]);\r
- }\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- if (oMsg)\r
- { \r
- var nMsgId = oMsg.nMessageId;\r
- var WebHelpApplet = null;\r
- if (gbNav4)\r
- {\r
- WebHelpApplet = document.applets["WebHelp"];\r
- if (!WebHelpApplet.Command)\r
- document.location="whgdata/whnvp30.htm";\r
- }\r
- else\r
- WebHelpApplet = WebHelp;\r
-\r
- if(nMsgId==WH_MSG_GETPANEINFO)\r
- {\r
- oMsg.oParam=gsCurrentPane;\r
- return false;\r
- }\r
- else if (gbLoading!="unknown"||gbNav6)\r
- {\r
- if (nMsgId == WH_MSG_SHOWTOC)\r
- {\r
- gsCurrentPane="toc";\r
- WebHelpApplet .Command("Contents", null);\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "toc");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if (nMsgId == WH_MSG_SHOWIDX)\r
- {\r
- gsCurrentPane="idx";\r
- WebHelpApplet .Command("Index", null);\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "idx");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if (nMsgId == WH_MSG_SHOWFTS)\r
- {\r
- gsCurrentPane="fts";\r
- WebHelpApplet .Command("Search", null);\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if (nMsgId == WH_MSG_SHOWGLO)\r
- {\r
- gsCurrentPane="glo";\r
- WebHelpApplet .Command("Glossary", null);\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "glo");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if (nMsgId == WH_MSG_SYNCTOC)\r
- {\r
- gsCurrentPane="toc";\r
- var oTopicParam = oMsg.oParam;\r
- if (oTopicParam && oTopicParam.aPaths && oTopicParam.aPaths.length > 0 && oTopicParam.sPPath)\r
- {\r
- var sPPath = _browserStringToText(oTopicParam.sPPath);\r
- var sParam = "";\r
- for (var i = 0; i < oTopicParam.aPaths.length; i ++)\r
- {\r
- sParam += oTopicParam.aPaths[i] + "\r\r";\r
- }\r
- WebHelpApplet.Command("SyncToc", sPPath, sParam);\r
- }\r
- }\r
- else if(nMsgId==WH_MSG_SEARCHTHIS)\r
- {\r
- gsCurrentPane="fts";\r
- WebHelpApplet .Command("Search", oMsg.oParam);\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-function getInitTocInfo()\r
-{\r
- // send message ask for the first time sync toc info.\r
- var oParam = new Object();\r
- oParam.oTocInfo = null;\r
- var oMsg = new whMessage(WH_MSG_GETTOCPATHS, this, 1, oParam);\r
- if (SendMessage(oMsg ))\r
- {\r
- var oTopicParam = oMsg.oParam.oTocInfo;\r
- if (oTopicParam && oTopicParam.aPaths && oTopicParam.aPaths.length > 0 && oTopicParam.sPPath)\r
- {\r
- var sPPath = _browserStringToText(oTopicParam.sPPath);\r
- var sParam = "";\r
- for (var i = 0; i < oTopicParam.aPaths.length; i ++)\r
- {\r
- sParam += oTopicParam.aPaths[i] + "\r\r";\r
- }\r
- var WebHelpApplet;\r
- if (gbNav4)\r
- WebHelpApplet = document.applets["WebHelp"];\r
- else\r
- WebHelpApplet = WebHelp;\r
- WebHelpApplet.Command("SyncToc", sPPath, sParam);\r
- }\r
- }\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
- RegisterListener2(this, WH_MSG_SHOWTOC);\r
- RegisterListener2(this, WH_MSG_SHOWIDX);\r
- RegisterListener2(this, WH_MSG_SHOWFTS);\r
- RegisterListener2(this, WH_MSG_SHOWGLO);\r
- RegisterListener2(this, WH_MSG_SYNCTOC);\r
- RegisterListener2(this, WH_MSG_SEARCHTHIS);\r
- RegisterListener2(this, WH_MSG_GETPANEINFO);\r
-\r
- window.onunload = window_unload;\r
- window.onload=window_OnLoad;\r
- window.onerror = null;\r
- var gbWindows = ((gAgent.indexOf("win") != -1) || (gAgent.indexOf("16bit") != -1));\r
-\r
- if (gbNav4 && !gbNav6 && gbWindows) {\r
- setTimeout("CheckLoadingPhase0()", 1000);\r
- }\r
-\r
- if (gbNav4) \r
- {\r
- origWidth = innerWidth;\r
- origHeight = innerHeight;\r
- onresize = reDo;\r
- }\r
-}\r
-else\r
- document.location.reload();\r
-\r
-if (window.gbNav6)\r
-{\r
- var oMsg=new whMessage(WH_MSG_RELOADNS6,this, 1,null);\r
- SendMessage(oMsg);\r
-}\r
-\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" bgcolor="c0c0c0">\r
-<applet code=WebHelp.class name=WebHelp archive=webhelp.jar width=100% height=100% MAYSCRIPT hspace=0 vspace=0>\r
-<PARAM name=ProjectFile value=whproj.xml><PARAM name=ResourceFile value=whres.xml>\r
-<PARAM name=Frame value=bsscright>\r
-<PARAM name=cabbase value=webhelp.cab>\r
-</applet>\r
-</body>\r
-</html>\r
+++ /dev/null
-<HTML>\r
-<HEAD>\r
-<TITLE>WebHelp Tabs Frame in Navigation Pane</TITLE>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<!-- WebHelp version 5.10 -->\r
-</HEAD>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsBgColor="#c0c0c0"\r
-var gsBgImage="";\r
-var gnCurPane=0;\r
-var gsFirstPane="";\r
-var goTocFont=null;\r
-var goIdxFont=null;\r
-var goFtsFont=null;\r
-var goGloFont=null;\r
-var gPane=new Array();\r
-var gShowFirst=0;\r
-var gnTabType=0;\r
-\r
-function window_unload()\r
-{\r
- UnRegisterListener2(this,WH_MSG_SHOWTOC);\r
- UnRegisterListener2(this,WH_MSG_SHOWIDX);\r
- UnRegisterListener2(this,WH_MSG_SHOWFTS);\r
- UnRegisterListener2(this,WH_MSG_SHOWGLO);\r
-}\r
-\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- if(sType=="Toc") goTocFont=vFont;\r
- else if(sType=="Idx") goIdxFont=vFont;\r
- else if(sType=="Fts") goFtsFont=vFont;\r
- else if(sType=="Glo") goGloFont=vFont;\r
-}\r
-\r
-function TocWriteClassStyle()\r
-{\r
- var sStyle="<STYLE TYPE='text/css'>";\r
- sStyle+=".TextTabToc {"+getFontStyle(goTocFont)+"}";\r
- sStyle+=".TextTabIdx {"+getFontStyle(goIdxFont)+"}";\r
- sStyle+=".TextTabFts {"+getFontStyle(goFtsFont)+"}";\r
- sStyle+=".TextTabGlo {"+getFontStyle(goGloFont)+"}";\r
- sStyle+="A:hover {text-decoration:underline;}";\r
- sStyle+="</STYLE>";\r
- document.write(sStyle);\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- if(sBgColor!=null&&sBgColor.length>0)\r
- gsBgColor=sBgColor;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
- if(sBgImage!=null&&sBgImage.length>0)\r
- gsBgImage=sBgImage;\r
-}\r
-\r
-function selectToc()\r
-{\r
- var oMessage=new whMessage(WH_MSG_SHOWTOC,this,1,null);\r
- SendMessage(oMessage);\r
-}\r
-\r
-function selectIdx()\r
-{\r
- var oMessage=new whMessage(WH_MSG_SHOWIDX,this,1,null);\r
- SendMessage(oMessage);\r
-}\r
-function selectFts()\r
-{\r
- var oMessage=new whMessage(WH_MSG_SHOWFTS,this,1,null);\r
- SendMessage(oMessage);\r
-}\r
-\r
-function selectGlo()\r
-{\r
- var oMessage=new whMessage(WH_MSG_SHOWGLO,this,1,null);\r
- SendMessage(oMessage);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- if(oMsg)\r
- {\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_SHOWTOC)\r
- {\r
- setTimeout("showTabByName(\"toc\");",1);\r
- }\r
- else if(nMsgId==WH_MSG_SHOWIDX)\r
- {\r
- setTimeout("showTabByName(\"idx\");",1);\r
- }\r
- else if(nMsgId==WH_MSG_SHOWFTS)\r
- {\r
- setTimeout("showTabByName(\"fts\");",1);\r
- }\r
- else if(nMsgId==WH_MSG_SHOWGLO)\r
- {\r
- setTimeout("showTabByName(\"glo\");",1);\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-function showTabByName(sTabName)\r
-{\r
- for(var i=0;i<gPane.length;i++)\r
- {\r
- if(gPane[i]==sTabName)\r
- {\r
- showTab(i);\r
- break;\r
- }\r
- }\r
-}\r
-\r
-function showTab(n)\r
-{\r
- gnCurPane=n;\r
- if(gnTabType==0)\r
- {\r
- if(n<gPane.length)\r
- {\r
- if(document.images["TocTab"]&&document.images["TocTab"]!=null){\r
- if(gPane[n]=="toc")\r
- document.images["TocTab"].src=getBtnImage("toc",1);\r
- else\r
- document.images["TocTab"].src=getBtnImage("toc",0);\r
- }\r
- if(document.images["IndexTab"]&&document.images["IndexTab"]!=null){\r
- if(gPane[n]=="idx")\r
- document.images["IndexTab"].src=getBtnImage("idx",1);\r
- else\r
- document.images["IndexTab"].src=getBtnImage("idx",0);\r
- }\r
- if(document.images["FtsTab"]&&document.images["FtsTab"]!=null){\r
- if(gPane[n]=="fts")\r
- document.images["FtsTab"].src=getBtnImage("fts",1);\r
- else\r
- document.images["FtsTab"].src=getBtnImage("fts",0);\r
- }\r
- if(document.images["GloTab"]&&document.images["GloTab"]!=null){\r
- if(gPane[n]=="glo")\r
- document.images["GloTab"].src=getBtnImage("glo",1);\r
- else\r
- document.images["GloTab"].src=getBtnImage("glo",0);\r
- }\r
- }\r
- }\r
- else if(gnTabType==1)\r
- {\r
- }\r
- else if(gnTabType==2)\r
- {\r
- if(n<gPane.length)\r
- {\r
- if(document.images["tabSelection"]!=null)\r
- document.images["tabSelection"].src=getMapImage(gPane[n]);\r
- }\r
- }\r
-}\r
-\r
-function addPane(sName)\r
-{\r
- gPane[gPane.length]=sName;\r
-}\r
-\r
-function setShowPane(sName)\r
-{\r
- if(gsFirstPane!="")\r
- sName=gsFirstPane;\r
- for(var i=0;i<gPane.length;i++)\r
- {\r
- if(gPane[i]==sName)\r
- gShowFirst=i;\r
- }\r
-}\r
-\r
-function selectDefaultTab()\r
-{\r
- showTab(gShowFirst);\r
- if(document.body)\r
- {\r
- if(gsBgImage&&gsBgImage.length>0)\r
- {\r
- document.body.background=gsBgImage;\r
- }\r
- if(gsBgColor&&gsBgColor.length>0)\r
- {\r
- document.body.bgColor=gsBgColor;\r
- }\r
- }\r
-}\r
-\r
-function getTabsHTML()\r
-{\r
- var sHTML="";\r
- for(var i=0;i<gPane.length;i++)\r
- {\r
- if(gnTabType==0)\r
- sHTML+=getTabHTML(gPane[i]);\r
- else if(gnTabType==1)\r
- {\r
- if(sHTML.length>0)\r
- {\r
- sHTML+=getSeparator();\r
- }\r
- sHTML+=getTabHTMLText(gPane[i]);\r
- }\r
-\r
- }\r
- return sHTML;\r
-}\r
-\r
-function getSeparator()\r
-{\r
- var sSep="";\r
- \r
- return sSep;\r
-}\r
-\r
-function getTabHTML(sTabName)\r
-{\r
- if (sTabName == "toc")\r
- return "<a title=\"Contents\" href=\"javascript:void(0);\" onclick=\"selectToc();return false;\" onmouseover=\"mouseOverToc();\" onmouseout=\"mouseOutToc();\"><img name=\"TocTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
- else if (sTabName =="idx")\r
- return "<a title=\"Index\" href=\"javascript:void(0);\" onclick=\"selectIdx();return false;\" onmouseover=\"mouseOverIdx();\" onmouseout=\"mouseOutIdx();\"><img name=\"IndexTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
- else if (sTabName == "fts")\r
- return "<a title=\"Search\" href=\"javascript:void(0);\" onclick=\"selectFts();return false;\" onmouseover=\"mouseOverFts();\" onmouseout=\"mouseOutFts();\"><img name=\"FtsTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
- else if (sTabName == "glo")\r
- return "<a title=\"Glossary\" href=\"javascript:void(0);\" onclick=\"selectGlo();return false;\"onmouseover=\"mouseOverGlo();\" onmouseout=\"mouseOutGlo();\"><img name=\"GloTab\" src=\"" + getBtnImage(sTabName, 0) + "\" border=\"0\"></a>";\r
- return "";\r
-}\r
-\r
-function mouseOverToc()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "toc")\r
- {\r
- sImg = getBtnImage("toc", 3);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("toc", 2);\r
- }\r
- if (sImg.length > 0)\r
- document.images["TocTab"].src = sImg;\r
-}\r
-\r
-function mouseOverIdx()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "idx")\r
- {\r
- sImg = getBtnImage("idx", 3);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("idx", 2);\r
- }\r
- if (sImg.length > 0)\r
- document.images["IndexTab"].src = sImg;\r
-}\r
-\r
-function mouseOverFts()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "fts")\r
- {\r
- sImg = getBtnImage("fts", 3);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("fts", 2);\r
- }\r
- if (sImg.length > 0)\r
- document.images["FtsTab"].src = sImg;\r
-}\r
-\r
-function mouseOverGlo()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "glo")\r
- {\r
- sImg = getBtnImage("glo", 3);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("glo", 2);\r
- }\r
- if (sImg.length > 0)\r
- document.images["GloTab"].src = sImg;\r
-}\r
-\r
-function mouseOutToc()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "toc")\r
- {\r
- sImg = getBtnImage("toc", 1);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("toc", 0);\r
- }\r
- if (sImg.length > 0)\r
- document.images["TocTab"].src = sImg;\r
-}\r
-\r
-function mouseOutIdx()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "idx")\r
- {\r
- sImg = getBtnImage("idx", 1);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("idx", 0);\r
- }\r
- if (sImg.length > 0)\r
- document.images["IndexTab"].src = sImg;\r
-}\r
-\r
-function mouseOutFts()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "fts")\r
- {\r
- sImg = getBtnImage("fts", 1);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("fts", 0);\r
- }\r
- if (sImg.length > 0)\r
- document.images["FtsTab"].src = sImg;\r
-}\r
-\r
-function mouseOutGlo()\r
-{\r
- var sImg = "";\r
- if (gPane[gnCurPane] == "glo")\r
- {\r
- sImg = getBtnImage("glo", 1);\r
- }\r
- else\r
- {\r
- sImg = getBtnImage("glo", 0);\r
- }\r
- if (sImg.length > 0)\r
- document.images["GloTab"].src = sImg;\r
-}\r
-\r
-function getTabHTMLText(sTabName)\r
-{\r
- if (sTabName == "toc")\r
- return "<a class=\"TextTabToc\" href=\"javascript:void(0);\" onclick=\"selectToc();return false;\">Contents</a> ";\r
- else if (sTabName =="idx")\r
- return "<a class=\"TextTabIdx\" href=\"javascript:void(0);\" onclick=\"selectIdx();return false;\">Index</a> ";\r
- else if (sTabName == "fts")\r
- return "<a class=\"TextTabFts\" href=\"javascript:void(0);\" onclick=\"selectFts();return false;\">Search</a> ";\r
- else if (sTabName == "glo")\r
- return "<a class=\"TextTabGlo\" href=\"javascript:void(0);\" onclick=\"selectGlo();return false;\">Glossary</a> ";\r
- return "";\r
-}\r
-\r
-function getImageMap()\r
-{\r
- var sHTML = "<map name=\"tabSelectionMap\">";\r
- for (var i = 0; i < gPane.length; i ++)\r
- {\r
- sHTML += getMapArea(gPane[i]);\r
- }\r
- sHTML += "</map>";\r
- return sHTML;\r
-}\r
-\r
-function getMapArea(sTabName)\r
-{\r
- if (sTabName == "toc")\r
- return "<area title=\"Contents\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectToc();return false;\">";\r
- else if (sTabName =="idx")\r
- return "<area title=\"Index\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectIdx();return false;\">";\r
- else if (sTabName == "fts")\r
- return "<area title=\"Search\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectFts();return false;\">";\r
- else if (sTabName == "glo")\r
- return "<area title=\"Glossary\" shape=\"\" coords=\"\" href=\"javascript:void(0);\" onclick=\"selectGlo();return false;\">";\r
- return "";\r
-}\r
-\r
-function getBtnImage(sTabName, nStatus)\r
-{\r
- if (sTabName == "toc")\r
- {\r
- if (nStatus == 0)\r
- return "whd_tab2.gif";\r
- else if (nStatus == 1)\r
- return "whd_tab1.gif";\r
- else if (nStatus == 2)\r
- return "";\r
- else if (nStatus == 3)\r
- return "";\r
- }\r
- else if (sTabName =="idx")\r
- {\r
- if (nStatus == 0)\r
- return "whd_tab4.gif";\r
- else if (nStatus == 1)\r
- return "whd_tab3.gif";\r
- else if (nStatus == 2)\r
- return "";\r
- else if (nStatus == 3)\r
- return "";\r
- }\r
- else if (sTabName == "fts")\r
- {\r
- if (nStatus == 0)\r
- return "whd_tab6.gif";\r
- else if (nStatus == 1)\r
- return "whd_tab5.gif";\r
- else if (nStatus == 2)\r
- return "";\r
- else if (nStatus == 3)\r
- return "";\r
- }\r
- else if (sTabName == "glo")\r
- {\r
- if (nStatus == 0)\r
- return "whd_tab8.gif";\r
- else if (nStatus == 1)\r
- return "whd_tab7.gif";\r
- else if (nStatus == 2)\r
- return "";\r
- else if (nStatus == 3)\r
- return "";\r
- }\r
- return "";\r
-}\r
-\r
-function getMapImage(sTabName)\r
-{\r
- if (sTabName == "toc")\r
- return "";\r
- else if (sTabName =="idx")\r
- return "";\r
- else if (sTabName == "fts")\r
- return "";\r
- else if (sTabName == "glo")\r
- return "";\r
- return "";\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
- window.onload = selectDefaultTab;\r
- RegisterListener2(this, WH_MSG_SHOWTOC);\r
- RegisterListener2(this, WH_MSG_SHOWIDX);\r
- RegisterListener2(this, WH_MSG_SHOWFTS);\r
- RegisterListener2(this, WH_MSG_SHOWGLO);\r
- window.onunload = window_unload;\r
- goTocFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
- goIdxFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
- goFtsFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
- goGloFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
-\r
- if (navigator.currentNavPen)\r
- gsFirstPane = navigator.currentNavPen;\r
-\r
- setBackgroundcolor("");\r
- setBackground("whd_tab0.gif");\r
- \r
- \r
- \r
- \r
- addPane("toc","whtdhtml.htm");\r
- addPane("fts","whfdhtml.htm");\r
- addPane("glo","whgdhtml.htm");\r
- setShowPane("toc");\r
-\r
-\r
- gnTabType = 0; // 0 button. // 1 text. // 2 image mapping.\r
- TocWriteClassStyle();\r
- var sHTML = "<body scroll=\"no\" bgcolor=\"#c0c0c0\" background=\"whd_tab0.gif\" style=\"margin-top:0;margin-bottom:0;margin-left:0;margin-right:0\">";\r
- if (gPane.length > 0)\r
- {\r
- if (gnTabType == 0 || gnTabType == 1)\r
- {\r
- sHTML += "<table width=\"100%\">";\r
- sHTML += "<tr>";\r
- sHTML += "<td>";\r
- sHTML += "<nobr>";\r
- sHTML += getTabsHTML();\r
- sHTML += "</nobr></td></tr>";\r
- sHTML += " <tr><td height=\"2\"></td></tr>";\r
- sHTML += "</table>";\r
- }\r
- else if (gnTabType == 2)\r
- {\r
- sHTML += getImageMap();\r
- sHTML +="<img name=\"tabSelection\" src=\"" + getMapImage(gPane[0]) + "\" x-maintain-ratio=\"true\" usemap=\"#tabSelectionMap\"";\r
- if (gbIE)\r
- sHTML +=" style=\"border: none; width:px; height:px; float: none;\"";\r
- sHTML +=" width=\"\" height=\"\" border=\"0\">";\r
- }\r
- }\r
- sHTML += "</body>";\r
- document.write(sHTML);\r
-}\r
-else\r
- document.location.reload();\r
-\r
-if (window.gbNav6)\r
-{\r
- var oMsg=new whMessage(WH_MSG_RELOADNS6,this, 1,null);\r
- SendMessage(oMsg);\r
-}\r
-//-->\r
-</script>\r
-</HTML>
\ No newline at end of file
+++ /dev/null
-<?xml version='1.0' encoding='ISO-8859-1' ?>\r
-<topictemplate>\r
- <topic type="normal">\r
- <add tag="head" pos="endbefore" >\r
- <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_MESSAGE_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript\" src=\"";SF_VERSION_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_PROXY_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_UTILS_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_TOPIC_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.gbWhTopic)\r
-{\r
- if (window.setRelStartPage)\r
- {\r
- ";\r
- OutputInTopicNavBarDataToc("addTocInfo(\"%s\");\r\n");\r
- OutputInTopicNavBarDataBrowse("addAvenueInfo(\"%s\",\"%s\",\"%s\");\r\n");\r
- OutputInTopicNavBarDataButtons("addButton(\"%s\",%s, \"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",%d,%d);\r\n");\r
- "\r
- }\r
-\r
-\r
- if (window.setRelStartPage)\r
- {\r
- ";\r
- OutputInTopicNavBarDataHomePage("setRelStartPage(\"%s\");\r\n");\r
- OutputInTopicNavBarDataWebSearch.href("addSearchFormHref(\"%s\");\r\n");\r
- "\r
- autoSync(";WH_USER_OPTIONS.autosync_toc;");\r
- sendSyncInfo();\r
- sendAveInfoOut();\r
- }\r
-\r
-}\r
-else\r
- if (window.gbIE4)\r
- document.location.reload();\r
-//-->\r
-</script>\r
-"]]>\r
- </add>\r
- <add tag="body" pos="beginafter">\r
- <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(";WH_WEBSKIN.topic.bar.top.pos;");\r
-//-->\r
-</script>"]]> \r
- </add>\r
- <add tag="body" pos="endbefore">\r
- <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.writeIntopicBar)\r
- writeIntopicBar(";WH_WEBSKIN.topic.bar.bottom.pos;");\r
-//-->\r
-</script>";\r
-OutputInTopicNavBarDataWebSearch.form();]]> \r
- </add>\r
- </topic>\r
- <topic type="frameset">\r
- <add tag="head" pos="endbefore" >\r
- <![CDATA["<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_MESSAGE_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript\" src=\"";SF_VERSION_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_UTILS_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_FRAMESET_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\" src=\"";SF_TOPIC_JS;"\"></script>\r
-<script type=\"text/javascript\" language=\"javascript1.2\">\r
-<!--\r
-if (window.setRelStartPage)\r
-{\r
-";\r
- OutputInTopicNavBarDataHomePage("setRelStartPage(\"%s\");\r\n");\r
- OutputInTopicNavBarDataToc("addTocInfo(\"%s\");\r\n");\r
- OutputInTopicNavBarDataBrowse("addAvenueInfo(\"%s\",\"%s\",\"%s\");\r\n");\r
-"\r
-if (window.autoSync)\r
- autoSync(1);\r
-}\r
-//-->\r
-</script>\r
-"]]>\r
- </add>\r
- </topic>\r
-</topictemplate>\r
aTE("Introduction to SALOME","kernel/introduction_to_salome_pro.htm");\r
aTE("Navigating topics","kernel/navigating_topics.htm");\r
aTE("Opening studies","kernel/opening_studies.htm");\r
-aTE("Installation Wizard","kernel/readme.html");\r
+aTE("SALOME Installation Wizard Help","kernel/readme.html");\r
aTE("Running SALOME","kernel/running_salome_pro.htm");\r
aTE("SALOME desktop","kernel/salome_pro_desktop.htm");\r
aTE("Saving a study","kernel/saving_a_study.htm");\r
aTE("Using Object Browser","kernel/using_object_browser.htm");\r
aTE("Using Registry tool","kernel/using_registry.htm");\r
aTE("MESH preferences","mesh_preferences.htm");\r
+aTE("OCC 3D Viewer","occ_3d_viewer.htm");\r
aTE("Post-Pro Preferences","post-pro_preferences.htm");\r
aTE("Select Color and Font","select_color_and_font.htm");\r
aTE("Setting Preferences","setting_preferences.htm");\r
+aTE("VTK 3D Viewer","vtk_3d_viewer.htm");\r
\r
//-->\r
</script>\r
<!--\r
aWE("__version__",14);\r
aWE("_omnipymodul",14);\r
-aWE("0",6,14,2,24,16);\r
-aWE("001",24);\r
-aWE("01",24);\r
-aWE("1",5,14,24,15);\r
-aWE("10",14,24);\r
-aWE("100",24);\r
+aWE("_root_dir",14);\r
+aWE("_src_dir",14);\r
+aWE("0",6,2,25,16,14);\r
+aWE("001",25);\r
+aWE("01",25);\r
+aWE("1",5,25,15,14);\r
+aWE("10",25,14);\r
+aWE("100",25);\r
aWE("103100",14);\r
aWE("13",14);\r
-aWE("16",24);\r
-aWE("16x16",24);\r
-aWE("2",5,14,24,15);\r
-aWE("200",24);\r
+aWE("16",25);\r
+aWE("16x16",25);\r
+aWE("2",5,25,15,14);\r
+aWE("200",25);\r
aWE("23",14);\r
aWE("24",14);\r
-aWE("256",24);\r
-aWE("2d",6,10,2,24);\r
-aWE("3",6,14,2,15,16);\r
+aWE("256",25);\r
+aWE("2a2",14);\r
+aWE("2d",6,10,2,25);\r
+aWE("3",6,2,15,16,14);\r
aWE("31",14);\r
-aWE("33",24);\r
-aWE("3d",10,2,24,18);\r
+aWE("33",25);\r
+aWE("3d",10,2,24,25,14,18,28);\r
aWE("4",14);\r
aWE("5",14);\r
-aWE("50",24);\r
-aWE("51",14);\r
-aWE("512",24);\r
+aWE("50",25);\r
+aWE("512",25);\r
aWE("6",14);\r
aWE("7",14);\r
aWE("8",14);\r
aWE("9",14);\r
-aWE("abl",3,6,14,18);\r
+aWE("abl",3,6,24,14,18,28);\r
aWE("abort",14);\r
aWE("abov",8,14);\r
-aWE("abscissa",23,24);\r
-aWE("absolut",24);\r
+aWE("abscissa",23,25);\r
+aWE("absolut",25);\r
aWE("abstraction",5);\r
-aWE("acceptabl",24);\r
-aWE("acces",3,1,23,24,16,18,21);\r
-aWE("accessibl",10,26);\r
-aWE("accidental",14);\r
-aWE("accord",14,24,15,16);\r
+aWE("ac",14);\r
+aWE("acceptabl",25);\r
+aWE("acces",3,1,23,24,25,16,18,21,28);\r
+aWE("accessibl",10,27);\r
+aWE("accord",25,15,16,14);\r
aWE("account",14);\r
aWE("achiev",3);\r
aWE("acquaint",4);\r
-aWE("action",24);\r
-aWE("activ",5,6,24,16,17);\r
+aWE("action",25,14);\r
+aWE("activ",5,6,25,16,17);\r
aWE("activat",5,16,17);\r
-aWE("activity",24);\r
-aWE("actual",5);\r
-aWE("ad",0,25,19);\r
+aWE("activity",25);\r
+aWE("actual",5,14);\r
+aWE("ad",0,14,26,19);\r
aWE("adapt",3);\r
-aWE("add",14,15,16,25,18,19);\r
+aWE("add",15,16,14,26,18,19);\r
aWE("addition",5,14);\r
-aWE("additional",3,14,2,24,15,16,21);\r
-aWE("addres",24);\r
-aWE("adjust",24);\r
+aWE("additional",3,2,25,15,16,14,21);\r
+aWE("addres",25);\r
+aWE("adjust",25);\r
aWE("advanc",14,19);\r
aWE("affect",3);\r
-aWE("again",6,14,12,17);\r
-aWE("algorithm",3,14,11);\r
-aWE("allow",3,0,7,1,14,11,23,24,15,16,17,25,18,26,19,22);\r
+aWE("again",6,12,14,17);\r
+aWE("algorithm",3,11,14);\r
+aWE("allow",3,0,7,1,11,23,24,25,15,16,14,17,26,18,27,19,22,28);\r
aWE("almost",17);\r
-aWE("along",11,18);\r
+aWE("along",11,18,28);\r
aWE("alongsid",19);\r
-aWE("alpha",24);\r
+aWE("alpha",25);\r
aWE("already",14);\r
aWE("alway",11);\r
aWE("amount",14);\r
-aWE("animation",24);\r
-aWE("annoy",14);\r
+aWE("animation",25);\r
aWE("anoth",3,17);\r
-aWE("answ",14);\r
-aWE("any",3,4,6,8,14,11,12,24,15,16,17,26);\r
+aWE("any",3,4,6,1,8,11,12,25,15,16,14,17,27);\r
aWE("anyth",14);\r
-aWE("ap",26);\r
-aWE("api",0,24);\r
+aWE("ap",27);\r
+aWE("api",0,25);\r
aWE("appear",0,8,9,14,18,19,22);\r
aWE("appearanc",23);\r
aWE("applet",4);\r
-aWE("application",3,6,0,10,2,15,16,17,18,26,19);\r
-aWE("approach",14,11,16);\r
-aWE("appropriat",14,10);\r
+aWE("appli",1);\r
+aWE("application",3,6,0,10,2,15,16,14,17,18,27,19);\r
+aWE("approach",11,16,14);\r
+aWE("appropriat",10,14);\r
aWE("approximat",14);\r
-aWE("arabic",25);\r
+aWE("arabic",26);\r
aWE("architectur",3,0,10);\r
-aWE("area",6,16,18);\r
+aWE("area",6,24,16,18,28);\r
aWE("argument",14);\r
-aWE("arrang",24);\r
+aWE("around",24,28);\r
+aWE("arrang",25);\r
aWE("ascii",17,18);\r
-aWE("ask",14);\r
-aWE("assign",24);\r
-aWE("associat",13,24,21);\r
-aWE("attach",10);\r
-aWE("attribut",21);\r
+aWE("assign",25);\r
+aWE("associat",13,25,21);\r
+aWE("attach",10,14);\r
+aWE("attribut",14,21);\r
aWE("author",8,19);\r
-aWE("auto",14,18);\r
-aWE("automatic",23,18);\r
-aWE("automatical",0,14,23,13,24,15,16,17,26);\r
+aWE("auto",18);\r
+aWE("automatic",23,14,18);\r
+aWE("automatical",0,23,13,25,15,16,14,17,27);\r
aWE("availability",7);\r
-aWE("availabl",3,5,7,14,10);\r
-aWE("averag",24);\r
-aWE("avi",24);\r
+aWE("availabl",3,5,7,10,24,14,28);\r
+aWE("averag",25);\r
+aWE("avi",25);\r
aWE("avoid",0,14);\r
aWE("awar",14);\r
-aWE("awk",14);\r
-aWE("ax",18);\r
-aWE("axi",18);\r
+aWE("ax",24,18,28);\r
+aWE("axi",18,28);\r
aWE("b",14);\r
-aWE("back",14,23);\r
-aWE("background",24,18);\r
-aWE("bar",23,24,21);\r
-aWE("bas",3,10,2,17);\r
+aWE("back",23,14);\r
+aWE("background",25,18);\r
+aWE("bar",23,25,21);\r
+aWE("bas",3,10,2,24,14,17);\r
aWE("bash",14);\r
-aWE("basi",3);\r
-aWE("basic",3,14,11,16,25);\r
-aWE("batch",3,0,14,15);\r
-aWE("be",14);\r
-aWE("becom",6,24);\r
+aWE("basi",3,24,25);\r
+aWE("basic",3,11,16,14,26);\r
+aWE("batch",3,0,15,14);\r
+aWE("be",1,14);\r
+aWE("becom",6,25,14);\r
aWE("befor",14);\r
-aWE("begin",18,22);\r
+aWE("begin",14,18,22);\r
aWE("behav",3);\r
-aWE("behavior",10);\r
-aWE("behaviour",24);\r
-aWE("below",14,12,24);\r
-aWE("bet",24);\r
-aWE("bicolor",24);\r
-aWE("big",24);\r
-aWE("bin",14,15,19);\r
+aWE("behavior",10,14);\r
+aWE("behaviour",25);\r
+aWE("below",12,25,14);\r
+aWE("bet",25);\r
+aWE("bicolor",25);\r
+aWE("big",25);\r
+aWE("bin",15,14,19);\r
aWE("binari",14);\r
-aWE("binary",14,17);\r
+aWE("binary",17);\r
aWE("blu",14);\r
aWE("blur",3);\r
+aWE("bmp",24,28);\r
aWE("bold",14);\r
aWE("book",20);\r
aWE("boost",14);\r
aWE("boost_version",14);\r
aWE("boostdir",14);\r
aWE("border",23,16);\r
-aWE("both",2,23,24);\r
-aWE("bottom",10,23,24,18);\r
-aWE("box",0,1,8,14,23,13,24,17,25,18,26,19,22);\r
+aWE("both",2,23,25,14);\r
+aWE("bottom",10,23,25,14,18);\r
+aWE("bound",24,28);\r
+aWE("boundari",1);\r
+aWE("box",0,1,8,23,24,13,25,14,17,26,18,27,19,22,28);\r
aWE("bracket",14);\r
+aWE("break",14);\r
aWE("brep",10);\r
-aWE("brief",6,14,12);\r
+aWE("brief",6,12);\r
aWE("bring",2);\r
-aWE("brows",4,5,6,0,14,2,13,16,17,18,19,21);\r
-aWE("bug",14);\r
-aWE("build",14,24,19);\r
-aWE("built",14,11,24);\r
-aWE("button",14,2,12,13,24,17,25,18,26,19,22);\r
-aWE("c",3,14,15);\r
+aWE("brows",4,5,6,0,2,13,25,16,14,17,18,19,21);\r
+aWE("build",25,14,19);\r
+aWE("built",11,25,14);\r
+aWE("button",2,12,24,13,25,14,17,26,18,27,19,22,28);\r
+aWE("button_label",14);\r
+aWE("button_script",14);\r
+aWE("button_tooltip",14);\r
+aWE("c",3,15,14);\r
aWE("ca",10);\r
aWE("cad",10,11);\r
aWE("cal",3,0,14);\r
aWE("calculation",9,10,11);\r
aWE("call",14,17,19,22);\r
aWE("cam",3);\r
-aWE("camera",24);\r
+aWE("camera",25);\r
aWE("cancel",14);\r
aWE("capability",19);\r
aWE("caption",14);\r
-aWE("car",14,10);\r
+aWE("car",10);\r
aWE("careful",14);\r
aWE("carri",23);\r
aWE("carry",10);\r
-aWE("cas",3,8,14,11,24,16,17);\r
-aWE("cascad",14);\r
+aWE("cas",3,8,11,25,16,14,17);\r
+aWE("cascad",24,14);\r
aWE("casroot",14);\r
-aWE("cat",14);\r
aWE("catalog",19);\r
aWE("catalogmodulegeneral",19);\r
aWE("catalogmodulepersonnel",19);\r
aWE("catalogu",2,15);\r
aWE("categori",20);\r
aWE("cd",14);\r
-aWE("cel",24,25);\r
-aWE("center",24);\r
-aWE("centr",24);\r
-aWE("central",24);\r
+aWE("cel",25,26);\r
+aWE("cent",24,28);\r
+aWE("center",25);\r
+aWE("centr",25);\r
+aWE("central",25);\r
aWE("centraliz",15);\r
-aWE("chang",3,6,8,14,23,24,16,17,18,26);\r
-aWE("channel",24);\r
+aWE("chang",3,6,8,23,24,25,16,14,17,18,27,28);\r
+aWE("channel",25);\r
aWE("chapter",4);\r
-aWE("character",25);\r
+aWE("character",26);\r
aWE("charg",14);\r
-aWE("check",0,14,24,16,18);\r
+aWE("check",0,25,16,14,18,28);\r
+aWE("check_enabl",14);\r
aWE("check_version",14);\r
-aWE("checkbox",14,23,24,18);\r
-aWE("choic",0,14,24,25);\r
-aWE("choos",5,7,1,8,14,23,13,24,16,25,19,22);\r
-aWE("chosen",24,25,19);\r
-aWE("clamp",24);\r
+aWE("checkbox",23,25,14,18);\r
+aWE("choic",0,25,14,26);\r
+aWE("choos",5,7,1,8,23,24,13,25,16,14,26,19,22,28);\r
+aWE("chosen",25,26,19);\r
+aWE("clamp",25);\r
aWE("classic",16);\r
+aWE("clean",25);\r
aWE("clear",14);\r
aWE("clearall",16);\r
-aWE("click",5,6,0,7,1,8,14,23,12,13,24,16,17,25,18,26,19,20,21,22);\r
+aWE("click",5,6,0,7,1,8,23,12,24,13,25,16,14,17,26,18,27,19,20,21,22,28);\r
aWE("clickabl",12);\r
aWE("client",3);\r
-aWE("clip",24);\r
-aWE("clos",3,14,12,24,17,26,20);\r
+aWE("clip",24,25);\r
+aWE("clon",24);\r
+aWE("clos",3,12,25,14,17,27,20);\r
aWE("cluster",3);\r
aWE("cod",3,14);\r
aWE("coef",23);\r
aWE("coincid",14);\r
aWE("collect",14);\r
-aWE("color",1,23,24,25,18);\r
+aWE("color",1,23,25,26,18,28);\r
aWE("column",18,21,22);\r
-aWE("combin",11,24);\r
+aWE("combin",11,25);\r
aWE("comfortabl",16);\r
aWE("comma",14);\r
-aWE("command",3,0,14,15);\r
-aWE("common",14,2,11,16,17,26);\r
+aWE("command",3,0,15,14);\r
+aWE("common",2,11,16,14,17,27);\r
aWE("compar",3,23);\r
-aWE("compatibl",14);\r
aWE("compil",14);\r
aWE("complet",8,14,20,22);\r
aWE("complex",3,10);\r
-aWE("component",3,4,0,7,10,2,11,12,13,24,16,17,18,19,21,22);\r
-aWE("compos",24);\r
+aWE("component",3,4,0,7,10,2,11,12,13,25,16,17,18,19,21,22);\r
+aWE("compos",25);\r
aWE("comput",14,18);\r
aWE("computation",3,10);\r
aWE("computational",10);\r
aWE("concept",3,12);\r
-aWE("concern",14,10);\r
+aWE("concern",10,14);\r
aWE("conclusion",3);\r
aWE("config",14);\r
aWE("config_fil",14);\r
-aWE("config_mandrake10_1",14);\r
-aWE("configur",14,10);\r
+aWE("config_mandrake_10",14);\r
+aWE("configur",10,14);\r
aWE("configurabl",11);\r
aWE("configuration",14);\r
aWE("confirm",0,14);\r
+aWE("confirmation",14);\r
+aWE("conflict",14);\r
aWE("connect",9,11,13,16,18);\r
aWE("consist",16);\r
-aWE("consol",6,14,10,15,16,17,18);\r
+aWE("consol",6,10,15,16,14,17,18);\r
aWE("constant",3,15);\r
-aWE("construction",10,11);\r
-aWE("consum",0);\r
-aWE("contain",3,4,5,0,8,14,13,15,16,26,19,20,21,22);\r
+aWE("construction",10,11,24);\r
+aWE("consum",0,14);\r
+aWE("contain",3,4,5,0,8,13,15,16,14,27,19,20,21,22);\r
aWE("container",15);\r
-aWE("content",0,14,24,20);\r
-aWE("context",14,16,21);\r
+aWE("content",0,24,25,14,20,28);\r
+aWE("context",16,14,21);\r
aWE("continu",14);\r
-aWE("control",5,14,23,24);\r
+aWE("control",5,23,25);\r
aWE("convert",0,14);\r
aWE("cooperat",11);\r
-aWE("coordinat",18);\r
-aWE("copi",24);\r
-aWE("copy",7,14,16,17);\r
+aWE("coordinat",24,18,28);\r
+aWE("copi",25);\r
+aWE("copy",7,16,14,17);\r
aWE("copyright",14);\r
aWE("corba",3,5,2,15);\r
-aWE("corn",24,17,25);\r
+aWE("corn",25,17,26);\r
aWE("correct",16);\r
-aWE("correspond",14,23,13,24,15,20);\r
+aWE("correspond",23,13,25,15,14,20);\r
aWE("cost",10);\r
aWE("coupl",3,10);\r
aWE("cpp",15);\r
aWE("cppcontain",15);\r
-aWE("creat",3,4,5,6,0,9,14,10,2,11,23,13,15,16,17,18,19,21);\r
-aWE("creation",3,14,2);\r
-aWE("cros",12,17);\r
-aWE("csh",14,15);\r
+aWE("creat",3,4,5,6,0,9,10,2,11,23,24,13,25,15,16,14,17,18,19,21);\r
+aWE("creation",3,2,25,14);\r
+aWE("cros",12,24,17);\r
+aWE("csh",15,14);\r
aWE("cshell",15);\r
-aWE("ctrl",24);\r
-aWE("current",6,0,8,14,12,24,15,17,18,26,21,22);\r
-aWE("cursor",24);\r
-aWE("curv",18);\r
-aWE("custom",10,25,18,19);\r
-aWE("customization",3);\r
-aWE("cycl",24);\r
-aWE("cyrillic",25);\r
+aWE("ctrl",25);\r
+aWE("current",6,0,8,12,24,25,15,14,17,18,27,21,22);\r
+aWE("cursor",25);\r
+aWE("curv",25,18);\r
+aWE("custom",10,15,26,18,19);\r
+aWE("customiz",14);\r
+aWE("customization",3,14);\r
+aWE("cut",25);\r
+aWE("cutlin",25);\r
+aWE("cycl",25);\r
+aWE("cyrillic",26);\r
aWE("d",14);\r
aWE("dat",8,22);\r
-aWE("data",3,5,0,9,14,10,2,11,17,18,19);\r
+aWE("data",3,5,0,9,10,2,11,25,17,18,19);\r
aWE("databas",3);\r
aWE("debug",21);\r
-aWE("decreas",24);\r
-aWE("default",5,1,14,23,24,15,16,17,18,26,21);\r
-aWE("defin",3,0,1,14,10,23,24,15,25);\r
+aWE("decreas",25);\r
+aWE("default",5,1,23,24,25,15,16,14,17,18,27,21,28);\r
+aWE("defin",3,0,1,10,23,24,25,14,26,28);\r
aWE("definit",3,5,7,15,16,21,22);\r
-aWE("definition",3,10,20);\r
+aWE("definition",3,1,10,20);\r
+aWE("deform",28);\r
aWE("delay",10);\r
aWE("delet",17);\r
-aWE("demand",10,2,24);\r
-aWE("depend",7,14,21);\r
+aWE("demand",10,2,25);\r
+aWE("depend",7,25,14,21);\r
aWE("dependanci",14);\r
aWE("dependenci",14);\r
aWE("deriv",3);\r
aWE("describ",3,4,14,19);\r
-aWE("description",14,15,19);\r
-aWE("design",10,24);\r
+aWE("description",15,14,19);\r
+aWE("design",10,25);\r
aWE("desir",19);\r
-aWE("desktop",6,9,14,2,16,17);\r
+aWE("desktop",6,9,2,16,14,17);\r
aWE("destin",9,16,21,22);\r
-aWE("destination",12);\r
+aWE("destination",12,14);\r
aWE("detail",14,18);\r
-aWE("dev",14);\r
-aWE("develop",3);\r
+aWE("develop",3,24,14);\r
aWE("development",3,10);\r
-aWE("devic",24);\r
+aWE("devic",25);\r
aWE("diagram",23);\r
-aWE("dialog",0,1,8,14,23,13,24,16,17,25,18,26,19,22);\r
+aWE("dialog",0,1,8,23,13,25,16,14,17,26,18,27,19,22);\r
aWE("dif",14);\r
aWE("differ",16);\r
-aWE("differenc",3,14,16,17);\r
-aWE("different",3,4,5,9,14,13,24,15,16,17,21);\r
+aWE("differenc",3,16,14,17);\r
+aWE("different",3,4,5,9,13,25,15,16,14,17,21);\r
aWE("digit",23);\r
aWE("digital",10);\r
aWE("dir",14);\r
-aWE("direction",6,24);\r
+aWE("direct",14);\r
+aWE("direction",6,24,25);\r
aWE("directori",14,18);\r
-aWE("directory",14,15,17,18,26,19);\r
-aWE("disabl",14,24,15);\r
+aWE("directory",15,14,17,18,27,19);\r
+aWE("disabl",25,15,14);\r
aWE("disable_flag",14);\r
-aWE("disk",14,15);\r
-aWE("display",6,1,14,23,12,24,15,16,17,18,20,21,22);\r
-aWE("distanc",24);\r
+aWE("disk",15,14);\r
+aWE("display",6,1,23,12,24,25,15,16,14,17,18,20,21,22,28);\r
+aWE("distanc",25,28);\r
aWE("distinction",3);\r
-aWE("distribut",3,14);\r
+aWE("distribut",3);\r
aWE("distribution",14);\r
-aWE("divid",4,24,22);\r
+aWE("divid",4,25,22);\r
aWE("do",7,14);\r
aWE("dockabl",6,2,16,17);\r
-aWE("document",5,0,9,14,16);\r
-aWE("doesn",14);\r
+aWE("document",5,0,9,16,14);\r
+aWE("doesn",24);\r
aWE("domain",3,11);\r
-aWE("dominant",24);\r
-aWE("don",14,24,19);\r
+aWE("dominant",25);\r
+aWE("don",24,25,14,19,28);\r
aWE("dot",14);\r
aWE("doubl",22);\r
aWE("down",8,12);\r
+aWE("downward",24,28);\r
aWE("doxygen",14);\r
-aWE("doxytag",14);\r
-aWE("doxywizard",14);\r
-aWE("drag",16);\r
+aWE("drag",24,16,28);\r
aWE("dramatical",3);\r
+aWE("drawn",24,28);\r
aWE("driv",14);\r
aWE("drop",12,16);\r
-aWE("dump",0);\r
+aWE("dump",0,24,28);\r
aWE("dumpversion",14);\r
+aWE("duplicat",24);\r
aWE("dynamic",2);\r
-aWE("dynamical",11,24);\r
-aWE("e",14,2,15,16,17);\r
+aWE("dynamical",11,25);\r
+aWE("e",2,15,16,14,17);\r
aWE("easi",3,10);\r
aWE("easy",3);\r
aWE("economical",3);\r
-aWE("edg",23);\r
-aWE("edit",7,8,14,2,15);\r
-aWE("editabl",24);\r
-aWE("edition",24);\r
-aWE("editor",26);\r
+aWE("edg",1,23);\r
+aWE("edit",7,8,2,25,15,14);\r
+aWE("editabl",25);\r
+aWE("edition",25);\r
+aWE("editor",27);\r
aWE("efficient",10);\r
-aWE("egrep",14);\r
-aWE("eith",24,25,18,19);\r
+aWE("eith",25,14,26,18,19);\r
aWE("electrical",10);\r
aWE("electronic",10);\r
-aWE("element",10,23,24);\r
+aWE("element",10,23,25);\r
aWE("embed",15);\r
aWE("empty",6);\r
-aWE("enabl",18,20);\r
+aWE("enabl",14,18,20);\r
aWE("encourag",3);\r
-aWE("end",3,14,24,18,26);\r
+aWE("end",3,25,14,18,27);\r
aWE("enforc",3);\r
aWE("engin",3);\r
aWE("enough",14);\r
aWE("ensur",3,10);\r
-aWE("ent",8,14,15,17);\r
+aWE("ent",8,15,14,17);\r
aWE("enter",14);\r
aWE("entity",23);\r
aWE("entry",18,21);\r
aWE("env_",14);\r
+aWE("env_build",14);\r
aWE("env_for_launch",14);\r
aWE("env_product",14);\r
aWE("env_vtk",14);\r
-aWE("environment",3,6,9,14,10,2,15);\r
+aWE("environment",3,6,9,10,2,15,14);\r
+aWE("environmentpleas",14);\r
aWE("equal",3,14);\r
aWE("equipment",10);\r
aWE("error",0,14);\r
-aWE("etc",3,14,2,11,24,16);\r
+aWE("etc",3,2,11,25,16,14);\r
aWE("ev",22);\r
-aWE("even",3,16);\r
-aWE("every",10,20);\r
+aWE("even",3,16,14);\r
+aWE("every",10,25,20);\r
aWE("everyth",14);\r
aWE("evolution",10);\r
aWE("evolv",3);\r
aWE("ex",15);\r
-aWE("exact",14,24);\r
-aWE("exampl",6,14,10,16,17,19);\r
-aWE("exceed",24);\r
-aWE("exception",2,15);\r
+aWE("exact",25,14);\r
+aWE("examl",14);\r
+aWE("exampl",6,10,16,14,17,19);\r
+aWE("exceed",25);\r
+aWE("except",14,28);\r
+aWE("exception",2,15,14);\r
aWE("exchang",3);\r
+aWE("execut",14);\r
+aWE("executabl",14);\r
aWE("execution",10,11);\r
-aWE("exist",3,14,11,13,17,26,19);\r
+aWE("exist",3,11,13,14,17,27,19);\r
aWE("existenc",14);\r
aWE("expand",12);\r
aWE("expandability",3);\r
aWE("expectation",10);\r
+aWE("experienc",14);\r
aWE("expert",0);\r
aWE("exploit",3);\r
aWE("explor",4);\r
-aWE("export",10,23);\r
+aWE("export",10,23,24,28);\r
aWE("expos",3);\r
-aWE("extend",25);\r
-aWE("extension",17,26);\r
-aWE("external",18);\r
+aWE("extend",24,26,28);\r
+aWE("extension",17,27);\r
+aWE("external",14,18);\r
aWE("extract",14);\r
aWE("extreme",10);\r
-aWE("f",14,15);\r
-aWE("fac",23,24,18);\r
+aWE("f",15,14);\r
+aWE("fac",23,25,18);\r
aWE("facilitat",3,11);\r
-aWE("fact",14,16);\r
+aWE("fact",16);\r
aWE("factory",19);\r
aWE("fail",14);\r
aWE("fals",14);\r
-aWE("famili",24);\r
-aWE("featur",4,14,24);\r
-aWE("field",8,14,10,23,24,25);\r
+aWE("famili",25);\r
+aWE("featur",4,25,14);\r
+aWE("feel",14);\r
+aWE("field",8,10,23,25,14,26);\r
aWE("fig",14);\r
aWE("figur",1,14);\r
-aWE("fil",5,0,8,14,11,13,24,15,16,17,18,26,19);\r
+aWE("fil",5,0,8,11,13,25,15,16,14,17,18,27,19);\r
aWE("fill",23);\r
+aWE("final",14);\r
aWE("find",14,19,20);\r
aWE("find_in_path",14);\r
aWE("fine",3);\r
-aWE("finish",14,12,24);\r
+aWE("finish",12,25,14);\r
aWE("finit",10);\r
-aWE("first",0,14,24,18,21);\r
-aWE("fit",18);\r
+aWE("first",0,25,14,18,21);\r
+aWE("fit",24,18,28);\r
aWE("flag",14);\r
aWE("flexibility",3,0);\r
-aWE("flexibl",14,10,2);\r
-aWE("focal",24);\r
+aWE("flexibl",10,2,14);\r
+aWE("focal",25);\r
aWE("focu",12);\r
aWE("fold",14,17,21);\r
-aWE("follow",3,0,8,9,14,12,13,15,16,17,18,26,19,20,22);\r
-aWE("font",23,24,25,18);\r
+aWE("folder",14);\r
+aWE("follow",3,0,8,9,12,13,15,16,14,17,18,27,19,20,22);\r
+aWE("font",23,25,14,26,18,28);\r
+aWE("forc",14);\r
aWE("forget",19);\r
-aWE("format",4,10,13,18);\r
-aWE("forth",24);\r
-aWE("fp",24);\r
-aWE("fram",14,24);\r
+aWE("formal",14);\r
+aWE("format",4,10,24,13,18,28);\r
+aWE("forth",25);\r
+aWE("fp",25);\r
+aWE("fram",24,25,14,28);\r
aWE("framework",2);\r
-aWE("fre",10,24);\r
+aWE("fre",1,10,25);\r
aWE("friend",10);\r
-aWE("ful",24);\r
+aWE("ful",25);\r
aWE("fulfill",0);\r
-aWE("full",24,20);\r
-aWE("function",0,14,10,11,16,17);\r
+aWE("full",25,20);\r
+aWE("function",0,10,11,16,14,17);\r
aWE("function_nam",14);\r
aWE("functional",16);\r
-aWE("functionaliti",10);\r
-aWE("functionality",3,4,7,9,16,19);\r
+aWE("functionaliti",10,24,28);\r
+aWE("functionality",3,4,7,9,24,16,19,28);\r
aWE("fundamental",3);\r
aWE("furth",14);\r
-aWE("g",14,15);\r
+aWE("g",15,14);\r
aWE("gap",23);\r
-aWE("gaus",2,24);\r
+aWE("gaus",2,25,28);\r
aWE("gcc",14);\r
-aWE("general",9,14,23,16,18);\r
-aWE("generat",0,14,11,19);\r
+aWE("general",9,23,16,14,18);\r
+aWE("generat",0,11,25,14,19);\r
aWE("generator",10,2,19);\r
aWE("generic",10,11);\r
-aWE("geom",14,11);\r
-aWE("geometrical",1,10,11,24);\r
-aWE("geometry",3,1,11,24,16);\r
-aWE("get",4,9,14,10,21);\r
-aWE("giv",0,8,14,16,25);\r
-aWE("given",14,11,24);\r
-aWE("gl",24);\r
-aWE("global",24);\r
+aWE("geom",11,14);\r
+aWE("geometrical",1,10,11,24,25);\r
+aWE("geometry",3,1,11,24,25,16);\r
+aWE("get",4,9,10,14,21);\r
+aWE("giv",0,8,16,14,26);\r
+aWE("given",11,25,14);\r
+aWE("gl",25);\r
+aWE("global",24,25,28);\r
aWE("glossary",20);\r
-aWE("go",14,12);\r
+aWE("go",12,14);\r
+aWE("good",24);\r
+aWE("graduat",28);\r
aWE("graph",6,11,18);\r
-aWE("graphic",24);\r
+aWE("graphic",25);\r
aWE("graphical",0,2);\r
aWE("graphviz",14);\r
-aWE("great",0,24);\r
-aWE("greek",25);\r
-aWE("grep",14);\r
-aWE("group",23,24,25);\r
-aWE("gui",3,5,0,14,2,11,15,17,18,26);\r
-aWE("h",14,15);\r
-aWE("half",24);\r
+aWE("great",0,24,25,28);\r
+aWE("greek",26);\r
+aWE("group",23,24,25,26);\r
+aWE("gui",3,5,0,2,11,15,14,17,18,27);\r
+aWE("guid",14);\r
+aWE("h",15,14);\r
+aWE("half",25);\r
aWE("hand",3,12,20);\r
-aWE("handl",14,10,2,15);\r
-aWE("hard",14,15);\r
+aWE("handl",10,2,15);\r
+aWE("hard",15,14);\r
aWE("hasn",17);\r
aWE("hav",11,12,21);\r
aWE("haven",18);\r
-aWE("hdf",14,13,17,18);\r
+aWE("hdf",13,14,17,18);\r
aWE("hdf5",14);\r
aWE("hdf5hom",14);\r
aWE("heal",10);\r
-aWE("height",23,24);\r
+aWE("height",23,25);\r
aWE("hello",22);\r
-aWE("help",3,4,14,10,12,13,15,18,20,21);\r
+aWE("help",3,4,10,12,13,15,14,18,20,21);\r
aWE("helpful",14);\r
-aWE("her",14,23,24,18);\r
+aWE("her",23,25,14,18);\r
aWE("heterogeneou",10);\r
-aWE("hid",24,16,18,21);\r
-aWE("high",14,10);\r
-aWE("highlight",14,23,21);\r
-aWE("hint",14);\r
+aWE("hid",24,25,16,18,21,28);\r
+aWE("high",10);\r
+aWE("highlight",23,14,21);\r
aWE("history",22);\r
-aWE("hom",14,26);\r
-aWE("horizontal",6,23,24,18);\r
+aWE("hom",14,27);\r
+aWE("hop",14);\r
+aWE("horizontal",6,23,25,18);\r
aWE("host",3);\r
aWE("hotspot",12);\r
+aWE("hour",14);\r
aWE("how",3,14);\r
aWE("hpp",14);\r
aWE("html",4,20);\r
aWE("hxx",14);\r
-aWE("i",14,2,15,16,17);\r
+aWE("i",2,15,16,17);\r
aWE("icon",5,7,16,19);\r
aWE("idea",14);\r
aWE("identification",21,22);\r
aWE("identify",14);\r
aWE("idl",3,19);\r
aWE("ie",18);\r
-aWE("if",5,6,0,7,14,23,13,24,15,16,17,18,19,21);\r
+aWE("if",5,6,0,7,23,24,13,25,15,16,14,17,18,19,21,28);\r
aWE("ig",10);\r
aWE("ignor",14);\r
-aWE("imag",10,24);\r
+aWE("imag",10,24,25,28);\r
aWE("immediate",12);\r
aWE("implement",3,14);\r
-aWE("implementation",3,19);\r
-aWE("impli",14);\r
-aWE("import",0,14,10,2,11,24,16,26);\r
+aWE("implementation",3,14,19);\r
+aWE("import",0,10,2,11,25,16,14,27);\r
aWE("important",14);\r
-aWE("impos",24);\r
-aWE("improv",2);\r
-aWE("inc",14);\r
-aWE("includ",14,12,24,20);\r
+aWE("impos",25);\r
+aWE("improv",2,14);\r
+aWE("includ",12,25,14,20);\r
aWE("inclusiv",3);\r
-aWE("increas",0,10,24);\r
-aWE("increment",1,24);\r
+aWE("increas",0,10,25);\r
+aWE("increment",1,25);\r
aWE("incremental",3);\r
aWE("independenc",3);\r
aWE("independent",3);\r
aWE("index",23,21);\r
aWE("indicat",16,17);\r
-aWE("information",3,8,14,12,24,17,20,22);\r
+aWE("information",3,8,12,25,14,17,20,22);\r
aWE("initial",9);\r
aWE("input",10,19);\r
-aWE("insert",14);\r
-aWE("insid",3,6,12,24,19);\r
-aWE("inspect",14,24);\r
+aWE("insid",3,6,12,25,19);\r
+aWE("inspect",25,14);\r
aWE("instal",14,19);\r
aWE("instalation",14);\r
-aWE("install",14,15);\r
+aWE("install",15,14);\r
aWE("install_binary",14);\r
aWE("install_disk_spac",14);\r
aWE("install_sourc",14);\r
+aWE("install_source_and_build",14);\r
aWE("install_wizard_caption",14);\r
aWE("install_wizard_copyright",14);\r
aWE("install_wizard_license_info",14);\r
aWE("install_wizard_root_directory",14);\r
aWE("install_wizard_version",14);\r
-aWE("installation",14,15);\r
+aWE("installation",15,14);\r
aWE("installation_mod",14);\r
aWE("installation_script_nam",14);\r
aWE("installdiskspac",14);\r
aWE("installwizard_root_directory",14);\r
aWE("installworkxxxxx",14);\r
aWE("instanc",5);\r
+aWE("instruction",14);\r
aWE("instrumental",3);\r
aWE("integ",14);\r
aWE("integer",23);\r
aWE("integrat",3,10,2,11);\r
aWE("integration",3,10,2,19);\r
-aWE("intend",14);\r
aWE("interaction",2);\r
aWE("interfac",3,0,10,2,16,19);\r
aWE("interior",23);\r
aWE("interoperabl",21);\r
aWE("interp",15);\r
aWE("interpret",2,16);\r
-aWE("interval",24,22);\r
-aWE("introduction",14,10,2,11);\r
+aWE("interval",25,22);\r
+aWE("introduction",10,2,11,14);\r
aWE("invalid",17);\r
-aWE("invok",14,16);\r
+aWE("invert",24,25);\r
+aWE("invok",16,14);\r
aWE("ior",18,21);\r
-aWE("isolin",18);\r
-aWE("ispython",14);\r
+aWE("isolat",1);\r
+aWE("isolin",1,18);\r
+aWE("isometric",24,28);\r
aWE("item",8,10,2);\r
-aWE("iteration",24);\r
+aWE("iteration",25);\r
aWE("itself",14);\r
aWE("java",4);\r
+aWE("jpeg",24,28);\r
+aWE("jpg",24,28);\r
aWE("just",14,18);\r
aWE("k",15);\r
aWE("kbyt",14);\r
-aWE("kernel",14,11,15);\r
-aWE("key",14,24);\r
-aWE("keyboard",24);\r
+aWE("kernel",11,15,14);\r
+aWE("key",25,14);\r
+aWE("keyboard",25);\r
aWE("kill",15);\r
aWE("killall",15);\r
aWE("kind",8,12);\r
aWE("know",19);\r
aWE("knowledg",0);\r
aWE("l",15);\r
-aWE("label",23,24);\r
+aWE("label",23,25,14,28);\r
aWE("languag",3);\r
aWE("larg",14);\r
-aWE("largest",24);\r
-aWE("last",18,22);\r
-aWE("latest",24);\r
-aWE("latin",25);\r
-aWE("launch",4,0,14,13,15,26,19,22);\r
+aWE("largest",25);\r
+aWE("last",14,18,22);\r
+aWE("latest",25);\r
+aWE("latin",26);\r
+aWE("launch",4,0,13,15,14,27,19,22);\r
aWE("lay",5);\r
aWE("layout",0,17);\r
aWE("ld_library_path",14);\r
aWE("lead",17);\r
-aWE("learn",14,10);\r
-aWE("left",14,23,24,25,18,20);\r
+aWE("learn",10,14);\r
+aWE("left",23,24,25,14,26,18,20,28);\r
aWE("legend",18);\r
-aWE("length",24);\r
-aWE("les",24);\r
-aWE("level",3,23,24);\r
+aWE("length",25,28);\r
+aWE("les",25);\r
+aWE("level",3,23,25);\r
aWE("lib",14);\r
aWE("libcosnotify4",14);\r
aWE("libhdf5",14);\r
aWE("libm",14);\r
aWE("libomniorb4",14);\r
-aWE("libqwt",14);\r
aWE("librari",14);\r
-aWE("library",14,2);\r
-aWE("libstdplugin",14);\r
-aWE("libtcl8",14);\r
-aWE("libtk8",14);\r
+aWE("library",2,14);\r
aWE("libvtkcommon",14);\r
aWE("licens",14);\r
-aWE("lik",3,6,14,12,24,16,17,19,21);\r
+aWE("lik",3,6,12,25,16,14,17,19,21);\r
aWE("like",14);\r
-aWE("limit",24);\r
-aWE("limitation",24);\r
-aWE("lin",4,1,14,23,24,15,18);\r
+aWE("limit",25);\r
+aWE("limitation",25);\r
+aWE("lin",4,1,23,25,15,14,18);\r
aWE("linear",18);\r
aWE("link",3,10,12);\r
aWE("linux",4,14);\r
-aWE("list",8,14,12,24,15,18,20,22);\r
+aWE("list",8,12,25,15,14,18,20,22);\r
aWE("list_of_prerequisit",14);\r
-aWE("ll",18);\r
-aWE("load",3,0,2,13,24,15,16,18,26,21);\r
-aWE("local",24);\r
-aWE("locat",3,24,15,16,18,20,21);\r
+aWE("ll",24,18,28);\r
+aWE("load",3,0,2,13,25,15,16,18,27,21);\r
+aWE("local",25);\r
+aWE("locat",3,24,25,15,16,18,20,21,28);\r
aWE("location",0,19);\r
-aWE("lock",8,24);\r
-aWE("log",15);\r
-aWE("logarithmic",24,18);\r
+aWE("lock",8,24,25,28);\r
+aWE("log",15,14);\r
+aWE("logarithmic",25,18);\r
aWE("long",3,14);\r
aWE("look",14,19,20);\r
-aWE("lookout",23,24);\r
+aWE("lookout",23,25);\r
aWE("lost",17);\r
aWE("lot",16);\r
-aWE("low",14,24,25,20);\r
+aWE("low",25,14,26,20);\r
aWE("m",15);\r
aWE("machin",3,17,22);\r
aWE("macintosh",4);\r
-aWE("macro",3);\r
-aWE("magnification",24);\r
-aWE("main",5,0,7,8,14,10,13,24,16,17,18,19,22);\r
+aWE("macro",3,14);\r
+aWE("magnification",25);\r
+aWE("main",5,0,7,8,10,13,25,16,14,17,18,19,22);\r
aWE("major",14);\r
-aWE("mak",5,14,10,23);\r
+aWE("mak",5,10,23,14);\r
aWE("make_dir",14);\r
aWE("make_env",14);\r
aWE("manag",10,18);\r
aWE("management",10,2,16);\r
aWE("mandrak",14);\r
aWE("mandrake10",14);\r
-aWE("manipulat",24);\r
-aWE("manipulator",24);\r
-aWE("manual",4,0,14,18);\r
+aWE("manipulat",25);\r
+aWE("manipulator",25);\r
+aWE("manual",4,0,24,14,18,28);\r
aWE("map",3);\r
-aWE("mark",14,18);\r
+aWE("mark",24,25,14,18,28);\r
aWE("marker",18);\r
aWE("market",10);\r
aWE("massive",3);\r
aWE("mast",14);\r
aWE("match",20);\r
-aWE("matrix",24);\r
-aWE("max",24);\r
+aWE("matrix",25);\r
+aWE("max",25);\r
aWE("maximiz",5);\r
-aWE("maximum",24);\r
-aWE("mean",6,9,14,24,16,17);\r
+aWE("maximum",25);\r
+aWE("mean",6,9,25,16,14,17);\r
aWE("mechanism",0,2,15);\r
aWE("med2hom",14);\r
aWE("meet",10);\r
-aWE("memory",24);\r
+aWE("memoris",24);\r
+aWE("memory",25);\r
aWE("mention",14);\r
-aWE("menu",3,5,0,7,8,2,23,12,13,24,16,17,25,18,26,19,21,22);\r
+aWE("menu",3,5,0,7,8,2,23,12,13,25,16,17,26,18,27,19,21,22);\r
aWE("menubar",16);\r
-aWE("mesh",3,10,11,23,24,16);\r
-aWE("messag",8,14,2,15);\r
-aWE("middl",14);\r
-aWE("min",24);\r
+aWE("mesh",3,10,11,23,24,25,16,14,28);\r
+aWE("messag",8,2,15,14);\r
+aWE("min",25);\r
aWE("minimiz",5);\r
-aWE("minimum",24);\r
+aWE("minimum",25);\r
aWE("minor",14);\r
aWE("mistak",16);\r
aWE("mix",16);\r
-aWE("mod",3,0,1,14,23,24,15);\r
+aWE("mod",3,0,1,23,25,15,14);\r
aWE("model",3,10,11,23);\r
aWE("modern",10);\r
+aWE("modifi",14);\r
aWE("modification",3,0,8);\r
-aWE("modify",0,14,10);\r
-aWE("modul",3,4,7,1,14,2,11,23,24,15,16,17,18,26,19);\r
-aWE("module_root_dir",14);\r
-aWE("module_src_dir",14);\r
+aWE("modify",0,10,14);\r
+aWE("modul",3,4,7,1,2,11,23,24,25,15,16,14,17,18,27,19,28);\r
aWE("module1",15);\r
aWE("module2",15);\r
aWE("modulecatalog",15);\r
-aWE("modulu",24);\r
-aWE("moment",14,24);\r
-aWE("momentari",24);\r
-aWE("mous",23,24,16);\r
+aWE("modulu",25);\r
+aWE("moment",25,14);\r
+aWE("momentari",25);\r
+aWE("mous",23,24,25,16,28);\r
aWE("mov",6);\r
-aWE("movement",24);\r
+aWE("movement",25);\r
aWE("mozilla",18);\r
aWE("msg2qm",14);\r
aWE("msg2qm_root",14);\r
aWE("multi",6,9,10,2,16,19);\r
aWE("multifil",17,18);\r
aWE("multipl",17);\r
-aWE("multipli",24);\r
+aWE("multipli",25);\r
aWE("multiti",3);\r
aWE("must",3,10,11);\r
-aWE("n",14,24,15);\r
-aWE("nam",3,5,0,8,14,17,19,21,22);\r
+aWE("n",25,15,14);\r
+aWE("nam",3,5,0,8,14,17,19,21,22,28);\r
aWE("nativ",14);\r
aWE("natur",7);\r
aWE("natural",3);\r
-aWE("navigat",14,12);\r
-aWE("navigation",4,12,24);\r
+aWE("navigat",12,14);\r
+aWE("navigation",4,12,25);\r
aWE("navigator",4);\r
-aWE("ne",6,14,12,25,18);\r
-aWE("necessary",0,14,23,15,16,17,21);\r
-aWE("need",24);\r
-aWE("negativ",24);\r
+aWE("ne",6,12,14,26,18);\r
+aWE("necessary",0,23,15,16,14,17,21);\r
+aWE("need",25);\r
+aWE("negativ",25);\r
aWE("netgen",14);\r
aWE("netgenroot",14);\r
aWE("netscap",4,18);\r
-aWE("nevertheles",14);\r
-aWE("new",3,5,8,9,14,10,17,18,26,19);\r
-aWE("next",8,14,15,26,19);\r
-aWE("nf",14);\r
+aWE("new",3,5,8,9,10,24,25,14,17,18,27,19);\r
+aWE("next",8,15,14,27,19);\r
aWE("nod",23,19);\r
aWE("normal",6);\r
-aWE("not",14,15);\r
+aWE("not",15,14);\r
aWE("notation",14);\r
aWE("noticeab",3);\r
aWE("notifd",14);\r
-aWE("notification",26);\r
-aWE("notify",24);\r
+aWE("notification",27);\r
+aWE("notify",25);\r
aWE("notion",9);\r
aWE("now",16);\r
-aWE("nth",24);\r
-aWE("null",14,24);\r
-aWE("numb",14,11,23,24,15,18,26,22);\r
-aWE("number",14,23,24);\r
-aWE("numeric",14,10,11,25);\r
+aWE("nth",25);\r
+aWE("null",25);\r
+aWE("numb",11,23,25,15,14,18,27,22,28);\r
+aWE("number",23,25,14);\r
+aWE("numeric",10,11,14,26);\r
aWE("numerical",3,9,10);\r
aWE("numerou",15);\r
-aWE("object",3,5,6,0,7,2,23,13,24,16,17,18,26,21);\r
+aWE("object",3,5,6,0,7,2,23,24,13,25,16,17,18,27,21,28);\r
aWE("objectiv",3);\r
aWE("obligatory",14);\r
-aWE("occ",5,6,2,18);\r
+aWE("observ",25);\r
+aWE("occ",5,6,2,24,18);\r
+aWE("occ_version_maintenanc",14);\r
aWE("occ_version_major",14);\r
aWE("occ_version_minor",14);\r
aWE("occupi",14);\r
+aWE("occur",14);\r
aWE("off",14);\r
aWE("offer",3);\r
+aWE("offic",14);\r
aWE("official",14);\r
+aWE("offset",28);\r
aWE("often",10);\r
-aWE("ok",14,13,26);\r
+aWE("ok",13,14,27);\r
aWE("omg",3);\r
-aWE("omit",14);\r
-aWE("omni",14);\r
aWE("omninotify",14);\r
aWE("omniorb",14);\r
aWE("omniorbdir",14);\r
aWE("omniorbpy",14);\r
-aWE("on",3,6,0,7,14,2,12,13,24,15,16,17,25,18,26,19);\r
-aWE("onc",24);\r
+aWE("on",3,6,0,7,2,12,13,25,15,16,14,17,26,18,27,19);\r
+aWE("onc",25);\r
aWE("onlin",20);\r
-aWE("opaqu",24);\r
-aWE("open",6,0,9,14,10,11,12,13,24,15,17,19,20);\r
-aWE("opencascad",14);\r
+aWE("opaqu",25);\r
+aWE("open",6,0,9,10,11,12,24,13,25,15,14,17,19,20);\r
aWE("operat",0);\r
-aWE("operation",7,9,23,24,17);\r
-aWE("optimiz",14,10,24);\r
+aWE("operation",7,9,23,25,14,17);\r
+aWE("optimiz",10,25,14);\r
aWE("optimization",11);\r
-aWE("option",7,8,14,13,24,15,16,17,18,21);\r
-aWE("optional",14,10,11);\r
+aWE("option",7,8,13,25,15,16,14,17,18,21);\r
+aWE("optional",10,11,14);\r
aWE("ord",14);\r
-aWE("ordinat",23,24);\r
+aWE("ordinat",23,25);\r
aWE("org",3);\r
-aWE("orientation",23,24);\r
-aWE("origin",23,24);\r
+aWE("orientat",24,28);\r
+aWE("orientation",23,24,25);\r
+aWE("origin",23,24,25,28);\r
aWE("original",0);\r
aWE("originality",11);\r
aWE("os",14);\r
aWE("os_version",14);\r
aWE("other",4,0);\r
-aWE("otherwis",0,14,24,17);\r
-aWE("out",10,23,25);\r
+aWE("otherwis",0,25,14,17);\r
+aWE("out",10,23,24,26,28);\r
aWE("outlin",23);\r
-aWE("output",14,2);\r
-aWE("outsid",24,16);\r
+aWE("output",2,14);\r
+aWE("outsid",25,16);\r
aWE("overrid",14);\r
-aWE("own",14,2,11,16);\r
+aWE("overridden",14);\r
+aWE("own",2,11,16,14);\r
aWE("p",15);\r
-aWE("packag",14,15,19);\r
+aWE("packag",15,14,19);\r
aWE("pag",14,20);\r
-aWE("pan",12,17,20);\r
+aWE("pan",12,24,17,20,28);\r
aWE("parallel",3);\r
aWE("paramet",14,19);\r
-aWE("parameter",3,14,24,25,18,19);\r
-aWE("parent",24);\r
-aWE("part",6,14,16);\r
+aWE("parameter",3,25,26,18,19,28);\r
+aWE("parent",25);\r
+aWE("part",6,24,16,14,28);\r
aWE("particular",10,17);\r
-aWE("party",11);\r
-aWE("pas",14);\r
+aWE("party",11,14);\r
aWE("past",7,16);\r
aWE("patch",14);\r
-aWE("patent",24);\r
-aWE("path",14,24);\r
+aWE("patent",25);\r
+aWE("path",25,14);\r
aWE("pc",3);\r
-aWE("per",24);\r
-aWE("perform",14,10,11,23,24);\r
-aWE("performanc",3,9,10);\r
+aWE("per",25);\r
+aWE("perform",10,11,23,24,25,14,28);\r
+aWE("performanc",3,9,10,25,14);\r
+aWE("period",25);\r
aWE("permission",14);\r
aWE("phenomena",3);\r
aWE("phras",20);\r
aWE("physic",10);\r
aWE("physical",3,10,11);\r
-aWE("pick",14,24);\r
+aWE("pick",25,14);\r
aWE("pickup",14);\r
aWE("pickup_env",14);\r
aWE("pickup_env_flag",14);\r
aWE("pictur",8);\r
aWE("pid",22);\r
aWE("piec",3);\r
-aWE("pixel",24);\r
-aWE("plac",6,14,2,16);\r
-aWE("placement",23,24);\r
-aWE("platform",3,4,6,0,9,14,10,2,11,15,16,17,19,22);\r
+aWE("pixel",25);\r
+aWE("plac",6,2,24,16,14,28);\r
+aWE("placement",23,25);\r
+aWE("plan",24,14);\r
+aWE("platform",3,4,6,0,9,10,2,11,15,16,14,17,19,22);\r
aWE("play",0);\r
aWE("pleas",14);\r
-aWE("plot",6,2);\r
+aWE("plot",6,2,25);\r
aWE("plot2d",5,18);\r
aWE("plug",2);\r
+aWE("png",24,28);\r
aWE("po",14);\r
-aWE("point",3,14,2,23,24,18);\r
+aWE("point",3,1,2,23,24,25,14,18,28);\r
aWE("pop",12,13,16,21);\r
aWE("popup",12);\r
aWE("port",15);\r
aWE("portkill",15);\r
-aWE("position",24,16,17,18);\r
+aWE("position",24,25,16,17,18,28);\r
aWE("positive",16);\r
-aWE("possibility",3,0,14,15,25,19);\r
-aWE("possibl",3,0,14,16,17,25,21);\r
-aWE("post",3,10,11,24,16,17);\r
+aWE("possibility",3,0,15,14,26,19);\r
+aWE("possibl",3,0,16,14,17,26,21);\r
+aWE("post",3,10,11,25,16,17,28);\r
aWE("powerful",2);\r
-aWE("pr",10,11);\r
+aWE("pr",10,11,14);\r
aWE("precision",23);\r
aWE("precompil",14);\r
-aWE("predefin",3,14,25);\r
+aWE("predefin",3,14,26);\r
aWE("preferabl",15);\r
-aWE("preferenc",1,23,24,25,18,26,21);\r
-aWE("prefix",14);\r
+aWE("preferenc",1,23,25,26,18,27,21);\r
aWE("preinstal",14);\r
-aWE("preliminary",14);\r
aWE("prerequisit",14);\r
-aWE("pres",14,24,18);\r
+aWE("pres",24,25,14,18,28);\r
aWE("preselect",23);\r
aWE("preselection",23);\r
-aWE("present",23,24);\r
-aWE("presentation",5,23,24,16,18);\r
-aWE("prevent",24);\r
-aWE("preview",25);\r
-aWE("previou",14,13);\r
-aWE("previous",14,11,13,17);\r
-aWE("primitiv",24);\r
-aWE("print",14,15);\r
+aWE("present",23,25);\r
+aWE("presentation",5,23,25,16,18,28);\r
+aWE("prevent",25);\r
+aWE("preview",24,25,26);\r
+aWE("previou",13,14);\r
+aWE("previous",11,13,25,14,17);\r
+aWE("primitiv",25);\r
+aWE("print",15,14);\r
aWE("print_env",14);\r
aWE("priority",10);\r
-aWE("pro",3,11,24,16,17);\r
+aWE("pro",3,11,25,16,17,28);\r
aWE("probab",5);\r
-aWE("problem",0,14,10);\r
+aWE("problem",0,10,14);\r
aWE("proce",9,14);\r
-aWE("procedur",14,15);\r
-aWE("proces",3,0,14,10,2,11,24,22);\r
+aWE("procedur",15,14);\r
+aWE("proces",3,0,10,2,11,25,14,22);\r
aWE("processor",3,10);\r
-aWE("produc",24);\r
-aWE("product",14,10,15);\r
+aWE("produc",25);\r
+aWE("product",10,15,14);\r
aWE("product_context",14);\r
aWE("product_description",14);\r
aWE("product_nam",14);\r
aWE("profil",15);\r
aWE("program",3,14);\r
aWE("programmatic",10);\r
-aWE("progres",14,24);\r
-aWE("progressiv",24);\r
-aWE("prompt",14,15);\r
+aWE("progres",25,14);\r
+aWE("progressiv",25);\r
+aWE("prompt",15,14);\r
aWE("pron",0);\r
-aWE("prop",14);\r
aWE("proper",14);\r
-aWE("properti",8,10,11,24,18);\r
-aWE("propos",14,2);\r
-aWE("provid",3,7,14,10,2,11,24,15,25,19,20,22);\r
+aWE("properti",8,10,11,25,18,28);\r
+aWE("proportional",25);\r
+aWE("propos",2,14);\r
+aWE("provid",3,7,10,2,11,24,25,15,14,26,19,20,22);\r
aWE("publish",0,17);\r
aWE("pur",3);\r
aWE("purpos",9,21);\r
-aWE("py",15);\r
+aWE("put",14);\r
+aWE("py",15,14);\r
aWE("pycontain",15);\r
aWE("pyqt",14);\r
+aWE("pyqtconfig",14);\r
aWE("pyqtdir",14);\r
-aWE("pyramid",24);\r
-aWE("python",3,6,0,14,10,2,15,16,17,18);\r
+aWE("pyramid",25);\r
+aWE("python",3,6,0,10,2,15,16,14,17,18);\r
aWE("pythonhom",14);\r
+aWE("pythonpath",14);\r
aWE("qglobal",14);\r
aWE("qm",14);\r
aWE("qt",14);\r
aWE("qt_version_str",14);\r
aWE("qtdir",14);\r
-aWE("quality",10,23,24);\r
+aWE("quality",10,23,25);\r
aWE("quantiti",10);\r
-aWE("question",14);\r
aWE("quick",14,18,21);\r
-aWE("quit",0,14,17,26);\r
+aWE("quit",0,14,17,27);\r
aWE("quot",14);\r
aWE("qwt",14);\r
+aWE("qwt_global",14);\r
+aWE("qwt_version_str",14);\r
aWE("qwthom",14);\r
aWE("r",15);\r
aWE("radio",14);\r
-aWE("rainbow",24);\r
-aWE("rang",11,24);\r
+aWE("rainbow",25);\r
+aWE("rang",11,25);\r
aWE("rapid",3);\r
-aWE("rat",24);\r
+aWE("rat",25);\r
aWE("rath",0);\r
-aWE("ratio",24);\r
-aWE("re",0,12);\r
+aWE("ratio",25);\r
+aWE("re",0,12,14);\r
aWE("reactivity",10);\r
-aWE("read",14,10,12);\r
+aWE("read",10,12,14);\r
aWE("readm",14);\r
-aWE("real",24);\r
+aWE("real",25);\r
aWE("realiz",9);\r
-aWE("reassign",24);\r
-aWE("receiv",26);\r
-aWE("recommend",14,24);\r
-aWE("record",8,24);\r
-aWE("red",21);\r
+aWE("reason",14);\r
+aWE("reassign",25);\r
+aWE("receiv",27);\r
+aWE("recommend",25,14);\r
+aWE("record",8,25);\r
+aWE("red",14,21);\r
+aWE("redefin",28);\r
aWE("redirect",15);\r
aWE("reduc",10);\r
-aWE("ref",18,26);\r
+aWE("ref",14,18,27);\r
aWE("refer",14);\r
-aWE("referenc",4,12,24,18,21);\r
-aWE("refin",10,24);\r
+aWE("referenc",4,12,25,18,21);\r
+aWE("refin",10,25);\r
aWE("refresh",22);\r
aWE("refreshment",22);\r
-aWE("regim",24);\r
+aWE("regim",25);\r
aWE("registry",2,15,22);\r
aWE("reinstal",14);\r
aWE("reinstall",14);\r
aWE("reinstallation",14);\r
aWE("relat",12,20);\r
-aWE("relativ",14,23,18);\r
+aWE("relativ",23,14,18);\r
aWE("releas",14);\r
+aWE("release_not",14);\r
aWE("relevant",12);\r
aWE("reliability",10);\r
aWE("reload",17);\r
aWE("relocat",16);\r
-aWE("remain",3);\r
-aWE("remot",5);\r
-aWE("remov",14,18);\r
+aWE("remain",3,24);\r
+aWE("remot",5,24,28);\r
+aWE("remov",24,25,14,18);\r
aWE("renam",17);\r
-aWE("render",24);\r
+aWE("rend",25);\r
+aWE("render",25);\r
aWE("reopen",18);\r
-aWE("repeat",24);\r
-aWE("represent",3,9,10,11,20);\r
-aWE("representation",6,11,24,18);\r
-aWE("representativ",24);\r
-aWE("requir",14,10,13,24,17);\r
+aWE("repeat",25);\r
+aWE("represent",3,9,10,11,24,20,28);\r
+aWE("representation",6,11,24,25,18);\r
+aWE("representativ",25);\r
+aWE("requir",10,13,25,14,17);\r
aWE("requirement",3,10,15);\r
-aWE("reset",14);\r
-aWE("resiz",18);\r
-aWE("resolution",24);\r
+aWE("requisit",14);\r
+aWE("reset",24,14,28);\r
+aWE("resiz",24,18,28);\r
+aWE("resolution",25);\r
aWE("resolv",0);\r
-aWE("resourc",14,2,24,15);\r
-aWE("respectiv",24,26);\r
-aWE("respective",24);\r
+aWE("resourc",2,25,15,14);\r
+aWE("respectiv",1,25,27);\r
+aWE("respective",25);\r
aWE("respond",3);\r
aWE("responsibl",14);\r
aWE("rest",18);\r
-aWE("restor",10,17,18,26);\r
-aWE("result",9,10,24);\r
-aWE("retroactiv",26);\r
+aWE("restart",14);\r
+aWE("restor",10,24,25,17,18,27,28);\r
+aWE("result",9,10,24,25);\r
+aWE("resum",14);\r
+aWE("retriev",14);\r
+aWE("retroactiv",27);\r
+aWE("return",24,14);\r
aWE("reus",3);\r
aWE("reusabl",10);\r
-aWE("reversib",0,24);\r
-aWE("right",6,14,12,13,24,16,17,25,18,20,21);\r
+aWE("reversib",0,25);\r
+aWE("right",6,12,13,25,16,14,17,26,18,20,21);\r
aWE("risk",10);\r
aWE("robustnes",10);\r
aWE("rol",3);\r
aWE("root",14);\r
-aWE("rotat",24);\r
-aWE("rotation",24);\r
+aWE("rotat",24,25,28);\r
+aWE("rotation",24,25,28);\r
aWE("rul",14);\r
-aWE("run",3,14,15,19,22);\r
-aWE("runic",25);\r
+aWE("run",3,15,14,19,22);\r
+aWE("runic",26);\r
aWE("runinstall",14);\r
aWE("runsalom",15,19);\r
aWE("runsalomewithport",19);\r
-aWE("s",3,14,12,15);\r
+aWE("s",3,12,15,14);\r
aWE("saf",2);\r
-aWE("salom",3,4,5,6,0,7,9,14,10,2,11,12,13,24,15,16,17,18,26,19,20,21,22);\r
+aWE("salom",3,4,5,6,0,7,9,10,2,11,12,13,25,15,16,14,17,18,27,19,20,21,22);\r
aWE("salome_",14);\r
aWE("salome_modulecatalog_serv",19);\r
aWE("salomeapp",15);\r
-aWE("salomeapprc",26);\r
+aWE("salomeapprc",27);\r
aWE("salomed",0);\r
-aWE("sam",6,12,24,16,17,19,22);\r
-aWE("sampl",25);\r
-aWE("sav",3,0,14,10,2,16,17,18,26);\r
-aWE("scal",3,24,18);\r
-aWE("scalar",23,24);\r
-aWE("schem",3,14,10);\r
+aWE("sam",6,12,25,16,14,17,19,22);\r
+aWE("sampl",14,26);\r
+aWE("sav",3,0,10,2,24,16,14,17,18,27);\r
+aWE("scal",3,25,18,28);\r
+aWE("scalar",23,25);\r
+aWE("scen",24,28);\r
+aWE("schem",3,10,14);\r
aWE("schema",10);\r
aWE("scientific",3);\r
aWE("screen",6,15);\r
-aWE("script",3,0,14,15,25,19);\r
+aWE("script",3,0,15,14,26,19);\r
aWE("scroll",8);\r
-aWE("se",6,8,14,13,17,18,19,21);\r
-aWE("search",4,14,13,17,20);\r
-aWE("second",0,14,24);\r
-aWE("section",14,16,18);\r
-aWE("sectionthi",14);\r
-aWE("sed",14);\r
+aWE("se",6,8,24,13,14,17,18,19,21,28);\r
+aWE("search",4,13,14,17,20);\r
+aWE("second",0,25,14);\r
+aWE("section",24,16,14,18);\r
aWE("seen",23);\r
-aWE("select",5,6,0,1,8,14,23,13,24,17,25,18,20);\r
+aWE("select",5,6,0,1,8,23,24,13,25,14,17,26,18,20,28);\r
aWE("selectall",16);\r
-aWE("selection",2,23,24);\r
+aWE("selection",2,23,25);\r
aWE("send",14);\r
aWE("sensitiv",16,21);\r
-aWE("separat",3,14,24,16);\r
+aWE("separat",3,25,16,14);\r
aWE("serv",3,19);\r
aWE("server",3,15);\r
aWE("servic",3,14,19);\r
-aWE("session",1,23,13,24,15,17,18,26,21,22);\r
-aWE("set",4,0,1,8,14,10,23,24,15,16,17,18,26,21,22);\r
-aWE("setting",14,24,16,17,18,26);\r
+aWE("session",1,23,13,25,15,17,18,27,21,22);\r
+aWE("set",4,0,1,8,10,23,24,25,15,16,14,17,18,27,21,22,28);\r
+aWE("setting",25,16,14,17,18,27);\r
aWE("sever",10);\r
aWE("sh",14);\r
-aWE("shad",1,23,24);\r
-aWE("shap",24);\r
+aWE("shad",1,23,25);\r
+aWE("shap",24,25);\r
aWE("shar",15);\r
-aWE("shell",14,2,11,15);\r
+aWE("shel",14);\r
+aWE("shell",2,11,15,14);\r
aWE("short",14,20);\r
aWE("shot",6);\r
aWE("should",9,14,17,19);\r
-aWE("show",14);\r
+aWE("show",24,25,14,28);\r
aWE("shown",8,14);\r
aWE("shrink",23);\r
-aWE("sid",23,24);\r
-aWE("signal",14,2);\r
+aWE("sid",23,25,14);\r
+aWE("signal",2,14);\r
aWE("signatur",14);\r
aWE("sigterm",14);\r
+aWE("silent",14);\r
+aWE("simp",14);\r
aWE("simpl",3);\r
aWE("simplify",14);\r
aWE("simulat",3);\r
aWE("simulation",10,11);\r
-aWE("simultaneous",6,9,14);\r
+aWE("simultaneous",6,9,25,14);\r
aWE("sinc",2);\r
aWE("singl",14);\r
aWE("sip",14);\r
aWE("sipdir",14);\r
aWE("situation",3);\r
-aWE("siz",6,23,24,16,17,25,18);\r
+aWE("siz",6,23,25,16,17,26,18);\r
aWE("skip",14);\r
-aWE("slight",14);\r
-aWE("slow",24);\r
-aWE("smallest",24);\r
+aWE("slow",25);\r
+aWE("small",24,28);\r
+aWE("smallest",25);\r
aWE("smooth",18);\r
-aWE("smoothnes",24);\r
-aWE("so",3,7,14,24,15,20,21);\r
+aWE("smoothnes",25);\r
+aWE("so",3,7,25,15,14,20,21);\r
aWE("softwar",3,10,11);\r
aWE("solution",10);\r
aWE("solv",10);\r
aWE("someth",14);\r
aWE("sort",18);\r
aWE("sort_path",14);\r
-aWE("sourc",14,10,11,15);\r
-aWE("spac",14,23,24);\r
-aWE("spacemous",24);\r
-aWE("spe",24);\r
-aWE("special",3,14,13,24,15,16,17,18);\r
-aWE("specifi",3,24);\r
-aWE("specific",3,0,10,15,16,26,20);\r
+aWE("sourc",10,11,15,14);\r
+aWE("spac",23,25,14);\r
+aWE("spacemous",25);\r
+aWE("spe",25);\r
+aWE("special",3,13,25,15,16,14,17,18);\r
+aWE("specifi",3,25);\r
+aWE("specific",3,0,10,15,16,14,27,20);\r
aWE("specification",11);\r
aWE("specify",17,18,19);\r
-aWE("spher",24);\r
+aWE("spher",25);\r
aWE("spin",1);\r
aWE("splash",15);\r
aWE("splin",18);\r
aWE("split",6);\r
-aWE("sprit",24);\r
-aWE("stamp",24);\r
+aWE("sprit",25);\r
+aWE("stamp",25);\r
aWE("standalon",2,15);\r
-aWE("standard",3,5,14,2,13,24,16,17,26,19);\r
+aWE("standard",3,5,2,13,25,16,14,17,27,19);\r
aWE("standard_version",14);\r
-aWE("start",6,9,14,16,18,26,19,22);\r
+aWE("start",6,9,25,16,14,18,27,19,22);\r
+aWE("start_salom",14);\r
aWE("stat",0,14,17,18);\r
aWE("station",3);\r
aWE("statu",14);\r
-aWE("step",1,14,10,24);\r
-aWE("still",14);\r
-aWE("stor",3,0,14,13,17,18,19);\r
+aWE("step",1,10,25,14);\r
+aWE("stop",14);\r
+aWE("stor",3,0,13,14,17,18,19);\r
aWE("str",14);\r
-aWE("strict",14);\r
+aWE("stretch",28);\r
+aWE("strict",24,14,28);\r
aWE("strong",14);\r
-aWE("struck",25);\r
-aWE("structur",3,14,10,2,13,21);\r
+aWE("struck",26);\r
+aWE("structur",3,10,2,13,25,14,21);\r
aWE("structural",10);\r
aWE("studi",5,6,7,9,10,2,13,16,17);\r
-aWE("study",3,5,6,0,7,8,9,10,2,13,24,15,16,17,18,26,19,21,22);\r
+aWE("study",3,5,6,0,7,8,9,10,2,13,25,15,16,17,18,27,19,21,22);\r
aWE("study1",5);\r
-aWE("styl",25,18);\r
-aWE("sub",14,20);\r
+aWE("stuf",28);\r
+aWE("styl",26,18);\r
+aWE("sub",24,14,20);\r
aWE("submenu",5,16,18);\r
-aWE("subset",25);\r
-aWE("substitut",24);\r
+aWE("subsequent",14);\r
+aWE("subset",26);\r
+aWE("substitut",25);\r
aWE("successful",14);\r
aWE("suit",2);\r
aWE("summariz",14);\r
-aWE("superposition",24);\r
+aWE("superposition",25);\r
aWE("superv",15);\r
aWE("supervcontain",15);\r
aWE("supervision",2,15,19);\r
aWE("supervisor",11,18,19);\r
aWE("supplementary",21,22);\r
-aWE("support",14,10,19);\r
+aWE("suppli",14);\r
+aWE("support",10,14,19);\r
aWE("supported_installation_mod",14);\r
aWE("sur",14);\r
aWE("surfac",23);\r
-aWE("sweep",24);\r
+aWE("sweep",25);\r
aWE("swig",14);\r
-aWE("switch",6,14,2,24);\r
-aWE("system",3,4,14,10,12,24,20);\r
-aWE("t",7,14,24,15,16,17,18,19);\r
+aWE("switch",6,2,25,14);\r
+aWE("symbol",14);\r
+aWE("system",3,4,10,12,25,14,20);\r
+aWE("t",7,24,25,15,16,14,17,18,19,28);\r
aWE("tab",6,20,22);\r
-aWE("tabl",14,25);\r
+aWE("tabl",25,26);\r
aWE("tag",14);\r
aWE("tailor",10);\r
aWE("tak",3,14);\r
-aWE("taken",14,15);\r
+aWE("taken",25,15,14);\r
aWE("target",14);\r
aWE("target_directory",14);\r
aWE("target_platform",14);\r
aWE("targetdir",14);\r
aWE("task",0);\r
aWE("tcl",14);\r
+aWE("tcl_version",14);\r
+aWE("tclconfig",14);\r
aWE("tclhom",14);\r
-aWE("tclsh8",14);\r
aWE("technologi",3);\r
aWE("technological",10);\r
-aWE("technology",3,14);\r
-aWE("temp",14);\r
+aWE("technology",3,24);\r
aWE("temp_directory",14);\r
aWE("temp_fold",14);\r
aWE("tempdir",14);\r
aWE("temporary",14);\r
aWE("temporarydiskspac",14);\r
-aWE("tensor",24);\r
+aWE("tensor",25);\r
aWE("term",10,12,20);\r
-aWE("terminal",14,15);\r
+aWE("terminal",15,14);\r
aWE("test",3,14,19);\r
-aWE("text",14,12,20);\r
-aWE("textur",24);\r
-aWE("them",3,6,14,10,23,15,16,25,22);\r
+aWE("text",12,14,20);\r
+aWE("textur",25);\r
+aWE("them",3,6,10,23,24,15,16,14,26,22,28);\r
aWE("therefor",14);\r
aWE("third",11);\r
aWE("thos",14,18,20);\r
aWE("thre",14);\r
-aWE("threshold",24);\r
-aWE("thu",3,0);\r
-aWE("tim",3,6,0,8,14,10,24,15,17,26,19,22);\r
-aWE("titl",14,23,24,18);\r
+aWE("threshold",25);\r
+aWE("thu",3,0,14);\r
+aWE("tick",28);\r
+aWE("tim",3,6,0,8,10,25,15,14,17,27,19,22);\r
+aWE("tip",14);\r
+aWE("titl",23,25,14,18);\r
aWE("tk",14);\r
+aWE("tk_version",14);\r
+aWE("tkconfig",14);\r
aWE("tmp",14);\r
aWE("tmp_disk_spac",14);\r
-aWE("togeth",14);\r
-aWE("toggl",23,24,21);\r
-aWE("toleranc",24);\r
-aWE("tool",3,14,2,11,16,19,22);\r
-aWE("toolbar",3,5,7,2,13,16,17);\r
-aWE("toolkit",2);\r
-aWE("top",5,14,2,24,16,18);\r
+aWE("toggl",23,25,21);\r
+aWE("toleranc",25);\r
+aWE("tool",3,2,11,16,14,19,22);\r
+aWE("toolbar",3,5,7,2,24,13,16,17,28);\r
+aWE("toolkit",2,14);\r
+aWE("tooltip",14);\r
+aWE("top",5,2,25,16,14,18);\r
aWE("topic",4,12,20);\r
aWE("topmost",14);\r
aWE("total",14);\r
aWE("totality",3);\r
aWE("touch",0);\r
-aWE("tr",14);\r
aWE("train",10);\r
-aWE("translat",24);\r
-aWE("translation",24);\r
-aWE("transparency",24);\r
-aWE("transparent",24);\r
+aWE("transformation",24);\r
+aWE("translat",25);\r
+aWE("translation",25);\r
+aWE("transparency",25);\r
+aWE("transparent",25);\r
aWE("tre",5,14,18,19,21);\r
aWE("tri",14);\r
-aWE("trihedron",18);\r
+aWE("triangl",24,28);\r
+aWE("trihedron",24,18,28);\r
aWE("trolltech",14);\r
+aWE("troubl",14);\r
aWE("tru",14);\r
aWE("try",8,14,17,19);\r
aWE("try_exist",14);\r
aWE("try_nativ",14);\r
aWE("try_preinstal",14);\r
-aWE("twic",24);\r
-aWE("two",6,14,12,24,17,19);\r
-aWE("typ",0,14,23,24,25,18,19);\r
+aWE("turn",14);\r
+aWE("twic",25);\r
+aWE("two",6,12,25,14,17,19);\r
+aWE("typ",0,23,25,14,26,18,19);\r
aWE("typical",19);\r
aWE("u",18);\r
aWE("ultimat",3);\r
-aWE("uncheck",24,16);\r
-aWE("underlin",25);\r
+aWE("uncheck",24,25,16,28);\r
+aWE("underlin",26);\r
+aWE("unfortunare",14);\r
aWE("unfortunate",14);\r
aWE("uniqu",14);\r
-aWE("unit",24);\r
+aWE("unit",25);\r
aWE("unix",4);\r
aWE("unload",13,17);\r
aWE("unnecessary",14);\r
+aWE("unpack",14);\r
aWE("unselect",14);\r
aWE("unus",0);\r
-aWE("up",14,10,12,13,16,17,25,21);\r
-aWE("updat",23,24,16,17,19);\r
+aWE("up",10,12,13,16,14,17,26,21);\r
+aWE("updat",23,25,16,17,19);\r
aWE("upload",2,16);\r
-aWE("us",3,0,1,8,9,14,10,2,11,23,24,15,16,17,25,18,26,19,20,21,22);\r
+aWE("us",3,0,1,8,9,10,2,11,23,24,25,15,16,14,17,26,18,27,19,20,21,22,28);\r
aWE("usability",2);\r
-aWE("usag",14,24);\r
+aWE("usag",25,14);\r
aWE("user",8,19);\r
aWE("usr",14);\r
aWE("usual",14);\r
aWE("v",14,18);\r
aWE("valid",18);\r
aWE("validation",3);\r
-aWE("valu",1,14,23,24,18,21);\r
-aWE("variabl",14,15);\r
+aWE("valu",1,23,25,14,18,21);\r
+aWE("variabl",15,14);\r
aWE("variety",4,12);\r
-aWE("variou",14,11);\r
+aWE("variou",11,14);\r
aWE("ve",14,18);\r
-aWE("vector",24);\r
-aWE("ver",14);\r
-aWE("ver_major",14);\r
-aWE("ver_minor",14);\r
-aWE("version",6,14,2,16,26,19);\r
-aWE("vertical",6,23,24,18);\r
-aWE("very",14,10,2,24,16);\r
-aWE("view",3,5,8,14,2,23,12,24,16,18,20,22);\r
+aWE("vector",1,25);\r
+aWE("version",6,2,16,14,27,19);\r
+aWE("vertic",1);\r
+aWE("vertical",6,23,25,18);\r
+aWE("very",10,2,25,16,14);\r
+aWE("via",24,14,28);\r
+aWE("view",3,5,8,2,23,12,24,25,16,14,18,20,22,28);\r
aWE("viewer",5,6,2,11,16,17,18);\r
+aWE("visibl",24,28);\r
aWE("visual",11);\r
-aWE("visualisation",1,24);\r
-aWE("visualiz",10,24);\r
+aWE("visualisation",1,25);\r
+aWE("visualiz",10,24,25,28);\r
aWE("visualization",9,10,2,11,16);\r
-aWE("vtk",5,6,14,2,18);\r
+aWE("vtk",5,6,2,14,18,28);\r
aWE("vtkhom",14);\r
aWE("wait",14);\r
-aWE("want",6,14,12);\r
-aWE("warn",8,14,24);\r
-aWE("way",14,11,19);\r
+aWE("want",6,12,14);\r
+aWE("warn",8,25,14);\r
+aWE("way",11,14,19);\r
aWE("web",4);\r
aWE("welcom",4,10);\r
-aWE("what",3,14,10,12,26,21);\r
+aWE("what",3,10,12,14,27,21);\r
aWE("whenev",23,18);\r
aWE("wherev",6);\r
-aWE("wheth",14);\r
aWE("whil",3);\r
-aWE("whol",24,18,26);\r
+aWE("whol",25,18,27);\r
aWE("whos",23);\r
-aWE("wid",4,11,25);\r
+aWE("why",14);\r
+aWE("wid",4,11,26);\r
aWE("widget",11);\r
-aWE("width",23,24);\r
-aWE("will",4,5,0,8,14,23,13,24,15,16,17,25,18,26,19,21,22);\r
-aWE("window",4,5,6,9,14,2,12,24,15,16,17,25,18,22);\r
+aWE("width",23,25);\r
+aWE("will",4,5,0,8,23,24,13,25,15,16,14,17,26,18,27,19,21,22);\r
+aWE("window",4,5,6,9,2,12,25,15,16,14,17,26,18,22);\r
+aWE("wir",1);\r
aWE("wirefram",1,23);\r
-aWE("wish",6);\r
-aWE("wish8",14);\r
+aWE("wish",6,24,14,28);\r
aWE("within",3,5,7,22);\r
-aWE("without",3,0,14,24,15,26);\r
+aWE("without",3,0,25,15,14,27);\r
aWE("wizard",14);\r
-aWE("won",7,14,15);\r
+aWE("won",7,15);\r
aWE("word",20);\r
-aWE("work",3,6,0,9,14,11,24,16,17);\r
-aWE("would",14,16,17,19);\r
-aWE("writ",10,17);\r
+aWE("work",3,6,0,9,11,24,25,16,14,17);\r
+aWE("would",16,17,19);\r
+aWE("writ",10,14,17);\r
aWE("written",3,17);\r
aWE("wrong",14);\r
aWE("www",3);\r
-aWE("x",23,24,15);\r
-aWE("xml",14,15,19);\r
+aWE("x",23,25,15);\r
+aWE("xml",15,14,19);\r
aWE("xterm",15);\r
aWE("xxxxx",14);\r
-aWE("y",14,23,24);\r
+aWE("xy",25);\r
+aWE("y",23,25);\r
aWE("year",10);\r
aWE("yes",8,14);\r
aWE("yet",14,18);\r
-aWE("your",5,6,0,7,8,14,23,24,15,17,18,26,19);\r
-aWE("yourselv",25);\r
+aWE("your",5,6,0,7,8,23,25,15,14,17,18,27,19);\r
+aWE("yourselv",26);\r
aWE("z",15);\r
-aWE("zon",5,6,24);\r
-aWE("zoom",24,17);\r
+aWE("zon",5,6,25);\r
+aWE("zoom",24,25,17,28);\r
\r
//-->\r
</script>\r
aTE(2,0,"SALOME architecture","kernel/about_salome_pro_architecture.htm");\r
aTE(2,0,"Installing SALOME","kernel/readme.html");\r
aTE(2,0,"Running SALOME","kernel/running_salome_pro.htm");\r
- aTE(1,21,"GUI module");\r
+ aTE(1,24,"GUI module");\r
aTE(2,0,"Introduction to GUI","introduction_to_gui.htm");\r
aTE(2,0,"Getting started","kernel/getting_started2.htm");\r
aTE(2,0,"SALOME desktop","kernel/salome_pro_desktop.htm");\r
aTE(2,0,"Using Object Browser","kernel/using_object_browser.htm");\r
aTE(2,0,"Using Registry tool","kernel/using_registry.htm");\r
aTE(2,0,"Using Catalog Generator","kernel/using_catalog_generator.htm");\r
+ aTE(1,2,"Viewers");\r
+ aTE(2,0,"OCC 3D Viewer","occ_3d_viewer.htm");\r
+ aTE(2,0,"VTK 3D Viewer","vtk_3d_viewer.htm");\r
aTE(1,6,"Setting Preferences");\r
aTE(2,0,"Setting Preferences","setting_preferences.htm");\r
aTE(2,0,"Select Color and Font","select_color_and_font.htm");\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Search Result</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whlang.js"></script>\r
-<script language="javascript1.2" src="whfhost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-if(window.gbWhFHost)\r
-{\r
- \r
- \r
- setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
- setFont("Error", "Arial","9pt","#000000","normal","normal","none");\r
- setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
- setActiveBgColor("#cccccc");\r
- setMargin("0pt");\r
- setIndent("9pt");\r
- FtsWriteClassStyle();\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" scroll="auto" bgcolor="white">\r
-</body>\r
-</html>\r
-\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Search Frame</TITLE>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script LANGUAGE="javascript1.2">\r
-<!--\r
-var gbIndexLayerInit = false;\r
-var strWrite="";\r
-if (window.gbWhVer&&window.gbWhProxy&&window.gbWhMsg)\r
-{\r
- if (gbMac)\r
- strWrite="<FRAMESET ROWS='45,100%' framespacing=0 frameborder=1>";\r
- else\r
- strWrite="<FRAMESET ROWS='60,100%' framespacing=0 frameborder=1>";\r
- strWrite +="<FRAME SRC='whfform.htm' title='search form frame' name='ftsform' noresize='yes' scrolling='no'>";\r
- strWrite +="<FRAME SRC='whfbody.htm' title='search result frame' name='ftsbody' scrolling='yes'>";\r
- strWrite +="</FRAMESET>";\r
- document.write(strWrite);\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Search Form</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<style>\r
-<!--\r
-body {margin:0;}\r
--->\r
-</style>\r
-<body bgcolor="#c0c0c0">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whform.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gstrInput = "";\r
-function ftsLookup(bCR)\r
-{\r
- if (bCR)\r
- {\r
- var strInput = document.FtsInputForm.keywordField.value.toUpperCase();\r
- if (strInput != "") {\r
- var oMsg = new whMessage(WH_MSG_SEARCHFTSKEY, this, 1, strInput);\r
- if (!SendMessage(oMsg))\r
- {\r
- gstrInput = strInput;\r
- }\r
- else\r
- gstrInput = "";\r
- }\r
-\r
- if (gbMac) {\r
- document.FtsInputForm.keywordField.focus();\r
- }\r
- }\r
- return;\r
-}\r
-\r
-function beforeInit()\r
-{\r
- var oParam = new Object();\r
- oParam.sValue = "";\r
- var oMsg = new whMessage(WH_MSG_GETSEARCHS, this, 1, oParam);\r
- if (SendMessage(oMsg))\r
- {\r
- if (oParam.sValue != "" && oParam.sValue != "- Search -")\r
- {\r
- document.FtsInputForm.keywordField.value = oParam.sValue;\r
- gfunLookUp(true);\r
- }\r
- }\r
- init(); \r
-}\r
-\r
-function window_unload()\r
-{\r
- UnRegisterListener2(this, WH_MSG_SHOWTOC);\r
- UnRegisterListener2(this, WH_MSG_SHOWIDX);\r
- UnRegisterListener2(this, WH_MSG_SHOWFTS);\r
- UnRegisterListener2(this, WH_MSG_SHOWGLO);\r
- UnRegisterListener2(this, WH_MSG_SEARCHTHIS);\r
- UnRegisterListener2(this, WH_MSG_BACKUPSEARCH);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- if (oMsg.nMessageId == WH_MSG_SHOWFTS)\r
- {\r
- document.FtsInputForm.keywordField.focus();\r
- }\r
- else if (oMsg.nMessageId == WH_MSG_SHOWIDX ||\r
- oMsg.nMessageId == WH_MSG_SHOWTOC || \r
- oMsg.nMessageId == WH_MSG_SHOWGLO)\r
- {\r
- document.FtsInputForm.keywordField.blur();\r
- }\r
- else if (oMsg.nMessageId == WH_MSG_SEARCHTHIS)\r
- {\r
- if (oMsg.oParam != "- Search -")\r
- {\r
- document.FtsInputForm.keywordField.value = oMsg.oParam;\r
- gfunLookUp(true);\r
- }\r
- }\r
- else if (oMsg.nMessageId == WH_MSG_BACKUPSEARCH)\r
- {\r
- if (gstrInput)\r
- {\r
- oMsg.oParam = gstrInput;\r
- gstrInput = "";\r
- return false;\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-if (window.gbWhForm)\r
-{\r
- RegisterListener2(this, WH_MSG_SHOWTOC);\r
- RegisterListener2(this, WH_MSG_SHOWIDX);\r
- RegisterListener2(this, WH_MSG_SHOWFTS);\r
- RegisterListener2(this, WH_MSG_SHOWGLO);\r
- RegisterListener2(this, WH_MSG_SEARCHTHIS);\r
- RegisterListener2(this, WH_MSG_BACKUPSEARCH);\r
- gfunLookUp = ftsLookup;\r
- gfunInit = null;\r
- gstrFormName = "FtsInputForm"\r
- gsTitle = "Type in the word(s) to search for:";\r
- gsTitle = "Type in the word(s) to search for:";\r
- setGoImage1("");\r
- \r
- \r
- \r
- \r
- \r
- \r
- setGoText("Go");\r
- setFont("Title", "Arial","9pt","#000000","normal","normal","none");\r
- \r
- \r
- document.write(getFormHTML());\r
- writeFormStyle();\r
- window.onload = beforeInit;\r
- window.onunload=window_unload;\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.003\r
-var gsSK2=null;\r
-var gsSK=null;\r
-var gsFtsBreakChars="\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=\x85\x92\x93\x94\x95\x96\x97\x99\xA9\xAE\xB7";\r
-var gnCLF=0;\r
-var gsHelpCannotSearch="Cannot search for that phrase.";\r
-var gsNoTopics="No Topics Found.";\r
-var gsLoadingDivID="LoadingDiv";\r
-var gsLoadingMsg="Loading data, please wait...";\r
-var gsSearchMsg="Searching...";\r
-var gsResultDivID="ResultDiv";\r
-var gaaFCD=new Array();\r
-var gaaFTCD=new Array();\r
-var goCF=null;\r
-var goCTF=null;\r
-var gaTI=null;\r
-var gnCurrentOp=0;\r
-var gbNot=false;\r
-var gbReady=false;\r
-var gnLoadFts=1;\r
-var gnCacheLimits=5;\r
-var gaCCD=new Array();\r
-var gbXML=false;\r
-var gaData=new Array();\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var gsMargin="0pt";\r
-var gsIndent="0pt";\r
-var gsCheckKey=null;\r
-var gnIndexNum=0;\r
-var gaFtsContentsCon=null;\r
-var gaTopicCheckInfo=null;\r
-var gnTopicCheck=0;\r
-var goFont=null;\r
-var goErrFont=null;\r
-var goHoverFont=null;\r
-var gsABgColor="#cccccc";\r
-var gbWhFHost=false;\r
-var gbFirst=false;\r
-\r
-function setBackground(sBgImage)\r
-{\r
- gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- if(sType=="Normal")\r
- goFont=vFont;\r
- else if(sType=="Error")\r
- goErrFont=vFont;\r
- else if(sType=="Hover")\r
- goHoverFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
- gsABgColor=sBgColor;\r
-}\r
-\r
-function setMargin(sMargin)\r
-{\r
- gsMargin=sMargin;\r
-}\r
-\r
-function setIndent(sIndent)\r
-{\r
- gsIndent=sIndent;\r
-}\r
-\r
-function updateCache(oCF)\r
-{\r
- var len=gaCCD.length;\r
- if(len<gnCacheLimits*gnCLF)\r
- gaCCD[len]=oCF;\r
- else{\r
- gaCCD[0].aTopics=null;\r
- gaCCD[0].aFtsKeys=null;\r
- removeItemFromArray(gaCCD,0);\r
- gaCCD[len-1]=oCF;\r
- }\r
-}\r
-\r
-function addFtsInfo(sPPath,sDPath,sFtsFile)\r
-{\r
- gaData[gaData.length]=new ftsInfo(sPPath,sDPath,sFtsFile);\r
-}\r
-\r
-function onLoadXMLError()\r
-{\r
- if(gnLoadFts==1)\r
- {\r
- var aFCD=new Array();\r
- var aFTCD=new Array();\r
- ftsReady(aFCD,aFTCD);\r
- }\r
- else if(gnLoadFts==3)\r
- {\r
- var aTopics=new Array();\r
- putFtsTData(aTopics);\r
- }\r
- else if(gnLoadFts==2)\r
- {\r
- putFtsWData(aFtsContents);\r
- var aFtsContents=new Array();\r
- }\r
-}\r
-\r
-function putDataXML(xmlDoc,sDocPath)\r
-{\r
- if(gnLoadFts==1)\r
- {\r
- var node=xmlDoc.lastChild;\r
- if(node)\r
- {\r
- var oChild=node.firstChild;\r
- var aFCD=new Array();\r
- var aFTCD=new Array();\r
- while(oChild)\r
- {\r
- if(oChild.nodeName=="chunkinfo")\r
- {\r
- var sURL=oChild.getAttribute("url");\r
- var sFirst=oChild.getAttribute("first");\r
- var sLast=oChild.getAttribute("last");\r
- if(sURL&&sFirst&&sLast)\r
- {\r
- item=new Object();\r
- item.sStartKey=sFirst;\r
- item.sEndKey=sLast;\r
- item.sFileName=sURL;\r
- aFCD[aFCD.length]=item;\r
- }\r
- }\r
- else if(oChild.nodeName=="tchunkinfo")\r
- {\r
- var sURL=oChild.getAttribute("url");\r
- var nB=parseInt(oChild.getAttribute("first"));\r
- var nE=parseInt(oChild.getAttribute("last"));\r
- if(sURL&&sFirst&&sLast)\r
- {\r
- item=new Object();\r
- item.nBegin=nB;\r
- item.nEnd=nE;\r
- item.sFileName=sURL;\r
- aFTCD[aFTCD.length]=item;\r
- }\r
-\r
- }\r
- oChild=oChild.nextSibling;\r
- }\r
- ftsReady(aFCD,aFTCD);\r
- }\r
- }\r
- else if(gnLoadFts==3)\r
- {\r
- var node=xmlDoc.lastChild;\r
- if(node)\r
- {\r
- var oChild=node.firstChild;\r
- var aTopics=new Array();\r
- while(oChild)\r
- {\r
- if(oChild.nodeName=="topic")\r
- {\r
- var name=oChild.getAttribute("name");\r
- var sURL=oChild.getAttribute("url");\r
- if(name&&name.length>0&&sURL)\r
- {\r
- var topic=new Object();\r
- topic.sTopicTitle=name;\r
- topic.sTopicURL=sURL;\r
- aTopics[aTopics.length]=topic;\r
- }\r
- }\r
- oChild=oChild.nextSibling;\r
- }\r
- putFtsTData(aTopics);\r
- }\r
- }\r
- else if(gnLoadFts==2)\r
- {\r
- var node=xmlDoc.lastChild;\r
- if(node)\r
- {\r
- var oChild=node.firstChild;\r
- var aFtsContents=new Array();\r
- while(oChild)\r
- {\r
- if(oChild.nodeName=="key")\r
- {\r
- var name=oChild.getAttribute("name");\r
- if(name&&name.length>0)\r
- {\r
- var item=new Object();\r
- item.sItemName=name;\r
- aFtsContents[aFtsContents.length]=item;\r
- var oChildChild=oChild.firstChild;\r
- while(oChildChild)\r
- {\r
- if(oChildChild.nodeName=="#text")\r
- {\r
- var sIDs=oChildChild.nodeValue;\r
- if(sIDs)\r
- {\r
- var nBPos=0;\r
- do\r
- {\r
- var nPos=sIDs.indexOf(",",nBPos);\r
- var sID=null;\r
- if(nPos!=-1)\r
- sID=sIDs.substring(nBPos,nPos);\r
- else\r
- sID=sIDs.substring(nBPos);\r
-\r
- if(sID)\r
- {\r
- var id=parseInt(sID);\r
- if(!isNaN(id))\r
- {\r
- if(!item.aTopics)\r
- item.aTopics=new Array();\r
- item.aTopics[item.aTopics.length]=id;\r
- }\r
- }\r
- nBPos=nPos+1;\r
- }while(nBPos!=0&&nBPos<sIDs.length);\r
- }\r
- }\r
- oChildChild=oChildChild.nextSibling;\r
- }\r
- }\r
- }\r
- oChild=oChild.nextSibling;\r
- }\r
- putFtsWData(aFtsContents);\r
- }\r
- }\r
-}\r
-\r
-function ftsInfo(sPPath,sDPath,sFtsFile)\r
-{\r
- this.sPPath=sPPath;\r
- this.sDPath=sDPath;\r
- this.sFtsFile=sFtsFile;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- if(gsBgImage&&gsBgImage.length>0)\r
- {\r
- document.body.background=gsBgImage;\r
- }\r
- if(gsBgColor&&gsBgColor.length>0)\r
- {\r
- document.body.bgColor=gsBgColor;\r
- }\r
- writeResultDiv();\r
- loadFts();\r
- var oMsg=new whMessage(WH_MSG_SHOWFTS,this,1,null)\r
- SendMessage(oMsg);\r
-}\r
-\r
-function writeResultDiv()\r
-{\r
- var sHTML="<div id=\""+gsResultDivID+"\" style=\"POSITION:absolute;\"></div>";\r
- document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
-}\r
-\r
-function loadFts()\r
-{\r
- if(!gbReady)\r
- {\r
- var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
- if(SendMessage(oResMsg)&&oResMsg.oParam)\r
- {\r
- gbReady=true;\r
- var oProj=oResMsg.oParam;\r
- var aProj=oProj.aProj;\r
- gbXML=oProj.bXML;\r
- if(aProj.length>0)\r
- {\r
- var sLangId=aProj[0].sLangId;\r
- for(var i=0;i<aProj.length;i++)\r
- {\r
- if(aProj[i].sFts&&aProj[i].sLangId==sLangId)\r
- {\r
- addFtsInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sFts);\r
- }\r
- }\r
- }\r
- loadFD();\r
-\r
- } \r
- }\r
-}\r
-\r
-function loadFD()\r
-{\r
- if(gnCLF<gaData.length)\r
- {\r
- gnLoadFts=1;\r
- loadData2(gaData[gnCLF].sPPath+gaData[gnCLF].sDPath+gaData[gnCLF].sFtsFile);\r
- }\r
- else \r
- {\r
- var oMsg = new whMessage(WH_MSG_BACKUPSEARCH, this, 1, null);\r
- if (SendMessage(oMsg))\r
- {\r
- if (oMsg.oParam)\r
- {\r
- gsSK=oMsg.oParam.toLowerCase();\r
- findFTSKey();\r
- }\r
- }\r
- RegisterListener2(this, WH_MSG_SEARCHFTSKEY);\r
- }\r
-}\r
-\r
-function loadData2(sFile)\r
-{\r
- if(gbXML)\r
- loadDataXML(sFile);\r
- else\r
- loadData(sFile);\r
-}\r
-\r
-function findFTSKey()\r
-{\r
- gaTI=new Array();\r
- gnCurrentOp=1;\r
- gbNot=false;\r
- displayMsg(gsSearchMsg);\r
- if(gsSK!="")\r
- {\r
- gbFirst=true;\r
- findOneKey();\r
- }\r
-}\r
-\r
-function findOneKey()\r
-{\r
- if(gsSK && gsSK!="")\r
- {\r
- var sInput=gsSK;\r
- var sCW="";\r
- var nS=-1;\r
- var nSep=-1;\r
- for(var nChar=0;nChar<gsFtsBreakChars.length;nChar++){\r
- var nFound=sInput.indexOf(gsFtsBreakChars.charAt(nChar));\r
- if((nFound!=-1)&&((nS==-1)||(nFound<nS))){\r
- nS=nFound;\r
- nSep=nChar;\r
- }\r
- }\r
- if(nS==-1){\r
- sCW=sInput;\r
- sInput="";\r
- }else{\r
- sCW=sInput.substring(0,nS);\r
- sInput=sInput.substring(nS+1);\r
- }\r
-\r
- gsSK=sInput;\r
- \r
- if((sCW=="or")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="|"))){\r
- gnCurrentOp=0;\r
- gbNot=false;\r
- }else if((sCW=="and")||((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="&"))){\r
- gnCurrentOp=1;\r
- gbNot=false;\r
- }else if((sCW=="not")||\r
- ((nSep>=0)&&(gsFtsBreakChars.charAt(nSep)=="~"))){\r
- gbNot=!gbNot;\r
- }else if(sCW!=""&&!IsStopWord(sCW,gaFtsStop)){\r
- var sCurrentStem=GetStem(sCW);\r
- gsCW=sCurrentStem;\r
- ftsFindKeyword();\r
- return;\r
- }\r
- findOneKey();\r
- }\r
- else{\r
- displayTopics();\r
- checkAgain();\r
- }\r
-}\r
-\r
-function checkAgain()\r
-{\r
- gsCheckKey = "";\r
- gnIndexNum = 0;\r
- gsSK=gsSK2;\r
- gsSK2=null;\r
- if(gsSK!=null)\r
- setTimeout("findFTSKey();",1);\r
-}\r
-\r
-function displayTopics()\r
-{\r
- var sHTML="";\r
- var sLine="";\r
- for(var i=0;i<gaTI.length;i++){\r
- sLine+="<dt><nobr><a href='"+gaTI[i].sTopicURL+"'>"+_textToHtml(gaTI[i].sTopicTitle)+"</a></nobr></dt>";\r
- if(i>>4<<4==i)\r
- {\r
- sHTML+=sLine;\r
- sLine="";\r
- }\r
- }\r
- if(sLine.length>0)\r
- sHTML+=sLine;\r
-\r
- if(sHTML.length==0)\r
- sHTML="<P>"+gsNoTopics+"</P>"\r
- else\r
- sHTML="<dl>"+sHTML+"</dl>";\r
-\r
- var resultDiv=getElement(gsResultDivID);\r
- if(resultDiv)\r
- resultDiv.innerHTML=sHTML;\r
-}\r
-\r
-function displayMsg(sErrorMsg)\r
-{\r
- var sHTML="<P>"+sErrorMsg+"</P>";\r
-\r
- var resultDiv=getElement(gsResultDivID);\r
- if(resultDiv)\r
- resultDiv.innerHTML=sHTML;\r
-}\r
-\r
-function ftsFindKeyword()\r
-{\r
- var sKey=gsCW;\r
- var bNeedLoad=false;\r
- var aFtsContentsCon=null;\r
- var s=0;\r
- if(sKey==null) return;\r
- if(!gsCheckKey||sKey!=gsCheckKey||gnIndexNum==0)\r
- {\r
- aFtsContentsCon=new Array();\r
- gnCheck=0;\r
- gsCheckKey=sKey;\r
- gnTopicCheck=0;\r
- gaTopicCheckInfo=null;\r
- }\r
- else{\r
- s=gnIndexNum;\r
- aFtsContentsCon=gaFtsContentsCon;\r
- }\r
- for(var i=gnCheck;i<gaaFCD.length;i++)\r
- {\r
- var oCF=getChunkedFts(i,sKey);\r
- if(oCF)\r
- {\r
- if(!oCF.aFtsKeys&&oCF.sFileName!=null)\r
- {\r
- bNeedLoad=true;\r
- oCF.nProjId=i;\r
- goCF=oCF;\r
- gnIndexNum=s;\r
- gnCheck=i;\r
- gaFtsContentsCon=aFtsContentsCon;\r
- gnLoadFts=2;\r
- beginLoading();\r
- loadData2(gaData[i].sPPath+gaData[i].sDPath+oCF.sFileName);\r
- break;\r
- }\r
- else{\r
- aFtsContentsCon[s++]=oCF;\r
- }\r
- }\r
- }\r
- if(!bNeedLoad)\r
- {\r
- var aTI=gaTopicCheckInfo;\r
- for(var m=gnTopicCheck;m<aFtsContentsCon.length;m++)\r
- {\r
- var aTIPart=getTopics(aFtsContentsCon[m],sKey);\r
- if(aTIPart==null)\r
- {\r
- gnCheck=gaaFCD.length;\r
- gnTopicCheck=m;\r
- gaTopicCheckInfo=aTI;\r
- gaFtsContentsCon=aFtsContentsCon;\r
- return;\r
- }\r
- if(m==0)\r
- aTI=aTIPart;\r
- else\r
- aTI=mergeTopics(aTI,aTIPart);\r
- }\r
- if(mergewithPreviousResult(aTI))\r
- {\r
- gbFirst=false;\r
- findOneKey();\r
- }\r
- else\r
- checkAgain();\r
- }\r
-}\r
-\r
-function mergewithPreviousResult(aTI)\r
-{\r
- if(aTI!=null&&aTI.length!=0)\r
- {\r
- var nNumTopics=aTI.length;\r
- if(gnCurrentOp==0||gbFirst){\r
- if(gbNot){\r
- displayMsg(gsHelpCannotSearch);\r
- return false;\r
- }else{\r
- var aLS,aSS;\r
- if(gaTI.length>=aTI.length)\r
- {\r
- aLS=gaTI;\r
- aSS=aTI;\r
- }\r
- else\r
- {\r
- aLS=aTI;\r
- aSS=gaTI;\r
- }\r
- var s=0;\r
- for(var i=0;i<aSS.length;i++)\r
- {\r
- var bAlreadyThere=false;\r
- for(var j=s;j<aLS.length;j++)\r
- {\r
- if(aSS[i].equalTo(aLS[j]))\r
- {\r
- bAlreadyThere=true;\r
- s=j;\r
- break;\r
- }\r
- }\r
- if(!bAlreadyThere)\r
- {\r
- insertTopic(aLS,aSS[i]);\r
- }\r
- }\r
- gaTI=aLS;\r
- }\r
- }else if(gnCurrentOp==1){\r
- if(gbNot){\r
- var s=0;\r
- for(var i=0;i<aTI.length;i++)\r
- {\r
- for(var j=s;j<gaTI.length;j++)\r
- {\r
- if(aTI[i].equalTo(gaTI[j]))\r
- {\r
- removeItemFromArray(gaTI,j);\r
- s=j;\r
- break;\r
- }\r
- }\r
- }\r
- }else{\r
- var s=0;\r
- for(var i=0;i<gaTI.length;i++)\r
- {\r
- var bFound=false;\r
- for(var j=s;j<aTI.length;j++)\r
- {\r
- if(gaTI[i].equalTo(aTI[j]))\r
- {\r
- bFound=true;\r
- s=j;\r
- }\r
- }\r
- if(!bFound)\r
- {\r
- removeItemFromArray(gaTI,i);\r
- i--;\r
- }\r
- } \r
- }\r
- }\r
- }else{\r
- if((gnCurrentOp==1)&&(!gbNot)){\r
- gaTI.length=0;\r
- }else if((gnCurrentOp==0)&&(gbNot)){\r
- displayMsg(gsHelpCannotSearch);\r
- return false;\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-function insertTopic(aTI,oTI)\r
-{\r
- var nB=0;\r
- var nE=aTI.length-1;\r
- if(nE>=0)\r
- {\r
- var nM;\r
- var bFound=false;\r
- do{\r
- nM=(nB+nE)>>1;\r
- if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)>0)\r
- nE=nM-1;\r
- else if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)\r
- nB=nM+1;\r
- else\r
- {\r
- bFound=true;\r
- break;\r
- }\r
- }while(nB<=nE);\r
- if(bFound)\r
- insertItemIntoArray(aTI,nM,oTI);\r
- else\r
- {\r
- if(compare(aTI[nM].sTopicTitle,oTI.sTopicTitle)<0)\r
- insertItemIntoArray(aTI,nM+1,oTI);\r
- else\r
- insertItemIntoArray(aTI,nM,oTI);\r
- }\r
- }\r
- else\r
- aTI[0]=oTI;\r
-}\r
-\r
-function mergeTopics(aTI1,aTI2)\r
-{\r
- var i1=0;\r
- var i2=0;\r
- var len1=aTI1.length;\r
- var len2=aTI2.length;\r
- var aTopicNew=new Array();\r
- var i=0;\r
- while(i1<len1||i2<len2)\r
- {\r
- if(i1<len1&&i2<len2)\r
- {\r
- if(compare(aTI1[i1].sTopicTitle,aTI2[i2].sTopicTitle)<0)\r
- aTopicNew[i++]=aTI1[i1++];\r
- else\r
- aTopicNew[i++]=aTI2[i2++];\r
- }\r
- else if(i1<len1)\r
- aTopicNew[i++]=aTI1[i1++];\r
- else if(i2<len2)\r
- aTopicNew[i++]=aTI2[i2++];\r
- }\r
- return aTopicNew;\r
-}\r
-\r
-function getTopics(oCF,sKey)\r
-{\r
- var aTIPart=new Array();\r
- if(oCF&&oCF.aFtsKeys)\r
- {\r
- var keys=oCF.aFtsKeys;\r
- var nB=0;\r
- var nE=keys.length-1;\r
- var nM=-1;\r
- var bFound=false;\r
- do{\r
- nM=(nB+nE)>>1;\r
- if(compare(keys[nM].sItemName,sKey)>0)\r
- nE=nM-1;\r
- else if(compare(keys[nM].sItemName,sKey)<0)\r
- nB=nM+1;\r
- else{\r
- bFound=true;\r
- break;\r
- }\r
- }while(nB<=nE);\r
- if(bFound)\r
- {\r
- if(keys[nM].aTopics)\r
- {\r
- for(var i=0;i<keys[nM].aTopics.length;i++)\r
- {\r
- var oTC=getTopicChunk(gaaFTCD[oCF.nProjId],keys[nM].aTopics[i]);\r
- if(oTC.aTopics)\r
- {\r
- aTIPart[aTIPart.length]=\r
- new topicInfo(oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicTitle,\r
- gaData[oCF.nProjId].sPPath+oTC.aTopics[keys[nM].aTopics[i]-oTC.nBegin].sTopicURL);\r
- }\r
- else{\r
- goCTF=oTC;\r
- gnLoadFts=3;\r
- beginLoading();\r
- loadData2(gaData[oCF.nProjId].sPPath+gaData[oCF.nProjId].sDPath+oTC.sFileName);\r
- return null;\r
- }\r
- }\r
- }\r
- }\r
- }\r
- return aTIPart;\r
-}\r
-\r
-function getTopicChunk(aFTCD,nTopicId)\r
-{\r
- if(aFTCD&&aFTCD.length)\r
- {\r
- var nB=0;\r
- var nE=aFTCD.length-1;\r
- var nM=-1;\r
- var bFound=false;\r
- do{\r
- nM=(nB+nE)>>1;\r
- if(aFTCD[nM].nBegin>nTopicId)\r
- nE=nM-1;\r
- else if(aFTCD[nM].nEnd<nTopicId)\r
- nB=nM+1;\r
- else{\r
- bFound=true;\r
- break;\r
- }\r
- }while(nB<=nE);\r
- if(bFound)\r
- return aFTCD[nM];\r
- }\r
- return null;\r
-}\r
-\r
-function endLoading()\r
-{\r
- var oDiv=getElement(gsLoadingDivID);\r
- if(oDiv)\r
- oDiv.style.visibility="hidden";\r
-}\r
-\r
-function beginLoading()\r
-{\r
- var oDiv=getElement(gsLoadingDivID);\r
- if(!oDiv)\r
- {\r
- document.body.insertAdjacentHTML("afterBegin",writeLoadingDiv());\r
- oDiv=getElement(gsLoadingDivID);\r
- }\r
- \r
- if(oDiv)\r
- {\r
- oDiv.style.top=document.body.scrollTop;\r
- oDiv.style.visibility="visible";\r
- }\r
-}\r
-\r
-function writeLoadingDiv(nIIdx)\r
-{\r
- return "<div id=\""+gsLoadingDivID+"\" style=\"position:absolute;top:0;left:0;z-index:600;visibility:hidden;padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";\r
-}\r
-\r
-function topicInfo(sTopicTitle,sTopicURL)\r
-{\r
- this.sTopicTitle=sTopicTitle;\r
- this.sTopicURL=sTopicURL;\r
- this.equalTo=function(oTI)\r
- {\r
- return ((this.sTopicTitle==oTI.sTopicTitle)&&\r
- (this.sTopicURL==oTI.sTopicURL));\r
- }\r
-}\r
-\r
-function getChunkedFts(nIndex,sKey)\r
-{\r
- var oCF=null;\r
- if(nIndex<gaaFCD.length)\r
- {\r
- var len=gaaFCD[nIndex].length;\r
- if(len>0)\r
- {\r
- var nB=0;\r
- var nE=len-1;\r
- var bFound=false;\r
- do{\r
- var nM=(nB+nE)>>1;\r
- if(compare(sKey,gaaFCD[nIndex][nM].sEndKey)>0)\r
- {\r
- nB=nM+1;\r
- }\r
- else if(compare(sKey,gaaFCD[nIndex][nM].sStartKey)<0)\r
- {\r
- nE=nM-1;\r
- }\r
- else{\r
- bFound=true;\r
- break;\r
- }\r
- }while(nE>=nB);\r
- if(bFound)\r
- oCF=gaaFCD[nIndex][nM];\r
- }\r
- }\r
- return oCF;\r
-}\r
-\r
-function ftsReady(aFCD,aFTCD)\r
-{\r
- endLoading();\r
- gaaFTCD[gnCLF]=aFTCD;\r
- gaaFCD[gnCLF++]=aFCD;\r
- setTimeout("loadFD();",1);\r
-}\r
-\r
-function putFtsTData(aTopics)\r
-{\r
- endLoading();\r
- var oCTF=goCTF;\r
- if(oCTF)\r
- {\r
- oCTF.aTopics=aTopics;\r
- setTimeout("ftsFindKeyword();",1);\r
- }\r
-}\r
-\r
-function putFtsWData(aFtsContents)\r
-{\r
- endLoading();\r
- var oCF=goCF;\r
- if(oCF)\r
- {\r
- updateCache(oCF);\r
- oCF.aFtsKeys=aFtsContents;\r
- setTimeout("ftsFindKeyword();",1);\r
- }\r
-}\r
-\r
-function IsStopWord(sCW,aFtsStopArray)\r
-{\r
- var nStopArrayLen=aFtsStopArray.length;\r
- var nB=0;\r
- var nE=nStopArrayLen-1;\r
- var nM=0;\r
- var bFound=false;\r
- var sStopWord="";\r
- while(nB<=nE){\r
- nM=(nB+nE);\r
- nM>>=1;\r
- sStopWord=aFtsStopArray[nM];\r
- if(compare(sCW,sStopWord)>0){\r
- nB=(nB==nM)?nM+1:nM;\r
- }else{\r
- if(compare(sCW,sStopWord)<0){\r
- nE=(nE==nM)?nM-1:nM;\r
- }else{\r
- bFound=true;\r
- break;\r
- }\r
- }\r
- }\r
- return bFound;\r
-}\r
-\r
-function GetStem(szWord)\r
-{\r
- if(gaFtsStem==null||gaFtsStem.length==0)return szWord;\r
- var aStems=gaFtsStem;\r
-\r
- var nStemPos=0;\r
- var csStem="";\r
- for(var iStem=0;iStem<aStems.length;iStem++){\r
-\r
- if(aStems[iStem].length>=szWord.length-1) continue;\r
- nStemPos=szWord.lastIndexOf(aStems[iStem]);\r
- if(nStemPos>0){\r
- var cssub=szWord.substring(nStemPos);\r
- if(cssub==aStems[iStem]){\r
- csStem=szWord;\r
- if(szWord.charAt(nStemPos-2)==szWord.charAt(nStemPos-1)){\r
- csStem=csStem.substring(0,nStemPos-1);\r
- }else{\r
- csStem=csStem.substring(0,nStemPos);\r
- }\r
- return csStem;\r
- }\r
- }\r
- }\r
- return szWord;\r
-}\r
-\r
-function FtsWriteClassStyle()\r
-{\r
- var sStyle="<STYLE TYPE='text/css'>\n";\r
- if (gsBgImage)\r
- sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
- else\r
- sStyle+="body {border-top:black 1px solid;}\n";\r
- sStyle+="P {"+getFontStyle(goErrFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
- sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
- sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:active {background-color:"+gsABgColor+";}\n";\r
- sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
- sStyle+="</STYLE>";\r
- document.write(sStyle);\r
-}\r
-\r
-function window_Unload()\r
-{\r
- UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
- UnRegisterListener2(this, WH_MSG_SEARCHFTSKEY);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_SEARCHFTSKEY)\r
- {\r
- if(oMsg.oParam)\r
- {\r
- if(gsSK==null||gsSK=="")\r
- {\r
- gsSK=oMsg.oParam.toLowerCase();\r
- findFTSKey();\r
- }\r
- else\r
- gsSK2=oMsg.oParam.toLowerCase();\r
- }\r
- }\r
- else if(nMsgId==WH_MSG_PROJECTREADY)\r
- {\r
- loadFts();\r
- }\r
- return true;\r
-}\r
-\r
-if (window.gbWhUtil&&window.gbWhLang&&window.gbWhProxy&&window.gbWhVer&&window.gbWhMsg)\r
-{\r
- goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
- goErrFont=new whFont("Verdana","8pt","#000000","normal","bold","none");\r
- goHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
- window.onload=window_OnLoad;\r
- window.onbeforeunload=window_BUnload;\r
- window.onunload=window_Unload;\r
- RegisterListener2(this,WH_MSG_PROJECTREADY);\r
- gbWhFHost=true;\r
-}\r
-else\r
- document.location.reload();
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.001\r
-var gfunLookUp;\r
-var gbInputEnable;\r
-var gfunInit;\r
-var gstrFormName= "";\r
-var gbWithButton = false;\r
-var gsTitle="";\r
-var gsOverImage = "";\r
-var gsOutImage = "";\r
-var gsClickImage = "";\r
-var gsText = "";\r
-var gsBgColor = "#c0c0c0";\r
-var gsBgImage = "";\r
-var gbInImage = 0;\r
-var gbInputEnable = 0;\r
-\r
-var goTitleFont=null;\r
-var goInputFont=null;\r
-var goNormalFont=null;\r
-var goHoverFont=null;\r
-var gnType=-1;\r
-var gbWhForm=false;\r
-\r
-function setBackground(sBgImage)\r
-{\r
- if (sBgImage != null && sBgImage.length > 0)\r
- gsBgImage = sBgImage;\r
-\r
- if (gsBgImage && gsBgImage .length > 0)\r
- {\r
- document.body.background = gsBgImage ;\r
- }\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- if (sBgColor != null && sBgColor.length > 0)\r
- gsBgColor = sBgColor;\r
-\r
- if (gsBgColor&& gsBgColor.length > 0)\r
- {\r
- document.body.bgColor = gsBgColor;\r
- }\r
-}\r
-\r
-function setBtnType(sType)\r
-{\r
- if (sType == "image")\r
- {\r
- gnType = 0;\r
- }\r
- else if (sType == "text")\r
- {\r
- gnType = 1;\r
- }\r
-}\r
-\r
-function setGoImage1(sImage1)\r
-{\r
- gsOutImage = sImage1;\r
- if (gsOutImage && gsOutImage.length > 0)\r
- gbWithButton = true;\r
-}\r
-\r
-function setGoImage2(sImage2)\r
-{\r
- gsOverImage = sImage2;\r
- if (gsOverImage && gsOverImage.length > 0)\r
- gbWithButton = true;\r
-}\r
-\r
-function setGoImage3(sImage3)\r
-{\r
- gsClickImage = sImage3;\r
- if (gsClickImage && gsClickImage.length > 0)\r
- gbWithButton = true;\r
-}\r
-\r
-function setGoText(sText)\r
-{\r
- gsText = sText;\r
- if (gsText.length > 0)\r
- gbWithButton = true;\r
-}\r
-\r
-function setFont(sType, sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration)\r
-{\r
- var vFont = new whFont(sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration);\r
- if (sType == "Title")\r
- {\r
- goTitleFont = vFont;\r
- var vFont1 = new whFont(sFontName, sFontSize, "black", sFontStyle, sFontWeight, sFontDecoration);\r
- goInputFont=vFont1; \r
- }\r
- else if (sType == "Normal")\r
- goNormalFont = vFont;\r
- else if (sType == "Hover")\r
- goHoverFont = vFont;\r
-}\r
-\r
-function writeFormStyle()\r
-{\r
- var sStyle = "<style type='text/css'>";\r
- sStyle += "p.title {" + getFontStyle(goTitleFont) + "margin-top:0;margin-bottom:0}\n";\r
- sStyle += ".inputfield {" + getFontStyle(goInputFont) +"width:100%; }\n";\r
- sStyle+="A:link {"+getFontStyle(goNormalFont)+"}\n";\r
- sStyle+="A:visited {"+getFontStyle(goNormalFont)+"}\n";\r
- sStyle +="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
- sStyle+=".clsFormBackground{\n";\r
- if (gsBgImage)\r
- sStyle+="border-top:"+gsBgColor+" 1px solid;}\n";\r
- else\r
- sStyle+="border-top:black 1px solid;}\n";\r
-\r
- sStyle += "</style>";\r
- document.write(sStyle);\r
-}\r
-\r
-function lookupKeyDown()\r
-{\r
- if (gbInputEnable)\r
- {\r
- if (gbIE4)\r
- {\r
- if (event.keyCode == 13) //Enter key\r
- gfunLookUp(true);\r
- else\r
- gfunLookUp(false);\r
- } \r
- else\r
- gfunLookUp(false);\r
- }\r
-}\r
-\r
-function init()\r
-{\r
- if (gfunInit)\r
- gfunInit();\r
- if (!window.Array) return;\r
- document.onkeyup = lookupKeyDown;\r
-}\r
-\r
-function inputSubmit()\r
-{\r
- if ((gbInputEnable && !gbIE4)|| gbInImage)\r
- gfunLookUp(true);\r
-}\r
-\r
-function inputEnable(bEnable)\r
-{\r
- gbInputEnable = bEnable;\r
-}\r
-\r
-function inImage(bImage)\r
-{\r
- gbInImage = bImage;\r
-}\r
-\r
-function getFormHTML()\r
-{\r
- var sForm = "";\r
- sForm += "<table class=\"clsFormBackground\" width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" border=\"0\">";\r
- sForm += "<form name=\"" + gstrFormName + "\" method=\"POST\" action=\"javascript:inputSubmit()\" style=\"width:100%\">";\r
- sForm += "<tr>";\r
- sForm += "<td>";\r
- sForm += "<p class=title><nobr>" + gsTitle + "</nobr><br><table width=\"100%\"><tr valign=\"middle\"><td width=\"100%\"><input class=\"inputfield\" type=\"text\" name=\"keywordField\" onfocus=\"inputEnable(1);\" onblur=\"inputEnable(0);\"></td>";\r
- if (gbWithButton && gnType >= 0)\r
- {\r
- sForm += "<td><a title=\"submit button\" href=\"javascript:void(0);\" onclick=\"" + gstrFormName + ".submit(); return false;\" onfocus=\"inImage(1);\" onblur=\"inImage(0);\" onmouseup=\"onMouseUp();\" onmousedown=\"onMouseDown();\" onmouseover=\"onMouseOver();\" onmouseout=\"onMouseOut();\">"\r
- if (gnType == 0)\r
- {\r
- if (!gsText)\r
- gsText="Go";\r
- sForm += "<img alt=\""+gsText+"\" id=\"go\" border=\"0\" src=\"" + gsOutImage + "\">";\r
- }\r
- else\r
- sForm += gsText ;\r
- sForm += "</a></td>";\r
- }\r
- sForm += "</tr></table></p></td></tr></form></table>";\r
- return sForm;\r
-}\r
-\r
-function onMouseOver()\r
-{\r
- if (getElement("go") && gsOverImage)\r
- getElement("go").src = gsOverImage;\r
-}\r
-\r
-function onMouseDown()\r
-{\r
- if (getElement("go") && gsClickImage)\r
- getElement("go").src = gsClickImage;\r
-}\r
-\r
-function onMouseUp()\r
-{\r
- if (getElement("go") && gsOutImage)\r
- getElement("go").src = gsOutImage;\r
-}\r
-\r
-function onMouseOut()\r
-{\r
- if (getElement("go") && gsOutImage)\r
- getElement("go").src = gsOutImage;\r
-}\r
-\r
-if (window.gbWhUtil&&window.gbWhVer&&window.gbWhProxy&&window.gbWhMsg)\r
-{\r
- goTitleFont=new whFont("Arial", "9pt", "#000000", "normal", "normal", "none");\r
- goNormalFont=new whFont("Arial", "9pt", "#000000", "normal", "normal", "none");\r
- goHoverFont=new whFont("Arial", "9pt", "#000000", "normal", "normal", "underline");\r
- gbWhForm=true;\r
-}\r
-else\r
- document.location.reload();
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.001\r
-// this value should be identical to the value used in whproxy.js\r
-window.whname = "wh_stub";\r
-\r
-// this file will be used by Topic and NavBar and NavPane and other components\r
-// and this file is used in child frame html.\r
-// and the whstub.js will be used in the start page.\r
-// see reference in whstub.js.\r
-// Internal Area\r
-var gbInited = false;\r
-var gWndStubPage = null;\r
-function getStubPage()\r
-{\r
- if (!gbInited)\r
- {\r
- gWndStubPage = getStubPage_inter(window);\r
- gbInited = true;\r
- }\r
- return gWndStubPage;\r
-}\r
-\r
-function getStubPage_inter(wCurrent) {\r
- if (null == wCurrent.parent || wCurrent.parent == wCurrent)\r
- return null;\r
-\r
- if (wCurrent.parent.whname && "wh_stub" == wCurrent.parent.whname) \r
- return wCurrent.parent;\r
- else\r
- if (wCurrent.parent.frames.length != 0 && wCurrent.parent != wCurrent)\r
- return getStubPage_inter(wCurrent.parent);\r
- else \r
- return null;\r
-}\r
-\r
-// Public interface begin here................\r
-function RegisterListener(framename, nMessageId)\r
-{\r
- var wStartPage = getStubPage();\r
- if (wStartPage && wStartPage != this) {\r
- return wStartPage.RegisterListener(framename, nMessageId);\r
- }\r
- else \r
- return false;\r
-}\r
-\r
-function RegisterListener2(oframe, nMessageId)\r
-{\r
- var wStartPage = getStubPage();\r
- if (wStartPage && wStartPage != this) {\r
- return wStartPage.RegisterListener2(oframe, nMessageId);\r
- }\r
- else \r
- return false;\r
-}\r
-\r
-function UnRegisterListener2(oframe, nMessageId)\r
-{\r
- var wStartPage = getStubPage();\r
- if (wStartPage && wStartPage != this && wStartPage.UnRegisterListener2) {\r
- return wStartPage.UnRegisterListener2(oframe, nMessageId);\r
- }\r
- else \r
- return false;\r
-}\r
-\r
-function SendMessage(oMessage)\r
-{\r
- var nMsgId = oMessage.nMessageId;\r
- if (nMsgId == WH_MSG_ISINFRAMESET && oMessage.wSender != this)\r
- return true;\r
- var wStartPage = getStubPage();\r
- if (wStartPage && wStartPage != this && wStartPage.SendMessage) \r
- {\r
- return wStartPage.SendMessage(oMessage);\r
- }\r
- else \r
- return false;\r
-}\r
-var gbWhProxy=true;
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>Glossary Term</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whlang.js"></script>\r
-<script language="javascript1.2" src="whhost.js"></script>\r
-<script language="javascript1.2" src="whghost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-if(window.gbWhGHost)\r
-{\r
- \r
- \r
- setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
- setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
- setActiveBgColor("#cccccc");\r
- setMargin("0pt");\r
- setIndent("9pt");\r
- GloWriteClassStyle();\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" bgcolor="white">\r
-</body>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Glossary Definition</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goGloFont=null;\r
-\r
-function setBackground(sBgImage)\r
-{\r
- gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- gsBgColor=sBgColor;\r
-}\r
-\r
-function window_Unload()\r
-{\r
- UnRegisterListener2(this, WH_MSG_SHOWGLODEF);\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- if(gsBgImage&&gsBgImage.length>0)\r
- document.body.background=gsBgImage;\r
- if(gsBgColor&&gsBgColor.length>0)\r
- document.body.bgColor=gsBgColor;\r
-}\r
-\r
-function setFont(sType, sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration)\r
-{\r
- var vFont = new whFont(sFontName, sFontSize, sFontColor, sFontStyle, sFontWeight, sFontDecoration);\r
- if (sType == "Normal")\r
- goGloFont = vFont;\r
-}\r
-\r
-function textToHtml_nbsp_specialcare(sText)\r
-{\r
- if (sText == null) return null;\r
- var sHTML= sText;\r
- var re = new RegExp(" ","g");\r
- sHTML= sHTML.replace(re, " ");\r
- return sHTML;\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- var nMsgId = oMsg.nMessageId;\r
- if (nMsgId == WH_MSG_SHOWGLODEF)\r
- {\r
- document.body.innerHTML = sDefHead + textToHtml_nbsp_specialcare(oMsg.oParam.sDef) + sDefTail;\r
- return true;\r
- }\r
-}\r
-\r
-function GDefWriteClassStyle()\r
-{\r
- var sStyle="<STYLE TYPE='text/css'>\n";\r
- if (gsBgImage)\r
- sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
- else\r
- sStyle+="body {border-top:black 1px solid;}\n";\r
- sStyle+=".definition {"+getFontStyle(goGloFont)+"margin:2;}\n";\r
- sStyle+="</STYLE>";\r
- document.write(sStyle);\r
-}\r
-\r
-if (window.gbWhMsg&&window.gbWhUtil&&window.gbWhProxy&&window.gbWhVer)\r
-{\r
- window.onload=window_OnLoad;\r
- window.onunload = window_Unload;\r
- goGloFont=new whFont("Verdana", "8pt", "#000000", "normal", "normal", "none");\r
- \r
- \r
- setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
- GDefWriteClassStyle();\r
- RegisterListener2(this, WH_MSG_SHOWGLODEF);\r
- var sDefHead = "<p class=\"definition\">";\r
- var sDefTail = "</p>";\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body bgproperties="fixed" bgcolor="white">\r
-</body>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Glossary</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body bgcolor=#c0c0c0 scroll=no RIGHTMARGIN=0 BOTTOMMARGIN=0 TOPMARGIN=0 LEFTMARGIN=0>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsBgImage="";\r
-var gsBgColor="";\r
-var goTitleFont=null;\r
-\r
-function setBackground(sBgImage)\r
-{\r
- gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType, sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- if(sType=="Title")\r
- goTitleFont=vFont;\r
-}\r
-\r
-function getTermText()\r
-{\r
- var strString="Term:";\r
-strString = "Term:";\r
- return strString;\r
-}\r
-\r
-function getDefinitionText()\r
-{\r
- var strString="Definition for:";\r
-strString = "Definition:";\r
- return strString;\r
-}\r
-\r
-function getHTML()\r
-{\r
- var sHTML="";\r
- sHTML+="<P class=title><nobr> " + getTermText() + "</nobr></p>";\r
- sHTML+="<iframe id=glossaryIFrame title=\"glossary term\" src=\"whgbody.htm\" width=100% height=200 MARGINHEIGHT=0 MARGINWIDTH=0></iframe>";\r
- sHTML+="<P class=title><nobr> " + getDefinitionText() + " <b id=Name></b></nobr></p>";\r
- sHTML+="<iframe id=defIFrame title=\"glossary definition\" src=\"whgdef.htm\" width=100% height=100% MARGINHEIGHT=0 MARGINWIDTH=0></iframe>";\r
- return sHTML;\r
-}\r
-\r
-function writeStyle()\r
-{\r
- var sStyle="<style type='text/css'>";\r
- sStyle+="p.title {" + getFontStyle(goTitleFont) + "margin-top:4;margin-bottom:4}\n";\r
- if (gsBgImage)\r
- sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
- else\r
- sStyle+="body {border-top:black 1px solid;}\n";\r
- sStyle+="</style>";\r
- document.write(sStyle);\r
-}\r
-\r
-\r
-function window_OnResize()\r
-{\r
- setIFrameHeight();\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- if(gsBgImage&&gsBgImage.length>0)\r
- document.body.background=gsBgImage;\r
- if(gsBgColor&&gsBgColor.length>0)\r
- document.body.bgColor=gsBgColor;\r
- setIFrameHeight();\r
-}\r
-\r
-function setIFrameHeight()\r
-{\r
- var tH=0;\r
- if(gbNav6)\r
- {\r
- tH=parseInt(window.innerHeight)-30;\r
- }\r
- else\r
- {\r
- tH=parseInt(document.body.clientHeight)-4;\r
- }\r
- \r
- var oEle=getElement("glossaryIFrame");\r
- if(oEle)\r
- {\r
- tH=tH-2*parseInt(oEle.offsetTop);\r
- if(tH>0)\r
- {\r
- oEle.style.height=Math.floor(tH*.6);\r
- var oEleDef=getElement("defIFrame");\r
- if(oEleDef)\r
- {\r
- oEleDef.style.height=tH-parseInt(oEle.style.height);\r
- }\r
- }\r
- }\r
-}\r
-\r
-function window_Unload()\r
-{\r
- UnRegisterListener2(this,WH_MSG_SHOWGLODEF);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_SHOWGLODEF)\r
- {\r
- if(getElement("Name"))\r
- getElement("Name").innerHTML=oMsg.oParam.sName;\r
- return true;\r
- }\r
-}\r
-\r
-if(window.gbWhVer&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhProxy)\r
-{\r
- goTitleFont=new whFont("Arial","9pt","#000000","normal","normal","none");\r
- setFont("Title", "Arial","9pt","#000000","normal","normal","none");\r
- \r
- \r
- window.onresize=window_OnResize;\r
- window.onload=window_OnLoad;\r
- window.onunload=window_Unload;\r
- RegisterListener2(this,WH_MSG_SHOWGLODEF);\r
- writeStyle();\r
- document.write(getHTML());\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
+++ /dev/null
-// WebHelp 5.10.004\r
-var gbXML=false;\r
-var gaDef=new Array();\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goFont=null;\r
-var goHoverFont=null;\r
-var gsMargin="2pt";\r
-var gsIndent="2pt";\r
-var gsActiveBgColor="#cccccc";\r
-var gbWhGHost=false;\r
-var gbShowDef=true;\r
-var gsGloId="Glo_"\r
-\r
-function setBackground(sBgImage)\r
-{\r
- gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- if(sType=="Normal")\r
- goFont=vFont;\r
- else if(sType=="Hover")\r
- goHoverFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
- gsActiveBgColor=sBgColor;\r
-}\r
-\r
-function setMargin(sMargin)\r
-{\r
- gsMargin=sMargin;\r
-}\r
-\r
-function setIndent(sIndent)\r
-{\r
- gsIndent=sIndent;\r
-}\r
-\r
-function insertDef(sKName,sDef)\r
-{\r
- var nLength=gaDef.length\r
- var oGlo=new nameDefPair(sKName,sDef);\r
- gaDef[nLength]=oGlo;\r
- return nLength;\r
-}\r
-\r
-function showDef(nDef)\r
-{\r
- if(nDef<gaDef.length)\r
- { \r
- HighLight(nDef);\r
- var oParam=gaDef[nDef];\r
- var oMsg=new whMessage(WH_MSG_SHOWGLODEF,this,1,oParam);\r
- SendMessage(oMsg);\r
- }\r
-}\r
-\r
-function nameDefPair(sName,sDef)\r
-{\r
- this.sName=sName;\r
- this.sDef=sDef;\r
-}\r
-\r
-function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)\r
-{\r
- var sHTML="";\r
- var nIdxSet=aCurIdxSet[0];\r
- var nIIdx=aPos[nIdxSet];\r
- var sRawKName = getItemName(aDataCon,nIdxSet,nIIdx);\r
- var sKName=_textToHtml(sRawKName);\r
- var sDText=_textToHtml_nonbsp(getDef(aDataCon,nIdxSet,nIIdx));\r
- var sDef=sDText;\r
- for(var i=1;i<nLength;i++)\r
- {\r
- var nIdxSeti=aCurIdxSet[i];\r
- var nIIdxi=aPos[nIdxSeti];\r
- var sRawKNamei = getItemName(aDataCon,nIdxSeti,nIIdxi);\r
- var sKNamei=_textToHtml(sRawKNamei);\r
- var sDTexti=_textToHtml_nonbsp(getDef(aDataCon,nIdxSeti,nIIdxi));\r
- if (compare(sKNamei,sKName)==0)\r
- {\r
- if (sDText!=sDTexti)\r
- sDef+="<br>"+sDTexti;\r
- }\r
- }\r
- var nIndex=insertDef(sKName,sDef);\r
- if(nLevel==1)\r
- {\r
- sHTML+="<p><nobr id=\""+getGloId(nIndex)+"\">";\r
- sHTML+="<a alt=\""+sKName+"\" href=\"javascript:void(0);\" onfocus=\"HighLight("+nIndex+");\" onclick=\"showDef("+nIndex+");return false;\">"+sKName+"</a></nobr></p>";\r
- oHTML.addHTML(sHTML,nLength,bDown,true,sRawKName);\r
- if(gbShowDef)\r
- {\r
- setTimeout("showDef(0);",100);\r
- gbShowDef = false;\r
- }\r
- }\r
-}\r
-\r
-function HighLight(nIndex)\r
-{\r
- var oObj=getElement(getGloId(nIndex));\r
- if(oObj)\r
- HighLightElement(oObj,gsActiveBgColor,"transparent");\r
-}\r
-\r
-function getGloId(nIndex)\r
-{\r
- return gsGloId+nIndex;\r
-}\r
-\r
-function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos)\r
-{\r
- if(bDown)\r
- {\r
- for(var i=0;i<nLength;i++)\r
- aPos[aCurIdxSet[i]]++;\r
- }\r
- else{\r
- for(var i=0;i<nLength;i++)\r
- aPos[aCurIdxSet[i]]--;\r
- }\r
-}\r
-\r
-function getDef(aDataCon,nIdxSet,nIIdx)\r
-{\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- return aDataCon[nIdxSet].aKs[nIIdx].sDef;\r
- else\r
- return null;\r
-}\r
-\r
-function getItemName(aDataCon,nIdxSet,nIIdx)\r
-{\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- return aDataCon[nIdxSet].aKs[nIIdx].sName;\r
- else\r
- return null;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- if(gsBgImage&&gsBgImage.length>0)\r
- document.body.background=gsBgImage;\r
- if(gsBgColor&&gsBgColor.length>0)\r
- document.body.bgColor=gsBgColor;\r
- document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv());\r
- loadGlo();\r
- var oMsg=new whMessage(WH_MSG_SHOWGLO,this,1,null)\r
- SendMessage(oMsg);\r
-}\r
-\r
-function loadGlo()\r
-{\r
- if(!gbReady)\r
- {\r
- var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
- if(SendMessage(oResMsg)&&oResMsg.oParam)\r
- {\r
- gbReady=true;\r
- var oProj=oResMsg.oParam;\r
- var aProj=oProj.aProj;\r
- gbXML=oProj.bXML;\r
- if(aProj.length>0)\r
- {\r
- var sLangId=aProj[0].sLangId;\r
- for(var i=0;i<aProj.length;i++)\r
- {\r
- if(aProj[i].sGlo&&aProj[i].sLangId==sLangId)\r
- addProjInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sGlo);\r
- }\r
- }\r
- writeDataIFrame();\r
- enEvt();\r
- } \r
- }\r
-}\r
-\r
-function findCKInDom()\r
-{\r
- return true;\r
-}\r
-\r
-function GloWriteClassStyle()\r
-{\r
- var sStyle="<STYLE TYPE='text/css'>\n";\r
- if (gsBgImage)\r
- sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
- else\r
- sStyle+="body {border-top:black 1px solid;}\n";\r
- sStyle+="P {"+getFontStyle(goFont)+"margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";margin-left:"+gsIndent+";}\n";\r
- sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:active {background-color:"+gsActiveBgColor+";}\n";\r
- sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
- sStyle+="</STYLE>"; \r
- document.write(sStyle);\r
-}\r
-\r
-function window_Unload()\r
-{\r
- UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
- UnRegisterListener2(this,WH_MSG_SHOWGLO);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- if(oMsg)\r
- {\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_SHOWGLO)\r
- {\r
- if(!gbNav6)\r
- document.body.focus();\r
- }\r
- else if(nMsgId==WH_MSG_PROJECTREADY)\r
- {\r
- loadGlo();\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-if (window.gbWhUtil&&window.gbWhProxy&&window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhHost)\r
-{\r
- RegisterListener2(this,WH_MSG_PROJECTREADY);\r
- RegisterListener2(this,WH_MSG_SHOWGLO);\r
- goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
- goHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
- window.onload=window_OnLoad;\r
- window.onbeforeunload=window_BUnload;\r
- window.onunload=window_Unload;\r
- gbWhGHost=true;\r
-}\r
-else\r
- document.location.reload();\r
-\r
+++ /dev/null
-// WebHelp 5.10.002\r
-var gaChunks=new Array();\r
-var gaFakes=new Array();\r
-var gaDataCon=null;\r
-var gaData=new Array();\r
-\r
-var gbFindCK=false;;\r
-var gbNeedCalc=false;\r
-var gbScrl=false;\r
-var gbProcess=false;\r
-var gbReady=false;\r
-\r
-var gnCheck=0;\r
-var gnNum=0;\r
-var gnIns=-1;\r
-var gnLoad=0;\r
-var gnRef=-1;\r
-var gnMaxItems=0;\r
-var gnMaxMargin=32000;\r
-var gnNeeded=0;\r
-var gnNKI=-1;\r
-var gnRE=0;\r
-var gnScrlMgn=30;\r
-var gnSE=0;\r
-var gnVisible=0;\r
-var gnItems=0;\r
-var gnUHeight=1;\r
-\r
-var gsBCK=null;\r
-var gsChK=null;\r
-var gsCK=null;\r
-var gsLoadingDivID="LoadingDiv";\r
-var gsLoadingMsg="Loading data, please wait...";\r
-var gsSKA=null;\r
-var gsSKB=null;\r
-\r
-var gbLoadInfo=false;\r
-\r
-function onLoadXMLError()\r
-{\r
- if(gbLoadInfo)\r
- {\r
- var aChunk=new Array();\r
- projReady(aChunk);\r
- }\r
- else\r
- {\r
- var aData=new Array();\r
- putData(aData);\r
- }\r
-}\r
-\r
-function putDataXML(xmlDoc,sDocPath)\r
-{\r
- if(gbLoadInfo)\r
- {\r
- var node=xmlDoc.lastChild;\r
- if(node)\r
- {\r
- var nTotal=0\r
- var aChunk=new Array();\r
- var oC=node.firstChild;\r
- while(oC)\r
- {\r
- if(oC.nodeName=="chunkinfo")\r
- {\r
- var item=new Object();\r
- item.sBK=oC.getAttribute("first");\r
- item.sEK=oC.getAttribute("last");\r
- item.sFileName=oC.getAttribute("url");\r
- item.nNum=parseInt(oC.getAttribute("num"));\r
- nTotal+=item.nNum;\r
- item.nTotal=nTotal;\r
- aChunk[aChunk.length]=item;\r
- }\r
- oC=oC.nextSibling;\r
- }\r
- projReady(aChunk);\r
- }\r
- }\r
- else\r
- {\r
- var node=xmlDoc.lastChild;\r
- if(node)\r
- {\r
- var aData=new Array();\r
- var nPrev=0;\r
- var nNext=0;\r
- var oC=node.firstChild;\r
- while(oC)\r
- {\r
- nPrev=nNext;\r
- if(oC.nodeName=="key")\r
- {\r
- var sName=oC.getAttribute("name");\r
- if(sName&&sName.length>0)\r
- {\r
- var sTarget=oC.getAttribute("target");\r
- var item=new Object();\r
- item.nType=2;\r
- item.sName=sName;\r
- if(sTarget)\r
- item.sTarget=sTarget;\r
- item.nPKOff=nPrev;\r
- aData[aData.length]=item;\r
- var nCurIndex=aData.length;\r
- processKey(oC,aData,item);\r
- nNext=aData.length-nCurIndex;\r
- item.nNKOff=nNext;\r
- }\r
- }\r
- else if(oC.nodeName=="letter")\r
- {\r
- var name=oC.getAttribute("name");\r
- if(name&&name.length>0)\r
- {\r
- var item=new Object();\r
- item.nType=1;\r
- item.sName=name;\r
- item.nPKOff=nPrev;\r
- nNext=0;\r
- item.nNKOff=nNext;\r
- aData[aData.length]=item;\r
- }\r
- }\r
- else if(oC.nodeName=="entry")\r
- {\r
- var name=oC.getAttribute("name");\r
- var def=oC.getAttribute("value");\r
- if(name&&name.length>0)\r
- {\r
- var item=new Object();\r
- item.sName=name;\r
- item.sDef=def;\r
- item.nPKOff=nPrev;\r
- nNext=0;\r
- item.nNKOff=nNext;\r
- aData[aData.length]=item;\r
- }\r
- }\r
- oC=oC.nextSibling;\r
- }\r
- putData(aData);\r
- }\r
- }\r
-}\r
-\r
-function processKey(element,aData,item)\r
-{\r
- var i=0;\r
- var nPrev=0;\r
- var nNext=0;\r
- var oC=element.firstChild;\r
- while(oC)\r
- {\r
- if(oC.nodeName=="topic")\r
- {\r
- var name=oC.getAttribute("name");\r
- var url=oC.getAttribute("url");\r
- if(url&&url.length!=0)\r
- {\r
- if(!name||name.length==0)\r
- name=url;\r
- var topic=new Object();\r
- topic.sName=name;\r
- topic.sURL=url;\r
- if(!item.aTopics)\r
- item.aTopics=new Array();\r
- item.aTopics[item.aTopics.length]=topic;\r
- }\r
- }\r
- else if(oC.nodeName=="key")\r
- {\r
- nPrev=nNext;\r
- var name=oC.getAttribute("name");\r
- if(name&&name.length!=0)\r
- {\r
- var subItem=new Object();\r
- subItem.sName=name;\r
- subItem.nType=3;\r
- subItem.nPKOff=nPrev;\r
- aData[aData.length]=subItem;\r
- var nCurIndex=aData.length;\r
- processKey(oC,aData,subItem);\r
- nNext=aData.length-nCurIndex;\r
- subItem.nNKOff=nNext;\r
- }\r
- }\r
- oC=oC.nextSibling;\r
- }\r
-}\r
-\r
-function putData(aData)\r
-{\r
- endLoading();\r
- var oCData=goCData;\r
- if(oCData)\r
- {\r
- oCData.aKs=aData;\r
- if(gnNKI==-1)\r
- setTimeout("checkReady();",1);\r
- else\r
- {\r
- gsSKA=getKByIdx(oCData,gnNKI);\r
- gbNeedCalc=true;\r
- gbScrl=true;\r
- gnNKI=-1;\r
- if(gsSKA)\r
- setTimeout("checkReady();",1);\r
- else\r
- {\r
- markEnd();\r
- setTimeout("checkAgain();",50);\r
- }\r
- }\r
- }\r
-}\r
-\r
-function markEnd()\r
-{\r
- if(gbProcess)\r
- gbProcess=false;\r
-}\r
-\r
-function endLoading()\r
-{\r
- var oDiv=getElement(gsLoadingDivID);\r
- if(oDiv)\r
- oDiv.style.visibility="hidden";\r
-}\r
-\r
-function markBegin()\r
-{\r
- gbProcess=true;\r
-}\r
-\r
-function beginLoading()\r
-{\r
- var oDiv=getElement(gsLoadingDivID);\r
- if(oDiv)\r
- {\r
- oDiv.style.top=document.body.scrollTop;\r
- oDiv.style.visibility="visible";\r
- }\r
-}\r
-\r
-function indexHTMLPart()\r
-{\r
- this.sHTML="";\r
- this.nNeeded=0;\r
- this.nCurrent=0;\r
- this.nConsumed=0;\r
- this.sFK=null;\r
- this.sLK=null;\r
- this.addHTML=function(sHTML,nConsumed,bDown,bK,sK){\r
- if(bDown)\r
- this.sHTML+=sHTML;\r
- else\r
- this.sHTML=sHTML+this.sHTML;\r
- this.nCurrent++; \r
- this.nConsumed+=nConsumed;\r
- if(bK)\r
- {\r
- if(!this.sFK)\r
- this.sFK=sK;\r
- if(!this.sLK)\r
- this.sLK=sK;\r
- if(bDown)\r
- this.sLK=sK;\r
- else\r
- this.sFK=sK;\r
- }\r
- }\r
- this.appendHTML=function(oHTML,bDown){\r
- this.addSubHTML(oHTML,bDown);\r
- if(!this.sFK)\r
- this.sFK=oHTML.sFK;\r
- if(!this.sLK)\r
- this.sLK=oHTML.sLK;\r
- if(bDown)\r
- this.sLK=oHTML.sLK;\r
- else\r
- this.sFK=oHTML.sFK;\r
- } \r
- \r
- this.addSubHTML=function(oHTML,bDown){\r
- if(bDown)\r
- this.sHTML+=oHTML.sHTML;\r
- else\r
- this.sHTML=oHTML.sHTML+this.sHTML;\r
- this.nCurrent+=oHTML.nCurrent;\r
- this.nConsumed+=oHTML.nConsumed; \r
- }\r
-}\r
-\r
-function getMaxUnits()\r
-{\r
- return Math.floor(gnMaxMargin/gnUHeight)+1;\r
-}\r
-\r
-function getFakeItemsHTMLbyCount(nB,nCount)\r
-{\r
- var nMU=getMaxUnits();\r
- var nNum=Math.floor(nCount/nMU);\r
- var sHTML="";\r
- for(var i=0;i<nNum;i++)\r
- sHTML+=getFakeItemHTML(nB,nMU-1);\r
- \r
- var nRest=nCount%nMU;\r
- sHTML+=getFakeItemHTML(nB,nRest-1);\r
- return sHTML;\r
-}\r
-\r
-function getFakeItemHTML(nB,nNum)\r
-{\r
- return "<h6 name=fk"+nB+" id=fk"+nB+" style=\"margin-top:"+gnUHeight*nNum+";margin-bottom:0\"> </h6>";\r
-}\r
-\r
-function fakeItemsArea(nB,n,sKA,sKB,obj)\r
-{\r
- this.nB=nB;\r
- this.nNum=n;\r
- this.sKA=sKA;\r
- this.sKB=sKB;\r
- this.obj=obj;\r
- this.nMargin=(n-1)*gnUHeight;\r
-\r
- this.setNum=function(n)\r
- {\r
- var nLastobj=-1;\r
- var nDelta=this.nMargin;\r
- this.nMargin=(n-1)*gnUHeight;\r
- nDelta=nDelta-this.nMargin;\r
- if(n>0)\r
- {\r
- this.nNum=n;\r
- var nMU=getMaxUnits();\r
- nLastobj=Math.floor((n-1)/nMU);\r
- if(this.obj.length)\r
- this.obj[nLastobj].style.marginTop=((n-1)%nMU)*gnUHeight;\r
- else\r
- this.obj.style.marginTop=((n-1)%nMU)*gnUHeight;\r
- }\r
- if(this.obj.length)\r
- {\r
- for(var i=this.obj.length-1;i>nLastobj;i--)\r
- removeThis(this.obj[i]);\r
- }\r
- else\r
- {\r
- if(nLastobj==-1)\r
- removeThis(this.obj);\r
- }\r
- return nDelta;\r
- }\r
- this.insertAdjacentHTML=function(sWhere,sHTML)\r
- {\r
- if(sWhere=="beforeBegin")\r
- {\r
- if(this.obj.length)\r
- this.obj[0].insertAdjacentHTML(sWhere,sHTML);\r
- else\r
- this.obj.insertAdjacentHTML(sWhere,sHTML);\r
- }\r
- else if(sWhere=="afterEnd")\r
- {\r
- if(this.obj.length)\r
- {\r
- if(gbMac&&gbIE5&&this.obj[this.obj.length-1].nextSibling)\r
- this.obj[this.obj.length-1].nextSibling.insertAdjacentHTML("beforeBegin",sHTML);\r
- else\r
- this.obj[this.obj.length-1].insertAdjacentHTML(sWhere,sHTML);\r
- }\r
- else\r
- {\r
- if(gbMac&&gbIE5&&this.obj.nextSibling)\r
- this.obj.nextSibling.insertAdjacentHTML("beforeBegin",sHTML);\r
- else\r
- this.obj.insertAdjacentHTML(sWhere,sHTML);\r
- }\r
- }\r
- }\r
- this.getBtm=function()\r
- {\r
- if(this.obj.length)\r
- return this.obj[this.obj.length-1].offsetTop;\r
- else\r
- return this.obj.offsetTop;\r
- }\r
- this.getTop=function()\r
- {\r
- return this.getBtm()-this.nMargin;\r
- }\r
-}\r
-\r
-function usedItems(nB,nE)\r
-{\r
- this.nB=nB;\r
- this.nE=nE;\r
- this.oN=null;\r
-}\r
-\r
-function checkReady()\r
-{\r
- var len=gaChunks.length;\r
- var bNeedLoad=false;\r
- var aDataCon;\r
- var s=0;\r
- var bDown=(gsSKB==null);\r
- var sK=bDown?gsSKA:gsSKB;\r
- if(sK==null)\r
- {\r
- markEnd();\r
- setTimeout("checkAgain();",50);\r
- return;\r
- }\r
- if(!gsChK||sK!=gsChK||gnNum==0)\r
- {\r
- gnCheck=0;\r
- gsChK=sK;\r
- aDataCon=new Array();\r
- }\r
- else{\r
- s=gnNum;\r
- aDataCon=gaDataCon;\r
- }\r
- for(var i=gnCheck;i<len;i++)\r
- {\r
- var oCData=getChunkedData(i,bDown,sK);\r
- if(oCData)\r
- {\r
- if(!oCData.aKs&&oCData.sFileName!=null)\r
- {\r
- bNeedLoad=true;\r
- goCData=oCData;\r
- gnNum=s;\r
- gnCheck=i;\r
- gaDataCon=aDataCon;\r
- oCData.nProjId=i;\r
- gbLoadInfo=false;\r
- beginLoading();\r
- loadData2(gaData[i].sPPath+gaData[i].sDPath+oCData.sFileName);\r
- return;\r
- }\r
- else{\r
- aDataCon[s++]=oCData;\r
- }\r
- }\r
- }\r
- if(!bNeedLoad)\r
- {\r
- gnNum=0;\r
- gsSKA=gsSKB=gsShowK=null;\r
- \r
- var oHTML=new indexHTMLPart();\r
- var aPos=new Array();\r
- var aOriPos=new Array();\r
- var aMaxPos=new Array();\r
- var aMinPos=new Array();\r
- \r
- if(gbNeedCalc||gbFindCK) gnIns=0;\r
- for(i=0;i<aDataCon.length;i++)\r
- {\r
- aPos[i]=getIdxPos(aDataCon[i],bDown,sK);\r
- if(gbNeedCalc||gbFindCK)\r
- {\r
- gnIns+=aPos[i]+aDataCon[i].nTotal-aDataCon[i].nNum;\r
- if(!bDown)\r
- {\r
- if(aPos[i]!=-1)\r
- {\r
- if(aDataCon[i].aKs)\r
- gnIns+=aDataCon[i].aKs[aPos[i]].nNKOff;\r
- else\r
- {\r
- var n=aPos[i]+1;\r
- while(n<aDataCon[i].aKsOnly.length&&!aDataCon[i].aKsOnly[n])\r
- n++;\r
- n=n-aPos[i]-1;\r
- gnIns+=n;\r
- }\r
- }\r
- }\r
- }\r
- aOriPos[i]=aPos[i];\r
- getLimit(aDataCon,aPos,aMaxPos,aMinPos,i);\r
- }\r
- if((gbNeedCalc||gbFindCK)&&!bDown&&gnIns!=-1)\r
- {\r
- gnIns+=(aDataCon.length-1)\r
- }\r
- if(gnIns!=-1||gbFindCK)\r
- {\r
- oHTML.nNeeded=gnNeeded;\r
- var bDone=writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,1);\r
- if(oHTML.nConsumed!=0)\r
- {\r
- var nB;\r
- if(!bDown)\r
- nB=gnIns-oHTML.nConsumed+1;\r
- else\r
- nB=gnIns;\r
- \r
- var oldScrollPos=document.body.scrollTop;\r
- if(insertIdxKs(nB,oHTML,gbScrl))\r
- {\r
- updateUsedK(aDataCon,aOriPos,aPos,bDown);\r
- if(!gbScrl&&gbMac)\r
- {\r
- while(document.body.scrollTop!=oldScrollPos)\r
- document.body.scrollTop=oldScrollPos;\r
- }\r
- gbScrl=false;\r
- }\r
- if(gbFindCK)\r
- {\r
- gbFindCK=false;\r
- gbNeedCalc=true;\r
- gsSKB=oHTML.sFK;\r
- gnIns=-1;\r
- setTimeout("checkReady();",50);\r
- return;\r
- }\r
- }\r
- else if(gbFindCK)\r
- {\r
- gbFindCK=false;\r
- gbNeedCalc=true;\r
- gsSKB=getFirstKeyFromPos(aDataCon,aPos);\r
- gnIns=-1;\r
- setTimeout("checkReady();",50);\r
- return;\r
- }\r
- if(!findCKInDom()) return;\r
-\r
- gnNeeded=gnNeeded-oHTML.nCurrent;\r
- gnIns=-1;\r
- markEnd();\r
- setTimeout("checkAgain();",50);\r
- gbNeedCalc=false;\r
- }\r
- else\r
- {\r
- if(!findCKInDom()) return;\r
- markEnd();\r
- setTimeout("checkAgain();",50);\r
- }\r
- }\r
-}\r
-\r
-function getFirstKeyFromPos(aDataCon,aPos)\r
-{\r
- var sCurrentK=getBiggestChar();\r
- for(var i=0;i<aPos.length;i++)\r
- {\r
- if(aDataCon[i].aKs&&aDataCon[i].aKs.length>0&&aPos[i]>=0&&aPos[i]<aDataCon[i].aKs.length)\r
- {\r
- if(sCurrentK==""||\r
- compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)\r
- {\r
- sCurrentK=aDataCon[i].aKs[aPos[i]].sName;\r
- }\r
- }\r
- }\r
- return sCurrentK;\r
-}\r
-\r
-function checkAgain()\r
-{\r
- if(!gbProcess)\r
- {\r
- if(gsBCK!=null)\r
- {\r
- gsCK=gsBCK;\r
- gsBCK=null;\r
- findCK();\r
- }\r
- else\r
- {\r
- markBegin();\r
- getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
- }\r
- }\r
- else\r
- setTimeout("checkAgain()",50);\r
-}\r
-\r
-function getLimit(aDataCon,aPos,aMaxPos,aMinPos,i)\r
-{\r
- aMaxPos[i]=aDataCon[i].nNum;\r
- aMinPos[i]=-1;\r
- var oPNode=null;\r
- if(aDataCon[i].oUsedItems)\r
- {\r
- var oUsedItems=aDataCon[i].oUsedItems;\r
- do{\r
- if(oUsedItems.nB>aPos[i])\r
- {\r
- aMaxPos[i]=oUsedItems.nB;\r
- break;\r
- }\r
- oPNode=oUsedItems;\r
- oUsedItems=oUsedItems.oN;\r
- }while(oUsedItems!=null);\r
- if(oPNode)\r
- aMinPos[i]=oPNode.nE;\r
- }\r
- else if(aDataCon[i].aKs==null)\r
- {\r
- aMaxPos[i]=aMinPos[i]=aPos[i];\r
- }\r
- if(aMinPos[i]>=aPos[i]||aMaxPos[i]<=aPos[i])\r
- {\r
- aMaxPos[i]=aMinPos[i]=aPos[i];\r
- }\r
-}\r
-\r
-function getIdxPos(oIdx,bDown,sK)\r
-{\r
- var aKs=oIdx.aKs;\r
- var nIdx;\r
- if(bDown)\r
- nIdx=oIdx.nNum;\r
- else\r
- nIdx=-1;\r
- if(aKs!=null)\r
- {\r
- for(var i=0;i<aKs.length;i++)\r
- { \r
- if(bDown)\r
- {\r
- if(compare(aKs[i].sName,sK)>0)\r
- {\r
- nIdx=i;\r
- break;\r
- }\r
- }\r
- else\r
- {\r
- if(compare(aKs[i].sName,sK)<0)\r
- nIdx=i;\r
- else\r
- break;\r
- }\r
- i+=aKs[i].nNKOff;\r
- }\r
- }\r
- else if(oIdx.aKsOnly)\r
- {\r
- var aKsOnly=oIdx.aKsOnly;\r
- for(var i=0;i<aKsOnly.length;i++)\r
- { \r
- if(aKsOnly[i])\r
- {\r
- if(bDown)\r
- {\r
- if(compare(aKsOnly[i],sK)>0)\r
- {\r
- nIdx=i;\r
- break;\r
- }\r
- }\r
- else\r
- {\r
- if(compare(aKsOnly[i],sK)<0)\r
- nIdx=i;\r
- else\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- return nIdx;\r
-}\r
-\r
-function writeItems(oHTML,aDataCon,aPos,aMinPos,aMaxPos,bDown,nLevel)\r
-{\r
- var aOldPos=new Array();\r
- for(var i=0;i<aPos.length;i++)\r
- {\r
- aOldPos[i]=aPos[i];\r
- }\r
- var p;\r
- do{\r
- var sCurrentK="";\r
- var aCurIdxSet=new Array();\r
- p=0;\r
- for(i=0;i<aDataCon.length;i++)\r
- {\r
- if(aDataCon[i].aKs&&aDataCon[i].aKs.length&&aPos[i]!=-1&&\r
- (bDown&&aPos[i]<aMaxPos[i])||(!bDown&&aPos[i]>aMinPos[i]))\r
- {\r
- if(sCurrentK==""||\r
- (bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)>0)||\r
- (!bDown&&compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)<0))\r
- {\r
- sCurrentK=aDataCon[i].aKs[aPos[i]].sName;\r
- p=0;\r
- aCurIdxSet[p++]=i;\r
- }\r
- else if(compare(sCurrentK,aDataCon[i].aKs[aPos[i]].sName)==0){\r
- aCurIdxSet[p++]=i;\r
- }\r
- }\r
- else if(nLevel==1&&aMaxPos[i]!=aMinPos[i]){\r
- if(bDown&&aPos[i]==aMaxPos[i])\r
- {\r
- if(aDataCon[i].aKs)\r
- {\r
- gsSKA=aDataCon[i].aKs[aOldPos[i]].sName;\r
- return false;\r
- }\r
- }\r
- else if(!bDown&&aPos[i]==aMinPos[i])\r
- {\r
- if(aDataCon[i].aKs)\r
- {\r
- gsSKB=aDataCon[i].aKs[aOldPos[i]].sName;\r
- return false;\r
- }\r
- }\r
- }\r
- }\r
- if(p>=1){\r
- for(var s=0;s<p;s++)\r
- {\r
- aOldPos[aCurIdxSet[s]]=aPos[aCurIdxSet[s]];\r
- }\r
- mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,p,aPos,nLevel);\r
- adjustPosition(bDown,aDataCon,aCurIdxSet,p,aPos);\r
- \r
- if(nLevel==1&&oHTML.nNeeded<=oHTML.nCurrent){\r
- return true;\r
- }\r
- }\r
- }while(p>0);\r
- return true;\r
-}\r
-\r
-function updateUsedK(aDataCon,aOriPos,aOldPos,bDown)\r
-{\r
- for(var i=0;i<aDataCon.length;i++)\r
- {\r
- if (aOldPos[i]!=aOriPos[i])\r
- {\r
- var nBP=0;\r
- var nEP=0;\r
- if(bDown)\r
- {\r
- nBP=aOriPos[i];\r
- nEP=aOldPos[i]-1;\r
- }\r
- else\r
- {\r
- if (aOldPos[i]!=-1)\r
- nBP=aOldPos[i]+aDataCon[i].aKs[aOldPos[i]].nNKOff+1;\r
- else\r
- nBP=0;\r
- nEP=aOriPos[i]+aDataCon[i].aKs[aOriPos[i]].nNKOff;\r
- }\r
- if(nBP<=nEP)\r
- {\r
- setContentsUsed(aDataCon[i],nBP,nEP);\r
- \r
- var oFirstPair=aDataCon[i].oUsedItems;\r
- if(oFirstPair.oN==null&&oFirstPair.nB==0&&oFirstPair.nE==aDataCon[i].nNum-1)\r
- {\r
- storeKeysOnly(aDataCon[i]);\r
- aDataCon[i].oUsedItems=aDataCon[i].aKs=aDataCon[i].sFileName=null;\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-function storeKeysOnly(oCData)\r
-{\r
- oCData.aKsOnly=new Array();\r
- for(var i=0;i<oCData.aKs.length;i++)\r
- {\r
- oCData.aKsOnly[i]=oCData.aKs[i].sName;\r
- i+=oCData.aKs[i].nNKOff;\r
- }\r
-}\r
-\r
-function setContentsUsed(oIdx,nB,nE)\r
-{\r
- if(!oIdx.oUsedItems)\r
- oIdx.oUsedItems=new usedItems(nB,nE);\r
- else\r
- {\r
- var oUsedItems=oIdx.oUsedItems;\r
- var oPNode=null;\r
- do{\r
- if(oUsedItems.nB>nB)\r
- {\r
- if(oUsedItems.nB==nE+1)\r
- {\r
- oUsedItems.nB=nB;\r
- }\r
- else{\r
- var oNewNode=new usedItems(oUsedItems.nB,oUsedItems.nE);\r
- oNewNode.oN=oUsedItems.oN;\r
- oUsedItems.nB=nB;\r
- oUsedItems.nE=nE;\r
- oUsedItems.oN=oNewNode;\r
- }\r
- break;\r
- }\r
- oPNode=oUsedItems;\r
- oUsedItems=oUsedItems.oN;\r
- }while(oUsedItems);\r
- if(!oUsedItems)\r
- {\r
- if(oPNode!=null)\r
- oPNode.oN=new usedItems(nB,nE);\r
- }\r
- if(oPNode!=null){\r
- if(oPNode.nE==oPNode.oN.nB-1)\r
- {\r
- oPNode.nE=oPNode.oN.nE;\r
- oPNode.oN=oPNode.oN.oN;\r
- }\r
- }\r
- }\r
-}\r
-\r
-function projInfo(sPPath,sDPath,sFile)\r
-{\r
- this.sPPath=sPPath;\r
- this.sDPath=sDPath;\r
- this.sFile=sFile;\r
-}\r
-\r
-function addProjInfo(sPPath,sDPath,sFile)\r
-{\r
- var oIdxInfo=new projInfo(sPPath,sDPath,sFile);\r
- gaData[gaData.length]=oIdxInfo;\r
- return oIdxInfo;\r
-}\r
-\r
-function writeDataIFrame()\r
-{\r
- if(gnLoad<gaData.length)\r
- {\r
- gbLoadInfo=true;\r
- loadData2(gaData[gnLoad].sPPath+gaData[gnLoad].sDPath+gaData[gnLoad].sFile);\r
- }\r
- else{\r
- if(gnItems!=0)\r
- {\r
- markBegin();\r
- writeFakeItems();\r
- gsSKA="";\r
- gnNeeded=gnVisible;\r
- gnIns=0;\r
- checkReady();\r
- }\r
- }\r
-}\r
-\r
-function getH6ById(nPos)\r
-{\r
- if(document.all)\r
- return document.all("fk"+nPos);\r
- else if(document.getElementsByName)\r
- return document.getElementsByName("fk"+nPos);\r
- return null; \r
-}\r
-\r
-function showItemsInEvaluation(nBP)\r
-{\r
- var bRtn=true;\r
- var fPer=nBP/gnItems;\r
- var nB=Math.floor(fPer*gnMaxItems);\r
- var oCData=getChunkByIdx(gnRef,nB);\r
- if(oCData)\r
- {\r
- if(!oCData.aKs&&oCData.sFileName!=null)\r
- {\r
- gnNKI=nB;\r
- goCData=oCData;\r
- oCData.nProjId=gnRef;\r
- gbLoadInfo=false;\r
- beginLoading();\r
- loadData2(gaData[gnRef].sPPath+gaData[gnRef].sDPath+oCData.sFileName);\r
- }\r
- else{\r
- gsSKA=getKByIdx(oCData,nB);\r
- if(gsSKA)\r
- {\r
- gsSKB=null;\r
- gbNeedCalc=true;\r
- gbScrl=true;\r
- checkReady()\r
- }\r
- else\r
- {\r
- markEnd();\r
- bRtn=false;\r
- }\r
- }\r
- }\r
- else\r
- {\r
- markEnd();\r
- bRtn=false;\r
- }\r
- return bRtn;\r
-}\r
-\r
-function isUsed(oCData,nPos)\r
-{\r
- var oUsed=oCData.oUsedItems;\r
- while(oUsed&&oUsed.nB<=nPos)\r
- {\r
- if(oUsed.nE>=nPos) return true;\r
- oUsed=oUsed.oN;\r
- }\r
- return false;\r
-}\r
-\r
-function getKByIdx(oCData,nB)\r
-{\r
- var nRelPos=nB-(oCData.nTotal-oCData.nNum);\r
- var aIKs=oCData.aKs;\r
- if(nRelPos>=0&&aIKs&&nRelPos<aIKs.length)\r
- {\r
- var oK=null;\r
- do{\r
- oK=aIKs[nRelPos++];\r
- } \r
- while((oK.nType==3||isUsed(oCData,nRelPos-1))&&nRelPos<aIKs.length);\r
- if(oK.nType!=3)\r
- {\r
- return oK.sName;\r
- }\r
- else{\r
- nRelPos=nB-(oCData.nTotal-oCData.nNum)-1;\r
- if(nRelPos>=0)\r
- {\r
- do{\r
- oK=aIKs[nRelPos--];\r
- }\r
- while((oK.nType==3||isUsed(oCData,nRelPos+1))&&nRelPos>=0);\r
- }\r
- if(oK.nType!=3)\r
- {\r
- return oK.sName;\r
- }\r
- }\r
- }\r
- return null;\r
-}\r
-\r
-function loadData2(sFileName)\r
-{\r
- disEvt();\r
- if(gbXML)\r
- loadDataXML(sFileName);\r
- else\r
- loadData(sFileName);\r
- enEvt();\r
-}\r
-\r
-function projReady(aChunk)\r
-{\r
- gaChunks[gnLoad++]=aChunk;\r
- var len=aChunk.length;\r
- var nTotal=0;\r
- if(len>0)\r
- nTotal=aChunk[len-1].nTotal;\r
- gnItems+=nTotal;\r
- if(nTotal>gnMaxItems)\r
- {\r
- gnMaxItems=nTotal;\r
- gnRef=gnLoad-1;\r
- }\r
- setTimeout("writeDataIFrame();",1);\r
-}\r
-\r
-function writeFakeItems()\r
-{\r
- disEvt();\r
- gnUHeight=15;\r
- var sHTML=getFakeItemsHTMLbyCount(0,gnItems);\r
- document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
- var obj=getH6ById(0);\r
- if (document.body != null)\r
- {\r
- gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);\r
- }\r
- gaFakes[0]=new fakeItemsArea(0,gnItems,"",getEndString(),obj);\r
- enEvt();\r
-}\r
-\r
-function getEndString()\r
-{\r
- var sBC=getBiggestChar();\r
- return sBC+sBC+sBC+sBC+sBC+sBC+sBC+sBC;\r
-}\r
-\r
-function getUnitIdx(nScrl,nHeight)\r
-{\r
- if(gaFakes.length==0)\r
- {\r
- markEnd();\r
- return;\r
- }\r
- var nB=0;\r
- var nE=gaFakes.length-1;\r
- var nM=-1;\r
- var nTop=0;\r
- var nBtm=0;\r
- var bF=false;\r
- do{\r
- nM=(nB+nE)>>1;\r
- nBtm=gaFakes[nM].getBtm();\r
- nTop=gaFakes[nM].getTop();\r
- \r
- if(nTop>=nScrl+nHeight)\r
- nE=nM-1;\r
- else if(nBtm<nScrl)\r
- nB=nM+1;\r
- else{\r
- bF=true;\r
- break;\r
- }\r
- }while(nE>=nB);\r
- if(bF)\r
- {\r
- if(nTop>=nScrl){\r
- gsSKA=gaFakes[nM].sKA;\r
- gsSKB=null;\r
- gnNeeded=Math.ceil((nHeight-nTop+nScrl)/gnUHeight);\r
- gnIns=gaFakes[nM].nB;\r
- checkReady();\r
- }\r
- else if(nBtm<=nScrl+nHeight){\r
- gsSKB=gaFakes[nM].sKB;\r
- gsSKA=null;\r
- gnNeeded=Math.ceil((nBtm-nScrl+gnScrlMgn)/gnUHeight);\r
- gbNeedCalc=true;\r
- checkReady();\r
- }\r
- else{\r
- gnNeeded=gnVisible;\r
- var nUnitIdx=gaFakes[nM].nB+Math.floor((nScrl-nTop)/gnUHeight);\r
- if (!showItemsInEvaluation(nUnitIdx))\r
- {\r
- gsSKA=gaFakes[nM].sKA;\r
- gsSKB=null;\r
- gnNeeded=Math.ceil(nHeight/gnUHeight);\r
- gnIns=gaFakes[nM].nB;\r
- checkReady();\r
- }\r
- }\r
- }\r
- else\r
- markEnd();\r
-}\r
-\r
-function disEvt()\r
-{\r
- window.onscroll=null;\r
- window.onresize=null;\r
-}\r
-\r
-function enEvt()\r
-{\r
- window.onscroll=window_OnScroll;\r
- window.onresize=window_OnResize;\r
-}\r
-\r
-function insertIdxKs(nIns,oHTML,bScrl)\r
-{\r
- var bRtn=true;\r
- disEvt();\r
- var nCount=oHTML.nConsumed;\r
- var nB=0;\r
- var nE=gaFakes.length-1;\r
- var nM=-1;\r
- var bF=false;\r
- do{\r
- nM=(nB+nE)>>1;\r
- if(gaFakes[nM].nB>nIns)\r
- nE=nM-1;\r
- else if(gaFakes[nM].nB+gaFakes[nM].nNum<=nIns)\r
- nB=nM+1;\r
- else{\r
- bF=true;\r
- break;\r
- }\r
- }while(nE>=nB);\r
- if(bF)\r
- {\r
- var oFIA=gaFakes[nM];\r
- var nOffsetTop=oFIA.getTop();\r
- var nOffsetBottom=oFIA.getBtm();\r
- var nDelta=0;\r
- var nHDiff=nIns-oFIA.nB;\r
- var nTDiff=oFIA.nNum+oFIA.nB-(nIns+nCount);\r
- if(nHDiff>0)\r
- {\r
- nDelta=oFIA.setNum(nHDiff);\r
- var sOldKBefore=oFIA.sKB;\r
- oFIA.sKB=oHTML.sFK;\r
- if(nTDiff>0)\r
- {\r
- var sHTML=getFakeItemsHTMLbyCount(nIns,nTDiff);\r
- oFIA.insertAdjacentHTML("afterEnd",sHTML);\r
- var obj=getH6ById(nIns);\r
- insertItemIntoArray(gaFakes,nM+1,new fakeItemsArea(nIns+nCount,nTDiff,oHTML.sLK,sOldKBefore,obj));\r
- }\r
- oFIA.insertAdjacentHTML("afterEnd",oHTML.sHTML); \r
- if(bScrl)\r
- {\r
- if(gbMac&&gbIE4)\r
- {\r
- var nScrollPos=nOffsetBottom-nDelta;\r
- while(document.body.scrollTop!=nScrollPos)\r
- document.body.scrollTop=nScrollPos;\r
- }\r
- else\r
- window.scrollTo(0,nOffsetBottom-nDelta);\r
- }\r
- }\r
- else{\r
- oFIA.insertAdjacentHTML("beforeBegin",oHTML.sHTML);\r
- if(bScrl){\r
- if(gbMac&&gbIE4)\r
- {\r
- var nScrollPos=nOffsetTop;\r
- while(document.body.scrollTop!=nScrollPos)\r
- document.body.scrollTop=nScrollPos;\r
- }\r
- else\r
- window.scrollTo(0,nOffsetTop);\r
- }\r
- \r
- if(nTDiff>0)\r
- {\r
- oFIA.nB=nIns+nCount;\r
- nDelta=oFIA.setNum(nTDiff);\r
- oFIA.sKA=oHTML.sLK;\r
- } \r
- else{\r
- gaFakes[nM].setNum(0);\r
- removeItemFromArray(gaFakes,nM);\r
- }\r
- }\r
- }\r
- else\r
- bRtn=false;\r
- enEvt();\r
- return bRtn;\r
-}\r
-\r
-function window_OnScroll()\r
-{\r
- gnSE++;\r
- setTimeout("procScroll();",50); \r
-}\r
-\r
-function procScroll()\r
-{\r
- if(gnSE==1&&!gbProcess)\r
- {\r
- markBegin();\r
- getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
- }\r
- gnSE--;\r
-}\r
-\r
-function window_OnResize()\r
-{\r
- gnRE++;\r
- setTimeout("procResize();",50);\r
-}\r
-\r
-function procResize()\r
-{\r
- if(gnRE==1&&!gbProcess)\r
- {\r
- markBegin();\r
- gnVisible=Math.ceil(document.body.clientHeight/gnUHeight);\r
- if(gnIns==-1)\r
- getUnitIdx(document.body.scrollTop,document.body.clientHeight);\r
- }\r
- gnRE--;\r
-}\r
-\r
-function getChunkByIdx(nIdx,nPosition)\r
-{\r
- var oCData=null;\r
- if(nIdx<gaChunks.length)\r
- {\r
- var len=gaChunks[nIdx].length;\r
- if(len>0)\r
- {\r
- var nB=0;\r
- var nE=len-1;\r
- var bF=false;\r
- do{\r
- var nM=(nB+nE)>>1;\r
- if(nPosition<gaChunks[nIdx][nM].nTotal)\r
- {\r
- bF=true;\r
- nE=nM;\r
- }\r
- else\r
- nB=nM+1;\r
- }while(nE>nB);\r
- if(bF)\r
- oCData=gaChunks[nIdx][nE];\r
- else if(nPosition<gaChunks[nIdx][nB].nTotal)\r
- oCData=gaChunks[nIdx][nB];\r
- }\r
- }\r
- return oCData;\r
-}\r
-\r
-function getChunkedData(nIdx,bDown,sK)\r
-{\r
- var oCData=null;\r
- var nCandId=-1;\r
- if(nIdx<gaChunks.length)\r
- {\r
- var len=gaChunks[nIdx].length;\r
- if(len>0)\r
- {\r
- var nB=0;\r
- var nE=len-1;\r
- var bF=false;\r
- do{\r
- var nM=(nB+nE+(bDown?0:1))>>1;\r
- if(bDown)\r
- {\r
- if(compare(sK,gaChunks[nIdx][nM].sEK)<0)\r
- {\r
- bF=true;\r
- nE=nM;\r
- }\r
- else\r
- nB=nM+1;\r
- }\r
- else\r
- {\r
- if(compare(sK,gaChunks[nIdx][nM].sBK)>0)\r
- {\r
- bF=true;\r
- nB=nM;\r
- }\r
- else\r
- nE=nM-1;\r
- }\r
- }while(nE>nB);\r
- if(bF)\r
- {\r
- if(bDown)\r
- nCandId=nE;\r
- else\r
- nCandId=nB;\r
- }\r
- else\r
- {\r
- if(bDown)\r
- {\r
- if(gaChunks[nIdx].length>nB&&compare(sK,gaChunks[nIdx][nB].sEK)<0)\r
- nCandId=nB;\r
- else\r
- nCandId=gaChunks[nIdx].length-1;\r
- }\r
- else\r
- {\r
- if(0<=nE&&compare(sK,gaChunks[nIdx][nE].sBK)>0)\r
- nCandId=nE;\r
- else\r
- nCandId=0;\r
- }\r
- }\r
- return gaChunks[nIdx][nCandId];\r
- }\r
- }\r
- return null;\r
-}\r
-\r
-function findCK()\r
-{\r
- if(gsCK!=null)\r
- {\r
- gsSKA=gsCK;\r
- gbFindCK=true;\r
- gnNeeded=1;\r
- markBegin();\r
- checkReady();\r
- }\r
-}\r
-\r
-function writeLoadingDiv(nIIdx)\r
-{\r
- return "<div id=\""+gsLoadingDivID+"\" style=\"position:absolute;top:0;left:0;z-index:600;visibility:hidden;padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";\r
-}\r
-\r
-var gbWhHost=true;
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>Index content</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whlang.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whhost.js"></script>\r
-<script language="javascript1.2" src="whihost.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var goPopup = null;\r
-var gbPopupMenuTimeoutExpired=false;\r
-var gBsClientWidth=640;\r
-var gBsClientHeight=480;\r
-var g_bIsPopupMenuInit=false;\r
-\r
-function WritePopupMenuLayer()\r
-{\r
- if (!g_bIsPopupMenuInit)\r
- {\r
- document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>");\r
- document.write("<STYLE TYPE='text/css'>");\r
- if (gbMac && gbIE4) {\r
- document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:10pt; text-decoration:none;}");\r
- document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:10pt; text-decoration:none;}");\r
- } else {\r
- document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:8pt; text-decoration:none;}");\r
- document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:8pt; text-decoration:none;}");\r
- }\r
- document.write("</STYLE>");\r
- }\r
- g_bIsPopupMenuInit = true;\r
-}\r
-\r
-function PopupMenu_Invoke()\r
-{\r
- if (gbNav6)\r
- resetHighLight();\r
- \r
- if (!gbNav6 && document.readyState != "complete")\r
- return false;\r
- var fn_arguments = PopupMenu_Invoke.arguments; \r
- // Make sure we have reasonable arguments\r
- var argLen = fn_arguments.length;\r
- if (argLen < 3) {\r
- return false;\r
- }\r
-\r
- // Check to see if we only have one target\r
- var strTarget = "";\r
- \r
- strTarget = "TARGET='" + fn_arguments[1] + "'";\r
- \r
- if (argLen < 5) {\r
- // Get the place that we will be putting the topic into\r
- var strURL = fn_arguments[3];\r
-\r
- if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined")\r
- window.open(strURL, fn_arguments[1]);\r
- else\r
- window.open(strURL);\r
- \r
- return false;\r
- }\r
- \r
- var strMenu = '<TABLE STYLE="border:2px outset white;" CELLSPACING=0';\r
- if (gbMac && gbIE4) {\r
- strMenu += ' CELLPADDING=4';\r
- } else {\r
- strMenu += ' CELLPADDING=2';\r
- } \r
- strMenu += ' BGCOLOR=#c0c0c0>';\r
-\r
- // Add each of the items\r
- if (gbIE55)\r
- {\r
- var i = 2;\r
- while (i <= argLen - 1) {\r
- strMenu += '<TR><TD><NOBR>'\r
- strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A ';\r
- strMenu += ' onclick="parent.PopupMenu_2HandleClick(\'' + excapeSingleQuotandSlash(fn_arguments[i + 1]) + '\', \'' + fn_arguments[1] + '\');"';\r
- strMenu += ' onmouseover="parent.PopupMenu_Over(event);"';\r
- strMenu += ' onmouseout="parent.PopupMenu_Out(event);"';\r
- strMenu += '>';\r
- strMenu += '<SPAN CLASS="PopupNotOver">' + fn_arguments[i] + '</SPAN>';\r
- strMenu += '</A></DIV></NOBR></TD></TR>';\r
- i += 2;\r
- }\r
- }\r
- else\r
- {\r
- var i = 2;\r
- while (i <= argLen - 1) {\r
- strMenu += '<TR><TD><NOBR>'\r
- strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + fn_arguments[i + 1] + '" ' + strTarget;\r
- strMenu += ' onclick="PopupMenu_HandleClick(event);"';\r
- strMenu += ' onmouseover="PopupMenu_Over(event);"';\r
- strMenu += ' onmouseout="PopupMenu_Out(event);"';\r
- strMenu += '>';\r
- strMenu += '<SPAN CLASS="PopupNotOver">' + excapeSingleQuotandSlash(fn_arguments[i]) + '</SPAN>';\r
- strMenu += '</A></DIV></NOBR></TD></TR>';\r
- i += 2;\r
- }\r
- }\r
- strMenu += "</TABLE>";\r
-\r
- if (gbMac && gbIE4) {\r
- // ie5 in mac need something. </TABLE> is one of them.\r
- strMenu +="<TABLE></TABLE>";\r
- }\r
-\r
- var layerPopup = null;\r
- var stylePopup = null;\r
- var nEventX = 0;\r
- var nEventY = 0;\r
- var nWindowWidth = 0;\r
- if (gbIE4||gbOpera7)\r
- {\r
- layerPopup = document.all["PopupMenu"];\r
- layerPopup.innerHTML = strMenu;\r
- stylePopup = layerPopup.style;\r
-\r
- _BSPSGetClientSize();\r
-\r
- // Get the position of the item causing the event (relative to its parent)\r
- nEventX = window.event.clientX;\r
- nEventY = window.event.clientY;\r
- \r
- if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) {\r
- nEventY += document.body.scrollTop + 10;\r
- } else {\r
- nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20;\r
- }\r
- stylePopup.top = nEventY;\r
-\r
- if (nEventX + layerPopup.scrollWidth + 20 > gBsClientWidth) {\r
- if (gBsClientWidth - layerPopup.scrollWidth < 5) {\r
- stylePopup.left = 5;\r
- } else {\r
- stylePopup.left = gBsClientWidth - layerPopup.scrollWidth - 5;\r
- }\r
- } else {\r
- stylePopup.left = nEventX + document.body.scrollLeft + 20;\r
- }\r
-\r
- if (gbIE55) {\r
- var nPosX = window.event.clientX;\r
- var nPosY = window.event.clientY;\r
- if (window.event.srcElement)\r
- {\r
- nPosX = window.event.srcElement.offsetLeft + window.event.srcElement.offsetWidth - document.body.scrollLeft;\r
- nPosY = window.event.srcElement.offsetTop + window.event.srcElement.offsetHeight - document.body.scrollTop;\r
- }\r
- goPopup = window.createPopup();\r
- var oPopupBody = goPopup.document.body;\r
- goPopup.document.createStyleSheet();\r
- goPopup.document.styleSheets[0].addRule(".PopupOver", "{font-family:\"Arial\"; cursor: hand;color:white; background:navy; font-size:8pt; text-decoration:none;}");\r
- goPopup.document.styleSheets[0].addRule(".PopupNotOver", "{font-family:\"Arial\"; color:black; background:#c0c0c0; font-size:8pt; text-decoration:none;}");\r
- oPopupBody.insertAdjacentHTML("afterBegin", strMenu);\r
- goPopup.show(nPosX, nPosY, layerPopup.scrollWidth, layerPopup.scrollHeight, document.body);\r
- }\r
- else \r
- {\r
- stylePopup.visibility = "visible";\r
- document.onclick = PopupMenu_HandleClick;\r
- }\r
- } else if (gbNav6) {\r
- layerPopup = document.getElementById("PopupMenu");\r
- layerPopup.style.visibility = "hidden";\r
- \r
- var e = fn_arguments[0];\r
- nEventX = e.pageX;\r
- nEventY = e.pageY;\r
- _BSPSGetClientSize();\r
- layerPopup.innerHTML = strMenu;\r
-\r
- if (nEventY + layerPopup.offsetHeight + 20 < window.pageYOffset + gBsClientHeight) {\r
- nEventY += 20;\r
- } else {\r
- nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20;\r
- }\r
-\r
- if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) {\r
- if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) {\r
- nEventX = 5;\r
- } else {\r
- nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20;\r
- }\r
- } else {\r
- nEventX += 20;\r
- }\r
- layerPopup.style.top = nEventY;\r
- layerPopup.style.left = nEventX;\r
-\r
- // set again to avoid the frash in netscape 6.\r
- layerPopup.innerHTML = strMenu;\r
- layerPopup.style.visibility = "visible";\r
- window.onclick = PopupMenu_HandleClick;\r
- } \r
-\r
- window.gbPopupMenuTimeoutExpired = false;\r
- setTimeout("PopupMenu_Timeout();", 100);\r
- return false;\r
-}\r
-\r
-function PopupMenu_Timeout()\r
-{\r
- window.gbPopupMenuTimeoutExpired = true;\r
-}\r
-\r
-function PopupMenu_Over(e)\r
-{\r
- if (gbIE4||gbOpera7)\r
- e.srcElement.className = "PopupOver";\r
- else if (gbNav6)\r
- e.target.parentNode.className = "PopupOver";\r
-}\r
-\r
-function PopupMenu_Out(e)\r
-{\r
- if (gbIE4||gbOpera7)\r
- e.srcElement.className = "PopupNotOver";\r
- else if (gbNav6)\r
- e.target.parentNode.className = "PopupNotOver";\r
-}\r
-\r
-function PopupMenu_2HandleClick(surl, starget)\r
-{\r
- window.open(surl, starget);\r
- goPopup.hide();\r
-}\r
-\r
-function PopupMenu_HandleClick(e)\r
-{\r
- if (!window.gbPopupMenuTimeoutExpired) {\r
- return;\r
- }\r
-\r
- var layerPopup = getElement("PopupMenu");\r
- layerPopup.style.visibility = "hidden";\r
-\r
- return;\r
-}\r
-\r
-//Get client size info\r
-function _BSPSGetClientSize()\r
-{\r
- gBsClientWidth = document.body.clientWidth;\r
- gBsClientHeight = document.body.clientHeight;\r
-}\r
-\r
-if (window.gbWhIHost)\r
-{\r
- \r
- \r
- setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
- setFont("Empty", "Arial","9pt","#000000","normal","normal","none");\r
- setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
- setActiveBgColor("#cccccc");\r
- setMargin("0pt");\r
- setIndent("9pt");\r
- IndexWriteClassStyle();\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</head>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" scroll="auto" bgcolor="white">\r
-<script languageE="JavaScript">\r
-<!--\r
-WritePopupMenuLayer();\r
-//-->\r
-</script>\r
-</body>\r
-</html>\r
-\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Index</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gbIndexLayerInit = false;\r
-if (window.gbWhProxy&&window.gbWhMsg&&window.gbWhVer)\r
-{\r
- var strWrite;\r
- if (gbMac)\r
- strWrite="<FRAMESET ROWS='45,100%' framespacing=0 frameborder=1>";\r
- else\r
- strWrite="<FRAMESET ROWS='60,100%' framespacing=0 frameborder=1>";\r
- strWrite +="<FRAME SRC='whiform.htm' title='index form frame' name='idxform' noresize='yes' scrolling='no'>";\r
- strWrite +="<FRAME SRC='whibody.htm' title='index content frame' name='idxbody' scrolling='yes'>";\r
- strWrite +="</FRAMESET>";\r
- document.write(strWrite);\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>Index form</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<style>\r
-<!--\r
-body {margin:0;}\r
--->\r
-</style>\r
-<body bgcolor="#c0c0c0">\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whform.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-function indexLookup(bCR)\r
-{\r
- var strInput = document.IndexInputForm.keywordField.value.toUpperCase();\r
- if (strInput != "") {\r
- var oParam = new Object();\r
- oParam.sInput = strInput;\r
- oParam.bCR = bCR;\r
- var oMessage = new whMessage(WH_MSG_SEARCHINDEXKEY, this, 1, oParam);\r
- SendMessage(oMessage);\r
- }\r
- if (gbMac) {\r
- document.IndexInputForm.keywordField.focus();\r
- }\r
-}\r
-\r
-function window_Unload()\r
-{\r
- UnRegisterListener2(this, WH_MSG_SHOWTOC);\r
- UnRegisterListener2(this, WH_MSG_SHOWIDX);\r
- UnRegisterListener2(this, WH_MSG_SHOWFTS);\r
- UnRegisterListener2(this, WH_MSG_SHOWGLO);\r
-}\r
-\r
-function onSendMessage(oMessage)\r
-{\r
- if (oMessage.nMessageId == WH_MSG_SHOWIDX)\r
- {\r
- document.IndexInputForm.keywordField.focus();\r
- }\r
- else if (oMessage.nMessageId == WH_MSG_SHOWFTS ||\r
- oMessage.nMessageId == WH_MSG_SHOWTOC || \r
- oMessage.nMessageId == WH_MSG_SHOWGLO)\r
- {\r
- document.IndexInputForm.keywordField.blur();\r
- }\r
- return true;\r
-}\r
-\r
-if (window.gbWhForm)\r
-{\r
- RegisterListener2(this, WH_MSG_SHOWTOC);\r
- RegisterListener2(this, WH_MSG_SHOWIDX);\r
- RegisterListener2(this, WH_MSG_SHOWFTS);\r
- RegisterListener2(this, WH_MSG_SHOWGLO);\r
- window.onunload=window_Unload;\r
- window.onload = init;\r
- gfunLookUp = indexLookup;\r
- gfunInit = null;\r
- gstrFormName = "IndexInputForm"\r
- gsTitle = "Type in the keyword to find:";\r
- gsTitle = "Type in the keyword to find:";\r
-\r
- \r
- \r
- \r
- \r
- \r
- \r
- setGoText("Go");\r
- setFont("Title", "Arial","9pt","#000000","normal","normal","none");\r
- \r
- \r
- document.write(getFormHTML());\r
- writeFormStyle();\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.002\r
-var gsDefaultTarget="bsscright";\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goIdxFont=null;\r
-var goIdxEmptyFont=null;\r
-var goIdxHoverFont=null;\r
-var gsIdxMargin="0pt";\r
-var gsIdxIndent="8pt";\r
-var gsIdxActiveBgColor="#cccccc";\r
-var gsCK = null;\r
-var gsBCK = null;\r
-var gbCR = false;\r
-var gbBCR = false;\r
-var gbWhIHost=true;\r
-\r
-function myEvent()\r
-{\r
- this.pageX = 0;\r
- this.pageY = 0;\r
-}\r
-var _event=new myEvent();\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- gsBgColor=sBgColor;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
- gsBgImage=sBgImage;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- if(sType=="Normal")\r
- goIdxFont=vFont;\r
- else if(sType=="Empty")\r
- goIdxEmptyFont=vFont;\r
- else if(sType=="Hover")\r
- goIdxHoverFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
- gsIdxActiveBgColor=sBgColor;\r
-}\r
-\r
-function setMargin(sMargin)\r
-{\r
- gsIdxMargin=sMargin;\r
-}\r
-\r
-function setIndent(sIndent)\r
-{\r
- gsIdxIndent=sIndent;\r
-}\r
-\r
-function writeOneItem(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)\r
-{\r
- var sHTML="";\r
- var nIdxSet=aCurIdxSet[0];\r
- var nIIdx=aPos[nIdxSet];\r
- var sKOriName=getItemName(aDataCon,nIdxSet,nIIdx);\r
- var sKName=_textToHtml(sKOriName);\r
-\r
- var nIdxIndent=parseInt(gsIdxIndent);\r
- var sTopics="";\r
- if(nLevel==1){\r
- if(getItemType(aDataCon,nIdxSet,nIIdx)==1)\r
- {\r
- sHTML+="<H6><nobr>";\r
- sHTML+="<b>"+sKName+"</b></nobr></H6>";\r
- }\r
- else{\r
- for(var i=0;i<nLength;i++)\r
- sTopics+=getIdxTopics(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
- sHTML+="<p style=\"margin-left:"+gsIdxIndent+"\"><nobr>";\r
- sHTML+="<a alt=\"" + sKName + "\" href=\"javascript:void(0);\" onfocus=\"clearHighLight();\" onclick=\"PopupMenu_Invoke(event,'"+excapeSingleQuotandSlash(getTargetName(aDataCon,nIdxSet,nIIdx))+"'";\r
- if(sTopics.length>0)\r
- sHTML+=sTopics+");return false;\">"+sKName+"</a></nobr></p>";\r
- else\r
- sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"</a></nobr></p>";\r
- }\r
- }\r
- else if(nLevel>=2){\r
- var nIndent=nIdxIndent*nLevel;\r
- for(var i=0;i<nLength;i++)\r
- sTopics+=getIdxTopics(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
- if (nLevel==2)\r
- sHTML+="<h6 class=\"firstsub\" style=\"margin-left:"+nIndent+"pt\"><nobr>";\r
- else\r
- sHTML+="<h6 style=\"margin-left:"+nIndent+"pt\"><nobr>";\r
- sHTML+="<a alt=\"" + sKName + "\" href=\"javascript:void(0);\" onfocus=\"clearHighLight();\" onclick=\"PopupMenu_Invoke(event,'"+excapeSingleQuotandSlash(getTargetName(aDataCon,nIdxSet,nIIdx))+"'";\r
- if(sTopics.length>0)\r
- sHTML+=sTopics+");return false;\">"+sKName+"</a></nobr></h6>";\r
- else\r
- sHTML+=");return false;\" style=\""+getFontStyle(goIdxEmptyFont)+"\">"+sKName+"</a></nobr></h6>";\r
- }\r
- oHTML.addHTML(sHTML,nLength,bDown,(nLevel==1),sKOriName);\r
-}\r
-\r
-function getTargetName(aDataCon,nIdxSet,nIIdx)\r
-{\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- if(aDataCon[nIdxSet].aKs[nIIdx].sTarget)\r
- return aDataCon[nIdxSet].aKs[nIIdx].sTarget;\r
- return gsDefaultTarget;\r
-}\r
-\r
-function mergeItems(oHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel)\r
-{\r
- var oLocalHTML=new indexHTMLPart();\r
- writeOneItem(oLocalHTML,bDown,aDataCon,aCurIdxSet,nLength,aPos,nLevel);\r
- \r
- var aLocalPos=new Array();\r
- var aMaxPos=new Array();\r
- for(var i=0;i<aPos.length;i++)\r
- {\r
- aLocalPos[i]=aPos[i];\r
- aMaxPos[i]=-1;\r
- }\r
- \r
- for(i=0;i<nLength;i++)\r
- {\r
- var nNKOff=getNKOff(aDataCon,aCurIdxSet[i],aLocalPos[aCurIdxSet[i]]);\r
- aLocalPos[aCurIdxSet[i]]++;\r
- if(nNKOff>0)\r
- aMaxPos[aCurIdxSet[i]]=aLocalPos[aCurIdxSet[i]]+nNKOff;\r
- }\r
- var oSubHTML=new indexHTMLPart();\r
- writeItems(oSubHTML,aDataCon,aLocalPos,null,aMaxPos,true,nLevel+1);\r
- oLocalHTML.addSubHTML(oSubHTML,true);\r
- oHTML.appendHTML(oLocalHTML,bDown);\r
-}\r
-\r
-function adjustPosition(bDown,aDataCon,aCurIdxSet,nLength,aPos)\r
-{\r
- if(bDown)\r
- {\r
- for(var i=0;i<nLength;i++)\r
- {\r
- var nNKOff=getNKOff(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
- aPos[aCurIdxSet[i]]+=(1+nNKOff);\r
- }\r
- }\r
- else{\r
- for(var i=0;i<nLength;i++)\r
- {\r
- var nPKOff=getPKOff(aDataCon,aCurIdxSet[i],aPos[aCurIdxSet[i]]);\r
- aPos[aCurIdxSet[i]]-=(1+nPKOff);\r
- }\r
- }\r
-}\r
-\r
-function getItemName(aDataCon,nIdxSet,nIIdx)\r
-{\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- return aDataCon[nIdxSet].aKs[nIIdx].sName;\r
- else\r
- return null;\r
-}\r
-\r
-function getItemType(aDataCon,nIdxSet,nIIdx)\r
-{\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- return aDataCon[nIdxSet].aKs[nIIdx].nType;\r
- else\r
- return 0;\r
-}\r
-\r
-function getNKOff(aDataCon,nIdxSet,nIIdx)\r
-{\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- return aDataCon[nIdxSet].aKs[nIIdx].nNKOff;\r
- else\r
- return null;\r
-}\r
-\r
-function getPKOff(aDataCon,nIdxSet,nIIdx)\r
-{\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- return aDataCon[nIdxSet].aKs[nIIdx].nPKOff;\r
- else\r
- return null;\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- if(gsBgImage&&gsBgImage.length>0)\r
- {\r
- document.body.background=gsBgImage;\r
- }\r
- if(gsBgColor&&gsBgColor.length>0)\r
- {\r
- document.body.bgColor=gsBgColor;\r
- }\r
- document.body.insertAdjacentHTML("beforeEnd",writeLoadingDiv());\r
- loadIdx();\r
- var oMsg=new whMessage(WH_MSG_SHOWIDX,this,1,null)\r
- SendMessage(oMsg);\r
-}\r
-\r
-function loadIdx()\r
-{\r
- if(!gbReady)\r
- {\r
- var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
- if(SendMessage(oResMsg)&&oResMsg.oParam)\r
- {\r
- gbReady=true;\r
- var oProj=oResMsg.oParam;\r
- var aProj=oProj.aProj;\r
- gbXML=oProj.bXML;\r
- if(aProj.length>0)\r
- {\r
- var sLangId=aProj[0].sLangId;\r
- for(var i=0;i<aProj.length;i++)\r
- {\r
- if(aProj[i].sIdx&&aProj[i].sLangId==sLangId)\r
- {\r
- addProjInfo(aProj[i].sPPath,aProj[i].sDPath,aProj[i].sIdx);\r
- }\r
- }\r
- }\r
- writeDataIFrame();\r
- enEvt();\r
- } \r
- }\r
-}\r
-\r
-function getIdxTopics(aDataCon,nIdxSet,nIIdx)\r
-{\r
- var sTopics="";\r
- if(nIdxSet<aDataCon.length&&aDataCon[nIdxSet].aKs.length>nIIdx)\r
- {\r
- if(aDataCon[nIdxSet].aKs[nIIdx].aTopics)\r
- {\r
- var nLen=aDataCon[nIdxSet].aKs[nIIdx].aTopics.length;\r
- var nProj=aDataCon[nIdxSet].nProjId;\r
- var sPath=gaData[nProj].sPPath;\r
- for(var i=0;i<nLen;i++)\r
- {\r
- var sURL=aDataCon[nIdxSet].aKs[nIIdx].aTopics[i].sURL;\r
- var sFullPath=_getFullPath(sPath,sURL);\r
- sTopics+=",'"+excapeSingleQuotandSlash(_textToHtml(aDataCon[nIdxSet].aKs[nIIdx].aTopics[i].sName))+"','"+excapeSingleQuotandSlash(_textToHtml_nonbsp(sFullPath))+"'";\r
- }\r
- }\r
- }\r
- return sTopics; \r
-}\r
-\r
-function findCKInDom()\r
-{\r
- if(gsCK!=null)\r
- {\r
- var sK=gsCK;\r
- var oP=getElementsByTag(document,"P");\r
- if(!oP) return false;\r
- var len=oP.length;\r
- var nB=0;\r
- var nE=len-1;\r
- var nM=0;\r
- var sItem="";\r
- var bF=false;\r
- while(nB<nE){\r
- nM=(nB+nE+1)>>1;\r
- sItem=getInnerText(oP[nM]);\r
- \r
- if(compare(sItem,sK)==0)\r
- {\r
- bF=true;\r
- break;\r
- }\r
- else if(compare(sItem,sK)>0)\r
- nE=nM-1;\r
- else if(compare(sItem,sK)<0)\r
- nB=nM;\r
- }\r
- if(!bF)\r
- {\r
- if(nB==nE) nM=nB;\r
- \r
- if(nM+1<len)\r
- {\r
- sItem=getInnerText(oP[nM+1]);\r
- if(compare(sItem,sK)<=0) nM++;\r
- } \r
- if(nM+1<len)\r
- {\r
- sItem=getInnerText(oP[nM+1]);\r
- if(compare(sItem.substring(0,sK.length),sK)==0) nM++;\r
- } \r
- }\r
- \r
- var oMatch=oP[nM];\r
- if(oMatch)\r
- {\r
- window.scrollTo(0,oMatch.offsetTop);\r
- var tempColl=getElementsByTag(oMatch,"A");\r
- if(tempColl&&tempColl.length>0){\r
- var nbTag=getElementsByTag(oMatch,"NOBR");\r
- if(nbTag&&nbTag.length>0)\r
- HighLightElement(nbTag[0], gsIdxActiveBgColor, "transparent");\r
- if (gbCR)\r
- {\r
- if (gbIE4)\r
- tempColl(0).click();\r
- else\r
- {\r
- var strCommand = tempColl[0].getAttribute("onClick");\r
- var nstrCommand = strCommand.indexOf(";");\r
- strCommand = strCommand.substring(0, nstrCommand);\r
- strCommand = strCommand.replace("event", "_event");\r
- window._event.pageX = oMatch.offsetLeft ;\r
- window._event.pageY = oMatch.offsetTop + 20;\r
- window.setTimeout(strCommand, 100);\r
- }\r
- }\r
- }\r
- }\r
- gsCK=gsBCK;\r
- gbCR=gbBCR;\r
- if(gsBCK!=null)\r
- {\r
- gsBCK=null;\r
- gbBCR=false;\r
- findCK();\r
- return false;\r
- }\r
- \r
- }\r
- return true;\r
-}\r
-\r
-function clearHighLight()\r
-{\r
- resetHighLight(gsBgColor);\r
-}\r
-\r
-function IndexWriteClassStyle()\r
-{\r
- var sStyle="";\r
- sStyle+="<STYLE TYPE='text/css'>";\r
- if (gsBgImage)\r
- sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
- else\r
- sStyle+="body {border-top:black 1px solid;}\n";\r
- if(gbIE4&&gbMac&&!gbIE5)\r
- {\r
- var nMargin=parseInt(gsIdxMargin);\r
- nMargin-=10;\r
- sStyle+="P {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
- sStyle+="H6 {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
- sStyle+="H6.firstsub {"+getFontStyle(goIdxFont)+"margin-top:"+nMargin+"pt;margin-bottom:"+gsIdxMargin+";}\n";\r
- }\r
- else\r
- {\r
- sStyle+="P {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
- sStyle+="H6 {"+getFontStyle(goIdxFont)+"margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
- }\r
- sStyle+="DIV {margin-top:"+gsIdxMargin+";margin-bottom:"+gsIdxMargin+";}\n";\r
- sStyle+="A:link {"+getFontStyle(goIdxFont)+"}\n";\r
- sStyle+="A:visited {"+getFontStyle(goIdxFont)+"}\n";\r
- sStyle+="A:active {background-color:"+gsIdxActiveBgColor+";}\n";\r
- sStyle+="A:hover {"+getFontStyle(goIdxHoverFont)+"}\n";\r
- sStyle+="</STYLE>"; \r
- document.write(sStyle);\r
- return;\r
-}\r
-\r
-function window_Unload()\r
-{\r
- UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
- UnRegisterListener2(this,WH_MSG_SEARCHINDEXKEY);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- if(oMsg)\r
- {\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_SEARCHINDEXKEY)\r
- {\r
- if(oMsg.oParam && oMsg.oParam.sInput)\r
- {\r
- if(gsCK==null)\r
- {\r
- gsCK=oMsg.oParam.sInput;\r
- gbCR = oMsg.oParam.bCR;\r
- findCK();\r
- }\r
- else\r
- {\r
- gsBCK=oMsg.oParam.sInput;\r
- gbBCR = oMsg.oParam.bCR;\r
- }\r
- }\r
- }\r
- else if(nMsgId==WH_MSG_PROJECTREADY)\r
- {\r
- loadIdx();\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-if(window.gbWhVer&&window.gbWhLang&&window.gbWhMsg&&window.gbWhUtil&&window.gbWhHost&&window.gbWhProxy)\r
-{\r
- RegisterListener2(this,WH_MSG_PROJECTREADY);\r
- RegisterListener2(this,WH_MSG_SEARCHINDEXKEY);\r
- goIdxFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
- goIdxEmptyFont=new whFont("Verdana","8pt","#666666","normal","normal","none");\r
- goIdxHoverFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
-\r
- window.onload=window_OnLoad;\r
- window.onbeforeunload=window_BUnload;\r
- window.onunload=window_Unload;\r
- gbWhIHost=true;\r
-}\r
-else\r
- document.location.reload();\r
-\r
+++ /dev/null
-// WebHelp 5.10.001\r
-var garrSortChar=new Array();\r
-var gaFtsStop=new Array();\r
-var gaFtsStem=new Array();\r
-var gbWhLang=false;\r
-\r
-garrSortChar[0] = 0;\r
-garrSortChar[1] = 1;\r
-garrSortChar[2] = 2;\r
-garrSortChar[3] = 3;\r
-garrSortChar[4] = 4;\r
-garrSortChar[5] = 5;\r
-garrSortChar[6] = 6;\r
-garrSortChar[7] = 7;\r
-garrSortChar[8] = 8;\r
-garrSortChar[9] = 40;\r
-garrSortChar[10] = 41;\r
-garrSortChar[11] = 42;\r
-garrSortChar[12] = 43;\r
-garrSortChar[13] = 44;\r
-garrSortChar[14] = 9;\r
-garrSortChar[15] = 10;\r
-garrSortChar[16] = 11;\r
-garrSortChar[17] = 12;\r
-garrSortChar[18] = 13;\r
-garrSortChar[19] = 14;\r
-garrSortChar[20] = 15;\r
-garrSortChar[21] = 16;\r
-garrSortChar[22] = 17;\r
-garrSortChar[23] = 18;\r
-garrSortChar[24] = 19;\r
-garrSortChar[25] = 20;\r
-garrSortChar[26] = 21;\r
-garrSortChar[27] = 22;\r
-garrSortChar[28] = 23;\r
-garrSortChar[29] = 24;\r
-garrSortChar[30] = 25;\r
-garrSortChar[31] = 26;\r
-garrSortChar[32] = 38;\r
-garrSortChar[33] = 45;\r
-garrSortChar[34] = 46;\r
-garrSortChar[35] = 47;\r
-garrSortChar[36] = 48;\r
-garrSortChar[37] = 49;\r
-garrSortChar[38] = 50;\r
-garrSortChar[39] = 33;\r
-garrSortChar[40] = 51;\r
-garrSortChar[41] = 52;\r
-garrSortChar[42] = 53;\r
-garrSortChar[43] = 88;\r
-garrSortChar[44] = 54;\r
-garrSortChar[45] = 34;\r
-garrSortChar[46] = 55;\r
-garrSortChar[47] = 56;\r
-garrSortChar[48] = 115;\r
-garrSortChar[49] = 119;\r
-garrSortChar[50] = 121;\r
-garrSortChar[51] = 123;\r
-garrSortChar[52] = 125;\r
-garrSortChar[53] = 126;\r
-garrSortChar[54] = 127;\r
-garrSortChar[55] = 128;\r
-garrSortChar[56] = 129;\r
-garrSortChar[57] = 130;\r
-garrSortChar[58] = 57;\r
-garrSortChar[59] = 58;\r
-garrSortChar[60] = 89;\r
-garrSortChar[61] = 90;\r
-garrSortChar[62] = 91;\r
-garrSortChar[63] = 59;\r
-garrSortChar[64] = 60;\r
-garrSortChar[65] = 131;\r
-garrSortChar[66] = 148;\r
-garrSortChar[67] = 150;\r
-garrSortChar[68] = 154;\r
-garrSortChar[69] = 158;\r
-garrSortChar[70] = 168;\r
-garrSortChar[71] = 171;\r
-garrSortChar[72] = 173;\r
-garrSortChar[73] = 175;\r
-garrSortChar[74] = 185;\r
-garrSortChar[75] = 187;\r
-garrSortChar[76] = 189;\r
-garrSortChar[77] = 191;\r
-garrSortChar[78] = 193;\r
-garrSortChar[79] = 197;\r
-garrSortChar[80] = 214;\r
-garrSortChar[81] = 216;\r
-garrSortChar[82] = 218;\r
-garrSortChar[83] = 220;\r
-garrSortChar[84] = 225;\r
-garrSortChar[85] = 230;\r
-garrSortChar[86] = 240;\r
-garrSortChar[87] = 242;\r
-garrSortChar[88] = 244;\r
-garrSortChar[89] = 246;\r
-garrSortChar[90] = 252;\r
-garrSortChar[91] = 61;\r
-garrSortChar[92] = 62;\r
-garrSortChar[93] = 63;\r
-garrSortChar[94] = 64;\r
-garrSortChar[95] = 66;\r
-garrSortChar[96] = 67;\r
-garrSortChar[97] = 131;\r
-garrSortChar[98] = 148;\r
-garrSortChar[99] = 150;\r
-garrSortChar[100] = 154;\r
-garrSortChar[101] = 158;\r
-garrSortChar[102] = 168;\r
-garrSortChar[103] = 171;\r
-garrSortChar[104] = 173;\r
-garrSortChar[105] = 175;\r
-garrSortChar[106] = 185;\r
-garrSortChar[107] = 187;\r
-garrSortChar[108] = 189;\r
-garrSortChar[109] = 191;\r
-garrSortChar[110] = 193;\r
-garrSortChar[111] = 197;\r
-garrSortChar[112] = 214;\r
-garrSortChar[113] = 216;\r
-garrSortChar[114] = 218;\r
-garrSortChar[115] = 220;\r
-garrSortChar[116] = 225;\r
-garrSortChar[117] = 230;\r
-garrSortChar[118] = 240;\r
-garrSortChar[119] = 242;\r
-garrSortChar[120] = 244;\r
-garrSortChar[121] = 246;\r
-garrSortChar[122] = 252;\r
-garrSortChar[123] = 68;\r
-garrSortChar[124] = 69;\r
-garrSortChar[125] = 70;\r
-garrSortChar[126] = 71;\r
-garrSortChar[127] = 27;\r
-garrSortChar[128] = 114;\r
-garrSortChar[129] = 28;\r
-garrSortChar[130] = 82;\r
-garrSortChar[131] = 170;\r
-garrSortChar[132] = 85;\r
-garrSortChar[133] = 112;\r
-garrSortChar[134] = 109;\r
-garrSortChar[135] = 110;\r
-garrSortChar[136] = 65;\r
-garrSortChar[137] = 113;\r
-garrSortChar[138] = 223;\r
-garrSortChar[139] = 86;\r
-garrSortChar[140] = 213;\r
-garrSortChar[141] = 29;\r
-garrSortChar[142] = 255;\r
-garrSortChar[143] = 30;\r
-garrSortChar[144] = 31;\r
-garrSortChar[145] = 80;\r
-garrSortChar[146] = 81;\r
-garrSortChar[147] = 83;\r
-garrSortChar[148] = 84;\r
-garrSortChar[149] = 111;\r
-garrSortChar[150] = 36;\r
-garrSortChar[151] = 37;\r
-garrSortChar[152] = 79;\r
-garrSortChar[153] = 229;\r
-garrSortChar[154] = 222;\r
-garrSortChar[155] = 87;\r
-garrSortChar[156] = 212;\r
-garrSortChar[157] = 32;\r
-garrSortChar[158] = 254;\r
-garrSortChar[159] = 251;\r
-garrSortChar[160] = 39;\r
-garrSortChar[161] = 72;\r
-garrSortChar[162] = 97;\r
-garrSortChar[163] = 98;\r
-garrSortChar[164] = 99;\r
-garrSortChar[165] = 100;\r
-garrSortChar[166] = 73;\r
-garrSortChar[167] = 101;\r
-garrSortChar[168] = 74;\r
-garrSortChar[169] = 102;\r
-garrSortChar[170] = 133;\r
-garrSortChar[171] = 93;\r
-garrSortChar[172] = 103;\r
-garrSortChar[173] = 35;\r
-garrSortChar[174] = 104;\r
-garrSortChar[175] = 75;\r
-garrSortChar[176] = 105;\r
-garrSortChar[177] = 92;\r
-garrSortChar[178] = 122;\r
-garrSortChar[179] = 124;\r
-garrSortChar[180] = 76;\r
-garrSortChar[181] = 106;\r
-garrSortChar[182] = 107;\r
-garrSortChar[183] = 108;\r
-garrSortChar[184] = 77;\r
-garrSortChar[185] = 120;\r
-garrSortChar[186] = 199;\r
-garrSortChar[187] = 94;\r
-garrSortChar[188] = 116;\r
-garrSortChar[189] = 117;\r
-garrSortChar[190] = 118;\r
-garrSortChar[191] = 78;\r
-garrSortChar[192] = 131;\r
-garrSortChar[193] = 131;\r
-garrSortChar[194] = 131;\r
-garrSortChar[195] = 131;\r
-garrSortChar[196] = 131;\r
-garrSortChar[197] = 131;\r
-garrSortChar[198] = 131;\r
-garrSortChar[199] = 150;\r
-garrSortChar[200] = 158;\r
-garrSortChar[201] = 158;\r
-garrSortChar[202] = 158;\r
-garrSortChar[203] = 158;\r
-garrSortChar[204] = 175;\r
-garrSortChar[205] = 175;\r
-garrSortChar[206] = 175;\r
-garrSortChar[207] = 175;\r
-garrSortChar[208] = 154;\r
-garrSortChar[209] = 193;\r
-garrSortChar[210] = 197;\r
-garrSortChar[211] = 197;\r
-garrSortChar[212] = 197;\r
-garrSortChar[213] = 197;\r
-garrSortChar[214] = 197;\r
-garrSortChar[215] = 95;\r
-garrSortChar[216] = 197;\r
-garrSortChar[217] = 230;\r
-garrSortChar[218] = 230;\r
-garrSortChar[219] = 230;\r
-garrSortChar[220] = 230;\r
-garrSortChar[221] = 246;\r
-garrSortChar[222] = 227;\r
-garrSortChar[223] = 224;\r
-garrSortChar[224] = 131;\r
-garrSortChar[225] = 131;\r
-garrSortChar[226] = 131;\r
-garrSortChar[227] = 131;\r
-garrSortChar[228] = 131;\r
-garrSortChar[229] = 131;\r
-garrSortChar[230] = 131;\r
-garrSortChar[231] = 150;\r
-garrSortChar[232] = 158;\r
-garrSortChar[233] = 158;\r
-garrSortChar[234] = 158;\r
-garrSortChar[235] = 158;\r
-garrSortChar[236] = 175;\r
-garrSortChar[237] = 175;\r
-garrSortChar[238] = 175;\r
-garrSortChar[239] = 175;\r
-garrSortChar[240] = 154;\r
-garrSortChar[241] = 193;\r
-garrSortChar[242] = 197;\r
-garrSortChar[243] = 197;\r
-garrSortChar[244] = 197;\r
-garrSortChar[245] = 197;\r
-garrSortChar[246] = 197;\r
-garrSortChar[247] = 96;\r
-garrSortChar[248] = 197;\r
-garrSortChar[249] = 230;\r
-garrSortChar[250] = 230;\r
-garrSortChar[251] = 230;\r
-garrSortChar[252] = 230;\r
-garrSortChar[253] = 246;\r
-garrSortChar[254] = 227;\r
-garrSortChar[255] = 250;\r
-\r
-gaFtsStop[0] = "a";\r
-gaFtsStop[1] = "about";\r
-gaFtsStop[2] = "after";\r
-gaFtsStop[3] = "against";\r
-gaFtsStop[4] = "all";\r
-gaFtsStop[5] = "also";\r
-gaFtsStop[6] = "among";\r
-gaFtsStop[7] = "an";\r
-gaFtsStop[8] = "and";\r
-gaFtsStop[9] = "are";\r
-gaFtsStop[10] = "as";\r
-gaFtsStop[11] = "at";\r
-gaFtsStop[12] = "be";\r
-gaFtsStop[13] = "became";\r
-gaFtsStop[14] = "because";\r
-gaFtsStop[15] = "been";\r
-gaFtsStop[16] = "between";\r
-gaFtsStop[17] = "but";\r
-gaFtsStop[18] = "by";\r
-gaFtsStop[19] = "can";\r
-gaFtsStop[20] = "come";\r
-gaFtsStop[21] = "do";\r
-gaFtsStop[22] = "during";\r
-gaFtsStop[23] = "each";\r
-gaFtsStop[24] = "early";\r
-gaFtsStop[25] = "for";\r
-gaFtsStop[26] = "form";\r
-gaFtsStop[27] = "found";\r
-gaFtsStop[28] = "from";\r
-gaFtsStop[29] = "had";\r
-gaFtsStop[30] = "has";\r
-gaFtsStop[31] = "have";\r
-gaFtsStop[32] = "he";\r
-gaFtsStop[33] = "her";\r
-gaFtsStop[34] = "his";\r
-gaFtsStop[35] = "however";\r
-gaFtsStop[36] = "in";\r
-gaFtsStop[37] = "include";\r
-gaFtsStop[38] = "into";\r
-gaFtsStop[39] = "is";\r
-gaFtsStop[40] = "it";\r
-gaFtsStop[41] = "its";\r
-gaFtsStop[42] = "late";\r
-gaFtsStop[43] = "later";\r
-gaFtsStop[44] = "made";\r
-gaFtsStop[45] = "many";\r
-gaFtsStop[46] = "may";\r
-gaFtsStop[47] = "me";\r
-gaFtsStop[48] = "med";\r
-gaFtsStop[49] = "more";\r
-gaFtsStop[50] = "most";\r
-gaFtsStop[51] = "near";\r
-gaFtsStop[52] = "no";\r
-gaFtsStop[53] = "non";\r
-gaFtsStop[54] = "not";\r
-gaFtsStop[55] = "of";\r
-gaFtsStop[56] = "on";\r
-gaFtsStop[57] = "only";\r
-gaFtsStop[58] = "or";\r
-gaFtsStop[59] = "other";\r
-gaFtsStop[60] = "over";\r
-gaFtsStop[61] = "several";\r
-gaFtsStop[62] = "she";\r
-gaFtsStop[63] = "some";\r
-gaFtsStop[64] = "such";\r
-gaFtsStop[65] = "than";\r
-gaFtsStop[66] = "that";\r
-gaFtsStop[67] = "the";\r
-gaFtsStop[68] = "their";\r
-gaFtsStop[69] = "then";\r
-gaFtsStop[70] = "there";\r
-gaFtsStop[71] = "these";\r
-gaFtsStop[72] = "they";\r
-gaFtsStop[73] = "this";\r
-gaFtsStop[74] = "through";\r
-gaFtsStop[75] = "to";\r
-gaFtsStop[76] = "under";\r
-gaFtsStop[77] = "until";\r
-gaFtsStop[78] = "use";\r
-gaFtsStop[79] = "was";\r
-gaFtsStop[80] = "we";\r
-gaFtsStop[81] = "were";\r
-gaFtsStop[82] = "when";\r
-gaFtsStop[83] = "where";\r
-gaFtsStop[84] = "which";\r
-gaFtsStop[85] = "who";\r
-gaFtsStop[86] = "with";\r
-gaFtsStop[87] = "you";\r
-\r
-gaFtsStem[0] = "ed";\r
-gaFtsStem[1] = "es";\r
-gaFtsStem[2] = "er";\r
-gaFtsStem[3] = "e";\r
-gaFtsStem[4] = "s";\r
-gaFtsStem[5] = "ingly";\r
-gaFtsStem[6] = "ing";\r
-gaFtsStem[7] = "ly";\r
-\r
-\r
-// as javascript 1.3 support unicode instead of ISO-Latin-1\r
-// need to transfer come code back to ISO-Latin-1 for compare purpose\r
-// Note: Different Language(Code page) maybe need different array:\r
-var gaUToC=new Array();\r
-gaUToC[8364]=128;\r
-gaUToC[8218]=130;\r
-gaUToC[402]=131;\r
-gaUToC[8222]=132;\r
-gaUToC[8230]=133;\r
-gaUToC[8224]=134;\r
-gaUToC[8225]=135;\r
-gaUToC[710]=136;\r
-gaUToC[8240]=137;\r
-gaUToC[352]=138;\r
-gaUToC[8249]=139;\r
-gaUToC[338]=140;\r
-gaUToC[381]=142;\r
-gaUToC[8216]=145;\r
-gaUToC[8217]=146;\r
-gaUToC[8220]=147;\r
-gaUToC[8221]=148;\r
-gaUToC[8226]=149;\r
-gaUToC[8211]=150;\r
-gaUToC[8212]=151;\r
-gaUToC[732]=152;\r
-gaUToC[8482]=153;\r
-gaUToC[353]=154;\r
-gaUToC[8250]=155;\r
-gaUToC[339]=156;\r
-gaUToC[382]=158;\r
-gaUToC[376]=159;\r
-\r
-var gsBiggestChar="";\r
-function getBiggestChar()\r
-{\r
- if(gsBiggestChar.length==0)\r
- {\r
- if(garrSortChar.length<256)\r
- gsBiggestChar=String.fromCharCode(255);\r
- else\r
- {\r
- var nBiggest=0;\r
- var nBigChar=0;\r
- for(var i=0;i<=255;i++)\r
- {\r
- if(garrSortChar[i]>nBiggest)\r
- {\r
- nBiggest=garrSortChar[i];\r
- nBigChar=i;\r
- }\r
- }\r
- gsBiggestChar=String.fromCharCode(nBigChar);\r
- }\r
-\r
- } \r
- return gsBiggestChar;\r
-}\r
-\r
-function getCharCode(str,i)\r
-{\r
- var code=str.charCodeAt(i)\r
- if(code>256)\r
- {\r
- code=gaUToC[code];\r
- }\r
- return code;\r
-}\r
-\r
-function compare(strText1,strText2)\r
-{\r
- if(garrSortChar.length<256)\r
- {\r
- var strt1=strText1.toLowerCase();\r
- var strt2=strText2.toLowerCase();\r
- if(strt1<strt2) return -1;\r
- if(strt1>strt2) return 1;\r
- return 0;\r
- }\r
- else\r
- {\r
- for(var i=0;i<strText1.length&&i<strText2.length;i++)\r
- {\r
- if(garrSortChar[getCharCode(strText1,i)]<garrSortChar[getCharCode(strText2,i)]) return -1;\r
- if(garrSortChar[getCharCode(strText1,i)]>garrSortChar[getCharCode(strText2,i)]) return 1;\r
- }\r
- if(strText1.length<strText2.length) return -1;\r
- if(strText1.length>strText2.length) return 1;\r
- return 0;\r
- }\r
-}\r
-gbWhLang=true;
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.002\r
-if (! window.gbIE4 && window.gbNav6 && !document.childNodes[0].insertAdjacentHTML){\r
-\r
-HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)\r
-{\r
- switch (where){\r
- case 'beforeBegin':\r
- this.parentNode.insertBefore(parsedNode,this);\r
- break;\r
- case 'afterBegin':\r
- this.insertBefore(parsedNode,this.firstChild);\r
- break;\r
- case 'beforeEnd':\r
- this.appendChild(parsedNode);\r
- break;\r
- case 'afterEnd':\r
- if (this.nextSibling){\r
- this.parentNode.insertBefore(parsedNode,this.nextSibling);\r
- } else {\r
- this.parentNode.appendChild(parsedNode);\r
- }\r
- break;\r
- }\r
-}\r
-\r
-HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){\r
-\r
- var r = this.ownerDocument.createRange();\r
- r.setStartBefore(this);\r
- var parsedHTML = r.createContextualFragment(htmlStr);\r
- this.insertAdjacentElement(where,parsedHTML);\r
-}\r
-\r
-\r
-HTMLElement.prototype.insertAdjacentText = function(where,txtStr){\r
-\r
- var parsedText = document.createTextNode(txtStr);\r
- this.insertAdjacentElement(where,parsedText);\r
-}\r
-}\r
-\r
-function testScroll() {\r
- // Initialize scrollbar cache if necessary\r
- if (window._pageXOffset==null) {\r
- window._pageXOffset = window.pageXOffset;\r
- window._pageYOffset = window.pageYOffset;\r
- }\r
- // Expose Internet Explorer compatible object model\r
- document.scrollTop = window.pageYOffset;\r
- document.scrollLeft = window.pageXOffset;\r
- window.document.scrollHeight = document.height;\r
- window.document.scrollWidth = document.width;\r
- window.document.clientWidth = window.innerWidth;\r
- window.document.clientHeight = window.innerHeight;\r
-\r
- // If cache!=current values, call the onscroll event\r
- if (((window.pageXOffset!=window._pageXOffset) || (window.pageYOffset!=window._pageYOffset)) && (window.onscroll)) \r
- window.onscroll();\r
- // Cache new values\r
- window._pageXOffset = window.pageXOffset;\r
- window._pageYOffset = window.pageYOffset;\r
- }\r
-\r
-// Create compatibility layer for Netscape\r
-if (window.gbNav6 && !window.gbNav7) {\r
- setInterval("testScroll()",50)\r
-}
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.002\r
-var WH_MSG_RESIZEPANE =0x0100;\r
-var WH_MSG_SHOWPANE =0x0101;\r
-var WH_MSG_HIDEPANE =0x0102;\r
-var WH_MSG_SYNCTOC =0x0103;\r
-var WH_MSG_NEXT =0x0104;\r
-var WH_MSG_PREV =0x0105;\r
-var WH_MSG_NOSEARCHINPUT =0x0106;\r
-var WH_MSG_NOSYNC =0x0107;\r
-var WH_MSG_ENABLEWEBSEARCH =0x0108;\r
-\r
-var WH_MSG_ISPANEVISIBLE =0x0109;\r
-var WH_MSG_PANESTATUE =0x010a;\r
-\r
-var WH_MSG_SYNCINFO =0x010b;\r
-var WH_MSG_PANEINFO =0x010c;\r
-var WH_MSG_WEBSEARCH =0x010d;\r
-\r
-var WH_MSG_SEARCHINDEXKEY =0x0201;\r
-\r
-var WH_MSG_SEARCHFTSKEY =0x020a;\r
-\r
-var WH_MSG_PROJECTREADY =0x0301;\r
-var WH_MSG_GETPROJINFO =0x0302;\r
-\r
-var WH_MSG_SHOWTOC =0x0401;\r
-var WH_MSG_SHOWIDX =0x0402;\r
-var WH_MSG_SHOWFTS =0x0403;\r
-var WH_MSG_SHOWGLO =0x0404;\r
-\r
-var WH_MSG_SHOWGLODEF =0x0500;\r
-\r
-var WH_MSG_GETTOCPATHS =0x0600;\r
-var WH_MSG_GETAVIAVENUES =0x0601;\r
-var WH_MSG_GETCURRENTAVENUE =0x0602;\r
-var WH_MSG_GETPANEINFO =0x0603;\r
-var WH_MSG_AVENUEINFO =0x0604;\r
-\r
-var WH_MSG_GETSTARTFRAME =0x0701;\r
-var WH_MSG_GETDEFAULTTOPIC =0x0702;\r
-\r
-var WH_MSG_SEARCHTHIS =0x0801;\r
-var WH_MSG_GETSEARCHS =0x0802;\r
-\r
-var WH_MSG_ISINFRAMESET =0x0900;\r
-\r
-var WH_MSG_TOOLBARORDER =0x0a00;\r
-var WH_MSG_MINIBARORDER =0x0a01;\r
-var WH_MSG_ISSYNCSSUPPORT =0x0a02;\r
-var WH_MSG_ISSEARCHSUPPORT =0x0a03;\r
-var WH_MSG_GETPANETYPE =0x0a04;\r
-var WH_MSG_BACKUPSEARCH =0x0a05;\r
-var WH_MSG_GETPANES =0x0a06;\r
-var WH_MSG_INITSEARCHSTRING =0x0a07;\r
-var WH_MSG_RELOADNS6 =0x0a08;\r
-var WH_MSG_ISAVENUESUPPORT =0x0a09;\r
-\r
-var WH_MSG_GETCMD =0x0b00;\r
-var WH_MSG_GETPANE =0x0b01;\r
-var WH_MSG_GETDEFPANE =0x0b02;\r
-\r
-function whMessage(nMessageId,wSender,nVersion,oParam)\r
-{\r
- this.nMessageId=nMessageId;\r
- this.wSender=wSender;\r
- this.nVersion=nVersion;\r
- this.oParam=oParam;\r
-}\r
-var gbWhMsg=true;
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whstub.js"></script>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whstart.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-function window_Onload()\r
-{\r
- if (window.gsTopic)\r
- frames["bsscright"].document.location = window.gsTopic;\r
-}\r
-window.onload=window_Onload;\r
-//-->\r
-</script>\r
-</head>\r
-\r
-<frameset id="whPfset" cols="260,*"><noframes><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></noframes><frame src="whgdata/whnvp30.htm" title="navigation pane" name="navigation pane" scrolling="no"><frame src="kernel/introduction.htm" title="topic pane" name="bsscright" scrolling="yes"></frameset>\r
-</html>
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.005\r
-var gaProj=new Array();\r
-var gnChecked=0;\r
-var gsProjName="";\r
-var gbReady=false;\r
-var goMan=null;\r
-var gbXML=false;\r
-var gsFirstPane="";\r
-var gServerEnabled=false;\r
-var gsPath="";\r
-var gbWhPHost=false;\r
-var goDiv = null;\r
-var gsHTML = "";\r
-\r
-if (navigator.currentNavPen)\r
- gsFirstPane = navigator.currentNavPen;\r
-\r
-\r
-function delayLoad()\r
-{\r
- if (goDiv&&gsHTML)\r
- {\r
- goDiv.innerHTML=gsHTML;\r
- goDiv=null;\r
- gsHTML="";\r
- }\r
-}\r
-\r
-function whCom(sName,sComFile)\r
-{\r
- this.msName=sName;\r
- this.msDivId=sName+"Div";\r
- this.msIFrameId=sName+"IFrame";\r
- this.msComFile=sComFile;\r
- this.mbloaded=false;\r
- this.mbShow=false;\r
- this.show=function(bShow)\r
- {\r
- if(this.mbShow!=bShow)\r
- {\r
- if(bShow&&!this.mbloaded)\r
- {\r
- this.load();\r
- }\r
-\r
- var oDiv=getElement(this.msDivId);\r
- if(oDiv)\r
- {\r
- if(gbIE55||(gbIE5&&gbMac))\r
- {\r
- var oIframe=getElement(this.msIFrameId);\r
- if(oIframe)\r
- {\r
- if(bShow)\r
- {\r
- oDiv.style.zIndex=3;\r
- if(oIframe!=null)\r
- {\r
- oIframe.style.zIndex=3;\r
- if (!gbIE55)\r
- oIframe.style.visibility="visible";\r
- }\r
- }\r
- else\r
- {\r
- oDiv.style.zIndex=2;\r
- if(oIframe!=null)\r
- {\r
- oIframe.style.zIndex=2;\r
- if (!gbIE55)\r
- oIframe.style.visibility="hidden";\r
- }\r
- }\r
- }\r
- }\r
- if (!gbIE55)\r
- oDiv.style.visibility=(bShow==true)?'visible':'hidden';\r
- this.mbShow=bShow;\r
- }\r
-\r
- }\r
- }\r
- this.load=function()\r
- {\r
- if(!this.mbloaded)\r
- {\r
- if(this.msComFile.length>0){\r
- var strFile= _getFullPath(getPath(), this.msComFile);\r
- var oDiv=getElement(this.msDivId);\r
- if(oDiv){\r
- if(gbIE4||gbOpera7){\r
- var nIFrameHeight=oDiv.style.pixelHeight;\r
- var nIFrameWidth=oDiv.style.pixelWidth;\r
- var sHTML="<IFRAME ID="+this.msIFrameId+" title=\"" + this.msName + "\" SRC=\""+strFile+"\" BORDER=0 FRAMEBORDER=no STYLE=\"width:";\r
- if(gbMac){\r
- sHTML+=nIFrameWidth+"px;height:"+nIFrameHeight+"px;\"></IFRAME>";\r
- }else{\r
- sHTML+="100%; height:100%;\"></IFRAME>";\r
- }\r
- oDiv.innerHTML=sHTML;\r
- }else if(gbNav6){\r
- gsHTML="<IFRAME ID="+this.msIFrameId+" title=\"" + this.msName + "\" SRC=\""+strFile+"\" BORDER=0 FRAMEBORDER=no STYLE=\"width:100%;border:0;height:100%;\"></IFRAME>";\r
- goDiv = oDiv;\r
- setTimeout("delayLoad()", 100);\r
- }\r
- this.mbloaded=true;\r
- }\r
- }\r
- }\r
- }\r
- this.unload=function()\r
- {\r
- var oDiv=getElement(this.msDivId);\r
- if(oDiv)\r
- oDiv.innerHTML="";\r
- }\r
- this.getDivHTML=function()\r
- {\r
- var sHTML="";\r
- if(gbMac&&gbIE4)\r
- sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;margin:0;padding:0;border:0;\">";\r
- else if(gbIE5)\r
- sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;\">";\r
- else if(gbIE4||gbWindows)\r
- sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;visibility:hidden\">";\r
- else\r
- //sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:"+parent.height+";visibility:hidden\">";\r
- sHTML+="<DIV ID="+this.msDivId+" ALIGN=left STYLE=\"position:absolute;z-index:1;left:0;top:0;width:100%;height:100%;visibility:hidden\">";\r
- sHTML+="</DIV>";\r
- return sHTML;\r
- }\r
-} \r
-\r
-function whComMan()\r
-{\r
- this.sName="";\r
- this.maCom=new Array();\r
- this.addCom=function(sName,sComFile)\r
- {\r
- var owhCom=new whCom(sName,sComFile);\r
- this.maCom[this.maCom.length]=owhCom;\r
- }\r
- this.init=function()\r
- {\r
- var sHTML="";\r
- for(var i=0;i<this.maCom.length;i++)\r
- {\r
- sHTML+=this.maCom[i].getDivHTML();\r
- }\r
- document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
-\r
- }\r
- this.showById=function(nId)\r
- {\r
- for(var s=0;s<this.maCom.length;s++)\r
- {\r
- if(s!==nId)\r
- this.maCom[s].show(false);\r
- }\r
- this.maCom[nId].show(true);\r
- }\r
- this.show=function(sName)\r
- {\r
- navigator.currentNavPen = sName;\r
- var bFound=false;\r
- for(var i=0;i<this.maCom.length;i++)\r
- {\r
- if(sName==this.maCom[i].msName)\r
- {\r
- bFound=true;\r
- break;\r
- }\r
- }\r
- if(bFound)\r
- {\r
- this.showById(i);\r
- this.sName=sName;\r
- }\r
- }\r
- this.unload=function()\r
- {\r
- for(var i=0;i<this.maCom.length;i++)\r
- {\r
- this.maCom[i].unload();\r
- } \r
- }\r
- this.getCurrent=function()\r
- {\r
- return this.sName;\r
- }\r
-}\r
-\r
-function getPath()\r
-{\r
- if(gsPath=="")\r
- {\r
- gsPath=location.href;\r
- gsPath=_replaceSlash(gsPath);\r
- var nPosFile=gsPath.lastIndexOf("/");\r
- gsPath=gsPath.substring(0,nPosFile+1);\r
- }\r
- return gsPath;\r
-}\r
-\r
-goMan=new whComMan();\r
-function addPane(sName,sFileName)\r
-{\r
- var oParam=new Object();\r
- oParam.sName=sName;\r
- var oMsg=new whMessage(WH_MSG_GETPANE, this, 1, oParam);\r
- if (SendMessage(oMsg))\r
- {\r
- if (oMsg.oParam.bEnable)\r
- goMan.addCom(sName,sFileName);\r
- }\r
- else\r
- goMan.addCom(sName,sFileName); \r
-}\r
-\r
-function setShowPane(sName, bForce)\r
-{\r
- if ((gsFirstPane == "") || bForce)\r
- {\r
- var oMsg=new whMessage(WH_MSG_GETDEFPANE, this, 1, null);\r
- if (SendMessage(oMsg))\r
- {\r
- if (oMsg.oParam)\r
- gsFirstPane = oMsg.oParam;\r
- else\r
- gsFirstPane=sName;\r
- }\r
- else\r
- gsFirstPane=sName;\r
- }\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- var oMsg=new whMessage(WH_MSG_GETCMD,this,1,null);\r
- var bHidePane=false;\r
- if (SendMessage(oMsg))\r
- {\r
- if(oMsg.oParam>0)\r
- {\r
- if(oMsg.oParam==1)\r
- gsFirstPane="toc";\r
- else if(oMsg.oParam==2)\r
- gsFirstPane="idx";\r
- else if(oMsg.oParam==3)\r
- gsFirstPane="fts";\r
- else if(oMsg.oParam==4)\r
- gsFirstPane="glo";\r
- }\r
- else if(oMsg.oParam==0)\r
- {\r
- bHidePane=true;\r
- }\r
- }\r
- goMan.init();\r
- if(gsProjName!="") \r
- loadData2(gsProjName); \r
- if (bHidePane)\r
- {\r
- gsFirstPane="";\r
- var oMsg1=new whMessage(WH_MSG_HIDEPANE, this, 1, null)\r
- SendMessage(oMsg1);\r
- }\r
- else\r
- {\r
- if(gsFirstPane!="")\r
- goMan.show(gsFirstPane);\r
- else\r
- goMan.showById(0);\r
- }\r
-}\r
-\r
-function setServerEnabled()\r
-{\r
- gServerEnabled = true;\r
-}\r
-\r
-function loadData2(strFile)\r
-{\r
- if(gbXML)\r
- loadDataXML(strFile);\r
- else\r
- loadData(strFile);\r
-}\r
-\r
-function addProject(bPreferXML,sXMLName,sHTMLName)\r
-{\r
- var bLoadXML=bPreferXML;\r
- if(!gbIE4&&!gbNav6&&!gbOpera7)\r
- return;\r
- if(gbIE4&&!gbIE5)\r
- bLoadXML=false;\r
- if (gbIE5&&!gbMac)\r
- bLoadXML=true;\r
- if(gbIE55||gbNav6)\r
- bLoadXML=true;\r
- if(gbOpera7)\r
- bLoadXML=false; \r
- if(bLoadXML)\r
- addProjectXML(sXMLName);\r
- else\r
- addProjectHTML(sHTMLName);\r
-}\r
-\r
-function addProjectHTML(sName)\r
-{\r
- gbXML=false;\r
- gsProjName=sName;\r
-}\r
-\r
-function addProjectXML(sName)\r
-{\r
- gbXML=true;\r
- gsProjName=sName;\r
-}\r
-\r
-function window_MyBunload()\r
-{\r
- goMan.unload();\r
- window_BUnload();\r
-}\r
-\r
-function putDataXML(xmlDoc,sdocPath)\r
-{\r
- if(xmlDoc!=null)\r
- {\r
- var projectNode=xmlDoc.getElementsByTagName("project")[0];\r
- if(projectNode)\r
- {\r
- var aRProj=new Array();\r
- aRProj[0]=new Object();\r
- aRProj[0].sPPath=_getPath(sdocPath);\r
- var sLangId=projectNode.getAttribute("langid");\r
- if(sLangId)\r
- {\r
- aRProj[0].sLangId=sLangId;\r
- }\r
- var sDPath=projectNode.getAttribute("datapath");\r
- if(sDPath)\r
- {\r
- if(sDPath.lastIndexOf("/")!=sDPath.length-1)\r
- sDPath+="/";\r
- aRProj[0].sDPath=sDPath;\r
- }\r
- else\r
- aRProj[0].sDPath="";\r
- aRProj[0].sToc=projectNode.getAttribute("toc");\r
- aRProj[0].sIdx=projectNode.getAttribute("index");\r
- aRProj[0].sFts=projectNode.getAttribute("fts");\r
- aRProj[0].sGlo=projectNode.getAttribute("glossary");\r
- var RmtProject=projectNode.getElementsByTagName("remote");\r
- var nCount=1;\r
- for (var i=0;i<RmtProject.length;i++)\r
- {\r
- var sURL=RmtProject[i].getAttribute("url");\r
- if(sURL)\r
- {\r
- if(sURL.lastIndexOf("/")!=sURL.length-1)\r
- sURL+="/";\r
- aRProj[nCount]=new Object();\r
- aRProj[nCount++].sPPath=_getFullPath(aRProj[0].sPPath,sURL);\r
- }\r
- }\r
- putProjectInfo(aRProj);\r
- }\r
- else\r
- {\r
- // on Netscape 6.0 under some situation the xml file cannot be loaded.\r
- // so we use pure html instead.\r
- if (gnChecked == 0)\r
- setTimeout("redirectToList();",100);\r
- else\r
- {\r
- gnChecked++;\r
- setTimeout("checkRemoteProject();", 1);\r
- }\r
- }\r
- }\r
-}\r
-\r
-function onLoadXMLError()\r
-{\r
- gnChecked++;\r
- setTimeout("checkRemoteProject();", 1);\r
-}\r
-\r
-function redirectToList()\r
-{\r
- if(gbReDirectThis)\r
- document.location=gsNavReDirect;\r
- else\r
- parent.document.location=gsNavReDirect;\r
-}\r
-\r
-function putProjectInfo(aRProj)\r
-{\r
- if(gnChecked==0||isSamePath(gaProj[gnChecked].sPPath,aRProj[0].sPPath))\r
- {\r
- if(gnChecked!=0)\r
- {\r
- if(aRProj[0].sLangId!=gaProj[0].sLangId)\r
- alert("The merged Help system "+aRProj[0].sPPath+" is using a different language from the master Help system, which will cause the index and full-text search functionality to be disabled in the merged Help system.");\r
- }\r
- gaProj[gnChecked]=aRProj[0];\r
- for(var i=1;i<aRProj.length;i++)\r
- {\r
- var bFound=false;\r
- for(var j=0;j<gaProj.length;j++)\r
- {\r
- if(isSamePath(gaProj[j].sPPath,aRProj[i].sPPath))\r
- {\r
- bFound=true;\r
- break;\r
- }\r
- }\r
- if(!bFound)\r
- {\r
- gaProj[gaProj.length]=aRProj[i];\r
- }\r
- }\r
- gnChecked++;\r
- setTimeout("checkRemoteProject();", 1);\r
- }\r
- else\r
- alert("Could not load correctly, please click Refresh.");\r
-}\r
-\r
-function isSamePath(sPath1,sPath2)\r
-{\r
- return (sPath1.toLowerCase()==sPath2.toLowerCase());\r
-}\r
-\r
-function checkRemoteProject()\r
-{\r
- if(gaProj.length!=gnChecked)\r
- {\r
- setTimeout("cancelProj("+gnChecked+");",10000);\r
- loadData2(gaProj[gnChecked].sPPath+gsProjName);\r
- }\r
- else{\r
- var oMsg=new whMessage(WH_MSG_PROJECTREADY,this,1,null);\r
- gbReady=true;\r
- SendMessage(oMsg);\r
- }\r
-}\r
-\r
-function cancelProj(i)\r
-{\r
- if(i==gnChecked)\r
- {\r
- gnChecked++;\r
- setTimeout("checkRemoteProject();", 1);\r
- } \r
-}\r
-\r
-function window_resize()\r
-{\r
- for(var i=0;i<goMan.maCom.length;i++)\r
- {\r
- var oFrame=getElement(goMan.maCom[i].msIFrameId);\r
- if(oFrame)\r
- {\r
- oFrame.style.height=document.body.clientHeight;\r
- oFrame.style.width=document.body.clientWidth;\r
- }\r
- }\r
- window_resize2();\r
-}\r
-\r
-function window_resize2()\r
-{\r
- if(document.body)\r
- {\r
- if(document.body.clientWidth > 1 && document.body.clientHeight>1)\r
- {\r
- var oMsg = new whMessage(WH_MSG_RESIZEPANE, this, 1, null);\r
- SendMessage(oMsg);\r
- }\r
- }\r
-}\r
-\r
-function window_unload()\r
-{\r
- UnRegisterListener2(this,WH_MSG_GETPROJINFO);\r
- UnRegisterListener2(this,WH_MSG_SHOWTOC);\r
- UnRegisterListener2(this,WH_MSG_SHOWIDX);\r
- UnRegisterListener2(this,WH_MSG_SHOWFTS);\r
- UnRegisterListener2(this,WH_MSG_SHOWGLO);\r
- UnRegisterListener2(this,WH_MSG_GETPANEINFO);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- if(oMsg)\r
- {\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_GETPROJINFO)\r
- {\r
- if(gbReady)\r
- {\r
- var oProj=new Object();\r
- oProj.aProj=gaProj;\r
- oProj.bXML=gbXML;\r
- oMsg.oParam=oProj;\r
- }\r
- else\r
- return false;\r
- }\r
- else if(nMsgId==WH_MSG_SHOWTOC)\r
- {\r
- if(goMan)\r
- goMan.show("toc");\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "toc");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if(nMsgId==WH_MSG_SHOWIDX)\r
- {\r
- if(goMan)\r
- goMan.show("idx");\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "idx");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if(nMsgId==WH_MSG_SHOWFTS)\r
- {\r
- if(goMan)\r
- goMan.show("fts");\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "fts");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if(nMsgId==WH_MSG_SHOWGLO)\r
- {\r
- if(goMan)\r
- goMan.show("glo");\r
- var onMsg=new whMessage(WH_MSG_PANEINFO, this, 1, "glo");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_SHOWPANE, this, 1, null);\r
- SendMessage(onMsg);\r
- }\r
- else if(nMsgId==WH_MSG_GETPANEINFO)\r
- {\r
- oMsg.oParam=goMan.getCurrent();\r
- return false;\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
- RegisterListener2(this,WH_MSG_GETPROJINFO);\r
- RegisterListener2(this,WH_MSG_SHOWTOC);\r
- RegisterListener2(this,WH_MSG_SHOWIDX);\r
- RegisterListener2(this,WH_MSG_SHOWFTS);\r
- RegisterListener2(this,WH_MSG_SHOWGLO);\r
- RegisterListener2(this,WH_MSG_GETPANEINFO);\r
-\r
- if((gbMac&&gbIE4)||(gbSunOS&&gbIE5)||gbOpera7)\r
- {\r
- window.onresize=window_resize;\r
- }\r
- else if(gbIE4)\r
- {\r
- window.onresize=window_resize2;\r
- }\r
- window.onload=window_OnLoad;\r
- window.onbeforeunload=window_MyBunload;\r
- window.onunload=window_unload;\r
- gbWhPHost=true;\r
-}\r
-else\r
- document.location.reload();\r
-\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>project description</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whproj.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
- setLangId("1033");\r
- setDataPath("whdata");\r
- addToc("whtoc.htm");\r
-\r
- addFts("whfts.htm");\r
- addGlo("whglo.htm");\r
-\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.001\r
-var gaProj=new Array();\r
-\r
-gaProj[0]=new project("");\r
-\r
-function setLangId(sLangId)\r
-{\r
- gaProj[0].sLangId=sLangId;\r
-}\r
-\r
-function setDataPath(sPath)\r
-{\r
- if(sPath.length!=0)\r
- {\r
- if(sPath.lastIndexOf("/")!=sPath.length-1)\r
- sPath+="/";\r
- gaProj[0].sDPath=sPath; \r
- }\r
- else\r
- gaProj[0].sDPath="";\r
-}\r
-\r
-function addToc(sFile)\r
-{\r
- gaProj[0].sToc=sFile;\r
-}\r
-\r
-function addIdx(sFile)\r
-{\r
- gaProj[0].sIdx=sFile;\r
-}\r
-\r
-function addFts(sFile)\r
-{\r
- gaProj[0].sFts=sFile;\r
-}\r
-\r
-function addGlo(sFile)\r
-{\r
- gaProj[0].sGlo=sFile;\r
-}\r
-\r
-function addRemoteProject(sProjRelPath)\r
-{\r
- if(sProjRelPath.lastIndexOf("/")!=sProjRelPath.length-1)\r
- sProjRelPath+="/";\r
- gaProj[gaProj.length]=new project(sProjRelPath);\r
-}\r
-\r
-function project(sPPath)\r
-{\r
- this.sPPath=sPPath;\r
- this.sLangId="";\r
- this.sDPath="";\r
- this.sToc="";\r
- this.sIdx="";\r
- this.sFts="";\r
- this.sGlo="";\r
-}\r
-\r
-window.onload=window_OnLoad;\r
-\r
-function window_OnLoad()\r
-{\r
- gsName=document.location.href;\r
- gsName=_replaceSlash(gsName);\r
- var nPos=gsName.lastIndexOf("/");\r
- if(nPos!=-1)\r
- gaProj[0].sPPath=gsName.substring(0,nPos+1);\r
- else\r
- alert("Error in Loading navigation component. Please regenerate WebHelp.");\r
- patchPath(gaProj);\r
- if(parent&&parent!=this&& typeof(parent.putProjectInfo)=="function")\r
- {\r
- parent.putProjectInfo(gaProj);\r
- }\r
-}\r
-\r
-function patchPath(aProj)\r
-{\r
- for(var i=1;i<aProj.length;i++)\r
- {\r
- aProj[i].sPPath=_getFullPath(gaProj[0].sPPath,aProj[i].sPPath);\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<project langid="1033" datapath="whxdata" toc="whtoc.xml" fts="whfts.xml" glossary="whglo.xml" >\r
-</project>\r
+++ /dev/null
-// WebHelp 5.10.001\r
-var gbInited=false;\r
-var gWndStubPage=null;\r
-function getStubPage()\r
-{\r
- if(!gbInited)\r
- {\r
- gWndStubPage=getStubPage_inter(window);\r
- gbInited=true;\r
- }\r
- return gWndStubPage;\r
-}\r
-\r
-function getStubPage_inter(wCurrent)\r
-{\r
- if(null==wCurrent.parent||wCurrent.parent==wCurrent)\r
- return null;\r
-\r
- if(typeof(wCurrent.parent.whname)=="string"&&"wh_stub"==wCurrent.parent.whname)\r
- return wCurrent.parent;\r
- else\r
- if(wCurrent.parent.frames.length!=0&&wCurrent.parent!=wCurrent)\r
- return getStubPage_inter(wCurrent.parent);\r
- else\r
- return null;\r
-}\r
-\r
-function RegisterListener(framename,nMessageId)\r
-{\r
- var wSP=getStubPage();\r
- if(wSP&&wSP!=this)\r
- return wSP.RegisterListener(framename,nMessageId);\r
- else\r
- return false;\r
-}\r
-\r
-function RegisterListener2(oframe,nMessageId)\r
-{\r
- var wSP=getStubPage();\r
- if(wSP&&wSP!=this)\r
- return wSP.RegisterListener2(oframe,nMessageId);\r
- else\r
- return false;\r
-}\r
-\r
-function UnRegisterListener2(oframe,nMessageId)\r
-{\r
- var wSP=getStubPage();\r
- if(wSP&&wSP!=this&&wSP.UnRegisterListener2)\r
- return wSP.UnRegisterListener2(oframe,nMessageId);\r
- else\r
- return false;\r
-}\r
-\r
-function SendMessage(oMessage)\r
-{\r
- var wSP=getStubPage();\r
- if(wSP&&wSP!=this&&wSP.SendMessage)\r
- return wSP.SendMessage(oMessage);\r
- else\r
- return false;\r
-}\r
-\r
-var gbWhProxy=true;\r
-\r
-var gbPreview=false;\r
-gbPreview=false; \r
-if (gbPreview)\r
- document.oncontextmenu=contextMenu;\r
-\r
-function contextMenu()\r
-{\r
- return false;\r
-}\r
+++ /dev/null
-<?xml version='1.0' encoding='windows-1252' ?>\r
-<resource>\r
-<item name="Prev" value="<<" />\r
-<item name="Hide" value="Hide" />\r
-<item name="SyncTocTooltip" value="Sync TOC" />\r
-<item name="InTopicSearchBtnText" value="Go" />\r
-<item name="FtsInputPrompt" value="Type in the word(s) to search for:" />\r
-<item name="Done" value="Done" />\r
-<item name="Logo/Author" value="Powered By" />\r
-<item name="MergeError1" value="The merged Help system" />\r
-<item name="JS_alert_cantLoadProject" value="Can't load project:" />\r
-<item name="Next" value=">>" />\r
-<item name="SyncToc" value="SyncToc" />\r
-<item name="MergeError2" value="is using a different language from the master Help system, which will cause the index and full-text search functionality to be disabled in the merged Help system." />\r
-<item name="nls_body_instruction" value="Enter your question in the text box above, then click GO." />\r
-<item name="ToolBarSearchBtnText" value="Go" />\r
-<item name="SuggestViewNoFrameMessage" value="To view the Help system without frames click on this" />\r
-<item name="Hide_Navigation_Component" value="Hide Navigation Component" />\r
-<item name="FtsBtnText" value="Go" />\r
-<item name="TopicsFound" value="Topics Found" />\r
-<item name="LoadingContentsData" value="Loading, click here to cancel..." />\r
-<item name="Definition" value="Definition:" />\r
-<item name="CompletingContents" value="Completing Contents..." />\r
-<item name="Seperate" value="|" />\r
-<item name="GeneratedBy" value="Generated by" />\r
-<item name="PoweredBy" value="Powered by" />\r
-<item name="IndexAlphabetBookmarks" value="ABCDEFGHIJKLMNOPQRSTUVWXYZ" />\r
-<item name="Contents" value="Contents" />\r
-<item name="IndexSelectTopicLabel" value="Select a topic, then click Display" />\r
-<item name="Disabled Prev" value="<<" />\r
-<item name="Glossary" value="Glossary" />\r
-<item name="Search" value="Search" />\r
-<item name="CantSearch" value="Cannot search for that phrase." />\r
-<item name="LoadingIndex" value="Loading Index..." />\r
-<item name="LoadingData" value="Loading data, please wait..." />\r
-<item name="Show_Navigation_Component" value="Show Navigation Component" />\r
-<item name="Book" value="Book" />\r
-<item name="Disabled Next" value=">>" />\r
-<item name="nls_body_empty" value="Sorry, we were unable to find a good answer for your question." />\r
-<item name="nls_button_go_hint" value="Go Search" />\r
-<item name="Find" value="Find" />\r
-<item name="CantOpenURLorFile" value="Can't open URL or file" />\r
-<item name="Print" value="Print" />\r
-<item name="About" value="About" />\r
-<item name="Author" value="Author" />\r
-<item name="IndexSelectTopicTitle" value="Select a Topic" />\r
-<item name="Blank_topic_text" value="This topic was created by WinHelp Project Conversion Wizard, and is the destination of a missing topic or broken hyperlink." />\r
-<item name="BrowserLimitedMessage" value="Your browser does not support frames. We recommend that you update your browser to a version that supports frames." />\r
-<item name="LoadingTOCItem" value="Loading Table of Contents:" />\r
-<item name="Display" value="Display" />\r
-<item name="Cancel" value="Cancel" />\r
-<item name="IndexSelectTopicError" value="Please select a topic." />\r
-<item name="nls_edit_label" value="Type in your question:" />\r
-<item name="SearchLabel" value="Search" />\r
-<item name="RelateTopicListPrompt" value="Click a topic, then click Display." />\r
-<item name="NextTooltip" value="Next Topic" />\r
-<item name="JS_alert_colorlimitation" value="WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors." />\r
-<item name="TopicsNotFound" value="No Topics Found." />\r
-<item name="Show" value="Show" />\r
-<item name="PreTooltip" value="Previous Topic" />\r
-<item name="SearchPrompt" value="- Search -" />\r
-<item name="IndexBtnText" value="Go" />\r
-<item name="JS_alert_ProjectLoadingFail" value="Could not load correctly, please click Refresh." />\r
-<item name="LoadingContents" value="Loading contents, please wait..." />\r
-<item name="Term" value="Term:" />\r
-<item name="WebSearchButton" value="WebSearch" />\r
-<item name="Remote_Page" value="Remote Page" />\r
-<item name="WebSearch" value="WebSearch" />\r
-<item name="LoadingFTS" value="Reading Search Data..." />\r
-<item name="Index" value="Index" />\r
-<item name="JS_alert_ErrorInLoading" value="Error in Loading navigation component. Please regenerate WebHelp." />\r
-<item name="JS_alert_appletNotLoad" value="Unable to load applet. If you are using an old version of Netscape, the prefs.js file needs to be edited." />\r
-<item name="IndexInputPrompt" value="Type in the keyword to find:" />\r
-<item name="Page" value="Page" />\r
-<item name="SuggestViewNoFrameMsg2" value="hyperlink." />\r
-<item name="nls_button_go_text" value="Go" />\r
-<item name="Searching" value="Searching..." />\r
-\r
- <item name="English" value="" />\r
- <item name="langorder" value="0,1,2,3,4,5,6,7,8,40,41,42,43,44,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,38,45,46,47,48,49,50,33,51,52,53,88,54,34,55,56,115,119,121,123,125,126,127,128,129,130,57,58,89,90,91,59,60,131,148,150,154,158,168,171,173,175,185,187,189,191,193,197,214,216,218,220,225,230,240,242,244,246,252,61,62,63,64,66,67,131,148,150,154,158,168,171,173,175,185,187,189,191,193,197,214,216,218,220,225,230,240,242,244,246,252,68,69,70,71,27,114,28,82,170,85,112,109,110,65,113,223,86,213,29,255,30,31,80,81,83,84,111,36,37,79,229,222,87,212,32,254,251,39,72,97,98,99,100,73,101,74,102,133,93,103,35,104,75,105,92,122,124,76,106,107,108,77,120,199,94,116,117,118,78,131,131,131,131,131,131,131,150,158,158,158,158,175,175,175,175,154,193,197,197,197,197,197,95,197,230,230,230,230,246,227,224,131,131,131,131,131,131,131,150,158,158,158,158,175,175,175,175,154,193,197,197,197,197,197,96,197,230,230,230,230,246,227,250," />\r
-\r
- <panes show="0">\r
- <toc />\r
- <fts />\r
- <glossary />\r
- </panes>\r
-\r
- <stopwords>\r
- <word name="a" />\r
- <word name="about" />\r
- <word name="after" />\r
- <word name="against" />\r
- <word name="all" />\r
- <word name="also" />\r
- <word name="among" />\r
- <word name="an" />\r
- <word name="and" />\r
- <word name="are" />\r
- <word name="as" />\r
- <word name="at" />\r
- <word name="be" />\r
- <word name="became" />\r
- <word name="because" />\r
- <word name="been" />\r
- <word name="between" />\r
- <word name="but" />\r
- <word name="by" />\r
- <word name="can" />\r
- <word name="come" />\r
- <word name="do" />\r
- <word name="during" />\r
- <word name="each" />\r
- <word name="early" />\r
- <word name="for" />\r
- <word name="form" />\r
- <word name="found" />\r
- <word name="from" />\r
- <word name="had" />\r
- <word name="has" />\r
- <word name="have" />\r
- <word name="he" />\r
- <word name="her" />\r
- <word name="his" />\r
- <word name="however" />\r
- <word name="in" />\r
- <word name="include" />\r
- <word name="into" />\r
- <word name="is" />\r
- <word name="it" />\r
- <word name="its" />\r
- <word name="late" />\r
- <word name="later" />\r
- <word name="made" />\r
- <word name="many" />\r
- <word name="may" />\r
- <word name="me" />\r
- <word name="med" />\r
- <word name="more" />\r
- <word name="most" />\r
- <word name="near" />\r
- <word name="no" />\r
- <word name="non" />\r
- <word name="not" />\r
- <word name="of" />\r
- <word name="on" />\r
- <word name="only" />\r
- <word name="or" />\r
- <word name="other" />\r
- <word name="over" />\r
- <word name="several" />\r
- <word name="she" />\r
- <word name="some" />\r
- <word name="such" />\r
- <word name="than" />\r
- <word name="that" />\r
- <word name="the" />\r
- <word name="their" />\r
- <word name="then" />\r
- <word name="there" />\r
- <word name="these" />\r
- <word name="they" />\r
- <word name="this" />\r
- <word name="through" />\r
- <word name="to" />\r
- <word name="under" />\r
- <word name="until" />\r
- <word name="use" />\r
- <word name="was" />\r
- <word name="we" />\r
- <word name="were" />\r
- <word name="when" />\r
- <word name="where" />\r
- <word name="which" />\r
- <word name="who" />\r
- <word name="with" />\r
- <word name="you" />\r
- </stopwords>\r
-\r
- <stems>\r
- <stem name="ed" />\r
- <stem name="es" />\r
- <stem name="er" />\r
- <stem name="e" />\r
- <stem name="s" />\r
- <stem name="ingly" />\r
- <stem name="ing" />\r
- <stem name="ly" />\r
- </stems>\r
-\r
- <paneskin>\r
- <background color="" img="" />\r
- <font name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- <toc>\r
- <background color="" img="" />\r
- <icons>\r
- <book open="whd_toc2.gif" close="whd_toc1.gif" />\r
- <item local="whd_toc3.gif" remote="whd_toc4.gif" />\r
- <newbook open="whd_toc2.gif" close="whd_toc1.gif" />\r
- <newitem local="whd_toc3.gif" remote="whd_toc4.gif" />\r
- </icons>\r
- <fonts>\r
- <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
- </fonts>\r
- <activebackgroundcolor attr="#cccccc" />\r
- <margin attr="0pt" />\r
- <indent attr="9pt" />\r
- </toc>\r
- <index>\r
- <form>\r
- <fonts>\r
- <title name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- </fonts>\r
- <button normal="" hover="" />\r
- <editwith value="28" />\r
- </form>\r
- <background color="" img="" />\r
- <fonts>\r
- <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
- <empty name="Arial" size="9pt" color="#666666" style="normal" weight="normal" decoration="none" />\r
- </fonts>\r
- <activebackgroundcolor attr="#cccccc" />\r
- <margin attr="0pt" />\r
- <indent attr="9pt" />\r
- </index>\r
- <fts>\r
- <form>\r
- <fonts>\r
- <title name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- </fonts>\r
- <button normal="" hover="" />\r
- <editwith value="28" />\r
- </form>\r
- <background color="" img="" />\r
- <fonts>\r
- <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
- <error name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- </fonts>\r
- <activebackgroundcolor attr="#cccccc" />\r
- <margin attr="0pt" />\r
- <indent attr="9pt" />\r
- </fts>\r
- <glossary>\r
- <background color="" img="" />\r
- <fonts>\r
- <normal name="Arial" size="9pt" color="#000000" style="normal" weight="normal" decoration="none" />\r
- <hover name="Arial" size="9pt" color="#007f00" style="normal" weight="normal" decoration="underline" />\r
- </fonts>\r
- <activebackgroundcolor attr="#cccccc" />\r
- <margin attr="0pt" />\r
- <indent attr="9pt" />\r
- </glossary>\r
- </paneskin>\r
-</resource>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>Blank Page</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<body>\r
-</body>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>GUI Module Reference Manual</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-</head>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whstub.js"></script><script language="javascript1.2" src="whstart.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var strDefaultTopic = "about:blank";\r
-var nWebhelpNavPaneMode = 1; //1: DHTML 2:Applet 3:PureHTML 4:Noframeset\r
-var bNoApplet = false;\r
-var strPaneDHTML = "whd_nvp10.htm"; //whd_nvp10.htm if tab enabled, whnframe.htm if tab disabled.\r
-var strPaneApplet = "whd_nvp20.htm";\r
-var strPaneList = "whgdata/whnvp30.htm";\r
-\r
-var strHTML = "";\r
-var strPane = "";\r
-var nViewFrameType = -1;\r
-\r
-function CMRServer()\r
-{\r
- this.m_cAgents = new Array;\r
-}\r
-var cMRServer = new CMRServer;\r
-\r
-//figure out which mode is the best\r
-if (!window.gAgent)\r
-{\r
- // low end browser, we don't even try to determine it.\r
- document.location = "whnjs.htm";\r
-}\r
-else\r
-{\r
- if (!gbNav4&&!gbIE4&&!gbOpera7&&!gbSafari)\r
- document.location = "whnjs.htm";\r
- else if (gbNav4 && !gbNav6 && ((gnVerMinor <= 4.06)))\r
- document.location = "whnjs.htm";\r
- else if (gbMac && gbIE4 && !gbIE5)\r
- document.location = "whnjs.htm";\r
- //figure out which mode is the best\r
- else \r
- {\r
- nViewFrameType=nWebhelpNavPaneMode;\r
- if (nWebhelpNavPaneMode==1||nWebhelpNavPaneMode == 2)\r
- {\r
- var gbDHTML=(nWebhelpNavPaneMode==1);\r
- if (gbNav4) nViewFrameType = 2;\r
- if (gbNav4&&(gnVerMinor < 4.1)) nViewFrameType = 3;\r
- if (gbNav4&&(gnVerMinor == 4.6)) nViewFrameType = 3;\r
- if (gbIE4&&gbDHTML) nViewFrameType = 1;\r
- if (gbIE4&&gbSunOS&&nWebhelpNavPaneMode==2) nViewFrameType = 3;\r
- if (gbNav6&&gbDHTML) nViewFrameType = 1;\r
- if (gbNav6&&!gbNav61&&nWebhelpNavPaneMode == 2) nViewFrameType = 3;\r
- if (gbMac) nViewFrameType = 3;\r
- if (gbOpera7&&nViewFrameType == 2) nViewFrameType = 3;\r
- if ((bNoApplet)&&(nViewFrameType == 2)) nViewFrameType = 3;\r
- }\r
- }\r
-}\r
-\r
-if (nViewFrameType!=-1)\r
-{\r
- var gbWindows = ((gAgent.indexOf("win") != -1) || (gAgent.indexOf("16bit") != -1));\r
- //The colordepth of the 16 color on Windows is 1. \r
- if ((gbWindows) && (gbNav4) && (window.screen) && (window.screen.colorDepth <= 4))\r
- {\r
- alert("WebHelp has detected that your display is set to 16 colors. For full WebHelp support, please set your display to use 256 or more colors.");\r
- nViewFrameType = 3;\r
- }\r
-\r
- //figure out which one is navpane\r
- if (nViewFrameType == 1)\r
- strPane = strPaneDHTML;\r
- else if (nViewFrameType == 2)\r
- strPane = strPaneApplet;\r
- else \r
- strPane = strPaneList;\r
-\r
- var oParam = new Object();\r
- oParam.sTopic = "";\r
- var oMsg = new whMessage(WH_MSG_GETDEFAULTTOPIC, window, 1, oParam);\r
- if (SendMessage(oMsg) && oParam.sTopic != "")\r
- strDefaultTopic = oParam.sTopic;\r
-\r
-\r
- if (nViewFrameType == 1)\r
- {\r
- //DHTML (iframe or xml based)\r
- strHTML += "<frameset id=\"whPfset\" cols=\"260,*\" frameborder=\"1\">";\r
- strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane + "\" scrolling=\"no\"></frame>";\r
- strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
- }\r
- else if (nViewFrameType == 2)\r
- {\r
- //applet (xml based)\r
- strHTML += "<frameset id=\"whPfset\" cols=\"260,*\" framespacing=\"0\" frameborder=\"0\" border=\"0\">";\r
- strHTML += "<frame name=\"bsscleft\" title=\"navigation frame\" src=\"" + strPane+ "\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\"></frame>";\r
- strHTML += "<frame name=\"bsscright\" title=\"topic frame\" src=\"" + strDefaultTopic + "\" scrolling=\"auto\"></frame></frameset>";\r
- }\r
- else if (nViewFrameType == 3)\r
- {\r
- //generic html (pure html based)\r
- strHTML += "<frameset id=\"whPfset\" cols=\"260,*\">";\r
- strHTML += "<frame title=\"navigation frame\" src=\"" + strPane + "\" name=\"bsscleft\" scrolling=\"no\"></frame>";\r
- strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" scrolling=\"auto\"></frame>";\r
- strHTML += "</frameset>";\r
- } \r
- else if (nViewFrameType == 4)\r
- {\r
- //no navipane at all\r
- strHTML += "<frameset id=\"whPfset\" border=\"0\" cols=\"100%,*\">";\r
- strHTML += "<frame title=\"topic frame\" src=\"" + strDefaultTopic + "\" name=\"bsscright\" framespacing=\"0\" frameborder=\"0\" border=\"0\" scrolling=\"auto\">";\r
- strHTML += "</frameset>";\r
- }\r
-\r
- document.write(strHTML);\r
-\r
- RegisterListener2(window, WH_MSG_SHOWPANE);\r
- RegisterListener2(window, WH_MSG_HIDEPANE);\r
- RegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
- window.onunload = window_unload;\r
-}\r
-\r
-function window_unload()\r
-{\r
- UnRegisterListener2(window, WH_MSG_SHOWPANE);\r
- UnRegisterListener2(window, WH_MSG_HIDEPANE);\r
- UnRegisterListener2(window, WH_MSG_ISPANEVISIBLE);\r
-}\r
-\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- var nMsgId = oMsg.nMessageId;\r
- if (nMsgId == WH_MSG_SHOWPANE)\r
- {\r
- getElement("whPfset").cols = "260,*";\r
- var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "visible");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_GETPANEINFO, this, 1, "");\r
- if (SendMessage(onMsg))\r
- {\r
- onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, onMsg.oParam);\r
- SendMessage(onMsg);\r
- }\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_HIDEPANE)\r
- {\r
- getElement("whPfset").cols = "0,*";\r
- var onMsg = new whMessage(WH_MSG_PANESTATUE, this, 1, "invisible");\r
- SendMessage(onMsg);\r
- onMsg = new whMessage(WH_MSG_PANEINFO, this, 1, "");\r
- SendMessage(onMsg);\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_ISPANEVISIBLE)\r
- {\r
- var n = parseInt(getElement("whPfset").cols);\r
- if (n > 0)\r
- {\r
- oMsg.oParam.bVisible = true;\r
- }\r
- return false;\r
- }\r
- return true;\r
-}\r
-//-->\r
-</script>\r
-<body>\r
-<noscript>\r
- <p> It seems javascript is disabled in your browser, please enable it and reload again, or click <a href="whnjs.htm">here</a> to view without javascript</p>\r
-</noscript>\r
-</body>\r
-</html>\r
+++ /dev/null
-<html>\r
-<head>\r
-<title>WebHelp 5.50 </title>\r
-<meta name="description" content="output from robohelp">\r
-<meta name="keywords" content="robohelp,webhelp,webhelp enterprise,roboinfo">\r
-</head>\r
-<body>\r
-<h1> WebHelp 5.50 System Info </h1>\r
-<table>\r
-<tr><td> Start Page </td><td>index.htm</td></tr>\r
-<tr><td> Skin Name </td><td></td></tr>\r
-<tr><td> Generating Time </td><td>12:34 06/02/2006</td></tr>\r
-<tr><td> Language ID </td><td>1033</td></tr>\r
-<tr><td> Compile Script </td><td>webhelp5_compile_script.xml</td></tr>\r
-<tr><td> Compile Build Version </td><td>13.10.606</td></tr>\r
-<tr><td> Product Name </td><td>WebHelp 5.50</td></tr>\r
-<tr><td> Authoring Tool Name </td><td>RoboHelp X5</td></tr>\r
-<table>\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>Select a Topic </title>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript">\r
-<!--\r
-var gsBgColor = "#c0c0c0";\r
-var gsBgImage = "";\r
-var gsListBgColor = "white";\r
-var gsListBgImage = "";\r
-var gsMargin="0pt";\r
-var gsIndent="0pt";\r
-var gSelectedItem = -1;\r
-\r
-\r
-var goFont=null;\r
-var goHoverFont=null;\r
-var goTableFont=null;\r
-var gsABgColor="#cccccc";\r
-\r
-function setListBackground(sBgImage)\r
-{\r
- if (sBgImage != null && sBgImage.length > 0)\r
- gsListBgImage = sBgImage;\r
-}\r
-\r
-function setListBackgroundcolor(sBgColor)\r
-{\r
- if (sBgColor != null && sBgColor.length > 0)\r
- gsListBgColor = sBgColor;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
- if (sBgImage != null && sBgImage.length > 0)\r
- gsBgImage = sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- if (sBgColor != null && sBgColor.length > 0)\r
- gsBgColor = sBgColor;\r
-}\r
-\r
-function setActiveBgColor(sBgColor)\r
-{\r
- gsABgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType, sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- if (sType == "Normal")\r
- goFont=vFont;\r
- if (sType == "Hover")\r
- goHoverFont=vFont;\r
- else if (sType == "Table")\r
- goTableFont=vFont;\r
-}\r
-\r
-function fnOnload()\r
-{\r
- if( window.dialogArguments != null )\r
- fnLoadOptions( window.dialogArguments );\r
- var items = getElementsByTag(document, "a");\r
- if (items.length > 0)\r
- items[0].focus();\r
-}\r
-\r
-var gaOpts = new Array();\r
-\r
-function selectOption(index)\r
-{\r
- gSelectedItem = index;\r
-}\r
-\r
-function displayOption(index)\r
-{\r
- if (index < gaOpts.length)\r
- {\r
- returnValue = new Object();\r
- returnValue.m_url = gaOpts[index];\r
- }\r
- else\r
- returnValue = null;\r
-\r
- window.close();\r
-}\r
-\r
-function fnLoadOptions( cList )\r
-{\r
- var sHTML = "<dl>";\r
- for( var i=0;i <cList.length; i++)\r
- {\r
- sHTML += "<dt><nobr><a href=\"javascript:void(0);\" onclick=\"return false;\" onfocus=\"selectOption(";\r
- sHTML += gaOpts.length + ");return false;\" ondblclick=\"displayOption(" + gaOpts.length;\r
- sHTML += ");return false;\">"+ _textToHtml(cList[i].m_sName) + "</a></nobr></dt>";\r
- gaOpts[gaOpts.length] = cList[i].m_sURL;\r
- }\r
- sHTML += "</dl>";\r
- var oDivCon=getElement("divlist");\r
- if(oDivCon)\r
- oDivCon.innerHTML=sHTML;\r
- return true;\r
-}\r
-\r
-function fnOK()\r
-{\r
- displayOption(gSelectedItem);\r
-}\r
-\r
-function fnCancel()\r
-{\r
- returnValue = null; window.close();\r
-}\r
-\r
-function fnOnKeypress()\r
-{\r
- switch( event.keyCode )\r
- {\r
- case 13: // enter key\r
- fnOK();\r
- break;\r
- case 27: // escape key\r
- fnCancel();\r
- break;\r
- }\r
-}\r
-\r
-function writeStyle(bMiniBar)\r
-{\r
- var sStyle="";\r
- sStyle+="<style type='text/css'>\n";\r
- sStyle+="<!--\n";\r
- sStyle+="body.clsbody\n";\r
- sStyle+="{\n";\r
- sStyle+="margin: 4px;\n";\r
- sStyle+=getFontStyle(goTableFont);\r
- sStyle+="background-attachment: fixed;\n";\r
- sStyle+="};\n";\r
- sStyle+="P.clsNDXTD\n";\r
- sStyle+="{\n";\r
- sStyle+="margin:0;\n";\r
- sStyle+=getFontStyle(goTableFont);\r
- sStyle+="};\n";\r
- sStyle+="div.clslist\n";\r
- sStyle+="{\n";\r
- if (gsListBgImage)\r
- sStyle+="background-image:url("+gsListBgImage+");\n";\r
- else if (gsListBgColor)\r
- sStyle+="background-color:"+gsListBgColor+";\n";\r
- sStyle+=getFontStyle(goFont);\r
- sStyle+="};\n";\r
- sStyle+="BUTTON.clsNDXButton\n";\r
- sStyle+="{\n";\r
- sStyle+=getFontStyle(goTableFont);\r
- sStyle+="background-color: transparent;\n";\r
- sStyle+="};\n";\r
- sStyle+="dl {"+getFontStyle(goFont)+"margin-left:"+gsIndent+";margin-top:"+gsMargin+";}\n";\r
- sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:active {background-color:"+gsABgColor+";}\n";\r
- sStyle+="A:hover {"+getFontStyle(goHoverFont)+"}\n";\r
- sStyle+="</style>\n";\r
- document.write(sStyle);\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- if(document.body)\r
- {\r
- if(gsBgImage&&gsBgImage.length>0)\r
- {\r
- document.body.background=gsBgImage;\r
- }\r
- if(gsBgColor&&gsBgColor.length>0)\r
- {\r
- document.body.bgColor=gsBgColor;\r
- }\r
- }\r
- fnOnload();\r
- window_onResize();\r
-}\r
-\r
-function window_onResize()\r
-{\r
- var oDiv = getElement("divlist");\r
- var oTitle = getElement("p_title");\r
- var oButton = getElement("tb_button");\r
- if (oDiv && oTitle && oButton)\r
- {\r
- oDiv.style.height = document.body.offsetHeight - oTitle.offsetHeight - oButton.offsetHeight - 8;\r
- }\r
-}\r
-goTableFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
-goHoverFont=new whFont("Verdana","8pt","#666666","normal","normal","none");\r
-\r
-\r
-\r
-\r
-setFont("Table", "Arial","9pt","#000000","normal","normal","none");\r
-\r
-\r
-setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
-setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
-setActiveBgColor("#cccccc");\r
-\r
-window.onload=window_OnLoad;\r
-window.onresize = window_onResize;\r
-writeStyle();\r
-//-->\r
-</script>\r
-</head>\r
-\r
-<body class="clsbody" scroll="no" onkeypress="fnOnKeypress()">\r
-<p id="p_title" class="clsNDXTD"><nobr>Select a topic, then click Display</nobr></p>\r
-<div id="divlist" class="clslist" style="margin:2px;position: relative;overflow:auto;width:100%;border-style:inset;border-width:2">\r
-</div>\r
-<table id="tb_button" width="100%">\r
- <tr>\r
- <td width="100%" align="center"><button class="clsNDXButton" name="btnOK" onclick="fnOK()">Display</button>   <button class="clsNDXButton" name="btnCancel" onclick="fnCancel()">Cancel</button></td>\r
- </tr>\r
-</table>\r
-\r
-</body>\r
-\r
-</html>
\ No newline at end of file
+++ /dev/null
-<html>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2">\r
-<!--\r
-var gsTopic="";\r
-\r
-if (location.hash.length > 1)\r
-{\r
- var nPos = location.hash.indexOf(">>");\r
- if (nPos>1)\r
- {\r
- gsTopic = location.hash.substring(1, nPos);\r
- parseParam(location.hash.substring(nPos+2));\r
- }\r
- else\r
- gsTopic = location.hash.substring(1);\r
-}\r
-\r
-\r
- var strHtml="";\r
- strHtml+="<frameset rows=\'100%,*\'>";\r
- strHtml+="<frame name=\'topicwindow\' src=\'" + gsTopic +"\'></frame>";\r
- strHtml+="<frame src=\'whskin_blank.htm\' noresize></frame>";\r
- strHtml+="</frameset>";\r
- document.write(strHtml);\r
-\r
-function parseParam(sParam)\r
-{\r
- if (sParam)\r
- {\r
- var nBPos=0;\r
- do \r
- {\r
- var nPos=sParam.indexOf(">>", nBPos);\r
- if (nPos!=-1)\r
- {\r
- if (nPos>0)\r
- {\r
- var sPart=sParam.substring(nBPos, nPos);\r
- parsePart(sPart);\r
- }\r
- nBPos = nPos + 2;\r
- }\r
- else\r
- {\r
- var sPart=sParam.substring(nBPos);\r
- parsePart(sPart);\r
- break;\r
- }\r
- } while(nBPos < sParam.length);\r
- } \r
-}\r
-\r
-function parsePart(sPart)\r
-{\r
- if(sPart.toLowerCase().indexOf("cap=")==0)\r
- {\r
- document.title=_browserStringToText(sPart.substring(4));\r
- }\r
-}\r
-//-->\r
-</script>\r
-</html>
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.003\r
-RegisterListener2(this, WH_MSG_GETSTARTFRAME);\r
-RegisterListener2(this, WH_MSG_GETDEFAULTTOPIC);\r
-RegisterListener2(this, WH_MSG_MINIBARORDER);\r
-RegisterListener2(this, WH_MSG_TOOLBARORDER);\r
-RegisterListener2(this, WH_MSG_ISSEARCHSUPPORT);\r
-RegisterListener2(this, WH_MSG_ISSYNCSSUPPORT);\r
-RegisterListener2(this, WH_MSG_ISAVENUESUPPORT);\r
-RegisterListener2(this, WH_MSG_GETPANETYPE);\r
-RegisterListener2(this, WH_MSG_GETPANES);\r
-RegisterListener2(this, WH_MSG_RELOADNS6);\r
-RegisterListener2(this, WH_MSG_GETCMD);\r
-RegisterListener2(this, WH_MSG_GETPANE);\r
-RegisterListener2(this, WH_MSG_GETDEFPANE);\r
-\r
-if (gbNav6)\r
-{\r
- var gnReload=0;\r
- setTimeout("delayReload();",5000);\r
-}\r
-\r
-function delayReload()\r
-{\r
- if (!(this.cMRServer && cMRServer.m_strVersion))\r
- {\r
- if(gnReload!=2)\r
- {\r
- if(nViewFrameType&&nViewFrameType==1)\r
- document.location=document.location;\r
- }\r
- }\r
-}\r
-\r
-var gsToolbarOrder = "";\r
-var gsMinibarOrder = "";\r
-\r
-var gsTopic = "kernel/introduction.htm";\r
-var PANE_OPT_SEARCH = 1;\r
-var PANE_OPT_BROWSESEQ = 2;\r
-var gnOpts=-1;\r
-var gnCmd=-1;\r
-var gnPans=2;\r
-var gsBtns="invalid";\r
-var gsDefaultBtn="invalid";\r
-var gbHasTitle=false;\r
-\r
-if (location.hash.length > 1)\r
-{\r
- var sParam = location.hash;\r
- if (sParam.indexOf("#<") == 0)\r
- {\r
- document.location = "whcsh_home.htm#" + sParam.substring(2);\r
- }\r
- else if (sParam.indexOf("#>>") == 0)\r
- {\r
- parseParam(sParam.substring(3));\r
- sParam = "#" + gsTopic + sParam.substring(1);\r
- }\r
- else\r
- {\r
- var nPos = sParam.indexOf(">>");\r
- if (nPos>1)\r
- {\r
- gsTopic = sParam.substring(1, nPos);\r
- parseParam(sParam.substring(nPos+2));\r
- }\r
- else\r
- gsTopic = sParam.substring(1);\r
- }\r
- if (gnPans == 1 && gsTopic)\r
- {\r
- var strURL=location.href;\r
- if (location.hash)\r
- {\r
- var nPos=location.href.indexOf(location.hash);\r
- strURL=strURL.substring(0, nPos);\r
- }\r
- if (gbHasTitle)\r
- document.location=_getPath(strURL)+ "whskin_tw.htm" + sParam;\r
- else\r
- document.location=_getPath(strURL)+ gsTopic;\r
- }\r
-}\r
-\r
-function parseParam(sParam)\r
-{\r
- if (sParam)\r
- {\r
- var nBPos=0;\r
- do \r
- {\r
- var nPos=sParam.indexOf(">>", nBPos);\r
- if (nPos!=-1)\r
- {\r
- if (nPos>0)\r
- {\r
- var sPart=sParam.substring(nBPos, nPos);\r
- parsePart(sPart);\r
- }\r
- nBPos = nPos + 2;\r
- }\r
- else\r
- {\r
- var sPart=sParam.substring(nBPos);\r
- parsePart(sPart);\r
- break;\r
- }\r
- } while(nBPos < sParam.length);\r
- } \r
-}\r
-\r
-function parsePart(sPart)\r
-{\r
- if(sPart.toLowerCase().indexOf("cmd=")==0)\r
- {\r
- gnCmd=parseInt(sPart.substring(4));\r
- }\r
- else if(sPart.toLowerCase().indexOf("cap=")==0)\r
- {\r
- document.title=_browserStringToText(sPart.substring(4));\r
- gbHasTitle=true;\r
- }\r
- else if(sPart.toLowerCase().indexOf("pan=")==0)\r
- {\r
- gnPans=parseInt(sPart.substring(4));\r
- }\r
- else if(sPart.toLowerCase().indexOf("pot=")==0)\r
- {\r
- gnOpts=parseInt(sPart.substring(4));\r
- }\r
- else if(sPart.toLowerCase().indexOf("pbs=")==0)\r
- {\r
- var sRawBtns = sPart.substring(4);\r
- var aBtns = sRawBtns.split("|");\r
- for (var i=0;i<aBtns.length;i++)\r
- {\r
- aBtns[i] = transferAgentNameToPaneName(aBtns[i]);\r
- }\r
- gsRawBtns = aBtns.join("|");\r
- }\r
- else if(sPart.toLowerCase().indexOf("pdb=")==0)\r
- {\r
- gsDefaultBtn=transferAgentNameToPaneName(sPart.substring(4));\r
- }\r
-}\r
-\r
-function setToolbarOrder(sOrder)\r
-{\r
- gsToolbarOrder = sOrder;\r
-}\r
-\r
-function setMinibarOrder(sOrder)\r
-{\r
- gsMinibarOrder = sOrder;\r
-}\r
-\r
-function onSendMessageX(oMsg)\r
-{\r
- var nMsgId = oMsg.nMessageId;\r
- if (nMsgId == WH_MSG_GETSTARTFRAME)\r
- {\r
- oMsg.oParam.oFrame = this;\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_GETDEFAULTTOPIC)\r
- {\r
- if (this.cMRServer && cMRServer.m_strVersion)\r
- {\r
- if (cMRServer.m_strURLTopic);\r
- {\r
- oMsg.oParam.sTopic = cMRServer.m_strURLTopic;\r
- return false;\r
- }\r
-\r
- }\r
- oMsg.oParam.sTopic = gsTopic;\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_TOOLBARORDER)\r
- {\r
- var oMsg1 = new whMessage(WH_MSG_GETPANES, this, 1, null);\r
- if (SendMessage(oMsg1))\r
- {\r
- if (oMsg1.oParam)\r
- {\r
- if (this.cMRServer && cMRServer.m_strVersion)\r
- {\r
- var aToolbarOrder=cMRServer.m_strAgentList.split(";");\r
- var i=0;\r
- for (i=0;i<aToolbarOrder.length;i++)\r
- aToolbarOrder[i]=transferANToPN2(aToolbarOrder[i]);\r
- aToolbarOrder[aToolbarOrder.length] = "blankblock";\r
- if (cMRServer.m_bShowSearchInput)\r
- {\r
- aToolbarOrder[aToolbarOrder.length] = "searchform";\r
- }\r
- aToolbarOrder[aToolbarOrder.length] = "banner";\r
- var aToolbarOrderNew = new Array();\r
- for (i=0;i<aToolbarOrder.length;i++)\r
- {\r
- if (isAPane(aToolbarOrder[i]))\r
- {\r
- if (oMsg1.oParam.aPanes && oMsg1.oParam.aPanes.length)\r
- {\r
- for (var j=0;j<oMsg1.oParam.aPanes.length;j++)\r
- {\r
- if (aToolbarOrder[i] == oMsg1.oParam.aPanes[j].sPaneName)\r
- {\r
- aToolbarOrderNew[aToolbarOrderNew.length] = aToolbarOrder[i];\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- else\r
- aToolbarOrderNew[aToolbarOrderNew.length] = aToolbarOrder[i];\r
- }\r
- oMsg.oParam = aToolbarOrderNew.join("|");\r
- return false;\r
- }\r
- }\r
- }\r
- var sParam="";\r
- if (gsBtns!="invalid")\r
- sParam=gsBtns+"|blankblock|banner";\r
- else\r
- sParam = gsToolbarOrder;\r
-\r
- if (gnOpts!=-1)\r
- {\r
- var nPosForm=sParam.indexOf("|searchform|");\r
- if (gnOpts&PANE_OPT_SEARCH)\r
- {\r
- if (nPosForm == -1 && sParam.indexOf("|fts|") != -1)\r
- {\r
- var nPos=sParam.indexOf("banner");\r
- if (nPos!=-1)\r
- {\r
- sParam=sParam.substring(0, nPos) + "searchform|" + sParam.substring(nPos);\r
- }\r
- }\r
- }\r
- else\r
- {\r
- if (nPosForm!=-1)\r
- {\r
- sParam=sParam.substring(0,nPosForm) + sParam.substring(nPosForm+11);\r
- }\r
- }\r
- }\r
- oMsg.oParam=sParam;\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_MINIBARORDER)\r
- {\r
- var sMinParam=gsMinibarOrder;\r
- if (gnOpts!=-1)\r
- {\r
- var nPosBro=gsMinibarOrder.indexOf("avprev|avnext");\r
- if (gnOpts&PANE_OPT_BROWSESEQ)\r
- {\r
- if (nPosBro==-1)\r
- {\r
- sMinParam ="avprev|avnext|" + gsMinibarOrder;\r
- }\r
- }\r
- else\r
- {\r
- if (nPosBro!=-1)\r
- {\r
- if (nPosBro!=0)\r
- sMinParam=gsMinibarOrder.substring(0, nPosBro) + gsMinibarOrder.substring(nPosBro+14);\r
- else\r
- sMinParam=gsMinibarOrder.substring(14);\r
- }\r
- }\r
- }\r
- oMsg.oParam = sMinParam;\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_ISSYNCSSUPPORT)\r
- {\r
- if (this.cMRServer && cMRServer.m_strVersion)\r
- {\r
- if (cMRServer.m_bShowSync)\r
- oMsg.oParam=true;\r
- else\r
- oMsg.oParam=false;\r
- return false;\r
- }\r
- else\r
- {\r
- if(typeof(nViewFrameType)!="undefined")\r
- {\r
- oMsg.oParam= (nViewFrameType < 3);\r
- return false;\r
- }\r
- }\r
- }\r
- else if (nMsgId == WH_MSG_ISAVENUESUPPORT)\r
- {\r
- if (this.cMRServer && cMRServer.m_strVersion)\r
- {\r
- if (cMRServer.m_bShowBrowseSequences)\r
- oMsg.oParam=true;\r
- else\r
- oMsg.oParam=false;\r
- }\r
- else\r
- {\r
- oMsg.oParam=true;\r
- }\r
- return false;\r
- }\r
- else if (nMsgId == WH_MSG_ISSEARCHSUPPORT)\r
- {\r
- if(typeof(nViewFrameType)!="undefined")\r
- {\r
- oMsg.oParam= (nViewFrameType < 3);\r
- return false;\r
- }\r
- }\r
- else if (nMsgId == WH_MSG_GETPANETYPE)\r
- {\r
- if(typeof(nViewFrameType)!="undefined")\r
- {\r
- var oPaneInfo = new Object();\r
- oPaneInfo.nType = nViewFrameType;\r
- oPaneInfo.sPaneURL = strPane;\r
- oMsg.oParam = oPaneInfo;\r
- return false;\r
- }\r
- }\r
- else if (nMsgId == WH_MSG_GETPANES)\r
- {\r
- if (this.cMRServer && cMRServer.m_strVersion)\r
- {\r
- var oPanes = new Object();\r
- var aAgentNames = null;\r
- if (cMRServer.m_strDefAgent)\r
- oPanes.sDefault = transferAgentNameToPaneName(cMRServer.m_strDefAgent);\r
-\r
- aPanes = new Array();\r
- for(var i=0; i< cMRServer.m_cAgents.length; i++)\r
- {\r
- var nCur = aPanes.length;\r
- aPanes[nCur] = new Object();\r
- aPanes[nCur].sPaneName = transferAgentNameToPaneName(cMRServer.m_cAgents[i].m_strID);\r
- aPanes[nCur].sPaneURL = cMRServer.m_cAgents[i].m_strURL;\r
- }\r
- oPanes.aPanes = aPanes;\r
- oMsg.oParam = oPanes;\r
- return false;\r
- }\r
- else\r
- {\r
- oMsg.oParam = null;\r
- return false;\r
- }\r
- }\r
- else if(nMsgId==WH_MSG_RELOADNS6)\r
- {\r
- if(gbNav6)\r
- gnReload++;\r
- return false;\r
- }\r
- else if(nMsgId==WH_MSG_GETCMD)\r
- {\r
- oMsg.oParam=gnCmd;\r
- return false;\r
- }\r
- else if(nMsgId==WH_MSG_GETPANE)\r
- {\r
- if (gsBtns!="invalid" && oMsg.oParam.sName)\r
- {\r
- if(gsBtns.indexOf(oMsg.oParam.sName) != -1)\r
- oMsg.oParam.bEnable=true;\r
- else\r
- oMsg.oParam.bEnable=false;\r
- }\r
- else\r
- oMsg.oParam.bEnable=true;\r
- return false;\r
- }\r
- else if(nMsgId==WH_MSG_GETDEFPANE)\r
- {\r
- if (gsDefaultBtn!="invalid")\r
- {\r
- oMsg.oParam=gsDefaultBtn;\r
- }\r
- return false;\r
- }\r
- return true;\r
-}\r
-\r
-function transferANToPN2(sAN)\r
-{\r
- if (sAN =="toc")\r
- return "toc";\r
- else if (sAN =="ndx")\r
- return "idx";\r
- else if (sAN =="nls")\r
- return "fts";\r
- else if (sAN =="gls")\r
- return "glo";\r
- else if (sAN =="WebSearch")\r
- return "websearch";\r
- else if (sAN.indexOf("custom_")==0);\r
- return "custom" + sAN.substring(7);\r
- return sAN;\r
-}\r
-\r
-function transferAgentNameToPaneName(sAgentName)\r
-{\r
- if (sAgentName =="toc")\r
- return "toc";\r
- else if (sAgentName =="ndx")\r
- return "idx";\r
- else if (sAgentName =="nls")\r
- return "fts";\r
- else if (sAgentName =="gls")\r
- return "glo";\r
- return "";\r
-}\r
-\r
-function isAPane(sPaneName)\r
-{\r
- if (sPaneName == "toc" || sPaneName == "idx" || sPaneName == "fts" || sPaneName == "glo")\r
- return true;\r
- else\r
- return false;\r
-}
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.002\r
-window.whname="wh_stub";\r
-function getframehandle(frames,framename)\r
-{\r
- var frame=null;\r
- if(null==frames) return null;\r
- for(var i=0;i<frames.length;i++)\r
- {\r
- if(typeof(frames[i].name)!="unknown")\r
- {\r
- if(frames[i].name==framename)\r
- return frames[i];\r
- }\r
- if(frames[i].frames.length>0)\r
- {\r
- frame=getframehandle(frames[i].frames,framename);\r
- if(null!=frame)\r
- return frame;\r
- }\r
- }\r
- return frame;\r
-}\r
-\r
-function AddToArray(arr,obj)\r
-{\r
- var bFound=false;\r
- for(var i=0;i<arr.length;i++){\r
- if(arr[i]==obj){\r
- bFound=true;\r
- break;\r
- }\r
- else if(arr[i]==null){\r
- break;\r
- }\r
- }\r
- if(!bFound) arr[i]=obj;\r
-}\r
-\r
-var gArrayRegistedMessage=new Array();\r
-var gArrayCompoentsArray=new Array();\r
-\r
-function GetComponentsArray(nMessageId)\r
-{\r
- var len=gArrayRegistedMessage.length;\r
- for(var i=0;i<len;i++)\r
- {\r
- if(gArrayRegistedMessage[i]==nMessageId){\r
- if(gArrayCompoentsArray.length>i)\r
- return gArrayCompoentsArray[i];\r
- else\r
- return null;\r
- }\r
- }\r
- return null;\r
-}\r
-\r
-function CreateComponentsArray(nMessageId)\r
-{\r
- var len=gArrayRegistedMessage.length;\r
- gArrayRegistedMessage[len]=nMessageId;\r
- gArrayCompoentsArray[len]=new Array();\r
- return gArrayCompoentsArray[len];\r
-}\r
-\r
-function listener(sName,oWindow)\r
-{\r
- this.sName=sName;\r
- this.oWindow=oWindow;\r
-}\r
-\r
-function RegisterListener(windowName,nMessageId)\r
-{\r
- var arrayComponents=GetComponentsArray(nMessageId);\r
- if(arrayComponents==null)\r
- arrayComponents=CreateComponentsArray(nMessageId);\r
- \r
- if(arrayComponents!=null)\r
- {\r
- for (var i=0;i<arrayComponents.length;i++)\r
- {\r
- if (arrayComponents[i].sName == windowName)\r
- return false;\r
- }\r
- var oListener=new listener(windowName,null);\r
- AddToArray(arrayComponents,oListener);\r
- return true;\r
- }\r
- else\r
- return false;\r
-}\r
-\r
-function RegisterListener2(oWindow,nMessageId)\r
-{\r
- var arrayComponents=GetComponentsArray(nMessageId);\r
- if(arrayComponents==null)\r
- arrayComponents=CreateComponentsArray(nMessageId);\r
- \r
- if(arrayComponents!=null)\r
- {\r
- var oListener=new listener("",oWindow);\r
- AddToArray(arrayComponents,oListener);\r
- return true;\r
- }\r
- else\r
- return false;\r
-}\r
-\r
-function UnRegisterListener2(oWindow,nMessageId)\r
-{\r
- var arrayComponents=GetComponentsArray(nMessageId);\r
- if(arrayComponents!=null)\r
- {\r
- for(var i=0;i<arrayComponents.length;i++)\r
- {\r
- if(arrayComponents[i].oWindow==oWindow)\r
- {\r
- removeItemFromArray(arrayComponents,i);\r
- return true;\r
- }\r
- }\r
- }\r
- else\r
- return false;\r
-}\r
-\r
-function SendMessage(oMessage)\r
-{\r
- var bDelivered=false;\r
- var arrayComponents=GetComponentsArray(oMessage.nMessageId);\r
- if(arrayComponents!=null&&arrayComponents.length>0){\r
- for(var i=0;i<arrayComponents.length;i++)\r
- {\r
- if(null!=arrayComponents[i])\r
- {\r
- var pFrame;\r
- if(arrayComponents[i].oWindow==null)\r
- pFrame=getframehandle(frames,arrayComponents[i].sName);\r
- else\r
- pFrame=arrayComponents[i].oWindow;\r
- if(null!=pFrame)\r
- {\r
- if(pFrame.onSendMessageX)\r
- {\r
- bDelivered=true;\r
- if(!pFrame.onSendMessageX(oMessage))\r
- break;\r
- }\r
- if(pFrame.onSendMessage)\r
- {\r
- bDelivered=true;\r
- if(!pFrame.onSendMessage(oMessage))\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- }\r
- return bDelivered;\r
-}
\ No newline at end of file
+++ /dev/null
-<html>\r
-<head>\r
-<title>Table of contents</title>\r
-\r
-<meta name="generator" content="RoboHelp by eHelp Corporation www.ehelp.com">\r
-<meta name="description" content="WebHelp 5.50">\r
-<base target="bsscright">\r
-</head>\r
-<script language="javascript" src="whver.js"></script>\r
-<script language="javascript1.2" src="whmozemu.js"></script>\r
-<script language="javascript1.2" src="whutils.js"></script>\r
-<script language="javascript1.2" src="whmsg.js"></script>\r
-<script language="javascript1.2" src="whproxy.js"></script>\r
-<script language="javascript1.2" src="whthost.js"></script>\r
-<script LANGUAGE="javascript1.2">\r
-<!--\r
-if (window.gbWhTHost)\r
-{\r
- \r
- \r
- setFont("Normal", "Arial","9pt","#000000","normal","normal","none");\r
- setFont("Hover", "Arial","9pt","#007f00","normal","normal","underline");\r
- setActiveBgColor("#cccccc");\r
- setMargin("0pt");\r
- setIndent("9pt");\r
- setIcon("BookOpen","whd_toc2.gif");\r
- setIcon("BookClose","whd_toc1.gif");\r
- setIcon("Item","whd_toc3.gif");\r
- setIcon("RemoteItem","whd_toc4.gif");\r
- setIcon("NewBookOpen","whd_toc2.gif");\r
- setIcon("NewBookClose","whd_toc1.gif");\r
- setIcon("NewItem","whd_toc3.gif");\r
- setIcon("NewRemoteItem","whd_toc4.gif");\r
- TocWriteClassStyle();\r
- TocWriteFixedWidth(true,400);\r
-}\r
-else\r
- document.location.reload();\r
-//-->\r
-</script>\r
-<body topmargin="2" leftmargin="2" marginwidth="0" marginheight="0" bgproperties="fixed" bgcolor="white" scroll="auto">\r
-<script LANGUAGE="javascript1.2">\r
-<!--\r
-TocWriteFixedWidth(false,400);\r
-TocInitPage();\r
-//-->\r
-</script>\r
-</body>\r
-</html>
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.007\r
-var gaHSLoad=new Array();\r
-var gnMinIdx=0;\r
-var gnInsIdx=-1;\r
-var gsLoadingDivID="LoadingDiv";\r
-var gsLoadingMsg="Loading, click here to cancel...";\r
-var gaProj=null;\r
-var gaTocs=new Array();\r
-var goChunk=null;\r
-var gbReady=false;\r
-var gbToc=false;\r
-var gbXML=false;\r
-var gaRoot=new Array();\r
-var gnCC=-1;\r
-var gsTP="";\r
-var gaBTPs="";\r
-var gsCTPath="";\r
-var gnLT=-1;\r
-var gsPathSplit="\n";\r
-var gsBgColor="#ffffff";\r
-var gsBgImage="";\r
-var goFont=null;\r
-var goHFont=null;\r
-\r
-var gsMargin="0pt";\r
-var gsIndent="15pt";\r
-var gsABgColor="#cccccc";\r
-\r
-var giBookClose="";\r
-var giBookOpen="";\r
-var giBookItem="";\r
-var giURLItem="";\r
-var giNewBookClose="";\r
-var giNewBookOpen="";\r
-var giNewBookItem="";\r
-var giNewURLItem="";\r
-var gnImages=0;\r
-var gnLoadedImages=0;\r
-var gaImgs=new Array();\r
-var gbLoadData=false;\r
-var gobj=null;\r
-var gaTocsNs61Fix=null;\r
-var gbWhTHost=false;\r
-var gBookItems=new Array();\r
-var gInSync=false;\r
-var gbLData=false;\r
-var gbNeedFillStub=false;\r
-var gbLoadToc=false;\r
-\r
-function chunkInfoQueue()\r
-{\r
- this.aContent=new Array();\r
- this.inQueue=function(cInfo)\r
- {\r
- this.aContent[this.aContent.length]=cInfo;\r
- }\r
- this.deQueue=function()\r
- {\r
- var cInfo=null;\r
- if(this.aContent.length>0)\r
- {\r
- cInfo=this.aContent[0];\r
- for(var i=1;i<this.aContent.length;i++)\r
- this.aContent[i-1]=this.aContent[i];\r
- this.aContent.length--;\r
- }\r
- return cInfo;\r
- }\r
- this.length=function()\r
- {\r
- return this.aContent.length;\r
- }\r
-}\r
-\r
-var gchunkRequestQueue=new chunkInfoQueue();\r
-\r
-function chunkInfo(nIdx, bLocal)\r
-{\r
- this.nIdx=nIdx;\r
- this.bLocal=bLocal;\r
-}\r
-\r
-function setBackground(sBgImage)\r
-{\r
- gsBgImage=sBgImage;\r
-}\r
-\r
-function setBackgroundcolor(sBgColor)\r
-{\r
- gsBgColor=sBgColor;\r
-}\r
-\r
-function setFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- if(sType=="Normal") goFont=vFont;\r
- else if(sType=="Hover") goHFont=vFont;\r
-}\r
-\r
-function setActiveBgColor(sBgColor){gsABgColor=sBgColor;}\r
-\r
-function setMargin(sMargin){gsMargin=sMargin;}\r
-\r
-function setIndent(sIndent){gsIndent=sIndent;}\r
-\r
-function setIcon(sType,sURL)\r
-{\r
- if(sType=="BookOpen")\r
- giBookOpen=sURL;\r
- else if(sType=="BookClose")\r
- giBookClose=sURL;\r
- else if(sType=="Item")\r
- giBookItem=sURL;\r
- else if(sType=="RemoteItem")\r
- giURLItem=sURL;\r
- else if(sType=="NewBookClose")\r
- giNewBookClose=sURL;\r
- else if(sType=="NewBookOpen")\r
- giNewBookOpen=sURL;\r
- else if(sType=="NewItem")\r
- giNewBookItem=sURL;\r
- else if(sType=="NewRemoteItem")\r
- giNewURLItem=sURL; \r
-}\r
-\r
-function bookItem(sTarget,sURL)\r
-{\r
- if(sTarget)\r
- this.sTarget=sTarget;\r
- else\r
- this.sTarget="bsscright";\r
- this.sURL=sURL;\r
-}\r
-\r
-function addBookItem(sBookId,sTarget,sURL)\r
-{\r
- gBookItems[sBookId]=new bookItem(sTarget,sURL); \r
-}\r
-\r
-function tocChunk(sPPath,sDPath)\r
-{\r
- this.sPPath=sPPath;\r
- this.sDPath=sDPath;\r
- this.nMI=-1;\r
- this.aTocs=null;\r
-}\r
-\r
-function addTocChunk(sPPath,sDPath)\r
-{\r
- var oChunk=new tocChunk(sPPath,sDPath);\r
- gaTocs[gaTocs.length]=oChunk;\r
- return oChunk;\r
-}\r
-\r
-function isHSLoad(nIdx)\r
-{\r
- for(var i=0;i<gaHSLoad.length;i++)\r
- if(gaHSLoad[i]==nIdx)\r
- return true;\r
- return false;\r
-}\r
-\r
-function setHSLoad(nIdx)\r
-{\r
- if(!isHSLoad(nIdx))\r
- {\r
- var len=gaHSLoad.length;\r
- for(var i=0;i<len;i++)\r
- if(gaHSLoad[i]==-1)\r
- {\r
- gaHSLoad[i]=nIdx;\r
- return;\r
- }\r
- gaHSLoad[len]=nIdx;\r
- }\r
-}\r
-\r
-function setHSUnLoad(nIdx)\r
-{\r
- if(isHSLoad(nIdx))\r
- {\r
- for(var i=0;i<gaHSLoad.length;i++)\r
- if(gaHSLoad[i]==nIdx)\r
- {\r
- gaHSLoad[i]=-1;\r
- return;\r
- }\r
- }\r
-}\r
-\r
-function removeLoadingDiv()\r
-{\r
- var eLoadingDiv=getElement(gsLoadingDivID);\r
- if(eLoadingDiv)\r
- removeThis(eLoadingDiv);\r
-}\r
-\r
-function checkBookItem(nIdx)\r
-{\r
- if(!gInSync)\r
- {\r
- var sBookId=getBookId(nIdx);\r
- if(gBookItems[sBookId])\r
- {\r
- window.open(gBookItems[sBookId].sURL,gBookItems[sBookId].sTarget);\r
- }\r
- }\r
-}\r
-\r
-function insertBookItems(nIdx,num)\r
-{\r
- checkBookItem(nIdx);\r
- var sChildBookId=getCBId(nIdx);\r
- var eChildDiv=getElement(sChildBookId);\r
- if(eChildDiv){\r
- if((eChildDiv.childNodes&&eChildDiv.childNodes.length==0)||\r
- (eChildDiv.all&&eChildDiv.all.length==0)){\r
- var sHTML=writeBookItems(nIdx,num);\r
- eChildDiv.innerHTML=sHTML;\r
- setTimeout("syncInit()",1);\r
- }\r
- }\r
- ExpandIt(nIdx);\r
-}\r
-\r
-function isBookEmpty(nIdx)\r
-{\r
- var num=getItemContentsNum(nIdx);\r
- if (num>0)\r
- {\r
- var nCIdx=0;\r
- do {\r
- nCIdx++;\r
- var i=nIdx+nCIdx;\r
- var nItemType=getItemType(i);\r
- if(nItemType==1){\r
- if (!isBookEmpty(i))\r
- return false;\r
- }\r
- else if(nItemType==4){\r
- var sSrc=getRefURL(i);\r
- var nProj=getProject(sSrc);\r
- if(nProj!=-1){\r
- sSrc=gaRoot[nProj].sToc;\r
- if(sSrc)\r
- return false;\r
- }\r
- }\r
- else if(nItemType==2||nItemType==16||nItemType==8)\r
- return false;\r
- } while(nCIdx<num);\r
- }\r
- return true;\r
-}\r
-\r
-function writeBook(nIdx)\r
-{\r
- var sIcon=getBookImage(nIdx,true);\r
- var sName=_textToHtml(getItemName(nIdx));\r
- sIcon=_textToHtml_nonbsp(sIcon);\r
- \r
- var nType=getItemType(nIdx);\r
- var bLocal=(nType==1);\r
- var bLocalProject=(nType!=4);\r
- \r
- var sHTML="<div id=\""+getPBId(nIdx)+"\" class=";\r
- if(bLocal)\r
- {\r
- if (!isBookEmpty(nIdx))\r
- {\r
- sHTML+="parent><p><nobr><a id=\""+getBookId(nIdx)+"\" href=\"javascript:void(0);\" onfocus=\"markBook("+nIdx+");\" onclick=\"";\r
- sHTML+="insertBookItems("+nIdx+", "+getItemContentsNum(nIdx);\r
- sHTML+=");return false;\" title=\""+sName+"\"><img alt=\"Book\" name=\""+getBId(nIdx)+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\">";\r
- sHTML+=" "+sName+"</a></nobr></p></div>";\r
- var sURL=_textToHtml_nonbsp(getItemURL(nIdx));\r
- if(sURL!="")\r
- addBookItem(getBookId(nIdx),_textToHtml_nonbsp(getTopicTarget(nIdx)),sURL);\r
- sHTML+="<div id=\""+getCBId(nIdx)+"\" class=child></div>";\r
- }\r
- else\r
- sHTML="";\r
- }\r
- else\r
- {\r
- sHTML+="stub></div>";\r
- gbNeedFillStub=true;\r
- setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);\r
- }\r
- return sHTML;\r
-}\r
-\r
-function checkFillStub()\r
-{\r
- if(!gbLData)\r
- {\r
- if(gchunkRequestQueue.length()>0)\r
- {\r
- var cInfo=gchunkRequestQueue.deQueue();\r
- if(cInfo)\r
- {\r
- fillStub(cInfo.nIdx,cInfo.bLocal);\r
- return;\r
- }\r
- }\r
- }\r
- if(gbNeedFillStub)\r
- {\r
- gbNeedFillStub=false;\r
- setTimeout("syncInit()",1);\r
- }\r
-}\r
-\r
-function fillStub(nIdx,bLocalProject)\r
-{\r
- if(!gbLData)\r
- {\r
- gbLData=true;\r
- var sObj=getElement(getPBId(nIdx));\r
- if(sObj!=null)\r
- {\r
- tocExpandHelpSet(nIdx,bLocalProject);\r
- gbNeedFillStub=false;\r
- setTimeout("syncInit()",1);\r
- }\r
- else\r
- setTimeout("fillStub("+nIdx+","+bLocalProject+");",100);\r
- }\r
- else\r
- gchunkRequestQueue.inQueue(new chunkInfo(nIdx,bLocalProject));\r
-}\r
-\r
-function getBookId(nIdx){return "B_"+nIdx;}\r
-\r
-function getItemId(nIdx){return "I_"+nIdx;}\r
-\r
-function markBook(nIdx)\r
-{\r
- var obj=getElement(getItemId(nIdx));\r
- if(obj==null)\r
- obj=getElement(getBookId(nIdx));\r
- if(gbNav6)\r
- {\r
- gobj=obj;\r
- setTimeout("delayMarkObj();",1);\r
- }\r
- else\r
- markObj(obj);\r
-}\r
-\r
-function delayMarkObj()\r
-{\r
- if(gobj)\r
- {\r
- markObj(gobj);\r
- gobj=null;\r
- }\r
-}\r
-\r
-function markObj(obj)\r
-{\r
- if(obj!=null)\r
- {\r
- HighLightElement(obj,gsABgColor,"transparent");\r
- var sPath=calTocPath(obj);\r
- if(gsCTPath!=sPath)\r
- gsCTPath=sPath;\r
- }\r
-}\r
-\r
-function markItem(nIdx)\r
-{\r
- var obj=getElement(getItemId(nIdx));\r
- if(gbNav6)\r
- {\r
- gobj=obj;\r
- setTimeout("delayMarkObj();",1);\r
- }\r
- else\r
- markObj(getElement(getItemId(nIdx)));\r
-}\r
-\r
-function calTocPath(obj)\r
-{\r
- var sPath=getInnerText2(obj);\r
- var pObj=getParentNode(obj);\r
- do\r
- {\r
- while(pObj!=null&&!isCBId(pObj.id)) pObj=getParentNode(pObj);\r
- if(pObj!=null)\r
- {\r
- var nId=getIdByCBId(pObj.id);\r
- var sObj=getElement(getPBId(nId));\r
- if(sObj!=null)\r
- {\r
- var objs=getItemsByBook(sObj);\r
- for(var i=0;i<objs.length;i++)\r
- {\r
- var sText=getInnerText2(objs[i]);\r
- if(sText.length!=0)\r
- {\r
- sPath=sText+gsPathSplit+sPath;\r
- break;\r
- }\r
- }\r
- }\r
- pObj=getParentNode(pObj);\r
- }\r
- }while(pObj!=null);\r
- return sPath;\r
-}\r
-\r
-function writeAnItem(nIdx)\r
-{\r
- var sTarget=_textToHtml_nonbsp(getTopicTarget(nIdx));\r
- var sIcon=getItemIcon(nIdx,0);\r
- if(sIcon=="")\r
- {\r
- var nItemType=getItemType(nIdx);\r
- if(nItemType&2)\r
- sIcon=getItemImage(nIdx,false);\r
- else\r
- sIcon=getItemImage(nIdx,true);\r
- }\r
- sIcon=_textToHtml_nonbsp(sIcon);\r
- var sName=_textToHtml(getItemName(nIdx));\r
- var sHTML="<p><nobr><a id=\""+getItemId(nIdx)+"\" onfocus=\"markItem("+nIdx+");\""\r
- var sAltString="";\r
- if(nItemType&2)\r
- sAltString="Page";\r
- else\r
- sAltString="Remote Page";\r
- if(sTarget!="")\r
- sHTML+="target=\""+sTarget+"\" ";\r
- sHTML+="href=\""+_textToHtml_nonbsp(getItemURL(nIdx))+"\" title=\""+sName+"\"><img alt=\""+sAltString+"\" src=\""+sIcon+"\" border=0 align=\"absmiddle\"> "+sName+"</a></nobr></p>";\r
- return sHTML;\r
-}\r
-\r
-function writeBookItems(nIdx,num)\r
-{\r
- var sHTML="";\r
- if(num>0){\r
- var nCIdx=0;\r
- do{\r
- nCIdx++;\r
- var i=nIdx+nCIdx;\r
- var nItemType=getItemType(i);\r
- if(nItemType==1||nItemType==4||nItemType==8){\r
- sHTML+=writeBook(i); \r
- nCIdx+=getItemContentsNum(i); \r
- }\r
- else if(nItemType==2||nItemType==16){\r
- sHTML+=writeAnItem(i);\r
- }\r
- }\r
- while(nCIdx<num);\r
- }\r
- return sHTML;\r
-}\r
-\r
-function tocExpandHelpSet(nIdx,bLocal)\r
-{\r
- checkBookItem(nIdx);\r
- removeLoadingDiv();\r
- if(!isHSLoad(nIdx))\r
- {\r
- setHSLoad(nIdx);\r
- var sSrc="";\r
- if(bLocal){\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- {\r
- goChunk=addTocChunk(oChunk.sPPath,oChunk.sDPath);\r
- sSrc=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL;\r
- }\r
- }\r
- else{\r
- sSrc=getRefURL(nIdx);\r
- var nProj=getProject(sSrc);\r
- if(nProj!=-1)\r
- {\r
- sSrc=gaRoot[nProj].sToc;\r
- if(sSrc)\r
- goChunk=addTocChunk(gaProj[nProj].sPPath,gaProj[nProj].sDPath);\r
- else\r
- goChunk=null;\r
- }\r
- else\r
- goChunk=null;\r
- }\r
- if(goChunk)\r
- {\r
- PrepareLoading(nIdx);\r
- gbToc=false;\r
- loadData2(goChunk.sPPath+goChunk.sDPath+sSrc);\r
- }\r
- else\r
- {\r
- gbLData=false;\r
- checkFillStub();\r
- }\r
- }\r
-}\r
-\r
-function getProject(sSrc)\r
-{\r
- for(var i=0;i<gaProj.length;i++)\r
- if(isSamePath(getPath(sSrc),gaProj[i].sPPath))\r
- return i;\r
- return -1;\r
-}\r
-\r
-function getPath(sPath)\r
-{\r
- if(sPath!="")\r
- {\r
- sPath=_replaceSlash(sPath);\r
- var nPosFile=sPath.lastIndexOf("/");\r
- sPath=sPath.substring(0,nPosFile+1);\r
- }\r
- return sPath;\r
-}\r
-\r
-function isSamePath(sPath1,sPath2)\r
-{\r
- return (sPath1.toLowerCase()==sPath2.toLowerCase());\r
-}\r
-\r
-function PrepareLoading(nIdx)\r
-{\r
- gnInsIdx=nIdx;\r
- if(!gsTP)\r
- {\r
- var oObj=getElement(getPBId(gnInsIdx));\r
- if(oObj)\r
- oObj.insertAdjacentHTML("afterEnd",writeLoadingDiv(nIdx));\r
- }\r
-}\r
-\r
-function writeLoadingDiv(nIdx)\r
-{\r
- return"<div id=\""+gsLoadingDivID+"\" class=parent onclick=\"removeLoadingDiv();\" style=\"padding-left:4px;background-color:ivory;border-width:1;border-style:solid;border-color:black;width:150px;\">"+gsLoadingMsg+"</div>";\r
-}\r
-\r
-function getItemName(nIdx)\r
-{\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- return oChunk.aTocs[nIdx-oChunk.nMI].sItemName;\r
- else\r
- return null;\r
-}\r
-\r
-function getItemContentsNum(nIdx)\r
-{\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- return oChunk.aTocs[nIdx-oChunk.nMI].nContents;\r
- else\r
- return null;\r
-}\r
-\r
-function getItemType(nIdx)\r
-{\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- return oChunk.aTocs[nIdx-oChunk.nMI].nType;\r
- else\r
- return 0;\r
-}\r
-\r
-function getItemURL(nIdx)\r
-{\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- {\r
- var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sItemURL;\r
- if(!(sPath==null||sPath==""))\r
- {\r
- return _getFullPath(oChunk.sPPath,sPath);\r
- }\r
- }\r
- return "";\r
-}\r
-\r
-function getRefURL(nIdx)\r
-{\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- {\r
- var sPath=oChunk.aTocs[nIdx-oChunk.nMI].sRefURL;\r
- if(!(sPath==null||sPath==""))\r
- {\r
- return _getFullPath(oChunk.sPPath,sPath)\r
- }\r
- }\r
- return "";\r
-}\r
-\r
-function getTopicTarget(nIdx)\r
-{\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- {\r
- if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sTarget)!="undefined")\r
- return oChunk.aTocs[nIdx-oChunk.nMI].sTarget;\r
- }\r
- return "";\r
-}\r
-\r
-function getItemIcon(nIdx,nIconIdx)\r
-{\r
- var oChunk=getChunk(nIdx);\r
- if(oChunk)\r
- {\r
- if(typeof(oChunk.aTocs[nIdx-oChunk.nMI].sIconRef)!="undefined")\r
- {\r
- var sIconRef=oChunk.aTocs[nIdx-oChunk.nMI].sIconRef;\r
- var nIndex=sIconRef.indexOf(";");\r
- while(nIconIdx-->0&&nIndex!=-1)\r
- {\r
- sIconRef=sIconRef.substring(nIndex+1);\r
- nIndex=sIconRef.indexOf(";");\r
- }\r
- if(nIconIdx<0)\r
- {\r
- if(nIndex!=-1)\r
- sIconRef=sIconRef.substring(0,nIndex);\r
- return _getFullPath(oChunk.sPPath,sIconRef)\r
- }\r
- }\r
- }\r
- return "";\r
-}\r
-\r
-function TocWriteClassStyle()\r
-{\r
- var sStyle="<STYLE TYPE='text/css'>\n";\r
- if(gsBgImage)\r
- sStyle+="body {border-top:"+gsBgColor+" 1px solid;}\n";\r
- else\r
- sStyle+="body {border-top:black 1px solid;}\n";\r
- sStyle+="P {"+getFontStyle(goFont)+"margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";\r
- sStyle+="DIV {margin-top:"+gsMargin+";margin-bottom:"+gsMargin+";}\n";\r
- sStyle+=".parent {margin-left:0pt;}\n";\r
- sStyle+=".stub {margin-left:0pt;display:none}\n";\r
- sStyle+=".child {display:none;margin-left:"+gsIndent+";}\n";\r
- sStyle+="A:link {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:visited {"+getFontStyle(goFont)+"}\n";\r
- sStyle+="A:active {background-color:"+gsABgColor+";}\n";\r
- sStyle +="A:hover {"+getFontStyle(goHFont)+"}\n";\r
- sStyle+="</STYLE>";\r
- document.write(sStyle);\r
-}\r
-\r
-function TocWriteFixedWidth(bBegin,nWidth)\r
-{\r
- if((gbIE4)&&(gbMac)&&(!gbIE5)){\r
- if(bBegin)\r
- document.write("<table width="+nWidth+" border=0><tr><td>");\r
- else\r
- document.write("</td></tr></table>");\r
- }\r
-}\r
-\r
-function TocInitPage()\r
-{\r
- var tempColl=getItemsByBook(document.body);\r
- if(tempColl.length>0)\r
- tempColl[0].focus();\r
-}\r
-\r
-function getItemsFromObj(obj)\r
-{\r
- var aAnchor=new Array();\r
- var tempColl=getChildrenByTag(obj,"P");\r
- if(tempColl&&tempColl.length>0)\r
- {\r
- var anobr=new Array();\r
- for(var i=0;i<tempColl.length;i++)\r
- {\r
- var tempNobr=getChildrenByTag(tempColl[i],"NOBR");\r
- if(tempNobr&&tempNobr.length>0)\r
- for(var j=0;j<tempNobr.length;j++)\r
- anobr[anobr.length]=tempNobr[j];\r
- }\r
- for(var s=0;s<anobr.length;s++)\r
- {\r
- var tempAnchor=getChildrenByTag(anobr[s],"A");\r
- if(tempAnchor&&tempAnchor.length>0)\r
- for(var u=0;u<tempAnchor.length;u++)\r
- aAnchor[aAnchor.length]=tempAnchor[u];\r
- }\r
- }\r
- return aAnchor;\r
-}\r
-\r
-function getItemsByBook(obj)\r
-{\r
- var aAnchor=new Array();\r
- var aTAnchor=getItemsFromObj(obj);\r
- for(var i=0;i<aTAnchor.length;i++)\r
- aAnchor[aAnchor.length]=aTAnchor[i];\r
- var tempBook=getChildrenByTag(obj,"DIV");\r
- if(tempBook&&tempBook.length>0)\r
- for(var j=0;j<tempBook.length;j++)\r
- {\r
- var aTAnchorDiv=getItemsFromObj(tempBook[j]);\r
- for(var s=0;s<aTAnchorDiv.length;s++)\r
- aAnchor[aAnchor.length]=aTAnchorDiv[s];\r
- }\r
- return aAnchor;\r
-}\r
-\r
-function ExpandIt(nId)\r
-{\r
- if(!gsTP)\r
- ExpandIt2(nId,false);\r
-}\r
-\r
-function ExpandIt2(nId,bForceOpen)\r
-{\r
- var oC=TocExpand(nId,true,bForceOpen);\r
- var nNewScroll=document.body.scrollTop;\r
- if(oC.style.display=="block"){\r
- var nTop=oC.offsetTop;\r
- var nBottom=nTop+oC.offsetHeight;\r
- if(document.body.scrollTop+document.body.clientHeight<nBottom){\r
- nNewScroll=nBottom-document.body.clientHeight;\r
- }\r
- if(nBottom-nTop>document.body.clientHeight){\r
- nNewScroll=nTop-20;\r
- }\r
- }\r
- document.body.scrollTop=nNewScroll;\r
-}\r
-\r
-function TocExpand(nId,bChangeImg,bForceOpen)\r
-{\r
- var oDiv=getElement(getCBId(nId));\r
- if(oDiv==null) return null;\r
-\r
- var whichIm=document.images[getBId(nId)];\r
- if((oDiv.style.display!="block")||bForceOpen){\r
- oDiv.style.display="block";\r
- if(bChangeImg){\r
- var sPath=getPath(whichIm.src);\r
- sPath=_getFullPath(sPath,getBookImage(nId,false));\r
- whichIm.src=sPath; \r
- }\r
- }else{\r
- oDiv.style.display="none";\r
- if(bChangeImg){\r
- var sPath=getPath(whichIm.src);\r
- sPath=_getFullPath(sPath,getBookImage(nId,true));\r
- whichIm.src=sPath;\r
- }\r
- if(gbMac&&gbIE5){\r
- this.parent.document.getElementById("tocIFrame").style.width="101%";\r
- this.parent.document.getElementById("tocIFrame").style.width="100%";\r
- }\r
- }\r
- return oDiv;\r
-}\r
-\r
-function getChunkId(n)\r
-{\r
- var nCan=-1;\r
- for(var i=0;i<gaTocs.length;i++)\r
- if(gaTocs[i].nMI<=n&&gaTocs[i].nMI!=-1)\r
- {\r
- if(nCan==-1)\r
- nCan=i;\r
- else\r
- if(gaTocs[i].nMI>=gaTocs[nCan].nMI)\r
- nCan=i;\r
- }\r
- if(nCan!=-1)\r
- return nCan;\r
- else\r
- return -1;\r
-}\r
-\r
-function getChunk(n)\r
-{\r
- if(gnCC!=-1&&gaTocs[gnCC].nMI<=n&&(gnCC==gaTocs.length-1||\r
- gaTocs[gnCC+1].nMI>n))\r
- { \r
- return gaTocs[gnCC];\r
- }\r
- else{\r
- gnCC=getChunkId(n);\r
- if(gnCC!=-1)\r
- return gaTocs[gnCC];\r
- else\r
- return null;\r
- }\r
-}\r
-\r
-function getBookImage(nIdx,bClosed)\r
-{\r
- var nIdx=bClosed?0:1;\r
- var sIcon=getItemIcon(nIdx,nIdx);\r
- if(sIcon=="")\r
- if(bClosed)\r
- sIcon=giBookClose;\r
- else\r
- sIcon=giBookOpen;\r
- return _getFullPath(gaProj[0].sPPath,sIcon);\r
-}\r
-\r
-function getItemImage(nIdx,bRemote)\r
-{\r
- var sIcon=getItemIcon(nIdx,0);\r
- if(sIcon=="")\r
- if(bRemote)\r
- sIcon=giURLItem;\r
- else\r
- sIcon=giBookItem;\r
- return _getFullPath(gaProj[0].sPPath,sIcon);\r
-}\r
-\r
-function getInnerText2(obj)\r
-{\r
- var sText=getInnerText(obj);\r
- if(sText.length>0&&!gbOpera7)\r
- sText=sText.substring(1);\r
- return sText;\r
-}\r
-\r
-function expandToc(oObj,sRest,aIdList)\r
-{\r
- var len=aIdList.length;\r
- var nPos=sRest.indexOf(gsPathSplit);\r
- if(nPos!=-1)\r
- {\r
- sPart=sRest.substring(0,nPos);\r
- sRest=sRest.substring(nPos+1);\r
- }\r
- else\r
- {\r
- sPart=sRest;\r
- var aTagAs=getItemsByBook(oObj);\r
- for(var s=0;s<aTagAs.length;s++)\r
- {\r
- var sText=getInnerText2(aTagAs[s]);\r
- if(sText==sPart)\r
- {\r
- aIdList[len]=aTagAs[s];\r
- return 1;\r
- }\r
- }\r
- return 0;\r
- }\r
- \r
- var aChildren=getChildrenByTag(oObj,"DIV");\r
- for(var i=0;i<aChildren.length;i++)\r
- {\r
- var sPId=aChildren[i].id;\r
- if(!isPBId(sPId))\r
- continue;\r
- var sText=getInnerText2(aChildren[i]);\r
- if(sText!=sPart)\r
- continue;\r
- aIdList[len]=getIdByPBId(sPId);\r
- var sCId=getCBId(aIdList[len]);\r
- var oCObj=getElement(sCId);\r
- if(oCObj)\r
- {\r
- if(oCObj.innerHTML=="")\r
- {\r
- var obj=getItemsByBook(aChildren[i]);\r
- if(obj.length>0)\r
- {\r
- if(gbNav6)\r
- {\r
- var sCommand=obj[0].getAttribute("onClick");\r
- var nCommand=sCommand.indexOf(";");\r
- sCommand=sCommand.substring(0,nCommand);\r
- setTimeout(sCommand,1);\r
- }\r
- else\r
- obj[0].click();\r
- }\r
- return -1;\r
- }\r
- var nRet=expandToc(oCObj,sRest,aIdList);\r
- if(nRet)\r
- return nRet;\r
- }\r
- }\r
- aIdList.length=len;\r
- return 0;\r
-}\r
-\r
-function getIdByPBId(sPId)\r
-{\r
- return parseInt(sPId.substring(2,sPId.length-1));\r
-}\r
-\r
-function getIdByCBId(sCId)\r
-{\r
- return parseInt(sCId.substring(2,sCId.length-1));\r
-}\r
-\r
-function isPBId(sId)\r
-{\r
- return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("P")==sId.length-1);\r
-}\r
-\r
-function isCBId(sId)\r
-{\r
- return (sId&&sId.indexOf("B_")==0&&sId.lastIndexOf("C")==sId.length-1);\r
-}\r
-\r
-function getBId(nIdx)\r
-{\r
- return "B_"+nIdx;\r
-}\r
-\r
-function getPBId(nIdx)\r
-{\r
- return getBId(nIdx)+"P";\r
-}\r
-\r
-function getCBId(nIdx)\r
-{\r
- return getBId(nIdx)+"C";\r
-}\r
-\r
-function getClosestTocPath(aPaths)\r
-{\r
- var nMaxSimilarity=0;\r
- var nThatIndex=-1;\r
- var sPath=null;\r
- if(aPaths.length==0) return sPath;\r
- for(var i=0;i<aPaths.length;i++)\r
- {\r
- var nSimilarity=comparePath(gsCTPath,aPaths[i]);\r
- if(nSimilarity>nMaxSimilarity)\r
- {\r
- nMaxSimilarity=nSimilarity;\r
- nThatIndex=i;\r
- }\r
- }\r
- if(nThatIndex!=-1)\r
- sPath=aPaths[nThatIndex];\r
- else\r
- sPath=aPaths[0];\r
- return sPath;\r
-}\r
-\r
-function comparePath(sPath1,sPath2)\r
-{\r
- var nMaxSimilarity=0;\r
- var nStartPos1=0;\r
- var nPos1=-1;\r
- var nStartPos2=0;\r
- var nPos2=-1;\r
- do{\r
- var sCheck1=null;\r
- var sCheck2=null;\r
- nPos1=sPath1.indexOf(gsPathSplit,nStartPos1);\r
- if(nPos1!=-1)\r
- {\r
- sCheck1=sPath1.substring(nStartPos1,nPos1);\r
- nStartPos1=nPos1+1;\r
- }\r
- else\r
- {\r
- sCheck1=sPath1.substring(nStartPos1);\r
- nStartPos1=-1;\r
- }\r
- nPos2=sPath2.indexOf(gsPathSplit,nStartPos2);\r
- if(nPos1!=-1)\r
- {\r
- sCheck2=sPath2.substring(nStartPos2,nPos2);\r
- nStartPos2=nPos2+1;\r
- }\r
- else\r
- {\r
- sCheck2=sPath2.substring(nStartPos2);\r
- nStartPos2=-1;\r
- }\r
- if(sCheck1==sCheck2)\r
- nMaxSimilarity++;\r
- else\r
- break;\r
- }while(nStartPos1!=-1&&nStartPos2!=-1);\r
- return nMaxSimilarity;\r
-}\r
-\r
-function getTocPaths(oTopicParam)\r
-{\r
- var aRelTocPaths=oTopicParam.aPaths;\r
- var aPaths=new Array();\r
- for(var i=0;i<gaProj.length;i++)\r
- if(isSamePath(gaProj[i].sPPath,oTopicParam.sPPath))\r
- {\r
- for(var j=0;j<aRelTocPaths.length;j++)\r
- for (var k=0;k<gaRoot[i].aRPath.length;k++)\r
- {\r
- var sPath=gaRoot[i].aRPath[k]+aRelTocPaths[j];\r
- aPaths[aPaths.length]=sPath.substring(1);\r
- }\r
- break;\r
- }\r
- return aPaths;\r
-}\r
-\r
-function syncInit()\r
-{\r
- if(gsTP&&!gbNeedFillStub)\r
- {\r
- gInSync=true;\r
- var obj=document.body;\r
- var aIdList=new Array();\r
- var nRet=expandToc(obj,gsTP,aIdList);\r
- if(nRet!=-1)\r
- {\r
- if(nRet==1)\r
- {\r
- if(aIdList.length)\r
- for(var i=0;i<aIdList.length-1;i++)\r
- ExpandIt2(aIdList[i],true);\r
- gsCTPath=gsTP;\r
- if(!gbIE55)\r
- aIdList[aIdList.length-1].focus();\r
- else\r
- HighLightElement(aIdList[aIdList.length-1],gsABgColor,"transparent");\r
- }\r
- var aPaths=gaBTPs;\r
- gsTP=null;\r
- gaBTPs=null;\r
- if(aPaths!=null)\r
- {\r
- var sPath=getClosestTocPath(aPaths);\r
- if(sPath!=null)\r
- { \r
- gsTP=sPath; \r
- setTimeout("syncInit()",1);\r
- }\r
- }\r
- }\r
- gInSync=false;\r
- }\r
-}\r
-\r
-function loadToc()\r
-{\r
- if(!gbLoadToc)\r
- {\r
- var oResMsg=new whMessage(WH_MSG_GETPROJINFO,this,1,null);\r
- if(SendMessage(oResMsg)&&oResMsg.oParam)\r
- {\r
- gbLoadToc=true;\r
- var oProj=oResMsg.oParam;\r
- gaProj=oProj.aProj;\r
- gbXML=oProj.bXML;\r
- load1B1();\r
- }\r
- }\r
-}\r
-\r
-function load1B1()\r
-{\r
- if(gnLT+1<gaProj.length)\r
- for(var i=gnLT+1;i<gaProj.length;i++)\r
- if(gaProj[i].sToc)\r
- {\r
- gbToc=true;\r
- gnLT=i;\r
- setTimeout("loadTocInfo()",1);\r
- return true;\r
- }\r
- return false;\r
-}\r
-\r
-function loadTocInfo()\r
-{\r
- loadData2(gaProj[gnLT].sPPath+gaProj[gnLT].sDPath+gaProj[gnLT].sToc);\r
-}\r
-\r
-function loadData2(sFile)\r
-{\r
- if(gbXML)\r
- loadDataXML(sFile);\r
- else\r
- loadData(sFile);\r
-}\r
-\r
-function projReady(sRoot,aProj)\r
-{\r
- if(gaRoot.length<=gnLT||!gaRoot[gnLT])\r
- gaRoot[gnLT]=new Object();\r
- gaRoot[gnLT].sToc=sRoot;\r
- \r
- if(gnLT==0)\r
- {\r
- gaRoot[gnLT].aRPath=new Array();\r
- gaRoot[gnLT].aRPath[0]=gsPathSplit;\r
- }\r
-\r
- updatePTPath(gnLT,aProj);\r
-\r
- if(!((gnLT+1<gaProj.length)&&load1B1()))\r
- {\r
- gbReady=true;\r
- if(gbIE4)\r
- setTimeout("loadImages();",1);\r
- else\r
- setTimeout("loadTData();",1);\r
- }\r
-}\r
-\r
-function loadTData()\r
-{\r
- if(gaProj[0].sToc!="")\r
- {\r
- gbLData=true;\r
- goChunk=addTocChunk(gaProj[0].sPPath,gaProj[0].sDPath);\r
- gbToc=false;\r
- loadData2(gaProj[0].sPPath+gaProj[0].sDPath+gaRoot[0].sToc);\r
- }\r
-}\r
-\r
-function updatePTPath(n,aProj)\r
-{\r
- if(aProj)\r
- for(var i=0;i<aProj.length;i++)\r
- {\r
- var sFullPath=_getFullPath(gaProj[n].sPPath,aProj[i].sPPath);\r
- for(var j=0;j<gaProj.length;j++)\r
- if(isSamePath(sFullPath,gaProj[j].sPPath))\r
- {\r
- if(gaRoot.length<=j||!gaRoot[j])\r
- gaRoot[j]=new Object();\r
- if(!gaRoot[j].aRPath)\r
- gaRoot[j].aRPath=new Array();\r
-\r
- if(gaRoot[n].aRPath)\r
- for(var k=0;k<gaRoot[n].aRPath.length;k++)\r
- {\r
- var bDup=false;\r
- var sTFPath=gaRoot[n].aRPath[k]+aProj[i].sRPath;\r
- for(var l=0;l<gaRoot[j].aRPath.length;l++)\r
- if(gaRoot[j].aRPath[l]==sTFPath)\r
- {\r
- bDup=true;\r
- break;\r
- }\r
- if(!bDup)\r
- gaRoot[j].aRPath[gaRoot[j].aRPath.length]=sTFPath;\r
- }\r
- else\r
- gaRoot[j].aRPath[gaRoot[j].aRPath.length]=aProj[i].sRPath;\r
- break;\r
- }\r
- }\r
-}\r
-\r
-function onLoadXMLError()\r
-{\r
- if(gbToc)\r
- {\r
- var sRoot="";\r
- var aRProj=new Array();\r
- projReady(sRoot,aRProj);\r
- }\r
- else\r
- {\r
- var aToc=new Array();\r
- putData(aToc)\r
- }\r
-}\r
-\r
-function putDataXML(xmlDoc,sDocPath)\r
-{\r
- if(gbToc)\r
- {\r
- var tocNode=xmlDoc.getElementsByTagName("toc")[0];\r
- if(tocNode)\r
- {\r
- var sRoot=tocNode.getAttribute("root");\r
- var rmtProject=tocNode.getElementsByTagName("project");\r
- var aRProj=new Array();\r
- if(rmtProject.length>0)\r
- {\r
- for(var i=0;i<rmtProject.length;i++)\r
- {\r
- aRProj[i]=new Object();\r
- var sURL=rmtProject[i].getAttribute("url");\r
- if(sURL)\r
- {\r
- if(sURL.lastIndexOf("/")!=sURL.length-1)\r
- sURL+="/"; \r
- }\r
- aRProj[i].sPPath=sURL;\r
- aRProj[i].sRPath = "";\r
- var oSubPath = rmtProject[i].getElementsByTagName("subpath")[0];\r
- if (oSubPath)\r
- {\r
- while (oSubPath)\r
- {\r
- aRProj[i].sRPath += oSubPath.getAttribute("name") + "\n";\r
- oSubPath = oSubPath.getElementsByTagName("subpath")[0];\r
- }\r
- }\r
- else\r
- aRProj[i].sRPath=rmtProject[i].getAttribute("path");\r
- }\r
- }\r
- projReady(sRoot,aRProj);\r
- }\r
- }\r
- else\r
- {\r
- var chunkNode=xmlDoc.getElementsByTagName("tocdata")[0];\r
- if(chunkNode)\r
- {\r
- var aToc=new Array();\r
- processBook(chunkNode,aToc);\r
- putData(aToc);\r
- }\r
- }\r
-}\r
-\r
-function processBook(node,aToc)\r
-{\r
- var i=0;\r
- var entry=null;\r
- var prevEntry=null;\r
- var oChild=node.firstChild;\r
- do{\r
- if(oChild)\r
- {\r
- if(oChild.nodeName.indexOf("#")!=0)\r
- {\r
- var sName=oChild.getAttribute("name");\r
- var sURL=oChild.getAttribute("url");\r
- var sRef=oChild.getAttribute("ref");\r
- var sTarget=oChild.getAttribute("target");\r
- var sIcons=oChild.getAttribute("images");\r
- var item=new Object();\r
- item.sItemName=sName;\r
- if(sTarget)\r
- item.sTarget=sTarget;\r
- if(sIcons)\r
- item.sIconRef=sIcons;\r
- if(sURL==null) sURL="";\r
-\r
- item.sItemURL=sURL;\r
- \r
- if(oChild.nodeName=="book")\r
- {\r
- item.nType=1;\r
- aToc[aToc.length]=item;\r
- var nCurrPos=aToc.length;\r
- processBook(oChild,aToc);\r
- item.nContents=aToc.length-nCurrPos;\r
- }\r
- else if(oChild.nodeName=="item")\r
- {\r
- item.nType=2;\r
- item.nContents=0;\r
- aToc[aToc.length]=item;\r
- }\r
- else if(oChild.nodeName=="remoteitem")\r
- {\r
- item.nType=16;\r
- item.nContents=0;\r
- aToc[aToc.length]=item;\r
- }\r
- else if(oChild.nodeName=="project")\r
- {\r
- if(sRef)\r
- {\r
- if(sRef.lastIndexOf("/")!=sRef.length-1)\r
- sRef+="/"; \r
- }\r
- item.nType=4;\r
- item.sRefURL=sRef;\r
- item.nContents=0;\r
- aToc[aToc.length]=item;\r
- }\r
- else if(oChild.nodeName=="chunk")\r
- {\r
- item.nType=8;\r
- item.sRefURL=sRef;\r
- item.nContents=0;\r
- aToc[aToc.length]=item;\r
- }\r
- }\r
- }\r
- else\r
- break;\r
- oChild=oChild.nextSibling;\r
- }while(true);\r
-}\r
-\r
-function putData(aTocs)\r
-{\r
- gaTocsNs61Fix=aTocs;\r
- setTimeout("realPutData();",1);\r
-}\r
-\r
-function realPutData()\r
-{\r
- removeLoadingDiv();\r
- var aTocs=gaTocsNs61Fix;\r
- if(!aTocs) return;\r
- if(goChunk)\r
- {\r
- var n=gnMinIdx;\r
- goChunk.nMI=gnMinIdx;\r
- goChunk.aTocs=aTocs;\r
- gnMinIdx+=aTocs.length;\r
- if(gnInsIdx!=-1)\r
- {\r
- var oObj=getElement(getPBId(gnInsIdx));\r
- if(oObj)\r
- {\r
- oObj.insertAdjacentHTML("afterEnd",writeBookItems(n-1,aTocs.length));\r
- setTimeout("syncInit()",1);\r
- }\r
- }\r
- else{\r
- document.body.insertAdjacentHTML("beforeEnd",writeBookItems(n-1,aTocs.length));\r
- var oParam=new Object();\r
- oParam.oTocInfo=null;\r
- var oMsg=new whMessage(WH_MSG_GETTOCPATHS,this,1,oParam);\r
- if(SendMessage(oMsg))\r
- {\r
- if(oMsg.oParam.oTocInfo)\r
- syncWithPaths(oMsg.oParam.oTocInfo);\r
- }\r
- } \r
- }\r
- gbLData=false;\r
- checkFillStub();\r
-}\r
-\r
-function syncWithPaths(oTopicParam)\r
-{\r
- var aPaths=getTocPaths(oTopicParam);\r
- if(gsTP)\r
- gaBTPs=aPaths;\r
- else{\r
- var sPath=getClosestTocPath(aPaths);\r
- if(sPath!=null)\r
- {\r
- gsTP=sPath;\r
- setTimeout("syncInit()",1);\r
- }\r
- }\r
-}\r
-\r
-function window_OnLoad()\r
-{\r
- if(gsBgImage&&gsBgImage.length>0)\r
- {\r
- document.body.background=gsBgImage;\r
- }\r
- if(gsBgColor&&gsBgColor.length>0)\r
- {\r
- document.body.bgColor=gsBgColor;\r
- }\r
- loadToc();\r
- var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null)\r
- SendMessage(oMsg);\r
-}\r
-\r
-function loadImages()\r
-{\r
- if(giBookClose)\r
- {\r
- gaImgs[gnImages]=giBookClose;\r
- gnImages++;\r
- } \r
- if(giBookOpen)\r
- {\r
- gaImgs[gnImages]=giBookOpen;\r
- gnImages++;\r
- } \r
- if(giBookItem)\r
- {\r
- gaImgs[gnImages]=giBookItem;\r
- gnImages++;\r
- } \r
- if(giURLItem)\r
- {\r
- gaImgs[gnImages]=giURLItem;\r
- gnImages++;\r
- } \r
- if(giNewBookClose)\r
- {\r
- gaImgs[gnImages]=giNewBookClose;\r
- gnImages++;\r
- } \r
- if(giNewBookOpen)\r
- {\r
- gaImgs[gnImages]=giNewBookOpen;\r
- gnImages++;\r
- } \r
- if(giNewBookItem)\r
- {\r
- gaImgs[gnImages]=giNewBookItem;\r
- gnImages++;\r
- } \r
- if(giNewURLItem)\r
- {\r
- gaImgs[gnImages]=giNewURLItem;\r
- gnImages++;\r
- }\r
- if(gnImages>0)\r
- {\r
- setTimeout("loadDataAfter();",1000);\r
- loadImage(gaImgs[0]);\r
- }\r
- else\r
- loadDataAfter();\r
-}\r
-\r
-function loadImage(sURL)\r
-{\r
- var oImg=new Image();\r
- oImg.onload=checkImageLoading;\r
- oImg.onerror=errorImageLoading;\r
- oImg.src=_getFullPath(gaProj[0].sPPath,sURL);\r
-}\r
-\r
-function loadDataAfter()\r
-{\r
- if(!gbLoadData)\r
- {\r
- gbLoadData=true;\r
- loadTData();\r
- }\r
-}\r
-\r
-function errorImageLoading()\r
-{\r
- gnLoadedImages++;\r
- if(gnImages==gnLoadedImages)\r
- loadDataAfter();\r
- else\r
- loadImage(gaImgs[gnLoadedImages]); \r
-}\r
-\r
-function checkImageLoading()\r
-{\r
- gnLoadedImages++;\r
- if(gnImages==gnLoadedImages)\r
- loadDataAfter();\r
- else\r
- loadImage(gaImgs[gnLoadedImages]); \r
-}\r
-\r
-function window_unload()\r
-{\r
- UnRegisterListener2(this,WH_MSG_PROJECTREADY);\r
- UnRegisterListener2(this,WH_MSG_SYNCTOC);\r
- UnRegisterListener2(this,WH_MSG_SHOWTOC);\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- if(oMsg)\r
- {\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_PROJECTREADY)\r
- {\r
- loadToc();\r
- }\r
- else if(nMsgId==WH_MSG_SYNCTOC)\r
- {\r
- if(gbReady)\r
- {\r
- syncWithPaths(oMsg.oParam);\r
- }\r
- }\r
- else if(nMsgId==WH_MSG_SHOWTOC)\r
- {\r
- if(!gbNav6)\r
- document.body.focus();\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhVer&&window.gbWhMsg&&window.gbWhProxy)\r
-{\r
- RegisterListener2(this,WH_MSG_PROJECTREADY);\r
- RegisterListener2(this,WH_MSG_SYNCTOC);\r
- RegisterListener2(this,WH_MSG_SHOWTOC);\r
- goFont=new whFont("Verdana","8pt","#000000","normal","normal","none");\r
- goHFont=new whFont("Verdana","8pt","#007f00","normal","normal","underline");\r
-\r
- window.onload=window_OnLoad;\r
- window.onbeforeunload=window_BUnload;\r
- window.onunload=window_unload;\r
- gbWhTHost=true;\r
-}\r
-else\r
- document.location.reload();
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.005\r
-var gsPPath="";\r
-var gaPaths=new Array();\r
-var gaAvenues=new Array();\r
-\r
-var goFrame=null;\r
-var gsStartPage="";\r
-var gsRelCurPagePath="";\r
-var gsSearchFormHref="";\r
-var gnTopicOnly=-1;\r
-var gnOutmostTopic=-1;\r
-\r
-var BTN_TEXT=1;\r
-var BTN_IMG=2;\r
-\r
-var goSync=null;\r
-\r
-var goShow=null;\r
-var goHide=null;\r
-\r
-var goPrev=null;\r
-var goNext=null;\r
-var gnForm=0;\r
-var goShowNav=null;\r
-var goHideNav=null;\r
-\r
-var goWebSearch=null;\r
-\r
-var gsBtnStyle="";\r
-var gaButtons=new Array();\r
-var gaTypes=new Array();\r
-var whtopic_foldUnload=null;\r
-var gbWhTopic=false;\r
-var gbCheckSync=false;\r
-var gbSyncEnabled=false;\r
-\r
-function setButtonFont(sType,sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration)\r
-{\r
- var vFont=new whFont(sFontName,sFontSize,sFontColor,sFontStyle,sFontWeight,sFontDecoration);\r
- gsBtnStyle+=".whtbtn"+sType+"{"+getFontStyle(vFont)+"}";\r
-}\r
-\r
-function writeBtnStyle()\r
-{\r
- if(gaButtons.length>0)\r
- {\r
- if(gsBtnStyle.length>0)\r
- {\r
- var sStyle="<style type='text/css'>";\r
- sStyle+=gsBtnStyle+"</style>";\r
- document.write(sStyle);\r
- }\r
- }\r
-}\r
-\r
-function button(sText,nWidth,nHeight)\r
-{\r
- this.sText=sText;\r
- this.nWidth=nWidth;\r
- this.nHeight=nHeight;\r
- \r
- this.aImgs=new Array();\r
- var i=0;\r
- while(button.arguments.length>i+3)\r
- {\r
- this.aImgs[i]=button.arguments[3+i];\r
- i++;\r
- }\r
-}\r
-\r
-//project info\r
-function setRelStartPage(sPath)\r
-{\r
- if(gsPPath.length==0)\r
- {\r
- gsPPath=_getFullPath(_getPath(document.location.href),_getPath(sPath));\r
- gsStartPage=_getFullPath(_getPath(document.location.href),sPath);\r
- gsRelCurPagePath=_getRelativeFileName(gsStartPage,document.location.href);\r
- }\r
-}\r
-\r
-function getImage(oImage,sType)\r
-{\r
- var sImg="";\r
- if(oImage&&oImage.aImgs&&(oImage.aImgs.length>0))\r
- {\r
- sImg+="<img alt=\""+sType+"\" src=\""+oImage.aImgs[0]+"\"";\r
- if(oImage.nWidth>0)\r
- sImg+=" width="+oImage.nWidth;\r
- if(oImage.nHeight>0)\r
- sImg+=" height="+oImage.nHeight;\r
- sImg+=" border=0>";\r
- }\r
- return sImg;\r
-}\r
-\r
-function addTocInfo(sTocPath)\r
-{\r
- gaPaths[gaPaths.length]=sTocPath;\r
-}\r
-\r
-function addAvenueInfo(sName,sPrev,sNext)\r
-{\r
- gaAvenues[gaAvenues.length]=new avenueInfo(sName,sPrev,sNext); \r
-}\r
-\r
-function addButton(sType,nStyle,sText,sHref,sOnClick,sOnMouseOver,sOnLoad,nWidth,nHeight,sImg1,sImg2,sImg3)\r
-{\r
- var sButton="";\r
- var nBtn=gaButtons.length;\r
- if(sType=="prev")\r
- {\r
- if(canGo(false))\r
- {\r
- var sTitle="Previous Topic";\r
- goPrev=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnprev\" href=\"javascript:void(0);\" onclick=\"goAvenue(false);return false;\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goPrev.sText;\r
- else\r
- sButton+=getImage(goPrev,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="next")\r
- {\r
- if(canGo(true))\r
- {\r
- var sTitle="Next Topic";\r
- goNext=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnnext\" href=\"javascript:void(0);\" onclick=\"goAvenue(true);return false;\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goNext.sText;\r
- else\r
- sButton+=getImage(goNext,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="show")\r
- {\r
- if(isTopicOnly()&&(!gbOpera6||gbOpera7))\r
- {\r
- var sTitle="Show Navigation Component";\r
- goShow=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnshow\" href=\"javascript:void(0);\" onclick=\"show();return false;\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goShow.sText;\r
- else\r
- sButton+=getImage(goShow,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="hide")\r
- {\r
- if(!isTopicOnly()&&!gbOpera6)\r
- {\r
- var sTitle="Hide Navigation Component";\r
- goHide=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnhide\" href=\"javascript:void(0);\" onclick=\"hide();return false;\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goHide.sText;\r
- else\r
- sButton+=getImage(goHide,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="shownav")\r
- {\r
- if(isShowHideEnable())\r
- {\r
- var sTitle="Show Navigation Component";\r
- goShowNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnshownav\" href=\"javascript:void(0);\" onclick=\"showHidePane(true);return false;\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goShowNav.sText;\r
- else\r
- sButton+=getImage(goShowNav,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="hidenav")\r
- {\r
- if(isShowHideEnable())\r
- {\r
- var sTitle="Hide Navigation Component";\r
- goHideNav=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnhidenav\" href=\"javascript:void(0);\" onclick=\"showHidePane(false);return false;\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goHideNav.sText;\r
- else\r
- sButton+=getImage(goHideNav,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="synctoc")\r
- {\r
- if(gaPaths.length>0)\r
- {\r
- var sTitle="Sync TOC";\r
- goSync=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnsynctoc\" href=\"javascript:void(0);\" onclick=\"syncWithShow();return false;\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goSync.sText;\r
- else\r
- sButton+=getImage(goSync,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="websearch")\r
- {\r
- if(gsSearchFormHref.length>0)\r
- {\r
- var sTitle="WebSearch";\r
- goWebSearch=new button(sText,nWidth,nHeight,sImg1,sImg2,sImg3);\r
- sButton="<a title=\""+sTitle+"\" class=\"whtbtnwebsearch\" href=\""+gsSearchFormHref+"\">";\r
- if(nStyle==BTN_TEXT)\r
- sButton+=goWebSearch.sText;\r
- else\r
- sButton+=getImage(goWebSearch,sTitle);\r
- sButton+="</a>";\r
- }\r
- }\r
- else if(sType=="searchform")\r
- {\r
- gaButtons[nBtn]="NeedSearchForm";\r
- gaTypes[nBtn]=sType;\r
- }\r
- if(sButton.length!=0)\r
- {\r
- if(nStyle==BTN_TEXT)\r
- sButton+=" ";\r
- gaButtons[nBtn]="<td>"+sButton+"</td>";\r
- gaTypes[nBtn]=sType;\r
- }\r
-}\r
-\r
-function isSyncEnabled()\r
-{\r
- if(!gbCheckSync)\r
- {\r
- var oMsg=new whMessage(WH_MSG_ISSYNCSSUPPORT,this,1,null);\r
- if(SendMessage(oMsg))\r
- {\r
- gbSyncEnabled=oMsg.oParam;\r
- }\r
- gbCheckSync=true;\r
- }\r
- return gbSyncEnabled;\r
-}\r
-\r
-function isInPopup()\r
-{\r
- return (window.name.indexOf("BSSCPopup")!=-1);\r
-}\r
-\r
-function getIntopicBar(sAlign)\r
-{\r
- var sHTML="";\r
- if(gaButtons.length>0)\r
- {\r
- sHTML+="<div align="+sAlign+">";\r
-\r
- sHTML+="<table cellpadding=\"2\" cellspacing=\"0\" border=\"0\"><tr>";\r
- for(var i=0;i<gaButtons.length;i++)\r
- {\r
- if(gaTypes[i]!="synctoc"||isSyncEnabled())\r
- {\r
- if(gaButtons[i]=="NeedSearchForm")\r
- sHTML+=getSearchFormHTML();\r
- else\r
- sHTML+=gaButtons[i];\r
- }\r
- }\r
- sHTML+="</tr></table>";\r
-\r
- sHTML+="</div>";\r
- }\r
- return sHTML;\r
-}\r
-\r
-\r
-function writeIntopicBar(nAligns)\r
-{\r
- if(isInPopup()) return;\r
- if(gaButtons.length>0)\r
- {\r
- var sHTML="";\r
- if(nAligns!=0)\r
- {\r
- sHTML+="<table width=100%><tr>"\r
- if(nAligns&1)\r
- sHTML+="<td width=33%>"+getIntopicBar("left")+"</td>";\r
- if(nAligns&2)\r
- sHTML+="<td width=34%>"+getIntopicBar("center")+"</td>";\r
- if(nAligns&4)\r
- sHTML+="<td width=33%>"+getIntopicBar("right")+"</td>";\r
- sHTML+="</tr></table>";\r
- document.write(sHTML);\r
- }\r
- }\r
-}\r
-\r
-function sendAveInfoOut()\r
-{\r
- if(!isInPopup())\r
- setTimeout("sendAveInfo();",100);\r
-}\r
-\r
-function sendAveInfo()\r
-{\r
- var oMsg=new whMessage(WH_MSG_AVENUEINFO,this,1,gaAvenues);\r
- SendMessage(oMsg);\r
-}\r
-\r
-\r
-function onNext()\r
-{\r
- var oMsg=new whMessage(WH_MSG_NEXT,this,1,null);\r
- SendMessage(oMsg);\r
-}\r
-\r
-function onPrev()\r
-{\r
- var oMsg=new whMessage(WH_MSG_PREV,this,1,null);\r
- SendMessage(oMsg);\r
-}\r
-\r
-function createSyncInfo()\r
-{\r
- var oParam=new Object();\r
- if(gsPPath.length==0)\r
- gsPPath=_getPath(document.location.href);\r
- oParam.sPPath=gsPPath;\r
- oParam.sTPath=document.location.href;\r
- oParam.aPaths=gaPaths;\r
- return oParam;\r
-}\r
-\r
-function syncWithShow()\r
-{\r
- if(isTopicOnly())\r
- show();\r
- else\r
- {\r
- sync();\r
- showTocPane();\r
- }\r
-}\r
-\r
-function showTocPane()\r
-{\r
- var oMsg=new whMessage(WH_MSG_SHOWTOC,this,1,null);\r
- SendMessage(oMsg);\r
-}\r
-\r
-function sendSyncInfo()\r
-{\r
- if(!isInPopup())\r
- {\r
- var oParam=null;\r
- if(gaPaths.length>0)\r
- {\r
- oParam=createSyncInfo();\r
- }\r
- var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,oParam);\r
- SendMessage(oMsg);\r
- }\r
-}\r
-\r
-function sendInvalidSyncInfo()\r
-{\r
- if(!isInPopup())\r
- {\r
- var oMsg=new whMessage(WH_MSG_SYNCINFO,this,1,null);\r
- SendMessage(oMsg);\r
- }\r
-}\r
-\r
-function enableWebSearch(bEnable)\r
-{\r
- if(!isInPopup())\r
- {\r
- var oMsg=new whMessage(WH_MSG_ENABLEWEBSEARCH,this,1,bEnable);\r
- SendMessage(oMsg);\r
- }\r
-}\r
-\r
-function autoSync(nSync)\r
-{\r
- if(nSync==0) return;\r
- if(isInPopup()) return;\r
- if(isOutMostTopic())\r
- sync();\r
-}\r
-\r
-function isOutMostTopic()\r
-{\r
- if(gnOutmostTopic==-1)\r
- {\r
- var oMessage=new whMessage(WH_MSG_ISINFRAMESET,this,1,null);\r
- if(SendMessage(oMessage))\r
- gnOutmostTopic=0;\r
- else\r
- gnOutmostTopic=1;\r
- }\r
- return (gnOutmostTopic==1);\r
-}\r
-\r
-function sync()\r
-{\r
- if(gaPaths.length>0)\r
- {\r
- var oParam=createSyncInfo();\r
- var oMessage=new whMessage(WH_MSG_SYNCTOC,this,1,oParam);\r
- SendMessage(oMessage);\r
- }\r
-}\r
-\r
-\r
-function avenueInfo(sName,sPrev,sNext)\r
-{\r
- this.sName=sName;\r
- this.sPrev=sPrev;\r
- this.sNext=sNext;\r
-}\r
-\r
-function getCurrentAvenue()\r
-{\r
- var oParam=new Object();\r
- oParam.sAvenue=null;\r
- var oMessage=new whMessage(WH_MSG_GETCURRENTAVENUE,this,1,oParam);\r
- SendMessage(oMessage);\r
- return oParam.sAvenue;\r
-}\r
-\r
-function unRegisterListener()\r
-{\r
- sendInvalidSyncInfo();\r
- enableWebSearch(false);\r
- if(whtopic_foldUnload)\r
- whtopic_foldUnload();\r
-}\r
-\r
-function onSendMessage(oMsg)\r
-{\r
- var nMsgId=oMsg.nMessageId;\r
- if(nMsgId==WH_MSG_GETAVIAVENUES)\r
- {\r
- oMsg.oParam.aAvenues=gaAvenues;\r
- return false;\r
- }\r
- else if(nMsgId==WH_MSG_GETTOCPATHS)\r
- {\r
- if(isOutMostTopic())\r
- {\r
- oMsg.oParam.oTocInfo=createSyncInfo();\r
- return false; \r
- }\r
- else\r
- return true;\r
- }\r
- else if(nMsgId==WH_MSG_NEXT)\r
- {\r
- goAvenue(true);\r
- }\r
- else if(nMsgId==WH_MSG_PREV)\r
- {\r
- goAvenue(false);\r
- }\r
- else if(nMsgId==WH_MSG_WEBSEARCH)\r
- {\r
- websearch();\r
- }\r
- return true;\r
-}\r
-\r
-function goAvenue(bNext)\r
-{\r
- var sTopic=null;\r
- var sAvenue=getCurrentAvenue();\r
- var nAvenue=-1;\r
- if(sAvenue!=null&&sAvenue!="")\r
- {\r
- for(var i=0;i<gaAvenues.length;i++)\r
- {\r
- if(gaAvenues[i].sName==sAvenue)\r
- {\r
- nAvenue=i;\r
- break;\r
- }\r
- }\r
- if(nAvenue!=-1)\r
- {\r
- if(bNext)\r
- sTopic=gaAvenues[nAvenue].sNext;\r
- else\r
- sTopic=gaAvenues[nAvenue].sPrev;\r
- }\r
- }\r
- else\r
- {\r
- for(var i=0;i<gaAvenues.length;i++)\r
- {\r
- if(gaAvenues[i].sNext!=null&&gaAvenues[i].sNext.length>0&&bNext)\r
- {\r
- sTopic=gaAvenues[i].sNext;\r
- break;\r
- }\r
- else if(gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext)\r
- {\r
- sTopic=gaAvenues[i].sPrev;\r
- break;\r
- }\r
- }\r
- }\r
- \r
- if(sTopic!=null&&sTopic!="")\r
- {\r
- if(gsPPath!=null&&gsPPath!="")\r
- {\r
- sFullTopicPath=_getFullPath(gsPPath,sTopic);\r
- document.location=sFullTopicPath;\r
- }\r
- }\r
-}\r
-\r
-function canGo(bNext)\r
-{\r
- for(var i=0;i<gaAvenues.length;i++)\r
- {\r
- if((gaAvenues[i].sNext!=null&&gaAvenues[i].sNext.length>0&&bNext)||\r
- (gaAvenues[i].sPrev!=null&&gaAvenues[i].sPrev.length>0&&!bNext))\r
- return true;\r
- }\r
- return false;\r
-}\r
-\r
-function show()\r
-{\r
- if(gsStartPage!="")\r
- window.location=gsStartPage+"#"+gsRelCurPagePath;\r
-}\r
-\r
-function hide()\r
-{\r
- if(goFrame!=null)\r
- {\r
- goFrame.location=window.location;\r
- }\r
-}\r
-\r
-function isTopicOnly()\r
-{\r
- if(gnTopicOnly==-1)\r
- {\r
- var oParam=new Object();\r
- oParam.oFrame=null;\r
- var oMsg=new whMessage(WH_MSG_GETSTARTFRAME,this,1,oParam);\r
- if(SendMessage(oMsg))\r
- {\r
- goFrame=oParam.oFrame;\r
- gnTopicOnly=0;\r
- }\r
- else\r
- gnTopicOnly=1;\r
- }\r
- if(gnTopicOnly==1)\r
- return true;\r
- else\r
- return false;\r
-}\r
-\r
-function websearch()\r
-{\r
- if(gbNav4)\r
- {\r
- if(document.ehelpform)\r
- document.ehelpform.submit();\r
- }\r
- else\r
- {\r
- if(window.ehelpform)\r
- window.ehelpform.submit();\r
- }\r
-}\r
-\r
-function addSearchFormHref(sHref)\r
-{\r
- gsSearchFormHref=sHref;\r
- enableWebSearch(true);\r
-}\r
-\r
-function searchB(nForm)\r
-{\r
- var sValue=eval("document.searchForm"+nForm+".searchString.value");\r
- var oMsg=new whMessage(WH_MSG_SEARCHTHIS,this,1,sValue);\r
- SendMessage(oMsg);\r
-}\r
-\r
-function getSearchFormHTML()\r
-{\r
- var sHTML="";\r
- gnForm++;\r
- var sFormName="searchForm"+gnForm;\r
- var sButton="<form name=\""+sFormName+"\" method=\"POST\" action=\"javascript:searchB("+gnForm+")\">"\r
- sButton+="<input type=\"text\" name=\"searchString\" value=\"- Full Text search -\" size=\"20\"/>";\r
- if(""=="text")\r
- {\r
- sButton+="<a class=\"searchbtn\" href=\"javascript:void(0);\" onclick=\""+sFormName+".submit();return false;\"></a>";\r
- }\r
- else if(""=="image")\r
- {\r
- sButton+="<a class=\"searchbtn\" href=\"javascript:void(0);\" onclick=\""+sFormName+".submit();return false;\">"\r
- sButton+="<img src=\"\" border=0></a>";\r
- }\r
- sButton+="</form>";\r
- sHTML="<td align=\"center\">"+sButton+"</td>";\r
- return sHTML;\r
-}\r
-\r
-function showHidePane(bShow)\r
-{\r
- var oMsg=null;\r
- if(bShow)\r
- oMsg=new whMessage(WH_MSG_SHOWPANE,this,1,null);\r
- else\r
- oMsg=new whMessage(WH_MSG_HIDEPANE,this,1,null);\r
- SendMessage(oMsg);\r
-}\r
-\r
-function isShowHideEnable()\r
-{\r
- if(gbIE4)\r
- return true;\r
- else\r
- return false;\r
-}\r
-\r
-\r
-function PickupDialog_Invoke()\r
-{\r
- if(!gbIE4||gbMac)\r
- {\r
- if(typeof(_PopupMenu_Invoke)=="function")\r
- return _PopupMenu_Invoke(PickupDialog_Invoke.arguments);\r
- }\r
- else\r
- {\r
- if(PickupDialog_Invoke.arguments.length>2)\r
- {\r
- var sPickup="whskin_pickup.htm";\r
- var sPickupPath=gsPPath+sPickup;\r
- if(gbIE4)\r
- {\r
- var sFrame=PickupDialog_Invoke.arguments[1];\r
- var aTopics=new Array();\r
- for(var i=2;i<PickupDialog_Invoke.arguments.length;i+=2)\r
- {\r
- var j=aTopics.length;\r
- aTopics[j]=new Object();\r
- aTopics[j].m_sName=PickupDialog_Invoke.arguments[i];\r
- aTopics[j].m_sURL=PickupDialog_Invoke.arguments[i+1];\r
- }\r
-\r
- if(aTopics.length>1)\r
- {\r
- var nWidth=300;\r
- var nHeight=180;\r
- var nScreenWidth=screen.width;\r
- var nScreenHeight=screen.height;\r
- var nLeft=(nScreenWidth-nWidth)/2;\r
- var nTop=(nScreenHeight-nHeight)/2;\r
- if(gbIE4)\r
- {\r
- var vRet=window.showModalDialog(sPickupPath,aTopics,"dialogHeight:"+nHeight+"px;dialogWidth:"+nWidth+"px;resizable:yes;status:no;scroll:no;help:no;center:yes;");\r
- if(vRet)\r
- {\r
- var sURL=vRet.m_url;\r
- if(sFrame)\r
- window.open(sURL,sFrame);\r
- else\r
- window.open(sURL,"_self");\r
- }\r
- }\r
- }\r
- else if(aTopics.length==1)\r
- {\r
- var sURL=aTopics[0].m_sURL\r
- if(sFrame)\r
- window.open(sURL,sFrame);\r
- else\r
- window.open(sURL,"_self");\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-if(window.gbWhUtil&&window.gbWhMsg&&window.gbWhVer&&window.gbWhProxy)\r
-{\r
- RegisterListener("bsscright",WH_MSG_GETAVIAVENUES);\r
- RegisterListener("bsscright",WH_MSG_GETTOCPATHS);\r
- RegisterListener("bsscright",WH_MSG_NEXT);\r
- RegisterListener("bsscright",WH_MSG_PREV);\r
- RegisterListener("bsscright",WH_MSG_WEBSEARCH);\r
- if(gbMac&&gbIE4)\r
- {\r
- if(typeof(window.onunload)!="unknown")\r
- if(window.onunload.toString!=unRegisterListener.toString)\r
- whtopic_foldUnload=window.onunload;\r
- }\r
- else\r
- {\r
- if(window.onunload)\r
- if(window.onunload.toString!=unRegisterListener.toString)\r
- whtopic_foldUnload=window.onunload;\r
- }\r
- window.onunload=unRegisterListener;\r
- setButtonFont("show","","","","","","");\r
-setButtonFont("hide","","","","","","");\r
-\r
- gbWhTopic=true;\r
-}\r
-else\r
- document.location.reload();
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.004\r
-var gsFileName="";\r
-var gsDivName="";\r
-var xmlDoc=null;\r
-var sdocPath=null;\r
-var gsInsertBeforeEndHTML="";\r
-var sReplaceStringsSrc=new Array();\r
-var gsDivName="dataDiv";\r
-var gnLoadDivNum=0;\r
-sReplaceStringsSrc[0]="&";\r
-sReplaceStringsSrc[1]=">";\r
-sReplaceStringsSrc[2]="<";\r
-sReplaceStringsSrc[3]=""";\r
-sReplaceStringsSrc[4]=String.fromCharCode(8364);\r
-sReplaceStringsSrc[5]=" ";\r
-\r
-var sReplaceStringsDst=new Array();\r
-sReplaceStringsDst[0]="&";\r
-sReplaceStringsDst[1]=">";\r
-sReplaceStringsDst[2]="<";\r
-sReplaceStringsDst[3]="\"";\r
-sReplaceStringsDst[4]=String.fromCharCode(128);\r
-sReplaceStringsDst[5]=" ";\r
-var goHighLighted=null;\r
-\r
-function _getRelativePath(strParentPath,strCurrentPath)\r
-{\r
- if(_isAbsPath(strCurrentPath)) return _getPath(strCurrentPath);\r
- strParentPath=_replaceSlash(strParentPath);\r
- strParentPath=_getPath(strParentPath);\r
- strCurrentPath=_replaceSlash(strCurrentPath);\r
- strCurrentPath=_getPath(strCurrentPath);\r
- for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)\r
- {\r
- if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))\r
- break;\r
- }\r
- \r
- strParentPath=strParentPath.substring(i);\r
- strCurrentPath=strCurrentPath.substring(i); \r
- \r
- var nPathPos=0;\r
- while(nPathPos!=-1)\r
- {\r
- nPathPos=strParentPath.indexOf("/");\r
- if(nPathPos!=-1)\r
- {\r
- strParentPath=strParentPath.substring(nPathPos+1);\r
- strCurrentPath="../"+strCurrentPath;\r
- }\r
- }\r
- return strCurrentPath;\r
-}\r
-\r
-function _getRelativeFileName(strParentPath,strCurrentPath)\r
-{\r
- strParentPath=_replaceSlash(strParentPath);\r
- strParentPath=_getPath(strParentPath);\r
- strCurrentPath=_replaceSlash(strCurrentPath);\r
- for(var i=0;i<strParentPath.length&&i<strCurrentPath.length;i++)\r
- {\r
- if(strParentPath.charAt(i)!=strCurrentPath.charAt(i))\r
- break;\r
- }\r
- \r
- strParentPath=strParentPath.substring(i);\r
- strCurrentPath=strCurrentPath.substring(i); \r
- \r
- var nPathPos=0;\r
- while(nPathPos!=-1)\r
- {\r
- nPathPos=strParentPath.indexOf("/");\r
- if(nPathPos!=-1)\r
- {\r
- strParentPath=strParentPath.substring(nPathPos+1);\r
- strCurrentPath="../"+strCurrentPath;\r
- }\r
- }\r
- return strCurrentPath;\r
-}\r
-\r
-function _isAbsPathToHost(sPath)\r
-{\r
- return (sPath.indexOf("/")==0);\r
-}\r
-\r
-function _getHost(sPath)\r
-{\r
- var nPos=sPath.indexOf("//");\r
- if(nPos>0)\r
- {\r
- var nPosx=sPath.indexOf("/",nPos+2);\r
- if(nPosx>0)\r
- return sPath.substring(0,nPosx);\r
- else\r
- return sPath;\r
- }\r
- return sPath;\r
-}\r
-\r
-function _getFullPath(sPath,sRelPath)\r
-{\r
- if(_isAbsPath(sRelPath))\r
- return sRelPath;\r
- else if(_isAbsPathToHost(sRelPath))\r
- return _getHost(sPath)+sRelPath;\r
- else\r
- {\r
- var sFullPath=sPath;\r
- var nPathPos=0;\r
- while(nPathPos!=-1)\r
- {\r
- var nPathPos=sRelPath.indexOf("../");\r
- if(nPathPos!=-1)\r
- {\r
- sRelPath=sRelPath.substring(nPathPos+3);\r
- sFullPath=sFullPath.substring(0,sFullPath.length-1);\r
- var nPos2=sFullPath.lastIndexOf("/");\r
- if(nPos2!=-1)\r
- sFullPath=sFullPath.substring(0,nPos2+1);\r
- else\r
- break;\r
- }\r
- }\r
- sFullPath+=sRelPath;\r
- return sFullPath;\r
- } \r
-}\r
-\r
-function _isAbsPath(strPath)\r
-{\r
- var strUpper=strPath.toUpperCase();\r
- return (strUpper.indexOf(":")!=-1||strUpper.indexOf("\\\\")==0);\r
-}\r
-\r
-function _replaceSlash(strURL)\r
-{ \r
- var re=new RegExp("\\\\","g");\r
- var strReplacedURL=strURL.replace(re,"/");\r
- return strReplacedURL;\r
-}\r
-\r
-function _getPath(strURL)\r
-{\r
- pathpos=strURL.lastIndexOf("/");\r
- if(pathpos>0)\r
- return strURL.substring(0,pathpos+1);\r
- else\r
- return "";\r
-}\r
-\r
-function removeItemFromArray(oArray,i)\r
-{\r
- if(oArray.length&&i>=0&&i<oArray.length)\r
- {\r
- var len=oArray.length;\r
- for(var s=i;s<len-1;s++)\r
- oArray[s]=oArray[s+1];\r
- oArray.length=len-1;\r
- }\r
-}\r
-\r
-function insertItemIntoArray(oArray,i,obj)\r
-{\r
- if(oArray.length&&i>=0&&i<=oArray.length)\r
- {\r
- var len=oArray.length;\r
- for(var s=len;s>i;s--)\r
- oArray[s]=oArray[s-1];\r
- oArray[i]=obj; \r
- }\r
-}\r
-\r
-function loadData(sFileName)\r
-{\r
- var i=gnLoadDivNum;\r
- var sName=gsDivName+gnLoadDivNum++;\r
- loadData_2(sFileName,sName);\r
-}\r
-\r
-function loadData_2(sFileName,sDivName)\r
-{\r
- if(!getElement(sDivName))\r
- {\r
- if(!insertDataDiv(sDivName))\r
- {\r
- gsFileName=sFileName;\r
- gsDivName=sDivName;\r
- return;\r
- }\r
- }\r
- var sHTML="";\r
- if(gbMac)\r
- sHTML+="<iframe src=\""+sFileName+"\"></iframe>";\r
- else\r
- sHTML+="<iframe style=\"visibility:hidden;width:0;height:0\" src=\""+sFileName+"\"></iframe>";\r
- \r
- var oDivCon=getElement(sDivName);\r
- if(oDivCon)\r
- {\r
- if(gbNav6)\r
- {\r
- if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0)\r
- {\r
- oDivCon.getElementsByTagName("iFrame")[0].src=sFileName;\r
- }\r
- else\r
- oDivCon.innerHTML=sHTML;\r
- }\r
- else\r
- oDivCon.innerHTML=sHTML;\r
- }\r
-}\r
-\r
-function loadDataXML(sFileName)\r
-{\r
- var sCurrentDocPath=_getPath(document.location.href);\r
- sdocPath=_getFullPath(sCurrentDocPath,sFileName);\r
- if(gbIE5)\r
- {\r
- xmlDoc=new ActiveXObject("Microsoft.XMLDOM");\r
- xmlDoc.async=true;\r
- xmlDoc.onreadystatechange=checkState;\r
- if(document.body!=null)\r
- xmlDoc.load(sdocPath);\r
- }\r
- else if(gbNav6)\r
- {\r
- xmlDoc=document.implementation.createDocument("","",null);\r
- xmlDoc.addEventListener("load",initializeData,false);\r
- xmlDoc.load(sdocPath,"text/xml");\r
- }\r
-}\r
-\r
-function initializeData()\r
-{\r
- if(xmlDoc!=null)\r
- putDataXML(xmlDoc,sdocPath);\r
-}\r
-\r
-function checkState()\r
-{\r
- if(xmlDoc!=null)\r
- {\r
- var state=xmlDoc.readyState;\r
- if(state==4)\r
- {\r
- var err=xmlDoc.parseError;\r
- if(err.errorCode==0)\r
- putDataXML(xmlDoc,sdocPath);\r
- else\r
- onLoadXMLError();\r
- }\r
- }\r
-}\r
-\r
-function insertDataDiv(sName)\r
-{\r
- var sHTML="";\r
- if(gbMac)\r
- sHTML+="<div id="+sName+" style=\"display:none;\"></div>";\r
- else\r
- sHTML+="<div id="+sName+" style=\"visibility:hidden\"></div>";\r
- if((gbIE5||gbNav6)&&document.body)\r
- document.body.insertAdjacentHTML("beforeEnd",sHTML);\r
- else\r
- {\r
- gsInsertBeforeEndHTML=sHTML;\r
- setTimeout("insertWhenBodyReady();",100);\r
- return false;\r
- }\r
- return true;\r
-}\r
-\r
-function insertWhenBodyReady()\r
-{\r
- if(gsInsertBeforeEndHTML=="") return;\r
- if(document.body)\r
- {\r
- document.body.insertAdjacentHTML("beforeEnd",gsInsertBeforeEndHTML);\r
- gsInsertBeforeEndHTML="";\r
- loadData_2(gsFileName,gsDivName);\r
- }\r
- else\r
- {\r
- setTimeout("insertWhenBodyReady();",100);\r
- }\r
-}\r
-\r
-function window_BUnload()\r
-{\r
- for(var i=0;i<gnLoadDivNum;i++)\r
- {\r
- var oDivCon=getElement(gsDivName+i);\r
- if(oDivCon)\r
- oDivCon.innerHTML="";\r
- }\r
-}\r
-\r
-function removeThis(obj)\r
-{\r
- if(obj.parentNode)\r
- obj.parentNode.removeChild(obj);\r
- else\r
- obj.outerHTML="";\r
-}\r
-\r
-function getParentNode(obj)\r
-{\r
- if(obj.parentNode)\r
- return obj.parentNode;\r
- else if(obj.parentElement)\r
- return obj.parentElement;\r
- return null;\r
-}\r
-\r
-function getElement(sID)\r
-{\r
- if(document.getElementById)\r
- return document.getElementById(sID);\r
- else if(document.all)\r
- return document.all(sID);\r
- return null;\r
-}\r
-\r
-function getChildrenByTag(obj,sTagName)\r
-{\r
- if(obj.getElementsByTagName)\r
- {\r
- var aChildren=new Array();\r
- var aElements=getElementsByTag(obj,sTagName);\r
- if(aElements!=null)\r
- {\r
- for(var i=0;i<aElements.length;i++)\r
- {\r
- if(aElements[i].parentNode==obj)\r
- aChildren[aChildren.length]=aElements[i];\r
- }\r
- return aChildren;\r
- }\r
- else\r
- return new Array();\r
- }\r
- else if(obj.children)\r
- return obj.children.tags(sTagName);\r
-}\r
-\r
-function getElementsByTag(obj,sTagName)\r
-{\r
- if(obj.getElementsByTagName)\r
- return obj.getElementsByTagName(sTagName);\r
- else if(obj.all)\r
- return obj.all.tags(sTagName);\r
- return null;\r
-}\r
-\r
-function _htmlToText(sHTML)\r
-{\r
- if(sHTML==null) return null;\r
- var sText=sHTML;\r
- for(var i=0;i<sReplaceStringsSrc.length;i++)\r
- {\r
- var re=new RegExp(sReplaceStringsSrc[i],"g");\r
- sText=sText.replace(re,sReplaceStringsDst[i]);\r
- } \r
- return sText;\r
-}\r
-\r
-function _textToHtml_nonbsp(sText)\r
-{\r
- if(sText==null) return null;\r
- var sHTML=sText;\r
- for(var i=0;i<sReplaceStringsSrc.length-1;i++)\r
- {\r
- var re=new RegExp(sReplaceStringsDst[i],"g");\r
- sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);\r
- } \r
- return sHTML;\r
-}\r
-\r
-function _textToHtml(sText)\r
-{\r
- if(sText==null) return null;\r
- var sHTML=sText;\r
- for(var i=0;i<sReplaceStringsSrc.length;i++)\r
- {\r
- var re=new RegExp(sReplaceStringsDst[i],"g");\r
- sHTML=sHTML.replace(re,sReplaceStringsSrc[i]);\r
- } \r
- return sHTML;\r
-}\r
-\r
-\r
-function getInnerText(obj)\r
-{\r
- var renbsp2sp=new RegExp("\xa0","g");\r
- if(obj.innerText)\r
- {\r
- var sText=obj.innerText;\r
- sText=sText.replace(renbsp2sp," ");\r
- return sText;\r
- }\r
- else\r
- {\r
- if(obj.nodeValue)\r
- {\r
- var sValue=obj.nodeValue;\r
- sValue=sValue.replace(renbsp2sp," ");\r
- return sValue;\r
- }\r
- else\r
- {\r
- var sText="";\r
- var oChild=obj.firstChild;\r
- while(oChild!=null)\r
- {\r
- sText+=getInnerText(oChild);\r
- oChild=oChild.nextSibling;\r
- }\r
- return sText;\r
- }\r
- }\r
- \r
-}\r
-\r
-function HighLightElement(obj,sHighLightColor,sNormalColor)\r
-{\r
- if(obj!=null)\r
- {\r
- resetHighLight(sNormalColor);\r
- if (obj.style)\r
- obj.style.backgroundColor=sHighLightColor;\r
- goHighLighted=obj;\r
- }\r
-}\r
-\r
-function resetHighLight(sNormalColor)\r
-{\r
- if(goHighLighted!=null)\r
- {\r
- if (goHighLighted.style)\r
- goHighLighted.style.backgroundColor=sNormalColor;\r
- goHighLighted=null;\r
- }\r
-}\r
-\r
-function whFont(sName,sSize,sColor,sStyle,sWeight,sDecoration)\r
-{\r
- this.sName=sName;\r
- this.sSize=sSize;\r
- this.sColor=sColor;\r
- this.sStyle=sStyle;\r
- this.sWeight=sWeight;\r
- this.sDecoration=sDecoration;\r
-}\r
-\r
-function getFontStyle(oFont)\r
-{\r
- var sStyle="";\r
- if(oFont)\r
- {\r
- sStyle+="font-family:"+oFont.sName+";";\r
- if(gbMac)\r
- {\r
- var nSize=parseInt(oFont.sSize);\r
- if(gbIE5)\r
- nSize+=2;\r
- else\r
- nSize+=4;\r
- sStyle+="font-size:"+nSize+"pt;";\r
- }\r
- else\r
- sStyle+="font-size:"+oFont.sSize+";";\r
- \r
- sStyle+="font-style:"+oFont.sStyle+";";\r
- sStyle+="font-weight:"+oFont.sWeight+";";\r
- sStyle+="text-decoration:"+oFont.sDecoration+";";\r
- sStyle+="color:"+oFont.sColor+";";\r
- }\r
- return sStyle;\r
-}\r
-\r
-function _browserStringToText(sBStr)\r
-{\r
- var sText="";\r
- // change %xxx back to the real char.\r
- var nPos=sBStr.indexOf('%');\r
- while(nPos!=-1)\r
- {\r
- sText+=sBStr.substring(0,nPos);\r
- sBStr=sBStr.substring(nPos+1);\r
- var sNum="";\r
- var i=0;\r
- while(sBStr.charAt(i)>='0'&&sBStr.charAt(i)<='9')\r
- {\r
- sNum+=sBStr.charAt(i++); \r
- }\r
- if(sNum!=""){\r
- var nNum=parseInt(sNum,16);\r
- sText+=String.fromCharCode(nNum);\r
- sBStr=sBStr.substring(i);\r
- }\r
- nPos=sBStr.indexOf('%');\r
- }\r
- sText+=sBStr;\r
- return sText;\r
-}\r
-\r
-function excapeSingleQuotandSlash(str)\r
-{\r
- if(str==null) return null;\r
- var nPos=0;\r
- var sRes="";\r
- var nPosNew=str.indexOf("\\",nPos);\r
- while(nPosNew!=-1){\r
- sRes+=str.substring(nPos,nPosNew+1)+"\\";\r
- nPos=nPosNew+1;\r
- nPosNew=str.indexOf("\\",nPos);\r
- }\r
- if(nPos<str.length)\r
- sRes+=str.substring(nPos);\r
- var re=new RegExp("'","g");\r
- sRes=sRes.replace(re,"\\'");\r
- return sRes;\r
-}\r
-\r
-var gbWhUtil=true;
\ No newline at end of file
+++ /dev/null
-// WebHelp 5.10.006\r
-var gbNav=false;\r
-var gbNav6=false;\r
-var gbNav61=false;\r
-var gbNav7=false;\r
-var gbNav4=false;\r
-var gbIE4=false;\r
-var gbIE=false;\r
-var gbIE5=false;\r
-var gbIE55=false;\r
-var gbOpera6=false;\r
-var gbOpera7=false;\r
-var gbKonqueror3=false;\r
-\r
-var gAgent=navigator.userAgent.toLowerCase();\r
-var gbMac=(gAgent.indexOf("mac")!=-1);\r
-var gbSunOS=(gAgent.indexOf("sunos")!=-1);\r
-var gbOpera=(gAgent.indexOf("opera")!=-1);\r
-var gbKonqueror=(gAgent.indexOf("konqueror")!= -1);\r
-var gbSafari=(gAgent.indexOf("safari")!= -1);\r
-var gbWindows=((gAgent.indexOf('win')!= -1)||(gAgent.indexOf('16bit')!= -1));\r
-var gbMozilla=((gAgent.indexOf('gecko')!=-1) && (gAgent.indexOf('netscape')==-1));\r
-\r
-\r
-var gVersion=navigator.appVersion.toLowerCase();\r
-\r
-var gnVerMajor=parseInt(gVersion);\r
-var gnVerMinor=parseFloat(gVersion);\r
-\r
-if(!gbOpera&&!gbKonqueror&&!gbSafari) // opera can mimic IE or Netscape by settings.\r
-{\r
- gbIE=(navigator.appName.indexOf("Microsoft")!=-1);\r
- gbNav=(gAgent.indexOf('mozilla')!=-1) && ((gAgent.indexOf('spoofer')==-1) && (gAgent.indexOf('compatible')==-1));\r
- if(gnVerMajor>=4)\r
- {\r
- if(navigator.appName=="Netscape")\r
- {\r
- gbNav4=true;\r
- if(gnVerMajor>=5)\r
- gbNav6=true;\r
- }\r
- gbIE4=(navigator.appName.indexOf("Microsoft")!=-1);\r
- }\r
- if(gbNav6)\r
- {\r
- var nPos=gAgent.indexOf("gecko");\r
- if(nPos!=-1)\r
- {\r
- var nPos2=gAgent.indexOf("/", nPos);\r
- if(nPos2!=-1)\r
- {\r
- var nVersion=parseFloat(gAgent.substring(nPos2+1));\r
- if(nVersion>=20010726)\r
- {\r
- gbNav61=true;\r
- if (nVersion>=20020823)\r
- gbNav7=true;\r
- }\r
- }\r
- }\r
- }else if(gbIE4)\r
- {\r
- var nPos=gAgent.indexOf("msie");\r
- if(nPos!=-1)\r
- {\r
- var nVersion=parseFloat(gAgent.substring(nPos+5));\r
- if(nVersion>=5)\r
- {\r
- gbIE5=true;\r
- if(nVersion>=5.5)\r
- gbIE55=true;\r
- }\r
- }\r
- }\r
-}\r
-else if (gbOpera)\r
-{\r
- var nPos = gAgent.indexOf("opera");\r
- if(nPos!=-1)\r
- {\r
- var nVersion=parseFloat(gAgent.substring(nPos+6));\r
- if(nVersion>=6)\r
- {\r
- gbOpera6=true;\r
- if(nVersion>=7)\r
- gbOpera7=true;\r
- }\r
- }\r
-}\r
-else if (gbKonqueror)\r
-{\r
- var nPos = gAgent.indexOf("konqueror");\r
- if(nPos!=-1)\r
- {\r
- var nVersion = parseFloat(gAgent.substring(nPos+10));\r
- if (nVersion >= 3)\r
- {\r
- gbKonqueror3=true;\r
- }\r
- }\r
-}\r
-\r
-var gbWhVer=true;
\ No newline at end of file
<topic name="Introduction to SALOME" url="kernel/introduction_to_salome_pro.htm" />\r
<topic name="Navigating topics" url="kernel/navigating_topics.htm" />\r
<topic name="Opening studies" url="kernel/opening_studies.htm" />\r
-<topic name="Installation Wizard" url="kernel/readme.html" />\r
+<topic name="SALOME Installation Wizard Help" url="kernel/readme.html" />\r
<topic name="Running SALOME" url="kernel/running_salome_pro.htm" />\r
<topic name="SALOME desktop" url="kernel/salome_pro_desktop.htm" />\r
<topic name="Saving a study" url="kernel/saving_a_study.htm" />\r
<topic name="Using Object Browser" url="kernel/using_object_browser.htm" />\r
<topic name="Using Registry tool" url="kernel/using_registry.htm" />\r
<topic name="MESH preferences" url="mesh_preferences.htm" />\r
+<topic name="OCC 3D Viewer" url="occ_3d_viewer.htm" />\r
<topic name="Post-Pro Preferences" url="post-pro_preferences.htm" />\r
<topic name="Select Color and Font" url="select_color_and_font.htm" />\r
<topic name="Setting Preferences" url="setting_preferences.htm" />\r
+<topic name="VTK 3D Viewer" url="vtk_3d_viewer.htm" />\r
\r
</ftstdata> \r
<ftswdata>\r
<key name="__version__"> 14, </key>\r
<key name="_omnipymodul"> 14, </key>\r
-<key name="0"> 6,14,2,24,16, </key>\r
-<key name="001"> 24, </key>\r
-<key name="01"> 24, </key>\r
-<key name="1"> 5,14,24,15, </key>\r
-<key name="10"> 14,24, </key>\r
-<key name="100"> 24, </key>\r
+<key name="_root_dir"> 14, </key>\r
+<key name="_src_dir"> 14, </key>\r
+<key name="0"> 6,2,25,16,14, </key>\r
+<key name="001"> 25, </key>\r
+<key name="01"> 25, </key>\r
+<key name="1"> 5,25,15,14, </key>\r
+<key name="10"> 25,14, </key>\r
+<key name="100"> 25, </key>\r
<key name="103100"> 14, </key>\r
<key name="13"> 14, </key>\r
-<key name="16"> 24, </key>\r
-<key name="16x16"> 24, </key>\r
-<key name="2"> 5,14,24,15, </key>\r
-<key name="200"> 24, </key>\r
+<key name="16"> 25, </key>\r
+<key name="16x16"> 25, </key>\r
+<key name="2"> 5,25,15,14, </key>\r
+<key name="200"> 25, </key>\r
<key name="23"> 14, </key>\r
<key name="24"> 14, </key>\r
-<key name="256"> 24, </key>\r
-<key name="2d"> 6,10,2,24, </key>\r
-<key name="3"> 6,14,2,15,16, </key>\r
+<key name="256"> 25, </key>\r
+<key name="2a2"> 14, </key>\r
+<key name="2d"> 6,10,2,25, </key>\r
+<key name="3"> 6,2,15,16,14, </key>\r
<key name="31"> 14, </key>\r
-<key name="33"> 24, </key>\r
-<key name="3d"> 10,2,24,18, </key>\r
+<key name="33"> 25, </key>\r
+<key name="3d"> 10,2,24,25,14,18,28, </key>\r
<key name="4"> 14, </key>\r
<key name="5"> 14, </key>\r
-<key name="50"> 24, </key>\r
-<key name="51"> 14, </key>\r
-<key name="512"> 24, </key>\r
+<key name="50"> 25, </key>\r
+<key name="512"> 25, </key>\r
<key name="6"> 14, </key>\r
<key name="7"> 14, </key>\r
<key name="8"> 14, </key>\r
<key name="9"> 14, </key>\r
-<key name="abl"> 3,6,14,18, </key>\r
+<key name="abl"> 3,6,24,14,18,28, </key>\r
<key name="abort"> 14, </key>\r
<key name="abov"> 8,14, </key>\r
-<key name="abscissa"> 23,24, </key>\r
-<key name="absolut"> 24, </key>\r
+<key name="abscissa"> 23,25, </key>\r
+<key name="absolut"> 25, </key>\r
<key name="abstraction"> 5, </key>\r
-<key name="acceptabl"> 24, </key>\r
-<key name="acces"> 3,1,23,24,16,18,21, </key>\r
-<key name="accessibl"> 10,26, </key>\r
-<key name="accidental"> 14, </key>\r
-<key name="accord"> 14,24,15,16, </key>\r
+<key name="ac"> 14, </key>\r
+<key name="acceptabl"> 25, </key>\r
+<key name="acces"> 3,1,23,24,25,16,18,21,28, </key>\r
+<key name="accessibl"> 10,27, </key>\r
+<key name="accord"> 25,15,16,14, </key>\r
<key name="account"> 14, </key>\r
<key name="achiev"> 3, </key>\r
<key name="acquaint"> 4, </key>\r
-<key name="action"> 24, </key>\r
-<key name="activ"> 5,6,24,16,17, </key>\r
+<key name="action"> 25,14, </key>\r
+<key name="activ"> 5,6,25,16,17, </key>\r
<key name="activat"> 5,16,17, </key>\r
-<key name="activity"> 24, </key>\r
-<key name="actual"> 5, </key>\r
-<key name="ad"> 0,25,19, </key>\r
+<key name="activity"> 25, </key>\r
+<key name="actual"> 5,14, </key>\r
+<key name="ad"> 0,14,26,19, </key>\r
<key name="adapt"> 3, </key>\r
-<key name="add"> 14,15,16,25,18,19, </key>\r
+<key name="add"> 15,16,14,26,18,19, </key>\r
<key name="addition"> 5,14, </key>\r
-<key name="additional"> 3,14,2,24,15,16,21, </key>\r
-<key name="addres"> 24, </key>\r
-<key name="adjust"> 24, </key>\r
+<key name="additional"> 3,2,25,15,16,14,21, </key>\r
+<key name="addres"> 25, </key>\r
+<key name="adjust"> 25, </key>\r
<key name="advanc"> 14,19, </key>\r
<key name="affect"> 3, </key>\r
-<key name="again"> 6,14,12,17, </key>\r
-<key name="algorithm"> 3,14,11, </key>\r
-<key name="allow"> 3,0,7,1,14,11,23,24,15,16,17,25,18,26,19,22, </key>\r
+<key name="again"> 6,12,14,17, </key>\r
+<key name="algorithm"> 3,11,14, </key>\r
+<key name="allow"> 3,0,7,1,11,23,24,25,15,16,14,17,26,18,27,19,22,28, </key>\r
<key name="almost"> 17, </key>\r
-<key name="along"> 11,18, </key>\r
+<key name="along"> 11,18,28, </key>\r
<key name="alongsid"> 19, </key>\r
-<key name="alpha"> 24, </key>\r
+<key name="alpha"> 25, </key>\r
<key name="already"> 14, </key>\r
<key name="alway"> 11, </key>\r
<key name="amount"> 14, </key>\r
-<key name="animation"> 24, </key>\r
-<key name="annoy"> 14, </key>\r
+<key name="animation"> 25, </key>\r
<key name="anoth"> 3,17, </key>\r
-<key name="answ"> 14, </key>\r
-<key name="any"> 3,4,6,8,14,11,12,24,15,16,17,26, </key>\r
+<key name="any"> 3,4,6,1,8,11,12,25,15,16,14,17,27, </key>\r
<key name="anyth"> 14, </key>\r
-<key name="ap"> 26, </key>\r
-<key name="api"> 0,24, </key>\r
+<key name="ap"> 27, </key>\r
+<key name="api"> 0,25, </key>\r
<key name="appear"> 0,8,9,14,18,19,22, </key>\r
<key name="appearanc"> 23, </key>\r
<key name="applet"> 4, </key>\r
-<key name="application"> 3,6,0,10,2,15,16,17,18,26,19, </key>\r
-<key name="approach"> 14,11,16, </key>\r
-<key name="appropriat"> 14,10, </key>\r
+<key name="appli"> 1, </key>\r
+<key name="application"> 3,6,0,10,2,15,16,14,17,18,27,19, </key>\r
+<key name="approach"> 11,16,14, </key>\r
+<key name="appropriat"> 10,14, </key>\r
<key name="approximat"> 14, </key>\r
-<key name="arabic"> 25, </key>\r
+<key name="arabic"> 26, </key>\r
<key name="architectur"> 3,0,10, </key>\r
-<key name="area"> 6,16,18, </key>\r
+<key name="area"> 6,24,16,18,28, </key>\r
<key name="argument"> 14, </key>\r
-<key name="arrang"> 24, </key>\r
+<key name="around"> 24,28, </key>\r
+<key name="arrang"> 25, </key>\r
<key name="ascii"> 17,18, </key>\r
-<key name="ask"> 14, </key>\r
-<key name="assign"> 24, </key>\r
-<key name="associat"> 13,24,21, </key>\r
-<key name="attach"> 10, </key>\r
-<key name="attribut"> 21, </key>\r
+<key name="assign"> 25, </key>\r
+<key name="associat"> 13,25,21, </key>\r
+<key name="attach"> 10,14, </key>\r
+<key name="attribut"> 14,21, </key>\r
<key name="author"> 8,19, </key>\r
-<key name="auto"> 14,18, </key>\r
-<key name="automatic"> 23,18, </key>\r
-<key name="automatical"> 0,14,23,13,24,15,16,17,26, </key>\r
+<key name="auto"> 18, </key>\r
+<key name="automatic"> 23,14,18, </key>\r
+<key name="automatical"> 0,23,13,25,15,16,14,17,27, </key>\r
<key name="availability"> 7, </key>\r
-<key name="availabl"> 3,5,7,14,10, </key>\r
-<key name="averag"> 24, </key>\r
-<key name="avi"> 24, </key>\r
+<key name="availabl"> 3,5,7,10,24,14,28, </key>\r
+<key name="averag"> 25, </key>\r
+<key name="avi"> 25, </key>\r
<key name="avoid"> 0,14, </key>\r
<key name="awar"> 14, </key>\r
-<key name="awk"> 14, </key>\r
-<key name="ax"> 18, </key>\r
-<key name="axi"> 18, </key>\r
+<key name="ax"> 24,18,28, </key>\r
+<key name="axi"> 18,28, </key>\r
<key name="b"> 14, </key>\r
-<key name="back"> 14,23, </key>\r
-<key name="background"> 24,18, </key>\r
-<key name="bar"> 23,24,21, </key>\r
-<key name="bas"> 3,10,2,17, </key>\r
+<key name="back"> 23,14, </key>\r
+<key name="background"> 25,18, </key>\r
+<key name="bar"> 23,25,21, </key>\r
+<key name="bas"> 3,10,2,24,14,17, </key>\r
<key name="bash"> 14, </key>\r
-<key name="basi"> 3, </key>\r
-<key name="basic"> 3,14,11,16,25, </key>\r
-<key name="batch"> 3,0,14,15, </key>\r
-<key name="be"> 14, </key>\r
-<key name="becom"> 6,24, </key>\r
+<key name="basi"> 3,24,25, </key>\r
+<key name="basic"> 3,11,16,14,26, </key>\r
+<key name="batch"> 3,0,15,14, </key>\r
+<key name="be"> 1,14, </key>\r
+<key name="becom"> 6,25,14, </key>\r
<key name="befor"> 14, </key>\r
-<key name="begin"> 18,22, </key>\r
+<key name="begin"> 14,18,22, </key>\r
<key name="behav"> 3, </key>\r
-<key name="behavior"> 10, </key>\r
-<key name="behaviour"> 24, </key>\r
-<key name="below"> 14,12,24, </key>\r
-<key name="bet"> 24, </key>\r
-<key name="bicolor"> 24, </key>\r
-<key name="big"> 24, </key>\r
-<key name="bin"> 14,15,19, </key>\r
+<key name="behavior"> 10,14, </key>\r
+<key name="behaviour"> 25, </key>\r
+<key name="below"> 12,25,14, </key>\r
+<key name="bet"> 25, </key>\r
+<key name="bicolor"> 25, </key>\r
+<key name="big"> 25, </key>\r
+<key name="bin"> 15,14,19, </key>\r
<key name="binari"> 14, </key>\r
-<key name="binary"> 14,17, </key>\r
+<key name="binary"> 17, </key>\r
<key name="blu"> 14, </key>\r
<key name="blur"> 3, </key>\r
+<key name="bmp"> 24,28, </key>\r
<key name="bold"> 14, </key>\r
<key name="book"> 20, </key>\r
<key name="boost"> 14, </key>\r
<key name="boost_version"> 14, </key>\r
<key name="boostdir"> 14, </key>\r
<key name="border"> 23,16, </key>\r
-<key name="both"> 2,23,24, </key>\r
-<key name="bottom"> 10,23,24,18, </key>\r
-<key name="box"> 0,1,8,14,23,13,24,17,25,18,26,19,22, </key>\r
+<key name="both"> 2,23,25,14, </key>\r
+<key name="bottom"> 10,23,25,14,18, </key>\r
+<key name="bound"> 24,28, </key>\r
+<key name="boundari"> 1, </key>\r
+<key name="box"> 0,1,8,23,24,13,25,14,17,26,18,27,19,22,28, </key>\r
<key name="bracket"> 14, </key>\r
+<key name="break"> 14, </key>\r
<key name="brep"> 10, </key>\r
-<key name="brief"> 6,14,12, </key>\r
+<key name="brief"> 6,12, </key>\r
<key name="bring"> 2, </key>\r
-<key name="brows"> 4,5,6,0,14,2,13,16,17,18,19,21, </key>\r
-<key name="bug"> 14, </key>\r
-<key name="build"> 14,24,19, </key>\r
-<key name="built"> 14,11,24, </key>\r
-<key name="button"> 14,2,12,13,24,17,25,18,26,19,22, </key>\r
-<key name="c"> 3,14,15, </key>\r
+<key name="brows"> 4,5,6,0,2,13,25,16,14,17,18,19,21, </key>\r
+<key name="build"> 25,14,19, </key>\r
+<key name="built"> 11,25,14, </key>\r
+<key name="button"> 2,12,24,13,25,14,17,26,18,27,19,22,28, </key>\r
+<key name="button_label"> 14, </key>\r
+<key name="button_script"> 14, </key>\r
+<key name="button_tooltip"> 14, </key>\r
+<key name="c"> 3,15,14, </key>\r
<key name="ca"> 10, </key>\r
<key name="cad"> 10,11, </key>\r
<key name="cal"> 3,0,14, </key>\r
<key name="calculation"> 9,10,11, </key>\r
<key name="call"> 14,17,19,22, </key>\r
<key name="cam"> 3, </key>\r
-<key name="camera"> 24, </key>\r
+<key name="camera"> 25, </key>\r
<key name="cancel"> 14, </key>\r
<key name="capability"> 19, </key>\r
<key name="caption"> 14, </key>\r
-<key name="car"> 14,10, </key>\r
+<key name="car"> 10, </key>\r
<key name="careful"> 14, </key>\r
<key name="carri"> 23, </key>\r
<key name="carry"> 10, </key>\r
-<key name="cas"> 3,8,14,11,24,16,17, </key>\r
-<key name="cascad"> 14, </key>\r
+<key name="cas"> 3,8,11,25,16,14,17, </key>\r
+<key name="cascad"> 24,14, </key>\r
<key name="casroot"> 14, </key>\r
-<key name="cat"> 14, </key>\r
<key name="catalog"> 19, </key>\r
<key name="catalogmodulegeneral"> 19, </key>\r
<key name="catalogmodulepersonnel"> 19, </key>\r
<key name="catalogu"> 2,15, </key>\r
<key name="categori"> 20, </key>\r
<key name="cd"> 14, </key>\r
-<key name="cel"> 24,25, </key>\r
-<key name="center"> 24, </key>\r
-<key name="centr"> 24, </key>\r
-<key name="central"> 24, </key>\r
+<key name="cel"> 25,26, </key>\r
+<key name="cent"> 24,28, </key>\r
+<key name="center"> 25, </key>\r
+<key name="centr"> 25, </key>\r
+<key name="central"> 25, </key>\r
<key name="centraliz"> 15, </key>\r
-<key name="chang"> 3,6,8,14,23,24,16,17,18,26, </key>\r
-<key name="channel"> 24, </key>\r
+<key name="chang"> 3,6,8,23,24,25,16,14,17,18,27,28, </key>\r
+<key name="channel"> 25, </key>\r
<key name="chapter"> 4, </key>\r
-<key name="character"> 25, </key>\r
+<key name="character"> 26, </key>\r
<key name="charg"> 14, </key>\r
-<key name="check"> 0,14,24,16,18, </key>\r
+<key name="check"> 0,25,16,14,18,28, </key>\r
+<key name="check_enabl"> 14, </key>\r
<key name="check_version"> 14, </key>\r
-<key name="checkbox"> 14,23,24,18, </key>\r
-<key name="choic"> 0,14,24,25, </key>\r
-<key name="choos"> 5,7,1,8,14,23,13,24,16,25,19,22, </key>\r
-<key name="chosen"> 24,25,19, </key>\r
-<key name="clamp"> 24, </key>\r
+<key name="checkbox"> 23,25,14,18, </key>\r
+<key name="choic"> 0,25,14,26, </key>\r
+<key name="choos"> 5,7,1,8,23,24,13,25,16,14,26,19,22,28, </key>\r
+<key name="chosen"> 25,26,19, </key>\r
+<key name="clamp"> 25, </key>\r
<key name="classic"> 16, </key>\r
+<key name="clean"> 25, </key>\r
<key name="clear"> 14, </key>\r
<key name="clearall"> 16, </key>\r
-<key name="click"> 5,6,0,7,1,8,14,23,12,13,24,16,17,25,18,26,19,20,21,22, </key>\r
+<key name="click"> 5,6,0,7,1,8,23,12,24,13,25,16,14,17,26,18,27,19,20,21,22,28, </key>\r
<key name="clickabl"> 12, </key>\r
<key name="client"> 3, </key>\r
-<key name="clip"> 24, </key>\r
-<key name="clos"> 3,14,12,24,17,26,20, </key>\r
+<key name="clip"> 24,25, </key>\r
+<key name="clon"> 24, </key>\r
+<key name="clos"> 3,12,25,14,17,27,20, </key>\r
<key name="cluster"> 3, </key>\r
<key name="cod"> 3,14, </key>\r
<key name="coef"> 23, </key>\r
<key name="coincid"> 14, </key>\r
<key name="collect"> 14, </key>\r
-<key name="color"> 1,23,24,25,18, </key>\r
+<key name="color"> 1,23,25,26,18,28, </key>\r
<key name="column"> 18,21,22, </key>\r
-<key name="combin"> 11,24, </key>\r
+<key name="combin"> 11,25, </key>\r
<key name="comfortabl"> 16, </key>\r
<key name="comma"> 14, </key>\r
-<key name="command"> 3,0,14,15, </key>\r
-<key name="common"> 14,2,11,16,17,26, </key>\r
+<key name="command"> 3,0,15,14, </key>\r
+<key name="common"> 2,11,16,14,17,27, </key>\r
<key name="compar"> 3,23, </key>\r
-<key name="compatibl"> 14, </key>\r
<key name="compil"> 14, </key>\r
<key name="complet"> 8,14,20,22, </key>\r
<key name="complex"> 3,10, </key>\r
-<key name="component"> 3,4,0,7,10,2,11,12,13,24,16,17,18,19,21,22, </key>\r
-<key name="compos"> 24, </key>\r
+<key name="component"> 3,4,0,7,10,2,11,12,13,25,16,17,18,19,21,22, </key>\r
+<key name="compos"> 25, </key>\r
<key name="comput"> 14,18, </key>\r
<key name="computation"> 3,10, </key>\r
<key name="computational"> 10, </key>\r
<key name="concept"> 3,12, </key>\r
-<key name="concern"> 14,10, </key>\r
+<key name="concern"> 10,14, </key>\r
<key name="conclusion"> 3, </key>\r
<key name="config"> 14, </key>\r
<key name="config_fil"> 14, </key>\r
-<key name="config_mandrake10_1"> 14, </key>\r
-<key name="configur"> 14,10, </key>\r
+<key name="config_mandrake_10"> 14, </key>\r
+<key name="configur"> 10,14, </key>\r
<key name="configurabl"> 11, </key>\r
<key name="configuration"> 14, </key>\r
<key name="confirm"> 0,14, </key>\r
+<key name="confirmation"> 14, </key>\r
+<key name="conflict"> 14, </key>\r
<key name="connect"> 9,11,13,16,18, </key>\r
<key name="consist"> 16, </key>\r
-<key name="consol"> 6,14,10,15,16,17,18, </key>\r
+<key name="consol"> 6,10,15,16,14,17,18, </key>\r
<key name="constant"> 3,15, </key>\r
-<key name="construction"> 10,11, </key>\r
-<key name="consum"> 0, </key>\r
-<key name="contain"> 3,4,5,0,8,14,13,15,16,26,19,20,21,22, </key>\r
+<key name="construction"> 10,11,24, </key>\r
+<key name="consum"> 0,14, </key>\r
+<key name="contain"> 3,4,5,0,8,13,15,16,14,27,19,20,21,22, </key>\r
<key name="container"> 15, </key>\r
-<key name="content"> 0,14,24,20, </key>\r
-<key name="context"> 14,16,21, </key>\r
+<key name="content"> 0,24,25,14,20,28, </key>\r
+<key name="context"> 16,14,21, </key>\r
<key name="continu"> 14, </key>\r
-<key name="control"> 5,14,23,24, </key>\r
+<key name="control"> 5,23,25, </key>\r
<key name="convert"> 0,14, </key>\r
<key name="cooperat"> 11, </key>\r
-<key name="coordinat"> 18, </key>\r
-<key name="copi"> 24, </key>\r
-<key name="copy"> 7,14,16,17, </key>\r
+<key name="coordinat"> 24,18,28, </key>\r
+<key name="copi"> 25, </key>\r
+<key name="copy"> 7,16,14,17, </key>\r
<key name="copyright"> 14, </key>\r
<key name="corba"> 3,5,2,15, </key>\r
-<key name="corn"> 24,17,25, </key>\r
+<key name="corn"> 25,17,26, </key>\r
<key name="correct"> 16, </key>\r
-<key name="correspond"> 14,23,13,24,15,20, </key>\r
+<key name="correspond"> 23,13,25,15,14,20, </key>\r
<key name="cost"> 10, </key>\r
<key name="coupl"> 3,10, </key>\r
<key name="cpp"> 15, </key>\r
<key name="cppcontain"> 15, </key>\r
-<key name="creat"> 3,4,5,6,0,9,14,10,2,11,23,13,15,16,17,18,19,21, </key>\r
-<key name="creation"> 3,14,2, </key>\r
-<key name="cros"> 12,17, </key>\r
-<key name="csh"> 14,15, </key>\r
+<key name="creat"> 3,4,5,6,0,9,10,2,11,23,24,13,25,15,16,14,17,18,19,21, </key>\r
+<key name="creation"> 3,2,25,14, </key>\r
+<key name="cros"> 12,24,17, </key>\r
+<key name="csh"> 15,14, </key>\r
<key name="cshell"> 15, </key>\r
-<key name="ctrl"> 24, </key>\r
-<key name="current"> 6,0,8,14,12,24,15,17,18,26,21,22, </key>\r
-<key name="cursor"> 24, </key>\r
-<key name="curv"> 18, </key>\r
-<key name="custom"> 10,25,18,19, </key>\r
-<key name="customization"> 3, </key>\r
-<key name="cycl"> 24, </key>\r
-<key name="cyrillic"> 25, </key>\r
+<key name="ctrl"> 25, </key>\r
+<key name="current"> 6,0,8,12,24,25,15,14,17,18,27,21,22, </key>\r
+<key name="cursor"> 25, </key>\r
+<key name="curv"> 25,18, </key>\r
+<key name="custom"> 10,15,26,18,19, </key>\r
+<key name="customiz"> 14, </key>\r
+<key name="customization"> 3,14, </key>\r
+<key name="cut"> 25, </key>\r
+<key name="cutlin"> 25, </key>\r
+<key name="cycl"> 25, </key>\r
+<key name="cyrillic"> 26, </key>\r
<key name="d"> 14, </key>\r
<key name="dat"> 8,22, </key>\r
-<key name="data"> 3,5,0,9,14,10,2,11,17,18,19, </key>\r
+<key name="data"> 3,5,0,9,10,2,11,25,17,18,19, </key>\r
<key name="databas"> 3, </key>\r
<key name="debug"> 21, </key>\r
-<key name="decreas"> 24, </key>\r
-<key name="default"> 5,1,14,23,24,15,16,17,18,26,21, </key>\r
-<key name="defin"> 3,0,1,14,10,23,24,15,25, </key>\r
+<key name="decreas"> 25, </key>\r
+<key name="default"> 5,1,23,24,25,15,16,14,17,18,27,21,28, </key>\r
+<key name="defin"> 3,0,1,10,23,24,25,14,26,28, </key>\r
<key name="definit"> 3,5,7,15,16,21,22, </key>\r
-<key name="definition"> 3,10,20, </key>\r
+<key name="definition"> 3,1,10,20, </key>\r
+<key name="deform"> 28, </key>\r
<key name="delay"> 10, </key>\r
<key name="delet"> 17, </key>\r
-<key name="demand"> 10,2,24, </key>\r
-<key name="depend"> 7,14,21, </key>\r
+<key name="demand"> 10,2,25, </key>\r
+<key name="depend"> 7,25,14,21, </key>\r
<key name="dependanci"> 14, </key>\r
<key name="dependenci"> 14, </key>\r
<key name="deriv"> 3, </key>\r
<key name="describ"> 3,4,14,19, </key>\r
-<key name="description"> 14,15,19, </key>\r
-<key name="design"> 10,24, </key>\r
+<key name="description"> 15,14,19, </key>\r
+<key name="design"> 10,25, </key>\r
<key name="desir"> 19, </key>\r
-<key name="desktop"> 6,9,14,2,16,17, </key>\r
+<key name="desktop"> 6,9,2,16,14,17, </key>\r
<key name="destin"> 9,16,21,22, </key>\r
-<key name="destination"> 12, </key>\r
+<key name="destination"> 12,14, </key>\r
<key name="detail"> 14,18, </key>\r
-<key name="dev"> 14, </key>\r
-<key name="develop"> 3, </key>\r
+<key name="develop"> 3,24,14, </key>\r
<key name="development"> 3,10, </key>\r
-<key name="devic"> 24, </key>\r
+<key name="devic"> 25, </key>\r
<key name="diagram"> 23, </key>\r
-<key name="dialog"> 0,1,8,14,23,13,24,16,17,25,18,26,19,22, </key>\r
+<key name="dialog"> 0,1,8,23,13,25,16,14,17,26,18,27,19,22, </key>\r
<key name="dif"> 14, </key>\r
<key name="differ"> 16, </key>\r
-<key name="differenc"> 3,14,16,17, </key>\r
-<key name="different"> 3,4,5,9,14,13,24,15,16,17,21, </key>\r
+<key name="differenc"> 3,16,14,17, </key>\r
+<key name="different"> 3,4,5,9,13,25,15,16,14,17,21, </key>\r
<key name="digit"> 23, </key>\r
<key name="digital"> 10, </key>\r
<key name="dir"> 14, </key>\r
-<key name="direction"> 6,24, </key>\r
+<key name="direct"> 14, </key>\r
+<key name="direction"> 6,24,25, </key>\r
<key name="directori"> 14,18, </key>\r
-<key name="directory"> 14,15,17,18,26,19, </key>\r
-<key name="disabl"> 14,24,15, </key>\r
+<key name="directory"> 15,14,17,18,27,19, </key>\r
+<key name="disabl"> 25,15,14, </key>\r
<key name="disable_flag"> 14, </key>\r
-<key name="disk"> 14,15, </key>\r
-<key name="display"> 6,1,14,23,12,24,15,16,17,18,20,21,22, </key>\r
-<key name="distanc"> 24, </key>\r
+<key name="disk"> 15,14, </key>\r
+<key name="display"> 6,1,23,12,24,25,15,16,14,17,18,20,21,22,28, </key>\r
+<key name="distanc"> 25,28, </key>\r
<key name="distinction"> 3, </key>\r
-<key name="distribut"> 3,14, </key>\r
+<key name="distribut"> 3, </key>\r
<key name="distribution"> 14, </key>\r
-<key name="divid"> 4,24,22, </key>\r
+<key name="divid"> 4,25,22, </key>\r
<key name="do"> 7,14, </key>\r
<key name="dockabl"> 6,2,16,17, </key>\r
-<key name="document"> 5,0,9,14,16, </key>\r
-<key name="doesn"> 14, </key>\r
+<key name="document"> 5,0,9,16,14, </key>\r
+<key name="doesn"> 24, </key>\r
<key name="domain"> 3,11, </key>\r
-<key name="dominant"> 24, </key>\r
-<key name="don"> 14,24,19, </key>\r
+<key name="dominant"> 25, </key>\r
+<key name="don"> 24,25,14,19,28, </key>\r
<key name="dot"> 14, </key>\r
<key name="doubl"> 22, </key>\r
<key name="down"> 8,12, </key>\r
+<key name="downward"> 24,28, </key>\r
<key name="doxygen"> 14, </key>\r
-<key name="doxytag"> 14, </key>\r
-<key name="doxywizard"> 14, </key>\r
-<key name="drag"> 16, </key>\r
+<key name="drag"> 24,16,28, </key>\r
<key name="dramatical"> 3, </key>\r
+<key name="drawn"> 24,28, </key>\r
<key name="driv"> 14, </key>\r
<key name="drop"> 12,16, </key>\r
-<key name="dump"> 0, </key>\r
+<key name="dump"> 0,24,28, </key>\r
<key name="dumpversion"> 14, </key>\r
+<key name="duplicat"> 24, </key>\r
<key name="dynamic"> 2, </key>\r
-<key name="dynamical"> 11,24, </key>\r
-<key name="e"> 14,2,15,16,17, </key>\r
+<key name="dynamical"> 11,25, </key>\r
+<key name="e"> 2,15,16,14,17, </key>\r
<key name="easi"> 3,10, </key>\r
<key name="easy"> 3, </key>\r
<key name="economical"> 3, </key>\r
-<key name="edg"> 23, </key>\r
-<key name="edit"> 7,8,14,2,15, </key>\r
-<key name="editabl"> 24, </key>\r
-<key name="edition"> 24, </key>\r
-<key name="editor"> 26, </key>\r
+<key name="edg"> 1,23, </key>\r
+<key name="edit"> 7,8,2,25,15,14, </key>\r
+<key name="editabl"> 25, </key>\r
+<key name="edition"> 25, </key>\r
+<key name="editor"> 27, </key>\r
<key name="efficient"> 10, </key>\r
-<key name="egrep"> 14, </key>\r
-<key name="eith"> 24,25,18,19, </key>\r
+<key name="eith"> 25,14,26,18,19, </key>\r
<key name="electrical"> 10, </key>\r
<key name="electronic"> 10, </key>\r
-<key name="element"> 10,23,24, </key>\r
+<key name="element"> 10,23,25, </key>\r
<key name="embed"> 15, </key>\r
<key name="empty"> 6, </key>\r
-<key name="enabl"> 18,20, </key>\r
+<key name="enabl"> 14,18,20, </key>\r
<key name="encourag"> 3, </key>\r
-<key name="end"> 3,14,24,18,26, </key>\r
+<key name="end"> 3,25,14,18,27, </key>\r
<key name="enforc"> 3, </key>\r
<key name="engin"> 3, </key>\r
<key name="enough"> 14, </key>\r
<key name="ensur"> 3,10, </key>\r
-<key name="ent"> 8,14,15,17, </key>\r
+<key name="ent"> 8,15,14,17, </key>\r
<key name="enter"> 14, </key>\r
<key name="entity"> 23, </key>\r
<key name="entry"> 18,21, </key>\r
<key name="env_"> 14, </key>\r
+<key name="env_build"> 14, </key>\r
<key name="env_for_launch"> 14, </key>\r
<key name="env_product"> 14, </key>\r
<key name="env_vtk"> 14, </key>\r
-<key name="environment"> 3,6,9,14,10,2,15, </key>\r
+<key name="environment"> 3,6,9,10,2,15,14, </key>\r
+<key name="environmentpleas"> 14, </key>\r
<key name="equal"> 3,14, </key>\r
<key name="equipment"> 10, </key>\r
<key name="error"> 0,14, </key>\r
-<key name="etc"> 3,14,2,11,24,16, </key>\r
+<key name="etc"> 3,2,11,25,16,14, </key>\r
<key name="ev"> 22, </key>\r
-<key name="even"> 3,16, </key>\r
-<key name="every"> 10,20, </key>\r
+<key name="even"> 3,16,14, </key>\r
+<key name="every"> 10,25,20, </key>\r
<key name="everyth"> 14, </key>\r
<key name="evolution"> 10, </key>\r
<key name="evolv"> 3, </key>\r
<key name="ex"> 15, </key>\r
-<key name="exact"> 14,24, </key>\r
-<key name="exampl"> 6,14,10,16,17,19, </key>\r
-<key name="exceed"> 24, </key>\r
-<key name="exception"> 2,15, </key>\r
+<key name="exact"> 25,14, </key>\r
+<key name="examl"> 14, </key>\r
+<key name="exampl"> 6,10,16,14,17,19, </key>\r
+<key name="exceed"> 25, </key>\r
+<key name="except"> 14,28, </key>\r
+<key name="exception"> 2,15,14, </key>\r
<key name="exchang"> 3, </key>\r
+<key name="execut"> 14, </key>\r
+<key name="executabl"> 14, </key>\r
<key name="execution"> 10,11, </key>\r
-<key name="exist"> 3,14,11,13,17,26,19, </key>\r
+<key name="exist"> 3,11,13,14,17,27,19, </key>\r
<key name="existenc"> 14, </key>\r
<key name="expand"> 12, </key>\r
<key name="expandability"> 3, </key>\r
<key name="expectation"> 10, </key>\r
+<key name="experienc"> 14, </key>\r
<key name="expert"> 0, </key>\r
<key name="exploit"> 3, </key>\r
<key name="explor"> 4, </key>\r
-<key name="export"> 10,23, </key>\r
+<key name="export"> 10,23,24,28, </key>\r
<key name="expos"> 3, </key>\r
-<key name="extend"> 25, </key>\r
-<key name="extension"> 17,26, </key>\r
-<key name="external"> 18, </key>\r
+<key name="extend"> 24,26,28, </key>\r
+<key name="extension"> 17,27, </key>\r
+<key name="external"> 14,18, </key>\r
<key name="extract"> 14, </key>\r
<key name="extreme"> 10, </key>\r
-<key name="f"> 14,15, </key>\r
-<key name="fac"> 23,24,18, </key>\r
+<key name="f"> 15,14, </key>\r
+<key name="fac"> 23,25,18, </key>\r
<key name="facilitat"> 3,11, </key>\r
-<key name="fact"> 14,16, </key>\r
+<key name="fact"> 16, </key>\r
<key name="factory"> 19, </key>\r
<key name="fail"> 14, </key>\r
<key name="fals"> 14, </key>\r
-<key name="famili"> 24, </key>\r
-<key name="featur"> 4,14,24, </key>\r
-<key name="field"> 8,14,10,23,24,25, </key>\r
+<key name="famili"> 25, </key>\r
+<key name="featur"> 4,25,14, </key>\r
+<key name="feel"> 14, </key>\r
+<key name="field"> 8,10,23,25,14,26, </key>\r
<key name="fig"> 14, </key>\r
<key name="figur"> 1,14, </key>\r
-<key name="fil"> 5,0,8,14,11,13,24,15,16,17,18,26,19, </key>\r
+<key name="fil"> 5,0,8,11,13,25,15,16,14,17,18,27,19, </key>\r
<key name="fill"> 23, </key>\r
+<key name="final"> 14, </key>\r
<key name="find"> 14,19,20, </key>\r
<key name="find_in_path"> 14, </key>\r
<key name="fine"> 3, </key>\r
-<key name="finish"> 14,12,24, </key>\r
+<key name="finish"> 12,25,14, </key>\r
<key name="finit"> 10, </key>\r
-<key name="first"> 0,14,24,18,21, </key>\r
-<key name="fit"> 18, </key>\r
+<key name="first"> 0,25,14,18,21, </key>\r
+<key name="fit"> 24,18,28, </key>\r
<key name="flag"> 14, </key>\r
<key name="flexibility"> 3,0, </key>\r
-<key name="flexibl"> 14,10,2, </key>\r
-<key name="focal"> 24, </key>\r
+<key name="flexibl"> 10,2,14, </key>\r
+<key name="focal"> 25, </key>\r
<key name="focu"> 12, </key>\r
<key name="fold"> 14,17,21, </key>\r
-<key name="follow"> 3,0,8,9,14,12,13,15,16,17,18,26,19,20,22, </key>\r
-<key name="font"> 23,24,25,18, </key>\r
+<key name="folder"> 14, </key>\r
+<key name="follow"> 3,0,8,9,12,13,15,16,14,17,18,27,19,20,22, </key>\r
+<key name="font"> 23,25,14,26,18,28, </key>\r
+<key name="forc"> 14, </key>\r
<key name="forget"> 19, </key>\r
-<key name="format"> 4,10,13,18, </key>\r
-<key name="forth"> 24, </key>\r
-<key name="fp"> 24, </key>\r
-<key name="fram"> 14,24, </key>\r
+<key name="formal"> 14, </key>\r
+<key name="format"> 4,10,24,13,18,28, </key>\r
+<key name="forth"> 25, </key>\r
+<key name="fp"> 25, </key>\r
+<key name="fram"> 24,25,14,28, </key>\r
<key name="framework"> 2, </key>\r
-<key name="fre"> 10,24, </key>\r
+<key name="fre"> 1,10,25, </key>\r
<key name="friend"> 10, </key>\r
-<key name="ful"> 24, </key>\r
+<key name="ful"> 25, </key>\r
<key name="fulfill"> 0, </key>\r
-<key name="full"> 24,20, </key>\r
-<key name="function"> 0,14,10,11,16,17, </key>\r
+<key name="full"> 25,20, </key>\r
+<key name="function"> 0,10,11,16,14,17, </key>\r
<key name="function_nam"> 14, </key>\r
<key name="functional"> 16, </key>\r
-<key name="functionaliti"> 10, </key>\r
-<key name="functionality"> 3,4,7,9,16,19, </key>\r
+<key name="functionaliti"> 10,24,28, </key>\r
+<key name="functionality"> 3,4,7,9,24,16,19,28, </key>\r
<key name="fundamental"> 3, </key>\r
<key name="furth"> 14, </key>\r
-<key name="g"> 14,15, </key>\r
+<key name="g"> 15,14, </key>\r
<key name="gap"> 23, </key>\r
-<key name="gaus"> 2,24, </key>\r
+<key name="gaus"> 2,25,28, </key>\r
<key name="gcc"> 14, </key>\r
-<key name="general"> 9,14,23,16,18, </key>\r
-<key name="generat"> 0,14,11,19, </key>\r
+<key name="general"> 9,23,16,14,18, </key>\r
+<key name="generat"> 0,11,25,14,19, </key>\r
<key name="generator"> 10,2,19, </key>\r
<key name="generic"> 10,11, </key>\r
-<key name="geom"> 14,11, </key>\r
-<key name="geometrical"> 1,10,11,24, </key>\r
-<key name="geometry"> 3,1,11,24,16, </key>\r
-<key name="get"> 4,9,14,10,21, </key>\r
-<key name="giv"> 0,8,14,16,25, </key>\r
-<key name="given"> 14,11,24, </key>\r
-<key name="gl"> 24, </key>\r
-<key name="global"> 24, </key>\r
+<key name="geom"> 11,14, </key>\r
+<key name="geometrical"> 1,10,11,24,25, </key>\r
+<key name="geometry"> 3,1,11,24,25,16, </key>\r
+<key name="get"> 4,9,10,14,21, </key>\r
+<key name="giv"> 0,8,16,14,26, </key>\r
+<key name="given"> 11,25,14, </key>\r
+<key name="gl"> 25, </key>\r
+<key name="global"> 24,25,28, </key>\r
<key name="glossary"> 20, </key>\r
-<key name="go"> 14,12, </key>\r
+<key name="go"> 12,14, </key>\r
+<key name="good"> 24, </key>\r
+<key name="graduat"> 28, </key>\r
<key name="graph"> 6,11,18, </key>\r
-<key name="graphic"> 24, </key>\r
+<key name="graphic"> 25, </key>\r
<key name="graphical"> 0,2, </key>\r
<key name="graphviz"> 14, </key>\r
-<key name="great"> 0,24, </key>\r
-<key name="greek"> 25, </key>\r
-<key name="grep"> 14, </key>\r
-<key name="group"> 23,24,25, </key>\r
-<key name="gui"> 3,5,0,14,2,11,15,17,18,26, </key>\r
-<key name="h"> 14,15, </key>\r
-<key name="half"> 24, </key>\r
+<key name="great"> 0,24,25,28, </key>\r
+<key name="greek"> 26, </key>\r
+<key name="group"> 23,24,25,26, </key>\r
+<key name="gui"> 3,5,0,2,11,15,14,17,18,27, </key>\r
+<key name="guid"> 14, </key>\r
+<key name="h"> 15,14, </key>\r
+<key name="half"> 25, </key>\r
<key name="hand"> 3,12,20, </key>\r
-<key name="handl"> 14,10,2,15, </key>\r
-<key name="hard"> 14,15, </key>\r
+<key name="handl"> 10,2,15, </key>\r
+<key name="hard"> 15,14, </key>\r
<key name="hasn"> 17, </key>\r
<key name="hav"> 11,12,21, </key>\r
<key name="haven"> 18, </key>\r
-<key name="hdf"> 14,13,17,18, </key>\r
+<key name="hdf"> 13,14,17,18, </key>\r
<key name="hdf5"> 14, </key>\r
<key name="hdf5hom"> 14, </key>\r
<key name="heal"> 10, </key>\r
-<key name="height"> 23,24, </key>\r
+<key name="height"> 23,25, </key>\r
<key name="hello"> 22, </key>\r
-<key name="help"> 3,4,14,10,12,13,15,18,20,21, </key>\r
+<key name="help"> 3,4,10,12,13,15,14,18,20,21, </key>\r
<key name="helpful"> 14, </key>\r
-<key name="her"> 14,23,24,18, </key>\r
+<key name="her"> 23,25,14,18, </key>\r
<key name="heterogeneou"> 10, </key>\r
-<key name="hid"> 24,16,18,21, </key>\r
-<key name="high"> 14,10, </key>\r
-<key name="highlight"> 14,23,21, </key>\r
-<key name="hint"> 14, </key>\r
+<key name="hid"> 24,25,16,18,21,28, </key>\r
+<key name="high"> 10, </key>\r
+<key name="highlight"> 23,14,21, </key>\r
<key name="history"> 22, </key>\r
-<key name="hom"> 14,26, </key>\r
-<key name="horizontal"> 6,23,24,18, </key>\r
+<key name="hom"> 14,27, </key>\r
+<key name="hop"> 14, </key>\r
+<key name="horizontal"> 6,23,25,18, </key>\r
<key name="host"> 3, </key>\r
<key name="hotspot"> 12, </key>\r
+<key name="hour"> 14, </key>\r
<key name="how"> 3,14, </key>\r
<key name="hpp"> 14, </key>\r
<key name="html"> 4,20, </key>\r
<key name="hxx"> 14, </key>\r
-<key name="i"> 14,2,15,16,17, </key>\r
+<key name="i"> 2,15,16,17, </key>\r
<key name="icon"> 5,7,16,19, </key>\r
<key name="idea"> 14, </key>\r
<key name="identification"> 21,22, </key>\r
<key name="identify"> 14, </key>\r
<key name="idl"> 3,19, </key>\r
<key name="ie"> 18, </key>\r
-<key name="if"> 5,6,0,7,14,23,13,24,15,16,17,18,19,21, </key>\r
+<key name="if"> 5,6,0,7,23,24,13,25,15,16,14,17,18,19,21,28, </key>\r
<key name="ig"> 10, </key>\r
<key name="ignor"> 14, </key>\r
-<key name="imag"> 10,24, </key>\r
+<key name="imag"> 10,24,25,28, </key>\r
<key name="immediate"> 12, </key>\r
<key name="implement"> 3,14, </key>\r
-<key name="implementation"> 3,19, </key>\r
-<key name="impli"> 14, </key>\r
-<key name="import"> 0,14,10,2,11,24,16,26, </key>\r
+<key name="implementation"> 3,14,19, </key>\r
+<key name="import"> 0,10,2,11,25,16,14,27, </key>\r
<key name="important"> 14, </key>\r
-<key name="impos"> 24, </key>\r
-<key name="improv"> 2, </key>\r
-<key name="inc"> 14, </key>\r
-<key name="includ"> 14,12,24,20, </key>\r
+<key name="impos"> 25, </key>\r
+<key name="improv"> 2,14, </key>\r
+<key name="includ"> 12,25,14,20, </key>\r
<key name="inclusiv"> 3, </key>\r
-<key name="increas"> 0,10,24, </key>\r
-<key name="increment"> 1,24, </key>\r
+<key name="increas"> 0,10,25, </key>\r
+<key name="increment"> 1,25, </key>\r
<key name="incremental"> 3, </key>\r
<key name="independenc"> 3, </key>\r
<key name="independent"> 3, </key>\r
<key name="index"> 23,21, </key>\r
<key name="indicat"> 16,17, </key>\r
-<key name="information"> 3,8,14,12,24,17,20,22, </key>\r
+<key name="information"> 3,8,12,25,14,17,20,22, </key>\r
<key name="initial"> 9, </key>\r
<key name="input"> 10,19, </key>\r
-<key name="insert"> 14, </key>\r
-<key name="insid"> 3,6,12,24,19, </key>\r
-<key name="inspect"> 14,24, </key>\r
+<key name="insid"> 3,6,12,25,19, </key>\r
+<key name="inspect"> 25,14, </key>\r
<key name="instal"> 14,19, </key>\r
<key name="instalation"> 14, </key>\r
-<key name="install"> 14,15, </key>\r
+<key name="install"> 15,14, </key>\r
<key name="install_binary"> 14, </key>\r
<key name="install_disk_spac"> 14, </key>\r
<key name="install_sourc"> 14, </key>\r
+<key name="install_source_and_build"> 14, </key>\r
<key name="install_wizard_caption"> 14, </key>\r
<key name="install_wizard_copyright"> 14, </key>\r
<key name="install_wizard_license_info"> 14, </key>\r
<key name="install_wizard_root_directory"> 14, </key>\r
<key name="install_wizard_version"> 14, </key>\r
-<key name="installation"> 14,15, </key>\r
+<key name="installation"> 15,14, </key>\r
<key name="installation_mod"> 14, </key>\r
<key name="installation_script_nam"> 14, </key>\r
<key name="installdiskspac"> 14, </key>\r
<key name="installwizard_root_directory"> 14, </key>\r
<key name="installworkxxxxx"> 14, </key>\r
<key name="instanc"> 5, </key>\r
+<key name="instruction"> 14, </key>\r
<key name="instrumental"> 3, </key>\r
<key name="integ"> 14, </key>\r
<key name="integer"> 23, </key>\r
<key name="integrat"> 3,10,2,11, </key>\r
<key name="integration"> 3,10,2,19, </key>\r
-<key name="intend"> 14, </key>\r
<key name="interaction"> 2, </key>\r
<key name="interfac"> 3,0,10,2,16,19, </key>\r
<key name="interior"> 23, </key>\r
<key name="interoperabl"> 21, </key>\r
<key name="interp"> 15, </key>\r
<key name="interpret"> 2,16, </key>\r
-<key name="interval"> 24,22, </key>\r
-<key name="introduction"> 14,10,2,11, </key>\r
+<key name="interval"> 25,22, </key>\r
+<key name="introduction"> 10,2,11,14, </key>\r
<key name="invalid"> 17, </key>\r
-<key name="invok"> 14,16, </key>\r
+<key name="invert"> 24,25, </key>\r
+<key name="invok"> 16,14, </key>\r
<key name="ior"> 18,21, </key>\r
-<key name="isolin"> 18, </key>\r
-<key name="ispython"> 14, </key>\r
+<key name="isolat"> 1, </key>\r
+<key name="isolin"> 1,18, </key>\r
+<key name="isometric"> 24,28, </key>\r
<key name="item"> 8,10,2, </key>\r
-<key name="iteration"> 24, </key>\r
+<key name="iteration"> 25, </key>\r
<key name="itself"> 14, </key>\r
<key name="java"> 4, </key>\r
+<key name="jpeg"> 24,28, </key>\r
+<key name="jpg"> 24,28, </key>\r
<key name="just"> 14,18, </key>\r
<key name="k"> 15, </key>\r
<key name="kbyt"> 14, </key>\r
-<key name="kernel"> 14,11,15, </key>\r
-<key name="key"> 14,24, </key>\r
-<key name="keyboard"> 24, </key>\r
+<key name="kernel"> 11,15,14, </key>\r
+<key name="key"> 25,14, </key>\r
+<key name="keyboard"> 25, </key>\r
<key name="kill"> 15, </key>\r
<key name="killall"> 15, </key>\r
<key name="kind"> 8,12, </key>\r
<key name="know"> 19, </key>\r
<key name="knowledg"> 0, </key>\r
<key name="l"> 15, </key>\r
-<key name="label"> 23,24, </key>\r
+<key name="label"> 23,25,14,28, </key>\r
<key name="languag"> 3, </key>\r
<key name="larg"> 14, </key>\r
-<key name="largest"> 24, </key>\r
-<key name="last"> 18,22, </key>\r
-<key name="latest"> 24, </key>\r
-<key name="latin"> 25, </key>\r
-<key name="launch"> 4,0,14,13,15,26,19,22, </key>\r
+<key name="largest"> 25, </key>\r
+<key name="last"> 14,18,22, </key>\r
+<key name="latest"> 25, </key>\r
+<key name="latin"> 26, </key>\r
+<key name="launch"> 4,0,13,15,14,27,19,22, </key>\r
<key name="lay"> 5, </key>\r
<key name="layout"> 0,17, </key>\r
<key name="ld_library_path"> 14, </key>\r
<key name="lead"> 17, </key>\r
-<key name="learn"> 14,10, </key>\r
-<key name="left"> 14,23,24,25,18,20, </key>\r
+<key name="learn"> 10,14, </key>\r
+<key name="left"> 23,24,25,14,26,18,20,28, </key>\r
<key name="legend"> 18, </key>\r
-<key name="length"> 24, </key>\r
-<key name="les"> 24, </key>\r
-<key name="level"> 3,23,24, </key>\r
+<key name="length"> 25,28, </key>\r
+<key name="les"> 25, </key>\r
+<key name="level"> 3,23,25, </key>\r
<key name="lib"> 14, </key>\r
<key name="libcosnotify4"> 14, </key>\r
<key name="libhdf5"> 14, </key>\r
<key name="libm"> 14, </key>\r
<key name="libomniorb4"> 14, </key>\r
-<key name="libqwt"> 14, </key>\r
<key name="librari"> 14, </key>\r
-<key name="library"> 14,2, </key>\r
-<key name="libstdplugin"> 14, </key>\r
-<key name="libtcl8"> 14, </key>\r
-<key name="libtk8"> 14, </key>\r
+<key name="library"> 2,14, </key>\r
<key name="libvtkcommon"> 14, </key>\r
<key name="licens"> 14, </key>\r
-<key name="lik"> 3,6,14,12,24,16,17,19,21, </key>\r
+<key name="lik"> 3,6,12,25,16,14,17,19,21, </key>\r
<key name="like"> 14, </key>\r
-<key name="limit"> 24, </key>\r
-<key name="limitation"> 24, </key>\r
-<key name="lin"> 4,1,14,23,24,15,18, </key>\r
+<key name="limit"> 25, </key>\r
+<key name="limitation"> 25, </key>\r
+<key name="lin"> 4,1,23,25,15,14,18, </key>\r
<key name="linear"> 18, </key>\r
<key name="link"> 3,10,12, </key>\r
<key name="linux"> 4,14, </key>\r
-<key name="list"> 8,14,12,24,15,18,20,22, </key>\r
+<key name="list"> 8,12,25,15,14,18,20,22, </key>\r
<key name="list_of_prerequisit"> 14, </key>\r
-<key name="ll"> 18, </key>\r
-<key name="load"> 3,0,2,13,24,15,16,18,26,21, </key>\r
-<key name="local"> 24, </key>\r
-<key name="locat"> 3,24,15,16,18,20,21, </key>\r
+<key name="ll"> 24,18,28, </key>\r
+<key name="load"> 3,0,2,13,25,15,16,18,27,21, </key>\r
+<key name="local"> 25, </key>\r
+<key name="locat"> 3,24,25,15,16,18,20,21,28, </key>\r
<key name="location"> 0,19, </key>\r
-<key name="lock"> 8,24, </key>\r
-<key name="log"> 15, </key>\r
-<key name="logarithmic"> 24,18, </key>\r
+<key name="lock"> 8,24,25,28, </key>\r
+<key name="log"> 15,14, </key>\r
+<key name="logarithmic"> 25,18, </key>\r
<key name="long"> 3,14, </key>\r
<key name="look"> 14,19,20, </key>\r
-<key name="lookout"> 23,24, </key>\r
+<key name="lookout"> 23,25, </key>\r
<key name="lost"> 17, </key>\r
<key name="lot"> 16, </key>\r
-<key name="low"> 14,24,25,20, </key>\r
+<key name="low"> 25,14,26,20, </key>\r
<key name="m"> 15, </key>\r
<key name="machin"> 3,17,22, </key>\r
<key name="macintosh"> 4, </key>\r
-<key name="macro"> 3, </key>\r
-<key name="magnification"> 24, </key>\r
-<key name="main"> 5,0,7,8,14,10,13,24,16,17,18,19,22, </key>\r
+<key name="macro"> 3,14, </key>\r
+<key name="magnification"> 25, </key>\r
+<key name="main"> 5,0,7,8,10,13,25,16,14,17,18,19,22, </key>\r
<key name="major"> 14, </key>\r
-<key name="mak"> 5,14,10,23, </key>\r
+<key name="mak"> 5,10,23,14, </key>\r
<key name="make_dir"> 14, </key>\r
<key name="make_env"> 14, </key>\r
<key name="manag"> 10,18, </key>\r
<key name="management"> 10,2,16, </key>\r
<key name="mandrak"> 14, </key>\r
<key name="mandrake10"> 14, </key>\r
-<key name="manipulat"> 24, </key>\r
-<key name="manipulator"> 24, </key>\r
-<key name="manual"> 4,0,14,18, </key>\r
+<key name="manipulat"> 25, </key>\r
+<key name="manipulator"> 25, </key>\r
+<key name="manual"> 4,0,24,14,18,28, </key>\r
<key name="map"> 3, </key>\r
-<key name="mark"> 14,18, </key>\r
+<key name="mark"> 24,25,14,18,28, </key>\r
<key name="marker"> 18, </key>\r
<key name="market"> 10, </key>\r
<key name="massive"> 3, </key>\r
<key name="mast"> 14, </key>\r
<key name="match"> 20, </key>\r
-<key name="matrix"> 24, </key>\r
-<key name="max"> 24, </key>\r
+<key name="matrix"> 25, </key>\r
+<key name="max"> 25, </key>\r
<key name="maximiz"> 5, </key>\r
-<key name="maximum"> 24, </key>\r
-<key name="mean"> 6,9,14,24,16,17, </key>\r
+<key name="maximum"> 25, </key>\r
+<key name="mean"> 6,9,25,16,14,17, </key>\r
<key name="mechanism"> 0,2,15, </key>\r
<key name="med2hom"> 14, </key>\r
<key name="meet"> 10, </key>\r
-<key name="memory"> 24, </key>\r
+<key name="memoris"> 24, </key>\r
+<key name="memory"> 25, </key>\r
<key name="mention"> 14, </key>\r
-<key name="menu"> 3,5,0,7,8,2,23,12,13,24,16,17,25,18,26,19,21,22, </key>\r
+<key name="menu"> 3,5,0,7,8,2,23,12,13,25,16,17,26,18,27,19,21,22, </key>\r
<key name="menubar"> 16, </key>\r
-<key name="mesh"> 3,10,11,23,24,16, </key>\r
-<key name="messag"> 8,14,2,15, </key>\r
-<key name="middl"> 14, </key>\r
-<key name="min"> 24, </key>\r
+<key name="mesh"> 3,10,11,23,24,25,16,14,28, </key>\r
+<key name="messag"> 8,2,15,14, </key>\r
+<key name="min"> 25, </key>\r
<key name="minimiz"> 5, </key>\r
-<key name="minimum"> 24, </key>\r
+<key name="minimum"> 25, </key>\r
<key name="minor"> 14, </key>\r
<key name="mistak"> 16, </key>\r
<key name="mix"> 16, </key>\r
-<key name="mod"> 3,0,1,14,23,24,15, </key>\r
+<key name="mod"> 3,0,1,23,25,15,14, </key>\r
<key name="model"> 3,10,11,23, </key>\r
<key name="modern"> 10, </key>\r
+<key name="modifi"> 14, </key>\r
<key name="modification"> 3,0,8, </key>\r
-<key name="modify"> 0,14,10, </key>\r
-<key name="modul"> 3,4,7,1,14,2,11,23,24,15,16,17,18,26,19, </key>\r
-<key name="module_root_dir"> 14, </key>\r
-<key name="module_src_dir"> 14, </key>\r
+<key name="modify"> 0,10,14, </key>\r
+<key name="modul"> 3,4,7,1,2,11,23,24,25,15,16,14,17,18,27,19,28, </key>\r
<key name="module1"> 15, </key>\r
<key name="module2"> 15, </key>\r
<key name="modulecatalog"> 15, </key>\r
-<key name="modulu"> 24, </key>\r
-<key name="moment"> 14,24, </key>\r
-<key name="momentari"> 24, </key>\r
-<key name="mous"> 23,24,16, </key>\r
+<key name="modulu"> 25, </key>\r
+<key name="moment"> 25,14, </key>\r
+<key name="momentari"> 25, </key>\r
+<key name="mous"> 23,24,25,16,28, </key>\r
<key name="mov"> 6, </key>\r
-<key name="movement"> 24, </key>\r
+<key name="movement"> 25, </key>\r
<key name="mozilla"> 18, </key>\r
<key name="msg2qm"> 14, </key>\r
<key name="msg2qm_root"> 14, </key>\r
<key name="multi"> 6,9,10,2,16,19, </key>\r
<key name="multifil"> 17,18, </key>\r
<key name="multipl"> 17, </key>\r
-<key name="multipli"> 24, </key>\r
+<key name="multipli"> 25, </key>\r
<key name="multiti"> 3, </key>\r
<key name="must"> 3,10,11, </key>\r
-<key name="n"> 14,24,15, </key>\r
-<key name="nam"> 3,5,0,8,14,17,19,21,22, </key>\r
+<key name="n"> 25,15,14, </key>\r
+<key name="nam"> 3,5,0,8,14,17,19,21,22,28, </key>\r
<key name="nativ"> 14, </key>\r
<key name="natur"> 7, </key>\r
<key name="natural"> 3, </key>\r
-<key name="navigat"> 14,12, </key>\r
-<key name="navigation"> 4,12,24, </key>\r
+<key name="navigat"> 12,14, </key>\r
+<key name="navigation"> 4,12,25, </key>\r
<key name="navigator"> 4, </key>\r
-<key name="ne"> 6,14,12,25,18, </key>\r
-<key name="necessary"> 0,14,23,15,16,17,21, </key>\r
-<key name="need"> 24, </key>\r
-<key name="negativ"> 24, </key>\r
+<key name="ne"> 6,12,14,26,18, </key>\r
+<key name="necessary"> 0,23,15,16,14,17,21, </key>\r
+<key name="need"> 25, </key>\r
+<key name="negativ"> 25, </key>\r
<key name="netgen"> 14, </key>\r
<key name="netgenroot"> 14, </key>\r
<key name="netscap"> 4,18, </key>\r
-<key name="nevertheles"> 14, </key>\r
-<key name="new"> 3,5,8,9,14,10,17,18,26,19, </key>\r
-<key name="next"> 8,14,15,26,19, </key>\r
-<key name="nf"> 14, </key>\r
+<key name="new"> 3,5,8,9,10,24,25,14,17,18,27,19, </key>\r
+<key name="next"> 8,15,14,27,19, </key>\r
<key name="nod"> 23,19, </key>\r
<key name="normal"> 6, </key>\r
-<key name="not"> 14,15, </key>\r
+<key name="not"> 15,14, </key>\r
<key name="notation"> 14, </key>\r
<key name="noticeab"> 3, </key>\r
<key name="notifd"> 14, </key>\r
-<key name="notification"> 26, </key>\r
-<key name="notify"> 24, </key>\r
+<key name="notification"> 27, </key>\r
+<key name="notify"> 25, </key>\r
<key name="notion"> 9, </key>\r
<key name="now"> 16, </key>\r
-<key name="nth"> 24, </key>\r
-<key name="null"> 14,24, </key>\r
-<key name="numb"> 14,11,23,24,15,18,26,22, </key>\r
-<key name="number"> 14,23,24, </key>\r
-<key name="numeric"> 14,10,11,25, </key>\r
+<key name="nth"> 25, </key>\r
+<key name="null"> 25, </key>\r
+<key name="numb"> 11,23,25,15,14,18,27,22,28, </key>\r
+<key name="number"> 23,25,14, </key>\r
+<key name="numeric"> 10,11,14,26, </key>\r
<key name="numerical"> 3,9,10, </key>\r
<key name="numerou"> 15, </key>\r
-<key name="object"> 3,5,6,0,7,2,23,13,24,16,17,18,26,21, </key>\r
+<key name="object"> 3,5,6,0,7,2,23,24,13,25,16,17,18,27,21,28, </key>\r
<key name="objectiv"> 3, </key>\r
<key name="obligatory"> 14, </key>\r
-<key name="occ"> 5,6,2,18, </key>\r
+<key name="observ"> 25, </key>\r
+<key name="occ"> 5,6,2,24,18, </key>\r
+<key name="occ_version_maintenanc"> 14, </key>\r
<key name="occ_version_major"> 14, </key>\r
<key name="occ_version_minor"> 14, </key>\r
<key name="occupi"> 14, </key>\r
+<key name="occur"> 14, </key>\r
<key name="off"> 14, </key>\r
<key name="offer"> 3, </key>\r
+<key name="offic"> 14, </key>\r
<key name="official"> 14, </key>\r
+<key name="offset"> 28, </key>\r
<key name="often"> 10, </key>\r
-<key name="ok"> 14,13,26, </key>\r
+<key name="ok"> 13,14,27, </key>\r
<key name="omg"> 3, </key>\r
-<key name="omit"> 14, </key>\r
-<key name="omni"> 14, </key>\r
<key name="omninotify"> 14, </key>\r
<key name="omniorb"> 14, </key>\r
<key name="omniorbdir"> 14, </key>\r
<key name="omniorbpy"> 14, </key>\r
-<key name="on"> 3,6,0,7,14,2,12,13,24,15,16,17,25,18,26,19, </key>\r
-<key name="onc"> 24, </key>\r
+<key name="on"> 3,6,0,7,2,12,13,25,15,16,14,17,26,18,27,19, </key>\r
+<key name="onc"> 25, </key>\r
<key name="onlin"> 20, </key>\r
-<key name="opaqu"> 24, </key>\r
-<key name="open"> 6,0,9,14,10,11,12,13,24,15,17,19,20, </key>\r
-<key name="opencascad"> 14, </key>\r
+<key name="opaqu"> 25, </key>\r
+<key name="open"> 6,0,9,10,11,12,24,13,25,15,14,17,19,20, </key>\r
<key name="operat"> 0, </key>\r
-<key name="operation"> 7,9,23,24,17, </key>\r
-<key name="optimiz"> 14,10,24, </key>\r
+<key name="operation"> 7,9,23,25,14,17, </key>\r
+<key name="optimiz"> 10,25,14, </key>\r
<key name="optimization"> 11, </key>\r
-<key name="option"> 7,8,14,13,24,15,16,17,18,21, </key>\r
-<key name="optional"> 14,10,11, </key>\r
+<key name="option"> 7,8,13,25,15,16,14,17,18,21, </key>\r
+<key name="optional"> 10,11,14, </key>\r
<key name="ord"> 14, </key>\r
-<key name="ordinat"> 23,24, </key>\r
+<key name="ordinat"> 23,25, </key>\r
<key name="org"> 3, </key>\r
-<key name="orientation"> 23,24, </key>\r
-<key name="origin"> 23,24, </key>\r
+<key name="orientat"> 24,28, </key>\r
+<key name="orientation"> 23,24,25, </key>\r
+<key name="origin"> 23,24,25,28, </key>\r
<key name="original"> 0, </key>\r
<key name="originality"> 11, </key>\r
<key name="os"> 14, </key>\r
<key name="os_version"> 14, </key>\r
<key name="other"> 4,0, </key>\r
-<key name="otherwis"> 0,14,24,17, </key>\r
-<key name="out"> 10,23,25, </key>\r
+<key name="otherwis"> 0,25,14,17, </key>\r
+<key name="out"> 10,23,24,26,28, </key>\r
<key name="outlin"> 23, </key>\r
-<key name="output"> 14,2, </key>\r
-<key name="outsid"> 24,16, </key>\r
+<key name="output"> 2,14, </key>\r
+<key name="outsid"> 25,16, </key>\r
<key name="overrid"> 14, </key>\r
-<key name="own"> 14,2,11,16, </key>\r
+<key name="overridden"> 14, </key>\r
+<key name="own"> 2,11,16,14, </key>\r
<key name="p"> 15, </key>\r
-<key name="packag"> 14,15,19, </key>\r
+<key name="packag"> 15,14,19, </key>\r
<key name="pag"> 14,20, </key>\r
-<key name="pan"> 12,17,20, </key>\r
+<key name="pan"> 12,24,17,20,28, </key>\r
<key name="parallel"> 3, </key>\r
<key name="paramet"> 14,19, </key>\r
-<key name="parameter"> 3,14,24,25,18,19, </key>\r
-<key name="parent"> 24, </key>\r
-<key name="part"> 6,14,16, </key>\r
+<key name="parameter"> 3,25,26,18,19,28, </key>\r
+<key name="parent"> 25, </key>\r
+<key name="part"> 6,24,16,14,28, </key>\r
<key name="particular"> 10,17, </key>\r
-<key name="party"> 11, </key>\r
-<key name="pas"> 14, </key>\r
+<key name="party"> 11,14, </key>\r
<key name="past"> 7,16, </key>\r
<key name="patch"> 14, </key>\r
-<key name="patent"> 24, </key>\r
-<key name="path"> 14,24, </key>\r
+<key name="patent"> 25, </key>\r
+<key name="path"> 25,14, </key>\r
<key name="pc"> 3, </key>\r
-<key name="per"> 24, </key>\r
-<key name="perform"> 14,10,11,23,24, </key>\r
-<key name="performanc"> 3,9,10, </key>\r
+<key name="per"> 25, </key>\r
+<key name="perform"> 10,11,23,24,25,14,28, </key>\r
+<key name="performanc"> 3,9,10,25,14, </key>\r
+<key name="period"> 25, </key>\r
<key name="permission"> 14, </key>\r
<key name="phenomena"> 3, </key>\r
<key name="phras"> 20, </key>\r
<key name="physic"> 10, </key>\r
<key name="physical"> 3,10,11, </key>\r
-<key name="pick"> 14,24, </key>\r
+<key name="pick"> 25,14, </key>\r
<key name="pickup"> 14, </key>\r
<key name="pickup_env"> 14, </key>\r
<key name="pickup_env_flag"> 14, </key>\r
<key name="pictur"> 8, </key>\r
<key name="pid"> 22, </key>\r
<key name="piec"> 3, </key>\r
-<key name="pixel"> 24, </key>\r
-<key name="plac"> 6,14,2,16, </key>\r
-<key name="placement"> 23,24, </key>\r
-<key name="platform"> 3,4,6,0,9,14,10,2,11,15,16,17,19,22, </key>\r
+<key name="pixel"> 25, </key>\r
+<key name="plac"> 6,2,24,16,14,28, </key>\r
+<key name="placement"> 23,25, </key>\r
+<key name="plan"> 24,14, </key>\r
+<key name="platform"> 3,4,6,0,9,10,2,11,15,16,14,17,19,22, </key>\r
<key name="play"> 0, </key>\r
<key name="pleas"> 14, </key>\r
-<key name="plot"> 6,2, </key>\r
+<key name="plot"> 6,2,25, </key>\r
<key name="plot2d"> 5,18, </key>\r
<key name="plug"> 2, </key>\r
+<key name="png"> 24,28, </key>\r
<key name="po"> 14, </key>\r
-<key name="point"> 3,14,2,23,24,18, </key>\r
+<key name="point"> 3,1,2,23,24,25,14,18,28, </key>\r
<key name="pop"> 12,13,16,21, </key>\r
<key name="popup"> 12, </key>\r
<key name="port"> 15, </key>\r
<key name="portkill"> 15, </key>\r
-<key name="position"> 24,16,17,18, </key>\r
+<key name="position"> 24,25,16,17,18,28, </key>\r
<key name="positive"> 16, </key>\r
-<key name="possibility"> 3,0,14,15,25,19, </key>\r
-<key name="possibl"> 3,0,14,16,17,25,21, </key>\r
-<key name="post"> 3,10,11,24,16,17, </key>\r
+<key name="possibility"> 3,0,15,14,26,19, </key>\r
+<key name="possibl"> 3,0,16,14,17,26,21, </key>\r
+<key name="post"> 3,10,11,25,16,17,28, </key>\r
<key name="powerful"> 2, </key>\r
-<key name="pr"> 10,11, </key>\r
+<key name="pr"> 10,11,14, </key>\r
<key name="precision"> 23, </key>\r
<key name="precompil"> 14, </key>\r
-<key name="predefin"> 3,14,25, </key>\r
+<key name="predefin"> 3,14,26, </key>\r
<key name="preferabl"> 15, </key>\r
-<key name="preferenc"> 1,23,24,25,18,26,21, </key>\r
-<key name="prefix"> 14, </key>\r
+<key name="preferenc"> 1,23,25,26,18,27,21, </key>\r
<key name="preinstal"> 14, </key>\r
-<key name="preliminary"> 14, </key>\r
<key name="prerequisit"> 14, </key>\r
-<key name="pres"> 14,24,18, </key>\r
+<key name="pres"> 24,25,14,18,28, </key>\r
<key name="preselect"> 23, </key>\r
<key name="preselection"> 23, </key>\r
-<key name="present"> 23,24, </key>\r
-<key name="presentation"> 5,23,24,16,18, </key>\r
-<key name="prevent"> 24, </key>\r
-<key name="preview"> 25, </key>\r
-<key name="previou"> 14,13, </key>\r
-<key name="previous"> 14,11,13,17, </key>\r
-<key name="primitiv"> 24, </key>\r
-<key name="print"> 14,15, </key>\r
+<key name="present"> 23,25, </key>\r
+<key name="presentation"> 5,23,25,16,18,28, </key>\r
+<key name="prevent"> 25, </key>\r
+<key name="preview"> 24,25,26, </key>\r
+<key name="previou"> 13,14, </key>\r
+<key name="previous"> 11,13,25,14,17, </key>\r
+<key name="primitiv"> 25, </key>\r
+<key name="print"> 15,14, </key>\r
<key name="print_env"> 14, </key>\r
<key name="priority"> 10, </key>\r
-<key name="pro"> 3,11,24,16,17, </key>\r
+<key name="pro"> 3,11,25,16,17,28, </key>\r
<key name="probab"> 5, </key>\r
-<key name="problem"> 0,14,10, </key>\r
+<key name="problem"> 0,10,14, </key>\r
<key name="proce"> 9,14, </key>\r
-<key name="procedur"> 14,15, </key>\r
-<key name="proces"> 3,0,14,10,2,11,24,22, </key>\r
+<key name="procedur"> 15,14, </key>\r
+<key name="proces"> 3,0,10,2,11,25,14,22, </key>\r
<key name="processor"> 3,10, </key>\r
-<key name="produc"> 24, </key>\r
-<key name="product"> 14,10,15, </key>\r
+<key name="produc"> 25, </key>\r
+<key name="product"> 10,15,14, </key>\r
<key name="product_context"> 14, </key>\r
<key name="product_description"> 14, </key>\r
<key name="product_nam"> 14, </key>\r
<key name="profil"> 15, </key>\r
<key name="program"> 3,14, </key>\r
<key name="programmatic"> 10, </key>\r
-<key name="progres"> 14,24, </key>\r
-<key name="progressiv"> 24, </key>\r
-<key name="prompt"> 14,15, </key>\r
+<key name="progres"> 25,14, </key>\r
+<key name="progressiv"> 25, </key>\r
+<key name="prompt"> 15,14, </key>\r
<key name="pron"> 0, </key>\r
-<key name="prop"> 14, </key>\r
<key name="proper"> 14, </key>\r
-<key name="properti"> 8,10,11,24,18, </key>\r
-<key name="propos"> 14,2, </key>\r
-<key name="provid"> 3,7,14,10,2,11,24,15,25,19,20,22, </key>\r
+<key name="properti"> 8,10,11,25,18,28, </key>\r
+<key name="proportional"> 25, </key>\r
+<key name="propos"> 2,14, </key>\r
+<key name="provid"> 3,7,10,2,11,24,25,15,14,26,19,20,22, </key>\r
<key name="publish"> 0,17, </key>\r
<key name="pur"> 3, </key>\r
<key name="purpos"> 9,21, </key>\r
-<key name="py"> 15, </key>\r
+<key name="put"> 14, </key>\r
+<key name="py"> 15,14, </key>\r
<key name="pycontain"> 15, </key>\r
<key name="pyqt"> 14, </key>\r
+<key name="pyqtconfig"> 14, </key>\r
<key name="pyqtdir"> 14, </key>\r
-<key name="pyramid"> 24, </key>\r
-<key name="python"> 3,6,0,14,10,2,15,16,17,18, </key>\r
+<key name="pyramid"> 25, </key>\r
+<key name="python"> 3,6,0,10,2,15,16,14,17,18, </key>\r
<key name="pythonhom"> 14, </key>\r
+<key name="pythonpath"> 14, </key>\r
<key name="qglobal"> 14, </key>\r
<key name="qm"> 14, </key>\r
<key name="qt"> 14, </key>\r
<key name="qt_version_str"> 14, </key>\r
<key name="qtdir"> 14, </key>\r
-<key name="quality"> 10,23,24, </key>\r
+<key name="quality"> 10,23,25, </key>\r
<key name="quantiti"> 10, </key>\r
-<key name="question"> 14, </key>\r
<key name="quick"> 14,18,21, </key>\r
-<key name="quit"> 0,14,17,26, </key>\r
+<key name="quit"> 0,14,17,27, </key>\r
<key name="quot"> 14, </key>\r
<key name="qwt"> 14, </key>\r
+<key name="qwt_global"> 14, </key>\r
+<key name="qwt_version_str"> 14, </key>\r
<key name="qwthom"> 14, </key>\r
<key name="r"> 15, </key>\r
<key name="radio"> 14, </key>\r
-<key name="rainbow"> 24, </key>\r
-<key name="rang"> 11,24, </key>\r
+<key name="rainbow"> 25, </key>\r
+<key name="rang"> 11,25, </key>\r
<key name="rapid"> 3, </key>\r
-<key name="rat"> 24, </key>\r
+<key name="rat"> 25, </key>\r
<key name="rath"> 0, </key>\r
-<key name="ratio"> 24, </key>\r
-<key name="re"> 0,12, </key>\r
+<key name="ratio"> 25, </key>\r
+<key name="re"> 0,12,14, </key>\r
<key name="reactivity"> 10, </key>\r
-<key name="read"> 14,10,12, </key>\r
+<key name="read"> 10,12,14, </key>\r
<key name="readm"> 14, </key>\r
-<key name="real"> 24, </key>\r
+<key name="real"> 25, </key>\r
<key name="realiz"> 9, </key>\r
-<key name="reassign"> 24, </key>\r
-<key name="receiv"> 26, </key>\r
-<key name="recommend"> 14,24, </key>\r
-<key name="record"> 8,24, </key>\r
-<key name="red"> 21, </key>\r
+<key name="reason"> 14, </key>\r
+<key name="reassign"> 25, </key>\r
+<key name="receiv"> 27, </key>\r
+<key name="recommend"> 25,14, </key>\r
+<key name="record"> 8,25, </key>\r
+<key name="red"> 14,21, </key>\r
+<key name="redefin"> 28, </key>\r
<key name="redirect"> 15, </key>\r
<key name="reduc"> 10, </key>\r
-<key name="ref"> 18,26, </key>\r
+<key name="ref"> 14,18,27, </key>\r
<key name="refer"> 14, </key>\r
-<key name="referenc"> 4,12,24,18,21, </key>\r
-<key name="refin"> 10,24, </key>\r
+<key name="referenc"> 4,12,25,18,21, </key>\r
+<key name="refin"> 10,25, </key>\r
<key name="refresh"> 22, </key>\r
<key name="refreshment"> 22, </key>\r
-<key name="regim"> 24, </key>\r
+<key name="regim"> 25, </key>\r
<key name="registry"> 2,15,22, </key>\r
<key name="reinstal"> 14, </key>\r
<key name="reinstall"> 14, </key>\r
<key name="reinstallation"> 14, </key>\r
<key name="relat"> 12,20, </key>\r
-<key name="relativ"> 14,23,18, </key>\r
+<key name="relativ"> 23,14,18, </key>\r
<key name="releas"> 14, </key>\r
+<key name="release_not"> 14, </key>\r
<key name="relevant"> 12, </key>\r
<key name="reliability"> 10, </key>\r
<key name="reload"> 17, </key>\r
<key name="relocat"> 16, </key>\r
-<key name="remain"> 3, </key>\r
-<key name="remot"> 5, </key>\r
-<key name="remov"> 14,18, </key>\r
+<key name="remain"> 3,24, </key>\r
+<key name="remot"> 5,24,28, </key>\r
+<key name="remov"> 24,25,14,18, </key>\r
<key name="renam"> 17, </key>\r
-<key name="render"> 24, </key>\r
+<key name="rend"> 25, </key>\r
+<key name="render"> 25, </key>\r
<key name="reopen"> 18, </key>\r
-<key name="repeat"> 24, </key>\r
-<key name="represent"> 3,9,10,11,20, </key>\r
-<key name="representation"> 6,11,24,18, </key>\r
-<key name="representativ"> 24, </key>\r
-<key name="requir"> 14,10,13,24,17, </key>\r
+<key name="repeat"> 25, </key>\r
+<key name="represent"> 3,9,10,11,24,20,28, </key>\r
+<key name="representation"> 6,11,24,25,18, </key>\r
+<key name="representativ"> 25, </key>\r
+<key name="requir"> 10,13,25,14,17, </key>\r
<key name="requirement"> 3,10,15, </key>\r
-<key name="reset"> 14, </key>\r
-<key name="resiz"> 18, </key>\r
-<key name="resolution"> 24, </key>\r
+<key name="requisit"> 14, </key>\r
+<key name="reset"> 24,14,28, </key>\r
+<key name="resiz"> 24,18,28, </key>\r
+<key name="resolution"> 25, </key>\r
<key name="resolv"> 0, </key>\r
-<key name="resourc"> 14,2,24,15, </key>\r
-<key name="respectiv"> 24,26, </key>\r
-<key name="respective"> 24, </key>\r
+<key name="resourc"> 2,25,15,14, </key>\r
+<key name="respectiv"> 1,25,27, </key>\r
+<key name="respective"> 25, </key>\r
<key name="respond"> 3, </key>\r
<key name="responsibl"> 14, </key>\r
<key name="rest"> 18, </key>\r
-<key name="restor"> 10,17,18,26, </key>\r
-<key name="result"> 9,10,24, </key>\r
-<key name="retroactiv"> 26, </key>\r
+<key name="restart"> 14, </key>\r
+<key name="restor"> 10,24,25,17,18,27,28, </key>\r
+<key name="result"> 9,10,24,25, </key>\r
+<key name="resum"> 14, </key>\r
+<key name="retriev"> 14, </key>\r
+<key name="retroactiv"> 27, </key>\r
+<key name="return"> 24,14, </key>\r
<key name="reus"> 3, </key>\r
<key name="reusabl"> 10, </key>\r
-<key name="reversib"> 0,24, </key>\r
-<key name="right"> 6,14,12,13,24,16,17,25,18,20,21, </key>\r
+<key name="reversib"> 0,25, </key>\r
+<key name="right"> 6,12,13,25,16,14,17,26,18,20,21, </key>\r
<key name="risk"> 10, </key>\r
<key name="robustnes"> 10, </key>\r
<key name="rol"> 3, </key>\r
<key name="root"> 14, </key>\r
-<key name="rotat"> 24, </key>\r
-<key name="rotation"> 24, </key>\r
+<key name="rotat"> 24,25,28, </key>\r
+<key name="rotation"> 24,25,28, </key>\r
<key name="rul"> 14, </key>\r
-<key name="run"> 3,14,15,19,22, </key>\r
-<key name="runic"> 25, </key>\r
+<key name="run"> 3,15,14,19,22, </key>\r
+<key name="runic"> 26, </key>\r
<key name="runinstall"> 14, </key>\r
<key name="runsalom"> 15,19, </key>\r
<key name="runsalomewithport"> 19, </key>\r
-<key name="s"> 3,14,12,15, </key>\r
+<key name="s"> 3,12,15,14, </key>\r
<key name="saf"> 2, </key>\r
-<key name="salom"> 3,4,5,6,0,7,9,14,10,2,11,12,13,24,15,16,17,18,26,19,20,21,22, </key>\r
+<key name="salom"> 3,4,5,6,0,7,9,10,2,11,12,13,25,15,16,14,17,18,27,19,20,21,22, </key>\r
<key name="salome_"> 14, </key>\r
<key name="salome_modulecatalog_serv"> 19, </key>\r
<key name="salomeapp"> 15, </key>\r
-<key name="salomeapprc"> 26, </key>\r
+<key name="salomeapprc"> 27, </key>\r
<key name="salomed"> 0, </key>\r
-<key name="sam"> 6,12,24,16,17,19,22, </key>\r
-<key name="sampl"> 25, </key>\r
-<key name="sav"> 3,0,14,10,2,16,17,18,26, </key>\r
-<key name="scal"> 3,24,18, </key>\r
-<key name="scalar"> 23,24, </key>\r
-<key name="schem"> 3,14,10, </key>\r
+<key name="sam"> 6,12,25,16,14,17,19,22, </key>\r
+<key name="sampl"> 14,26, </key>\r
+<key name="sav"> 3,0,10,2,24,16,14,17,18,27, </key>\r
+<key name="scal"> 3,25,18,28, </key>\r
+<key name="scalar"> 23,25, </key>\r
+<key name="scen"> 24,28, </key>\r
+<key name="schem"> 3,10,14, </key>\r
<key name="schema"> 10, </key>\r
<key name="scientific"> 3, </key>\r
<key name="screen"> 6,15, </key>\r
-<key name="script"> 3,0,14,15,25,19, </key>\r
+<key name="script"> 3,0,15,14,26,19, </key>\r
<key name="scroll"> 8, </key>\r
-<key name="se"> 6,8,14,13,17,18,19,21, </key>\r
-<key name="search"> 4,14,13,17,20, </key>\r
-<key name="second"> 0,14,24, </key>\r
-<key name="section"> 14,16,18, </key>\r
-<key name="sectionthi"> 14, </key>\r
-<key name="sed"> 14, </key>\r
+<key name="se"> 6,8,24,13,14,17,18,19,21,28, </key>\r
+<key name="search"> 4,13,14,17,20, </key>\r
+<key name="second"> 0,25,14, </key>\r
+<key name="section"> 24,16,14,18, </key>\r
<key name="seen"> 23, </key>\r
-<key name="select"> 5,6,0,1,8,14,23,13,24,17,25,18,20, </key>\r
+<key name="select"> 5,6,0,1,8,23,24,13,25,14,17,26,18,20,28, </key>\r
<key name="selectall"> 16, </key>\r
-<key name="selection"> 2,23,24, </key>\r
+<key name="selection"> 2,23,25, </key>\r
<key name="send"> 14, </key>\r
<key name="sensitiv"> 16,21, </key>\r
-<key name="separat"> 3,14,24,16, </key>\r
+<key name="separat"> 3,25,16,14, </key>\r
<key name="serv"> 3,19, </key>\r
<key name="server"> 3,15, </key>\r
<key name="servic"> 3,14,19, </key>\r
-<key name="session"> 1,23,13,24,15,17,18,26,21,22, </key>\r
-<key name="set"> 4,0,1,8,14,10,23,24,15,16,17,18,26,21,22, </key>\r
-<key name="setting"> 14,24,16,17,18,26, </key>\r
+<key name="session"> 1,23,13,25,15,17,18,27,21,22, </key>\r
+<key name="set"> 4,0,1,8,10,23,24,25,15,16,14,17,18,27,21,22,28, </key>\r
+<key name="setting"> 25,16,14,17,18,27, </key>\r
<key name="sever"> 10, </key>\r
<key name="sh"> 14, </key>\r
-<key name="shad"> 1,23,24, </key>\r
-<key name="shap"> 24, </key>\r
+<key name="shad"> 1,23,25, </key>\r
+<key name="shap"> 24,25, </key>\r
<key name="shar"> 15, </key>\r
-<key name="shell"> 14,2,11,15, </key>\r
+<key name="shel"> 14, </key>\r
+<key name="shell"> 2,11,15,14, </key>\r
<key name="short"> 14,20, </key>\r
<key name="shot"> 6, </key>\r
<key name="should"> 9,14,17,19, </key>\r
-<key name="show"> 14, </key>\r
+<key name="show"> 24,25,14,28, </key>\r
<key name="shown"> 8,14, </key>\r
<key name="shrink"> 23, </key>\r
-<key name="sid"> 23,24, </key>\r
-<key name="signal"> 14,2, </key>\r
+<key name="sid"> 23,25,14, </key>\r
+<key name="signal"> 2,14, </key>\r
<key name="signatur"> 14, </key>\r
<key name="sigterm"> 14, </key>\r
+<key name="silent"> 14, </key>\r
+<key name="simp"> 14, </key>\r
<key name="simpl"> 3, </key>\r
<key name="simplify"> 14, </key>\r
<key name="simulat"> 3, </key>\r
<key name="simulation"> 10,11, </key>\r
-<key name="simultaneous"> 6,9,14, </key>\r
+<key name="simultaneous"> 6,9,25,14, </key>\r
<key name="sinc"> 2, </key>\r
<key name="singl"> 14, </key>\r
<key name="sip"> 14, </key>\r
<key name="sipdir"> 14, </key>\r
<key name="situation"> 3, </key>\r
-<key name="siz"> 6,23,24,16,17,25,18, </key>\r
+<key name="siz"> 6,23,25,16,17,26,18, </key>\r
<key name="skip"> 14, </key>\r
-<key name="slight"> 14, </key>\r
-<key name="slow"> 24, </key>\r
-<key name="smallest"> 24, </key>\r
+<key name="slow"> 25, </key>\r
+<key name="small"> 24,28, </key>\r
+<key name="smallest"> 25, </key>\r
<key name="smooth"> 18, </key>\r
-<key name="smoothnes"> 24, </key>\r
-<key name="so"> 3,7,14,24,15,20,21, </key>\r
+<key name="smoothnes"> 25, </key>\r
+<key name="so"> 3,7,25,15,14,20,21, </key>\r
<key name="softwar"> 3,10,11, </key>\r
<key name="solution"> 10, </key>\r
<key name="solv"> 10, </key>\r
<key name="someth"> 14, </key>\r
<key name="sort"> 18, </key>\r
<key name="sort_path"> 14, </key>\r
-<key name="sourc"> 14,10,11,15, </key>\r
-<key name="spac"> 14,23,24, </key>\r
-<key name="spacemous"> 24, </key>\r
-<key name="spe"> 24, </key>\r
-<key name="special"> 3,14,13,24,15,16,17,18, </key>\r
-<key name="specifi"> 3,24, </key>\r
-<key name="specific"> 3,0,10,15,16,26,20, </key>\r
+<key name="sourc"> 10,11,15,14, </key>\r
+<key name="spac"> 23,25,14, </key>\r
+<key name="spacemous"> 25, </key>\r
+<key name="spe"> 25, </key>\r
+<key name="special"> 3,13,25,15,16,14,17,18, </key>\r
+<key name="specifi"> 3,25, </key>\r
+<key name="specific"> 3,0,10,15,16,14,27,20, </key>\r
<key name="specification"> 11, </key>\r
<key name="specify"> 17,18,19, </key>\r
-<key name="spher"> 24, </key>\r
+<key name="spher"> 25, </key>\r
<key name="spin"> 1, </key>\r
<key name="splash"> 15, </key>\r
<key name="splin"> 18, </key>\r
<key name="split"> 6, </key>\r
-<key name="sprit"> 24, </key>\r
-<key name="stamp"> 24, </key>\r
+<key name="sprit"> 25, </key>\r
+<key name="stamp"> 25, </key>\r
<key name="standalon"> 2,15, </key>\r
-<key name="standard"> 3,5,14,2,13,24,16,17,26,19, </key>\r
+<key name="standard"> 3,5,2,13,25,16,14,17,27,19, </key>\r
<key name="standard_version"> 14, </key>\r
-<key name="start"> 6,9,14,16,18,26,19,22, </key>\r
+<key name="start"> 6,9,25,16,14,18,27,19,22, </key>\r
+<key name="start_salom"> 14, </key>\r
<key name="stat"> 0,14,17,18, </key>\r
<key name="station"> 3, </key>\r
<key name="statu"> 14, </key>\r
-<key name="step"> 1,14,10,24, </key>\r
-<key name="still"> 14, </key>\r
-<key name="stor"> 3,0,14,13,17,18,19, </key>\r
+<key name="step"> 1,10,25,14, </key>\r
+<key name="stop"> 14, </key>\r
+<key name="stor"> 3,0,13,14,17,18,19, </key>\r
<key name="str"> 14, </key>\r
-<key name="strict"> 14, </key>\r
+<key name="stretch"> 28, </key>\r
+<key name="strict"> 24,14,28, </key>\r
<key name="strong"> 14, </key>\r
-<key name="struck"> 25, </key>\r
-<key name="structur"> 3,14,10,2,13,21, </key>\r
+<key name="struck"> 26, </key>\r
+<key name="structur"> 3,10,2,13,25,14,21, </key>\r
<key name="structural"> 10, </key>\r
<key name="studi"> 5,6,7,9,10,2,13,16,17, </key>\r
-<key name="study"> 3,5,6,0,7,8,9,10,2,13,24,15,16,17,18,26,19,21,22, </key>\r
+<key name="study"> 3,5,6,0,7,8,9,10,2,13,25,15,16,17,18,27,19,21,22, </key>\r
<key name="study1"> 5, </key>\r
-<key name="styl"> 25,18, </key>\r
-<key name="sub"> 14,20, </key>\r
+<key name="stuf"> 28, </key>\r
+<key name="styl"> 26,18, </key>\r
+<key name="sub"> 24,14,20, </key>\r
<key name="submenu"> 5,16,18, </key>\r
-<key name="subset"> 25, </key>\r
-<key name="substitut"> 24, </key>\r
+<key name="subsequent"> 14, </key>\r
+<key name="subset"> 26, </key>\r
+<key name="substitut"> 25, </key>\r
<key name="successful"> 14, </key>\r
<key name="suit"> 2, </key>\r
<key name="summariz"> 14, </key>\r
-<key name="superposition"> 24, </key>\r
+<key name="superposition"> 25, </key>\r
<key name="superv"> 15, </key>\r
<key name="supervcontain"> 15, </key>\r
<key name="supervision"> 2,15,19, </key>\r
<key name="supervisor"> 11,18,19, </key>\r
<key name="supplementary"> 21,22, </key>\r
-<key name="support"> 14,10,19, </key>\r
+<key name="suppli"> 14, </key>\r
+<key name="support"> 10,14,19, </key>\r
<key name="supported_installation_mod"> 14, </key>\r
<key name="sur"> 14, </key>\r
<key name="surfac"> 23, </key>\r
-<key name="sweep"> 24, </key>\r
+<key name="sweep"> 25, </key>\r
<key name="swig"> 14, </key>\r
-<key name="switch"> 6,14,2,24, </key>\r
-<key name="system"> 3,4,14,10,12,24,20, </key>\r
-<key name="t"> 7,14,24,15,16,17,18,19, </key>\r
+<key name="switch"> 6,2,25,14, </key>\r
+<key name="symbol"> 14, </key>\r
+<key name="system"> 3,4,10,12,25,14,20, </key>\r
+<key name="t"> 7,24,25,15,16,14,17,18,19,28, </key>\r
<key name="tab"> 6,20,22, </key>\r
-<key name="tabl"> 14,25, </key>\r
+<key name="tabl"> 25,26, </key>\r
<key name="tag"> 14, </key>\r
<key name="tailor"> 10, </key>\r
<key name="tak"> 3,14, </key>\r
-<key name="taken"> 14,15, </key>\r
+<key name="taken"> 25,15,14, </key>\r
<key name="target"> 14, </key>\r
<key name="target_directory"> 14, </key>\r
<key name="target_platform"> 14, </key>\r
<key name="targetdir"> 14, </key>\r
<key name="task"> 0, </key>\r
<key name="tcl"> 14, </key>\r
+<key name="tcl_version"> 14, </key>\r
+<key name="tclconfig"> 14, </key>\r
<key name="tclhom"> 14, </key>\r
-<key name="tclsh8"> 14, </key>\r
<key name="technologi"> 3, </key>\r
<key name="technological"> 10, </key>\r
-<key name="technology"> 3,14, </key>\r
-<key name="temp"> 14, </key>\r
+<key name="technology"> 3,24, </key>\r
<key name="temp_directory"> 14, </key>\r
<key name="temp_fold"> 14, </key>\r
<key name="tempdir"> 14, </key>\r
<key name="temporary"> 14, </key>\r
<key name="temporarydiskspac"> 14, </key>\r
-<key name="tensor"> 24, </key>\r
+<key name="tensor"> 25, </key>\r
<key name="term"> 10,12,20, </key>\r
-<key name="terminal"> 14,15, </key>\r
+<key name="terminal"> 15,14, </key>\r
<key name="test"> 3,14,19, </key>\r
-<key name="text"> 14,12,20, </key>\r
-<key name="textur"> 24, </key>\r
-<key name="them"> 3,6,14,10,23,15,16,25,22, </key>\r
+<key name="text"> 12,14,20, </key>\r
+<key name="textur"> 25, </key>\r
+<key name="them"> 3,6,10,23,24,15,16,14,26,22,28, </key>\r
<key name="therefor"> 14, </key>\r
<key name="third"> 11, </key>\r
<key name="thos"> 14,18,20, </key>\r
<key name="thre"> 14, </key>\r
-<key name="threshold"> 24, </key>\r
-<key name="thu"> 3,0, </key>\r
-<key name="tim"> 3,6,0,8,14,10,24,15,17,26,19,22, </key>\r
-<key name="titl"> 14,23,24,18, </key>\r
+<key name="threshold"> 25, </key>\r
+<key name="thu"> 3,0,14, </key>\r
+<key name="tick"> 28, </key>\r
+<key name="tim"> 3,6,0,8,10,25,15,14,17,27,19,22, </key>\r
+<key name="tip"> 14, </key>\r
+<key name="titl"> 23,25,14,18, </key>\r
<key name="tk"> 14, </key>\r
+<key name="tk_version"> 14, </key>\r
+<key name="tkconfig"> 14, </key>\r
<key name="tmp"> 14, </key>\r
<key name="tmp_disk_spac"> 14, </key>\r
-<key name="togeth"> 14, </key>\r
-<key name="toggl"> 23,24,21, </key>\r
-<key name="toleranc"> 24, </key>\r
-<key name="tool"> 3,14,2,11,16,19,22, </key>\r
-<key name="toolbar"> 3,5,7,2,13,16,17, </key>\r
-<key name="toolkit"> 2, </key>\r
-<key name="top"> 5,14,2,24,16,18, </key>\r
+<key name="toggl"> 23,25,21, </key>\r
+<key name="toleranc"> 25, </key>\r
+<key name="tool"> 3,2,11,16,14,19,22, </key>\r
+<key name="toolbar"> 3,5,7,2,24,13,16,17,28, </key>\r
+<key name="toolkit"> 2,14, </key>\r
+<key name="tooltip"> 14, </key>\r
+<key name="top"> 5,2,25,16,14,18, </key>\r
<key name="topic"> 4,12,20, </key>\r
<key name="topmost"> 14, </key>\r
<key name="total"> 14, </key>\r
<key name="totality"> 3, </key>\r
<key name="touch"> 0, </key>\r
-<key name="tr"> 14, </key>\r
<key name="train"> 10, </key>\r
-<key name="translat"> 24, </key>\r
-<key name="translation"> 24, </key>\r
-<key name="transparency"> 24, </key>\r
-<key name="transparent"> 24, </key>\r
+<key name="transformation"> 24, </key>\r
+<key name="translat"> 25, </key>\r
+<key name="translation"> 25, </key>\r
+<key name="transparency"> 25, </key>\r
+<key name="transparent"> 25, </key>\r
<key name="tre"> 5,14,18,19,21, </key>\r
<key name="tri"> 14, </key>\r
-<key name="trihedron"> 18, </key>\r
+<key name="triangl"> 24,28, </key>\r
+<key name="trihedron"> 24,18,28, </key>\r
<key name="trolltech"> 14, </key>\r
+<key name="troubl"> 14, </key>\r
<key name="tru"> 14, </key>\r
<key name="try"> 8,14,17,19, </key>\r
<key name="try_exist"> 14, </key>\r
<key name="try_nativ"> 14, </key>\r
<key name="try_preinstal"> 14, </key>\r
-<key name="twic"> 24, </key>\r
-<key name="two"> 6,14,12,24,17,19, </key>\r
-<key name="typ"> 0,14,23,24,25,18,19, </key>\r
+<key name="turn"> 14, </key>\r
+<key name="twic"> 25, </key>\r
+<key name="two"> 6,12,25,14,17,19, </key>\r
+<key name="typ"> 0,23,25,14,26,18,19, </key>\r
<key name="typical"> 19, </key>\r
<key name="u"> 18, </key>\r
<key name="ultimat"> 3, </key>\r
-<key name="uncheck"> 24,16, </key>\r
-<key name="underlin"> 25, </key>\r
+<key name="uncheck"> 24,25,16,28, </key>\r
+<key name="underlin"> 26, </key>\r
+<key name="unfortunare"> 14, </key>\r
<key name="unfortunate"> 14, </key>\r
<key name="uniqu"> 14, </key>\r
-<key name="unit"> 24, </key>\r
+<key name="unit"> 25, </key>\r
<key name="unix"> 4, </key>\r
<key name="unload"> 13,17, </key>\r
<key name="unnecessary"> 14, </key>\r
+<key name="unpack"> 14, </key>\r
<key name="unselect"> 14, </key>\r
<key name="unus"> 0, </key>\r
-<key name="up"> 14,10,12,13,16,17,25,21, </key>\r
-<key name="updat"> 23,24,16,17,19, </key>\r
+<key name="up"> 10,12,13,16,14,17,26,21, </key>\r
+<key name="updat"> 23,25,16,17,19, </key>\r
<key name="upload"> 2,16, </key>\r
-<key name="us"> 3,0,1,8,9,14,10,2,11,23,24,15,16,17,25,18,26,19,20,21,22, </key>\r
+<key name="us"> 3,0,1,8,9,10,2,11,23,24,25,15,16,14,17,26,18,27,19,20,21,22,28, </key>\r
<key name="usability"> 2, </key>\r
-<key name="usag"> 14,24, </key>\r
+<key name="usag"> 25,14, </key>\r
<key name="user"> 8,19, </key>\r
<key name="usr"> 14, </key>\r
<key name="usual"> 14, </key>\r
<key name="v"> 14,18, </key>\r
<key name="valid"> 18, </key>\r
<key name="validation"> 3, </key>\r
-<key name="valu"> 1,14,23,24,18,21, </key>\r
-<key name="variabl"> 14,15, </key>\r
+<key name="valu"> 1,23,25,14,18,21, </key>\r
+<key name="variabl"> 15,14, </key>\r
<key name="variety"> 4,12, </key>\r
-<key name="variou"> 14,11, </key>\r
+<key name="variou"> 11,14, </key>\r
<key name="ve"> 14,18, </key>\r
-<key name="vector"> 24, </key>\r
-<key name="ver"> 14, </key>\r
-<key name="ver_major"> 14, </key>\r
-<key name="ver_minor"> 14, </key>\r
-<key name="version"> 6,14,2,16,26,19, </key>\r
-<key name="vertical"> 6,23,24,18, </key>\r
-<key name="very"> 14,10,2,24,16, </key>\r
-<key name="view"> 3,5,8,14,2,23,12,24,16,18,20,22, </key>\r
+<key name="vector"> 1,25, </key>\r
+<key name="version"> 6,2,16,14,27,19, </key>\r
+<key name="vertic"> 1, </key>\r
+<key name="vertical"> 6,23,25,18, </key>\r
+<key name="very"> 10,2,25,16,14, </key>\r
+<key name="via"> 24,14,28, </key>\r
+<key name="view"> 3,5,8,2,23,12,24,25,16,14,18,20,22,28, </key>\r
<key name="viewer"> 5,6,2,11,16,17,18, </key>\r
+<key name="visibl"> 24,28, </key>\r
<key name="visual"> 11, </key>\r
-<key name="visualisation"> 1,24, </key>\r
-<key name="visualiz"> 10,24, </key>\r
+<key name="visualisation"> 1,25, </key>\r
+<key name="visualiz"> 10,24,25,28, </key>\r
<key name="visualization"> 9,10,2,11,16, </key>\r
-<key name="vtk"> 5,6,14,2,18, </key>\r
+<key name="vtk"> 5,6,2,14,18,28, </key>\r
<key name="vtkhom"> 14, </key>\r
<key name="wait"> 14, </key>\r
-<key name="want"> 6,14,12, </key>\r
-<key name="warn"> 8,14,24, </key>\r
-<key name="way"> 14,11,19, </key>\r
+<key name="want"> 6,12,14, </key>\r
+<key name="warn"> 8,25,14, </key>\r
+<key name="way"> 11,14,19, </key>\r
<key name="web"> 4, </key>\r
<key name="welcom"> 4,10, </key>\r
-<key name="what"> 3,14,10,12,26,21, </key>\r
+<key name="what"> 3,10,12,14,27,21, </key>\r
<key name="whenev"> 23,18, </key>\r
<key name="wherev"> 6, </key>\r
-<key name="wheth"> 14, </key>\r
<key name="whil"> 3, </key>\r
-<key name="whol"> 24,18,26, </key>\r
+<key name="whol"> 25,18,27, </key>\r
<key name="whos"> 23, </key>\r
-<key name="wid"> 4,11,25, </key>\r
+<key name="why"> 14, </key>\r
+<key name="wid"> 4,11,26, </key>\r
<key name="widget"> 11, </key>\r
-<key name="width"> 23,24, </key>\r
-<key name="will"> 4,5,0,8,14,23,13,24,15,16,17,25,18,26,19,21,22, </key>\r
-<key name="window"> 4,5,6,9,14,2,12,24,15,16,17,25,18,22, </key>\r
+<key name="width"> 23,25, </key>\r
+<key name="will"> 4,5,0,8,23,24,13,25,15,16,14,17,26,18,27,19,21,22, </key>\r
+<key name="window"> 4,5,6,9,2,12,25,15,16,14,17,26,18,22, </key>\r
+<key name="wir"> 1, </key>\r
<key name="wirefram"> 1,23, </key>\r
-<key name="wish"> 6, </key>\r
-<key name="wish8"> 14, </key>\r
+<key name="wish"> 6,24,14,28, </key>\r
<key name="within"> 3,5,7,22, </key>\r
-<key name="without"> 3,0,14,24,15,26, </key>\r
+<key name="without"> 3,0,25,15,14,27, </key>\r
<key name="wizard"> 14, </key>\r
-<key name="won"> 7,14,15, </key>\r
+<key name="won"> 7,15, </key>\r
<key name="word"> 20, </key>\r
-<key name="work"> 3,6,0,9,14,11,24,16,17, </key>\r
-<key name="would"> 14,16,17,19, </key>\r
-<key name="writ"> 10,17, </key>\r
+<key name="work"> 3,6,0,9,11,24,25,16,14,17, </key>\r
+<key name="would"> 16,17,19, </key>\r
+<key name="writ"> 10,14,17, </key>\r
<key name="written"> 3,17, </key>\r
<key name="wrong"> 14, </key>\r
<key name="www"> 3, </key>\r
-<key name="x"> 23,24,15, </key>\r
-<key name="xml"> 14,15,19, </key>\r
+<key name="x"> 23,25,15, </key>\r
+<key name="xml"> 15,14,19, </key>\r
<key name="xterm"> 15, </key>\r
<key name="xxxxx"> 14, </key>\r
-<key name="y"> 14,23,24, </key>\r
+<key name="xy"> 25, </key>\r
+<key name="y"> 23,25, </key>\r
<key name="year"> 10, </key>\r
<key name="yes"> 8,14, </key>\r
<key name="yet"> 14,18, </key>\r
-<key name="your"> 5,6,0,7,8,14,23,24,15,17,18,26,19, </key>\r
-<key name="yourselv"> 25, </key>\r
+<key name="your"> 5,6,0,7,8,23,25,15,14,17,18,27,19, </key>\r
+<key name="yourselv"> 26, </key>\r
<key name="z"> 15, </key>\r
-<key name="zon"> 5,6,24, </key>\r
-<key name="zoom"> 24,17, </key>\r
+<key name="zon"> 5,6,25, </key>\r
+<key name="zoom"> 24,25,17,28, </key>\r
\r
</ftswdata> \r
<item name="Using Object Browser" url="kernel/using_object_browser.htm" />\r
<item name="Using Registry tool" url="kernel/using_registry.htm" />\r
<item name="Using Catalog Generator" url="kernel/using_catalog_generator.htm" />\r
+ <book name="Viewers" >\r
+ <item name="OCC 3D Viewer" url="occ_3d_viewer.htm" />\r
+ <item name="VTK 3D Viewer" url="vtk_3d_viewer.htm" />\r
+ </book>\r
<book name="Setting Preferences" >\r
<item name="Setting Preferences" url="setting_preferences.htm" />\r
<item name="Select Color and Font" url="select_color_and_font.htm" />\r
--- /dev/null
+# 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
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+EXTRA_DIST+=GUI
+
+doxygen=@DOXYGEN@
+
+usr_docs:
+ cd ./GUI; \
+ echo "Running doxygen in directory: "`pwd`; \
+ $(doxygen) ./doxyfile;
+
+docs: usr_docs
+
+clean-local:
+ cd ./GUI; \
+ rm -fr `ls | grep -v "doxyfile"`
+ rm -fr `ls | grep -vE "Makefile|GUI"`
+
+install-data-local: usr_docs
+ mkdir -p $(docdir)/gui
+ cp -rf GUI $(docdir)/gui
+ -find $(PWD) -name CVS -prune -exec rm -rf {} \;
+
+uninstall-local:
+ rm -rf $(docdir)/gui/GUI
+
+docguidir=$(docdir)/gui/GUI
+
+nodist_docgui_DATA= GUI/doxyfile
+GUI/doxyfile: GUI/doxyfile.in
+EXTRA_DIST+= GUI/doxyfile.in
\ No newline at end of file
+++ /dev/null
-# 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=../../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-@COMMENCE@
-
-usr_docs:
- cp -fr $(srcdir)/GUI ./
- -find $(PWD) -name CVS -prune -exec rm -rf {} \;
-
-docs: usr_docs
-
-clean:
- rm -fr `ls | grep -v "Makefile"`
-
-distclean: clean
- rm -fr GUI
-
-install:
- mkdir -p $(docdir)/gui
- cp -rf GUI $(docdir)/gui
- -find $(PWD) -name CVS -prune -exec rm -rf {} \;
-
-uninstall:
- rm -rf $(docdir)/gui/GUI
font-size: smaller
}
-BODY {
- background: url(sources/bg_salome.gif)
+BODY { background: #FFFFFF
}
+/* BODY {
+ background: url(sources/bg_salome.gif)
+} */
+
div.tabs {
text-align: justify;
font-weight: bold;
--- /dev/null
+# 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
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+EXTRA_DIST+=GUI
+
+dev_docs:
+ cp -fr $(srcdir)/GUI ./INPUT; \
+ cp -f ./GUI/doxyfile ./INPUT; \
+ cd INPUT; \
+ sed 's|../../../share/salome|$(top_srcdir)|' ./doxyfile > ./doxyfile1; \
+ sed 's|../../build/salome|$(top_builddir)|' ./doxyfile1 > ./doxyfile2; \
+ mv -f doxyfile2 doxyfile1; \
+ echo "DOXYGEN SUPPORT PYTHON - @DOXYGEN_WITH_PYTHON@"; \
+ if( test "x@DOXYGEN_WITH_PYTHON@" = "xyes"); then \
+ sed 's|python_extension_must_be_here|*.py|' ./doxyfile1 > ./doxyfile2; \
+ mv -f doxyfile2 doxyfile1; \
+ $(DOXYGEN) -u ./doxyfile1; \
+ 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
+
+doctuidir=$(docdir)/tui/GUI
+
+nodist_doctui_DATA= GUI/doxyfile
+EXTRA_DIST+= GUI/doxyfile.in
+++ /dev/null
-# 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
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG
+# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+#
+# This Makefile is responsible of generating the client and server
+# implementation of IDL interfaces for both C++ and python usage.
+# The building process of the C++ files is in charge of each source
+# package and then is not manage here.
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+BASEIDL_FILES= SalomeApp_Engine.idl
+
+EXTRA_DIST+= $(BASEIDL_FILES)
+
+# This variable defines the files to be installed
+salomeidl_DATA = $(BASEIDL_FILES)
+
+# GUI idl common library
+lib_LTLIBRARIES = libSalomeIDLGUI.la
+
+# Sources built from idl files
+nodist_libSalomeIDLGUI_la_SOURCES= SalomeApp_EngineSK.cc
+
+# header files must be exported: other modules have to use this library
+nodist_salomeinclude_HEADERS= $(BASEIDL_FILES:%.idl=%.hh)
+
+libSalomeIDLGUI_la_CPPFLAGS =\
+ -I$(top_builddir)/salome_adm/unix \
+ -I$(top_builddir)/idl \
+ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @KERNEL_CXXFLAGS@
+libSalomeIDLGUI_la_LDFLAGS = -no-undefined -version-info=0:0:0
+libSalomeIDLGUI_la_LIBADD = @CORBA_LIBS@
+
+# These variables defines the building process of CORBA files
+OMNIORB_IDL = @OMNIORB_IDL@
+OMNIORB_IDLCXXFLAGS = @OMNIORB_IDLCXXFLAGS@
+OMNIORB_IDLPYFLAGS = @OMNIORB_IDLPYFLAGS@ -I$(top_builddir)/idl/salome -I$(KERNEL_ROOT_DIR)/idl/salome
+IDLCXXFLAGS = -bcxx @IDLCXXFLAGS@ -I$(top_builddir)/idl/salome -I$(KERNEL_ROOT_DIR)/idl/salome -I$(top_builddir)/salome_adm/unix
+IDLPYFLAGS = @IDLPYFLAGS@ -I$(KERNEL_ROOT_DIR)/idl/salome
+
+# potential problem on parallel make on the following - multiple outputs
+SUFFIXES = .idl .hh SK.cc
+.idlSK.cc:
+ $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
+.idl.hh:
+ $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $<
+
+install-exec-local: $(BASEIDL_FILES:%=$(top_srcdir)/idl/%)
+ $(INSTALL) -d $(pkgpythondir)
+ ls $^ | while read file; do \
+ $(OMNIORB_IDL) $(IDLPYFLAGS) -C$(pkgpythondir) $$file ; \
+ done
+
+# uninstall-local removes too much, but it works in distcheck
+uninstall-local:
+ rm -rf $(pkgpythondir)/*
+
+mostlyclean-local:
+ -rm -f *.hh *.cc .depidl
+
+# we use cpp to generate dependencies between idl files.
+# option x c tells the preprocessor to consider idl as a c file.
+# if an idl is modified, all idl dependencies are rebuilt
+
+.depidl: $(BASEIDL_FILES)
+ @echo "" > $@
+ @for dep in $^ dummy; do \
+ if [ $$dep != "dummy" ]; then \
+ echo Building dependencies for $$dep; \
+ $(CPP) $(C_DEPEND_FLAG) -x c -I$(srcdir) -I$(KERNEL_ROOT_DIR)/idl/salome $$dep 2>/dev/null | \
+ sed 's/\.o/\SK.cc/' >>$@; \
+ fi; \
+ done ;
+
+-include .depidl
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG
+# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# -* Makefile *-
+#
+# Author : Guillaume Boulant (CSSI)
+# Module : KERNEL
+# $Header$
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+#
+# ===============================================================
+# Files to be installed
+# ===============================================================
+#
+
+DEPRECATED_FILES=\
+plot2d_settings.png \
+view_fitall.png \
+cascade.png \
+plot2d_fitarea.png \
+view_reset.png \
+save.png \
+view_back.png \
+plot2d_linear_y.png \
+plot2d_legend.png \
+paste.png \
+plot2d_fitall.png \
+view_bottom.png \
+plot2d_log_y.png \
+plot2d_log.png \
+view_triedre.png \
+view_glpan.png \
+new.png \
+copy.png \
+plot2d_linear.png \
+reset.png \
+plot2d_points.png \
+view_front.png \
+view_rotate.png \
+open.png \
+close.png \
+view_fitarea.png \
+view_top.png \
+view_camera_dump.png \
+plot2d_pan.png \
+view_left.png \
+view_zoom.png \
+view_right.png \
+plot2d_lines.png \
+plot2d_splines.png \
+plot2d_zoom.png \
+view_pan.png \
+print.png \
+help.png
+
+dist_salomeres_DATA=\
+default.png \
+uc_new.png \
+uc_add.png \
+select1.png \
+dl_delete.png \
+dl_moveup.png \
+home.xpm \
+forward.xpm \
+Tools_en.xml \
+plot2d_dump.png \
+uc_clear.png \
+dl_movedown.png \
+back.xpm \
+uc_del.png \
+uc_current.png \
+tile.png \
+dl_insert.png \
+channel.cfg \
+$(DEPRECATED_FILES)
+
+EXTRA_DIST+= Tools_fr.xml
#include <TDF_Delta.hxx>
#include <TDF_ListIteratorOfDeltaList.hxx>
+#include <Standard_Failure.hxx>
#include <Standard_ErrorHandler.hxx>
/*!
if ( app && !app->stdApp().IsNull() )
{
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
TColStd_SequenceOfExtendedString formats;
- app->stdApp()->Formats( formats );
+ app->stdApp()->Formats( formats );
if ( !formats.IsEmpty() )
app->stdApp()->NewDocument( formats.First(), myStdDoc );
}
bool status = false;
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
status = app->Open( CAF_Tools::toExtString( fname ), myStdDoc ) == CDF_RS_OK;
}
catch ( Standard_Failure ) {
bool status = false;
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
if ( save )
status = app->Save( stdDoc() ) == CDF_SS_OK;
else
bool res = true;
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
if ( myStdDoc->HasOpenCommand() )
myStdDoc->AbortCommand();
bool res = true;
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
myStdDoc->AbortCommand();
- update();
+ update();
}
catch ( Standard_Failure ) {
res = false;
bool res = true;
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
myStdDoc->CommitCommand();
if ( canUndo() )
{
Handle(TDF_Delta) d = myStdDoc->GetUndos().Last();
- if ( !d.IsNull() )
+ if ( !d.IsNull() )
d->SetName( CAF_Tools::toExtString( name ) );
}
}
*/
bool CAF_Study::undo()
{
- if ( myStdDoc.IsNull() )
+ if ( myStdDoc.IsNull() )
return false;
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
myStdDoc->Undo();
undoModified(); /* decrement modification counter */
}
catch ( Standard_Failure ) {
- SUIT_MessageBox::error1( application()->desktop(), tr( "ERR_ERROR" ),
- tr( "ERR_DOC_UNDO" ), tr ( "BUT_OK" ) );
- return false;
- }
+ SUIT_MessageBox::error1(application()->desktop(), tr( "ERR_ERROR" ),
+ tr( "ERR_DOC_UNDO" ), tr ( "BUT_OK" ));
+ return false;
+ }
return true;
}
*/
bool CAF_Study::redo()
{
- if ( myStdDoc.IsNull() )
+ if ( myStdDoc.IsNull() )
return false;
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
myStdDoc->Redo();
doModified(); /* increment modification counter */
}
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : caf
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libcaf.la
+
+salomeinclude_HEADERS= \
+ CAF.h \
+ CAF_Application.h \
+ CAF_Operation.h \
+ CAF_Study.h \
+ CAF_Tools.h
+
+dist_libcaf_la_SOURCES= \
+ CAF_Application.cxx \
+ CAF_Operation.cxx \
+ CAF_Study.cxx \
+ CAF_Tools.cxx
+
+MOC_FILES= \
+ CAF_Application_moc.cxx \
+ CAF_Operation_moc.cxx \
+ CAF_Study_moc.cxx
+nodist_libcaf_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA = \
+ resources/redo.png \
+ resources/undo.png
+
+nodist_salomeres_DATA = \
+ CAF_images.qm \
+ CAF_msg_en.qm
+
+libcaf_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) -I${QTDIR}/src/kernel -I$(QTDIR)/mkspecs/linux-g++ \
+ -I$(srcdir)/../STD -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+libcaf_la_LDFLAGS=$(QT_MT_LIBS) $(CAS_OCAF) $(CAS_OCAFVIS)
+libcaf_la_LIBADD=../STD/libstd.la ../SUIT/libsuit.la
+
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : caf
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= CAF.h \
- CAF_Application.h \
- CAF_Operation.h \
- CAF_Study.h \
- CAF_Tools.h
-
-# .po files to transform in .qm
-PO_FILES = CAF_images.po \
- CAF_msg_en.po
-
-# Libraries targets
-LIB = libcaf.la
-
-LIB_SRC= CAF_Application.cxx \
- CAF_Operation.cxx \
- CAF_Study.cxx \
- CAF_Tools.cxx
-
-LIB_MOC = \
- CAF_Application.h \
- CAF_Operation.h \
- CAF_Study.h
-
-RESOURCES_FILES = \
-redo.png \
-undo.png
-
-
-CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) -I${QTDIR}/src/kernel -I$(QTDIR)/mkspecs/linux-g++
-
-LDFLAGS+=$(QT_MT_LIBS) $(CAS_OCAF) $(CAS_OCAFVIS)
-LIBS+= -lstd -lsuit
-
-@CONCLUDE@
-
-
-
-
-
QString modTitle = resMgr->stringValue( *it, QString( "name" ), QString::null );
if ( modTitle.isEmpty() )
- continue;
+ {
+ printf( "****************************************************************\n" );
+ printf( "* Warning: %s not found in resources.\n", (*it).latin1() );
+ printf( "* Module will not be available\n" );
+ printf( "****************************************************************\n" );
+ continue;
+ }
QString modLibrary = resMgr->stringValue( *it, QString( "library" ), QString::null ).stripWhiteSpace();
if ( !modLibrary.isEmpty() )
if ( desktop() && desktop()->isShown() )
SUIT_MessageBox::warn1( desktop(), tr( "Warning" ), tr( "Modules list is empty" ), tr( "&OK" ) );
else
- qWarning( tr( "Modules list is empty" ).latin1() );
+ {
+ printf( "****************************************************************\n" );
+ printf( "* Warning: modules list is empty.\n" );
+ printf( "****************************************************************\n" );
+ }
}
}
void CAM_Module::initialize( CAM_Application* app )
{
myApp = app;
- if (myApp) {
+ if ( myApp )
+ {
SUIT_Session* aSession = SUIT_Session::session();
- connect(aSession, SIGNAL( applicationClosed( SUIT_Application* ) ),
- this, SLOT( onApplicationClosed( SUIT_Application* ) ));
+ connect( aSession, SIGNAL( applicationClosed( SUIT_Application* ) ),
+ this, SLOT( onApplicationClosed( SUIT_Application* ) ) );
+
+ connect( myApp, SIGNAL( infoChanged( QString ) ), this, SLOT( onInfoChanged( QString ) ) );
}
}
{
}
+/*!Return true if module is active.*/
+bool CAM_Module::isActiveModule() const
+{
+ return application() ? application()->activeModule() == this : false;
+}
+
+/*!
+ Put the message into the status bar of the desktop. Message will be displayed
+ during specified \amscec milliseconds. If parameter \amsec is negative then
+ message will be persistently displayed when module is active.
+*/
+void CAM_Module::putInfo( const QString& msg, const int msec )
+{
+ if ( application() )
+ application()->putInfo( msg, msec );
+
+ if ( msec < 0 )
+ myInfo = msg;
+}
+
+/*!
+ Restore persistently displayed info string when previos information status string erasing
+ if module is active.
+*/
+void CAM_Module::onInfoChanged( QString txt )
+{
+ if ( txt.isEmpty() && isActiveModule() && !myInfo.isEmpty() && application() )
+ application()->putInfo( myInfo );
+}
+
+
+
/*!Public slot, nullify application pointer if the application was closed.*/
void CAM_Module::onApplicationClosed( SUIT_Application* theApp )
{
CAM_DataModel* dm = it.current()->dataModel();
if( it.current() == this && !camStudy->containsDataModel( dm ) )
{
- if( prev )
- camStudy->insertDataModel( it.current()->dataModel(), prev );
+ if ( prev )
+ camStudy->insertDataModel( it.current()->dataModel(), prev );
else
- camStudy->insertDataModel( it.current()->dataModel(), 0 );
+ camStudy->insertDataModel( it.current()->dataModel(), 0 );
}
prev = dm;
}
virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& title ) {};
virtual void updateCommandsStatus() {};
+ virtual void putInfo( const QString&, const int = -1 );
+
+ bool isActiveModule() const;
+
/** @name Set Menu Shown*/
//@{
virtual void setMenuShown( const bool );
virtual void onApplicationClosed( SUIT_Application* );
+private slots:
+ void onInfoChanged( QString );
+
protected:
virtual CAM_DataModel* createDataModel();
CAM_Application* myApp;
QString myName;
QPixmap myIcon;
+ QString myInfo;
CAM_DataModel* myDataModel;
QMap<int, QAction*> myActionMap;
#pragma warning( default: 4251 )
#endif
-extern "C" {
+extern "C"
+{
typedef CAM_Module* (*GET_MODULE_FUNC)();
}
openDataModel( studyName(), dm );
else // no, just need to update data model's connection to study tree
//(some application may want to show model's root in a study tree even if a model is empty)
- {
dm->create( this );
- updateModelRoot( dm );
- }
+ updateModelRoot( dm );
}
/*! \retval false*/
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : CAM
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libCAM.la
+
+salomeinclude_HEADERS= \
+ CAM_Application.h \
+ CAM_DataModel.h \
+ CAM_DataObject.h \
+ CAM.h \
+ CAM_Module.h \
+ CAM_Study.h \
+ CAM_RootObject.h
+
+dist_libCAM_la_SOURCES= \
+ CAM_Application.cxx \
+ CAM_DataModel.cxx \
+ CAM_DataObject.cxx \
+ CAM_Module.cxx \
+ CAM_Study.cxx \
+ CAM_RootObject.cxx
+
+MOC_FILES= \
+ CAM_Application_moc.cxx \
+ CAM_Module_moc.cxx \
+ CAM_Study_moc.cxx \
+ CAM_DataModel_moc.cxx
+nodist_libCAM_la_SOURCES= $(MOC_FILES)
+
+nodist_salomeres_DATA=CAM_msg_en.qm
+
+libCAM_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../STD -I$(srcdir)/../Qtx
+libCAM_la_LDFLAGS=$(QT_MT_LIBS)
+libCAM_la_LIBS=../SUIT/libsuit.la ../STD/libstd.la
+
+# what is that?
+#LDFLAGSFORBIN= -lSUITApp
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : CAM
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-EXPORT_HEADERS= CAM_Application.h \
- CAM_DataModel.h \
- CAM_DataObject.h \
- CAM.h \
- CAM_Module.h \
- CAM_Study.h \
- CAM_RootObject.h
-
-PO_FILES = CAM_msg_en.po
-
-LIB = libCAM.la
-
-LIB_SRC= CAM_Application.cxx \
- CAM_DataModel.cxx \
- CAM_DataObject.cxx \
- CAM_Module.cxx \
- CAM_Study.cxx \
- CAM_RootObject.cxx
-
-LIB_MOC = CAM_Application.h \
- CAM_Module.h \
- CAM_Study.h \
- CAM_DataModel.h
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-
-LIBS+= -lsuit -lstd
-LDFLAGSFORBIN= -lSUITApp
-
-@CONCLUDE@
-
-
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _CASCatch_HeaderFile
+#define _CASCatch_HeaderFile
+
+#include <Standard_Failure.hxx>
+#include <Standard_ErrorHandler.hxx>
+
+
+#ifdef try
+# undef try
+#endif
+
+#ifdef catch
+# undef catch
+#endif
+
+#ifdef NO_CXX_EXCEPTION
+# if defined(DO_ABORT)
+# define CASCatch_TRY \
+ Standard_ErrorHandler _Function; \
+ K_SETJMP = 1 ; \
+ if(DoesNotAbort(_Function))
+# else //If DO_ABORT is not defined
+# define CASCatch_TRY \
+ Standard_ErrorHandler _Function; \
+ if(DoesNotAbort(_Function))
+# endif //DO_ABORT
+# define CASCatch_CATCH(Error) \
+ else if(_Function.Catches(STANDARD_TYPE(Error)))
+#else
+# define CASCatch_TRY try
+# define CASCatch_CATCH catch
+#endif //NO_CXX_EXCEPTION
+
+
+#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "CASCatch_CatchSignals.hxx"
+
+#include "CASCatch_Failure.hxx"
+#include "CASCatch_ErrorHandler.hxx"
+#include <TCollection_AsciiString.hxx>
+
+#define MAX_HANDLER_NUMBER 6
+
+
+//================================================================================
+/*! Public -
+ * \brief creates a CASCatch_CatchSignals
+ */
+//================================================================================
+CASCatch_CatchSignals::CASCatch_CatchSignals()
+ :myIsActivated(Standard_False)
+{
+
+ Standard_Integer i = 0;
+ for(; i<=MAX_HANDLER_NUMBER; i++)
+ mySigStates[i] = NULL;
+}
+
+#ifndef WNT
+
+//================================ UNIX part ==================================================
+
+#include <OSD.hxx>
+#include <OSD_WhoAmI.hxx>
+#include <OSD_SIGHUP.hxx>
+#include <OSD_SIGINT.hxx>
+#include <OSD_SIGQUIT.hxx>
+#include <OSD_SIGILL.hxx>
+#include <OSD_SIGKILL.hxx>
+#include <OSD_SIGBUS.hxx>
+#include <OSD_SIGSEGV.hxx>
+#include <OSD_SIGSYS.hxx>
+#ifndef LIN
+#include <exception.h>
+#endif
+
+//==============================
+typedef void (ACT_SIGIO_HANDLER)(void) ;
+
+ACT_SIGIO_HANDLER *ADR_ACT_SIGIO_HANDLER = NULL ;
+
+typedef void (* SIG_PFV) (int);
+
+#ifdef SUN
+# include <floatingpoint.h>
+#endif
+
+#ifdef SOLARIS
+# include <floatingpoint.h>
+# include <sys/machsig.h>
+# include <stdlib.h>
+# include <stdio.h>
+#endif
+
+#include <signal.h>
+#include <sys/signal.h>
+
+#ifdef LIN
+# include <stdlib.h>
+# include <stdio.h>
+#else
+# ifdef SA_SIGINFO
+# ifndef AIX
+# include <sys/siginfo.h>
+# endif
+# endif
+#endif
+
+
+#ifdef IRIX
+# include <sigfpe.h>
+# include <sys/siginfo.h>
+#endif
+
+
+//================================================================================
+/*! Private -
+ * \brief universal handler for signals
+ */
+//================================================================================
+static void Handler(const OSD_Signals theSig, const OSD_Signals)
+{
+ sigset_t set;
+ sigemptyset(&set);
+ sigaddset(&set, theSig);
+ sigprocmask(SIG_UNBLOCK, &set, NULL) ;
+
+ TCollection_AsciiString aMessage(theSig);
+ aMessage+=" signal detected";
+
+ CASCatch_Failure::Raise(aMessage.ToCString());
+}
+
+
+#ifdef SA_SIGINFO
+//================================================================================
+/*! Private -
+ * \brief handler for SIGSEGV signal
+ */
+//================================================================================
+static void SegvHandler(const OSD_Signals, const Standard_Address, const Standard_Address)
+{
+ sigset_t set;
+ sigemptyset(&set);
+ sigaddset(&set, SIGSEGV);
+ sigprocmask (SIG_UNBLOCK, &set, NULL);
+
+ CASCatch_Failure::Raise("SIGSEGV detected");
+}
+#endif
+
+
+//================================================================================
+/*! Public -
+ * \brief activates a signals handling
+ */
+//================================================================================
+void CASCatch_CatchSignals::Activate()
+{
+ if(myIsActivated) return;
+
+ struct sigaction act;
+
+ Standard_Integer i = 0;
+ for(; i<=MAX_HANDLER_NUMBER; i++)
+ mySigStates[i] = new struct sigaction(); //Initialize structures
+
+ int stat;
+ act.sa_handler = (SIG_PFV) &Handler ;
+ sigemptyset(&act.sa_mask) ;
+
+
+ stat = sigaction(SIGHUP,&act,(struct sigaction*)mySigStates[0]); // ...... hangup
+ stat = sigaction(SIGFPE,&act,(struct sigaction*) mySigStates[1]); // ...... floating point exception
+ stat = sigaction(SIGINT,&act,(struct sigaction*)mySigStates[2]); // ...... interrupt
+ stat = sigaction(SIGQUIT,&act,(struct sigaction*)mySigStates[3]); // ...... quit
+ stat = sigaction(SIGBUS,&act,(struct sigaction*)mySigStates[4]); // ...... bus error
+ stat = sigaction(SIGILL,&act,(struct sigaction*)mySigStates[5]); // ...... illegal instruction
+
+#ifdef SA_RESTART
+ act.sa_flags = SA_RESTART ;
+#else
+ act.sa_flags = 0 ;
+#endif
+ act.sa_handler = (SIG_PFV) &SegvHandler ;
+
+#ifdef SA_SIGINFO // OSF,SOLARIS,IRIX
+ act.sa_flags = act.sa_flags | SA_SIGINFO ;
+# ifdef SOLARIS
+ act.sa_sigaction = (void(*)(int, siginfo_t *, void*)) &SegvHandler ;
+# endif
+#endif
+
+ stat = sigaction( SIGSEGV , &act , (struct sigaction*)mySigStates[6]); // ...... segmentation violation
+
+ myIsActivated = Standard_True;
+}
+
+
+//================================================================================
+/*! Public -
+ * \brief deactivates a signals handling
+ */
+//================================================================================
+void CASCatch_CatchSignals::Deactivate()
+{
+ if(!myIsActivated) return;
+
+ struct sigaction oact;
+ int stat;
+
+ stat = sigaction(SIGHUP,(struct sigaction*)mySigStates[0],&oact); // ...... hangup
+ stat = sigaction(SIGFPE,(struct sigaction*)mySigStates[1],&oact); // ...... floating point exception
+ stat = sigaction(SIGINT,(struct sigaction*)mySigStates[2],&oact); // ...... interrupt
+ stat = sigaction(SIGQUIT,(struct sigaction*)mySigStates[3],&oact); // ...... quit
+ stat = sigaction(SIGBUS,(struct sigaction*)mySigStates[4],&oact); // ...... bus error
+ stat = sigaction(SIGILL,(struct sigaction*)mySigStates[5],&oact); // ...... illegal instruction
+ stat = sigaction(SIGSEGV,(struct sigaction*)mySigStates[6],&oact); // ...... segmentation violation
+
+
+ Standard_Integer i = 0;
+ for(; i<=MAX_HANDLER_NUMBER; i++)
+ delete (struct sigaction*)mySigStates[i];
+
+ myIsActivated = Standard_False;
+}
+
+
+
+#else
+//====================================== WNT part ====================================================
+#include <OSD_WNT_1.hxx>
+
+#include <process.h>
+#include <signal.h>
+#include <float.h>
+
+#define _OSD_FPX ( _EM_DENORMAL | _EM_INEXACT | _EM_UNDERFLOW | _EM_ZERODIVIDE | _EM_OVERFLOW) //Mask these exceptions
+
+//================================================================================
+/*! Private -
+ * \brief handler for unexpected exceptions
+ */
+//================================================================================
+static Standard_Integer WntHandler(const Standard_Address theExceptionInfo)
+{
+ LPEXCEPTION_POINTERS lpXP = ( LPEXCEPTION_POINTERS )theExceptionInfo;
+ DWORD dwExceptionCode = lpXP -> ExceptionRecord -> ExceptionCode;
+
+ TCollection_AsciiString aMessage((Standard_Integer)dwExceptionCode);
+ aMessage+=" Exception code - unexpected exception";
+
+ CASCatch_Failure::Raise(aMessage.ToCString());
+
+ return EXCEPTION_EXECUTE_HANDLER;
+}
+
+void SIGWntHandler(int , int ) ;
+static void (*SIGWNTHANDLER)(int) = ( void (*)(int) ) ( &SIGWntHandler ) ;
+
+
+//================================================================================
+/*! Private -
+ * \brief handler for signals
+ */
+//================================================================================
+static void SIGWntHandler(const int signum , const int theCode)
+{
+
+ void (*OLDSIGWNTHANDLER)(int) ;
+ switch( signum ) {
+ case SIGFPE :
+ _fpreset() ;
+ _clearfp() ;
+ _controlfp ( _OSD_FPX, _MCW_EM );
+ OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER );
+
+ if(theCode == _FPE_UNDERFLOW || theCode == _FPE_INEXACT) return;
+ CASCatch_Failure::Raise ("Floating point error");
+ break;
+ case SIGSEGV :
+ OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER );
+ CASCatch_Failure::Raise("Access violation");
+ break;
+ case SIGILL :
+ OLDSIGWNTHANDLER = signal( signum , SIGWNTHANDLER );
+ CASCatch_Failure::Raise("Illegal instruction" );
+ break;
+ }
+}
+
+
+//================================================================================
+/*! Public -
+ * \brief activates a signals handling
+ */
+//================================================================================
+void CASCatch_CatchSignals::Activate()
+{
+ if(myIsActivated) return;
+
+ mySigStates[0] = SetUnhandledExceptionFilter (( LPTOP_LEVEL_EXCEPTION_FILTER )&WntHandler);
+
+ myFloatOpWord = _controlfp(0, 0);
+ _controlfp ( _OSD_FPX, _MCW_EM ); //Enable floating point exceptions
+
+ mySigStates[1] = signal( SIGSEGV , SIGWNTHANDLER );
+ mySigStates[2] = signal( SIGFPE , SIGWNTHANDLER );
+ mySigStates[3] = signal( SIGILL , SIGWNTHANDLER );
+
+ myIsActivated = Standard_True;
+}
+
+//================================================================================
+/*! Public -
+ * \brief deactivates a signals handling
+ */
+//================================================================================
+void CASCatch_CatchSignals::Deactivate()
+{
+ if(!myIsActivated) return;
+
+ SetUnhandledExceptionFilter (( LPTOP_LEVEL_EXCEPTION_FILTER )mySigStates[0]);
+
+ _controlfp ( myFloatOpWord, _MCW_EM );
+
+ signal( SIGSEGV , ( void (*)(int) )mySigStates[1]);
+ signal( SIGFPE , ( void (*)(int) )mySigStates[2]);
+ signal( SIGILL , ( void (*)(int) )mySigStates[3]);
+
+ Standard_Integer i = 0;
+ for(; i<=MAX_HANDLER_NUMBER; i++)
+ mySigStates[i] = NULL;
+
+ myIsActivated = Standard_False;
+}
+
+#endif
+
+//================================================================================
+/*! Private -
+ * \brief deactivates a signals handling
+ */
+//================================================================================
+void CASCatch_CatchSignals::Destroy()
+{
+ if(myIsActivated) Deactivate();
+}
+
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _CASCatch_CatchSignals_HeaderFile
+#define _CASCatch_CatchSignals_HeaderFile
+
+#include <Standard.hxx>
+
+/*!
+ * \class CASCatch_CatchSignals
+ * \brief This class controls an exception handling
+ *
+ */
+class CASCatch_CatchSignals {
+
+public:
+
+ // Methods PUBLIC
+ //
+Standard_EXPORT CASCatch_CatchSignals();
+Standard_EXPORT void Destroy() ;
+~CASCatch_CatchSignals() { Destroy(); }
+Standard_EXPORT void Activate() ;
+Standard_EXPORT void Deactivate() ;
+
+private:
+
+/*!\var mySigStates[7], private
+ * \brief stores signals' handler functions
+ */
+Standard_Address mySigStates[7];
+
+/*!\var myFloatOpWord
+ * \brief stores a float operation word, private
+ */
+Standard_Integer myFloatOpWord;
+
+/*!\var myIsActivated
+ * \brief stores a flag whether a catcher is activated, private]
+ */
+Standard_Boolean myIsActivated;
+
+};
+
+
+#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifdef NO_CXX_EXCEPTION
+
+#include "CASCatch_ErrorHandler.hxx"
+
+// During setjmp()/longjmp() K_SETJMP_CASCatch is non zero (try)
+// So if there is an abort request and if K_SETJMP_CASCatch is non zero, the abort
+// request will be ignored. If the abort request do a raise during a setjmp
+// or a longjmp, there will be a "terminating SEGV" impossible to handle.
+
+
+Standard_EXPORT int K_SETJMP_CASCatch = 0 ;
+
+static Handle(CASCatch_Failure) GlbError; //Last caught Error, Null if there is no error
+
+static CASCatch_ErrorHandler* Top = 0; //The top of the Errors Stack
+
+//=======================================================================
+//function : CASCatch_ErrorHandler
+//purpose : Constructor
+//=======================================================================
+CASCatch_ErrorHandler::CASCatch_ErrorHandler ()
+{
+ Previous = Top;
+ Top = this;
+ CaughtError.Nullify();
+ GlbError.Nullify();
+}
+
+//=======================================================================
+//function : ~CASCatch_ErrorHandler
+//purpose : Destructor : Delete the ErrorHandler and Abort if there is a 'Error'.
+//=======================================================================
+CASCatch_ErrorHandler::~CASCatch_ErrorHandler()
+{
+ Top = Top->Previous;
+ if( !GlbError.IsNull() ) Abort();
+}
+
+//=======================================================================
+//function : Abort: make a longjmp to the saved Context.
+//purpose : Abort if there is a non null 'Error'
+//=======================================================================
+void CASCatch_ErrorHandler::Abort ()
+{
+ //==== Check if can do the "longjmp" =======================================
+ if(Top == NULL || Top->Label == NULL) {
+ cout << "*** Abort *** an exception was raised, but no catch was found." << endl;
+ cout << "\t... The exception is:" << GlbError;
+ exit(1);
+ }
+
+#ifdef DO_ABORT
+ if ( K_SETJMP_CASCatch )
+ cout << "Recursive abort ===> Terminating SEGV ..." << endl ;
+ K_SETJMP_CASCatch = 1 ;
+#endif
+
+ longjmp(Top->Label, Standard_True);
+}
+
+//=======================================================================
+//function : Catches
+//purpose : If there is a 'Error', and it is in good type
+// returns True and clean 'Error', else returns False.
+//=======================================================================
+Standard_Boolean CASCatch_ErrorHandler::Catches
+ (const Handle(Standard_Type)& AType)
+{
+#ifdef DO_ABORT
+ K_SETJMP_CASCatch = 0 ;
+#endif
+ if(GlbError.IsNull())
+ return Standard_False;
+
+ if(GlbError->IsKind(AType)){
+ CaughtError = GlbError;
+ GlbError.Nullify();
+ return Standard_True;
+ } else {
+ return Standard_False;
+ }
+}
+
+//=======================================================================
+//function : LastCaughtError
+//purpose :
+//=======================================================================
+Handle(CASCatch_Failure) CASCatch_ErrorHandler::LastCaughtError()
+{
+ return Top->CaughtError;
+}
+
+//=======================================================================
+//function : Error
+//purpose :
+//=======================================================================
+void CASCatch_ErrorHandler::Error(const Handle(CASCatch_Failure)& aError)
+{
+ GlbError = aError;
+}
+
+#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef _CASCatch_ErrorHandler_HeaderFile
+#define _CASCatch_ErrorHandler_HeaderFile
+
+#include "CASCatch_Failure.hxx"
+
+#include <stdlib.h>
+#include <setjmp.h>
+
+
+extern int K_SETJMP_CASCatch ;
+
+/*!
+ * \class CASCatch_ErrorHandler
+ * \brief This class is an exception handler, private
+ *
+ */
+class CASCatch_ErrorHandler
+{
+ friend class CASCatch_Failure; // To execute the raise exception.
+
+ public:
+
+ Standard_EXPORT CASCatch_ErrorHandler();
+ Standard_EXPORT ~CASCatch_ErrorHandler();
+ Standard_EXPORT Standard_Boolean Catches (const Handle(Standard_Type)&);
+
+ private:
+ Standard_EXPORT static void Abort();
+ Standard_EXPORT static void Error(const Handle(CASCatch_Failure)&);
+ Standard_EXPORT static Handle(CASCatch_Failure) LastCaughtError();
+
+ //==== The fields ===========================================================
+ private:
+ CASCatch_ErrorHandler* Previous;
+ Handle(CASCatch_Failure) CaughtError;
+
+ public:
+ jmp_buf Label;
+
+};
+
+#undef CASCatch_TRY
+#define CASCatch_TRY try
+
+#undef CASCatch_CATCH
+#define CASCatch_CATCH catch
+
+
+#ifdef NO_CXX_EXCEPTION
+# undef CASCatch_TRY
+# undef CASCatch_CATCH
+
+# if defined(DO_ABORT)
+
+# define DoesNotAbort_CASCatch(aHandler) !(K_SETJMP_CASCatch = setjmp(aHandler.Label))
+
+# define CASCatch_TRY CASCatch_ErrorHandler _Function; \
+ K_SETJMP_CASCatch = 1 ; \
+ if(DoesNotAbort_CASCatch(_Function))
+
+# else //If DO_ABORT is not defined
+# define DoesNotAbort_CASCatch(aHandler) !setjmp(aHandler.Label)
+
+# define CASCatch_TRY CASCatch_ErrorHandler _Function; \
+ if(DoesNotAbort_CASCatch(_Function))
+# endif //DO_ABORT
+
+
+# define CASCatch_CATCH(Error) else if(_Function.Catches(STANDARD_TYPE(Error)))
+#endif //NO_CXX_EXCEPTION
+
+#endif //_CASCatch_ErrorHandler_HeaderFile
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "CASCatch_Failure.hxx"
+#include "CASCatch_ErrorHandler.hxx"
+#include <Standard_TypeMismatch.hxx>
+#include <Standard_Type.hxx>
+#include <string.h>
+
+IMPLEMENT_STANDARD_HANDLE( CASCatch_Failure, Standard_Transient )
+IMPLEMENT_STANDARD_RTTIEXT( CASCatch_Failure, Standard_Transient )
+
+
+#ifndef NO_CXX_EXCEPTION
+static Handle(CASCatch_Failure) RaisedError;
+#endif
+
+//================================================================================
+/*! Public -
+ * \brief creates a CASCatch_Failure
+ */
+//================================================================================
+CASCatch_Failure::CASCatch_Failure () { myMessage = "Signal detected";}
+
+
+//================================================================================
+/*! Public -
+ * \brief creates a CASCatch_Failure with a message
+ * \param an exception message
+ */
+//================================================================================
+CASCatch_Failure::CASCatch_Failure (const Standard_CString AString)
+{
+ if(AString) {
+ myMessage = new Standard_Character[strlen(AString) + 1];
+ strcpy(myMessage,AString);
+ }
+}
+
+//================================================================================
+/*! Public -
+ * \brief returns the last caught exception
+ */
+//================================================================================
+Handle(CASCatch_Failure) CASCatch_Failure::Caught()
+{
+#ifdef NO_CXX_EXCEPTION
+ return CASCatch_ErrorHandler::LastCaughtError();
+#else
+ return RaisedError ;
+#endif
+}
+
+//================================================================================
+/*! Public -
+ * \brief raises a CASCatch_Failure exception
+ * \param an exception message
+ */
+//================================================================================
+void CASCatch_Failure::Raise (const Standard_CString AString)
+{
+ Handle(CASCatch_Failure) E = new CASCatch_Failure() ;
+ E->Reraise (AString) ;
+}
+
+
+//================================================================================
+/*! Public -
+ * \brief re-raises a CASCatch_Failure exception
+ * \param an exception message
+ */
+//================================================================================
+void CASCatch_Failure::Reraise (const Standard_CString AString)
+{
+ if(AString){
+ myMessage = new Standard_Character[strlen(AString) + 1];
+ strcpy(myMessage,AString);
+ }
+
+#ifdef NO_CXX_EXCEPTION
+ CASCatch_ErrorHandler::Error(this) ;
+ CASCatch_ErrorHandler::Abort();
+#else
+ RaisedError = this ;
+ Throw() ;
+#endif
+}
+
+//================================================================================
+/*! Public -
+ * \brief returns an exception message
+ */
+//================================================================================
+Standard_CString CASCatch_Failure::GetError() const
+{
+ return myMessage;
+}
+
+//================================================================================
+/*! Public -
+ * \brief Is called when using standard C++ exceptions
+ */
+//================================================================================
+void CASCatch_Failure::Throw() const
+{
+#ifndef NO_CXX_EXCEPTION
+ throw CASCatch_Failure() ;
+#endif
+}
+
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef _CASCATCH_FAILURE_HeaderFile
+#define _CASCATCH_FAILURE_HeaderFile
+
+#include <Standard_Transient.hxx>
+#include <Standard_DefineHandle.hxx>
+DEFINE_STANDARD_HANDLE( CASCatch_Failure, Standard_Transient )
+
+#include <Standard.hxx>
+
+/*!
+ * \class CASCatch_Failure
+ * \brief This class presents an exception to be thrown
+ *
+ */
+class CASCatch_Failure : public Standard_Transient
+{
+
+public:
+
+Standard_EXPORT CASCatch_Failure();
+Standard_EXPORT CASCatch_Failure(const Standard_CString aString);
+Standard_EXPORT void Reraise(const Standard_CString aMessage) ;
+Standard_EXPORT Standard_CString GetError() const;
+Standard_EXPORT static Handle_CASCatch_Failure Caught() ;
+Standard_EXPORT static void Raise(const Standard_CString aMessage = "") ;
+Standard_EXPORT virtual void Throw() const;public:
+
+public:
+
+DEFINE_STANDARD_RTTI( CASCatch_Failure )
+
+private:
+/*!\var myMessage
+ * \brief stores an exception message
+ */
+Standard_CString myMessage;
+
+};
+
+
+#endif
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA, EDF R&D, LEG
+# PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Sergey RUIN (OCN)
+# Module : SALOME
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+
+salomeinclude_HEADERS = CASCatch.hxx \
+ CASCatch_CatchSignals.hxx \
+ CASCatch_ErrorHandler.hxx \
+ CASCatch_Failure.hxx
+
+lib_LTLIBRARIES = libCASCatch.la
+libCASCatch_la_SOURCES = \
+ CASCatch_CatchSignals.cxx \
+ CASCatch_ErrorHandler.cxx \
+ CASCatch_Failure.cxx
+
+COMMON_CPPFLAGS = \
+ @CAS_CPPFLAGS@ @CAS_CXXFLAGS@
+
+libCASCatch_la_CPPFLAGS = $(COMMON_CPPFLAGS)
+libCASCatch_la_LIBADD = $(CAS_KERNEL)
IMPLEMENT_STANDARD_HANDLE(DDS_DicGroup, MMgt_TShared)
IMPLEMENT_STANDARD_RTTIEXT(DDS_DicGroup, MMgt_TShared)
+/*!
+ \class DDS_DicGroup
+
+ This class to provide set of DDS_DicItem objects from one component.
+*/
+
+/*!
+ Constructor. Create the group with name \aname.
+*/
DDS_DicGroup::DDS_DicGroup( const TCollection_AsciiString& name )
: MMgt_TShared(),
myName( name ),
{
}
+/*!
+ Copy constructor.
+*/
DDS_DicGroup::DDS_DicGroup( const DDS_DicGroup& )
{
}
+/*!
+ Get the name of group (component).
+*/
TCollection_AsciiString DDS_DicGroup::GetName() const
{
return myName;
}
+/*!
+ Returns the names list of defined unit systems.
+ Parameter \atheSystems will contains the sequence of string names.
+*/
void DDS_DicGroup::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystemSeq ) const
{
theSystemSeq.Clear();
}
}
+/*!
+ Returns the label of unit system \aname. If unit system not found then empty string returned.
+*/
TCollection_ExtendedString DDS_DicGroup::GetUnitSystemLabel( const TCollection_AsciiString& name ) const
{
TCollection_ExtendedString aLabel;
return aLabel;
}
+/*!
+ Gets the name of active unit system.
+*/
TCollection_AsciiString DDS_DicGroup::GetActiveUnitSystem() const
{
return myActiveSystem;
}
+/*!
+ Sets the name of active unit system.
+*/
void DDS_DicGroup::SetActiveUnitSystem( const TCollection_AsciiString& theSystem )
{
if ( myUnitSystem.IsBound( theSystem ) )
myActiveSystem = theSystem;
}
+/*!
+ Assignment operator.
+*/
void DDS_DicGroup::operator=( const DDS_DicGroup& )
{
}
+/*!
+ Fill the internal data structures from XML parsed structures. Internal.
+*/
void DDS_DicGroup::FillDataMap( const LDOM_Element& theComponentData, const LDOM_Element& theDocElement )
{
TCollection_AsciiString aCompName = theComponentData.getAttribute( DDS_Dictionary::KeyWord( "COMPONENT_NAME" ) );
}
/*!
- Returns DicItem with all attached data
+ Gets dictionary item with specified identifier \atheID.
+ If dictionary item not found then null handle returned.
*/
-
Handle(DDS_DicItem) DDS_DicGroup::GetDicItem( const TCollection_AsciiString& theID ) const
{
Handle(DDS_DicItem) aDicItem;
IMPLEMENT_STANDARD_HANDLE(DDS_DicItem, MMgt_TShared)
IMPLEMENT_STANDARD_RTTIEXT(DDS_DicItem, MMgt_TShared)
+/*!
+ \class DDS_DicItem
+
+ This class to provide information about datum (phisical characteristic parameter).
+*/
+
+/*!
+ Constructor. Creates the instance of empty dictionary item.
+*/
DDS_DicItem::DDS_DicItem()
: myType( 0 ),
myDefValue( 0 ),
{
}
+/*!
+ Copy constructor. Internal.
+*/
DDS_DicItem::DDS_DicItem( const DDS_DicItem& )
{
}
+/*!
+ Assignment operator. Internal.
+*/
void DDS_DicItem::operator=( const DDS_DicItem& )
{
}
+/*!
+ Gets the identifier of parameter.
+*/
TCollection_AsciiString DDS_DicItem::GetId() const
{
return myId;
}
+/*!
+ Gets the type of parameter.
+*/
DDS_DicItem::Type DDS_DicItem::GetType() const
{
return (DDS_DicItem::Type)myType;
}
+/*!
+ Gets the label of the parameter.
+*/
TCollection_ExtendedString DDS_DicItem::GetLabel() const
{
return myLabel;
}
+/*!
+ Gets the filter (regular expression) for the parameter values.
+*/
TCollection_ExtendedString DDS_DicItem::GetFilter() const
{
return myFilter;
}
+/*!
+ Gets the Required attribute of the parameter.
+*/
TCollection_ExtendedString DDS_DicItem::GetRequired() const
{
return myRequired;
}
+/*!
+ Gets the wrong value warning level of the parameter.
+*/
DDS_MsgType DDS_DicItem::GetWarningLevel() const
{
return (DDS_MsgType)myWarnLevel;
}
+/*!
+ Gets the long description of the parameter.
+*/
TCollection_ExtendedString DDS_DicItem::GetLongDescription() const
{
return myLongDescr;
}
+/*!
+ Gets the short description of the parameter.
+*/
TCollection_ExtendedString DDS_DicItem::GetShortDescription() const
{
return myShortDescr;
}
+/*!
+ Gets the name of component - owner of parameter.
+*/
TCollection_AsciiString DDS_DicItem::GetComponent() const
{
TCollection_AsciiString aCompName;
return aCompName;
}
+/*!
+ Gets the parameter unit of measure for active unit system.
+*/
TCollection_AsciiString DDS_DicItem::GetUnits() const
{
return GetUnits( GetActiveUnitSystem() );
}
+/*!
+ Gets the parameter unit of measure for specified unit system \atheSystem.
+ If specified unit system doesn't exist then empty string returned.
+*/
TCollection_AsciiString DDS_DicItem::GetUnits( const UnitSystem& theSystem ) const
{
TCollection_AsciiString anUnits;
return anUnits;
}
+/*!
+ Gets the minimum value of parameter for active unit system.
+ Returned value converted to SI.
+*/
Standard_Real DDS_DicItem::GetMinValue() const
{
return GetMinValue( GetActiveUnitSystem() );
}
+/*!
+ Gets the minimum value of parameter for specified unit system \atheSystem.
+ Returned value converted to SI.
+*/
Standard_Real DDS_DicItem::GetMinValue( const UnitSystem& theUnitsSystem ) const
{
return FromSI( myMin, theUnitsSystem );
}
+/*!
+ Gets the maximum value of parameter for active unit system.
+ Returned value converted to SI.
+*/
Standard_Real DDS_DicItem::GetMaxValue() const
{
return GetMaxValue( GetActiveUnitSystem() );
}
+/*!
+ Gets the maximum value of parameter for specified unit system \atheSystem.
+ Returned value converted to SI.
+*/
Standard_Real DDS_DicItem::GetMaxValue( const UnitSystem& theUnitsSystem ) const
{
return FromSI( myMax, theUnitsSystem );
}
+/*!
+ Gets the precision (number of digit after decimal point) of parameter for active unit system.
+*/
Standard_Integer DDS_DicItem::GetPrecision() const
{
return GetPrecision( GetActiveUnitSystem() );
}
+/*!
+ Gets the precision (number of digit after decimal point) of parameter for specified
+ unit system \atheSystem. If specified unit system doesn't exist then zero returned.
+*/
Standard_Integer DDS_DicItem::GetPrecision( const UnitSystem& theSystem ) const
{
Standard_Integer aRes = 0;
return aRes;
}
+/*!
+ Gets the default value of parameter for active unit system. Default value returned as string.
+ If type of value is numeric (Float or Integer) and default value defined then returned number
+ converted to SI.
+*/
TCollection_ExtendedString DDS_DicItem::GetDefaultValue() const
{
return GetDefaultValue( GetActiveUnitSystem() );
}
+/*!
+ Gets the default value of parameter for specified unit system \atheSystem. Default value returned
+ as string. If type of value is numeric (Float or Integer) and default value defined then returned
+ number converted to SI.
+*/
TCollection_ExtendedString DDS_DicItem::GetDefaultValue( const UnitSystem& theSystem ) const
{
if ( !myDefString.Length() )
return aStr;
}
+/*!
+ Gets the format string of parameter for active unit system. If argument \atheCanonical
+ is true then format string will be reduced to sprintf() specification (without extra
+ non standard qualifiers).
+*/
TCollection_AsciiString DDS_DicItem::GetFormat( const Standard_Boolean theCanonical ) const
{
return GetFormat( GetActiveUnitSystem(), theCanonical );
}
+/*!
+ Gets the format string of parameter for specified unit system \atheSystem. If argument
+ \atheCanonical is true then format string will be reduced to sprintf() specification
+ (without extra non standard qualifiers).
+*/
TCollection_AsciiString DDS_DicItem::GetFormat( const UnitSystem& theSystem,
const Standard_Boolean theCanonical ) const
{
}
/*!
- Access valueList:name of the parameter. This string is void if the list is
- not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue
+ Gets name of a list referenced by the parameter. This string is empty if the list
+ refernce is not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue
*/
TCollection_ExtendedString DDS_DicItem::GetNameOfValues() const
{
}
/*!
- Access valueList of the parameter. This sequence is empty if the list is
- not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue
+ Gets item names and item ids of a list referenced by the parameter. This sequences is empty if
+ the list reference is not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue
*/
Standard_Boolean DDS_DicItem::GetListOfValues( Handle(TColStd_HArray1OfExtendedString)& theStrings,
Handle(TColStd_HArray1OfInteger)& theIntegers ) const
}
/*!
- Access valueList of the parameter. This sequence is empty if the list is not
- defined - then use other properties: Type, DefaultValue, MaxValue, MinValue
+ Gets item names, item ids and item icons of a list referenced by the parameter. This sequences is empty
+ if the list reference is not defined - then use other properties: Type, DefaultValue, MaxValue, MinValue
*/
Standard_Boolean DDS_DicItem::GetListOfValues( Handle(TColStd_HArray1OfExtendedString)& theStrings,
Handle(TColStd_HArray1OfInteger)& theIntegers,
return !theIntegers.IsNull() && !theStrings.IsNull() && !theIcons.IsNull();
}
+
+/*!
+ Gets special values of the parameter.
+*/
Standard_Boolean DDS_DicItem::GetSpecialValues( TColStd_MapOfReal& theMap ) const
{
theMap.Clear();
}
/*!
- Returns min value of lateral zooming
+ Gets minimum value of lateral zooming
*/
Standard_Real DDS_DicItem::GetMinZoom() const
{
}
/*!
- Returns Max Value of lateral zooming
+ Gets maximum value of lateral zooming
*/
Standard_Real DDS_DicItem::GetMaxZoom() const
{
}
/*!
- Get Order of lateral zooming
+ Gets order of lateral zooming
*/
Standard_Real DDS_DicItem::GetZoomOrder() const
{
return myZoomOrder;
}
+/*!
+ Convert value \atheVal to default SI units according to active unit system.
+*/
Standard_Real DDS_DicItem::ToSI( const Standard_Real theVal ) const
{
return ToSI( theVal, GetActiveUnitSystem() );
}
+/*!
+ Convert value \atheVal from default SI units according to active unit system.
+*/
Standard_Real DDS_DicItem::FromSI( const Standard_Real theVal ) const
{
return FromSI( theVal, GetActiveUnitSystem() );
}
/*!
- Convert value to default SI units according to current units
+ Convert value to default SI units according to unit system \atheUnitsSystem.
*/
Standard_Real DDS_DicItem::ToSI( const Standard_Real theVal, const UnitSystem& theUnitsSystem ) const
{
}
/*!
- Convert value from default SI units according to current units
+ Convert value from default SI units according to unit system \atheUnitsSystem.
*/
Standard_Real DDS_DicItem::FromSI( const Standard_Real theVal, const UnitSystem& theUnitsSystem ) const
{
}
/*!
- Returns 'true' if specified data exist.
+ Returns 'true' if data specified by \aflag exist.
*/
Standard_Boolean DDS_DicItem::HasData( const Standard_Integer flag ) const
{
}
/*!
- Parse record in XML file and retrieve information relevant for this data dic item
+ Returns options for specified name \aname. If option not found then empty string returned.
+*/
+TCollection_ExtendedString DDS_DicItem::GetOption( const TCollection_AsciiString& name ) const
+{
+ TCollection_ExtendedString res;
+ if ( myOptions.IsBound( name ) )
+ res = myOptions.Find( name );
+ return res;
+}
+
+/*!
+ Returns names list of existing options in the specified sequence \anames.
+ If list not empty retunrs 'true' otherwise 'false'.
+*/
+Standard_Boolean DDS_DicItem::GetOptionNames( TColStd_SequenceOfAsciiString& names ) const
+{
+ names.Clear();
+
+ for ( OptionsMap::Iterator it( myOptions ); it.More(); it.Next() )
+ names.Append( it.Key() );
+
+ return !names.IsEmpty();
+}
+
+
+/*!
+ Parse record in XML file and retrieve information relevant for this dictionary item
*/
void DDS_DicItem::FillDataMap( TCollection_AsciiString theID, const LDOM_Element& theDatum,
const LDOM_Element& theCompElement, const LDOM_Element& theDocElement,
}
}
+ // Quantity::Options
+ LDOM_Element anOpt = theDatum.GetChildByTagName( DDS_Dictionary::KeyWord( "OPTIONS" ) );
+ if ( !anOpt.isNull() )
+ {
+ LDOM_NodeList anOptions = anOpt.getElementsByTagName( DDS_Dictionary::KeyWord( "OPTION" ) );
+ for ( Standard_Integer oi = 0; oi < anOptions.getLength(); oi++ )
+ {
+ LDOM_Node node = anOptions.item( oi );
+ if ( node.getNodeType() != LDOM_Node::ELEMENT_NODE )
+ continue;
+
+ LDOM_Element& elem = (LDOM_Element&)node;
+ TCollection_AsciiString name = elem.getAttribute( DDS_Dictionary::KeyWord( "OPTION_NAME" ) );
+
+ TCollection_ExtendedString value;
+ const LDOM_Node aNode = elem.getFirstChild();
+ LDOM_Text anOptTxt( (const LDOM_Text&)(aNode) );
+ if ( !anOptTxt.isNull() )
+ value = anOptTxt.getData();
+
+ if ( !name.IsEmpty() && value.Length() && !myOptions.IsBound( name ) )
+ myOptions.Bind( name, value );
+ }
+ }
+
NCollection_DataMap<UnitSystem, Handle(Units_Dimensions)> aDimMap;
for ( NCollection_DataMap<UnitSystem, UnitData>::Iterator it( myUnitData ); it.More(); it.Next() )
}
/*!
- Prepares three formants for each unit systems
+ Prepares formats for each unit systems
*/
void DDS_DicItem::PrepareFormats( const TCollection_AsciiString& theFormat )
{
}
}
+/*!
+ Split the string \atheStr by spaces and returns substrings in array \aaRes.
+*/
void DDS_DicItem::Split( const TCollection_AsciiString& theStr, Handle(TColStd_HArray1OfExtendedString)& aRes )
{
aRes.Nullify();
}
}
+/*!
+ Returns unit structure for given unit system \asys.
+*/
DDS_DicItem::UnitData* DDS_DicItem::GetUnitData( const UnitSystem& sys ) const
{
UnitData* unit = 0;
return unit;
}
+/*!
+ Gets the active unit system.
+*/
DDS_DicItem::UnitSystem DDS_DicItem::GetActiveUnitSystem() const
{
UnitSystem aSystem;
class DDS_DicItem : public MMgt_TShared
{
public:
- enum Type { String, Float, Integer, List, Unknown };
- enum Data { MinValue = 0x01, MaxValue = 0x02, DefaultValue = 0x04 };
+ /*! Enum describes type of datum value */
+ enum Type
+ {
+ String, //!< String type of value
+ Float, //!< Real (double) numeric type of value
+ Integer, //!< Integer (int) numeric type of value
+ List, //!< List type of enumerable value
+ Unknown //!< Unknown or undefined type of value
+ };
+
+ /*! Enum describes the flags for existance of domain data */
+ enum Data
+ {
+ MinValue = 0x01, //!< Flag of minimum value definition existence
+ MaxValue = 0x02, //!< Flag of maximum value definition existence
+ DefaultValue = 0x04 //!< Flag of default value definition existence
+ };
// This struct is intended for map of Format, Units, Precision and Scale
struct UnitData
DDS_DicItem();
Standard_EXPORT TCollection_AsciiString GetId() const;
- // to access Type of the parameter
-
Standard_EXPORT DDS_DicItem::Type GetType() const;
- // to access Type of the parameter
-
Standard_EXPORT TCollection_ExtendedString GetLabel() const;
- // to access Label (name) of the parameter
-
Standard_EXPORT TCollection_ExtendedString GetFilter() const;
- // to access filter (regexp) for the parameter values
-
Standard_EXPORT TCollection_ExtendedString GetRequired() const;
- // to access Required of the parameter
-
Standard_EXPORT DDS_MsgType GetWarningLevel() const;
- // to access wrong value warning level of the parameter
-
Standard_EXPORT TCollection_ExtendedString GetLongDescription() const;
- // to access Long Description of the parameter
-
Standard_EXPORT TCollection_ExtendedString GetShortDescription() const;
- // to access Short Description of the parameter
-
Standard_EXPORT TCollection_AsciiString GetComponent() const;
Standard_EXPORT TCollection_AsciiString GetUnits() const;
Standard_EXPORT TCollection_AsciiString GetUnits( const UnitSystem& ) const;
- // returns units for indicated unit systems
Standard_EXPORT TCollection_ExtendedString GetDefaultValue() const;
Standard_EXPORT TCollection_ExtendedString GetDefaultValue( const UnitSystem& ) const;
- // to access Default Value of the parameter
Standard_EXPORT Standard_Real GetMinValue() const;
Standard_EXPORT Standard_Real GetMinValue( const UnitSystem& ) const;
- // get Min Value of the parameter, either in specified unit system or in internal units (basic SI)
Standard_EXPORT Standard_Real GetMaxValue() const;
Standard_EXPORT Standard_Real GetMaxValue( const UnitSystem& ) const;
- // get Max Value of the parameter, either in specified unit system or in internal units (basic SI)
Standard_EXPORT Standard_Integer GetPrecision() const;
Standard_EXPORT Standard_Integer GetPrecision( const UnitSystem& ) const;
- // returns precision for indicated unit systems
Standard_EXPORT TCollection_AsciiString GetFormat( const Standard_Boolean = Standard_True ) const;
Standard_EXPORT TCollection_AsciiString GetFormat( const UnitSystem&,
const Standard_Boolean = Standard_True ) const;
- // returns format for indicated unit systems
-
Standard_EXPORT TCollection_ExtendedString GetNameOfValues() const;
- // to access valueList:name of the parameter.
- // This string is void if the list is not defined - then use other properties:
- // Type, DefaultValue, MaxValue, MinValue
-
Standard_EXPORT Standard_Boolean GetListOfValues( Handle(TColStd_HArray1OfExtendedString)&,
Handle(TColStd_HArray1OfInteger)& ) const;
- // to access valueList of the parameter
- // This sequence is empty if the list not defined - then use other properties:
- // Type, DefaultValue, MaxValue, MinValue
-
Standard_EXPORT Standard_Boolean GetListOfValues( Handle(TColStd_HArray1OfExtendedString)&,
Handle(TColStd_HArray1OfInteger)&,
Handle(TColStd_HArray1OfExtendedString)& ) const;
- // to access valueList of the parameter
- // This sequence is empty if the list not defined - then use other properties:
- // Type, DefaultValue, MaxValue, MinValue
-
Standard_EXPORT Standard_Boolean GetSpecialValues( TColStd_MapOfReal& ) const;
- // get values from specVal
Standard_EXPORT Standard_Real GetMinZoom() const;
- // get Min Value of lateral zooming
-
Standard_EXPORT Standard_Real GetMaxZoom() const;
- // get Max Value of lateral zooming
-
Standard_EXPORT Standard_Real GetZoomOrder() const;
- // get Order of lateral zooming
- Standard_EXPORT Standard_Real ToSI( const Standard_Real ) const;
- Standard_EXPORT Standard_Real FromSI( const Standard_Real ) const;
+ Standard_EXPORT Standard_Real ToSI( const Standard_Real ) const;
+ Standard_EXPORT Standard_Real FromSI( const Standard_Real ) const;
- Standard_EXPORT Standard_Real ToSI( const Standard_Real, const UnitSystem& ) const;
- Standard_EXPORT Standard_Real FromSI( const Standard_Real, const UnitSystem& ) const;
- // convert value to and from default SI units according to current units
+ Standard_EXPORT Standard_Real ToSI( const Standard_Real, const UnitSystem& ) const;
+ Standard_EXPORT Standard_Real FromSI( const Standard_Real, const UnitSystem& ) const;
Standard_EXPORT Standard_Boolean HasData( const Standard_Integer ) const;
+ Standard_EXPORT TCollection_ExtendedString GetOption( const TCollection_AsciiString& ) const;
+ Standard_EXPORT Standard_Boolean GetOptionNames( TColStd_SequenceOfAsciiString& ) const;
+
private:
DDS_DicItem( const DDS_DicItem& );
- // Copy constructor
-
void operator=( const DDS_DicItem& );
- // Assignment operator
-
void FillDataMap( TCollection_AsciiString, const LDOM_Element&,
const LDOM_Element&, const LDOM_Element&,
const TColStd_SequenceOfAsciiString& );
- // prepares formants for each unit systems
-
-
void PrepareFormats( const TCollection_AsciiString& );
- // prepares three formats for each unit systems
-
void GetDefaultFormat();
- // returns three default formants for each unit systems
-
UnitSystem GetActiveUnitSystem() const;
void GetStringFormat( const TCollection_AsciiString&,
const TCollection_AsciiString&,
const TCollection_AsciiString&,
TCollection_AsciiString& );
- // returns format for the string
-
void GetIntegerFormat( const TCollection_AsciiString&,
const TCollection_AsciiString&,
const TCollection_AsciiString&,
const TCollection_AsciiString&,
const Standard_Character,
TCollection_AsciiString& );
- // returns format for the integer
-
void GetFloatFormat( const TCollection_AsciiString&,
const TCollection_AsciiString&,
const TCollection_AsciiString&,
const TCollection_AsciiString&,
const Standard_Character,
TCollection_AsciiString& );
- // returns format for the float
-
void Split( const TCollection_AsciiString&,
Handle(TColStd_HArray1OfExtendedString)& );
UnitData* GetUnitData( const UnitSystem& ) const;
+private:
+ typedef NCollection_DataMap<TCollection_AsciiString, TCollection_ExtendedString> OptionsMap;
+
private:
TCollection_AsciiString myId;
TCollection_ExtendedString myLabel;
Handle(Standard_Transient) myComponent;
+ OptionsMap myOptions;
// unitData
NCollection_DataMap<UnitSystem, UnitData> myUnitData;
DEFINE_STANDARD_RTTI(DDS_DicItem)
};
-// Definition of HANDLE object using Standard_DefineHandle.hxx
DEFINE_STANDARD_HANDLE(DDS_DicItem, MMgt_TShared)
-// Container class XMLTools_IndexedDataMapOfDicItems (map of handles)
DEFINE_BASECOLLECTION(DDS_BaseCollectionOfDicItems, Handle(DDS_DicItem))
DEFINE_INDEXEDDATAMAP(DDS_IndexedDataMapOfDicItems, DDS_BaseCollectionOfDicItems,
TCollection_AsciiString, Handle(DDS_DicItem))
IMPLEMENT_STANDARD_HANDLE(DDS_Dictionary, MMgt_TShared)
IMPLEMENT_STANDARD_RTTIEXT(DDS_Dictionary, MMgt_TShared)
+/*!
+ \class DDS_Dictionary
+
+ This class to provide information about used datums, reading them from 'xml' file
+
+ Datum is the set of parameters described a phisical characteristic. These parameters loaded from
+ special XML which has following format:
+
+ \hr
+
+ <D_URI>
+ <COMPONENT COMPONENT_NAME="component_name">
+ <UNIT_SYSTEMS>
+ <UNIT_SYSTEM UNIT_SYSTEM_NAME="[system_internal_name]" UNIT_SYSTEM_LABEL="[system_label]">
+ <UNIT_SYSTEM UNIT_SYSTEM_NAME="[system_internal_name]" UNIT_SYSTEM_LABEL="[system_label]">
+ ...
+ <UNIT_SYSTEM UNIT_SYSTEM_NAME="[system_internal_name]" UNIT_SYSTEM_LABEL="[system_label]">
+ </UNIT_SYSTEMS>
+
+ <DATUM DATUM_UNITS="[base_system_internal_name]" DATUM_FORMAT="[sprintf_format_specification]"
+ DATUM_ID="[datum_id]" DATUM_LABEL="[datum_label]" DATUM_REQUIRED="[requred_value]"
+ DATUM_FILTER="[string_regular_expression]">
+ <DY_DOMAIN>
+ <VALUE_DESCR VD_DEFV="[default_value]" VD_MAXV="[max_value]" VD_MINV="[min_value]" VD_TYPE="[value_type]"/>
+ <VALUE_LIST_REF VLR_LIST="[referenced_list_id]"/>
+ </DY_DOMAIN>
+ <DESCR>
+ <SHORT_D>[brief_desription_text]</SHORT_D>
+ <LONG_D>[full_description_text]</LONG_D>
+ </DESCR>
+ <OPTIONS>
+ <OPTION OPTION_NAME="[option_name_1]">[option_value_1]</OPTION>
+ <OPTION OPTION_NAME="[option_name_2]">[option_value_2]</OPTION>
+ ...
+ <OPTION OPTION_NAME="[option_name_n]">[option_value_n]</OPTION>
+ </OPTIONS>
+ </DATUM>
+
+ ...
+
+ <VALUE_LIST VALUE_LIST_ID="[list_id]" VALUE_LIST_NAME="[list_name]">
+ <VALUE_LIST_VALUE VALUE_LIST_VALUEID="[list_element_id]" VALUE_LIST_VALUEICON="[list_element_icon_file]">[list_element_name]</VALUE_LIST_VALUE>
+ <VALUE_LIST_VALUE VALUE_LIST_VALUEID="[list_element_id]" VALUE_LIST_VALUEICON="[list_element_icon_file]">[list_element_name]</VALUE_LIST_VALUE>
+ ...
+ <VALUE_LIST_VALUE VALUE_LIST_VALUEID="[list_element_id]" VALUE_LIST_VALUEICON="[list_element_icon_file]">[list_element_name]</VALUE_LIST_VALUE>
+ </VALUE_LIST>
+
+ ...
+
+ </COMPONENT>
+ </D_URI>
+
+ \hr
+
+ In description of datum file format used internal keys as XML tag and attributes names.
+ Concrete XML keywords defined by DDS_KeyWords class.
+
+ Describe datum file format more detailed. XML file should have one main tag named as "dictionary" (key "D_URI").
+ This tag should contains one or several components. Component is a independent set of datums and unit systems.
+ Components defined as XML tag named "component" (key "COMPONENT") with attribute "name" (key COMPONENT_NAME).
+ Component name used as component identifier and should be unique. Component tag can contains:
+
+ \li Tag "unit_systems" (key UNIT_SYSTEMS) defines set of used unit systems. Should exist at least one unit
+ system named SI ("System International"). If this system not exist then it will be defined automatically.
+ Each unit system defined by XML tag "unit system" (key UNIT_SYSTEM) under tag "unit_systems" with attributes
+ "name" (key UNIT_SYSTEM_NAME) and "label" (key UNIT_SYSTEM_LABEL). Name is identifier of unit system. Label is
+ human readable description.
+
+ \li One or several tag "datum" (key DATUM). For this tag can be defined following attributes:
+
+ \lo Identifier (key DATUM_ID) specify the unique id string for the datum.
+ \lo Label (key DATUM_LABEL) specify human readable name of the datum.
+ \lo Units of measure (key DATUM_UNITS) for given unit system. Attribute name consist of a name
+ of unit system and a keyword got from DDS_KeyWords by key DATUM_UNITS. For example for unit system
+ named SI and default keyword attribute name will be "SIunits". This attribute should be specified
+ for each deaclared unit system. Value of this attribute should be string describs units of measure.
+ Possible designations for units of measure and their multiple prefixes see in package UnitsAPI of
+ library OpenCascade (files Units.dat and Lexi_Expr.dat). Units of measure will be used for numeric
+ value conversion from one unit system to another one.
+ \lo Format (key DATUM_FORMAT) specify the format string which will be used during initial formatting
+ of value. This string should be specified in sprintf() format.
+ \lo Filter (key DATUM_FILTER) specify the regualr expression. Each user entered string will be checked up
+ on matching to this expression (if it defined). Non matched strings will be rejected.
+ \lo Required value (key DATUM_REQUIRED). If this attributed defined and value is true then user can't
+ leave a input filed blank (parameter must be always entered).
+
+ Tag "description" (key DESCR) can be defined under the tag "datum". This tag contains two sub tags:
+ \lo "short description" (key SHORT_D) specify a brief datum description text
+ \lo "long description" (key LONG_D) specify a detailed description text
+
+ Tag "options" (key OPTIONS) can be defined under the tag "datum". This tag contains one or more sub
+ tags "option" (key OPTION). Each of these XML elements should contain text option value and attribute
+ "name" (key OPTION_NAME) which specified option name.
+
+ Each tag "datum" define most common parameters of phisical characteristic.
+ This parameters placed in two groups:
+ \lo Domain parameters under tag "domain" (key DY_DOMAIN). This tag can contains value description tag
+ (key VALUE_DESCR) for discrete data or list reference tag (key VALUE_LIST_REF) for enumerable data.
+ Discrete data described following parameters:
+ default value (key VD_DEFV)
+ maximum value (key VD_MAXV)
+ minimum value (key VD_MINV)
+ type of value (key VD_TYPE) - possible values: String, Integer, Float, List
+ Enumerable data described by "list reference" attribute (key VLR_LIST) which reference on
+ list (see "list definition" tag) by list id.
+
+ \li One or several tag "list definition" (key VALUE_LIST). This tag define the list of items for enumerable
+ data. Attribute "list id" (key VALUE_LIST_ID) specify the identifier string for the list and attribute
+ "list name" (key VALUE_LIST_NAME) define a list name string. Each list item described by tag "list value"
+ (key VALUE_LIST_VALUE) under tag "list definition". Each this tag contains item string text and have
+ following attributes:
+ \lo "list item id" (key VALUE_LIST_VALUEID) - integer numerical identifier for item
+ \lo "list item icon" (key VALUE_LIST_VALUEICON) - icon file name for item
+
+ Below the example of a XML file with use default keywords.
+
+ <datadictionary version="1.0">
+ <component name="My Component">
+
+ <!-- specify two unit systems -->
+
+ <unitSystems>
+ <system name="SI" label="System international">
+ <system name="AS" label="Anglo - sacson system">
+ </unitSystems>
+
+ <!-- specify datum -->
+ <!-- units of measure for SI - meters (m), for AS - inches (in) -->
+ <datum SIunits="m" ASunits="in" format="%.25f" id="X" label="X coordinate" required="">
+ <domain>
+ <!-- default value not specified -->
+ <valueDescr default="" max="999999999.999" min="0.000" type="Float"/>
+ </domain>
+ <description>
+ <shortDescr>X coordinate for object</shortDescr>
+ <longDescr>X multiplier of object coordinates. Describe position of object in direction of X axis</longDescr>
+ </description>
+ </datum>
+
+ <datum SIunits="m" ASunits="in" format="%.25f" id="Y" label="Y coordinate" required="">
+ <domain>
+ <valueDescr default="" max="999999999.999" min="0.000" type="Float"/>
+ </domain>
+ <description>
+ <shortDescr>Y coordinate for object</shortDescr>
+ <longDescr>Y multiplier of object coordinates. Describe position of object in direction of Y axis</longDescr>
+ </description>
+ </datum>
+
+ <!-- datum for object name with filter which not allow to input more that 8 letters,
+ numbers or unerscores with first letter only -->
+ <datum format="%.8us" id="ObjectName" label="Name" required="yes"
+ filter="^([A-Z]+)([A-Z,0-9,_]*)$">
+ <domain>
+ <!-- limits and default not specified, type is string -->
+ <valueDescr default="" max="" min="" type="String" />
+ </domain>
+ <description>
+ <!-- long description not specified -->
+ <shortDescr>Name of object</shortDescr>
+ </description>
+ </datum>
+
+
+ <!-- datum for enumeration of side -->
+ <datum format="" id="Side" label="Side" required="">
+ <domain>
+ <!-- default list item is item with id 0 -->
+ <valueDescr default="0" type="List"/>
+ <!-- list reference on list named "side_list" -->
+ <listRef list="side_list"/>
+ </domain>
+ <description>
+ <shortDescr>Side of object</shortDescr>
+ </description>
+ </datum>
+
+ <!-- list definition for enumeration of side -->
+ <valueList listid="side_list" name="Side">
+ <value id="1">left</value>
+ <value id="2">right</value>
+ <value id="3">top</value>
+ <value id="4">bottom</value>
+ <value id="0">undefined</value>
+ </valueList>
+
+ </component>
+ </datadictionary>
+
+
+*/
+
+/*!
+ Constructor. Creates the instance of dictionary. Private method. Use DDS_Dictionary::Get() instead.
+*/
DDS_Dictionary::DDS_Dictionary()
: MMgt_TShared()
{
}
+/*!
+ Copy constructor. Internal.
+*/
DDS_Dictionary::DDS_Dictionary( const DDS_Dictionary& )
{
}
+/*!
+ Assigment operator. Internal.
+*/
void DDS_Dictionary::operator=( const DDS_Dictionary& )
{
}
+/*!
+ Returns the names list of defined unit systems from all components.
+ Parameter \atheSystems will contains the sequence of string names.
+*/
void DDS_Dictionary::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystems ) const
{
theSystems.Clear();
}
+/*!
+ Returns the names list of defined unit systems from the specified component \atheComponent.
+ Parameter \atheSystems will contains the sequence of string names. If component not found then
+ empty list returned.
+*/
void DDS_Dictionary::GetUnitSystems( TColStd_SequenceOfAsciiString& theSystems,
const TCollection_AsciiString& theComponent ) const
{
myGroupMap.FindFromKey( theComponent )->GetUnitSystems( theSystems );
}
+/*!
+ Returns the label of unit system \atheSystem. Function find the given unit system in
+ all components. If unit system not found in any component then empty string returned.
+*/
TCollection_ExtendedString DDS_Dictionary::GetUnitSystemLabel( const TCollection_AsciiString& theSystem ) const
{
TCollection_ExtendedString aLabel;
return aLabel;
}
+/*!
+ Returns the label of unit system \atheSystem from component \atheComponent. Function find
+ the given unit system in the specified component only. If unit system not found in the
+ component then empty string returned.
+*/
TCollection_ExtendedString DDS_Dictionary::GetUnitSystemLabel( const TCollection_AsciiString& theSystem,
const TCollection_AsciiString& theComponent ) const
{
return aLabel;
}
+/*!
+ Gets the name of active unit system from first got component. If any component exist then
+ active unit system name returned or empty string otherwise.
+*/
TCollection_AsciiString DDS_Dictionary::GetActiveUnitSystem() const
{
TCollection_AsciiString aSystem;
return aSystem;
}
+/*!
+ Gets the name of active unit system from component \atheComponent. If this component exist
+ active unit system name returned or empty string otherwise.
+*/
TCollection_AsciiString DDS_Dictionary::GetActiveUnitSystem( const TCollection_AsciiString& theComponent ) const
{
TCollection_AsciiString aSystem;
return aSystem;
}
+/*!
+ Sets the active unit system named \atheSystem. This unit system will be activated in all
+ existing components if component have it.
+*/
void DDS_Dictionary::SetActiveUnitSystem( const TCollection_AsciiString& theSystem )
{
for ( Standard_Integer i = 1; i <= myGroupMap.Extent(); i++ )
myGroupMap.FindFromIndex( i )->SetActiveUnitSystem( theSystem );
}
+/*!
+ Sets the active unit system named \atheSystem for component \atheComponent. If specified unit
+ system doesn't exist in the component then function do nothing.
+*/
void DDS_Dictionary::SetActiveUnitSystem( const TCollection_AsciiString& theSystem,
const TCollection_AsciiString& theComponent )
{
return sDictionary;
}
+/*!
+ Load datum definitions in the dictionary from XML file \atheFileName. Returns true if load
+ successed or false otherwise.
+*/
Standard_Boolean DDS_Dictionary::Load( const TCollection_AsciiString theFileName )
{
static NCollection_Map<TCollection_AsciiString> _LoadMap;
return Standard_True;
}
+/*!
+ Gets XML keyword as LDOMString by specified \akey. If key doesn't exist then empty string
+ returned. This function provided for convenience.
+*/
LDOMString DDS_Dictionary::KeyWord( const TCollection_AsciiString& key )
{
LDOMString keyWord;
}
/*!
- Returns DicItem from specified group with all attached data
+ Gets dictionary item with specified identifier \atheID from specified component \atheComponent.
+ If component or item not found then null handle returned.
*/
-
Handle(DDS_DicItem) DDS_Dictionary::GetDicItem( const TCollection_AsciiString& theID,
- const TCollection_AsciiString& theGroup ) const
+ const TCollection_AsciiString& theComponent ) const
{
Handle(DDS_DicItem) aDicItem;
Handle(DDS_DicGroup) aDicGroup;
- if ( myGroupMap.Contains( theGroup ) )
- aDicGroup = myGroupMap.FindFromKey( theGroup );
+ if ( myGroupMap.Contains( theComponent ) )
+ aDicGroup = myGroupMap.FindFromKey( theComponent );
if ( !aDicGroup.IsNull() )
aDicItem = aDicGroup->GetDicItem( theID );
return aDicItem;
}
/*!
- Returns DicItem with all attached data
+ Gets dictionary item with specified identifier \atheID. Function find the item in all components.
+ If item not found in any component then null handle returned.
*/
-
Handle(DDS_DicItem) DDS_Dictionary::GetDicItem( const TCollection_AsciiString& theID ) const
{
Handle(DDS_DicItem) aDicItem;
return aDicItem;
}
+/*!
+ Fill the internal data structures from XML parsed structures. Internal.
+*/
void DDS_Dictionary::FillDataMap( const LDOM_Element& theComponentData, const LDOM_Element& theDocElement )
{
TCollection_AsciiString aCompName = theComponentData.getAttribute( KeyWord( "COMPONENT_NAME" ) );
myGroupMap.Add( aCompName, aDicGroup );
}
+/*!
+ Convert numeric value \atheValue from specified unit of measure \atheUnits to SI unit of measure
+ (mm for Length, radians for Angles, etc). Converted value returned.
+*/
Standard_Real DDS_Dictionary::ToSI( const Standard_Real theValue, const Standard_CString theUnits )
{
Standard_Real aRetValue = theValue;
if ( theUnits && *theUnits && strcmp( theUnits, "%" ) )
{
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
aRetValue = UnitsAPI::AnyToSI( theValue, theUnits );
}
catch( Standard_Failure ) {
return aRetValue;
}
+/*!
+ Convert numeric value \atheValue to specified unit of measure \atheUnits from SI unit of measure
+ (mm for Length, radians for Angles, etc). Converted value returned.
+*/
Standard_Real DDS_Dictionary::FromSI( const Standard_Real theValue, const Standard_CString theUnits )
{
Standard_Real aRetValue = theValue;
if ( theUnits && *theUnits && strcmp( theUnits, "%" ) )
{
try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ OCC_CATCH_SIGNALS;
+#endif
aRetValue = UnitsAPI::AnyFromSI( theValue, theUnits );
}
catch( Standard_Failure ) {
DEFINE_STANDARD_HANDLE(DDS_Dictionary, MMgt_TShared)
-// Class to provide information about used parameters,
-// reading them from 'xml' file
class DDS_Dictionary : public MMgt_TShared
{
public:
void operator=( const DDS_Dictionary& );
- // prepares formants for each unit systems
void FillDataMap( const LDOM_Element&, const LDOM_Element& );
private:
IMPLEMENT_STANDARD_HANDLE(DDS_KeyWords, MMgt_TShared)
IMPLEMENT_STANDARD_RTTIEXT(DDS_KeyWords, MMgt_TShared)
+/*!
+ \class DDS_KeyWords
+
+ This object contains the pairs of internal keys and XML tag or attribute names. This class allow to user
+ define set of XML keywords used in datums definition file.
+
+ Default keywords table:
+ \li D_URI - dictionary
+ \li COMPONENT - component
+ \li COMPONENT_NAME - name
+ \li UNIT_SYSTEMS - unitSystems
+ \li UNIT_SYSTEM - system
+ \li UNIT_SYSTEM_NAME - name
+ \li UNIT_SYSTEM_LABEL - label
+ \li DATUM - datum
+ \li DATUM_ID - id
+ \li DATUM_LABEL - label
+ \li DATUM_UNITS - units
+ \li DATUM_FORMAT - format
+ \li DATUM_FILTER - filter
+ \li DATUM_REQUIRED - required
+ \li VALUE_LIST - valueList
+ \li VALUE_LIST_ID - listid
+ \li VALUE_LIST_NAME - name
+ \li VALUE_LIST_TYPE - type
+ \li VALUE_LIST_VALUE - value
+ \li VALUE_LIST_VALUEID - id
+ \li VALUE_LIST_VALUEICON - icon
+ \li DY_DOMAIN - domain
+ \li WARNING_LEVEL - warningLevel
+ \li WRONG_VALUE - wrongValue
+ \li VALUE_DESCR - valueDescr
+ \li VALUE_LIST_REF - listRef
+ \li DESCR - description
+ \li LONG_D - longDescr
+ \li SHORT_D - shortDescr
+ \li VD_TYPE - type
+ \li VD_DEFV - default
+ \li VD_MAXV - max
+ \li VD_MINV - min
+ \li VD_SPEC - specVal
+ \li VLR_LIST - list
+ \li PRS - presentation
+ \li LATERAL_ZOOM - lateralZoom
+ \li LZ_MINV - min
+ \li LZ_MAXV - max
+ \li LZ_ORDER - order
+ \li OPTIONS - options
+ \li OPTION - option
+ \li OPTION_NAME - name
+*/
+
+/*!
+ Constructor
+*/
+
DDS_KeyWords::DDS_KeyWords()
: MMgt_TShared()
{
SetKeyWord( "LZ_MINV", "min" );
SetKeyWord( "LZ_MAXV", "max" );
SetKeyWord( "LZ_ORDER", "order" );
+
+ SetKeyWord( "OPTIONS", "options" );
+ SetKeyWord( "OPTION", "option" );
+ SetKeyWord( "OPTION_NAME", "name" );
}
+/*!
+ Returns the static instance of the class DDS_KeyWords
+*/
+
Handle(DDS_KeyWords) DDS_KeyWords::Get()
{
static Handle(DDS_KeyWords) keyWords;
return keyWords;
}
+/*!
+ Returns the XML keyword by specified internal key \a key. If the internal key isn't registered
+ then empty string will be returned.
+*/
+
TCollection_AsciiString DDS_KeyWords::GetKeyWord( const TCollection_AsciiString& key ) const
{
TCollection_AsciiString keyWord;
return keyWord;
}
+/*!
+ Register the pair of the internal key \a key and XML keyword \a keyWord.
+*/
+
void DDS_KeyWords::SetKeyWord( const TCollection_AsciiString& key,
const TCollection_AsciiString& keyWord )
{
class TCollection_AsciiString;
-class DDS_KeyWords: public MMgt_TShared
+class DDS_KeyWords : public MMgt_TShared
{
public:
Standard_EXPORT static Handle(DDS_KeyWords) Get();
--- /dev/null
+# 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 : DDS
+# $Header: /home/server/cvs/GUI/GUI_SRC/src/DDS/Makefile.in
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libDDS.la
+
+salomeinclude_HEADERS = DDS.h \
+ DDS_DicGroup.h \
+ DDS_DicItem.h \
+ DDS_Dictionary.h \
+ DDS_KeyWords.h
+
+dist_libDDS_la_SOURCES = DDS_DicGroup.cxx \
+ DDS_DicItem.cxx \
+ DDS_Dictionary.cxx \
+ DDS_KeyWords.cxx
+
+libDDS_la_CPPFLAGS=$(CAS_CPPFLAGS)
+
+libDDS_la_LDFLAGS= $(CAS_KERNEL) $(CAS_OCAF)
+
+
+
+++ /dev/null
-# 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 : DDS
-# $Header: /home/server/cvs/GUI/GUI_SRC/src/DDS/Makefile.in
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= DDS.h \
- DDS_DicGroup.h \
- DDS_DicItem.h \
- DDS_Dictionary.h \
- DDS_KeyWords.h
-
-# Libraries targets
-LIB = libDDS.la
-
-LIB_SRC= DDS_DicGroup.cxx \
- DDS_DicItem.cxx \
- DDS_Dictionary.cxx \
- DDS_KeyWords.cxx
-
-CPPFLAGS+= $(OCC_INCLUDES)
-
-LDFLAGS+= $(CAS_KERNEL) $(CAS_OCAF)
-
-@CONCLUDE@
-
-
--- /dev/null
+# SALOME Utils : general SALOME's definitions and tools
+#
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libEvent.la
+
+salomeinclude_HEADERS= \
+ Event.h \
+ SALOME_Event.hxx
+
+dist_libEvent_la_SOURCES = SALOME_Event.cxx
+
+libEvent_la_CPPFLAGS=$(QT_INCLUDES) @KERNEL_CXXFLAGS@
+libEvent_la_LDFLAGS=$(QT_MT_LIBS)
+
+
+++ /dev/null
-# SALOME Utils : general SALOME's definitions and tools
-#
-# 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
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= \
- Event.h \
- SALOME_Event.hxx
-
-EXPORT_PYSCRIPTS =
-# Libraries targets
-
-LIB = libEvent.la
-LIB_SRC = SALOME_Event.cxx
-
-CPPFLAGS+=$(QT_INCLUDES) $(KERNEL_CXXFLAGS)
-LDFLAGS+=$(QT_MT_LIBS)
-
-@CONCLUDE@
-
-
\class TMemFunEvent
\brief Template class for member function
*/
-template<class TObject, typename TRes> class EVENT_EXPORT TMemFunEvent: public SALOME_Event{
+template<class TObject, typename TRes> class /*EVENT_EXPORT */TMemFunEvent: public SALOME_Event{
public:
typedef TRes TResult;
TResult myResult;
\class TVoidMemFunEvent
\brief Template class for member function
*/
-template<class TObject> class EVENT_EXPORT TVoidMemFunEvent: public SALOME_Event{
+template<class TObject> class /*EVENT_EXPORT */TVoidMemFunEvent: public SALOME_Event{
public:
typedef void (TObject::* TAction)();
TVoidMemFunEvent(TObject* theObject, TAction theAction):
\class TMemFun1ArgEvent
\brief Template for member function with one argument
*/
-template<class TObject, typename TRes, typename TArg, typename TStoreArg = TArg> class EVENT_EXPORT TMemFun1ArgEvent:
+template<class TObject, typename TRes, typename TArg, typename TStoreArg = TArg> class/* EVENT_EXPORT */TMemFun1ArgEvent:
public SALOME_Event{
public:
typedef TRes TResult;
\class TVoidMemFun1ArgEvent
\brief Template for member function with one argument
*/
-template<class TObject, typename TArg, typename TStoreArg = TArg> class EVENT_EXPORT TVoidMemFun1ArgEvent: public SALOME_Event{
+template<class TObject, typename TArg, typename TStoreArg = TArg> class /*EVENT_EXPORT */TVoidMemFun1ArgEvent: public SALOME_Event{
public:
typedef void (TObject::* TAction)(TArg);
TVoidMemFun1ArgEvent(TObject* theObject, TAction theAction, TArg theArg):
\brief Template for member function with two arguments
*/
template<class TObject, typename TRes, typename TArg, typename TArg1, typename TStoreArg = TArg, typename TStoreArg1 = TArg1> class
-EVENT_EXPORT TMemFun2ArgEvent: public SALOME_Event{
+/*EVENT_EXPORT */TMemFun2ArgEvent: public SALOME_Event{
public:
typedef TRes TResult;
TResult myResult;
\brief Template for member function with two arguments
*/
template<class TObject, typename TArg, typename TArg1, typename TStoreArg = TArg, typename TStoreArg1 = TArg1> class
-EVENT_EXPORT TVoidMemFun2ArgEvent: public SALOME_Event{
+/*EVENT_EXPORT*/ TVoidMemFun2ArgEvent: public SALOME_Event{
public:
typedef void (TObject::* TAction)(TArg,TArg1);
TVoidMemFun2ArgEvent(TObject* theObject, TAction theAction, TArg theArg, TArg1 theArg1):
aResult[i] = *aPointer;
- for( ; i < aResult.size(); i++ )
+ for ( ; i < (int)aResult.size(); i++ )
aResult[i] = aObject[i - anISize - 2*aFSize*myNumber - aFSize];
return aResult;
for( ; i < anISize + 2*aFSize*myNumber + 2*aBSize; i++, aPointer++ )
aResult[i] = *aPointer;
- for( ; i < aResult.size(); i++ )
+ for ( ; i < (int)aResult.size(); i++ )
aResult[i] = aObject[i - anISize - 2*aFSize*myNumber - 2*aBSize];
return aResult;
float aDY = ( aRowPixelHeight - 1 ) / aYScale, aDX;
char aLetter;
int aLettIndex, row;
- for( int i = 0; i < theStr.length(); i++ )
+ for ( int i = 0; i < (int)theStr.length(); i++ )
{
aLetter = theStr.data()[i];
aLettIndex = (int)aLetter - FirstSymbolNumber;
int GLViewer_TexFont::getStringWidth( QString theStr )
{
int aWidth = 0;
- for( int i = 0; i < theStr.length(); i ++ )
+ for ( int i = 0; i < (int)theStr.length(); i ++ )
{
char aLetter = theStr.data()[i];
int aLettIndex = (int)aLetter - FirstSymbolNumber;
int aCurPos = 2*anISize + sizeOf8Float + aTypeLength + aToolTipLength;
// adds aspect byte array
- for( i = aCurPos; i < aCurPos + aAspect.size(); i++ )
+ for ( i = aCurPos; i < (int)( aCurPos + aAspect.size() ); i++ )
aResult[i] = aAspect[i - aCurPos];
aCurPos = aCurPos + aAspect.size();
// adds GL text byte array
- for( i = aCurPos; i < aCurPos + aGLText.size(); i++ )
+ for ( i = aCurPos; i < (int)( aCurPos + aGLText.size() ); i++ )
aResult[i] = aGLText[i - aCurPos];
aCurPos += aGLText.size();
aPointer = (char*)&myOwner;
- for( i = 0; i < sizeof( GLViewer_Owner* ); i++, aPointer++ )
+ for( i = 0; i < sizeof( SUIT_DataOwner* ); i++, aPointer++ )
aResult[ aCurPos + i ] = *aPointer;
return aResult;
class GLViewer_Group;
class GLViewer_CoordSystem;
class GLViewer_Text;
-class GLViewer_Owner;
+//class GLViewer_Owner;
/*!
* Class GLViewer_Object
virtual bool translateToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS ) = 0;
#endif
//!\warning It is for ouv
- GLViewer_Owner* owner() const { return myOwner; }
+ SUIT_DataOwner* owner() const { return myOwner; }
//!\warning It is for ouv
- void setOwner( GLViewer_Owner* owner ) { myOwner = owner; }
+ void setOwner( SUIT_DataOwner* owner ) { myOwner = owner; }
//! Adds object to group theGroup
void setGroup( GLViewer_Group* theGroup );
bool myIsVisible;
//!\warning It is for ouv
- GLViewer_Owner* myOwner;
+ SUIT_DataOwner* myOwner;
//! Object Group
GLViewer_Group* myGroup;
};
-
-//!\warning It is for ouv
-class GLVIEWER_API GLViewer_Owner : public SUIT_DataOwner
-{
-public:
- //!\warning It is for ouv
- GLViewer_Owner() : SUIT_DataOwner() {}
- //!\warning It is for ouv
- ~GLViewer_Owner() {}
-
-protected:
-
-};
-
#ifdef WNT
#pragma warning ( default:4251 )
#endif
// File: GLViewer_Tools.cxx
// Created: April, 2005
-//#include "GLViewerAfx.h"
#include "GLViewer_Tools.h"
#include <GL/gl.h>
-#include <iostream.h>
+#include <iostream>
/*!
Constructor
if( !myArray )
{
- cout << "Can't allocate memory: " << size << endl;
+ std::cout << "Can't allocate memory: " << size << std::endl;
myRealSize = 0;
}
else
*/
void GLViewer_LineList::print()
{
- cout << "MainCoord: " << myMainCoord <<" SIZE: " << myRealSize << " ENum: " << mySegmentNumber << " :::";
+ std::cout << "MainCoord: " << myMainCoord <<" SIZE: " << myRealSize << " ENum: " << mySegmentNumber << " :::";
for( int i = 0; i < mySegmentNumber; i++ )
- cout << " " << myArray[2*i] << " " << myArray[2*i+1] << " | ";
+ std::cout << " " << myArray[2*i] << " " << myArray[2*i+1] << " | ";
- cout << endl;
+ std::cout << std::endl;
}
/*!
*/
void GLViewer_LineField::print()
{
- cout << "My X matrix Number: " << myXSize << endl;
+ std::cout << "My X matrix Number: " << myXSize << std::endl;
for( int i = 0; i < myXSize; i++ )
myXLineArray[i]->print();
- cout << "My Y matrix Number: " << myYSize << endl;
+ std::cout << "My Y matrix Number: " << myYSize << std::endl;
for( int j = 0; j < myYSize; j++ )
myYLineArray[j]->print();
}
}
glEnd();
delete[] anArray;
- cout << "Show function" << endl;
+ std::cout << "Show function" << std::endl;
}
/*!
aCurArray[i].myLineIndex == myEndPoint.myXLineIndex &&
aCurArray[i].mySegmentindex == myEndPoint.myXSegmentIndex )
{
- cout << "Algorithm complete X!!!!!!!" << endl;
+ std::cout << "Algorithm complete X!!!!!!!" << std::endl;
myEndPoint.mySolveIndex = i;
return IS_SOLVED;
}
aCurArray[i].myLineIndex == myEndPoint.myYLineIndex &&
aCurArray[i].mySegmentindex == myEndPoint.myYSegmentIndex )
{
- cout << "Algorithm complete Y!!!!!!!" << endl;
+ std::cout << "Algorithm complete Y!!!!!!!" << std::endl;
myEndPoint.mySolveIndex = i;
return IS_SOLVED;
}
else
myCurArrayIndex = 0;
- cout << "Number of ways: " << count << endl;
+ std::cout << "Number of ways: " << count << std::endl;
if( count == 0 )
return IS_LOOP;
while( true )
{
- cout << "-----------Iteration #" << myCurCount << "-------------" << endl;
+ std::cout << "-----------Iteration #" << myCurCount << "-------------" << std::endl;
iteration();
IterationStatus is = checkComplete();
#include "GLViewer_Viewer2d.h"
#include "SUIT_Desktop.h"
-int GLViewer_ViewManager::myMaxId = 0;
-
/*!Constructor.*/
GLViewer_ViewManager::GLViewer_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop )
-: SUIT_ViewManager( theStudy, theDesktop )
+: SUIT_ViewManager( theStudy, theDesktop, new GLViewer_Viewer2d( "GLViewer" ) )
{
- myId = ++myMaxId;
- setViewModel( new GLViewer_Viewer2d( "GLViewer" ) );
+ setTitle( tr( "GL_VIEW_TITLE" ) );
}
/*!Destructor.*/
{
}
-/*!Sets view name for view window \a theView.*/
-void GLViewer_ViewManager::setViewName(SUIT_ViewWindow* theView)
-{
- int aPos = myViews.find(theView);
- theView->setCaption( QString( "GL scene:%1 - viewer:%2" ).arg(myId).arg(aPos+1));
-}
-
/*!Context menu popup for \a popup.*/
void GLViewer_ViewManager::contextMenuPopup( QPopupMenu* popup )
{
Q_OBJECT
public:
GLViewer_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop );
- ~GLViewer_ViewManager();
+ virtual ~GLViewer_ViewManager();
GLViewer_Viewer* getGLViewer() { return (GLViewer_Viewer*) myViewModel; }
virtual void contextMenuPopup( QPopupMenu* );
-
-protected:
- void setViewName(SUIT_ViewWindow* theView);
-
-protected:
- static int myMaxId;
- int myId;
};
#endif // GLVIEWER_VIEWMANAGER_H
int str_size = aList.first().length();
for( int i = 1, size = aList.count(); i < size; i++ )
{
- if( str_size < aList[i].length() )
+ if ( str_size < (int)aList[i].length() )
{
index = i;
str_size = aList[i].length();
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : caf
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libGLViewer.la
+
+salomeinclude_HEADERS= \
+ GLViewer.h \
+ GLViewer_AspectLine.h \
+ GLViewer_BaseDrawers.h \
+ GLViewer_BaseObjects.h \
+ GLViewer_Compass.h \
+ GLViewer_Context.h \
+ GLViewer_CoordSystem.h \
+ GLViewer_Defs.h \
+ GLViewer_Drawer.h \
+ GLViewer_Geom.h \
+ GLViewer_Grid.h \
+ GLViewer_Group.h \
+ GLViewer_MimeSource.h \
+ GLViewer_Object.h \
+ GLViewer_Selector.h \
+ GLViewer_Selector2d.h \
+ GLViewer_Text.h \
+ GLViewer_Tools.h \
+ GLViewer_ToolTip.h \
+ GLViewer_ViewFrame.h \
+ GLViewer_ViewManager.h \
+ GLViewer_ViewPort.h \
+ GLViewer_ViewPort2d.h \
+ GLViewer_Viewer.h \
+ GLViewer_Viewer2d.h \
+ GLViewer_Widget.h
+
+dist_libGLViewer_la_SOURCES= \
+ GLViewer_AspectLine.cxx \
+ GLViewer_BaseDrawers.cxx \
+ GLViewer_BaseObjects.cxx \
+ GLViewer_Compass.cxx \
+ GLViewer_Context.cxx \
+ GLViewer_CoordSystem.cxx \
+ GLViewer_Drawer.cxx \
+ GLViewer_Geom.cxx \
+ GLViewer_Grid.cxx \
+ GLViewer_Group.cxx \
+ GLViewer_MimeSource.cxx \
+ GLViewer_Object.cxx \
+ GLViewer_Selector.cxx \
+ GLViewer_Selector2d.cxx \
+ GLViewer_Text.cxx \
+ GLViewer_Tools.cxx \
+ GLViewer_ToolTip.cxx \
+ GLViewer_ViewFrame.cxx \
+ GLViewer_ViewManager.cxx \
+ GLViewer_ViewPort.cxx \
+ GLViewer_ViewPort2d.cxx \
+ GLViewer_Viewer.cxx \
+ GLViewer_Viewer2d.cxx \
+ GLViewer_Widget.cxx
+
+MOC_FILES= \
+ GLViewer_Selector_moc.cxx \
+ GLViewer_Selector2d_moc.cxx \
+ GLViewer_ToolTip_moc.cxx \
+ GLViewer_ViewFrame_moc.cxx \
+ GLViewer_ViewManager_moc.cxx \
+ GLViewer_ViewPort_moc.cxx \
+ GLViewer_ViewPort2d_moc.cxx \
+ GLViewer_Viewer_moc.cxx \
+ GLViewer_Viewer2d_moc.cxx \
+ GLViewer_Widget_moc.cxx
+nodist_libGLViewer_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA= \
+ resources/cursor_rotate.png \
+ resources/cursor_sketch.png \
+ resources/cursor_zoom.png \
+ resources/view_dump.png \
+ resources/view_fitall.png \
+ resources/view_fitarea.png \
+ resources/view_fitselect.png \
+ resources/view_glpan.png \
+ resources/view_pan.png \
+ resources/view_reset.png \
+ resources/view_zoom.png
+
+nodist_salomeres_DATA= \
+ GLViewer_images.qm \
+ GLViewer_msg_en.qm
+
+libGLViewer_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+libGLViewer_la_LDFLAGS=$(QT_MT_LIBS) $(CAS_KERNEL)
+
+libGLViewer_la_LIBADD= ../SUIT/libsuit.la
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : caf
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= GLViewer.h \
- GLViewer_AspectLine.h \
- GLViewer_BaseDrawers.h \
- GLViewer_BaseObjects.h \
- GLViewer_Compass.h \
- GLViewer_Context.h \
- GLViewer_CoordSystem.h \
- GLViewer_Defs.h \
- GLViewer_Drawer.h \
- GLViewer_Geom.h \
- GLViewer_Grid.h \
- GLViewer_Group.h \
- GLViewer_MimeSource.h \
- GLViewer_Object.h \
- GLViewer_Selector.h \
- GLViewer_Selector2d.h \
- GLViewer_Text.h \
- GLViewer_Tools.h \
- GLViewer_ToolTip.h \
- GLViewer_ViewFrame.h \
- GLViewer_ViewManager.h \
- GLViewer_ViewPort.h \
- GLViewer_ViewPort2d.h \
- GLViewer_Viewer.h \
- GLViewer_Viewer2d.h \
- GLViewer_Widget.h
-
-# .po files to transform in .qm
-PO_FILES = GLViewer_images.po \
- GLViewer_msg_en.po
-
-# Libraries targets
-LIB = libGLViewer.la
-
-LIB_SRC= GLViewer_AspectLine.cxx \
- GLViewer_BaseDrawers.cxx \
- GLViewer_BaseObjects.cxx \
- GLViewer_Compass.cxx \
- GLViewer_Context.cxx \
- GLViewer_CoordSystem.cxx \
- GLViewer_Drawer.cxx \
- GLViewer_Geom.cxx \
- GLViewer_Grid.cxx \
- GLViewer_Group.cxx \
- GLViewer_MimeSource.cxx \
- GLViewer_Object.cxx \
- GLViewer_Selector.cxx \
- GLViewer_Selector2d.cxx \
- GLViewer_Text.cxx \
- GLViewer_Tools.cxx \
- GLViewer_ToolTip.cxx \
- GLViewer_ViewFrame.cxx \
- GLViewer_ViewManager.cxx \
- GLViewer_ViewPort.cxx \
- GLViewer_ViewPort2d.cxx \
- GLViewer_Viewer.cxx \
- GLViewer_Viewer2d.cxx \
- GLViewer_Widget.cxx
-
-LIB_MOC = GLViewer_Selector.h \
- GLViewer_Selector2d.h \
- GLViewer_ToolTip.h \
- GLViewer_ViewFrame.h \
- GLViewer_ViewManager.h \
- GLViewer_ViewPort.h \
- GLViewer_ViewPort2d.h \
- GLViewer_Viewer.h \
- GLViewer_Viewer2d.h \
- GLViewer_Widget.h
-
-RESOURCES_FILES = cursor_rotate.png \
- cursor_sketch.png \
- cursor_zoom.png \
- view_dump.png \
- view_fitall.png \
- view_fitarea.png \
- view_fitselect.png \
- view_glpan.png \
- view_pan.png \
- view_reset.png \
- view_zoom.png
-
-CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS) $(CAS_KERNEL)
-
-LIBS+= -lsuit -L/usr/X11R6/lib@LIB_LOCATION_SUFFIX@ -lGLU
-
-@CONCLUDE@
msgid "GLViewer_ViewFrame::DUMP_VIEW_ERROR_DLG_TEXT"
msgstr "Can't save Dump View in file"
+
+msgid "GLViewer_ViewManager::GL_VIEW_TITLE"
+msgstr "GL Scene:%M - viewer:%V"
#include "LightApp_OBFilter.h"
+#include "LightApp_EventFilter.h"
+
#include "LightApp_OBSelector.h"
#include "LightApp_SelectionMgr.h"
+#include "LightApp_DataObject.h"
#include <CAM_Module.h>
#include <CAM_DataModel.h>
#include <QtxMRUAction.h>
#include <QtxDockAction.h>
#include <QtxToolBar.h>
+#include <qprocess.h>
#include <LogWindow.h>
#include <OB_Browser.h>
#include <OB_ListView.h>
+#include <OB_ObjSearch.h>
#ifndef DISABLE_GLVIEWER
#include <GLViewer_Viewer.h>
// #include <SUPERVGraph_ViewManager.h>
//#endif
+#ifndef DISABLE_QXGRAPHVIEWER
+ #include <QxGraph_ViewModel.h>
+ #include <QxGraph_ViewWindow.h>
+ #include <QxGraph_ViewManager.h>
+#endif
+
#include <QtxWorkstack.h>
#include <qdir.h>
myAccel->setActionKey( SUIT_Accel::RotateUp, ALT+Key_Up, VTKViewer_Viewer::Type() );
myAccel->setActionKey( SUIT_Accel::RotateDown, ALT+Key_Down, VTKViewer_Viewer::Type() );
#endif
+#ifndef DISABLE_PLOT2DVIEWER
+ myAccel->setActionKey( SUIT_Accel::PanLeft, CTRL+Key_Left, Plot2d_Viewer::Type() );
+ myAccel->setActionKey( SUIT_Accel::PanRight, CTRL+Key_Right, Plot2d_Viewer::Type() );
+ myAccel->setActionKey( SUIT_Accel::PanUp, CTRL+Key_Up, Plot2d_Viewer::Type() );
+ myAccel->setActionKey( SUIT_Accel::PanDown, CTRL+Key_Down, Plot2d_Viewer::Type() );
+ myAccel->setActionKey( SUIT_Accel::ZoomIn, CTRL+Key_Plus, Plot2d_Viewer::Type() );
+ myAccel->setActionKey( SUIT_Accel::ZoomOut, CTRL+Key_Minus, Plot2d_Viewer::Type() );
+ myAccel->setActionKey( SUIT_Accel::ZoomFit, CTRL+Key_Asterisk, Plot2d_Viewer::Type() );
+#endif
connect( mySelMgr, SIGNAL( selectionChanged() ), this, SLOT( onSelection() ) );
putInfo( "" );
desktop()->statusBar()->message( "" );
+
+ LightApp_EventFilter::Init();
}
/*!Gets application name.*/
int id = LightApp_Application::UserID + FIRST_HELP_ID;
// help for KERNEL and GUI
QCString dir;
- QString aFileName = "index.htm";
+ QString aFileName = "index.html";
QString root;
QAction* a;
if (dir = getenv("GUI_ROOT_DIR")) {
- root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("doc") + Qtx::addSlash("salome") +
- Qtx::addSlash("gui") + Qtx::addSlash("GUI") );
+ root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") +
+ Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash("GUI") );
if ( QFileInfo( root + aFileName ).exists() ) {
a = createAction( id, tr( QString("GUI Help") ), QIconSet(),
tr( QString("GUI Help") ),
}
}
if (dir = getenv("KERNEL_ROOT_DIR")) {
- QString aFN = "index.html";
root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") +
Qtx::addSlash("salome") );
- if ( QFileInfo( root + aFN ).exists() ) {
+ if ( QFileInfo( root + aFileName ).exists() ) {
a = createAction( id, tr( QString("KERNEL Help") ), QIconSet(),
tr( QString("KERNEL Help") ),
tr( QString("KERNEL Help") ),
QString modName = moduleName( *it );
if (dir = getenv( modName + "_ROOT_DIR")) {
- root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("doc") + Qtx::addSlash("salome") +
- Qtx::addSlash("gui") + Qtx::addSlash(modName) );
+ root = Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") +
+ Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash(modName) );
if ( QFileInfo( root + aFileName ).exists() ) {
QAction* a = createAction( id, tr( moduleTitle(modName) + QString(" Help") ), QIconSet(),
if ( modIcon.isNull() )
modIcon = QPixmap( imageEmptyIcon );
- QToolBar* modTBar = new QtxToolBar( true, desk );
- modTBar->setLabel( tr( "INF_TOOLBAR_MODULES" ) );
+ QStringList modList;
+ modules( modList, false );
+
+ if( modList.count()>1 )
+ {
+ QToolBar* modTBar = new QtxToolBar( true, desk );
+ modTBar->setLabel( tr( "INF_TOOLBAR_MODULES" ) );
- QActionGroup* modGroup = new QActionGroup( this );
- modGroup->setExclusive( true );
- modGroup->setUsesDropDown( true );
+ QActionGroup* modGroup = new QActionGroup( this );
+ modGroup->setExclusive( true );
+ modGroup->setUsesDropDown( true );
- a = createAction( -1, tr( "APP_NAME" ), defIcon, tr( "APP_NAME" ),
- tr( "PRP_APP_MODULE" ), 0, desk, true );
- modGroup->add( a );
- myActions.insert( QString(), a );
+ a = createAction( -1, tr( "APP_NAME" ), defIcon, tr( "APP_NAME" ),
+ tr( "PRP_APP_MODULE" ), 0, desk, true );
+ modGroup->add( a );
+ myActions.insert( QString(), a );
- QMap<QString, QString> iconMap;
- moduleIconNames( iconMap );
+ QMap<QString, QString> iconMap;
+ moduleIconNames( iconMap );
- const int iconSize = 20;
+ const int iconSize = 20;
- modGroup->addTo( modTBar );
- QObjectList *l = modTBar->queryList( "QComboBox" );
- QObjectListIt oit( *l );
- while ( QObject* obj = oit.current() ) {
- QComboBox* cb = (QComboBox*)obj;
- if ( cb ) cb->setFocusPolicy( QWidget::NoFocus );
+ modGroup->addTo( modTBar );
+ QObjectList *l = modTBar->queryList( "QComboBox" );
+ QObjectListIt oit( *l );
+ while ( QObject* obj = oit.current() ) {
+ QComboBox* cb = (QComboBox*)obj;
+ if ( cb ) cb->setFocusPolicy( QWidget::NoFocus );
++oit;
- }
- delete l;
+ }
+ delete l;
- modTBar->addSeparator();
+ modTBar->addSeparator();
- QStringList modList;
- modules( modList, false );
-
- for ( it = modList.begin(); it != modList.end(); ++it )
- {
- if ( !isLibExists( *it ) )
+ for ( it = modList.begin(); it != modList.end(); ++it )
{
- qDebug( QString( "Library '%1' cannot be found" ).arg( *it ) );
- continue;
- }
+ if ( !isLibExists( *it ) )
+ continue;
+
+ QString iconName;
+ if ( iconMap.contains( *it ) )
+ iconName = iconMap[*it];
- QString iconName;
- if ( iconMap.contains( *it ) )
- iconName = iconMap[*it];
+ QString modName = moduleName( *it );
- QString modName = moduleName( *it );
+ QPixmap icon = resMgr->loadPixmap( modName, iconName, false );
+ if ( icon.isNull() )
+ {
+ icon = modIcon;
+ printf( "****************************************************************\n" );
+ printf( "* Icon for %s not found. Using the default one.\n", (*it).latin1() );
+ printf( "****************************************************************\n" );
+ }
- QPixmap icon = resMgr->loadPixmap( modName, iconName, false );
- if ( icon.isNull() )
- icon = modIcon;
+ icon.convertFromImage( icon.convertToImage().smoothScale( iconSize, iconSize, QImage::ScaleMin ) );
- icon.convertFromImage( icon.convertToImage().smoothScale( iconSize, iconSize, QImage::ScaleMin ) );
+ QAction* a = createAction( -1, *it, icon, *it, tr( "PRP_MODULE" ).arg( *it ), 0, desk, true );
+ a->addTo( modTBar );
+ modGroup->add( a );
- QAction* a = createAction( -1, *it, icon, *it, tr( "PRP_MODULE" ).arg( *it ), 0, desk, true );
- a->addTo( modTBar );
- modGroup->add( a );
+ myActions.insert( *it, a );
+ }
- myActions.insert( *it, a );
+ SUIT_Tools::simplifySeparators( modTBar );
+ connect( modGroup, SIGNAL( selected( QAction* ) ), this, SLOT( onModuleActivation( QAction* ) ) );
}
- SUIT_Tools::simplifySeparators( modTBar );
-
// New window
int windowMenu = createMenu( tr( "MEN_DESK_WINDOW" ), -1, MenuWindowId, 100 );
int newWinMenu = createMenu( tr( "MEN_DESK_NEWWINDOW" ), windowMenu, -1, 0 );
#ifndef DISABLE_VTKVIEWER
createActionForViewer( NewVTKViewId, newWinMenu, QString::number( 3 ), ALT+Key_K );
#endif
+#ifndef DISABLE_QXGRAPHVIEWER
+ createActionForViewer( NewQxGraphViewId, newWinMenu, QString::number( 4 ), ALT+Key_C );
+#endif
createAction( RenameId, tr( "TOT_RENAME" ), QIconSet(), tr( "MEN_DESK_RENAME" ), tr( "PRP_RENAME" ),
SHIFT+Key_R, desk, false, this, SLOT( onRenameWindow() ) );
createMenu( RenameId, windowMenu, -1 );
- connect( modGroup, SIGNAL( selected( QAction* ) ), this, SLOT( onModuleActivation( QAction* ) ) );
-
int fileMenu = createMenu( tr( "MEN_DESK_FILE" ), -1 );
createMenu( PreferencesId, fileMenu, 15, -1 );
createMenu( separator(), fileMenu, -1, 15, -1 );
bool cancelled = false;
while ( !modName.isEmpty() && !activeStudy() && !cancelled ){
LightApp_ModuleDlg aDlg( desktop(), modName, icon );
- int res = aDlg.exec();
+ QMap<int, QString> opmap = activateModuleActions();
+ for ( QMap<int, QString>::ConstIterator it = opmap.begin(); it != opmap.end(); ++it )
+ aDlg.addButton( it.data(), it.key() );
- switch ( res ){
- case 1:
- onNewDoc();
- break;
- case 2:
- onOpenDoc();
- break;
- case 3:
- //onLoadStudy();
- //break;
- case 0:
- default:
+ int res = aDlg.exec();
+ if ( res != QDialog::Rejected ) {
+ // some operation is selected
+ moduleActionSelected( res );
+ }
+ else {
putInfo( tr("INF_CANCELLED") );
myActions[QString()]->setOn( true );
cancelled = true;
case NewVTKViewId:
type = VTKViewer_Viewer::Type();
break;
+#endif
+#ifndef DISABLE_QXGRAPHVIEWER
+ case NewQxGraphViewId:
+ type = QxGraph_Viewer::Type();
+ break;
#endif
}
if( a )
a->setEnabled( activeStudy() );
#endif
+
+#ifndef DISABLE_QXGRAPHVIEWER
+ a = action( NewQxGraphViewId );
+ if( a )
+ a->setEnabled( activeStudy() );
+#endif
}
/*!
\class RunBrowser
Runs system command in separate thread
*/
-class RunBrowser: public QThread {
+class RunBrowser: public QThread
+{
public:
-
- RunBrowser( LightApp_Application* app, QString theApp, QString theParams, QString theHelpFile, QString theContext=NULL):
- myApp(theApp), myParams(theParams),
+ RunBrowser (LightApp_Application* app, QString theApp, QString theParams,
+ QString theHelpFile, QString theContext=NULL)
+ : myApp(theApp), myParams(theParams),
#ifdef WIN32
myHelpFile("file://" + theHelpFile + theContext),
#else
#endif
myStatus(0),
myLApp( app )
-{
-};
+ {
+ };
virtual void run()
{
QString aCommand;
- if ( !myApp.isEmpty())
+ if (!myApp.isEmpty())
+ {
+ //aCommand.sprintf("%s %s %s",myApp.latin1(),myParams.latin1(),myHelpFile.latin1());
+
+ //QProcess* proc = new QProcess();
+ //proc->addArgument( aCommand );
+
+ QProcess* proc = new QProcess();
+ proc->addArgument( myApp );
+ if (!myParams.isEmpty()) proc->addArgument( myParams );
+ proc->addArgument( myHelpFile );
+ //myStatus = system(aCommand);
+
+ //if(myStatus != 0)
+ if(!proc->start())
{
- aCommand.sprintf("%s %s %s",myApp.latin1(),myParams.latin1(),myHelpFile.latin1());
- myStatus = system(aCommand);
- if(myStatus != 0)
- {
- QCustomEvent* ce2000 = new QCustomEvent( 2000 );
- QString* msg = new QString( QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").arg(myApp).arg(myHelpFile) );
- ce2000->setData( msg );
- postEvent( myLApp, ce2000 );
- }
+ QCustomEvent* ce2000 = new QCustomEvent( 2000 );
+ QString* msg = new QString( QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").arg(myApp).arg(myHelpFile) );
+ ce2000->setData( msg );
+ postEvent( myLApp, ce2000 );
}
+ }
}
private:
const QAction* obj = (QAction*) sender();
QString aComponentName = obj->name();
- QString aFileName = "index.htm";
- QString aFileNameKernel = "index.html";
+ QString aFileName = "index.html";
QCString dir = getenv( aComponentName + "_ROOT_DIR");
QString homeDir = !aComponentName.compare(QString("KERNEL")) ?
Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") + Qtx::addSlash("salome") ) :
- Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("doc") + Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash(aComponentName) );
+ Qtx::addSlash( Qtx::addSlash(dir) + Qtx::addSlash("share") + Qtx::addSlash("doc") + Qtx::addSlash("salome") + Qtx::addSlash("gui") + Qtx::addSlash(aComponentName) );
- QString helpFile = QFileInfo( homeDir + (!aComponentName.compare(QString("KERNEL")) ? aFileNameKernel : aFileName) ).absFilePath();
+ QString helpFile = QFileInfo( homeDir + aFileName ).absFilePath();
SUIT_ResourceMgr* resMgr = resourceMgr();
- QString anApp = resMgr->stringValue("ExternalBrowser", "application");
+ QString platform;
+#ifdef WIN32
+ platform = "winapplication";
+#else
+ platform = "application";
+#endif
+ QString anApp = resMgr->stringValue("ExternalBrowser", platform);
+#ifdef WIN32
+ QString quote("\"");
+ anApp.prepend( quote );
+ anApp.append( quote );
+#endif
QString aParams = resMgr->stringValue("ExternalBrowser", "parameters");
if (!anApp.isEmpty()) {
void LightApp_Application::onHelpContextModule(const QString& theComponentName, const QString& theFileName)
{
QCString dir = getenv( theComponentName + "_ROOT_DIR");
- QString homeDir = Qtx::addSlash(Qtx::addSlash(dir)+Qtx::addSlash("doc")+Qtx::addSlash("salome")+Qtx::addSlash("gui")+Qtx::addSlash(theComponentName));
+ QString homeDir = Qtx::addSlash(Qtx::addSlash(dir)+Qtx::addSlash("share")+Qtx::addSlash("doc")+Qtx::addSlash("salome")+Qtx::addSlash("gui")+Qtx::addSlash(theComponentName));
QString helpFile = QFileInfo( homeDir + theFileName ).absFilePath();
SUIT_ResourceMgr* resMgr = resourceMgr();
- QString anApp = resMgr->stringValue("ExternalBrowser", "application");
+ QString platform;
+#ifdef WIN32
+ platform = "winapplication";
+#else
+ platform = "application";
+#endif
+ QString anApp = resMgr->stringValue("ExternalBrowser", platform);
+#ifdef WIN32
+ QString quote("\"");
+ anApp.prepend( quote );
+ anApp.append( quote );
+#endif
QString aParams = resMgr->stringValue("ExternalBrowser", "parameters");
if (!anApp.isEmpty()) {
sId = activeStudy()->id();
}
+ bool anIsEmpty = !myWindows[flag]->isEmpty();
QWidget* wid = myWindows[flag]->widget( sId );
myWindows[flag]->remove( sId );
delete wid;
- setWindowShown( flag, !myWindows[flag]->isEmpty() );
+ //setWindowShown( flag, !myWindows[flag]->isEmpty() );
+ setWindowShown( flag, anIsEmpty );
}
/*!
// viewMgr = new SUPERVGraph_ViewManager( activeStudy(), desktop(), new SUPERVGraph_Viewer() );
// }
//#endif
+#ifndef DISABLE_QXGRAPHVIEWER
+ if( vmType == QxGraph_Viewer::Type() )
+ {
+ viewMgr = new QxGraph_ViewManager( activeStudy(), desktop(), new QxGraph_Viewer() );
+ }
+#endif
#ifndef DISABLE_OCCVIEWER
if( vmType == OCCViewer_Viewer::Type() )
{
vm = new OCCViewer_Viewer();
#endif
vm->setBackgroundColor( resMgr->colorValue( "OCCViewer", "background", vm->backgroundColor() ) );
- vm->setTrihedronSize( resMgr->integerValue( "OCCViewer", "trihedron_size", vm->trihedronSize() ) );
+ vm->setTrihedronSize( resMgr->doubleValue( "OCCViewer", "trihedron_size", vm->trihedronSize() ) );
int u( 1 ), v( 1 );
vm->isos( u, v );
u = resMgr->integerValue( "OCCViewer", "iso_number_u", u );
if( vm )
{
vm->setBackgroundColor( resMgr->colorValue( "VTKViewer", "background", vm->backgroundColor() ) );
- vm->setTrihedronSize( resMgr->integerValue( "VTKViewer", "trihedron_size", vm->trihedronSize() ),
+ vm->setTrihedronSize( resMgr->doubleValue( "VTKViewer", "trihedron_size", vm->trihedronSize() ),
resMgr->booleanValue( "VTKViewer", "relative_size", vm->trihedronRelative() ) );
new LightApp_VTKSelector( vm, mySelMgr );
}
activateModule( defaultModule() );
+ if ( objectBrowser() )
+ objectBrowser()->openLevels();
+
activateWindows();
}
//aRoot->dump();
}
getWindow( WT_ObjectBrowser );
- if ( objectBrowser() != 0 ) {
+ if ( objectBrowser() )
objectBrowser()->setRootObject( aRoot );
- }
activateModule( defaultModule() );
+ if ( objectBrowser() )
+ objectBrowser()->openLevels();
+
activateWindows();
emit studyOpened();
}
/*!Protected SLOT. On study closed.*/
-void LightApp_Application::onStudyClosed( SUIT_Study* )
+void LightApp_Application::onStudyClosed( SUIT_Study* s )
{
- emit studyClosed();
-
// Bug 10396: clear selection
mySelMgr->clearSelected();
+ // Bug 12944: emit signal only after clear selection
+ emit studyClosed();
+
activateModule( "" );
- saveWindowsGeometry();
+ for ( WindowMap::ConstIterator itr = myWindows.begin(); s && itr != myWindows.end(); ++itr )
+ removeWindow( itr.key(), s->id() );
}
/*!Protected SLOT.On desktop activated.*/
sMod->preferencesChanged( section, param );
else
preferencesChanged( section, param );
+ // emit signal to allow additional preferences changing processing
+ emit preferenceChanged( modName, section, param );
}
/*!Private SLOT. On open document with name \a aName.*/
void LightApp_Application::beforeCloseDoc( SUIT_Study* s )
{
CAM_Application::beforeCloseDoc( s );
-
- for ( WindowMap::ConstIterator itr = myWindows.begin(); s && itr != myWindows.end(); ++itr )
- removeWindow( itr.key(), s->id() );
}
/*!Update actions.*/
if ( flag == WT_ObjectBrowser )
{
OB_Browser* ob = new OB_Browser( desktop() );
+ ob->setSearch( new OB_ObjSearch( ob ) );
ob->setAutoUpdate( true );
//ob->setAutoOpenLevel( 1 ); // commented by ASV as a fix to bug IPAL10107
ob->setCaption( tr( "OBJECT_BROWSER" ) );
int extgroup = pref->addPreference( tr( "PREF_GROUP_EXT_BROWSER" ), genTab );
pref->setItemProperty( extgroup, "columns", 1 );
- int apppref = pref->addPreference( tr( "PREF_APP" ), extgroup, LightApp_Preferences::File, "ExternalBrowser", "application" );
+ QString platform;
+#ifdef WIN32
+ platform = "winapplication";
+#else
+ platform = "application";
+#endif
+ int apppref = pref->addPreference( tr( "PREF_APP" ), extgroup, LightApp_Preferences::File, "ExternalBrowser", platform );
pref->setItemProperty( apppref, "existing", true );
pref->setItemProperty( apppref, "flags", QFileInfo::ExeUser );
pref->setItemProperty( apppref, "readOnly", false );
pref->setItemProperty( plot2dGroup, "columns", 1 );
int occTS = pref->addPreference( tr( "PREF_TRIHEDRON_SIZE" ), occGroup,
- LightApp_Preferences::IntSpin, "OCCViewer", "trihedron_size" );
+ LightApp_Preferences::DblSpin, "OCCViewer", "trihedron_size" );
pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), occGroup,
LightApp_Preferences::Color, "OCCViewer", "background" );
- pref->setItemProperty( occTS, "min", 1 );
+ pref->setItemProperty( occTS, "min", 1.0E-06 );
pref->setItemProperty( occTS, "max", 1000 );
int isoU = pref->addPreference( tr( "PREF_ISOS_U" ), occGroup,
pref->setItemProperty( isoV, "max", 100000 );
int vtkTS = pref->addPreference( tr( "PREF_TRIHEDRON_SIZE" ), vtkGroup,
- LightApp_Preferences::IntSpin, "VTKViewer", "trihedron_size" );
+ LightApp_Preferences::DblSpin, "VTKViewer", "trihedron_size" );
pref->addPreference( tr( "PREF_RELATIVE_SIZE" ), vtkGroup, LightApp_Preferences::Bool, "VTKViewer", "relative_size" );
pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), vtkGroup,
LightApp_Preferences::Color, "VTKViewer", "background" );
- pref->setItemProperty( vtkTS, "min", 1 );
+ pref->setItemProperty( vtkTS, "min", 1.0E-06 );
pref->setItemProperty( vtkTS, "max", 150 );
pref->addPreference( tr( "PREF_SHOW_LEGEND" ), plot2dGroup,
#ifndef DISABLE_OCCVIEWER
if ( sec == QString( "OCCViewer" ) && param == QString( "trihedron_size" ) )
{
- int sz = resMgr->integerValue( sec, param, -1 );
+ double sz = resMgr->doubleValue( sec, param, -1 );
QPtrList<SUIT_ViewManager> lst;
viewManagers( OCCViewer_Viewer::Type(), lst );
for ( QPtrListIterator<SUIT_ViewManager> it( lst ); it.current() && sz >= 0; ++it )
#ifndef DISABLE_VTKVIEWER
if ( sec == QString( "VTKViewer" ) && (param == QString( "trihedron_size" ) || param == QString( "relative_size" )) )
{
- int sz = resMgr->integerValue( "VTKViewer", "trihedron_size", -1 );
+ double sz = resMgr->doubleValue( "VTKViewer", "trihedron_size", -1 );
bool isRelative = resMgr->booleanValue( "VTKViewer", "relative_size", true );
QPtrList<SUIT_ViewManager> lst;
#ifndef DISABLE_SALOMEOBJECT
desktop()->setCaption( aTitle );
}
+/*!
+ \brief Get module activation actions
+ \return map <action_id><action_name> where
+ - action_id is unique non-zero action identifier
+ - action_name is action title
+ \sa moduleActionSelected()
+*/
+QMap<int, QString> LightApp_Application::activateModuleActions() const
+{
+ QMap<int, QString> opmap;
+ opmap.insert( NewStudyId, tr( "ACTIVATE_MODULE_OP_NEW" ) );
+ opmap.insert( OpenStudyId, tr( "ACTIVATE_MODULE_OP_OPEN" ) );
+ return opmap;
+}
+
+/*!
+ \brief Process module activation action.
+ \param id action identifier
+ \sa activateModuleActions()
+*/
+void LightApp_Application::moduleActionSelected( const int id )
+{
+ switch ( id ) {
+ case NewStudyId:
+ onNewDoc();
+ break;
+ case OpenStudyId:
+ onOpenDoc();
+ break;
+ default:
+ break;
+ }
+}
/*!
Updates windows after close document
*/
currentWindows( winMap );
if ( activeStudy() ) {
- for ( QMap<int, int>::ConstIterator it = winMap.begin(); it != winMap.end(); ++it )
- getWindow( it.key() );
+ for ( QMap<int, int>::ConstIterator it = winMap.begin(); it != winMap.end(); ++it ) {
+ getWindow( it.key() );
+
+ Dock dock; int index, extraOffset; bool nl;
+ if ( desktop()->getLocation( myWindows[it.key()], dock, index, nl, extraOffset )
+ &&
+ dock != (Dock)it.data() )
+ desktop()->moveDockWindow( myWindows[it.key()], (Dock)it.data() );
+ }
loadWindowsGeometry();
}
thePopup->insertSeparator();
thePopup->insertItem( tr( "MEN_REFRESH" ), this, SLOT( onRefresh() ) );
+ thePopup->insertItem( tr( "MEN_FIND" ), this, SLOT( onFind() ) );
}
/*!
return false;
QString lib = moduleLibrary( moduleTitle );
+
+ //abd: changed libSalomePyQtGUI to SalomePyQtGUI for WIN32
+ bool isPythonModule = lib.contains("SalomePyQtGUI");
+
QStringList paths;
#ifdef WIN32
paths = QStringList::split( ";", ::getenv( "PATH" ) );
paths = QStringList::split( ":", ::getenv( "LD_LIBRARY_PATH" ) );
#endif
+ bool isLibFound = false;
QStringList::const_iterator anIt = paths.begin(), aLast = paths.end();
for( ; anIt!=aLast; anIt++ )
{
QFileInfo inf( Qtx::addSlash( *anIt ) + lib );
+
if( inf.exists() )
+ {
+ isLibFound = true;
+ break;
+ }
+ }
+
+ if ( !isLibFound )
+ {
+ printf( "****************************************************************\n" );
+ printf( "* Warning: library %s cannot be found\n", lib.latin1() );
+ printf( "* Module %s will not be available in GUI mode\n", moduleTitle.latin1() );
+ printf( "****************************************************************\n" );
+ }
+ else if ( !isPythonModule )
+ return true;
+
+ if ( isPythonModule )
+ {
+ QString pylib = moduleName( moduleTitle ) + QString(".py");
+ QString pylibgui = moduleName( moduleTitle ) + QString("GUI.py");
+
+ // Check the python library
+#ifdef WIN32
+ paths = QStringList::split( ";", ::getenv( "PATH" ) );
+#else
+ paths = QStringList::split( ":", ::getenv( "PYTHONPATH" ) );
+#endif
+ bool isPyLib = false, isPyGuiLib = false;
+ QStringList::const_iterator anIt = paths.begin(), aLast = paths.end();
+ for( ; anIt!=aLast; anIt++ )
+ {
+ QFileInfo inf( Qtx::addSlash( *anIt ) + pylib );
+ QFileInfo infgui( Qtx::addSlash( *anIt ) + pylibgui );
+
+ if( !isPyLib && inf.exists() )
+ isPyLib = true;
+
+ if( !isPyGuiLib && infgui.exists() )
+ isPyGuiLib = true;
+
+ if ( isPyLib && isPyGuiLib && isLibFound)
+ return true;
+ }
+
+ printf( "****************************************************************\n" );
+ printf( "* Warning: python library for %s cannot be found:\n", moduleTitle.latin1() );
+ if (!isPyLib)
+ printf( "* No module named %s\n", moduleName( moduleTitle ).latin1() );
+ if (!isPyGuiLib)
+ printf( "* No module named %s\n", (moduleName( moduleTitle ) + QString("GUI")).latin1() );
+ printf( "****************************************************************\n" );
return true;
}
return false;
}
return CAM_Application::event( e );
}
+
+/*! Check data object */
+bool LightApp_Application::checkDataObject(LightApp_DataObject* theObj)
+{
+ if (theObj)
+ {
+ bool isSuitable = !theObj->entry().isEmpty() &&
+ !theObj->componentDataType().isEmpty() &&
+ !theObj->name().isEmpty();
+ return isSuitable;
+ }
+
+ return false;
+}
+
+void LightApp_Application::onFind()
+{
+ objectBrowser()->enableSearch( true );
+}
class LightApp_WidgetContainer;
class LightApp_Preferences;
class LightApp_SelectionMgr;
+class LightApp_DataObject;
class SUIT_Study;
class SUIT_Accel;
class CAM_Module;
NewVTKViewId,
#endif
+#ifndef DISABLE_QXGRAPHVIEWER
+ NewQxGraphViewId,
+#endif
+
PreferencesId, MRUId, UserID };
+
+protected:
+ enum { NewStudyId = 1, OpenStudyId };
+
public:
LightApp_Application();
virtual ~LightApp_Application();
SUIT_ViewManager* getViewManager( const QString&, const bool );
virtual void addViewManager( SUIT_ViewManager* );
virtual void removeViewManager( SUIT_ViewManager* );
+ virtual SUIT_ViewManager* createViewManager( const QString& vmType );
+
QWidget* getWindow( const int, const int = -1 );
QWidget* window( const int, const int = -1 ) const;
void addWindow( QWidget*, const int, const int = -1 );
static int studyId();
virtual bool event( QEvent* );
+
+ virtual bool checkDataObject( LightApp_DataObject* theObj );
signals:
void studyOpened();
void studySaved();
void studyClosed();
+ void preferenceChanged( const QString&, const QString&, const QString& );
public slots:
virtual void onHelpContentsModule();
virtual void preferencesChanged( const QString&, const QString& );
virtual void savePreferences();
virtual void updateDesktopTitle();
+
+ virtual QMap<int, QString> activateModuleActions() const;
+ virtual void moduleActionSelected( const int );
protected slots:
virtual void onDesktopActivated();
private slots:
void onSelection();
void onRefresh();
+ void onFind();
void onPreferences();
void onMRUActivated( QString );
void onPreferenceChanged( QString&, QString&, QString& );
QString defaultModule() const;
void currentWindows( QMap<int, int>& ) const;
void currentViewManagers( QStringList& ) const;
- virtual SUIT_ViewManager* createViewManager( const QString& vmType );
void moduleIconNames( QMap<QString, QString>& ) const;
void activateWindows();
{
LightApp_ModuleObject* modelRoot = dynamic_cast<LightApp_ModuleObject*>( root() );
DataObjectList ch;
+ QMap<SUIT_DataObject*,int> aMap;
if( modelRoot )
{
ch = modelRoot->children();
for ( DataObjectListIterator it( ch ); it.current(); ++it )
it.current()->setParent( 0 );
}
+
build();
+
+ modelRoot = dynamic_cast<LightApp_ModuleObject*>( root() );
+ if( modelRoot )
+ {
+ DataObjectList new_ch = modelRoot->children();
+ for ( DataObjectListIterator it1( new_ch ); it1.current(); ++it1 )
+ aMap.insert( it1.current(), 0 );
+ }
+
updateWidgets();
+
for( DataObjectListIterator it( ch ); it.current(); ++it )
- delete it.current();
+ if( !aMap.contains( it.current() ) )
+ delete it.current();
}
/*!
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
#include "LightApp_DataOwner.h"
#include "LightApp_DataObject.h"
-#ifndef WNT
-#include <typeinfo>
-#define _typeinfo std::type_info
-#else
-#include <typeinfo.h>
-#define _typeinfo type_info
-#endif
-
#include <iostream>
/*!Constructor. Initialize by \a theEntry.*/
-LightApp_DataOwner
-::LightApp_DataOwner( const QString& theEntry ):
- myEntry( theEntry )
+LightApp_DataOwner::LightApp_DataOwner( const QString& theEntry )
+: myEntry( theEntry )
{
}
#ifndef DISABLE_SALOMEOBJECT
/*!Constructor. Initialize by \a SALOME_InteractiveObject.*/
-LightApp_DataOwner
-::LightApp_DataOwner( const Handle(SALOME_InteractiveObject)& theIO ):
+LightApp_DataOwner::LightApp_DataOwner( const Handle(SALOME_InteractiveObject)& theIO ):
myEntry(!theIO.IsNull()? theIO->getEntry(): ""),
myIO(theIO)
{
#endif
/*!Destructor. Do nothing.*/
-LightApp_DataOwner
-::~LightApp_DataOwner()
-{
-}
-
-/*!Checks: Is current data owner equal \a obj.*/
-bool
-LightApp_DataOwner
-::isEqual( const SUIT_DataOwner& obj ) const
+LightApp_DataOwner::~LightApp_DataOwner()
{
- const LightApp_DataOwner* other = dynamic_cast<const LightApp_DataOwner*>( &obj );
-
- return other && entry() == other->entry();
}
-bool LightApp_DataOwner::operator<( const SUIT_DataOwner& obj ) const
+/*!Gets key string, used for data owners comparison.*/
+QString LightApp_DataOwner::keyString() const
{
- const LightApp_DataOwner* other = dynamic_cast<const LightApp_DataOwner*>( &obj );
- return entry() < other->entry();
+ return myEntry;
}
/*!Gets entry.*/
-QString
-LightApp_DataOwner
-::entry() const
+QString LightApp_DataOwner::entry() const
{
return myEntry;
}
#ifndef DISABLE_SALOMEOBJECT
/*!Gets SALOME_InteractiveObject.*/
-const Handle(SALOME_InteractiveObject)&
-LightApp_DataOwner
-::IO() const
+const Handle(SALOME_InteractiveObject)& LightApp_DataOwner::IO() const
{
return myIO;
}
#include "SALOME_InteractiveObject.hxx"
#endif
+
/*!
This class provide data owner objects.
*/
LightApp_DataOwner( const QString& );
virtual ~LightApp_DataOwner();
- virtual bool isEqual( const SUIT_DataOwner& ) const;
- virtual bool operator<( const SUIT_DataOwner& ) const;
+ // *** jfa: The below line has been put here 14.02.2007.
+ // *** It cancels modifications from branch BR_Dev_For_4_0
+ virtual QString keyString() const;
#ifndef DISABLE_SALOMEOBJECT
const Handle(SALOME_InteractiveObject)& IO() const;
#include "LightApp_DataObject.h"
-#ifdef WNT
-#include <typeinfo.h>
-#endif
-
/*!Constructor.Initialize by \a entry and \a index*/
LightApp_DataSubOwner::LightApp_DataSubOwner( const QString& entry, const int index )
: LightApp_DataOwner( entry ),
{
}
-/*!Checks: Is current data sub owner equal \a obj.*/
-bool LightApp_DataSubOwner::isEqual( const SUIT_DataOwner& obj ) const
-{
- if (LightApp_DataOwner::isEqual(obj)) {
- const LightApp_DataSubOwner* other = dynamic_cast<const LightApp_DataSubOwner*>( &obj );
- return other && index() == other->index();
- }
- return false;
+/*!Gets key string, used for data owners comparison.*/
+QString LightApp_DataSubOwner::keyString() const
+{
+ QString aKey = LightApp_DataOwner::keyString();
+ aKey += QString("_%1").arg(index());
+ return aKey;
}
/*!Gets index.*/
LightApp_DataSubOwner( const QString&, const int );
virtual ~LightApp_DataSubOwner();
- virtual bool isEqual( const SUIT_DataOwner& ) const;
- int index() const;
+ // *** jfa: The below line has been put here 14.02.2007.
+ // *** It cancels modifications from branch BR_Dev_For_4_0
+ virtual QString keyString() const;
+ int index() const;
private:
int myIndex;
class SUIT_ResourceMgr;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*!
\class LightApp_Dialog
Base class for all LightApp dialogs.
public:
typedef QValueList<int> TypesList;
typedef QMap<int,QStringList> SelectedObjects;
-
+
enum ObjectWg
{
Label = 0x00000001,
//! Set all object selection buttons to inactive state
void deactivateAll();
-
+
signals:
//! selection in certain widget is changed
void selectionChanged ( int );
private:
ObjectMap myObjects;
+
QMap<int,QString> myTypeNames;
bool myIsExclusive, myIsBusy;
QPixmap myPixmap;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#ifndef LIGHTAPP_DISPLAYER_HEADER
#define LIGHTAPP_DISPLAYER_HEADER
+#include "LightApp.h"
+
#include <SALOME_Prs.h>
class QString;
Uniform mechanism of display/erase of objects in different views.
Objects are specified by string entry
*/
-class LightApp_Displayer : public SALOME_Displayer
+class LIGHTAPP_EXPORT LightApp_Displayer : public SALOME_Displayer
{
public:
LightApp_Displayer();
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "LightApp_EventFilter.h"
+
+#include <SUIT_Desktop.h>
+
+#include <qapplication.h>
+
+LightApp_EventFilter* LightApp_EventFilter::myFilter = NULL;
+
+/*!Constructor.*/
+LightApp_EventFilter::LightApp_EventFilter()
+: QObject()
+{
+ qApp->installEventFilter( this );
+}
+
+/*!Destructor.*/
+LightApp_EventFilter::~LightApp_EventFilter()
+{
+ qApp->removeEventFilter( this );
+}
+
+/*!
+ Custom event filter
+*/
+bool LightApp_EventFilter::eventFilter( QObject* o, QEvent* e )
+{
+ if ( e->type() == QEvent::WindowActivate && o->inherits("QDialog") )
+ {
+ QWidget* parent = ((QWidget*)o)->parentWidget();
+
+ SUIT_Desktop* aDesktop = 0;
+
+ while( parent )
+ {
+ if ( aDesktop = dynamic_cast<SUIT_Desktop*>(parent) )
+ break;
+ parent = parent->parentWidget();
+ }
+
+ if ( aDesktop )
+ aDesktop->emitActivated();
+ }
+
+ return QObject::eventFilter( o, e );
+}
+
+/*!Create new instance of LightApp_EventFilter*/
+void LightApp_EventFilter::Init()
+{
+ if( myFilter==NULL )
+ myFilter = new LightApp_EventFilter();
+}
+
+/*!Destroy filter.*/
+void LightApp_EventFilter::Destroy()
+{
+ if( myFilter )
+ {
+ delete myFilter;
+ myFilter = NULL;
+ }
+}
--- /dev/null
+// 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 LIGHTAPP_EVENTFILTER_H
+#define LIGHTAPP_EVENTFILTER_H
+
+#include "LightApp.h"
+
+#include <qobject.h>
+
+#if defined WNT
+#pragma warning( disable: 4251 )
+#endif
+
+/*!
+ Class provide event filter.
+*/
+class LIGHTAPP_EXPORT LightApp_EventFilter: public QObject
+{
+public:
+ static void Init();
+ static void Destroy();
+
+protected:
+ LightApp_EventFilter();
+ virtual ~LightApp_EventFilter();
+
+private:
+ /*! global event filter for qapplication */
+ virtual bool eventFilter( QObject* o, QEvent* e );
+
+private:
+ static LightApp_EventFilter* myFilter;
+};
+
+#if defined WNT
+#pragma warning( default: 4251 )
+#endif
+
+#endif
#include "LightApp_GLSelector.h"
#include "LightApp_DataOwner.h"
+#include "LightApp_DataObject.h"
#include <GLViewer_Context.h>
GLViewer_Object* obj = cont->SelectedObject();
if ( obj )
{
- LightApp_GLOwner* owner = dynamic_cast< LightApp_GLOwner* >( obj->owner() );
- if( owner )
+ LightApp_DataOwner* owner = dynamic_cast<LightApp_DataOwner*>( obj->owner() );
+ if ( owner )
aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( owner->entry() ) ) );
}
}
if ( !cont )
return;
- QMap<QString, GLViewer_Object*> aDisplayed;
- const ObjList& displayed = cont->getObjects();
- for ( ObjList::const_iterator it = displayed.begin(); it != displayed.end(); ++it )
- {
- GLViewer_Object* obj = *it;
- if ( obj && obj->getVisible() )
- {
- LightApp_GLOwner* owner = dynamic_cast< LightApp_GLOwner* >( obj->owner() );
- if ( owner )
- aDisplayed.insert( owner->entry(), obj );
- }
- }
-
- int Nb = 0;
- cont->clearSelected( false );
+ QMap<QString, int> aSelected;
for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
{
const LightApp_DataOwner* owner = dynamic_cast<const LightApp_DataOwner*>( (*itr).operator->() );
- if ( !owner )
- continue;
+ if ( owner )
+ aSelected.insert( owner->entry(), 0 );
+ }
- if ( aDisplayed.contains( owner->entry() ) )
+ bool changed = false;
+ const ObjList& displayed = cont->getObjects();
+ for ( ObjList::const_iterator it = displayed.begin(); it != displayed.end(); ++it )
+ {
+ GLViewer_Object* obj = *it;
+ if ( obj && obj->getVisible() )
{
- cont->setSelected( aDisplayed[owner->entry()], false );
- Nb++;
+ LightApp_DataOwner* owner = dynamic_cast<LightApp_DataOwner*>( obj->owner() );
+ bool sel = owner && aSelected.contains( owner->entry() );
+ changed = changed || sel != (bool)obj->isSelected();
+ if ( sel && !obj->isSelected() )
+ cont->setSelected( obj, false );
+ else if ( !sel && obj->isSelected() )
+ cont->remSelected( obj, false );
}
}
- if ( Nb > 0 )
+ if ( changed )
myViewer->updateAll();
}
-
-
-/*!
- Constructor
- \param entry - entry of object
-*/
-LightApp_GLOwner::LightApp_GLOwner( const char* entry )
-: GLViewer_Owner()
-{
- setEntry( entry );
-}
-
-/*!
- Destructor
-*/
-LightApp_GLOwner::~LightApp_GLOwner()
-{
-}
-
-/*!
- \return entry
-*/
-const char* LightApp_GLOwner::entry() const
-{
- return myEntry.c_str();
-}
-
-/*!
- Sets new entry
- \param entry - entry of object
-*/
-void LightApp_GLOwner::setEntry( const char* entry )
-{
- myEntry = entry;
-}
#include <string>
#include <GLViewer_Object.h>
+class LightApp_DataObject;
+
/*!
\class LightApp_GLSelector
Custom selector to get/set selection from GL viewer
};
-/*!
- This class provide data owner objects for GLViewer.
-*/
-class LIGHTAPP_EXPORT LightApp_GLOwner : public GLViewer_Owner
-{
-public:
- LightApp_GLOwner( const char* );
- ~LightApp_GLOwner();
-
- const char* entry() const;
- void setEntry( const char* );
-
-private:
- std::string myEntry;
-};
-
#endif
bool upd = getApp()->objectBrowser()->isAutoUpdate();
getApp()->objectBrowser()->setAutoUpdate( false );
- SUIT_DataObject* aDataObject = theDataObject;
if( theIsUpdateDataModel ){
if( CAM_DataModel* aDataModel = dataModel() ){
if ( LightApp_DataModel* aModel = dynamic_cast<LightApp_DataModel*>( aDataModel ) ) {
LightApp_DataObject* anObject = dynamic_cast<LightApp_DataObject*>(theDataObject);
LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>(getApp()->activeStudy());
aModel->update( anObject, aStudy );
-
- if(aParent && aParent->childPos(anObject) < 0)
- aDataObject = dynamic_cast<LightApp_DataObject*>(aParent);
}
}
}
getApp()->objectBrowser()->setAutoUpdate( upd );
- getApp()->objectBrowser()->updateTree( 0, false /*aDataObject*/ );
+ getApp()->objectBrowser()->updateTree( 0, false );
}
/*!NOT IMPLEMENTED*/
SUIT_Desktop* d = application()->desktop();
QAction
- *disp = createAction( -1, tr( "TOP_DISPLAY" ), p, tr( "MEN_DISPLAY" ), tr( "STB_DISPLAY" ),
+ *disp = createAction( -1, tr( "TOP_SHOW" ), p, tr( "MEN_SHOW" ), tr( "STB_SHOW" ),
0, d, false, this, SLOT( onShowHide() ) ),
- *erase = createAction( -1, tr( "TOP_ERASE" ), p, tr( "MEN_ERASE" ), tr( "STB_ERASE" ),
+ *erase = createAction( -1, tr( "TOP_HIDE" ), p, tr( "MEN_HIDE" ), tr( "STB_HIDE" ),
0, d, false, this, SLOT( onShowHide() ) ),
*dispOnly = createAction( -1, tr( "TOP_DISPLAY_ONLY" ), p, tr( "MEN_DISPLAY_ONLY" ), tr( "STB_DISPLAY_ONLY" ),
0, d, false, this, SLOT( onShowHide() ) ),
myPopupMgr->insert( eraseAll, -1, 0 );
myPopupMgr->insert( separator(), -1, 0 );
- QString oneAndNotActive = "( count( $component ) = 1 ) and ( component != activeModule )";
+ QString oneAndNotActive = "( count( $component ) = 1 ) and ( not( activeModule in $component ) )";
QString uniform = "true in $canBeDisplayed and %1 and ( activeModule = '%2' )";
uniform = uniform.arg( oneAndNotActive ).arg( name() );
myPopupMgr->setRule( disp, /*QString( "( not isVisible ) and " ) + */ uniform, true );
class QString;
class QVariant;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*!
\class LightApp_Module
Base class for all light modules
virtual void studyActivated() {};
virtual LightApp_Displayer* displayer();
+ virtual LightApp_Selection* createSelection() const;
public slots:
virtual bool activateModule( SUIT_Study* );
LightApp_Preferences* preferences() const;
virtual CAM_DataModel* createDataModel();
- virtual LightApp_Selection* createSelection() const;
int addPreference( const QString& label );
int addPreference( const QString& label, const int pId, const int = -1,
int myDisplay, myErase, myDisplayOnly, myEraseAll;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-// File : LightApp_ModuleDlg.cxx\r
-// Author : Michael Zorin (mzn)\r
-// Module : LightApp\r
-\r
-#include <LightApp_ModuleDlg.h>\r
-\r
-#include <qframe.h>\r
-#include <qlabel.h>\r
-#include <qpushbutton.h>\r
-#include <qlayout.h>\r
-#include <qpixmap.h>\r
-\r
-#ifndef WIN32\r
-using namespace std;\r
-#endif\r
-\r
-/*!Default icon*/\r
-static const char* const default_icon[] = { \r
-"48 48 17 1",\r
-". c None",\r
-"# c #161e4c",\r
-"b c #1d3638",\r
-"e c #2f585b",\r
-"i c #345b5e",\r
-"c c #386266",\r
-"g c #3f7477",\r
-"d c #4d8589",\r
-"m c #519099",\r
-"o c #6abbc1",\r
-"a c #70c9d3",\r
-"f c #79ddea",\r
-"n c #7adff2",\r
-"k c #7ce2f4",\r
-"j c #993550",\r
-"h c #d84b71",\r
-"l c #ef537d",\r
-"................................................",\r
-"................................................",\r
-"................................................",\r
-"................................................",\r
-"................................................",\r
-"................########.########.########......",\r
-"...............#aaaaaa###aaaaaa###aaaaaa##......",\r
-"..............#aaaaaa#b#aaaaaa#b#aaaaaa#c#......",\r
-".............########b########b########cc#......",\r
-".............#dddddd#b#dddddd#b#dddddd#cc#......",\r
-"...........########d########d########d#cc#......",\r
-"..........#aaaaaa###aaaaaa###aaaaaa##d#cc#......",\r
-".........#aaaaaa#b#aaaaaa#b#aaaaaa#c#d#cc#......",\r
-"........########b########e########cc#d#c#.......",\r
-"........#dddddd#b#dddddd#e#ffffff#cc#d####......",\r
-"......########d########d########f#cc###g##......",\r
-".....#aaaaaa###aaaaaa###hhhhhh##f#cc#gg#c#......",\r
-"....#aaaaaa#b#aaaaaa#i#hhhhhh#j#f#cc###cc#......",\r
-"...########b########i########jj#f#c#gg#cc#......",\r
-"...#kkkkkk#b#kkkkkk#i#llllll#jj#f####g#cc#......",\r
-"...#kkkkkk#b#kkkkkk#i#llllll#jj###m##g#cc#......",\r
-"...#knnkkk#b#kkkkkk#i#llllll#jj#mm#c#g#cc#......",\r
-"...#knnkkk#b#kkkkkk#i#llllll#jj###cc#g#c#.......",\r
-"...#kkkkkk#b#kkkkkk#i#llllll#j#dd#cc#g####......",\r
-"...#kkkkkk###kkkkkk###llllll####d#cc###g##......",\r
-"...########g########g########o##d#cc#gg#c#......",\r
-"....#gggggg#b#gggggg#b#oooooo#c#d#cc###cc#......",\r
-"...########b########b########cc#d#c#gg#cc#......",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#d####g#cc#......",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###g##g#cc#......",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#gg#c#g#cc#......",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###cc#g#c#.......",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#gg#cc#g##........",\r
-"...#kkkkkk###kkkkkk###kkkkkk####g#cc###.........",\r
-"...########g########g########g##g#cc#...........",\r
-"....#gggggg#b#gggggg#b#gggggg#c#g#cc#...........",\r
-"...########b########b########cc#g#c#............",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#g##.............",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###..............",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................",\r
-"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#.................",\r
-"...#kkkkkk###kkkkkk###kkkkkk##..................",\r
-"...########.########.########...................",\r
-"................................................",\r
-"................................................",\r
-"................................................",\r
-"................................................"};\r
-\r
-//==============================================================================================================================\r
-/*!\r
- * LightApp_ModuleDlg::LightApp_ModuleDlg \n\r
- *\r
- * Constructor.\r
- */\r
-//==============================================================================================================================\r
-LightApp_ModuleDlg::LightApp_ModuleDlg ( QWidget * parent, const QString& component, const QPixmap icon )\r
- : QDialog ( parent, "ActivateModuleDlg", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )\r
-{\r
- QPixmap defaultIcon( ( const char** ) default_icon );\r
- setCaption( tr( "CAPTION" ) );\r
- setSizeGripEnabled( TRUE );\r
- \r
- QGridLayout* ActivateModuleDlgLayout = new QGridLayout( this ); \r
- ActivateModuleDlgLayout->setMargin( 11 ); ActivateModuleDlgLayout->setSpacing( 6 );\r
-\r
- // Module's name and icon\r
- myComponentFrame = new QFrame( this, "myComponentFrame" );\r
- myComponentFrame->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Expanding ) );\r
- myComponentFrame->setMinimumHeight( 100 );\r
- myComponentFrame->setFrameStyle( QFrame::Box | QFrame::Sunken );\r
- \r
- QGridLayout* myComponentFrameLayout = new QGridLayout( myComponentFrame ); \r
- myComponentFrameLayout->setMargin( 11 ); myComponentFrameLayout->setSpacing( 6 );\r
-\r
- // --> icon\r
- myComponentIcon = new QLabel( myComponentFrame, "myComponentIcon" );\r
- myComponentIcon->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );\r
- myComponentIcon->setPixmap( !icon.isNull() ? icon : defaultIcon );\r
- myComponentIcon->setScaledContents( false );\r
- myComponentIcon->setAlignment( AlignCenter );\r
- // --> name\r
- myComponentLab = new QLabel( component, myComponentFrame, "myComponentLab" );\r
- QFont fnt = myComponentLab->font(); fnt.setBold( TRUE ); myComponentLab->setFont( fnt ); \r
- myComponentLab->setAlignment( AlignCenter );\r
-\r
- myComponentFrameLayout->addWidget( myComponentIcon, 0, 0 );\r
- myComponentFrameLayout->addWidget( myComponentLab, 0, 1 );\r
-\r
- // Info\r
- QVBoxLayout* infoLayout = new QVBoxLayout();\r
- infoLayout->setMargin( 0 ); infoLayout->setSpacing( 6 );\r
- \r
- // --> top line\r
- QFrame* myLine1 = new QFrame( this, "myLine1" );\r
- myLine1->setFrameStyle( QFrame::HLine | QFrame::Plain );\r
- // --> info label \r
- myInfoLabel = new QLabel( tr ("ActivateComponent_DESCRIPTION"), this, "myInfoLabel" );\r
- myInfoLabel->setAlignment( AlignCenter );\r
- // --> bottom line\r
- QFrame* myLine2 = new QFrame( this, "myLine2" );\r
- myLine2->setFrameStyle( QFrame::HLine | QFrame::Plain );\r
- \r
- infoLayout->addStretch();\r
- infoLayout->addWidget( myLine1 );\r
- infoLayout->addWidget( myInfoLabel );\r
- infoLayout->addWidget( myLine2 );\r
- infoLayout->addStretch();\r
- \r
- // Buttons\r
- QHBoxLayout* btnLayout = new QHBoxLayout(); \r
- btnLayout->setMargin( 0 ); btnLayout->setSpacing( 6 );\r
- \r
- // --> New\r
- myNewBtn = new QPushButton( tr( "NEW" ), this, "myNewBtn" );\r
- myNewBtn->setDefault( true ); myNewBtn->setAutoDefault( true );\r
- // --> Open\r
- myOpenBtn = new QPushButton( tr( "OPEN" ), this, "myOpenBtn" );\r
- myOpenBtn->setAutoDefault( true );\r
- // --> Load\r
- myLoadBtn = new QPushButton( tr( "LOAD" ), this, "myLoadBtn" );\r
- myLoadBtn->setAutoDefault( true );\r
- // --> Cancel\r
- myCancelBtn = new QPushButton( tr( "CANCEL" ), this, "myCancelBtn" );\r
- myCancelBtn->setAutoDefault( true );\r
- \r
- btnLayout->addWidget( myNewBtn );\r
- btnLayout->addWidget( myOpenBtn );\r
- btnLayout->addWidget( myLoadBtn );\r
- btnLayout->addStretch();\r
- btnLayout->addSpacing( 70 );\r
- btnLayout->addStretch();\r
- btnLayout->addWidget( myCancelBtn );\r
-\r
- ActivateModuleDlgLayout->addWidget( myComponentFrame, 0, 0 );\r
- ActivateModuleDlgLayout->addLayout( infoLayout, 0, 1 );\r
- ActivateModuleDlgLayout->addMultiCellLayout( btnLayout, 1, 1, 0, 1 );\r
-\r
- // signals and slots connections\r
- connect( myNewBtn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) );\r
- connect( myOpenBtn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) );\r
- connect( myLoadBtn, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) );\r
- connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );\r
-}\r
-\r
-//==============================================================================================================================\r
-/*!\r
- * LightApp_ModuleDlg::onButtonClicked\r
- *\r
- * Buttons slot\r
- */\r
-//==============================================================================================================================\r
-void LightApp_ModuleDlg::onButtonClicked()\r
-{\r
- QPushButton* btn = ( QPushButton* )sender();\r
- if ( btn == myNewBtn )\r
- done( 1 );\r
- if ( btn == myOpenBtn )\r
- done( 2 );\r
- if ( btn == myLoadBtn )\r
- done( 3 );\r
-}\r
+// File : LightApp_ModuleDlg.cxx
+// Author : Michael Zorin (mzn)
+// Module : LightApp
+
+#include <LightApp_ModuleDlg.h>
+
+#include <qlabel.h>
+
+static const char* default_icon[] = {
+"48 48 17 1",
+". c None",
+"# c #161e4c",
+"b c #1d3638",
+"e c #2f585b",
+"i c #345b5e",
+"c c #386266",
+"g c #3f7477",
+"d c #4d8589",
+"m c #519099",
+"o c #6abbc1",
+"a c #70c9d3",
+"f c #79ddea",
+"n c #7adff2",
+"k c #7ce2f4",
+"j c #993550",
+"h c #d84b71",
+"l c #ef537d",
+"................................................",
+"................................................",
+"................................................",
+"................................................",
+"................................................",
+"................########.########.########......",
+"...............#aaaaaa###aaaaaa###aaaaaa##......",
+"..............#aaaaaa#b#aaaaaa#b#aaaaaa#c#......",
+".............########b########b########cc#......",
+".............#dddddd#b#dddddd#b#dddddd#cc#......",
+"...........########d########d########d#cc#......",
+"..........#aaaaaa###aaaaaa###aaaaaa##d#cc#......",
+".........#aaaaaa#b#aaaaaa#b#aaaaaa#c#d#cc#......",
+"........########b########e########cc#d#c#.......",
+"........#dddddd#b#dddddd#e#ffffff#cc#d####......",
+"......########d########d########f#cc###g##......",
+".....#aaaaaa###aaaaaa###hhhhhh##f#cc#gg#c#......",
+"....#aaaaaa#b#aaaaaa#i#hhhhhh#j#f#cc###cc#......",
+"...########b########i########jj#f#c#gg#cc#......",
+"...#kkkkkk#b#kkkkkk#i#llllll#jj#f####g#cc#......",
+"...#kkkkkk#b#kkkkkk#i#llllll#jj###m##g#cc#......",
+"...#knnkkk#b#kkkkkk#i#llllll#jj#mm#c#g#cc#......",
+"...#knnkkk#b#kkkkkk#i#llllll#jj###cc#g#c#.......",
+"...#kkkkkk#b#kkkkkk#i#llllll#j#dd#cc#g####......",
+"...#kkkkkk###kkkkkk###llllll####d#cc###g##......",
+"...########g########g########o##d#cc#gg#c#......",
+"....#gggggg#b#gggggg#b#oooooo#c#d#cc###cc#......",
+"...########b########b########cc#d#c#gg#cc#......",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#d####g#cc#......",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###g##g#cc#......",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#gg#c#g#cc#......",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###cc#g#c#.......",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#gg#cc#g##........",
+"...#kkkkkk###kkkkkk###kkkkkk####g#cc###.........",
+"...########g########g########g##g#cc#...........",
+"....#gggggg#b#gggggg#b#gggggg#c#g#cc#...........",
+"...########b########b########cc#g#c#............",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#g##.............",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc###..............",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#cc#................",
+"...#kkkkkk#b#kkkkkk#b#kkkkkk#c#.................",
+"...#kkkkkk###kkkkkk###kkkkkk##..................",
+"...########.########.########...................",
+"................................................",
+"................................................",
+"................................................",
+"................................................"};
+
+LightApp_ModuleDlg::LightApp_ModuleDlg( QWidget* parent,
+ const QString& component,
+ const QPixmap& icon )
+: SUIT_MsgDlg( parent, tr( "CAPTION" ), tr ( "DESCRIPTION" ).arg( component ), !icon.isNull() ? icon : QPixmap( default_icon ) )
+{
+ iconLabel()->setFrameStyle( QFrame::Box | QFrame::Sunken );
+ iconLabel()->setMinimumSize( 70, 70 );
+}
+
+LightApp_ModuleDlg::~LightApp_ModuleDlg()
+{
+}
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-// SALOME SALOMEGUI : implementation of desktop and GUI kernel
+// File : LightApp_ModuleDlg.h
+// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
//
-// File : LightApp_ModuleDlg.h
-// Author : Michael ZORIN (mzn)
-// Module : SALOME
#ifndef LIGHTAPP_MODULEDLG_H
#define LIGHTAPP_MODULEDLG_H
#include "LightApp.h"
-#include <qdialog.h>
-#include <qpixmap.h>
-class QFrame;
-class QLabel;
-class QPushButton;
+#include <SUIT_MsgDlg.h>
-/*!
- \class LightApp_ModuleDlg
- Dialog allows to choose action on module activation when there is no document.
- It is possible to create new document, to open existing or to cancel module activation
-*/
-class LIGHTAPP_EXPORT LightApp_ModuleDlg : public QDialog
+class LIGHTAPP_EXPORT LightApp_ModuleDlg : public SUIT_MsgDlg
{
Q_OBJECT
public:
- LightApp_ModuleDlg ( QWidget* parent, const QString& component, const QPixmap icon = QPixmap() ) ;
- ~LightApp_ModuleDlg ( ) { };
-
-private slots:
- void onButtonClicked();
-
-private:
- QFrame* myComponentFrame;
- QLabel* myComponentLab;
- QLabel* myComponentIcon;
- QLabel* myInfoLabel;
- QPushButton* myNewBtn;
- QPushButton* myOpenBtn;
- QPushButton* myLoadBtn;
- QPushButton* myCancelBtn;
+ LightApp_ModuleDlg( QWidget*, const QString&, const QPixmap& = QPixmap() );
+ ~LightApp_ModuleDlg();
};
-#endif
+#endif // LIGHTAPP_MODULEDLG_H
#include "LightApp_DataOwner.h"
#include "LightApp_DataObject.h"
+#include "LightApp_Application.h"
#include <OB_Browser.h>
+#include <SUIT_Session.h>
#include <SUIT_DataObjectIterator.h>
+
#include <qdatetime.h>
+#include <time.h>
+
/*!
Constructor
*/
void LightApp_OBSelector::getSelection( SUIT_DataOwnerPtrList& theList ) const
{
if (mySelectedList.count() == 0 ) {
+ SUIT_Session* session = SUIT_Session::session();
+ SUIT_Application* sapp = session ? session->activeApplication() : 0;
+ LightApp_Application* app = dynamic_cast<LightApp_Application*>( sapp );
+ if( !app )
+ return;
+
if ( !myBrowser )
return;
DataObjectList objlist;
for ( DataObjectListIterator it( objlist ); it.current(); ++it )
{
LightApp_DataObject* obj = dynamic_cast<LightApp_DataObject*>( it.current() );
- if ( obj )
+ if ( obj && app->checkDataObject(obj) )
{
#ifndef DISABLE_SALOMEOBJECT
Handle(SALOME_InteractiveObject) aSObj = new SALOME_InteractiveObject
: SUIT_Selector( mgr, viewer ),
myViewer( viewer )
{
- if ( myViewer )
+ if ( myViewer ) {
connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
+ connect( myViewer, SIGNAL( deselection() ), this, SLOT( onDeselection() ) );
+ }
}
/*!
return myViewer;
}
+
/*!On selection changed.*/
void LightApp_OCCSelector::onSelectionChanged()
{
selectionChanged();
}
+/*!On selection cleared.*/
+void LightApp_OCCSelector::onDeselection()
+{
+ mySelectedExternals.clear();
+}
+
/*!Gets selection list.*/
void LightApp_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const
{
aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( entry( anIt.Value() ) ) ) );
#endif
}
+ // add externally selected objects
+ SUIT_DataOwnerPtrList::const_iterator anExtIter;
+ for(anExtIter = mySelectedExternals.begin(); anExtIter != mySelectedExternals.end(); anExtIter++) {
+ aList.append(*anExtIter);
+ }
}
/*!Sets selection list.*/
if ( !entryStr.isEmpty() )
aDisplayed.insert( entryStr, it.Value() );
}
+
+ mySelectedExternals.clear();
for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
{
const LightApp_DataOwner* owner = dynamic_cast<const LightApp_DataOwner*>( (*itr).operator->() );
if ( owner && aDisplayed.contains( owner->entry() ) )
aSelList.Append( aDisplayed[owner->entry()] );
+ else
+ mySelectedExternals.append(*itr);
}
myViewer->unHighlightAll( false );
#include "LightApp.h"
#include <SUIT_Selector.h>
+#include <SUIT_DataOwner.h>
#include <OCCViewer_ViewModel.h>
private slots:
virtual void onSelectionChanged();
+ virtual void onDeselection();
protected:
virtual void getSelection( SUIT_DataOwnerPtrList& ) const;
QString entry( const Handle_AIS_InteractiveObject& ) const;
+ SUIT_DataOwnerPtrList mySelectedExternals;
+
private:
- OCCViewer_Viewer* myViewer;
+ OCCViewer_Viewer* myViewer;
};
#endif
if( !mgr )
return;
- QFileDialog dlg( ".", "*", this, "", tr( "IMPORT_PREFERENCES" ) );
+ QFileDialog dlg( ".", "*", this, "" );
+ dlg.setCaption( tr("IMPORT_PREFERENCES") );
dlg.setShowHiddenFiles( true );
dlg.exec();
QString fname = dlg.selectedFile();
for( SUIT_Selector* selector = aSelectors.first(); selector; selector = aSelectors.next() )
{
qDebug( selector->type() );
- if( selector->type()!=client )
+ if( selector->type() != client && selector->isEnabled() )
{
- mgr->selected( cur_sel, selector->type() );
+ //mgr->selected( cur_sel, selector->type() );
+ selector->selected( cur_sel );
SUIT_DataOwnerPtrList::const_iterator aLIt = cur_sel.begin(), aLLast = cur_sel.end();
for( ; aLIt!=aLLast; aLIt++ )
sel.append( *aLIt ); //check entry and don't append if such entry is in list already
LightApp_DataOwner* sowner = dynamic_cast<LightApp_DataOwner*>( (*anIt ).get() );
if( sowner )
{
- entry = myStudy->referencedToEntry( sowner->entry() );
+ entry = referencedToEntry( sowner->entry() );
if( entries.contains( entry ) )
continue;
}
}
+QString LightApp_Selection::referencedToEntry( const QString& entry ) const
+{
+ return myStudy->referencedToEntry( entry );
+}
+
/*!
Gets count of entries.
*/
else if( p=="isReference" )
return QtxValue( isReference( ind ), false );
+ else if( p=="displayer" )
+ return param( ind, "component" );
+
else if( p=="canBeDisplayed" )
{
QString mod_name = app->moduleTitle( param( ind, "component" ).toString() );
LightApp_Study* study() const { return myStudy; }
QString activeViewType() const;
SUIT_ViewWindow* activeVW() const;
+ virtual QString referencedToEntry( const QString& ) const;
private:
QString myPopupClient;
QMap<QString,int> entryMap;
- QString entry;
+ QString entry, checkEntry;
for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
{
const LightApp_DataOwner* owner = dynamic_cast<const LightApp_DataOwner*>( (*itr).operator->() );
return;
entry = owner->entry();
+ // Entry to check object uniqueness.
+ // It is selected owner entry in the case, when we do not convert references,
+ // and entry of a real object, when we convert references.
+ checkEntry = entry;
if ( convertReferences ) {
QString refEntry = study->referencedToEntry( entry );
- if( !entryMap.contains( entry ) ) {
+ checkEntry = refEntry;
+ if ( !entryMap.contains( checkEntry ) ) {
if ( refEntry != entry ) {
QString component = study->componentDataType( refEntry );
theList.Append( new SALOME_InteractiveObject( refEntry, component, ""/*refobj->Name().c_str()*/ ) );
theList.Append( owner->IO() );
}
- entryMap.insert(owner->entry(), 1);
+ entryMap.insert(checkEntry, 1);
}
}
/*!
Add or remove interactive objects from selection manager.
*/
-bool LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject,
- const TColStd_MapOfInteger& theIndexes,
- bool modeShift)
+//bool LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject,
+void LightApp_SelectionMgr::AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject,
+ const TColStd_MapOfInteger& theIndexes,
+ bool modeShift)
{
SUIT_DataOwnerPtrList remainsOwners;
-
+
SUIT_DataOwnerPtrList aList;
selected( aList );
+ QString ioEntry (IObject->getEntry());
+
if ( !modeShift ) {
for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
{
const LightApp_DataOwner* owner = dynamic_cast<const LightApp_DataOwner*>( (*itr).operator->() );
- if ( owner )
+ if ( owner )
{
- if ( owner->entry() != QString(IObject->getEntry()) )
- {
+ if ( owner->entry() != ioEntry )
+ {
const LightApp_DataSubOwner* subOwner = dynamic_cast<const LightApp_DataSubOwner*>( owner );
if ( subOwner )
remainsOwners.append( new LightApp_DataSubOwner( subOwner->entry(), subOwner->index() ) );
TColStd_MapIteratorOfMapOfInteger It;
It.Initialize(theIndexes);
for(;It.More();It.Next())
- remainsOwners.append( new LightApp_DataSubOwner( QString(IObject->getEntry()), It.Key() ) );
-
+ remainsOwners.append( new LightApp_DataSubOwner( ioEntry, It.Key() ) );
+
bool append = false;
setSelected( remainsOwners, append );
emit currentSelectionChanged();
- TColStd_IndexedMapOfInteger anIndexes;
- GetIndexes( IObject, anIndexes );
- return !anIndexes.IsEmpty();
-
+ // Bug 17269: To avoid calling of selected(aList)
+ //TColStd_IndexedMapOfInteger anIndexes;
+ //GetIndexes( IObject, anIndexes );
+ //return !anIndexes.IsEmpty();
}
/*!
for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
{
- const LightApp_DataSubOwner* subOwner = dynamic_cast<const LightApp_DataSubOwner*>( (*itr).operator->() );
+ const LightApp_DataSubOwner* subOwner =
+ dynamic_cast<const LightApp_DataSubOwner*>( (*itr).operator->() );
if ( subOwner )
{
if ( !theMap.contains( subOwner->entry() ) )
{
anIndexes.Clear();
- GetIndexes( subOwner->entry(), anIndexes );
- theMap.insert( subOwner->entry(), anIndexes );
+ //Bug 17269: GetIndexes( subOwner->entry(), anIndexes );
+ //Bug 17269: To avoid multiple calling of selected(aList)
+ for ( SUIT_DataOwnerPtrList::const_iterator itr2 = itr; itr2 != aList.end(); ++itr2 )
+ {
+ const LightApp_DataSubOwner* subOwner2 =
+ dynamic_cast<const LightApp_DataSubOwner*>( (*itr2).operator->() );
+ if ( subOwner2 )
+ if ( subOwner2->entry() == subOwner->entry() )
+ anIndexes.Add( subOwner2->index() );
+ }
+ //
+ theMap.insert( subOwner->entry(), anIndexes );
}
}
}
void GetIndexes( const QString& theEntry,
TColStd_IndexedMapOfInteger& theIndex );
- bool AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject,
+ //bool AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject,
+ void AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& IObject,
const TColStd_MapOfInteger& theIndices,
bool modeShift );
}
LightApp_SelectionMgr* mgr = app->selectionMgr();
- LightApp_Selection sel; sel.init( "", mgr );
- if( sel.count()==0 && myActionType!=ERASE_ALL )
+ LightApp_Module* mod = dynamic_cast<LightApp_Module*>( app->activeModule() );
+ if( !mod )
+ return;
+
+ LightApp_Selection* sel = mod->createSelection();
+ if( !sel )
+ return;
+
+ sel->init( "", mgr );
+ if( sel->count()==0 && myActionType!=ERASE_ALL )
{
abort();
return;
}
QString mod_name;
- if( sel.count()>0 )
+ if( sel->count()>0 )
{
- QString aStr = sel.param( 0, "component" ).toString();
+ QString aStr = sel->param( 0, "displayer" ).toString();
mod_name = app->moduleTitle( aStr );
}
else if( app->activeModule() )
}
d->UpdateViewer();
commit();
+
+ delete sel;
}
/*!
Constructor.
*/
-LightApp_SVTKDataOwner
-::LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO,
- SUIT_Desktop* theDesktop ):
- LightApp_DataOwner( theIO ),
- myDesktop( theDesktop )
-{}
-#endif
-
-/*!
- Destuctor.
-*/
-LightApp_SVTKDataOwner
-::~LightApp_SVTKDataOwner()
+LightApp_SVTKDataOwner::LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO,
+ SUIT_Desktop* theDesktop )
+: LightApp_DataOwner( theIO ),
+myDesktop( theDesktop )
+{
+}
+#else
+LightApp_SVTKDataOwner::LightApp_SVTKDataOwner( const QString& theEntry )
+: LightApp_DataOwner( theEntry )
{
}
+#endif
/*!
\return active SVTK view window
#endif
+/*!
+ Destuctor.
+*/
+/*
+LightApp_SVTKDataOwner::~LightApp_SVTKDataOwner()
+{
+}
+*/
#ifndef DISABLE_VTKVIEWER
/*!
connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
}
-/*!
- Destructor.
-*/
-LightApp_VTKSelector
-::~LightApp_VTKSelector()
-{
-}
-
/*!
Gets viewer.
*/
class LIGHTAPP_EXPORT LightApp_SVTKDataOwner : public LightApp_DataOwner
{
public:
+ virtual ~LightApp_SVTKDataOwner() {};
#ifndef DISABLE_VTKVIEWER
#ifndef DISABLE_SALOMEOBJECT
- LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO,
- SUIT_Desktop* theDesktop );
+ LightApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)&, SUIT_Desktop* );
+ #else
+ LightApp_SVTKDataOwner( const QString& );
#endif
- virtual ~LightApp_SVTKDataOwner();
/*!Gets dataowners ids list.*/
const TColStd_IndexedMapOfInteger& GetIds() const;
SVTK_ViewWindow* GetActiveViewWindow() const;
SUIT_Desktop* myDesktop;
-
-#else
- LightApp_SVTKDataOwner( const QString& );
#endif
};
Q_OBJECT;
public:
+ virtual ~LightApp_VTKSelector() {};
#ifndef DISABLE_VTKVIEWER
LightApp_VTKSelector( SVTK_ViewModelBase*, SUIT_SelectionMgr* );
- virtual ~LightApp_VTKSelector();
SVTK_ViewModelBase* viewer() const;
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : OCC team (OCN)
+# Module : LightApp
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libLightApp.la
+
+salomeinclude_HEADERS= \
+ LightApp.h \
+ LightApp_AboutDlg.h \
+ LightApp_Application.h \
+ LightApp_DataModel.h \
+ LightApp_DataObject.h \
+ LightApp_DataOwner.h \
+ LightApp_DataSubOwner.h \
+ LightApp_Dialog.h \
+ LightApp_Displayer.h \
+ LightApp_Driver.h \
+ LightApp_EventFilter.h \
+ LightApp_HDFDriver.h \
+ LightApp_Module.h \
+ LightApp_ModuleDlg.h \
+ LightApp_NameDlg.h \
+ LightApp_OBFilter.h \
+ LightApp_OBSelector.h \
+ LightApp_Operation.h \
+ LightApp_Selection.h \
+ LightApp_SelectionMgr.h \
+ LightApp_ShowHideOp.h \
+ LightApp_Study.h \
+ LightApp_SwitchOp.h \
+ LightApp_Preferences.h \
+ LightApp_PreferencesDlg.h \
+ LightApp_RootObject.h \
+ LightApp_UpdateFlags.h \
+ LightApp_WidgetContainer.h
+
+if ENABLE_VTKVIEWER
+if ENABLE_SALOMEOBJECT
+ salomeinclude_HEADERS+= LightApp_VTKSelector.h
+endif
+endif
+if ENABLE_OCCVIEWER
+ salomeinclude_HEADERS+= LightApp_OCCSelector.h
+endif
+if ENABLE_GLVIEWER
+ salomeinclude_HEADERS+= LightApp_GLSelector.h
+endif
+
+dist_libLightApp_la_SOURCES= \
+ LightApp_AboutDlg.cxx \
+ LightApp_Application.cxx \
+ LightApp_DataModel.cxx \
+ LightApp_DataObject.cxx \
+ LightApp_DataOwner.cxx \
+ LightApp_DataSubOwner.cxx \
+ LightApp_Dialog.cxx \
+ LightApp_Displayer.cxx \
+ LightApp_Driver.cxx \
+ LightApp_EventFilter.cxx \
+ LightApp_HDFDriver.cxx \
+ LightApp_Module.cxx \
+ LightApp_ModuleDlg.cxx \
+ LightApp_NameDlg.cxx \
+ LightApp_OBFilter.cxx \
+ LightApp_OBSelector.cxx \
+ LightApp_Operation.cxx \
+ LightApp_Selection.cxx \
+ LightApp_SelectionMgr.cxx \
+ LightApp_ShowHideOp.cxx \
+ LightApp_Study.cxx \
+ LightApp_SwitchOp.cxx \
+ LightApp_Preferences.cxx \
+ LightApp_PreferencesDlg.cxx \
+ LightApp_WidgetContainer.cxx
+
+if ENABLE_VTKVIEWER
+if ENABLE_SALOMEOBJECT
+ dist_libLightApp_la_SOURCES+= LightApp_VTKSelector.cxx
+endif
+endif
+if ENABLE_OCCVIEWER
+ dist_libLightApp_la_SOURCES+= LightApp_OCCSelector.cxx
+endif
+if ENABLE_GLVIEWER
+ dist_libLightApp_la_SOURCES+= LightApp_GLSelector.cxx
+endif
+
+MOC_FILES= \
+ LightApp_AboutDlg_moc.cxx \
+ LightApp_Application_moc.cxx \
+ LightApp_DataModel_moc.cxx \
+ LightApp_Dialog_moc.cxx \
+ LightApp_OBSelector_moc.cxx \
+ LightApp_Operation_moc.cxx \
+ LightApp_Module_moc.cxx \
+ LightApp_ModuleDlg_moc.cxx \
+ LightApp_NameDlg_moc.cxx \
+ LightApp_SelectionMgr_moc.cxx \
+ LightApp_ShowHideOp_moc.cxx \
+ LightApp_Study_moc.cxx \
+ LightApp_SwitchOp_moc.cxx \
+ LightApp_Preferences_moc.cxx \
+ LightApp_PreferencesDlg_moc.cxx \
+ LightApp_WidgetContainer_moc.cxx
+
+if ENABLE_VTKVIEWER
+if ENABLE_SALOMEOBJECT
+ MOC_FILES+= LightApp_VTKSelector_moc.cxx
+endif
+endif
+if ENABLE_OCCVIEWER
+ MOC_FILES+= LightApp_OCCSelector_moc.cxx
+endif
+if ENABLE_GLVIEWER
+ MOC_FILES+= LightApp_GLSelector_moc.cxx
+endif
+nodist_libLightApp_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA= \
+ resources/icon_about.png \
+ resources/icon_applogo.png \
+ resources/icon_default.png \
+ resources/icon_module.png \
+ resources/icon_module_big.png \
+ resources/icon_select.png \
+ resources/LightApp.ini \
+ resources/LightApp.xml
+
+nodist_salomeres_DATA= \
+ LightApp_images.qm \
+ LightApp_msg_en.qm
+
+libLightApp_la_CPPFLAGS=$(PYTHON_INCLUDES) $(QT_INCLUDES) $(CAS_CPPFLAGS) \
+ $(HDF5_INCLUDES) @KERNEL_CXXFLAGS@ -I$(srcdir)/../SUIT -I$(srcdir)/../STD \
+ -I$(srcdir)/../CAM -I$(srcdir)/../ObjBrowser -I$(srcdir)/../LogWindow \
+ -I$(srcdir)/../Prs -I$(srcdir)/../Qtx
+libLightApp_la_LDFLAGS=$(QT_MT_LIBS)
+
+if ENABLE_VTKVIEWER
+ libLightApp_la_CPPFLAGS+= $(VTK_INCLUDES) -I$(srcdir)/../VTKViewer
+else
+ libLightApp_la_CPPFLAGS+= -DDISABLE_VTKVIEWER
+endif
+if ENABLE_PLOT2DVIEWER
+ libLightApp_la_CPPFLAGS+= $(QWT_INCLUDES) -I$(srcdir)/../Plot2d
+else
+ libLightApp_la_CPPFLAGS+= -DDISABLE_PLOT2DVIEWER
+endif
+if ENABLE_OCCVIEWER
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../OCCViewer
+else !ENABLE_OCCVIEWER
+ libLightApp_la_CPPFLAGS+= -DDISABLE_OCCVIEWER
+endif
+if ENABLE_PYCONSOLE
+ libLightApp_la_CPPFLAGS+= $(PYTHON_INCLUDES) -I$(srcdir)/../PythonConsole -I$(srcdir)/../PyInterp
+ libLightApp_la_LDFLAGS+= $(PYTHON_LIBS)
+else !ENABLE_PYCONSOLE
+ libLightApp_la_CPPFLAGS+= -DDISABLE_PYCONSOLE
+endif
+if ENABLE_GLVIEWER
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../GLViewer
+else !ENABLE_GLVIEWER
+ libLightApp_la_CPPFLAGS+= -DDISABLE_GLVIEWER
+endif
+if ENABLE_SUPERVGRAPHVIEWER
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SUPERVGraph
+else !ENABLE_SUPERVGRAPHVIEWER
+ libLightApp_la_CPPFLAGS+= -DDISABLE_SUPERVGRAPHVIEWER
+endif
+if ENABLE_QXGRAPHVIEWER
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../QxGraph
+else !ENABLE_QXGRAPHVIEWER
+ libLightApp_la_CPPFLAGS+= -DDISABLE_QXGRAPHVIEWER
+endif
+
+if ENABLE_SALOMEOBJECT
+
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../OBJECT
+if ENABLE_PLOT2DVIEWER
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SPlot2d
+endif
+if ENABLE_OCCVIEWER
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SOCC
+endif
+if ENABLE_VTKVIEWER
+ libLightApp_la_CPPFLAGS+= -I$(srcdir)/../SVTK
+endif
+else !ENABLE_SALOMEOBJECT
+ libLightApp_la_CPPFLAGS+= -DDISABLE_SALOMEOBJECT
+
+endif
+
+libLightApp_la_LIBADD= ../SUIT/libsuit.la ../STD/libstd.la ../CAM/libCAM.la \
+ ../ObjBrowser/libObjBrowser.la ../LogWindow/libLogWindow.la $(CAS_KERNEL) \
+ ../Prs/libSalomePrs.la $(HDF5_LIBS) $(KERNEL_LDFLAGS) -lSalomeHDFPersist
+
+if ENABLE_SALOMEOBJECT
+ libLightApp_la_LIBADD+= ../OBJECT/libSalomeObject.la
+endif
+if ENABLE_VTKVIEWER
+ libLightApp_la_LIBADD+= ../VTKViewer/libVTKViewer.la
+if ENABLE_SALOMEOBJECT
+ libLightApp_la_LIBADD+= ../SVTK/libSVTK.la
+endif
+endif
+if ENABLE_OCCVIEWER
+ libLightApp_la_LIBADD+= ../OCCViewer/libOCCViewer.la
+if ENABLE_SALOMEOBJECT
+ libLightApp_la_LIBADD+= ../SOCC/libSOCC.la
+endif
+endif
+if ENABLE_GLVIEWER
+ libLightApp_la_LIBADD+= ../GLViewer/libGLViewer.la
+endif
+if ENABLE_PLOT2DVIEWER
+ libLightApp_la_LIBADD+= ../Plot2d/libPlot2d.la
+if ENABLE_SALOMEOBJECT
+ libLightApp_la_LIBADD+= ../SPlot2d/libSPlot2d.la
+endif
+endif
+if ENABLE_PYCONSOLE
+ libLightApp_la_LIBADD+= ../PyInterp/libPyInterp.la ../PythonConsole/libPythonConsole.la
+endif
+if ENABLE_SUPERVGRAPHVIEWER
+ libLightApp_la_LIBADD+= ../SUPERVGraph/libSUPERVGraph.la
+endif
+if ENABLE_QXGRAPHVIEWER
+ libLightApp_la_LIBADD+= ../QxGraph/libQxGraph.la
+endif
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : OCC team (OCN)
-# Module : LightApp
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= LightApp.h \
- LightApp_AboutDlg.h \
- LightApp_Application.h \
- LightApp_DataModel.h \
- LightApp_DataObject.h \
- LightApp_DataOwner.h \
- LightApp_DataSubOwner.h \
- LightApp_Dialog.h \
- LightApp_Displayer.h \
- LightApp_Driver.h \
- LightApp_HDFDriver.h \
- LightApp_Module.h \
- LightApp_ModuleDlg.h \
- LightApp_NameDlg.h \
- LightApp_OBFilter.h \
- LightApp_OBSelector.h \
- LightApp_Operation.h \
- LightApp_Selection.h \
- LightApp_SelectionMgr.h \
- LightApp_ShowHideOp.h \
- LightApp_Study.h \
- LightApp_SwitchOp.h \
- LightApp_Preferences.h \
- LightApp_PreferencesDlg.h \
- LightApp_RootObject.h \
- LightApp_UpdateFlags.h \
- LightApp_WidgetContainer.h
-
-ifneq ($(DISABLE_VTKVIEWER),yes)
-ifneq ($(DISABLE_SALOMEOBJECT),yes)
- EXPORT_HEADERS+= LightApp_VTKSelector.h
-endif
-endif
-ifneq ($(DISABLE_OCCVIEWER),yes)
- EXPORT_HEADERS+= LightApp_OCCSelector.h
-endif
-ifneq ($(DISABLE_GLVIEWER),yes)
- EXPORT_HEADERS+= LightApp_GLSelector.h
-endif
-
-# .po files to transform in .qm
-PO_FILES = LightApp_images.po \
- LightApp_msg_en.po
-
-# Libraries targets
-LIB = libLightApp.la
-
-LIB_SRC= LightApp_AboutDlg.cxx \
- LightApp_Application.cxx \
- LightApp_DataModel.cxx \
- LightApp_DataObject.cxx \
- LightApp_DataOwner.cxx \
- LightApp_DataSubOwner.cxx \
- LightApp_Dialog.cxx \
- LightApp_Displayer.cxx \
- LightApp_Driver.cxx \
- LightApp_HDFDriver.cxx \
- LightApp_Module.cxx \
- LightApp_ModuleDlg.cxx \
- LightApp_NameDlg.cxx \
- LightApp_OBFilter.cxx \
- LightApp_OBSelector.cxx \
- LightApp_Operation.cxx \
- LightApp_Selection.cxx \
- LightApp_SelectionMgr.cxx \
- LightApp_ShowHideOp.cxx \
- LightApp_Study.cxx \
- LightApp_SwitchOp.cxx \
- LightApp_Preferences.cxx \
- LightApp_PreferencesDlg.cxx \
- LightApp_WidgetContainer.cxx
-
-ifneq ($(DISABLE_VTKVIEWER),yes)
-ifneq ($(DISABLE_SALOMEOBJECT),yes)
- LIB_SRC+= LightApp_VTKSelector.cxx
-endif
-endif
-ifneq ($(DISABLE_OCCVIEWER),yes)
- LIB_SRC+= LightApp_OCCSelector.cxx
-endif
-ifneq ($(DISABLE_GLVIEWER),yes)
- LIB_SRC+= LightApp_GLSelector.cxx
-endif
-
-LIB_MOC = LightApp_AboutDlg.h \
- LightApp_Application.h \
- LightApp_DataModel.h \
- LightApp_Dialog.h \
- LightApp_OBSelector.h \
- LightApp_Operation.h \
- LightApp_Module.h \
- LightApp_ModuleDlg.h \
- LightApp_NameDlg.h \
- LightApp_SelectionMgr.h \
- LightApp_ShowHideOp.h \
- LightApp_Study.h \
- LightApp_SwitchOp.h \
- LightApp_Preferences.h \
- LightApp_PreferencesDlg.h \
- LightApp_WidgetContainer.h
-
-ifneq ($(DISABLE_VTKVIEWER),yes)
-ifneq ($(DISABLE_SALOMEOBJECT),yes)
- LIB_MOC+= LightApp_VTKSelector.h
-endif
-endif
-ifneq ($(DISABLE_OCCVIEWER),yes)
- LIB_MOC+= LightApp_OCCSelector.h
-endif
-ifneq ($(DISABLE_GLVIEWER),yes)
- LIB_MOC+= LightApp_GLSelector.h
-endif
-
-RESOURCES_FILES = icon_about.png \
- icon_applogo.png \
- icon_default.png \
- icon_module.png \
- icon_module_big.png \
- icon_select.png \
- LightApp.ini \
- LightApp.xml
-
-CPPFLAGS+=$(PYTHON_INCLUDES) $(QT_INCLUDES) $(OCC_INCLUDES) \
- $(HDF5_INCLUDES) $(KERNEL_CXXFLAGS)
-
-ifneq ($(DISABLE_VTKVIEWER),yes)
- CPPFLAGS+= $(VTK_INCLUDES)
-else
- CPPFLAGS+= -DDISABLE_VTKVIEWER
-endif
-ifneq ($(DISABLE_PLOT2DVIEWER),yes)
- CPPFLAGS+= $(QWT_INCLUDES)
-else
- CPPFLAGS+= -DDISABLE_PLOT2DVIEWER
-endif
-ifeq ($(DISABLE_OCCVIEWER),yes)
- CPPFLAGS+= -DDISABLE_OCCVIEWER
-endif
-ifneq ($(DISABLE_PYCONSOLE),yes)
- CPPFLAGS+= $(PYTHON_INCLUDES)
-else
- CPPFLAGS+= -DDISABLE_PYCONSOLE
-endif
-ifeq ($(DISABLE_GLVIEWER),yes)
- CPPFLAGS+= -DDISABLE_GLVIEWER
-endif
-ifeq ($(DISABLE_SUPERVGRAPHVIEWER),yes)
- CPPFLAGS+= -DDISABLE_SUPERVGRAPHVIEWER
-endif
-ifeq ($(DISABLE_SALOMEOBJECT),yes)
- CPPFLAGS+= -DDISABLE_SALOMEOBJECT
-endif
-
-LDFLAGS+=$(QT_MT_LIBS)
-ifneq ($(DISABLE_PYCONSOLE),yes)
- LDFLAGS+= $(PYTHON_LIBS)
-endif
-
-LIBS+= -lsuit -lstd -lCAM -lObjBrowser -lLogWindow $(CAS_KERNEL) -lSalomePrs \
- $(HDF5_LIBS) $(KERNEL_LDFLAGS) -lSalomeHDFPersist
-
-ifneq ($(DISABLE_SALOMEOBJECT),yes)
- LIBS+= -lSalomeObject
-endif
-ifneq ($(DISABLE_VTKVIEWER),yes)
- LIBS+= -lVTKViewer
-ifneq ($(DISABLE_SALOMEOBJECT),yes)
- LIBS+= -lSVTK
-endif
-endif
-ifneq ($(DISABLE_OCCVIEWER),yes)
- LIBS+= -lOCCViewer
-ifneq ($(DISABLE_SALOMEOBJECT),yes)
- LIBS+= -lSOCC
-endif
-endif
-ifneq ($(DISABLE_GLVIEWER),yes)
- LIBS+= -lGLViewer
-endif
-ifneq ($(DISABLE_PLOT2DVIEWER),yes)
- LIBS+= -lPlot2d
-ifneq ($(DISABLE_SALOMEOBJECT),yes)
- LIBS+= -lSPlot2d
-endif
-endif
-ifneq ($(DISABLE_PYCONSOLE),yes)
- LIBS+= -lPyInterp -lPythonConsole
-endif
-ifneq ($(DISABLE_SUPERVGRAPHVIEWER),yes)
- LIBS+= -lSUPERVGraph
-endif
-
-@CONCLUDE@
modules = LIGHT
[resources]
-SUIT = $(SUITRoot)/resources
-STD = $(SUITRoot)/resources
-LightApp = $(SUITRoot)/resources
-Plot2d = $(SUITRoot)/resources
-GLViewer = $(SUITRoot)/resources
-OCCViewer = $(SUITRoot)/resources
-VTKViewer = $(SUITRoot)/resources
-LIGHT = $(LIGHT_ROOT_DIR)/share/salome/resources
+SUIT = $(GUI_ROOT_DIR)/share/salome/resources/gui
+STD = $(GUI_ROOT_DIR)/share/salome/resources/gui
+LightApp = $(GUI_ROOT_DIR)/share/salome/resources/gui
+Plot2d = $(GUI_ROOT_DIR)/share/salome/resources/gui
+GLViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui
+OCCViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui
+VTKViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui
+LIGHT = $(LIGHT_ROOT_DIR)/share/salome/resources/light
[LIGHT]
name = Light
</section>
<section name="splash" >
<!-- Splash screen settings -->
- <parameter name="image" value="${SUITRoot}/resources/icon_about.png" />
+ <parameter name="image" value="${GUI_ROOT_DIR}/share/salome/resources/gui/icon_about.png" />
<parameter name="info" value="%A : %V" />
- <parameter name="text_colors" value="#543AA9|#FFFFFF" />
+ <parameter name="text_colors" value="#FFFFFF" />
+ <parameter name="margin" value="10" />
</section>
<section name="resources">
<!-- Resource directories (resource manager)-->
- <parameter name="SUIT" value="${SUITRoot}/resources"/>
- <parameter name="STD" value="${SUITRoot}/resources"/>
- <parameter name="Plot2d" value="${SUITRoot}/resources"/>
- <parameter name="SPlot2d" value="${SUITRoot}/resources"/>
- <parameter name="GLViewer" value="${SUITRoot}/resources"/>
- <parameter name="OCCViewer" value="${SUITRoot}/resources"/>
- <parameter name="VTKViewer" value="${SUITRoot}/resources"/>
- <parameter name="SalomeApp" value="${SUITRoot}/resources"/>
- <parameter name="OB" value="${SUITRoot}/resources"/>
- <parameter name="CAM" value="${SUITRoot}/resources"/>
- <parameter name="LightApp" value="${SUITRoot}/resources"/>
- <parameter name="SVTK" value="${SUITRoot}/resources"/>
- <parameter name="ToolsGUI" value="${SUITRoot}/resources"/>
- <parameter name="LIGHT" value="${LIGHT_ROOT_DIR}/share/salome/resources"/>
+ <parameter name="SUIT" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="STD" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="Plot2d" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="SPlot2d" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="GLViewer" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="OCCViewer" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="VTKViewer" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="SalomeApp" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="OB" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="CAM" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="LightApp" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="SVTK" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="ToolsGUI" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="LIGHT" value="${LIGHT_ROOT_DIR}/share/salome/resources/light"/>
</section>
<section name="desktop" >
<!-- Default GUI desktop state, position, size -->
msgstr "Version %1"
msgid "ABOUT_COPYRIGHT"
-msgstr "Copyright (C) 2003-2006 OPEN CASCADE, EADS/CCR, LIP6,\nCEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS"
+msgstr "Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6,\nCEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS"
msgid "ABOUT_LICENSE"
msgstr "GNU LGPL"
msgid "LightApp_Application::NEW_WINDOW_3"
msgstr "VT&K view"
+msgid "LightApp_Application::NEW_WINDOW_4"
+msgstr "&QxGraph view"
+
msgid "LightApp_Application::INF_CANCELLED"
msgstr "Module activation cancelled"
msgid "LightApp_Application::MEN_REFRESH"
msgstr "Refresh"
+msgid "LightApp_Application::MEN_FIND"
+msgstr "Find"
+
msgid "LightApp_Application::PREF_GROUP_SUPERV"
msgstr "Graph Supervisor"
//=======================================================================================
-msgid "LightApp_Module::TOP_DISPLAY"
-msgstr "Display"
+msgid "LightApp_Module::TOP_SHOW"
+msgstr "Show"
-msgid "LightApp_Module::MEN_DISPLAY"
-msgstr "Display"
+msgid "LightApp_Module::MEN_SHOW"
+msgstr "Show"
-msgid "LightApp_Module::STB_DISPLAY"
-msgstr "Display"
+msgid "LightApp_Module::STB_SHOW"
+msgstr "Show"
-msgid "LightApp_Module::TOP_ERASE"
-msgstr "Erase"
+msgid "LightApp_Module::TOP_HIDE"
+msgstr "Hide"
-msgid "LightApp_Module::MEN_ERASE"
-msgstr "Erase"
+msgid "LightApp_Module::MEN_HIDE"
+msgstr "Hide"
-msgid "LightApp_Module::STB_ERASE"
-msgstr "Erase"
+msgid "LightApp_Module::STB_HIDE"
+msgstr "Hide"
msgid "LightApp_Module::TOP_DISPLAY_ONLY"
-msgstr "Display only"
+msgstr "Show only"
msgid "LightApp_Module::MEN_DISPLAY_ONLY"
-msgstr "Display only"
+msgstr "Show only"
msgid "LightApp_Module::STB_DISPLAY_ONLY"
-msgstr "Display only"
+msgstr "Show only"
msgid "LightApp_Module::TOP_ERASE_ALL"
-msgstr "Erase all"
+msgstr "Hide all"
msgid "LightApp_Module::MEN_ERASE_ALL"
-msgstr "Erase all"
+msgstr "Hide all"
msgid "LightApp_Module::STB_ERASE_ALL"
-msgstr "Erase all"
+msgstr "Hide all"
//=======================================================================================
msgid "LightApp_ModuleDlg::CAPTION"
msgstr "Activate module"
-msgid "LightApp_ModuleDlg::NEW"
-msgstr "&New"
-
-msgid "LightApp_ModuleDlg::OPEN"
-msgstr "&Open"
-
-msgid "LightApp_ModuleDlg::LOAD"
-msgstr "&Load"
-
-msgid "LightApp_ModuleDlg::CANCEL"
-msgstr "&Cancel"
-
-msgid "LightApp_ModuleDlg::ActivateComponent_DESCRIPTION"
-msgstr "Create, open or load study."
+msgid "LightApp_ModuleDlg::DESCRIPTION"
+msgstr "You're activating module <b>%1</b>.<br>Please, select required action by pressing the corresponding button below."
msgid "LightApp_NameDlg::TLT_RENAME"
msgstr "Rename"
msgid "LightApp_NameDlg::NAME_LBL"
msgstr "Name: "
+msgid "LightApp_Application::ACTIVATE_MODULE_OP_OPEN"
+msgstr "&Open..."
+
+msgid "LightApp_Application::ACTIVATE_MODULE_OP_NEW"
+msgstr "&New"
+
--- /dev/null
+# 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 : LogWindow
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libLogWindow.la
+
+salomeinclude_HEADERS= LogWindow.h
+
+dist_libLogWindow_la_SOURCES= LogWindow.cxx
+
+MOC_FILES= LogWindow_moc.cxx
+nodist_libLogWindow_la_SOURCES = $(MOC_FILES)
+
+libLogWindow_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+
+libLogWindow_la_LDFLAGS=$(QT_MT_LIBS) ../SUIT/libsuit.la ../Qtx/libqtx.la
+
+
+++ /dev/null
-# 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 : LogWindow
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= LogWindow.h
-
-# Libraries targets
-LIB = libLogWindow.la
-
-LIB_SRC= LogWindow.cxx
-
-LIB_MOC = LogWindow.h
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-
-@CONCLUDE@
-
-
--- /dev/null
+# 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$
+
+SUBDIRS = CASCatch Qtx Style DDS QDS SUIT STD CAF CAM SUITApp LogWindow ObjBrowser Prs
+
+if ENABLE_SALOMEOBJECT
+ SUBDIRS += OBJECT
+endif
+
+if ENABLE_GLVIEWER
+ SUBDIRS += GLViewer
+endif
+
+if ENABLE_VTKVIEWER
+ SUBDIRS += VTKViewer
+if ENABLE_SALOMEOBJECT
+ SUBDIRS += SVTK
+endif
+endif
+if ENABLE_OCCVIEWER
+ SUBDIRS += OCCViewer
+if ENABLE_SALOMEOBJECT
+ SUBDIRS += SOCC
+endif
+endif
+if ENABLE_PYCONSOLE
+ SUBDIRS += PyInterp PythonConsole
+endif
+if ENABLE_PLOT2DVIEWER
+ SUBDIRS += Plot2d
+if ENABLE_SALOMEOBJECT
+ SUBDIRS += SPlot2d
+endif
+endif
+if ENABLE_SUPERVGRAPHVIEWER
+ SUBDIRS += SUPERVGraph
+endif
+if ENABLE_QXGRAPHVIEWER
+ SUBDIRS += QxGraph
+endif
+SUBDIRS += LightApp ResExporter
+
+if GUI_ENABLE_CORBA
+ SUBDIRS += RegistryDisplay TOOLSGUI \
+ Event Session SalomeApp SALOME_SWIG SALOME_PY SALOME_PYQT
+endif
+++ /dev/null
-# 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 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 Style 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@
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libSalomeObject.la
+
+salomeinclude_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
+
+dist_libSalomeObject_la_SOURCES= \
+ 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
+
+libSalomeObject_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS)
+libSalomeObject_la_LDFLAGS=$(QT_LIBS) $(CAS_LDPATH) -lTKV3d
+
+EXTRA_DIST+= \
+ SALOME_AISObject.ixx \
+ SALOME_AISObject.jxx \
+ SALOME_AISShape.ixx \
+ SALOME_AISShape.jxx \
+ SALOME_Filter.ixx \
+ SALOME_Filter.jxx \
+ SALOME_InteractiveObject.ixx \
+ SALOME_InteractiveObject.jxx \
+ SALOME_TypeFilter.ixx \
+ SALOME_TypeFilter.jxx \
+ SALOME_DataMapNodeOfDataMapOfIOMapOfInteger.hxx
+++ /dev/null
-# 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@
--- /dev/null
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libOCCViewer.la
+
+salomeinclude_HEADERS= \
+ OCCViewer_AISSelector.h \
+ OCCViewer_ViewManager.h \
+ OCCViewer_ViewModel.h \
+ OCCViewer_ViewPort3d.h \
+ OCCViewer_ViewPort.h \
+ OCCViewer_ViewSketcher.h \
+ OCCViewer_ViewWindow.h \
+ OCCViewer_VService.h \
+ OCCViewer_CreateRestoreViewDlg.h \
+ OCCViewer.h \
+ OCCViewer_ClippingDlg.h \
+ OCCViewer_SetRotationPointDlg.h
+
+dist_libOCCViewer_la_SOURCES= \
+ OCCViewer_AISSelector.cxx \
+ OCCViewer_ViewManager.cxx \
+ OCCViewer_ViewModel.cxx \
+ OCCViewer_ViewPort3d.cxx \
+ OCCViewer_ViewPort.cxx \
+ OCCViewer_ViewSketcher.cxx \
+ OCCViewer_ViewWindow.cxx \
+ OCCViewer_VService.cxx \
+ OCCViewer_CreateRestoreViewDlg.cxx \
+ OCCViewer_SetRotationPointDlg.cxx \
+ OCCViewer_ClippingDlg.cxx
+
+MOC_FILES= \
+ OCCViewer_AISSelector_moc.cxx \
+ OCCViewer_ViewModel_moc.cxx \
+ OCCViewer_ViewPort3d_moc.cxx \
+ OCCViewer_ViewPort_moc.cxx \
+ OCCViewer_ViewSketcher_moc.cxx \
+ OCCViewer_ViewWindow_moc.cxx \
+ OCCViewer_ViewManager_moc.cxx \
+ OCCViewer_CreateRestoreViewDlg_moc.cxx \
+ OCCViewer_SetRotationPointDlg_moc.cxx \
+ OCCViewer_ClippingDlg_moc.cxx
+nodist_libOCCViewer_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA = \
+ resources/view_back.png \
+ resources/view_bottom.png \
+ resources/view_camera_dump.png \
+ resources/view_clone.png \
+ resources/view_clipping.png \
+ resources/view_clipping_pressed.png \
+ resources/view_fitall.png \
+ resources/view_fitarea.png \
+ resources/view_front.png \
+ resources/view_glpan.png \
+ resources/view_left.png \
+ resources/view_pan.png \
+ resources/view_presets.png \
+ resources/view_reset.png \
+ resources/view_right.png \
+ resources/view_rotate.png \
+ resources/view_shoot.png \
+ resources/view_top.png \
+ resources/view_triedre.png \
+ resources/view_zoom.png \
+ resources/view_rotation_point.png
+
+nodist_salomeres_DATA = \
+ OCCViewer_images.qm \
+ OCCViewer_msg_en.qm
+
+libOCCViewer_la_CPPFLAGS=$(QT_INCLUDES) $(OGL_INCLUDES) $(CAS_CPPFLAGS) \
+ -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+
+libOCCViewer_la_LDFLAGS=$(OGL_LIBS) $(QT_MT_LIBS) $(CAS_KERNEL) $(CAS_VIEWER) ../SUIT/libsuit.la
+++ /dev/null
-# 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@
-
-
GroupPointLayout->setMargin( 11 );
// Controls
- const double min = -1e+06;
- const double max = 1e+06;
+ const double min = -1e+16;
+ const double max = 1e+16;
const double step = 5;
+ const int precision = -6; // PAL12789. Minus is for using 'g' double->string conversion specifier,
+ // see QtxDblSpinBox::mapValueToText( double v )
TextLabelX = new QLabel( GroupPoint, "TextLabelX" );
TextLabelX->setText( tr("X:") );
GroupPointLayout->addWidget( TextLabelX, 0, 0 );
SpinBox_X = new QtxDblSpinBox( min, max, step, GroupPoint, "SpinBox_X" );
+ SpinBox_X->setPrecision( precision );
GroupPointLayout->addWidget( SpinBox_X, 0, 1 );
TextLabelY = new QLabel( GroupPoint, "TextLabelY" );
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" );
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" );
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" );
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" );
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" );
connect( buttonApply, SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
myBusy = false;
+
+ connect(view, SIGNAL(Show( QShowEvent * )), this, SLOT(onViewShow()));
+ connect(view, SIGNAL(Hide( QHideEvent * )), this, SLOT(onViewHide()));
}
/*!
myClippingPlane = aView3d->ActivePlane();
}
}
+
+void OCCViewer_ClippingDlg::onViewShow()
+{
+ if(myAction->isOn())
+ show();
+ else
+ hide();
+}
+
+void OCCViewer_ClippingDlg::onViewHide()
+{
+ hide();
+}
+
void onModeChanged( int mode );
void onValueChanged();
void onPreview( bool on );
+
+ void onViewShow();
+ void onViewHide();
};
#endif // OCCVIEWER_CLIPPINGDLG_H
int index = curItem->listBox()->index( curItem );
if( myKeyFlag == 2 )
{
- for( int i = 0; i < myListBox->count(); i++ )
+ for( int i = 0; i < (int)myListBox->count(); i++ )
{
if( myListBox->isSelected( i ) && i != index )
{
if( myListBox->count() && myListBox->isEditEnabled() )
{
int curIndex = -1;
- for( int i = 0; i < myListBox->count(); i++ )
+ for( int i = 0; i < (int)myListBox->count(); i++ )
if( myListBox->isSelected( i ) )
{
myListBox->removeItem( i );
- for( int j = i; j < myParametersMap.count(); j++ )
+ for( int j = i; j < (int)myParametersMap.count(); j++ )
if( j != myParametersMap.count() - 1 )
myParametersMap[ j ] = myParametersMap[ j + 1 ];
else
--- /dev/null
+// Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "OCCViewer_SetRotationPointDlg.h"
+
+#include <QtxAction.h>
+
+#include "OCCViewer_ViewWindow.h"
+
+#include <qlineedit.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qvalidator.h>
+#include <qbuttongroup.h>
+#include <qobjectlist.h>
+#include <qcheckbox.h>
+#include <qhbox.h>
+
+/*!
+ Constructor
+ \param view - view window
+ \param parent - parent widget
+ \param name - dialog name
+ \param modal - is this dialog modal
+ \param fl - flags
+*/
+OCCViewer_SetRotationPointDlg::OCCViewer_SetRotationPointDlg( OCCViewer_ViewWindow* view, QWidget* parent, const char* name, bool modal, WFlags fl )
+: QDialog( parent, "OCCViewer_SetRotationPointDlg", modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ),
+ myView( view )
+{
+ setCaption(tr("CAPTION"));
+ setSizeGripEnabled(TRUE);
+
+ // Create layout for this dialog
+ QGridLayout* layoutDlg = new QGridLayout (this);
+ layoutDlg->setSpacing(6);
+ layoutDlg->setMargin(11);
+
+ // Create check box "Use Bounding Box Center"
+ QHBox* aCheckBox = new QHBox(this);
+
+ myIsBBCenter = new QCheckBox(tr("USE_BBCENTER"), aCheckBox);
+ myIsBBCenter->setChecked(true);
+ connect(myIsBBCenter, SIGNAL(stateChanged(int)), SLOT(onBBCenterChecked()));
+
+ // Create croup button with radio buttons
+ myGroupSelButton = new QButtonGroup(2,Qt::Vertical,"",this);
+ myGroupSelButton->setMargin(11);
+
+ // Create "Set to Origin" button
+ myToOrigin = new QPushButton(myGroupSelButton);
+ myToOrigin->setText(tr("LBL_TOORIGIN"));
+ connect(myToOrigin, SIGNAL(clicked()), this, SLOT(onToOrigin()));
+
+ // Create "Select Point from View" button
+ mySelectPoint = new QPushButton(myGroupSelButton);
+ mySelectPoint->setText(tr("LBL_SELECTPOINT"));
+ mySelectPoint->setToggleButton(true);
+ connect(mySelectPoint, SIGNAL(clicked()), this, SLOT(onSelectPoint()));
+
+ // Create croup box with grid layout
+ myGroupBoxCoord = new QGroupBox(this, "GroupBox");
+ QHBoxLayout* aHBoxLayout = new QHBoxLayout(myGroupBoxCoord);
+ aHBoxLayout->setMargin(11);
+ aHBoxLayout->setSpacing(6);
+
+ // "X" coordinate
+ QLabel* TextLabelX = new QLabel (tr("LBL_X"), myGroupBoxCoord, "TextLabelX");
+ TextLabelX->setFixedWidth(15);
+ myX = new QLineEdit(myGroupBoxCoord);
+ myX->setValidator(new QDoubleValidator(myX));
+ myX->setText(QString::number(0.0));
+ connect(myX, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged()));
+
+ // "Y" coordinate
+ QLabel* TextLabelY = new QLabel (tr("LBL_Y"), myGroupBoxCoord, "TextLabelY");
+ TextLabelY->setFixedWidth(15);
+ myY = new QLineEdit(myGroupBoxCoord);
+ myY->setValidator(new QDoubleValidator(myY));
+ myY->setText(QString::number(0.0));
+ connect(myY, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged()));
+
+ // "Z" coordinate
+ QLabel* TextLabelZ = new QLabel (tr("LBL_Z"), myGroupBoxCoord, "TextLabelZ");
+ TextLabelZ->setFixedWidth(15);
+ myZ = new QLineEdit(myGroupBoxCoord);
+ myZ->setValidator(new QDoubleValidator(myZ));
+ myZ->setText(QString::number(0.0));
+ connect(myZ, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged()));
+
+ // Layout widgets in the horizontal group box
+ aHBoxLayout->addWidget(TextLabelX);
+ aHBoxLayout->addWidget(myX);
+ aHBoxLayout->addWidget(TextLabelY);
+ aHBoxLayout->addWidget(myY);
+ aHBoxLayout->addWidget(TextLabelZ);
+ aHBoxLayout->addWidget(myZ);
+
+ // "Close" button
+ QGroupBox* aGroupBox = new QGroupBox(this);
+ QHBoxLayout* aHBoxLayout2 = new QHBoxLayout(aGroupBox);
+ aHBoxLayout2->setMargin(11);
+ aHBoxLayout2->setSpacing(6);
+
+ QPushButton* m_bClose = new QPushButton(tr("&Close"), aGroupBox, "m_bClose");
+ m_bClose->setAutoDefault(TRUE);
+ m_bClose->setFixedSize(m_bClose->sizeHint());
+ connect(m_bClose, SIGNAL(clicked()), this, SLOT(onClickClose()));
+
+ // Layout buttons
+ aHBoxLayout2->addWidget(m_bClose);
+
+ // Layout top level widgets
+ layoutDlg->addWidget(aCheckBox,0,0);
+ layoutDlg->addWidget(myGroupSelButton,1,0);
+ layoutDlg->addWidget(myGroupBoxCoord,2,0);
+ layoutDlg->addWidget(aGroupBox,3,0);
+
+ setEnabled(myGroupSelButton,!myIsBBCenter->isChecked());
+ setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked());
+
+ this->resize(400, this->sizeHint().height());
+
+ connect(view, SIGNAL(Show( QShowEvent * )), this, SLOT(onViewShow()));
+ connect(view, SIGNAL(Hide( QHideEvent * )), this, SLOT(onViewHide()));
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+OCCViewer_SetRotationPointDlg
+::~OCCViewer_SetRotationPointDlg()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*!
+ Return true if it is the first show for this dialog
+*/
+bool
+OCCViewer_SetRotationPointDlg
+::IsFirstShown()
+{
+ return myIsBBCenter->isChecked() && myX->text().toDouble() == 0.
+ && myY->text().toDouble() == 0. && myZ->text().toDouble() == 0.;
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::setEnabled(QGroupBox* theGrp, const bool theState)
+{
+ QObjectList aChildren(*theGrp->children());
+ QObject* anObj;
+ for(anObj = aChildren.first(); anObj !=0; anObj = aChildren.next())
+ {
+ if (anObj !=0 && anObj->inherits("QLineEdit"))
+ ((QLineEdit*)anObj)->setReadOnly(!theState);
+ if (anObj !=0 && anObj->inherits("QPushButton"))
+ ((QLineEdit*)anObj)->setEnabled(theState);
+ }
+
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::onBBCenterChecked()
+{
+ setEnabled(myGroupSelButton,!myIsBBCenter->isChecked());
+ setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked());
+
+ if ( myIsBBCenter->isChecked() )
+ {
+ if ( mySelectPoint->state() == QButton::On )
+ mySelectPoint->toggle();
+ myView->activateSetRotationGravity();
+ }
+ else
+ myView->activateSetRotationSelected(myX->text().toDouble(),
+ myY->text().toDouble(),
+ myZ->text().toDouble());
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::onToOrigin()
+{
+ if ( mySelectPoint->state() == QButton::On )
+ mySelectPoint->toggle();
+ setCoords();
+ myView->activateSetRotationSelected(myX->text().toDouble(),
+ myY->text().toDouble(),
+ myZ->text().toDouble());
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::onSelectPoint()
+{
+ if ( mySelectPoint->state() == QButton::On )
+ myView->activateStartPointSelection();
+ else
+ mySelectPoint->toggle();
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::onCoordChanged()
+{
+ if ( !myIsBBCenter->isChecked() )
+ {
+ if ( mySelectPoint->state() == QButton::On
+ &&
+ ( myX->hasFocus() || myY->hasFocus() || myZ->hasFocus() ) )
+ mySelectPoint->toggle();
+ myView->activateSetRotationSelected(myX->text().toDouble(),
+ myY->text().toDouble(),
+ myZ->text().toDouble());
+ }
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::setCoords(double theX, double theY, double theZ)
+{
+ myX->setText(QString::number(theX));
+ myY->setText(QString::number(theY));
+ myZ->setText(QString::number(theZ));
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::toggleChange()
+{
+ if ( !myIsBBCenter->isChecked() )
+ mySelectPoint->toggle();
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::onClickClose()
+{
+ myAction->setOn( false );
+ reject();
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::onViewShow()
+{
+ if(myAction->isOn())
+ show();
+ else
+ hide();
+}
+
+void
+OCCViewer_SetRotationPointDlg
+::onViewHide()
+{
+ hide();
+}
--- /dev/null
+// Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef OCCVIEWER_SETROTATIONPOINTDLG_H
+#define OCCVIEWER_SETROTATIONPOINTDLG_H
+
+#include "OCCViewer.h"
+
+#include <qdialog.h>
+
+class QtxAction;
+
+class QLineEdit;
+class QPushButton;
+class QGroupBox;
+class QButtonGroup;
+class QCheckBox;
+
+class OCCViewer_ViewWindow;
+
+class OCCVIEWER_EXPORT OCCViewer_SetRotationPointDlg : public QDialog
+{
+ Q_OBJECT
+
+public:
+ OCCViewer_SetRotationPointDlg(OCCViewer_ViewWindow* , QWidget* parent = 0,
+ const char* name = 0, bool modal = FALSE, WFlags fl = 0);
+ ~OCCViewer_SetRotationPointDlg();
+
+ void SetAction( QtxAction* theAction ) { myAction = theAction; }
+ bool IsFirstShown();
+
+ void setCoords(double theX=0., double theY=0., double theZ=0.);
+ void toggleChange();
+
+protected:
+ OCCViewer_ViewWindow* myView;
+ QtxAction* myAction;
+
+ QCheckBox* myIsBBCenter;
+
+ QButtonGroup* myGroupSelButton;
+ QPushButton* myToOrigin;
+ QPushButton* mySelectPoint;
+
+ QGroupBox* myGroupBoxCoord;
+ QLineEdit* myX;
+ QLineEdit* myY;
+ QLineEdit* myZ;
+
+ void setEnabled(QGroupBox* theGrp, const bool theState);
+
+protected slots:
+ void onBBCenterChecked();
+
+ void onToOrigin();
+ void onSelectPoint();
+
+ void onCoordChanged();
+
+ void onClickClose();
+
+ void onViewShow();
+ void onViewHide();
+};
+
+#endif // OCCVIEWER_SETROTATIONPOINTDLG_H
#include "OCCViewer_ViewWindow.h"
#include "SUIT_Desktop.h"
-int OCCViewer_ViewManager::myMaxId = 0;
-
/*!
Constructor
*/
OCCViewer_ViewManager::OCCViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop, bool DisplayTrihedron )
-: SUIT_ViewManager( study, theDesktop )
+: SUIT_ViewManager( study, theDesktop, new OCCViewer_Viewer( DisplayTrihedron ) )
{
- myId = ++myMaxId;
- setViewModel( new OCCViewer_Viewer( DisplayTrihedron ) );
+ setTitle( tr( "OCC_VIEW_TITLE" ) );
}
/*!
{
}
-/*!
- Sets view name
- \param theView - view to assign name
-*/
-void OCCViewer_ViewManager::setViewName(SUIT_ViewWindow* theView)
-{
- int aPos = myViews.find(theView);
- theView->setCaption( tr( "OCC_VIEW_TITLE" ).arg( myId ).arg( aPos + 1 ) );
-}
-
/*!
Fills popup menu with custom actions
\param popup - popup menu to be filled with
OCCViewer_Viewer* getOCCViewer() { return (OCCViewer_Viewer*) myViewModel; }
virtual void contextMenuPopup( QPopupMenu* );
-
-protected:
- void setViewName(SUIT_ViewWindow* theView);
-
-protected:
- static int myMaxId;
- int myId;
};
#endif
{
if ( view ) {
view->initLayout();
+ view->initSketchers();
OCCViewer_ViewPort3d* vp3d = view->getViewPort();
if ( vp3d )
myEndPnt.setX(theEvent->x()); myEndPnt.setY(theEvent->y());
OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*) theWindow;
bool aHasShift = (theEvent->state() & Qt::ShiftButton);
+
+ if (!aHasShift) emit deselection();
if (myStartPnt == myEndPnt)
{
return;
QPtrVector<SUIT_ViewWindow> wins = myViewManager->getViews();
- for ( int i = 0; i < wins.count(); i++ )
+ for ( int i = 0; i < (int)wins.count(); i++ )
{
OCCViewer_ViewWindow* win = ::qt_cast<OCCViewer_ViewWindow*>( wins.at( i ) );
if ( win )
return;
QPtrVector<SUIT_ViewWindow> wins = myViewManager->getViews();
- for ( int i = 0; i < wins.count(); i++ )
+ for ( int i = 0; i < (int)wins.count(); i++ )
{
OCCViewer_ViewWindow* win = ::qt_cast<OCCViewer_ViewWindow*>( wins.at( i ) );
if ( win )
{
if (!myV3dViewer.IsNull())
myV3dViewer->Update();
+
+ OCCViewer_ViewWindow* aView = (OCCViewer_ViewWindow*)(myViewManager->getActiveView());
+ if ( aView )
+ aView->updateGravityCoords();
}
/*!
{
AIS_ListIteratorOfListOfInteractive aIt;
for (aIt.Initialize(theList); aIt.More(); aIt.Next())
- myAISContext->SetSelected(aIt.Value(), false);
+ myAISContext->AddOrRemoveSelected(aIt.Value(), false);
myAISContext->UpdateCurrentViewer();
}
void OCCViewer_Viewer::switchRepresentation( const Handle(AIS_InteractiveObject)& obj,
int mode, bool update )
{
- myAISContext->SetDisplayMode( obj, (Standard_Integer)mode, true );
+ myAISContext->SetDisplayMode( obj, (Standard_Integer)mode, update );
if( update )
myV3dViewer->Update();
}
/*!
\return trihedron size
*/
-int OCCViewer_Viewer::trihedronSize() const
+double OCCViewer_Viewer::trihedronSize() const
{
- int sz = 0;
+ double sz = 0;
if ( !myTrihedron.IsNull() )
- sz = (int)myTrihedron->Size();
+ sz = myTrihedron->Size();
return sz;
}
Changes trihedron size
\param sz - new size
*/
-void OCCViewer_Viewer::setTrihedronSize( const int sz )
+void OCCViewer_Viewer::setTrihedronSize( const double sz )
{
if ( !myTrihedron.IsNull() )
myTrihedron->SetSize( sz );
bool isTrihedronVisible() const;
virtual void setTrihedronShown( const bool );
- int trihedronSize() const;
- virtual void setTrihedronSize( const int );
+ double trihedronSize() const;
+ virtual void setTrihedronSize( const double );
public slots:
void onClearViewAspects();
signals:
void selectionChanged();
+ void deselection();
protected:
void initView( OCCViewer_ViewWindow* view );
XStandardColormap *c;
int n, i;
-#ifdef DEBUG
- cout << "Choosing cmap for vID = " << vi->visualid << endl;
-#endif
+ //#ifdef DEBUG
+ //cout << "Choosing cmap for vID = " << vi->visualid << endl;
+ //#endif
if ( vi->visualid == XVisualIDFromVisual( (Visual*)QPaintDevice::x11AppVisual() ) )
{
{
myPopupActions.setAutoDelete( true );
myPaintersRedrawing = false;
- myEnableSketching = false;
+ myEnableSketching = true;
myEnableTransform = true;
setMouseTracking( true );
class OCCViewer_ViewSketcher;
class OCCViewer_ViewTransformer;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*!
\class OCCViewer_ViewPort
Visualisation canvas of SUIT-based application
static int nCounter; /* objects counter */
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include "OCCViewer_ViewPort3d.h"
#include "OCCViewer_VService.h"
+#include "OCCViewer_ViewWindow.h"
#include <qrect.h>
#include <qevent.h>
#include <Xw_Window.hxx>
#endif
+static double rx = 0.;
+static double ry = 0.;
+static int sx = 0;
+static int sy = 0;
+static Standard_Boolean zRotation = Standard_False;
+
/*!
Constructor
*/
*/
void OCCViewer_ViewPort3d::zoom( int x0, int y0, int x, int y )
{
- if ( !activeView().IsNull() )
- activeView()->Zoom( x0, y0, x, y );
+ if ( !activeView().IsNull() ) {
+ // as OCCT respects a sign of only dx,
+ // but we want both signes to be taken into account
+ //activeView()->Zoom( x0, y0, x, y );
+ activeView()->Zoom( x0 + y0, 0, x + y, 0 );
+ }
}
/*!
/*!
Inits 'rotation' transformation. [ protected ]
*/
-void OCCViewer_ViewPort3d::startRotation( int x, int y )
+void OCCViewer_ViewPort3d::startRotation( int x, int y,
+ int theRotationPointType,
+ const gp_Pnt& theSelectedPoint )
{
- if ( !activeView().IsNull() )
- {
- myDegenerated = activeView()->DegenerateModeIsOn();
- activeView()->SetDegenerateModeOn();
- if (myAnimate) activeView()->SetAnimationModeOn();
- activeView()->StartRotation( x, y, 0.45 );
+ if ( !activeView().IsNull() )
+ {
+ myDegenerated = activeView()->DegenerateModeIsOn();
+ activeView()->SetDegenerateModeOn();
+ if (myAnimate) activeView()->SetAnimationModeOn();
+
+ //double gx, gy, gz;
+ //double gx = activeView()->gx;
+ //activeView()->Gravity(gx,gy,gz);
+
+ switch ( theRotationPointType ) {
+ case OCCViewer_ViewWindow::GRAVITY:
+ activeView()->StartRotation( x, y, 0.45 );
+ break;
+ case OCCViewer_ViewWindow::SELECTED:
+ sx = x; sy = y;
+
+ double X,Y;
+ activeView()->Size(X,Y);
+ rx = Standard_Real(activeView()->Convert(X));
+ ry = Standard_Real(activeView()->Convert(Y));
+
+ activeView()->Rotate( 0., 0., 0.,
+ theSelectedPoint.X(),theSelectedPoint.Y(), theSelectedPoint.Z(),
+ Standard_True );
+
+ Quantity_Ratio zRotationThreshold;
+ zRotation = Standard_False;
+ zRotationThreshold = 0.45;
+ if( zRotationThreshold > 0. ) {
+ Standard_Real dx = Abs(sx - rx/2.);
+ Standard_Real dy = Abs(sy - ry/2.);
+ Standard_Real dd = zRotationThreshold * (rx + ry)/2.;
+ if( dx > dd || dy > dd ) zRotation = Standard_True;
}
+ break;
+ default:
+ break;
+ }
+ }
}
/*!
Rotates the viewport. [ protected ]
*/
-void OCCViewer_ViewPort3d::rotate( int x, int y )
+void OCCViewer_ViewPort3d::rotate( int x, int y,
+ int theRotationPointType,
+ const gp_Pnt& theSelectedPoint )
{
- if ( !activeView().IsNull() )
- activeView()->Rotation( x, y );
-// setZSize( getZSize() );
+ if ( !activeView().IsNull() ) {
+ switch ( theRotationPointType ) {
+ case OCCViewer_ViewWindow::GRAVITY:
+ activeView()->Rotation( x, y );
+ break;
+ case OCCViewer_ViewWindow::SELECTED:
+ double dx, dy, dz;
+ if( zRotation ) {
+ dz = atan2(Standard_Real(x)-rx/2., ry/2.-Standard_Real(y)) -
+ atan2(sx-rx/2.,ry/2.-sy);
+ dx = dy = 0.;
+ }
+ else {
+ dx = (Standard_Real(x) - sx) * Standard_PI/rx;
+ dy = (sy - Standard_Real(y)) * Standard_PI/ry;
+ dz = 0.;
+ }
+
+ activeView()->Rotate( dx, dy, dz,
+ theSelectedPoint.X(),theSelectedPoint.Y(), theSelectedPoint.Z(),
+ Standard_False );
+ break;
+ default:
+ break;
+ }
+ }
+ // setZSize( getZSize() );
}
/*!
*/
void OCCViewer_ViewPort3d::endRotation()
{
- if ( !activeView().IsNull() )
- {
- if (myAnimate) activeView()->SetAnimationModeOff();
- if ( !myDegenerated )
- activeView()->SetDegenerateModeOff();
- activeView()->ZFitAll(1.);
- activeView()->SetZSize(0.);
- activeView()->Update();
- }
+ if ( !activeView().IsNull() )
+ {
+ if (myAnimate) activeView()->SetAnimationModeOff();
+ if ( !myDegenerated )
+ activeView()->SetDegenerateModeOff();
+ activeView()->ZFitAll(1.);
+ activeView()->SetZSize(0.);
+ activeView()->Update();
+ }
}
/*!
class QRect;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
class OCCVIEWER_EXPORT OCCViewer_ViewPort3d: public OCCViewer_ViewPort
{
Q_OBJECT
virtual void zoom( int, int, int, int );
virtual void fitAll( bool keepScale = false, bool withZ = true, bool upd = true );
- void startRotation( int, int );
- void rotate( int, int );
+ void startRotation( int, int, int, const gp_Pnt& );
+ void rotate( int, int, int, const gp_Pnt& );
void endRotation();
protected:
double myScale;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "OCCViewer_ViewSketcher.h"
+#include "OCCViewer_ViewWindow.h"
+#include "OCCViewer_ViewPort3d.h"
+
+#include <qapplication.h>
+#include <qpainter.h>
+#include <qpointarray.h>
+
+/****************************************************************
+** Class: OCCViewer_ViewSketcher
+** Level: Public
+*****************************************************************/
+
+OCCViewer_ViewSketcher::OCCViewer_ViewSketcher( OCCViewer_ViewWindow* vw, int type )
+: QObject( vw ),
+mySketchButton( Qt::LeftButton ),
+mypViewWindow( vw ),
+myType( type ),
+mypData( 0 ),
+myResult( Neutral ),
+myButtonState( 0 )
+{
+}
+
+OCCViewer_ViewSketcher::~OCCViewer_ViewSketcher()
+{
+}
+
+void OCCViewer_ViewSketcher::activate()
+{
+ OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort();
+
+ mySavedCursor = avp->cursor();
+ avp->setCursor( Qt::PointingHandCursor );
+ avp->installEventFilter( this );
+ qApp->installEventFilter( this );
+
+ connect( avp, SIGNAL( vpDrawExternal( QPainter* ) ), this, SLOT( onDrawViewPort() ) );
+
+ myStart = QPoint();
+ myResult = Neutral;
+
+ onActivate();
+}
+
+void OCCViewer_ViewSketcher::deactivate()
+{
+ OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort();
+
+ disconnect( avp, SIGNAL( vpDrawExternal( QPainter* ) ), this, SLOT( onDrawViewPort() ) );
+
+ qApp->removeEventFilter( this );
+ avp->removeEventFilter( this );
+ avp->setCursor( mySavedCursor );
+
+ onDeactivate();
+}
+
+int OCCViewer_ViewSketcher::type() const
+{
+ return myType;
+}
+
+void* OCCViewer_ViewSketcher::data() const
+{
+ return mypData;
+}
+
+int OCCViewer_ViewSketcher::result() const
+{
+ return myResult;
+}
+
+int OCCViewer_ViewSketcher::buttonState() const
+{
+ return myButtonState;
+}
+
+void OCCViewer_ViewSketcher::onActivate()
+{
+}
+
+void OCCViewer_ViewSketcher::onDeactivate()
+{
+}
+
+bool OCCViewer_ViewSketcher::isDefault() const
+{
+ return true;
+}
+
+bool OCCViewer_ViewSketcher::eventFilter( QObject* o, QEvent* e )
+{
+ OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort();
+
+ SketchState state = EnTrain;
+ bool ignore = false;
+ if ( o == avp )
+ {
+ switch ( e->type() )
+ {
+ case QEvent::MouseMove:
+ case QEvent::MouseButtonPress:
+ case QEvent::MouseButtonRelease:
+ case QEvent::MouseButtonDblClick:
+ {
+ QMouseEvent* me = (QMouseEvent*)e;
+
+ myButtonState = me->state();
+ if ( e->type() == QEvent::MouseButtonPress )
+ myButtonState |= me->button();
+
+ if ( myStart.isNull() && ( myButtonState & sketchButton() ) )
+ {
+ state = Debut;
+ myStart = me->pos();
+ }
+
+ myCurr = me->pos();
+
+ onMouse( me );
+
+ if ( myResult != Neutral )
+ state = Fin;
+
+ ignore = true;
+ break;
+ }
+ case QEvent::Hide:
+ case QEvent::HideToParent:
+ myResult = Reject;
+ onSketch( Fin );
+ break;
+ default:
+ break;
+ }
+ }
+ if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease )
+ {
+ ignore = onKey( (QKeyEvent*)e );
+ if ( myResult != Neutral )
+ state = Fin;
+ }
+
+ if ( ignore )
+ {
+ onSketch( state );
+ return true;
+ }
+ return QObject::eventFilter( o, e );
+}
+
+void OCCViewer_ViewSketcher::onDrawViewPort()
+{
+ onSketch( Debut );
+}
+
+bool OCCViewer_ViewSketcher::onKey( QKeyEvent* )
+{
+ return false;
+}
+
+void OCCViewer_ViewSketcher::onMouse( QMouseEvent* )
+{
+}
+
+int OCCViewer_ViewSketcher::sketchButton()
+{
+ return mySketchButton;
+}
+
+void OCCViewer_ViewSketcher::setSketchButton( int b )
+{
+ mySketchButton = b;
+}
+
+/****************************************************************
+** Class: OCCViewer_RectSketcher
+** Level: Public
+*****************************************************************/
+
+OCCViewer_RectSketcher::OCCViewer_RectSketcher( OCCViewer_ViewWindow* vw, int typ )
+: OCCViewer_ViewSketcher( vw, typ )
+{
+}
+
+OCCViewer_RectSketcher::~OCCViewer_RectSketcher()
+{
+ delete mypData;
+}
+
+void OCCViewer_RectSketcher::onActivate()
+{
+ mypData = new QRect();
+}
+
+void OCCViewer_RectSketcher::onDeactivate()
+{
+ delete mypData;
+ mypData = 0;
+}
+
+bool OCCViewer_RectSketcher::onKey( QKeyEvent* e )
+{
+ if ( e->key() == Qt::Key_Escape )
+ myResult = Reject;
+ else if ( e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return )
+ myResult = Accept;
+
+ return true;
+}
+
+void OCCViewer_RectSketcher::onMouse( QMouseEvent* e )
+{
+ OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort();
+
+ if ( avp->rect().contains( myCurr ) )
+ avp->setCursor( Qt::PointingHandCursor );
+ else
+ avp->setCursor( Qt::ForbiddenCursor );
+
+ if ( e->type() == QEvent::MouseButtonRelease && e->button() == sketchButton() )
+ {
+ myResult = Accept;
+ QApplication::postEvent( avp, new QMouseEvent( e->type(), e->pos(),
+ e->globalPos(), e->state(), e->button() ) );
+ }
+}
+
+void OCCViewer_RectSketcher::onSketch( SketchState state )
+{
+ OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort();
+
+ QRect* sketchRect = (QRect*)data();
+ if ( myButtonState & sketchButton() )
+ {
+ QRect rect( QMIN( myStart.x(), myCurr.x() ), QMIN( myStart.y(), myCurr.y() ),
+ QABS( myStart.x() - myCurr.x() ), QABS( myStart.y() - myCurr.y() ) );
+ QPainter p( avp );
+ p.setPen( Qt::white );
+ p.setRasterOp( Qt::XorROP );
+ if ( state != Debut && !sketchRect->isEmpty() )
+ p.drawRect( *sketchRect );
+ *sketchRect = rect;
+ if ( !rect.isEmpty() && state != Fin )
+ p.drawRect( *sketchRect );
+ }
+
+ if ( state == Fin )
+ {
+ QApplication::syncX(); /* force rectangle redrawing */
+ mypViewWindow->activateSketching( OCCViewer_ViewWindow::NoSketching );
+ }
+}
+
+/****************************************************************
+** Class: OCCViewer_PolygonSketcher
+** Level: Public
+*****************************************************************/
+
+OCCViewer_PolygonSketcher::OCCViewer_PolygonSketcher( OCCViewer_ViewWindow* vw, int typ )
+: OCCViewer_ViewSketcher( vw, typ ),
+ myDbl ( false ),
+ myToler ( 5, 5 ),
+ mypPoints ( 0L ),
+ myAddButton ( 0 ),
+ myDelButton ( 0 )
+{
+ mySketchButton = Qt::RightButton;
+}
+
+OCCViewer_PolygonSketcher::~OCCViewer_PolygonSketcher()
+{
+ delete mypPoints;
+ delete mypData;
+}
+
+void OCCViewer_PolygonSketcher::onActivate()
+{
+ myDbl = false;
+ mypData = new QPointArray( 0 );
+ mypPoints = new QPointArray( 0 );
+
+ switch ( sketchButton() )
+ {
+ case Qt::LeftButton:
+ myAddButton = Qt::RightButton;
+ myDelButton = Qt::MidButton;
+ break;
+ case Qt::MidButton:
+ myAddButton = Qt::LeftButton;
+ myDelButton = Qt::RightButton;
+ break;
+ case Qt::RightButton:
+ default:
+ myAddButton = Qt::LeftButton;
+ myDelButton = Qt::MidButton;
+ break;
+ };
+}
+
+void OCCViewer_PolygonSketcher::onDeactivate()
+{
+ delete mypPoints;
+ mypPoints = 0;
+ delete mypData;
+ mypData = 0;
+}
+
+bool OCCViewer_PolygonSketcher::onKey( QKeyEvent* e )
+{
+ if ( e->key() == Qt::Key_Escape )
+ {
+ myResult = Reject;
+ return true;
+ }
+ else if ( e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return )
+ {
+ QPointArray* points = (QPointArray*)data();
+ if ( points->count() )
+ {
+ QPoint last = points->point( points->count() - 1 );
+ if ( last != myCurr )
+ {
+ points->resize( points->count() + 1 );
+ points->setPoint( points->count() - 1, myCurr );
+ }
+ }
+ myResult = Accept;
+ return true;
+ }
+ else if ( e->key() == Qt::Key_Backspace && e->type() == QEvent::KeyRelease )
+ {
+ QPointArray* points = (QPointArray*)data();
+ if ( points->count() > 1 )
+ points->resize( points->count() - 1 );
+ onMouse( 0 );
+ return true;
+ }
+
+ return true;
+}
+
+void OCCViewer_PolygonSketcher::onMouse( QMouseEvent* e )
+{
+ OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort();
+
+ QPointArray* points = (QPointArray*)data();
+ if ( !points->count() && !myStart.isNull() )
+ {
+ points->resize( points->count() + 1 );
+ points->setPoint( points->count() - 1, myStart );
+ }
+
+ bool closed = false;
+ bool valid = avp->rect().contains( myCurr );
+ if ( !myStart.isNull() )
+ {
+ QRect aRect( myStart.x() - myToler.width(), myStart.y() - myToler.height(),
+ 2 * myToler.width(), 2 * myToler.height() );
+ closed = aRect.contains( myCurr );
+ }
+ valid = valid && isValid( points, myCurr );
+ if ( closed && !valid )
+ closed = false;
+
+ if ( closed )
+ avp->setCursor( Qt::CrossCursor );
+ else if ( valid )
+ avp->setCursor( Qt::PointingHandCursor );
+ else
+ avp->setCursor( Qt::ForbiddenCursor );
+
+ if ( !e )
+ return;
+
+ if ( e->type() == QEvent::MouseButtonRelease && ( e->button() & sketchButton() ) )
+ {
+ myResult = Reject;
+ QApplication::postEvent( avp, new QMouseEvent( e->type(), e->pos(),
+ e->globalPos(), e->state(), e->button() ) );
+ }
+ else if ( e->type() == QEvent::MouseButtonRelease && ( e->button() & myAddButton ) )
+ {
+ if ( closed )
+ myResult = Accept;
+ else
+ {
+ if ( myStart.isNull() )
+ myStart = myCurr;
+ else
+ {
+ QPoint last = points->point( points->count() - 1 );
+ if ( last != myCurr && valid )
+ {
+ points->resize( points->count() + 1 );
+ points->setPoint( points->count() - 1, myCurr );
+ }
+ if ( valid && myDbl )
+ myResult = Accept;
+ }
+ }
+ }
+ else if ( ( e->type() == QEvent::MouseButtonRelease && ( e->button() & myDelButton ) ) ||
+ ( e->type() == QEvent::MouseButtonDblClick && ( e->button() & myDelButton ) ) )
+ {
+ if ( points->count() > 1 )
+ points->resize( points->count() - 1 );
+ onMouse( 0 );
+ }
+ myDbl = e->type() == QEvent::MouseButtonDblClick && ( e->button() & myAddButton );
+}
+
+void OCCViewer_PolygonSketcher::onSketch( SketchState state )
+{
+ OCCViewer_ViewPort3d* avp = mypViewWindow->getViewPort();
+
+ QPointArray* points = (QPointArray*)data();
+ QPainter p( avp );
+ p.setPen( Qt::white );
+ p.setRasterOp( Qt::XorROP );
+ if ( state != Debut )
+ p.drawPolyline( *mypPoints );
+
+ if ( points->count() )
+ {
+ mypPoints->resize( points->count() + 1 );
+ for ( uint i = 0; i < points->count(); i++ )
+ mypPoints->setPoint( i, points->point( i ) );
+ mypPoints->setPoint( points->count(), myCurr );
+ if ( state != Fin )
+ p.drawPolyline( *mypPoints );
+ }
+
+ if ( state == Fin )
+ {
+ QApplication::syncX();
+ mypViewWindow->activateSketching( OCCViewer_ViewWindow::NoSketching );
+ }
+}
+
+bool OCCViewer_PolygonSketcher::isValid( const QPointArray* aPoints, const QPoint& aCur ) const
+{
+ if ( !aPoints->count() )
+ return true;
+
+ if ( aPoints->count() == 1 && aPoints->point( 0 ) == aCur )
+ return false;
+
+ const QPoint& aLast = aPoints->point( aPoints->count() - 1 );
+
+ if ( aLast == aCur )
+ return true;
+
+ bool res = true;
+ for ( uint i = 0; i < aPoints->count() - 1 && res; i++ )
+ {
+ const QPoint& aStart = aPoints->point( i );
+ const QPoint& anEnd = aPoints->point( i + 1 );
+ res = !isIntersect( aStart, anEnd, aCur, aLast );
+ }
+
+ return res;
+}
+
+bool OCCViewer_PolygonSketcher::isIntersect( const QPoint& aStart1, const QPoint& anEnd1,
+ const QPoint& aStart2, const QPoint& anEnd2 ) const
+{
+ if ( ( aStart1 == aStart2 && anEnd1 == anEnd2 ) ||
+ ( aStart1 == anEnd2 && anEnd1 == aStart2 ) )
+ return true;
+
+ if ( aStart1 == aStart2 || aStart2 == anEnd1 ||
+ aStart1 == anEnd2 || anEnd1 == anEnd2 )
+ return false;
+
+ double x11 = aStart1.x() * 1.0;
+ double x12 = anEnd1.x() * 1.0;
+ double y11 = aStart1.y() * 1.0;
+ double y12 = anEnd1.y() * 1.0;
+
+ double x21 = aStart2.x() * 1.0;
+ double x22 = anEnd2.x() * 1.0;
+ double y21 = aStart2.y() * 1.0;
+ double y22 = anEnd2.y() * 1.0;
+
+ double k1 = x12 == x11 ? 0 : ( y12 - y11 ) / ( x12 - x11 );
+ double k2 = x22 == x21 ? 0 : ( y22 - y21 ) / ( x22 - x21 );
+
+ double b1 = y11 - k1 * x11;
+ double b2 = y21 - k2 * x21;
+
+ if ( k1 == k2 )
+ {
+ if ( b1 != b2 )
+ return false;
+ else
+ return !( ( QMAX( x11, x12 ) <= QMIN( x21, x22 ) ||
+ QMIN( x11, x12 ) >= QMAX( x21, x22 ) ) &&
+ ( QMAX( y11, y12 ) <= QMIN( y21, y22 ) ||
+ QMIN( y11, y12 ) >= QMAX( y21, y22 ) ) );
+ }
+ else
+ {
+ double x0 = ( b2 - b1 ) / ( k1 - k2 );
+ double y0 = ( k1 * b2 - k2 * b1 ) / ( k1 - k2 );
+
+ if ( QMIN( x11, x12 ) < x0 && x0 < QMAX( x11, x12 ) &&
+ QMIN( y11, y12 ) < y0 && y0 < QMAX( y11, y12 ) &&
+ QMIN( x21, x22 ) < x0 && x0 < QMAX( x21, x22 ) &&
+ QMIN( y21, y22 ) < y0 && y0 < QMAX( y21, y22 ) )
+ return true;
+ }
+ return false;
+}
+
+
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef OCCVIEWER_VIEWSKETCHER_H
+#define OCCVIEWER_VIEWSKETCHER_H
+
+#include "OCCViewer.h"
+
+#include <qobject.h>
+#include <qcursor.h>
+
+class OCCViewer_ViewWindow;
+
+#ifdef WNT
+#pragma warning ( disable:4251 )
+#endif
+
+/*!
+ \class OCCViewer_ViewSketcher
+*/
+
+class OCCVIEWER_EXPORT OCCViewer_ViewSketcher : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum { Neutral, Accept, Reject };
+
+public:
+ OCCViewer_ViewSketcher( OCCViewer_ViewWindow*, int );
+ virtual ~OCCViewer_ViewSketcher();
+
+public:
+ int type() const;
+ int result() const;
+ int buttonState() const;
+ void* data() const;
+
+ void activate();
+ void deactivate();
+
+ int sketchButton();
+ void setSketchButton( int );
+
+ virtual bool isDefault() const;
+ virtual bool eventFilter( QObject*, QEvent* );
+
+private slots:
+ void onDrawViewPort();
+
+protected:
+ enum SketchState { Debut, EnTrain, Fin };
+ virtual bool onKey( QKeyEvent* );
+ virtual void onMouse( QMouseEvent* );
+ virtual void onSketch( SketchState ) = 0;
+ virtual void onActivate();
+ virtual void onDeactivate();
+
+protected:
+ int mySketchButton;
+ OCCViewer_ViewWindow* mypViewWindow;
+ int myType;
+ void* mypData;
+ int myResult;
+ QCursor mySavedCursor;
+ QPoint myStart, myCurr;
+ int myButtonState;
+};
+
+/*!
+ \class OCCViewer_RectSketcher
+*/
+
+class OCCVIEWER_EXPORT OCCViewer_RectSketcher : public OCCViewer_ViewSketcher
+{
+public:
+ OCCViewer_RectSketcher( OCCViewer_ViewWindow*, int );
+ virtual ~OCCViewer_RectSketcher();
+
+protected:
+ virtual bool onKey( QKeyEvent* );
+ virtual void onMouse( QMouseEvent* );
+ virtual void onSketch( SketchState );
+ virtual void onActivate();
+ virtual void onDeactivate();
+};
+
+/*!
+ \class OCCViewer_PolygonSketcher
+*/
+
+class OCCVIEWER_EXPORT OCCViewer_PolygonSketcher : public OCCViewer_ViewSketcher
+{
+public:
+ OCCViewer_PolygonSketcher( OCCViewer_ViewWindow*, int );
+ virtual ~OCCViewer_PolygonSketcher();
+
+protected:
+ virtual bool onKey( QKeyEvent* );
+ virtual void onMouse( QMouseEvent* );
+ virtual void onSketch( SketchState );
+ virtual void onActivate();
+ virtual void onDeactivate();
+
+private:
+ bool isValid( const QPointArray*, const QPoint& ) const;
+ bool isIntersect( const QPoint&, const QPoint&,
+ const QPoint&, const QPoint& ) const;
+
+private:
+ bool myDbl;
+ QSize myToler;
+ QPointArray* mypPoints;
+ int myAddButton;
+ int myDelButton;
+};
+
+#ifdef WNT
+#pragma warning( default:4251 )
+#endif
+
+#endif
#include "OCCViewer_ViewWindow.h"
#include "OCCViewer_ViewModel.h"
#include "OCCViewer_ViewPort3d.h"
+#include "OCCViewer_ViewManager.h"
+#include "OCCViewer_ViewSketcher.h"
#include "OCCViewer_CreateRestoreViewDlg.h"
#include "OCCViewer_ClippingDlg.h"
+#include "OCCViewer_SetRotationPointDlg.h"
#include "SUIT_Desktop.h"
#include "SUIT_Session.h"
#include <V3d_Plane.hxx>
#include <gp_Dir.hxx>
#include <gp_Pln.hxx>
+#include <TColgp_Array1OfPnt2d.hxx>
+
+#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <AIS_Shape.hxx>
+
+#include <BRep_Tool.hxx>
+#include <TopoDS.hxx>
+
+#include <BRepBndLib.hxx>
+#include <Graphic3d_MapIteratorOfMapOfStructure.hxx>
+#include <Visual3d_View.hxx>
+#include <Graphic3d_MapOfStructure.hxx>
+#include <Graphic3d_Structure.hxx>
+
+static QEvent* l_mbPressEvent = 0;
const char* imageZoomCursor[] = {
"32 32 3 1",
myEnableDrawMode = false;
updateEnabledDrawMode();
myClippingDlg = 0;
+ mySetRotationPointDlg = 0;
+
+ mypSketcher = 0;
+ myCurSketch = -1;
}
/*!
myViewPort = new OCCViewer_ViewPort3d( this, myModel->getViewer3d(), V3d_ORTHOGRAPHIC );
myViewPort->setBackgroundColor(black);
myViewPort->installEventFilter(this);
- setCentralWidget(myViewPort);
+ setCentralWidget(myViewPort);
myOperation = NOTHING;
+ myCurrPointType = GRAVITY;
+ myPrevPointType = GRAVITY;
+ mySelectedPoint = gp_Pnt(0.,0.,0.);
+ myRotationPointSelection = false;
+
setTransformRequested ( NOTHING );
setTransformInProcess ( false );
case ROTATE:
if ( theEvent->button() == Qt::LeftButton ) {
- myViewPort->startRotation(myStartX, myStartY);
+ myViewPort->startRotation(myStartX, myStartY, myCurrPointType, mySelectedPoint);
emit vpTransformationStarted ( ROTATE );
}
break;
break;
case ROTATE:
activateRotation();
- myViewPort->startRotation(myStartX, myStartY);
+ myViewPort->startRotation(myStartX, myStartY, myCurrPointType, mySelectedPoint);
break;
default:
- emit mousePressed(this, theEvent);
+ if ( myRotationPointSelection )
+ {
+ if ( theEvent->button() == Qt::LeftButton )
+ {
+ Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
+ ic->Select();
+ for ( ic->InitSelected(); ic->MoreSelected(); ic->NextSelected() )
+ {
+ TopoDS_Shape aShape = ic->SelectedShape();
+ if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX )
+ {
+ gp_Pnt aPnt = BRep_Tool::Pnt( TopoDS::Vertex( ic->SelectedShape() ) );
+ if ( mySetRotationPointDlg )
+ {
+ myRotationPointSelection = false;
+ mySetRotationPointDlg->setCoords(aPnt.X(), aPnt.Y(), aPnt.Z());
+ }
+ }
+ else
+ {
+ myCurrPointType = myPrevPointType;
+ break;
+ }
+ }
+ if ( ic->NbSelected() == 0 ) myCurrPointType = myPrevPointType;
+ if ( mySetRotationPointDlg ) mySetRotationPointDlg->toggleChange();
+ ic->CloseAllContexts();
+ myOperation = NOTHING;
+ setCursor( myCursor );
+ myCursorIsHand = false;
+ myRotationPointSelection = false;
+ }
+ }
+ else
+ emit mousePressed(this, theEvent);
break;
}
/* notify that we start a transformation */
}
if ( transformRequested() )
setTransformInProcess( true );
+
+ /* we may need it for sketching... */
+ if ( l_mbPressEvent )
+ delete l_mbPressEvent;
+ l_mbPressEvent = new QMouseEvent( *theEvent );
}
}
}
+/*!
+ Compute the gravity center
+*/
+bool OCCViewer_ViewWindow::computeGravityCenter( double& theX, double& theY, double& theZ )
+{
+ Handle(Visual3d_View) aView = myViewPort->getView()->View();
+
+ Standard_Real Xmin,Ymin,Zmin,Xmax,Ymax,Zmax,U,V,W ;
+ Standard_Real Umin,Vmin,Umax,Vmax ;
+ Standard_Integer Nstruct,Npoint ;
+ Graphic3d_MapOfStructure MySetOfStructures;
+
+ aView->DisplayedStructures (MySetOfStructures);
+ Nstruct = MySetOfStructures.Extent() ;
+
+ Graphic3d_MapIteratorOfMapOfStructure MyIterator(MySetOfStructures) ;
+ aView->ViewMapping().WindowLimit(Umin,Vmin,Umax,Vmax) ;
+ Npoint = 0 ; theX = theY = theZ = 0. ;
+ for( ; MyIterator.More(); MyIterator.Next()) {
+ if (!(MyIterator.Key())->IsEmpty()) {
+ (MyIterator.Key())->MinMaxValues(Xmin,Ymin,Zmin,
+ Xmax,Ymax,Zmax) ;
+
+ Standard_Real LIM = ShortRealLast() -1.;
+ if (! (fabs(Xmin) > LIM || fabs(Ymin) > LIM || fabs(Zmin) > LIM
+ || fabs(Xmax) > LIM || fabs(Ymax) > LIM || fabs(Zmax) > LIM )) {
+
+ aView->Projects(Xmin,Ymin,Zmin,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmin ; theY += Ymin ; theZ += Zmin ;
+ }
+ aView->Projects(Xmax,Ymin,Zmin,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmax ; theY += Ymin ; theZ += Zmin ;
+ }
+ aView->Projects(Xmin,Ymax,Zmin,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmin ; theY += Ymax ; theZ += Zmin ;
+ }
+ aView->Projects(Xmax,Ymax,Zmin,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmax ; theY += Ymax ; theZ += Zmin ;
+ }
+ aView->Projects(Xmin,Ymin,Zmax,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmin ; theY += Ymin ; theZ += Zmax ;
+ }
+ aView->Projects(Xmax,Ymin,Zmax,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmax ; theY += Ymin ; theZ += Zmax ;
+ }
+ aView->Projects(Xmin,Ymax,Zmax,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmin ; theY += Ymax ; theZ += Zmax ;
+ }
+ aView->Projects(Xmax,Ymax,Zmax,U,V,W) ;
+ if( U >= Umin && U <= Umax && V >= Vmin && V <= Vmax ) {
+ Npoint++ ; theX += Xmax ; theY += Ymax ; theZ += Zmax ;
+ }
+ }
+ }
+ }
+ if( Npoint > 0 ) {
+ theX /= Npoint ; theY /= Npoint ; theZ /= Npoint ;
+ }
+ return true;
+}
+
+/*!
+ Set the gravity center as a rotation point
+*/
+void OCCViewer_ViewWindow::activateSetRotationGravity()
+{
+ if ( myRotationPointSelection )
+ {
+ Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
+ ic->CloseAllContexts();
+ myOperation = NOTHING;
+ setCursor( myCursor );
+ myCursorIsHand = false;
+ myRotationPointSelection = false;
+ }
+
+ myPrevPointType = myCurrPointType;
+ myCurrPointType = GRAVITY;
+
+ Standard_Real Xcenter, Ycenter, Zcenter;
+ if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) )
+ mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter );
+}
+
+/*!
+ Update gravity center in the SetRotationPointDlg
+*/
+void OCCViewer_ViewWindow::updateGravityCoords()
+{
+ if ( mySetRotationPointDlg && mySetRotationPointDlg->isShown() && myCurrPointType == GRAVITY )
+ {
+ Standard_Real Xcenter, Ycenter, Zcenter;
+ if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) )
+ mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter );
+ }
+}
+
+/*!
+ Set the point selected by user as a rotation point
+*/
+void OCCViewer_ViewWindow::activateSetRotationSelected(double theX, double theY, double theZ)
+{
+ if ( myRotationPointSelection )
+ {
+ Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
+ ic->CloseAllContexts();
+ myOperation = NOTHING;
+ setCursor( myCursor );
+ myCursorIsHand = false;
+ myRotationPointSelection = false;
+ }
+
+ myPrevPointType = myCurrPointType;
+ myCurrPointType = SELECTED;
+ mySelectedPoint.SetCoord(theX,theY,theZ);
+}
+
+/*!
+ Start the point selection process
+*/
+void OCCViewer_ViewWindow::activateStartPointSelection()
+{
+ myPrevPointType = myCurrPointType;
+ myCurrPointType = SELECTED;
+
+ // activate selection ------>
+ Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
+
+ ic->OpenLocalContext();
+
+ AIS_ListOfInteractive aList;
+ ic->DisplayedObjects( aList );
+ for ( AIS_ListIteratorOfListOfInteractive it( aList ); it.More(); it.Next() )
+ {
+ Handle(AIS_InteractiveObject) anObj = it.Value();
+ if ( !anObj.IsNull() && anObj->HasPresentation() &&
+ anObj->IsKind( STANDARD_TYPE(AIS_Shape) ) )
+ {
+ ic->Load(anObj,-1);
+ ic->Activate(anObj,AIS_Shape::SelectionMode(TopAbs_VERTEX));
+ }
+ }
+ // activate selection <------
+
+ if ( !myCursorIsHand )
+ {
+ QCursor handCursor (Qt::PointingHandCursor);
+ myCursorIsHand = true;
+ myCursor = cursor();
+ setCursor( handCursor );
+ }
+ myRotationPointSelection = true;
+}
+
/*!
Starts global panning operation, sets corresponding cursor
*/
void OCCViewer_ViewWindow::setTransformRequested ( OperationType op )
{
myOperation = op;
- myViewPort->setMouseTracking( myOperation == NOTHING );
+ myViewPort->setMouseTracking( myOperation == NOTHING );
}
myCurrY = theEvent->y();
switch (myOperation) {
case ROTATE:
- myViewPort->rotate(myCurrX, myCurrY);
+ myViewPort->rotate(myCurrX, myCurrY, myCurrPointType, mySelectedPoint);
break;
case ZOOMVIEW:
break;
default:
- int aState = theEvent->state();
- //int aButton = theEvent->button();
- if ( aState == Qt::LeftButton ||
- aState == ( Qt::LeftButton | Qt::ShiftButton) ) {
- myDrawRect = myEnableDrawMode;
- if ( myDrawRect ) {
- drawRect();
- if ( !myCursorIsHand ) { // we are going to sketch a rectangle
- QCursor handCursor (Qt::PointingHandCursor);
- myCursorIsHand = true;
- myCursor = cursor();
- setCursor( handCursor );
+ if ( myRotationPointSelection )
+ emit mouseMoving( this, theEvent );
+ else
+ {
+ int aState = theEvent->state();
+ if ( aState == Qt::LeftButton ||
+ aState == ( Qt::LeftButton | Qt::ShiftButton) ) {
+ myDrawRect = myEnableDrawMode;
+ if ( myDrawRect ) {
+ drawRect();
+ if ( !myCursorIsHand ) { // we are going to sketch a rectangle
+ QCursor handCursor (Qt::PointingHandCursor);
+ myCursorIsHand = true;
+ myCursor = cursor();
+ setCursor( handCursor );
+ }
+ }
+ }
+ else if ( aState == Qt::RightButton ||
+ aState == ( Qt::RightButton | Qt::ShiftButton ) ) {
+ OCCViewer_ViewSketcher* sketcher = 0;
+ for ( OCCViewer_ViewSketcher* sk = mySketchers.first();
+ sk && !sketcher; sk = mySketchers.next() )
+ {
+ if( sk->isDefault() && sk->sketchButton() & ( aState & Qt::MouseButtonMask ) )
+ sketcher = sk;
+ }
+ if ( sketcher && myCurSketch == -1 )
+ {
+ activateSketching( sketcher->type() );
+ if ( mypSketcher )
+ {
+ myCurSketch = mypSketcher->sketchButton();
+
+ if ( l_mbPressEvent )
+ {
+ QApplication::sendEvent( getViewPort(), l_mbPressEvent );
+ delete l_mbPressEvent;
+ l_mbPressEvent = 0;
+ }
+ QApplication::sendEvent( getViewPort(), theEvent );
+ }
}
}
- }
- else {
- emit mouseMoving( this, theEvent );
- }
+ else {
+ emit mouseMoving( this, theEvent );
+ }
+ }
}
}
switch ( myOperation ) {
case NOTHING:
{
+ int prevState = myCurSketch;
+ if(theEvent->state() == RightButton)
+ {
+ for ( OCCViewer_ViewSketcher* sk = mySketchers.first();
+ sk && myCurSketch != -1; sk = mySketchers.next() )
+ {
+ if( ( sk->sketchButton() & theEvent->state() ) && sk->sketchButton() == myCurSketch )
+ myCurSketch = -1;
+ }
+ }
+
emit mouseReleased(this, theEvent);
- if(theEvent->button() == RightButton)
+ if(theEvent->button() == RightButton && prevState == -1)
{
- QContextMenuEvent aEvent( QContextMenuEvent::Mouse,
- theEvent->pos(), theEvent->globalPos(),
- theEvent->state() );
- emit contextMenuRequested( &aEvent );
+ QContextMenuEvent aEvent( QContextMenuEvent::Mouse,
+ theEvent->pos(), theEvent->globalPos(),
+ theEvent->state() );
+ emit contextMenuRequested( &aEvent );
}
}
break;
resetState();
myViewPort->update();
}
+
+ if ( l_mbPressEvent )
+ {
+ delete l_mbPressEvent;
+ l_mbPressEvent = 0;
+ }
}
/*!
myRect.setLeft(2);
myRect.setRight(0);
- if ( transformRequested() || myCursorIsHand )
- setCursor( myCursor );
- myCursorIsHand = false;
+ if ( myRotationPointSelection )
+ {
+ QCursor handCursor (Qt::PointingHandCursor);
+ setCursor( handCursor );
+ }
+ else
+ {
+ if ( transformRequested() || myCursorIsHand )
+ setCursor( myCursor );
+ myCursorIsHand = false;
+ }
if ( transformRequested() )
emit vpTransformationFinished (myOperation);
tr( "MNU_GLOBALPAN_VIEW" ), 0, this);
aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW"));
connect(aAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning()));
- myActionsMap[ GlobalPanId ] = aAction;
+ myActionsMap[ GlobalPanId ] = aAction;
+
+ // Rotation Point
+ mySetRotationPointAction = new QtxAction(tr("MNU_CHANGINGROTATIONPOINT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_ROTATION_POINT" ) ),
+ tr( "MNU_CHANGINGROTATIONPOINT_VIEW" ), 0, this);
+ mySetRotationPointAction->setStatusTip(tr("DSC_CHANGINGROTATIONPOINT_VIEW"));
+ mySetRotationPointAction->setToggleAction( true );
+ connect(mySetRotationPointAction, SIGNAL(toggled( bool )), this, SLOT(onSetRotationPoint( bool )));
+ myActionsMap[ ChangeRotationPointId ] = mySetRotationPointAction;
// Rotation
aAction = new QtxAction(tr("MNU_ROTATE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_VIEW_ROTATE" ) ),
myClippingAction->setStatusTip(tr("DSC_CLIPPING"));
myClippingAction->setToggleAction( true );
connect(myClippingAction, SIGNAL(toggled( bool )), this, SLOT(onClipping( bool )));
- myActionsMap[ ClippingId ] = myClippingAction;
+ myActionsMap[ ClippingId ] = myClippingAction;
aAction = new QtxAction(tr("MNU_SHOOT_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_SHOOT_VIEW" ) ),
tr( "MNU_SHOOT_VIEW" ), 0, this);
aPanningBtn->AddAction(myActionsMap[PanId]);
aPanningBtn->AddAction(myActionsMap[GlobalPanId]);
+ myActionsMap[ChangeRotationPointId]->addTo(myToolBar);
+
myActionsMap[RotationId]->addTo(myToolBar);
SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar, "projection");
myViewPort->fitAll();
}
+/*!
+ SLOT: called if change rotation point operation is activated
+*/
+void OCCViewer_ViewWindow::onSetRotationPoint( bool on )
+{
+ if ( on )
+ {
+ if ( !mySetRotationPointDlg )
+ {
+ mySetRotationPointDlg = new OCCViewer_SetRotationPointDlg( this, myDesktop );
+ mySetRotationPointDlg->SetAction( mySetRotationPointAction );
+ }
+
+ if ( !mySetRotationPointDlg->isShown() )
+ {
+ if ( mySetRotationPointDlg->IsFirstShown() )
+ {
+ Standard_Real Xcenter, Ycenter, Zcenter;
+ if ( computeGravityCenter( Xcenter, Ycenter, Zcenter ) )
+ mySetRotationPointDlg->setCoords( Xcenter, Ycenter, Zcenter );
+ }
+ mySetRotationPointDlg->show();
+ }
+ }
+ else
+ {
+ if ( mySetRotationPointDlg->isShown() )
+ mySetRotationPointDlg->hide();
+ }
+}
+
/*!
Creates one more window with same content
*/
performRestoring( params );
}
}
+
+/*!
+ Custom show event handler
+*/
+void OCCViewer_ViewWindow::showEvent( QShowEvent * theEvent )
+{
+ emit Show( theEvent );
+}
+
+/*!
+ Custom hide event handler
+*/
+void OCCViewer_ViewWindow::hideEvent( QHideEvent * theEvent )
+{
+ emit Hide( theEvent );
+}
+
+
+/*!
+ Creates default sketcher. [ virtual protected ]
+*/
+OCCViewer_ViewSketcher* OCCViewer_ViewWindow::createSketcher( int type )
+{
+ if ( type == Rect )
+ return new OCCViewer_RectSketcher( this, type );
+ if ( type == Polygon )
+ return new OCCViewer_PolygonSketcher( this, type );
+ return 0;
+}
+
+void OCCViewer_ViewWindow::initSketchers()
+{
+ if ( mySketchers.isEmpty() )
+ {
+ mySketchers.append( createSketcher( Rect ) );
+ mySketchers.append( createSketcher( Polygon ) );
+ }
+}
+
+OCCViewer_ViewSketcher* OCCViewer_ViewWindow::getSketcher( const int typ )
+{
+ OCCViewer_ViewSketcher* sketcher = 0;
+ for ( OCCViewer_ViewSketcher* sk = mySketchers.first();
+ sk && !sketcher; sk = mySketchers.next() )
+ {
+ if ( sk->type() == typ )
+ sketcher = sk;
+ }
+ return sketcher;
+}
+
+/*!
+ Handles requests for sketching in the active view. [ virtual public ]
+*/
+void OCCViewer_ViewWindow::activateSketching( int type )
+{
+ OCCViewer_ViewPort3d* vp = getViewPort();
+ if ( !vp )
+ return;
+
+ if ( !vp->isSketchingEnabled() )
+ return;
+
+ /* Finish current sketching */
+ if ( type == NoSketching )
+ {
+ if ( mypSketcher )
+ {
+ onSketchingFinished();
+ mypSketcher->deactivate();
+ mypSketcher = 0;
+ }
+ }
+ /* Activate new sketching */
+ else
+ {
+ activateSketching( NoSketching ); /* concurrency not suported */
+ mypSketcher = getSketcher( type );
+ if ( mypSketcher )
+ {
+ mypSketcher->activate();
+ onSketchingStarted();
+ }
+ }
+}
+
+/*!
+ Unhilights detected entities. [ virtual protected ]
+*/
+void OCCViewer_ViewWindow::onSketchingStarted()
+{
+}
+
+/*!
+ Selection by rectangle or polygon. [ virtual protected ]
+*/
+void OCCViewer_ViewWindow::onSketchingFinished()
+{
+ if ( mypSketcher && mypSketcher->result() == OCCViewer_ViewSketcher::Accept )
+ {
+ Handle(AIS_InteractiveContext) ic = myModel->getAISContext();
+ bool append = bool( mypSketcher->buttonState() & Qt::ShiftButton );
+ switch( mypSketcher->type() )
+ {
+ case Rect:
+ {
+ QRect* aRect = (QRect*)mypSketcher->data();
+ if( aRect )
+ {
+ int aLeft = aRect->left();
+ int aRight = aRect->right();
+ int aTop = aRect->top();
+ int aBottom = aRect->bottom();
+
+ if( append )
+ ic->ShiftSelect( aLeft, aBottom, aRight, aTop, getViewPort()->getView(), Standard_False );
+ else
+ ic->Select( aLeft, aBottom, aRight, aTop, getViewPort()->getView(), Standard_False );
+ }
+ }
+ break;
+ case Polygon:
+ {
+ QPointArray* aPolygon = (QPointArray*)mypSketcher->data();
+ if( aPolygon )
+ {
+ int size = aPolygon->size();
+ TColgp_Array1OfPnt2d anArray( 1, size );
+
+ QPointArray::Iterator it = aPolygon->begin();
+ QPointArray::Iterator itEnd = aPolygon->end();
+ for( int index = 1; it != itEnd; ++it, index++ )
+ {
+ QPoint aPoint = *it;
+ anArray.SetValue( index, gp_Pnt2d( aPoint.x(), aPoint.y() ) );
+ }
+
+ if( append )
+ ic->ShiftSelect( anArray, getViewPort()->getView(), Standard_False );
+ else
+ ic->Select( anArray, getViewPort()->getView(), Standard_False );
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ OCCViewer_ViewManager* aViewMgr = ( OCCViewer_ViewManager* )getViewManager();
+ aViewMgr->getOCCViewer()->performSelectionChanged();
+ }
+}
#define OCCVIEWER_VIEWWINDOW_H
#include "OCCViewer_ViewModel.h"
+#include "OCCViewer_ViewSketcher.h"
#include "SUIT_ViewWindow.h"
class OCCViewer_ViewPort3d;
class OCCViewer_ClippingDlg;
+class OCCViewer_SetRotationPointDlg;
#ifdef WIN32
#pragma warning( disable:4251 )
Q_OBJECT
public:
- enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW,
+ enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE,
+ PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW,
FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW };
+ enum RotationPointType{ GRAVITY, SELECTED };
+
+ enum SketchingType { NoSketching, Rect, Polygon };
+
OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel);
virtual ~OCCViewer_ViewWindow() {};
virtual QString getVisualParameters();
virtual void setVisualParameters( const QString& parameters );
+
+ virtual void initSketchers();
+ OCCViewer_ViewSketcher* getSketcher( const int );
+
+ void activateSketching( int );
public slots:
void onFrontView();
void activateRotation();
void activatePanning();
void activateGlobalPanning();
+ void onSetRotationPoint( bool on );
void onCloneView();
void onClipping( bool on );
void onMemorizeView();
void onRestoreView();
void onTrihedronShow();
void setRestoreFlag();
-
+
+ void activateSetRotationGravity();
+ void activateSetRotationSelected( double theX, double theY, double theZ );
+ void activateStartPointSelection();
+ void updateGravityCoords();
+
+ virtual void showEvent( QShowEvent * );
+ virtual void hideEvent( QHideEvent * );
+
signals:
void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
void cloneView();
+ void Show( QShowEvent * );
+ void Hide( QHideEvent * );
+
protected:
- enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, RotationId,
+ enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId,
+ ChangeRotationPointId, RotationId,
FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId, CloneId, ClippingId, MemId, RestoreId,
TrihedronShowId };
viewAspect getViewParams() const;
+ bool computeGravityCenter( double& theX, double& theY, double& theZ );
+
+ virtual void onSketchingStarted();
+ virtual void onSketchingFinished();
+
+ virtual OCCViewer_ViewSketcher* createSketcher( int );
+
+ OCCViewer_ViewSketcher* mypSketcher;
+ QList<OCCViewer_ViewSketcher> mySketchers;
+
+ int myCurSketch;
+
OperationType myOperation;
OCCViewer_Viewer* myModel;
OCCViewer_ViewPort3d* myViewPort;
+ RotationPointType myCurrPointType;
+ RotationPointType myPrevPointType;
+ gp_Pnt mySelectedPoint;
+ bool myRotationPointSelection;
+
int myRestoreFlag;
int myStartX;
private:
OCCViewer_ClippingDlg* myClippingDlg;
QtxAction* myClippingAction;
+
+ OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
+ QtxAction* mySetRotationPointAction;
};
msgid "ICON_OCCVIEWER_VIEW_RIGHT"
msgstr "view_right.png"
+msgid "ICON_OCCVIEWER_VIEW_ROTATION_POINT"
+msgstr "view_rotation_point.png"
+
msgid "ICON_OCCVIEWER_VIEW_ROTATE"
msgstr "view_rotate.png"
msgid "MNU_GLOBALPAN_VIEW"
msgstr "Global Panning"
+msgid "DSC_CHANGINGROTATIONPOINT_VIEW"
+msgstr "Change the point, around which the rotation is performed"
+
msgid "DSC_ROTATE_VIEW"
msgstr "Rotation of the point of view around the scene center"
+msgid "OCCViewer_SetRotationPointDlg::CAPTION"
+msgstr "Set Rotation Point"
+
+msgid "OCCViewer_SetRotationPointDlg::USE_BBCENTER"
+msgstr "Use Bounding Box Center"
+
+msgid "OCCViewer_SetRotationPointDlg::LBL_TOORIGIN"
+msgstr "Set to Origin"
+
+msgid "OCCViewer_SetRotationPointDlg::LBL_SELECTPOINT"
+msgstr "Select Point from View"
+
+msgid "OCCViewer_SetRotationPointDlg::LBL_X"
+msgstr "X :"
+
+msgid "OCCViewer_SetRotationPointDlg::LBL_Y"
+msgstr "Y :"
+
+msgid "OCCViewer_SetRotationPointDlg::LBL_Z"
+msgstr "Z :"
+
+msgid "MNU_CHANGINGROTATIONPOINT_VIEW"
+msgstr "Change Rotation Point"
+
+msgid "MNU_ROTATIONPOINTGRAVITY_VIEW"
+msgstr "Rotation Point : the gravity center"
+
+msgid "MNU_ROTATIONPOINT000_VIEW"
+msgstr "Rotation Point : (0,0,0)"
+
+msgid "MNU_ROTATIONPOINTSELECTED_VIEW"
+msgstr "Rotation Point : the point selected by the user"
+
msgid "MNU_ROTATE_VIEW"
msgstr "Rotation"
msgstr "Change background..."
msgid "OCCViewer_ViewManager::OCC_VIEW_TITLE"
-msgstr "OCC scene:%1 - viewer:%2"
+msgstr "OCC scene:%M - viewer:%V"
msgid "OCCViewer_CreateRestoreViewDlg::CAPTION"
--- /dev/null
+# 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 : ObjectBrowser
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libObjBrowser.la
+
+salomeinclude_HEADERS=\
+ OB.h \
+ OB_Browser.h \
+ OB_ListItem.h \
+ OB_ListView.h \
+ OB_Filter.h \
+ OB_FindDlg.h \
+ OB_ObjSearch.h
+
+dist_libObjBrowser_la_SOURCES= \
+ OB_Browser.cxx \
+ OB_ListItem.cxx \
+ OB_ListView.cxx \
+ OB_Filter.cxx \
+ OB_FindDlg.cxx \
+ OB_ObjSearch.cxx
+
+MOC_FILES= \
+ OB_Browser_moc.cxx \
+ OB_ListView_moc.cxx \
+ OB_FindDlg_moc.cxx
+nodist_libObjBrowser_la_SOURCES= $(MOC_FILES)
+
+nodist_salomeres_DATA = OB_msg_en.qm
+
+libObjBrowser_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+
+libObjBrowser_la_LDFLAGS=$(QT_MT_LIBS)
+libObjBrowser_la_LIBADD= ../SUIT/libsuit.la ../Qtx/libqtx.la
+++ /dev/null
-# 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 : ObjectBrowser
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= OB.h \
- OB_Browser.h \
- OB_ListItem.h \
- OB_ListView.h \
- OB_Filter.h
-
-# Libraries targets
-LIB = libObjBrowser.la
-
-LIB_SRC= OB_Browser.cxx \
- OB_ListItem.cxx \
- OB_ListView.cxx \
- OB_Filter.cxx
-
-LIB_MOC = OB_Browser.h \
- OB_ListView.h
-
-# .po files to transform in .qm
-PO_FILES = OB_msg_en.po
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-LIBS+= -lsuit
-
-@CONCLUDE@
-
-
#include "OB_Filter.h"
#include "OB_ListItem.h"
#include "OB_ListView.h"
+#include "OB_FindDlg.h"
#include <SUIT_DataObjectIterator.h>
#include <SUIT_TreeSync.h>
ObjPtr nullSrc() const;
ItemPtr nullTrg() const;
ItemPtr createItem( const ObjPtr&, const ItemPtr&, const ItemPtr&, const bool ) const;
- void updateItem( const ItemPtr& ) const;
+ void updateItem( const ObjPtr& , const ItemPtr& ) const;
void deleteItemWithChildren( const ItemPtr& ) const;
void children( const ObjPtr&, QValueList<ObjPtr>& ) const;
void children( const ItemPtr&, QValueList<ItemPtr>& ) const;
Updates item
\param p - item
*/
-void OB_BrowserSync::updateItem( const ItemPtr& p ) const
+void OB_BrowserSync::updateItem( const ObjPtr& o, const ItemPtr& p ) const
{
if ( p && needUpdate( p ) ) {
// printf( "--- needUpdate for %s = true ---\n", p->text( 0 ).latin1() );
myBrowser->updateText( p );
p->update();
}
+ if( o && myBrowser->getUpdater() )
+ {
+ myBrowser->getUpdater()->update( o, p );
+ }
}
/*!
myRoot( 0 ),
myTooltip( 0 ),
+myUpdater( 0 ),
myAutoOpenLevel( 0 ),
myAutoUpdate( false ),
myAutoDelObjs( false ),
myView->installEventFilter( this );
myView->viewport()->installEventFilter( this );
+ myFindDlg = new OB_FindDlg( this );
+ myFindDlg->hide();
+
QVBoxLayout* main = new QVBoxLayout( this );
- main->addWidget( myView );
+ main->addWidget( myView, 1 );
+ main->addWidget( myFindDlg, 0 );
myShowToolTips = true;
myTooltip = new ToolTip( this, myView->viewport() );
{
myItems.clear();
delete myTooltip;
+ setUpdater( 0 );
}
/*!
return;
myAutoOpenLevel = level;
+}
- autoOpenBranches();
+/*!
+ Opens branches from 1 to \alevels. If parameter value negative then autoOpenLevel() value will be used.
+ \sa autoOpenLevel()
+*/
+void OB_Browser::openLevels( const int levels )
+{
+ int level = levels < 0 ? autoOpenLevel() : levels;
+ QListView* lv = listView();
+ if ( !lv || level < 1 )
+ return;
+
+ QListViewItem* item = lv->firstChild();
+ while ( item )
+ {
+ openBranch( item, level );
+ item = item->nextSibling();
+ }
}
/*!
myAutoDelObjs = on;
}
+/*!
+ \return updater of browser
+*/
+OB_Updater* OB_Browser::getUpdater() const
+{
+ return myUpdater;
+}
+
+/*!
+ \sets new updater of browser
+*/
+void OB_Browser::setUpdater( OB_Updater* theUpdate )
+{
+ if( myUpdater )
+ delete myUpdater;
+ myUpdater = theUpdate;
+}
+
/*!
\return root SUIT object of browser
*/
restoreState( selObjs, openObjs, curObj, selKeys, openKeys, curKey );
- if( autoOpen )
+ if ( autoOpen )
autoOpenBranches();
setModified();
restoreState( selObjs, openObjs, curObj, selKeys, openKeys, curKey );
- autoOpenBranches();
-
setModified();
if ( selNum != numberOfSelected() )
*/
void OB_Browser::autoOpenBranches()
{
- int level = autoOpenLevel();
- QListView* lv = listView();
- if ( !lv || level < 1 )
- return;
-
- QListViewItem* item = lv->firstChild();
- while ( item )
- {
- openBranch( item, level );
- item = item->nextSibling();
- }
+ openLevels();
}
/*!
myModifiedTime = clock();
}
+OB_ObjSearch* OB_Browser::getSearch() const
+{
+ return myFindDlg->getSearch();
+}
+
+void OB_Browser::setSearch( OB_ObjSearch* s )
+{
+ myFindDlg->setSearch( s );
+}
+
+void OB_Browser::enableSearch( const bool on )
+{
+ myFindDlg->setShown( on );
+}
class OB_Filter;
class OB_ListView;
class OB_ListItem;
+class OB_ObjSearch;
+class OB_FindDlg;
+
+class OB_Updater
+{
+public:
+ OB_Updater(){};
+ virtual ~OB_Updater(){};
+ virtual void update( SUIT_DataObject* theObj, OB_ListItem* theLI ) = 0;
+};
/*!
\class OB_Browser
bool isAutoDeleteObjects() const;
virtual void setAutoDeleteObjects( const bool );
- virtual void updateTree( SUIT_DataObject* = 0, const bool autoOpen = true );
+ virtual void updateTree( SUIT_DataObject* = 0, const bool = false );
virtual void replaceTree( SUIT_DataObject*, SUIT_DataObject* );
bool isShowToolTips();
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 );
void setModified();
unsigned long getModifiedTime() { return myModifiedTime; }
+
+ OB_Updater* getUpdater() const;
+ virtual void setUpdater( OB_Updater* theUpdate = 0 );
+
+ OB_ObjSearch* getSearch() const;
+ void setSearch( OB_ObjSearch* );
+ void enableSearch( const bool );
signals:
void selectionChanged();
SUIT_DataObject* myRoot;
ItemMap myItems;
QToolTip* myTooltip;
+ OB_Updater* myUpdater;
QMap<int, int> myColumnIds;
bool myAutoUpdate;
bool myAutoDelObjs;
bool myShowToolTips;
bool myRootDecorated;
int myAutoOpenLevel;
+ OB_FindDlg *myFindDlg;
friend class OB_Browser::ToolTip;
--- /dev/null
+
+#include <OB_FindDlg.h>
+#include <OB_ObjSearch.h>
+#include <OB_Browser.h>
+#include <OB_ListItem.h>
+
+#include <SUIT_DataObject.h>
+#include <SUIT_MessageBox.h>
+
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+
+OB_FindDlg::OB_FindDlg( QWidget* parent )
+: QGroupBox( 1, Qt::Horizontal, tr( "FIND" ), parent ),
+ mySearch( 0 )
+{
+ QFrame *btns = new QFrame( this ), *checks = new QFrame( this );
+
+ myData = new QLineEdit( btns );
+ myToFirst = new QPushButton( "|<<", btns );
+ myToLast = new QPushButton( ">>|", btns );
+ myNext = new QPushButton( ">>", btns );
+ myPrev = new QPushButton( "<<", btns );
+ myClose = new QPushButton( tr( "CLOSE" ), checks );
+ myIsCaseSens = new QCheckBox( tr( "CASE_SENSITIVE" ), checks );
+ myIsRegExp = new QCheckBox( tr( "IS_REG_EXP" ), checks );
+ int w = 30, h = myToFirst->height();
+ myToFirst->setMaximumSize( w, h );
+ myToLast->setMaximumSize( w, h );
+ myNext->setMaximumSize( w, h );
+ myPrev->setMaximumSize( w, h );
+
+ QHBoxLayout* l = new QHBoxLayout( btns, 5, 5 );
+ l->addWidget( myToFirst, 0 );
+ l->addWidget( myPrev, 0 );
+ l->addWidget( myData, 1 );
+ l->addWidget( myNext, 0 );
+ l->addWidget( myToLast, 0 );
+
+ QHBoxLayout* c = new QHBoxLayout( checks, 5, 5 );
+ c->addWidget( myIsCaseSens, 0 );
+ c->addWidget( myIsRegExp, 0 );
+ c->addWidget( myClose, 0 );
+
+ connect( myToFirst, SIGNAL( clicked() ), this, SLOT( onFind() ) );
+ connect( myToLast, SIGNAL( clicked() ), this, SLOT( onFind() ) );
+ connect( myNext, SIGNAL( clicked() ), this, SLOT( onFind() ) );
+ connect( myPrev, SIGNAL( clicked() ), this, SLOT( onFind() ) );
+ connect( myClose, SIGNAL( clicked() ), this, SLOT( onClose() ) );
+}
+
+OB_FindDlg::~OB_FindDlg()
+{
+}
+
+void OB_FindDlg::onClose()
+{
+ hide();
+}
+
+void OB_FindDlg::onFind()
+{
+ OB_ListItem* it = 0;
+ mySearch->setPattern( myData->text(), myIsRegExp->isChecked(), myIsCaseSens->isChecked() );
+ if( sender()==myToFirst )
+ it = mySearch->findFirst();
+ else if( sender()==myNext )
+ it = mySearch->findNext();
+ else if( sender()==myPrev )
+ it = mySearch->findPrev();
+ else if( sender()==myToLast )
+ it = mySearch->findLast();
+ if( it )
+ {
+ mySearch->browser()->setSelected( it->dataObject(), false );
+ mySearch->browser()->listView()->ensureItemVisible( it );
+ }
+ else
+ SUIT_MessageBox::info1( this, tr( "FIND" ), tr( "NOT_FOUND" ), tr( "OK" ) );
+}
+
+OB_ObjSearch* OB_FindDlg::getSearch() const
+{
+ return mySearch;
+}
+
+void OB_FindDlg::setSearch( OB_ObjSearch* s )
+{
+ mySearch = s;
+}
--- /dev/null
+
+#ifndef OBJECT_BROWSER_FIND_DIALOG_HEADER
+#define OBJECT_BROWSER_FIND_DIALOG_HEADER
+
+#include <qgroupbox.h>
+
+class OB_ObjSearch;
+class QLineEdit;
+class QPushButton;
+class QCheckBox;
+
+class OB_FindDlg : public QGroupBox
+{
+ Q_OBJECT
+
+public:
+ OB_FindDlg( QWidget* = 0 );
+ virtual ~OB_FindDlg();
+
+ OB_ObjSearch* getSearch() const;
+ void setSearch( OB_ObjSearch* );
+
+private slots:
+ void onFind();
+ void onClose();
+
+private:
+ QLineEdit* myData;
+ QPushButton *myToFirst, *myToLast, *myNext, *myPrev, *myClose;
+ QCheckBox *myIsCaseSens, *myIsRegExp;
+ OB_ObjSearch* mySearch;
+};
+
+#endif
#include <iostream>
using namespace std;
+#ifdef WNT
+#define min(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+
/*!
Constructor
*/
else
myT->setPixmap( 0, p );
}
+ else if ( p.isNull() )
+ myT->setPixmap( 0, p );
myT->setDragEnabled( obj->isDragable() );
myT->setDropEnabled( true );
void OB_ListView::setColumnWidth( int col, int width )
{
int max = columnMaxWidth( col );
- if( max>0 && width>max )
+ if ( max>0 && width>max )
width = max;
- QListView::setColumnWidth( col, width );
+
+ QtxListView::setColumnWidth( col, width );
}
/*!
--- /dev/null
+
+#include <OB_ObjSearch.h>
+#include <OB_ListItem.h>
+#include <OB_Browser.h>
+
+#include <qregexp.h>
+
+OB_ObjSearch::OB_ObjSearch( OB_Browser* b )
+: myBrowser( b )
+{
+}
+
+OB_ObjSearch::~OB_ObjSearch()
+{
+}
+
+OB_ListItem* OB_ObjSearch::tail( const bool first ) const
+{
+ QListView* lv = myBrowser->listView();
+ return dynamic_cast<OB_ListItem*>( first ? lv->firstChild() : lv->lastItem() );
+}
+
+OB_ListItem* OB_ObjSearch::next( OB_ListItem* i, const bool forward ) const
+{
+ QListViewItemIterator it( i );
+ if( forward )
+ it++;
+ else
+ it--;
+ return dynamic_cast<OB_ListItem*>( *it );
+}
+
+SUIT_DataObject* OB_ObjSearch::data( OB_ListItem* i ) const
+{
+ return i ? i->dataObject() : 0;
+}
+
+void OB_ObjSearch::setPattern( const QString& data, const bool is_reg_exp, const bool is_case_sens )
+{
+ myData = data;
+ myIsRegExp = is_reg_exp;
+ myIsCaseSens = is_case_sens;
+}
+
+bool OB_ObjSearch::matches( SUIT_DataObject* obj ) const
+{
+ if( !obj )
+ return false;
+
+ QString txt = obj->name();
+ if( myIsRegExp )
+ {
+ QRegExp re( myData );
+ re.setCaseSensitive( myIsCaseSens );
+ return txt.contains( re );
+ }
+ else
+ return txt.contains( myData, myIsCaseSens );
+}
+
+OB_Browser* OB_ObjSearch::browser() const
+{
+ return myBrowser;
+}
+
+OB_ListItem* OB_ObjSearch::findFirst() const
+{
+ return find( tail( true ), true, false, false );
+}
+
+OB_ListItem* OB_ObjSearch::findLast() const
+{
+ return find( tail( false ), false, false, false );
+}
+
+OB_ListItem* OB_ObjSearch::findNext() const
+{
+ return find( current(), true, true, true );
+}
+
+OB_ListItem* OB_ObjSearch::findPrev() const
+{
+ return find( current(), false, true, true );
+}
+
+OB_ListItem* OB_ObjSearch::find( OB_ListItem* i, const bool forward,
+ const bool ignore_first, const bool cyclic ) const
+{
+ if( !i )
+ i = tail( forward );
+
+ if( ignore_first )
+ i = next( i, forward );
+
+ while( i && !matches( data( i ) ) )
+ i = next( i, forward );
+
+ if( !i && cyclic )
+ return find( tail( forward ), forward, false, false );
+
+ return i;
+}
+
+OB_ListItem* OB_ObjSearch::current() const
+{
+ return dynamic_cast<OB_ListItem*>( myBrowser->listView()->currentItem() );
+}
--- /dev/null
+
+#ifndef OBJECT_BROWSER_OBJECT_SEARCH_HEADER
+#define OBJECT_BROWSER_OBJECT_SEARCH_HEADER
+
+#include <qstring.h>
+
+class OB_ListItem;
+class OB_Browser;
+class SUIT_DataObject;
+
+class OB_ObjSearch
+{
+public:
+ OB_ObjSearch( OB_Browser* );
+ virtual ~OB_ObjSearch();
+
+ void setPattern( const QString&, const bool, const bool );
+ OB_Browser* browser() const;
+
+ OB_ListItem* findFirst() const;
+ OB_ListItem* findLast() const;
+ OB_ListItem* findNext() const;
+ OB_ListItem* findPrev() const;
+
+protected:
+ virtual OB_ListItem* current() const;
+ virtual OB_ListItem* tail( const bool ) const;
+ virtual OB_ListItem* next( OB_ListItem*, const bool ) const;
+ virtual SUIT_DataObject* data( OB_ListItem* ) const;
+ virtual bool matches( SUIT_DataObject* ) const;
+ OB_ListItem* find( OB_ListItem*, const bool, const bool, const bool ) const;
+
+private:
+ OB_Browser* myBrowser;
+ QString myData;
+ bool myIsRegExp, myIsCaseSens;
+};
+
+#endif
msgid "MEN_EXPAND_ALL"
msgstr "Expand All"
+msgid "OB_FindDlg::FIND"
+msgstr "Find"
+
+msgid "OB_FindDlg::CLOSE"
+msgstr "Close"
+
+msgid "OB_FindDlg::CASE_SENSITIVE"
+msgstr "Case sensitive"
+
+msgid "OB_FindDlg::IS_REG_EXP"
+msgstr "Regular expression"
+
+msgid "OB_FindDlg::NOT_FOUND"
+msgstr "There is no object is found"
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : Plot2d
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES= libPlot2d.la
+
+# header files
+salomeinclude_HEADERS= \
+ Plot2d.h \
+ Plot2d_Curve.h \
+ Plot2d_FitDataDlg.h \
+ Plot2d_Prs.h \
+ Plot2d_SetupViewDlg.h \
+ Plot2d_ViewFrame.h \
+ Plot2d_ViewManager.h \
+ Plot2d_ViewModel.h \
+ Plot2d_ViewWindow.h \
+ Plot2d_SetupCurveDlg.h \
+ Plot2d_ToolTip.h
+
+dist_libPlot2d_la_SOURCES= \
+ Plot2d_Curve.cxx \
+ Plot2d_FitDataDlg.cxx \
+ Plot2d_Prs.cxx \
+ Plot2d_SetupViewDlg.cxx \
+ Plot2d_ViewFrame.cxx \
+ Plot2d_ViewManager.cxx \
+ Plot2d_ViewModel.cxx \
+ Plot2d_ViewWindow.cxx \
+ Plot2d_SetupCurveDlg.cxx \
+ Plot2d_ToolTip.cxx
+
+MOC_FILES = \
+ Plot2d_FitDataDlg_moc.cxx \
+ Plot2d_SetupViewDlg_moc.cxx \
+ Plot2d_ViewFrame_moc.cxx \
+ Plot2d_ViewManager_moc.cxx \
+ Plot2d_ViewModel_moc.cxx \
+ Plot2d_ViewWindow_moc.cxx \
+ Plot2d_SetupCurveDlg_moc.cxx \
+ Plot2d_ToolTip_moc.cxx
+nodist_libPlot2d_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA = \
+ resources/plot2d_clone.png \
+ resources/plot2d_camera_dump.png \
+ resources/plot2d_fitall.png \
+ resources/plot2d_fitarea.png \
+ resources/plot2d_glpan.png \
+ resources/plot2d_legend.png \
+ resources/plot2d_linear.png \
+ resources/plot2d_linear_y.png \
+ resources/plot2d_lines.png \
+ resources/plot2d_log.png \
+ resources/plot2d_log_y.png \
+ resources/plot2d_pan.png \
+ resources/plot2d_points.png \
+ resources/plot2d_settings.png \
+ resources/plot2d_splines.png \
+ resources/plot2d_zoom.png
+
+nodist_salomeres_DATA= \
+ Plot2d_images.qm \
+ Plot2d_msg_en.qm
+
+libPlot2d_la_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(QWT_INCLUDES) \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT
+
+libPlot2d_la_LDFLAGS=$(QWT_LIBS) $(QT_MT_LIBS) ../SUIT/libsuit.la
+
+
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : Plot2d
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= Plot2d.h \
- Plot2d_Curve.h \
- Plot2d_FitDataDlg.h \
- Plot2d_Prs.h \
- Plot2d_SetupViewDlg.h \
- Plot2d_ViewFrame.h \
- Plot2d_ViewManager.h \
- Plot2d_ViewModel.h \
- Plot2d_ViewWindow.h \
- Plot2d_SetupCurveDlg.h
-
-# .po files to transform in .qm
-PO_FILES = Plot2d_images.po \
- Plot2d_msg_en.po
-
-# Libraries targets
-LIB = libPlot2d.la
-LIB_SRC= Plot2d_Curve.cxx \
- Plot2d_FitDataDlg.cxx \
- Plot2d_Prs.cxx \
- Plot2d_SetupViewDlg.cxx \
- Plot2d_ViewFrame.cxx \
- Plot2d_ViewManager.cxx \
- Plot2d_ViewModel.cxx \
- Plot2d_ViewWindow.cxx \
- Plot2d_SetupCurveDlg.cxx
-
-LIB_MOC = \
- Plot2d_FitDataDlg.h \
- Plot2d_SetupViewDlg.h \
- Plot2d_ViewFrame.h \
- Plot2d_ViewManager.h \
- Plot2d_ViewModel.h \
- Plot2d_ViewWindow.h \
- Plot2d_SetupCurveDlg.h
-
-RESOURCES_FILES = \
-plot2d_clone.png \
-plot2d_camera_dump.png \
-plot2d_fitall.png \
-plot2d_fitarea.png \
-plot2d_glpan.png \
-plot2d_legend.png \
-plot2d_linear.png \
-plot2d_linear_y.png \
-plot2d_lines.png \
-plot2d_log.png \
-plot2d_log_y.png \
-plot2d_pan.png \
-plot2d_points.png \
-plot2d_settings.png \
-plot2d_splines.png \
-plot2d_zoom.png
-
-CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(QWT_INCLUDES)
-
-LDFLAGS+=$(QWT_LIBS) $(QT_MT_LIBS) -lsuit
-
-@CONCLUDE@
-
-
/*!
Adds one point for curve.
*/
-void Plot2d_Curve::addPoint(double theX, double theY)
+void Plot2d_Curve::addPoint(double theX, double theY, const QString& txt )
{
Plot2d_Point aPoint;
aPoint.x = theX;
aPoint.y = theY;
+ aPoint.text = txt;
myPoints.append(aPoint);
}
/*!
Insert one point for curve on some position.
*/
-void Plot2d_Curve::insertPoint(int thePos, double theX, double theY)
+void Plot2d_Curve::insertPoint(int thePos, double theX, double theY, const QString& txt)
{
Plot2d_Point aPoint;
aPoint.x = theX;
aPoint.y = theY;
+ aPoint.text = txt;
QValueList<Plot2d_Point>::iterator aIt;
int aCurrent = 0;
/*!
Sets curve's data.
*/
-void Plot2d_Curve::setData( const double* hData, const double* vData, long size )
+void Plot2d_Curve::setData( const double* hData, const double* vData, long size, const QStringList& lst )
{
clearAllPoints();
- for(long i = 0; i < size; i++) addPoint(hData[i], vData[i]);
+ QStringList::const_iterator anIt = lst.begin(), aLast = lst.end();
+ for( long i = 0; i < size; i++, anIt++ )
+ addPoint( hData[i], vData[i], anIt==aLast ? QString::null : *anIt );
}
/*!
{
QValueList<Plot2d_Point>::const_iterator aIt;
double aMinX = 1e150;
- int aCurrent = 0;
+ //int aCurrent = 0;
for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) {
if ( (*aIt).x < aMinX )
aMinX = (*aIt).x;
{
QValueList<Plot2d_Point>::const_iterator aIt;
double aMinY = 1e150;
- int aCurrent = 0;
+ //int aCurrent = 0;
for(aIt = myPoints.begin(); aIt != myPoints.end(); ++aIt) {
if ( (*aIt).y < aMinY )
aMinY = (*aIt).y;
}
return aMinY;
}
+
+/*!
+ Changes text assigned to point of curve
+ \param ind -- index of point
+ \param txt -- new text
+*/
+void Plot2d_Curve::setText( const int ind, const QString& txt )
+{
+ if( ind<0 || ind>=myPoints.count() )
+ return;
+
+ myPoints[ind].text = txt;
+}
+
+/*!
+ \return text assigned to point
+ \param ind -- index of point
+*/
+QString Plot2d_Curve::text( const int ind ) const
+{
+ if( ind<0 || ind>=myPoints.count() )
+ return QString::null;
+ else
+ return myPoints[ind].text;
+}
{
double x;
double y;
+ QString text;
} Plot2d_Point;
typedef QValueList<Plot2d_Point> pointList;
QString getHorUnits() const;
void setVerUnits( const QString& units );
QString getVerUnits() const;
- void addPoint(double theX, double theY);
- void insertPoint(int thePos, double theX, double theY);
+ void addPoint(double theX, double theY, const QString& = QString::null );
+ void insertPoint(int thePos, double theX, double theY, const QString& = QString::null );
void deletePoint(int thePos);
void clearAllPoints();
pointList getPointList() const;
- void setData( const double* hData, const double* vData, long size );
+ void setData( const double* hData, const double* vData, long size, const QStringList& = QStringList() );
double* horData() const;
double* verData() const;
+ void setText( const int, const QString& );
+ QString text( const int ) const;
+
int nbPoints() const;
bool isEmpty() const;
#ifndef Plot2d_SetupCurveDlg_H
#define Plot2d_SetupCurveDlg_H
+#include "Plot2d.h"
+
#include <qdialog.h>
/*!
class QSpinBox;
class QToolButton;
-class Plot2d_SetupCurveDlg : public QDialog
+class PLOT2D_EXPORT Plot2d_SetupCurveDlg : public QDialog
{
Q_OBJECT
#include "Plot2d_SetupViewDlg.h"
+#include "SUIT_Session.h"
+#include "SUIT_Application.h"
+
#include <qcheckbox.h>
#include <qlineedit.h>
#include <qcombobox.h>
aTabWidget->setCurrentPage( 0 );
/* "Set as default" check box */
myDefCheck = new QCheckBox( tr( "PLOT2D_SET_AS_DEFAULT_CHECK" ), this );
- /* OK/Cancel buttons */
+
+ /* OK/Cancel/Help buttons */
myOkBtn = new QPushButton( tr( "BUT_OK" ), this );
myOkBtn->setAutoDefault( TRUE );
myOkBtn->setDefault( TRUE );
myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this );
myCancelBtn->setAutoDefault( TRUE );
+ myHelpBtn = new QPushButton( tr( "BUT_HELP" ), this );
+ myHelpBtn->setAutoDefault( TRUE );
QHBoxLayout* btnLayout = new QHBoxLayout;
btnLayout->addWidget( myOkBtn );
btnLayout->addStretch();
btnLayout->addWidget( myCancelBtn );
+ btnLayout->addWidget( myHelpBtn );
// layout widgets
topLayout->addWidget( myTitleCheck, 0, 0 );
connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ connect( myHelpBtn, SIGNAL( clicked() ), this, SLOT( onHelp() ) );
if (mySecondAxisY) {
connect( myTitleY2Check, SIGNAL( clicked() ), this, SLOT( onY2TitleChecked() ) );
{
return myDefCheck->isChecked();
}
+
+/*!
+ Slot, called when user clicks "Help" button
+*/
+void Plot2d_SetupViewDlg::onHelp()
+{
+ SUIT_Application* app = SUIT_Session::session()->activeApplication();
+ if (app)
+ app->onHelpContextModule("GUI", "plot2d_viewer_page.html#settings");
+}
void onXGridMinorChecked();
void onYGridMinorChecked();
void onY2GridMinorChecked();
+ void onHelp();
private:
QCheckBox* myTitleCheck;
QPushButton* myOkBtn;
QPushButton* myCancelBtn;
+ QPushButton* myHelpBtn;
bool mySecondAxisY;
};
--- /dev/null
+// 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 <Plot2d_ToolTip.h>
+#include <Plot2d_ViewFrame.h>
+#include <Plot2d_Curve.h>
+
+#include <qfontmetrics.h>
+
+#include <qwt_plot.h>
+#include <qwt_plot_canvas.h>
+
+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;
+}
--- /dev/null
+// 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 <Plot2d.h>
+#include <QtxToolTip.h>
+
+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
#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 <qmap.h>
#include <qpainter.h>
#include <qpaintdevicemetrics.h>
+#include <qevent.h>
#include <qwt_math.h>
#include <qwt_plot_canvas.h>
#define DEFAULT_MARKER_SIZE 9 // default marker size
#define MIN_RECT_SIZE 11 // min sensibility area size
+#define FITALL_EVENT ( QEvent::User + 9999 )
+
const char* imageZoomCursor[] = {
"32 32 3 1",
". c None",
/* Plot 2d View */
QVBoxLayout* aLayout = new QVBoxLayout( this );
myPlot = new Plot2d_Plot2d( this );
+ new Plot2d_ToolTip( this, myPlot );
+
aLayout->addWidget( myPlot );
// createActions();
*/
void Plot2d_ViewFrame::fitAll()
{
+ // Postpone fitAll operation until QwtPlot geometry
+ // has been fully defined
+ if ( !myPlot->polished() ){
+ QApplication::postEvent( this, new QCustomEvent( FITALL_EVENT ) );
+ return;
+ }
+
QwtDiMap xMap1 = myPlot->canvasMap( QwtPlot::xBottom );
myPlot->setAxisAutoScale( QwtPlot::yLeft );
parent()->eventFilter(this, aEvent);
}
}
+ setFocus();
}
/*!
Slot, called when user moves mouse
if ( myOperation != NoOpId) {
if ( myOperation == ZoomId ) {
- QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom );
- QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft );
-
- myPlot->setAxisScale( QwtPlot::yLeft,
- myPlot->invTransform( QwtPlot::yLeft, yMap.i1() ),
- myPlot->invTransform( QwtPlot::yLeft, yMap.i2() + dy ) );
- myPlot->setAxisScale( QwtPlot::xBottom,
- myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ),
- myPlot->invTransform( QwtPlot::xBottom, xMap.i2() - dx ) );
- if (mySecondY) {
- QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight );
- myPlot->setAxisScale( QwtPlot::yRight,
- myPlot->invTransform( QwtPlot::yRight, y2Map.i1() ),
- myPlot->invTransform( QwtPlot::yRight, y2Map.i2() + dy ) );
- }
- myPlot->replot();
+ this->incrementalZoom( dx, dy );
myPnt = me.pos();
}
else if ( myOperation == PanId ) {
- QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom );
- QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft );
-
- myPlot->setAxisScale( QwtPlot::yLeft,
- myPlot->invTransform( QwtPlot::yLeft, yMap.i1()-dy ),
- myPlot->invTransform( QwtPlot::yLeft, yMap.i2()-dy ) );
- myPlot->setAxisScale( QwtPlot::xBottom,
- myPlot->invTransform( QwtPlot::xBottom, xMap.i1()-dx ),
- myPlot->invTransform( QwtPlot::xBottom, xMap.i2()-dx ) );
- if (mySecondY) {
- QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight );
- myPlot->setAxisScale( QwtPlot::yRight,
- myPlot->invTransform( QwtPlot::yRight, y2Map.i1()-dy ),
- myPlot->invTransform( QwtPlot::yRight, y2Map.i2()-dy ) );
- }
- myPlot->replot();
+ this->incrementalPan( dx, dy );
myPnt = me.pos();
}
}
Constructor
*/
Plot2d_Plot2d::Plot2d_Plot2d( QWidget* parent )
- : QwtPlot( parent )
+ : QwtPlot( parent ),
+ myIsPolished( false )
{
// outline
enableOutline( true );
return false;
}
+/*!
+ Sets the flag saying that QwtPlot geometry has been fully defined.
+*/
+void Plot2d_Plot2d::polish()
+{
+ QwtPlot::polish();
+ myIsPolished = true;
+}
+
+
/*!
Creates presentation of object
Default implementation is empty
fitData( 0, xmin, xmax, ymin, ymax, y2min, y2max );
}
}
+
+/*!
+ Incremental zooming operation
+*/
+void Plot2d_ViewFrame::incrementalPan( const int incrX, const int incrY ) {
+ QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom );
+ QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft );
+
+ myPlot->setAxisScale( QwtPlot::yLeft,
+ myPlot->invTransform( QwtPlot::yLeft, yMap.i1()-incrY ),
+ myPlot->invTransform( QwtPlot::yLeft, yMap.i2()-incrY ) );
+ myPlot->setAxisScale( QwtPlot::xBottom,
+ myPlot->invTransform( QwtPlot::xBottom, xMap.i1()-incrX ),
+ myPlot->invTransform( QwtPlot::xBottom, xMap.i2()-incrX ) );
+ if (mySecondY) {
+ QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight );
+ myPlot->setAxisScale( QwtPlot::yRight,
+ myPlot->invTransform( QwtPlot::yRight, y2Map.i1()-incrY ),
+ myPlot->invTransform( QwtPlot::yRight, y2Map.i2()-incrY ) );
+ }
+ myPlot->replot();
+}
+
+/*!
+ Incremental panning operation
+*/
+void Plot2d_ViewFrame::incrementalZoom( const int incrX, const int incrY ) {
+ QwtDiMap xMap = myPlot->canvasMap( QwtPlot::xBottom );
+ QwtDiMap yMap = myPlot->canvasMap( QwtPlot::yLeft );
+
+ myPlot->setAxisScale( QwtPlot::yLeft,
+ myPlot->invTransform( QwtPlot::yLeft, yMap.i1() ),
+ myPlot->invTransform( QwtPlot::yLeft, yMap.i2() + incrY ) );
+ myPlot->setAxisScale( QwtPlot::xBottom,
+ myPlot->invTransform( QwtPlot::xBottom, xMap.i1() ),
+ myPlot->invTransform( QwtPlot::xBottom, xMap.i2() - incrX ) );
+ if (mySecondY) {
+ QwtDiMap y2Map = myPlot->canvasMap( QwtPlot::yRight );
+ myPlot->setAxisScale( QwtPlot::yRight,
+ myPlot->invTransform( QwtPlot::yRight, y2Map.i1() ),
+ myPlot->invTransform( QwtPlot::yRight, y2Map.i2() + incrY ) );
+ }
+ myPlot->replot();
+}
+
+#define INCREMENT_FOR_OP 10
+
+/*!
+ Performs incremental panning to the left
+*/
+void Plot2d_ViewFrame::onPanLeft()
+{
+ this->incrementalPan( -INCREMENT_FOR_OP, 0 );
+}
+
+/*!
+ Performs incremental panning to the right
+*/
+void Plot2d_ViewFrame::onPanRight()
+{
+ this->incrementalPan( INCREMENT_FOR_OP, 0 );
+}
+
+/*!
+ Performs incremental panning to the top
+*/
+void Plot2d_ViewFrame::onPanUp()
+{
+ this->incrementalPan( 0, -INCREMENT_FOR_OP );
+}
+
+/*!
+ Performs incremental panning to the bottom
+*/
+void Plot2d_ViewFrame::onPanDown()
+{
+ this->incrementalPan( 0, INCREMENT_FOR_OP );
+}
+
+/*!
+ Performs incremental zooming in
+*/
+void Plot2d_ViewFrame::onZoomIn()
+{
+ this->incrementalZoom( INCREMENT_FOR_OP, INCREMENT_FOR_OP );
+}
+
+/*!
+ Performs incremental zooming out
+*/
+void Plot2d_ViewFrame::onZoomOut()
+{
+ this->incrementalZoom( -INCREMENT_FOR_OP, -INCREMENT_FOR_OP );
+}
+
+/*!
+ Schedules a FitAll operation by putting it to the application's
+ event queue. This ensures that other important events (show, resize, etc.)
+ are processed first.
+*/
+void Plot2d_ViewFrame::customEvent( QCustomEvent* ce )
+{
+ if ( ce->type() == FITALL_EVENT )
+ fitAll();
+}
class Plot2d_Plot2d;
class Plot2d_Prs;
+class QCustomEvent;
typedef QIntDict<Plot2d_Curve> CurveDict;
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 onFitData();
void onChangeBackground();
+ void onPanLeft();
+ void onPanRight();
+ void onPanUp();
+ void onPanDown();
+ void onZoomIn();
+ void onZoomOut();
+
+protected:
+ virtual void customEvent( QCustomEvent* );
+
protected slots:
void plotMousePressed( const QMouseEvent& );
void plotMouseMoved( const QMouseEvent& );
class Plot2d_Plot2d : public QwtPlot
{
+ Q_OBJECT
public:
Plot2d_Plot2d( QWidget* parent );
virtual QSizePolicy sizePolicy() const;
virtual QSize minimumSizeHint() const;
+ bool polished() const { return myIsPolished; }
+
+public slots:
+ virtual void polish();
+
protected:
bool existMarker( const QwtSymbol::Style typeMarker, const QColor& color, const Qt::PenStyle typeLine );
protected:
QValueList<QColor> myColors;
+ bool myIsPolished;
};
#endif
#include "Plot2d_ViewModel.h"
#include "Plot2d_ViewWindow.h"
-int Plot2d_ViewManager::myMaxId = 0;
-
/*!
Constructor
*/
Plot2d_ViewManager::Plot2d_ViewManager( SUIT_Study* study, SUIT_Desktop* desk )
-: SUIT_ViewManager( study, desk )
+: SUIT_ViewManager( study, desk, new Plot2d_Viewer() )
{
- myId = ++myMaxId;
- Plot2d_Viewer* v = new Plot2d_Viewer();
- setViewModel( v );
+ setTitle( tr( "PLOT2D_VIEW_TITLE" ) );
}
/*!
return (Plot2d_Viewer*)myViewModel;
}
-/*!
- Sets default name of view
- \param the View - view to be renamed
-*/
-void Plot2d_ViewManager::setViewName( SUIT_ViewWindow* theView )
-{
- int aPos = myViews.find(theView);
- theView->setCaption( QString( "Plot2d scene:%1 - viewer:%2" ).arg(myId).arg(aPos+1));
-}
-
/*!
Adds new view
\param theView - view to be added
Plot2d_Viewer* getPlot2dModel() const;
protected:
- void setViewName(SUIT_ViewWindow* theView);
bool insertView(SUIT_ViewWindow* theView);
public slots:
signals:
void cloneView( Plot2d_ViewFrame*, Plot2d_ViewFrame* );
-
-protected:
- static int myMaxId;
- int myId;
};
#endif
if (thePopup->count() > 0) thePopup->insertSeparator();
thePopup->insertItem("Show toolbar", this, SLOT(onShowToolbar()));
}
+ aView->RefreshDumpImage();
}
}
#include <qlayout.h>
#include <qapplication.h>
#include <qpopupmenu.h>
-#include <qimage.h>
/*!
Constructor
{
myModel = theModel;
+ myDumpImage = QImage();
+
myViewFrame = new Plot2d_ViewFrame(this, "plotView");
setCentralWidget(myViewFrame);
*/
QImage Plot2d_ViewWindow::dumpView()
{
- QPixmap px = QPixmap::grabWindow( myViewFrame->winId() );
- return px.convertToImage();
+ if ( getToolBar()->hasMouse() || myDumpImage.isNull() )
+ {
+ QPixmap px = QPixmap::grabWindow( myViewFrame->winId() );
+ return px.convertToImage();
+ }
+
+ return myDumpImage;
}
/*!
{
myViewFrame->setVisualParameters( parameters );
}
+
+/*!
+ \refresh QImage, containing all scene rendering in window
+*/
+void Plot2d_ViewWindow::RefreshDumpImage()
+{
+ QPixmap px = QPixmap::grabWindow( myViewFrame->winId() );
+ myDumpImage = px.convertToImage();
+}
#include "Plot2d.h"
#include <SUIT_ViewWindow.h>
+#include <qimage.h>
+
#ifdef WIN32
#pragma warning( disable:4251 )
#endif
virtual QString getVisualParameters();
virtual void setVisualParameters( const QString& parameters );
+
+ virtual void RefreshDumpImage();
protected:
virtual QImage dumpView();
QToolBar* myToolBar;
SUIT_ToolButton* myCurveBtn;
+
+ QImage myDumpImage;
};
#ifdef WIN32
msgid "POSTSCRIPT_FILES"
msgstr "PostScript files (*.ps)"
+
+msgid "Plot2d_ViewManager::PLOT2D_VIEW_TITLE"
+msgstr "Plot2d scene:%M - viewer:%V"
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libSalomePrs.la
+
+salomeinclude_HEADERS = SALOME_Prs.h
+
+dist_libSalomePrs_la_SOURCES = SALOME_Prs.cxx
+++ /dev/null
-# 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_Prs.h
-
-# Libraries targets
-
-LIB = libSalomePrs.la
-LIB_SRC = SALOME_Prs.cxx
-
-LIB_CLIENT_IDL =
-
-# Executables targets
-BIN =
-BIN_SRC =
-
-CPPFLAGS+=
-LDFLAGS+=
-
-
-@CONCLUDE@
--- /dev/null
+# SALOME PyInterp : implementation of base thread-safe Python services
+#
+# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+#
+#
+# File : Makefile.in
+# Module : SALOME
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libPyInterp.la
+
+salomeinclude_HEADERS= \
+ PyInterp.h \
+ PyInterp_base.h \
+ PyInterp_Dispatcher.h
+
+dist_libPyInterp_la_SOURCES= \
+ PyInterp_base.cxx \
+ PyInterp_Dispatcher.cxx
+
+MOC_FILES= PyInterp_Watcher_moc.cxx
+nodist_libPyInterp_la_SOURCES= $(MOC_FILES)
+
+libPyInterp_la_CPPFLAGS= $(PYTHON_INCLUDES) $(QT_INCLUDES)
+libPyInterp_la_LDFLAGS= $(PYTHON_LIBS) $(QT_MT_LIBS)
+++ /dev/null
-# SALOME PyInterp : implementation of base thread-safe Python services
-#
-# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#
-#
-# File : Makefile.in
-# Module : SALOME
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= PyInterp.h \
- PyInterp_base.h \
- PyInterp_Dispatcher.h
-
-# Libraries targets
-LIB = libPyInterp.la
-
-LIB_SRC= PyInterp_base.cxx \
- PyInterp_Dispatcher.cxx
-
-LIB_MOC = PyInterp_Watcher.h
-
-CPPFLAGS+= $(PYTHON_INCLUDES) $(QT_INCLUDES)
-
-LDFLAGS+= $(PYTHON_LIBS) $(QT_MT_LIBS)
-
-@CONCLUDE@
#endif // WNT
// ========================================================
-// little trick - we do not have debug python libraries
+// little trick - if we do not have debug python libraries
#ifdef _DEBUG
-
-#undef _DEBUG
-#include <Python.h>
-#define _DEBUG
-
-#else // _DEBUG
+ #ifndef HAVE_DEBUG_PYTHON
+ #undef _DEBUG
+ #endif
+#endif
#include <Python.h>
-#endif // _DEBUG
+#ifdef _DEBUG
+ #ifndef HAVE_DEBUG_PYTHON
+ #define _DEBUG
+ #endif
+#endif
// ========================================================
// avoid warning messages
#include "PyInterp_base.h" // this include must be first (see PyInterp_base.h)!
#include <cStringIO.h>
+#include <structmember.h>
using namespace std;
return _tstate;
}
+static void
+PyStdOut_dealloc(PyStdOut *self)
+{
+ PyObject_Del(self);
+}
+
+static PyObject *
+PyStdOut_write(PyStdOut *self, PyObject *args)
+{
+ char *c;
+ int l;
+ if (!PyArg_ParseTuple(args, "t#:write",&c, &l))
+ return NULL;
+ if(self->_cb==NULL) {
+ if ( self->_iscerr )
+ std::cerr << c ;
+ else
+ std::cout << c ;
+ }
+ else {
+ self->_cb(self->_data,c);
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyMethodDef PyStdOut_methods[] = {
+ {"write", (PyCFunction)PyStdOut_write, METH_VARARGS,
+ PyDoc_STR("write(string) -> None")},
+ {NULL, NULL} /* sentinel */
+};
+
+static PyMemberDef PyStdOut_memberlist[] = {
+ {"softspace", T_INT, offsetof(PyStdOut, softspace), 0,
+ "flag indicating that a space needs to be printed; used by print"},
+ {NULL} /* Sentinel */
+};
+
+
+
+static PyTypeObject PyStdOut_Type = {
+ /* The ob_type field must be initialized in the module init function
+ * to be portable to Windows without using C++. */
+ PyObject_HEAD_INIT(NULL)
+ 0, /*ob_size*/
+ "PyOut", /*tp_name*/
+ sizeof(PyStdOut), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ /* methods */
+ (destructor)PyStdOut_dealloc, /*tp_dealloc*/
+ 0, /*tp_print*/
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ 0, /*tp_compare*/
+ 0, /*tp_repr*/
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ PyObject_GenericGetAttr, /*tp_getattro*/
+ /* softspace is writable: we must supply tp_setattro */
+ PyObject_GenericSetAttr, /* tp_setattro */
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT, /*tp_flags*/
+ 0, /*tp_doc*/
+ 0, /*tp_traverse*/
+ 0, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ PyStdOut_methods, /*tp_methods*/
+ PyStdOut_memberlist, /*tp_members*/
+ 0, /*tp_getset*/
+ 0, /*tp_base*/
+ 0, /*tp_dict*/
+ 0, /*tp_descr_get*/
+ 0, /*tp_descr_set*/
+ 0, /*tp_dictoffset*/
+ 0, /*tp_init*/
+ 0, /*tp_alloc*/
+ 0, /*tp_new*/
+ 0, /*tp_free*/
+ 0, /*tp_is_gc*/
+};
+
+
+#define PyStdOut_Check(v) ((v)->ob_type == &PyStdOut_Type)
+
+static PyStdOut * newPyStdOut( bool iscerr )
+{
+ PyStdOut *self;
+ self = PyObject_New(PyStdOut, &PyStdOut_Type);
+ if (self == NULL)
+ return NULL;
+ self->softspace = 0;
+ self->_cb = NULL;
+ self->_iscerr = iscerr;
+ return self;
+}
// main python interpreter (static attributes)
return;
}
- // Create cStringIO to capture stdout and stderr
- PycString_IMPORT;
- if (PycStringIO) { // CTH11627 : additional check
- _vout = PycStringIO->NewOutput(128);
- _verr = PycStringIO->NewOutput(128);
- }
+ // Create python objects to capture stdout and stderr
+ _vout=(PyObject*)newPyStdOut( false ); // stdout
+ _verr=(PyObject*)newPyStdOut( true ); // stderr
// All the initRun outputs are redirected to the standard output (console)
initRun();
PySys_SetArgv(_argc, _argv);
PyEval_InitThreads(); // Create (and acquire) the interpreter lock
_interp = PyThreadState_Get()->interp;
+ if (PyType_Ready(&PyStdOut_Type) < 0)
+ {
+ PyErr_Print();
+ }
_gtstate = PyEval_SaveThread(); // Release global thread state
}
int PyInterp_base::initRun()
{
+ //
+ // probably all below code isn't required
+ //
+ /*
PySys_SetObject("stderr",_verr);
PySys_SetObject("stdout",_vout);
- PyObjWrapper verr(PyObject_CallMethod(_verr,"reset",""));
- PyObjWrapper vout(PyObject_CallMethod(_vout,"reset",""));
-
//PyObject *m = PyImport_GetModuleDict();
PySys_SetObject("stdout",PySys_GetObject("__stdout__"));
PySys_SetObject("stderr",PySys_GetObject("__stderr__"));
-
+ */
return 0;
}
PySys_SetObject("stderr",_verr);
PySys_SetObject("stdout",_vout);
- PyObjWrapper verr(PyObject_CallMethod(_verr,"reset",""));
- PyObjWrapper vout(PyObject_CallMethod(_vout,"reset",""));
-
int ier = compile_command(command,_g);
// Outputs are redirected on standards outputs (console)
}
-string PyInterp_base::getverr(){
- //PyLockWrapper aLock(_tstate);
- PyObjWrapper v(PycStringIO->cgetvalue(_verr));
- string aRet(PyString_AsString(v));
- return aRet;
+void PyInterp_base::setvoutcb(PyOutChanged* cb, void* data)
+{
+ ((PyStdOut*)_vout)->_cb=cb;
+ ((PyStdOut*)_vout)->_data=data;
}
-string PyInterp_base::getvout(){
- //PyLockWrapper aLock(_tstate);
- PyObjWrapper v(PycStringIO->cgetvalue(_vout));
- string aRet(PyString_AsString(v));
- return aRet;
+void PyInterp_base::setverrcb(PyOutChanged* cb, void* data)
+{
+ ((PyStdOut*)_verr)->_cb=cb;
+ ((PyStdOut*)_verr)->_data=data;
}
~PyLockWrapper();
};
+typedef void PyOutChanged(void* data,char * c);
+
class PYINTERP_EXPORT PyInterp_base{
public:
static int _argc;
PyLockWrapper GetLockWrapper();
std::string getbanner();
- std::string getverr();
- std::string getvout();
+ void setverrcb(PyOutChanged*,void*);
+ void setvoutcb(PyOutChanged*,void*);
const char * getPrevious();
const char * getNext();
}
};
+
+typedef struct {
+ PyObject_HEAD
+ int softspace;
+ PyOutChanged* _cb;
+ void* _data;
+ bool _iscerr;
+} PyStdOut;
+
#endif
--- /dev/null
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libPythonConsole.la
+
+salomeinclude_HEADERS= \
+ PythonConsole.h \
+ PythonConsole_PyConsole.h \
+ PythonConsole_PyEditor.h \
+ PythonConsole_PyInterp.h
+
+dist_libPythonConsole_la_SOURCES= \
+ PythonConsole_PyConsole.cxx \
+ PythonConsole_PyEditor.cxx \
+ PythonConsole_PyInterp.cxx
+
+MOC_FILES= \
+ PythonConsole_PyEditor_moc.cxx \
+ PythonConsole_PyConsole_moc.cxx
+nodist_libPythonConsole_la_SOURCES= $(MOC_FILES)
+
+
+libPythonConsole_la_CPPFLAGS= $(PYTHON_INCLUDES) $(QT_INCLUDES) \
+ -I$(srcdir)/../PyInterp -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+
+libPythonConsole_la_LDFLAGS= $(PYTHON_LIBS) $(QT_MT_LIBS)
+
+
+++ /dev/null
-# 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@
-
-
#endif // WNT
// ========================================================
-// little trick - we do not have debug python libraries
+// little trick - if we do not have debug python libraries
#ifdef _DEBUG
-
+#ifndef HAVE_DEBUG_PYTHON
#undef _DEBUG
-#include <Python.h>
-#define _DEBUG
-
-#else // _DEBUG
+#endif
+#endif
-#include <Python.h>
+//#include <Python.h>
-#endif // _DEBUG
+#ifdef _DEBUG
+#ifndef HAVE_DEBUG_PYTHON
+#define _DEBUG
+#endif
+#endif
// ========================================================
// avoid warning messages
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
+#include <Python.h>
#include "PythonConsole_PyConsole.h"
#include "PythonConsole_PyEditor.h"
#include "PyInterp_base.h"
myEditor->exec( command );
}
+/*!
+ Blocks execution of main application until command is executed
+ \param command - string with command and arguments
+*/
+void PythonConsole::execAndWait( const QString& command )
+{
+ if ( myEditor )
+ myEditor->execAndWait( command );
+}
+
/*!
Changes font of python console
\param f - new font
virtual void setFont( const QFont& );
void exec( const QString& command );
-
+ void execAndWait( const QString& command );
protected:
PyInterp_base* myInterp;
PythonConsole_PyEditor* myEditor;
#include <PyInterp_Dispatcher.h>
#include <SUIT_Tools.h>
+#include <SUIT_Session.h>
#include <qmap.h>
#include <qclipboard.h>
#include <qdragobject.h>
#include <qapplication.h>
#include <qpopupmenu.h>
+#include <qfontmetrics.h>
+#include <iostream>
using namespace std;
static QString READY_PROMPT = ">>> ";
static QString DOTS_PROMPT = "... ";
-#define PROMPT_SIZE _currentPrompt.length()
+
+#define PROMPT_SIZE (int)_currentPrompt.length()
class ExecCommand : public PyInterp_LockRequest
{
public:
- ExecCommand(PyInterp_base* theInterp, const char* theCommand,
+ ExecCommand(PyInterp_base* theInterp, const QString& theCommand,
PythonConsole_PyEditor* theListener, bool sync = false)
: PyInterp_LockRequest( theInterp, theListener, sync ),
myCommand( theCommand ), myState( PyInterp_Event::OK )
protected:
virtual void execute(){
- if(myCommand != ""){
+ if( !myCommand.stripWhiteSpace().isEmpty() ) {
// if(MYDEBUG) MESSAGE("*** ExecCommand::execute() started");
+ SUIT_Session::SetPythonExecuted(true); // disable GUI user actions
int ret = getInterp()->run( myCommand.latin1() );
+ SUIT_Session::SetPythonExecuted(false); // enable GUI user actions
// if(MYDEBUG) MESSAGE("ExecCommand::execute() - myInterp = "<<getInterp()<<"; myCommand = '"<<myCommand.latin1()<<"' - "<<ret);
- if(ret < 0)
+ if( ret < 0 )
myState = PyInterp_Event::ERROR;
- else if(ret > 0)
+ else if( ret > 0 )
myState = PyInterp_Event::INCOMPLETE;
- myError = getInterp()->getverr().c_str();
- myOutput = getInterp()->getvout().c_str();
// if(MYDEBUG) MESSAGE("*** ExecCommand::execute() finished");
- }else{
- myError = "";
- myOutput = "";
}
}
return new PyInterp_Event( myState, (PyInterp_Request*)this );
}
-public:
- QString myError;
- QString myOutput;
-
private:
QString myCommand;
int myState;
};
+#define PRINT_EVENT 65432
+
+class PrintEvent : public QCustomEvent
+{
+public:
+ PrintEvent( const char* c ) : QCustomEvent( PRINT_EVENT ), myText( c ) {}
+ QString text() const { return myText; }
+private:
+ QString myText;
+};
+
+void staticCallback( void* data, char* c )
+{
+ QApplication::postEvent( (PythonConsole_PyEditor*)data, new PrintEvent( c ) );
+}
/*!
Constructor
*/
PythonConsole_PyEditor::PythonConsole_PyEditor(PyInterp_base* theInterp, QWidget *theParent, const char* theName):
QTextEdit(theParent,theName),
- myInterp( 0 )
+ myInterp( 0 ),
+ myIsInLoop( false )
{
QString fntSet( "" );
QFont aFont = SUIT_Tools::stringToFont( fntSet );
setUndoRedoEnabled( false );
_currentPrompt = READY_PROMPT;
- setWordWrap(NoWrap);
+ setWordWrap( WidgetWidth );
+ setWrapPolicy( Anywhere );
+
+ theInterp->setvoutcb( staticCallback, this );
+ theInterp->setverrcb( staticCallback, this );
connect(this,SIGNAL(returnPressed()),this,SLOT(handleReturn()) );
{
int para=paragraphs()-1;
int col=paragraphLength(para);
- insertAt(s,para,col);
+
+ // Limit length of the string because exception may occur if string too long (NPAL16033)
+ // Exception occurs if one of paragraphs of the input string "s" is too long. Now long
+ // paragraph is limited with threshold numbers of characters and finished by " ..." string.
+ // Note that first paragraph of the string is checked only because it is enough for bug fixing.
+ // If it will be insufficient for other cases then more complicated check should be implemented.
+ // At present it is not done because of possible performance problem.
+
+ static int threshold = 50000;
+ long strLength = s.length();
+ if ( col + strLength <= threshold || s.find( '\n' ) < threshold )
+ insertAt(s,para,col);
+ else
+ {
+ if ( col >= threshold )
+ {
+ if ( text( para ).right( 5 ) != QString( " ...\n" ) )
+ insertAt(" ...\n",para,col);
+ }
+ else
+ {
+ long n = threshold - col;
+ s.truncate( n );
+ if ( n >= 5 )
+ {
+ s.at( n - 5 ) = QChar( ' ' );
+ s.at( n - 4 ) = QChar( '.' );
+ s.at( n - 3 ) = QChar( '.' );
+ s.at( n - 2 ) = QChar( '.' );
+ s.at( n - 1 ) = QChar( '\n' );
+ }
+ else
+ s = " ...\n";
+ insertAt(s,para,col);
+ }
+ }
+
int n = paragraphs()-1;
setCursorPosition( n, paragraphLength(n));
}
void PythonConsole_PyEditor::exec( const QString& command )
{
// Some interactive command is being executed in this editor -> do nothing
- if ( isReadOnly() )
+ if ( isReadOnly() ) {
+ myQueue.push_back( command );
return;
+ }
int para=paragraphs()-1;
removeParagraph( para );
_currentPrompt = READY_PROMPT;
_buf.truncate(0);
_isInHistory = false;
- setText( "\n" + _currentPrompt);
- setText( command + "\n" );
- handleReturn();
+ setText( "\n" + _currentPrompt);
+ // PAL15963 (Problem with option -u (--execute) of runSalome).
+ // Let events creating a study end before script execution starts
+ setText( command /*+ "\n"*/ );
+ //handleReturn();
+ qApp->postEvent( this, new QKeyEvent(QEvent::KeyPress,Key_Return,13,Qt::NoButton ));
+}
+
+void PythonConsole_PyEditor::execAndWait( const QString& command )
+{
+ if( myIsInLoop )
+ return;
+
+ myIsInLoop = true;
+ exec( command );
+ qApp->enter_loop();
+ myIsInLoop = false;
}
/*!
// Post a request to execute Python command
// Editor will be informed via a custom event that execution has been completed
- PyInterp_Dispatcher::Get()->Exec( new ExecCommand( myInterp, _buf.latin1(), this ) );
+ PyInterp_Dispatcher::Get()->Exec( new ExecCommand( myInterp, _buf, this ) );
}
/*!
int endLine = paragraphs() -1;
col = charAt( event->pos(), &par );
if ( col >= 0 && par >= 0 ) {
- if ( par != endLine || col < PROMPT_SIZE )
- setCursorPosition( endLine, paragraphLength( endLine ) );
+ // PAL12896 -->
+ if ( par != endLine || col < PROMPT_SIZE ) {
+ QPoint aPos = paragraphRect(endLine).bottomRight();
+ QMouseEvent* e = new QMouseEvent(event->type(),aPos,event->button(),event->state());
+ QTextEdit::contentsMouseReleaseEvent(e);
+ }
else
- setCursorPosition( par, col );
- QApplication::clipboard()->setSelectionMode(TRUE);
- paste();
- QApplication::clipboard()->setSelectionMode(FALSE);
+ QTextEdit::contentsMouseReleaseEvent(event);
+ // PAL12896 <--
}
}
}
else if ( ctrlPressed ) {
moveCursor( QTextEdit::MoveUp, false );
}
- else {
- QString histLine = _currentPrompt;
- if ( ! _isInHistory ) {
- _isInHistory = true;
- _currentCommand = text( endLine ).remove( 0, PROMPT_SIZE );
- _currentCommand.truncate( _currentCommand.length() - 1 );
- }
- QString previousCommand = myInterp->getPrevious();
- if ( previousCommand.compare( BEGIN_HISTORY_PY ) != 0 )
- {
- removeParagraph( endLine );
- histLine.append( previousCommand );
- append( histLine );
- }
- moveCursor( QTextEdit::MoveEnd, false );
+ else {
+ QString histLine = _currentPrompt;
+ if ( ! _isInHistory ) {
+ _isInHistory = true;
+ _currentCommand = text( endLine ).remove( 0, PROMPT_SIZE );
+ _currentCommand.truncate( _currentCommand.length() - 1 );
+ }
+ QString previousCommand = myInterp->getPrevious();
+ if ( previousCommand.compare( BEGIN_HISTORY_PY ) != 0 )
+ {
+ removeParagraph( endLine );
+ histLine.append( previousCommand );
+ append( histLine );
+ }
+ moveCursor( QTextEdit::MoveEnd, false );
+ scrollViewAfterHistoryUsing( previousCommand ); // NPAL16035
}
break;
}
}
}
moveCursor( QTextEdit::MoveEnd, false );
+ scrollViewAfterHistoryUsing( nextCommand ); // NPAL16035
}
break;
}
if ( ctrlPressed && !hasSelectedText() ) {
QString txt = text( curLine );
int ind = curCol;
- while ( ind < txt.length()-1 && txt[ ind ] == ' ' ) ind++;
+ while ( ind < (int)( txt.length() - 1 ) && txt[ind] == ' ' ) ind++;
ind = txt.find( ' ', ind );
- while ( ind < txt.length()-1 && txt[ ind ] == ' ' ) ind++;
+ while ( ind < (int)( txt.length() - 1 ) && txt[ ind ] == ' ' ) ind++;
if ( ind > PROMPT_SIZE-1 ) {
setSelection( curLine, curCol, curLine, ind );
removeSelectedText();
void PythonConsole_PyEditor::customEvent(QCustomEvent* e)
{
switch( e->type() ) {
+ case PRINT_EVENT:
+ {
+ PrintEvent* pe=(PrintEvent*)e;
+ setText( pe->text() );
+ return;
+ }
case PyInterp_Event::OK:
case PyInterp_Event::ERROR:
{
- PyInterp_Event* pe = dynamic_cast<PyInterp_Event*>( e );
- if ( pe ){
- ExecCommand* ec = dynamic_cast<ExecCommand*>( pe->GetRequest() );
- if ( ec ){
- // The next line has appeared dangerous in case if
- // Python command execution has produced very large output.
- // A more clever approach is needed...
- setText(ec->myOutput);
- setText(ec->myError);
- }
- }
_buf.truncate(0);
_currentPrompt = READY_PROMPT;
+ QString txt = text( paragraphs()-1 );
+ txt.truncate( txt.length()-1 );
+ if ( !txt.isEmpty() )
+ setText("\n");
setText(_currentPrompt);
viewport()->unsetCursor();
+ if( myIsInLoop )
+ qApp->exit_loop();
break;
}
case PyInterp_Event::INCOMPLETE:
{
_buf.append("\n");
_currentPrompt = DOTS_PROMPT;
+ QString txt = text( paragraphs()-1 );
+ txt.truncate( txt.length()-1 );
+ if ( !txt.isEmpty() )
+ setText("\n");
setText(_currentPrompt);
viewport()->unsetCursor();
+ if( myIsInLoop )
+ qApp->exit_loop();
break;
}
default:
setReadOnly( false );
_isInHistory = false;
+
+ if ( e->type() == PyInterp_Event::OK && myQueue.count() > 0 ) {
+ QString nextcmd = myQueue[0];
+ myQueue.pop_front();
+ exec( nextcmd );
+ }
}
/*!
_isInHistory = false;
setText(_currentPrompt);
viewport()->unsetCursor();
+ if( myIsInLoop )
+ qApp->exit_loop();
}
else {
clear();
QPopupMenu* popup = QTextEdit::createPopupMenu( pos );
QValueList<int> ids;
- for ( int i = 0; popup && i < popup->count(); i++ )
+ for ( int i = 0; popup && i < (int)popup->count(); i++ )
{
if ( !popup->isItemEnabled( popup->idAt( i ) ) )
ids.append( popup->idAt( i ) );
return popup;
}
+
+/*!
+ Scrolls view after use of history (Up/Down keys)to the left position if length
+ of command less than visible width of the view
+*/
+void PythonConsole_PyEditor::scrollViewAfterHistoryUsing( const QString& command )
+{
+ if ( !command.isEmpty() )
+ {
+ if ( command == QString( BEGIN_HISTORY_PY ) )
+ {
+ ensureCursorVisible();
+ return;
+ }
+
+ QFontMetrics aFM( currentFont() );
+ int aCommandLength = aFM.width( command ) + aFM.width( READY_PROMPT ) + 5;
+ int aVisibleWidth = visibleWidth();
+ QScrollBar* aBar = horizontalScrollBar();
+ if ( aBar )
+ {
+ if ( aCommandLength <= aVisibleWidth )
+ aBar->setValue( aBar->minValue() );
+ else if ( aVisibleWidth > 0 )
+ {
+ double aRatio = aCommandLength / contentsWidth();
+ double aPos = ( aBar->maxValue() - aBar->minValue() ) * aRatio;
+ aBar->setValue( (int)aPos );
+ ensureCursorVisible();
+ }
+ }
+ }
+}
bool isCommand(const QString& str) const;
virtual void exec( const QString& command );
+ void execAndWait( const QString& command );
protected:
virtual void contentsDropEvent( QDropEvent* 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:
+
+ void scrollViewAfterHistoryUsing( const QString& command );
+
private:
QString _buf;
QString _currentCommand;
QString _currentPrompt;
- bool _isInHistory;
+ bool _isInHistory, myIsInLoop;
PyInterp_base* myInterp;
- QString myBanner;
- QString myOutput;
- QString myError;
+ QString myBanner;
+ QString myOutput;
+ QString myError;
+ QStringList myQueue;
};
#endif
bool PythonConsole_PyInterp::initState()
{
+ /*
+ * The GIL is acquired on input and released on output
+ */
+ /*PyEval_AcquireLock();
+#ifdef WNT
+ _tstate = PyGILState_GetThisThreadState();
+ // if no thread state defined
+ if ( _tstate )
+ PyThreadState_Swap(_tstate);
+ else
+#endif
+ {
+ _tstate = Py_NewInterpreter(); // create an interpreter and save current state
+ PySys_SetArgv(PyInterp_base::_argc,PyInterp_base::_argv); // initialize sys.argv
+ //if(MYDEBUG) MESSAGE("PythonConsole_PyInterp::initState - this = "<<this<<"; _tstate = "<<_tstate);
+ }*/
+
/*
* The GIL is acquired and will be held on initState output
* It is the caller responsability to release the lock if needed
*/
PyEval_AcquireLock();
+
_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 = "<<this<<"; _tstate = "<<_tstate);
+
/*
* If builtinmodule has been initialized all the sub interpreters
* will have the same __builtin__ module
*/
- if(builtinmodule){
+
+ if(!builtinmodule) // PAL18041: deepcopy function don't work in Salome
+ {
+ //builtinmodule is static member of PyInterp class
+ //If it is not NULL (initialized to the builtin module of the main interpreter
+ //all the sub interpreters will have the same builtin
+ //_interp is a static member and is the main interpreter
+ //The first time we initialized it to the builtin of main interpreter
+ builtinmodule=PyDict_GetItemString(_interp->modules, "__builtin__");
+ }
+
+ if(builtinmodule)
+ {
PyObject *m = PyImport_GetModuleDict();
PyDict_SetItemString(m, "__builtin__", builtinmodule);
// SCRUTE(builtinmodule->ob_refcnt); // builtinmodule reference counter
_tstate->interp->builtins = PyModule_GetDict(builtinmodule);
Py_INCREF(_tstate->interp->builtins);
- }
+ }
PyEval_ReleaseThread(_tstate);
return true;
}
--- /dev/null
+# 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
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libQDS.la
+
+# header files
+salomeinclude_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
+
+dist_libQDS_la_SOURCES= \
+ 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
+
+MOC_FILES= \
+ QDS_CheckBox_moc.cxx \
+ QDS_ComboBox_moc.cxx \
+ QDS_Datum_moc.cxx \
+ QDS_LineEdit_moc.cxx \
+ QDS_SpinBox_moc.cxx \
+ QDS_SpinBoxDbl_moc.cxx \
+ QDS_TextEdit_moc.cxx
+nodist_libQDS_la_SOURCES= $(MOC_FILES)
+
+# may be neccessary for the external projects or future improvements
+EXTRA_DIST+= QDS_RadioBox.cxx QDS_RadioBox.h resources/QDS_msg_en.po
+
+libQDS_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../DDS
+
+libQDS_la_LDFLAGS=$(QT_MT_LIBS) $(CAS_KERNEL)
+libQDS_la_LIBADD=../DDS/libDDS.la ../Qtx/libqtx.la
+
+++ /dev/null
-# 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@
-
-
QValueList<QDS_Datum*> QDS::_datumList;
+/*!
+ Convert the OpenCascade ascii string to Qt string.
+*/
QString QDS::toQString( const TCollection_AsciiString& src )
{
QTextCodec* codec = QTextCodec::codecForLocale();
return res;
}
+/*!
+ Convert the OpenCascade unicode string to Qt string.
+*/
QString QDS::toQString( const TCollection_ExtendedString& src )
{
if ( src.IsAscii() )
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 toQString( src->String() );
}
+/*!
+ Convert the OpenCascade unicode string to Qt string.
+*/
QString QDS::toQString( const Handle(TCollection_HExtendedString)& src )
{
if ( src.IsNull() )
return toQString( src->String() );
}
+/*!
+ Convert the Qt string to OpenCascade ascii string.
+*/
TCollection_AsciiString QDS::toAsciiString( const QString& src )
{
TCollection_AsciiString res;
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;
return res;
}
+/*!
+ Convert the Qt string to OpenCascade unicode string.
+*/
TCollection_ExtendedString QDS::toExtString( const QString& src )
{
if ( src.isEmpty() )
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 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;
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;
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();
}
}
+/*!
+ Register given datum \adatum in the static list.
+ This function invoked by QDS_Datum constructor.
+*/
void QDS::insertDatum( QDS_Datum* datum )
{
if ( !datum )
_datumList.append( datum );
}
+/*!
+ Remove given datum \adatum from the static list.
+ This function invoked by QDS_Datum destructor.
+*/
void QDS::removeDatum( QDS_Datum* datum )
{
if ( !datum )
class QDS_EXPORT QDS
{
public:
- typedef enum { None = 0x00, Label = 0x01, Control = 0x02, Units = 0x04,
- NotFormat = 0x08, NotAccel = 0x10, UnitsWithLabel = 0x20,
- All = Label | Control | Units } DatumFlags;
+ /*! Enum describes bit flags of the Qt datum view and behaviour */
+ typedef enum
+ {
+ None = 0x00, //!< Non specified any flags (Default behaviour)
+ Label = 0x01, //!< Create subwidget for datum label
+ Control = 0x02, //!< Create subwidget for datum input control
+ Units = 0x04, //!< Create subwidget for datum units of measure
+ NotFormat = 0x08, //!< Don't format initial value
+ NotAccel = 0x10, //!< Not support accelerators in datum label
+ UnitsWithLabel = 0x20, //!< Display units of measure in label like "<label_text> (<units_text>) instead separate text"
+ All = Label | Control | Units //!< Create all subwidgets
+ } DatumFlags;
public:
static bool load( const QString& );
#include <qcheckbox.h>
+/*
+ \class QDS_CheckBox
+
+ Datum with control corresponding to check box. This control can have only two states:
+ 1 (on/true) or 0 (off/false). QDS_CheckBox don't take into account standard parameter
+ properties (minimum, maximum, filter, etc).
+
+ QDS_CheckBox can set and get following values for access methods (setStringValue(),
+ setIntegerValue(), setDoubleValue(), stringValue(), integerValue(), doubleValue()):
+ \li "1" - check box state is setted as on.
+ \li "0" - check box state is setted as off.
+ \li "-1" - check box state is setted as "NoChage" (undefined).
+
+ User can set and check a state "NoChange" using methods clear() and isEmpty() accordingly.
+*/
+
/*!
- Constructor. This method is protected. Object can't be directly constructed.
- Use static method QDS_CheckBox::Create instead.
+ Constructor. Create check box datum object with datum identifier \aid under widget \aparent.
+ Parameter \aflags define behaviour of datum and set of created subwidgets. Default value of
+ this parameter is QDS::All. Parameter \acomp specify the component name which will be used
+ during search of dictionary item.
*/
QDS_CheckBox::QDS_CheckBox( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QDS_Datum( id, parent, flags, comp )
}
/*!
- Returns string from QCheckBox widget.
+ Returns string from QCheckBox widget. If the check box state is on then 1 returned otherwise 0.
*/
QString QDS_CheckBox::getString() const
{
}
/*!
- Sets the string into QCheckBox widget.
+ Sets the string into QCheckBox widget. If argument \atxt is string with number "1" then check box
+ state is setted as on. If argument \atxt is string with number "0" then state is setted as off.
+ If argument \atxt is string with number "-1" then state is setted as "NoChage" (undefined).
*/
void QDS_CheckBox::setString( const QString& txt )
{
}
/*!
- Notify about shanging of control state
+ Notify about ñhanging of control state
*/
void QDS_CheckBox::onParamChanged()
{
emit paramChanged();
}
+/*!
+ Notify about ñhanging of control state. Switch off check box property "tristate" when
+ state changed by user.
+*/
void QDS_CheckBox::onStateChanged( int state )
{
if ( state != QButton::NoChange && checkBox() )
checkBox()->setTristate( false );
}
+/*!
+ Sets the check box state \atheState.
+*/
void QDS_CheckBox::setChecked( const bool theState )
{
if ( checkBox() )
checkBox()->setChecked( theState );
}
+/*!
+ Returns current check box state.
+*/
bool QDS_CheckBox::isChecked() const
{
return checkBox() ? checkBox()->isChecked() : false;
#include <qlineedit.h>
+/*
+ \class QDS_ComboBox
+
+ Datum with control corresponding to combo box. This control used for datum with enumerable values.
+ It can be used for datum which has type of value 'List'. Each item of combobox defined two properties:
+ integer identifier and string name. All operations on items performed via identifier.
+*/
+
/*!
- Constructor.
+ Constructor. Create combobox datum object with datum identifier \aid under widget \aparent. Parameter \aflags
+ define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All.
+ Parameter \acomp specify the component name which will be used during search of dictionary item.
*/
QDS_ComboBox::QDS_ComboBox( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QDS_Datum( id, parent, flags, comp )
}
/*!
- Returns true if ComboBox allow to edit current Text.
+ Returns true if ComboBox allow to edit current text.
*/
bool QDS_ComboBox::editable() const
{
}
/*!
- Returns number of items in ComboBox. If total is 'false' then only
+ Returns number of items in ComboBox. If \atotal is 'false' then only
visible items are taken into account otherwise all items.
*/
int QDS_ComboBox::count( bool total ) const
}
/*!
- Returns list of ids. If total is 'false' then only visible items
+ Returns list of list item identifiers \aids. If \atotal is 'false' then only visible items
are taken into account otherwise all items.
*/
void QDS_ComboBox::values( QValueList<int>& ids, bool total ) const
}
/*!
- Returns the current id as integer.
+ Returns the current id as integer. Reimplemented.
*/
int QDS_ComboBox::integerValue() const
{
}
/*!
- Returns the current id as double.
+ Returns the current id as double. Reimplemented.
*/
double QDS_ComboBox::doubleValue() const
{
}
/*!
- Set the current item acording to specified id.
+ Set the current item acording to specified id. Reimplemented.
*/
void QDS_ComboBox::setIntegerValue( const int id )
{
}
/*!
- Get the integer part of specified value and use it as new current identifier.
+ Get the integer part of specified value and use it as new current identifier. Reimplemented.
*/
void QDS_ComboBox::setDoubleValue( const double val )
{
}
/*!
- Returns visible state of identificator.
+ Returns visible state of item specified by \aid.
*/
bool QDS_ComboBox::state( const int id ) const
{
}
/*!
- Sets the visible state of identificator. If 'id' is -1 then specified
- state will be set to all ids.
+ Sets the visible state of item specified by \aid. If \aid is -1 then specified
+ state will be set to all items. If \aappend is set then keep status for other items
+ otherwise status of other items will be cleared.
*/
void QDS_ComboBox::setState( const bool on, const int id, const bool append )
{
}
/*!
- Sets the visible state of identificator from the specified list.
+ Sets the visible state of items specified by list of identifiers \aids.
+ If \aappend is set then keep status for other items otherwise status of other
+ items will be cleared.
*/
void QDS_ComboBox::setState( const bool on, const QValueList<int>& ids, const bool append )
{
}
/*!
- Sets the user items into the combo box.
+ Sets the custom user items into the combo box. User items like standard dictionary
+ list items will be added into the combobox. This functionality allow to user override
+ items.
*/
void QDS_ComboBox::setValues( const QValueList<int>& ids, const QStringList& 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
+ QValueList (0, 1, 2 ... ) and call previous method.
*/
void QDS_ComboBox::setValues( const QStringList& names )
{
}
/*!
- Returns string from QLineEdit widget.
+ Returns string from QComboBox widget. Reimplemented.
*/
QString QDS_ComboBox::getString() const
{
}
/*!
- Sets the string into QLineEdit widget.
+ Sets the string into QComboBox widget. Reimplemented.
*/
void QDS_ComboBox::setString( const QString& txt )
{
}
/*!
- Create QComboBox widget as control subwidget.
+ Create QComboBox widget as control subwidget. Reimplemented.
*/
QWidget* QDS_ComboBox::createControl( QWidget* parent )
{
return cb;
}
+/*!
+ Notification about active unit system changing. Reimplemented from QDS_Datum.
+ Update combobox content.
+*/
void QDS_ComboBox::unitSystemChanged( const QString& system )
{
QDS_Datum::unitSystemChanged( system );
}
/*!
- Notify about activation new item.
+ Notify about activation combobox item.
*/
void QDS_ComboBox::onActivated( int idx )
{
}
/*!
- Updates ComboBox after have change of visible state or items have been inserted / removed.
+ Updates ComboBox after have change of visible state or items have been inserted/removed.
*/
void QDS_ComboBox::updateComboBox()
{
#include <qvalidator.h>
#include <qmessagebox.h>
+#include <TColStd_SequenceOfAsciiString.hxx>
+
/*!
- Class: QDS_Datum::Wrapper
- Descr: Wrapper widget for sub widgets. [internal]
+ class: QDS_Datum::Wrapper
+ descr: Wrapper widget for sub widgets. [internal]
*/
class QDS_Datum::Wrapper : public QWidget
QWidget* widget() const;
void setWidget( QWidget* );
- virtual bool eventFilter( QObject*, QEvent* );
-
-protected:
- virtual void resizeEvent( QResizeEvent* );
+ virtual void setGeometry( int x, int y, int w, int h );
+ virtual void setSizePolicy( QSizePolicy );
private:
QWidget* myWid;
};
-
QDS_Datum::Wrapper::Wrapper( QWidget* parent )
: QWidget( parent ),
myWid( 0 )
if ( myWid == wid )
return;
- if ( myWid )
- myWid->removeEventFilter( this );
-
myWid = wid;
if ( !myWid )
myWid->updateGeometry();
updateGeometry();
-
- myWid->installEventFilter( this );
}
-bool QDS_Datum::Wrapper::eventFilter( QObject* o, QEvent* e )
+void QDS_Datum::Wrapper::setSizePolicy( QSizePolicy sp )
{
- if ( e->type() == QEvent::Resize && o == widget() )
- {
- QResizeEvent* re = (QResizeEvent*)e;
- if ( re->size() != size() )
- resize( re->size() );
- }
- return QWidget::eventFilter( o, e );
+ QWidget::setSizePolicy( sp );
+
+ if ( widget() )
+ widget()->setSizePolicy( sp );
}
-void QDS_Datum::Wrapper::resizeEvent( QResizeEvent* e )
+void QDS_Datum::Wrapper::setGeometry( int x, int y, int w, int h )
{
- QWidget::resizeEvent( e );
+ QWidget::setGeometry( x, y, w, h );
if ( widget() && widget()->size() != size() )
- widget()->resize( size() );
+ widget()->setGeometry( 0, 0, width(), height() );
}
/*!
- Class: QDS_Datum
- Descr: Base class for control used data dictionary. [public]
+ \class QDS_Datum
+
+ This is a base class for control using the data dictionary. Datum is successor of QObject (not QWidget).
+ This object can have three sub widgets named as Label, Control and Units. User can skip creation of
+ some of them manipulate by parameter \aflags. Label widget display label of datum, Control widget allow
+ to input value, Units widget display units of measure in the active system.
+
+ These widgets constructs under parent of datum. If this parent has layout which can automaticaly add child
+ widgets (see QLayout::setAutoAdd()) then these subwidgets will be placed in following order: first widget
+ is Label, second - Control, third - Unints. User can add these widgets to layout manually using methods
+ QDS_Datum::addTo() or QDS_Datum::widget(). In last case User can retrieve desired widget and place it into
+ layout.
+
+ If use QGroupBox as parent widget for datum object then all subwidgets will be arranged automatically by
+ group box according to column and orientation properties of QGroupBox.
+
+ For example:
+ QGroupBox* box = new QGroupBox( 3, Qt::Horizontal, "datum box" );
+ QDS_Datum* d1 = new QDS_Datum( "datum_1", box, All );
+ QDS_Datum* d2 = new QDS_Datum( "datum_2", box, All );
+ QDS_Datum* d3 = new QDS_Datum( "datum_3", box, All );
+
+ In this example we create the QGroupBox with 3 horizontal columns. All created datum widgets will be
+ placed automatically three widgets in a row. Each datum will be placed from up to bottom one by one.
+
+ Datum value is stored as string. User can get/set this value in different kinds:
+ \liAs string - methods stringValue()/setStringValue().
+ \liAs integer - methods integerValue()/setIntegerValue(). Given value converted to/from SI.
+ \liAs double - methods doubleValue()/setDoubleValue(). Given value converted to/from SI.
+ \liAs variant - methods value()/setValue().
+
+ User can perform some actions on datum subwidgets using following methods: isEnabled(),
+ setEnabled(), show(), hide(), setShown(), setFocus(), setAlignment().
*/
+/*!
+ Constructor. Create datum object with datum identifier \aid under widget \aparent. Parameter \aflags
+ define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All.
+ Parameter \acomp specify the component name which will be used during search of dictionary item.
+
+ Datum register self in the static list by QDS::insertDatum().
+*/
QDS_Datum::QDS_Datum( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QObject( parent ),
myId( id ),
insertDatum( this );
}
+/*!
+ Destructor. Destroy all subwidget.
+ Datum unregister self from the static list by QDS::removeDatum().
+*/
QDS_Datum::~QDS_Datum()
{
removeDatum( this );
*/
}
+/*!
+ 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();
return res;
}
+/*!
+ Returns the datum label string.
+*/
QString QDS_Datum::label() const
{
initDatum();
return labStr;
}
+/*!
+ Returns the datum units string.
+*/
QString QDS_Datum::units() const
{
initDatum();
return unitStr;
}
+/*!
+ Returns the datum value filter string.
+*/
QString QDS_Datum::filter() const
{
initDatum();
return fltr;
}
+/*!
+ Returns the datum value format string.
+*/
QString QDS_Datum::format() const
{
initDatum();
return fmtStr;
}
+/*!
+ Returns the datum default value string.
+*/
QString QDS_Datum::defaultValue() const
{
initDatum();
return aDef;
}
+/*!
+ Returns the datum minimum value string.
+*/
QString QDS_Datum::minimumValue() const
{
initDatum();
return min;
}
+/*!
+ Returns the datum maximum value string.
+*/
QString QDS_Datum::maximumValue() const
{
initDatum();
return max;
}
+/*!
+ Returns the datum long description.
+*/
QString QDS_Datum::longDescription() const
{
initDatum();
return ldStr;
}
+/*!
+ Returns the datum short description.
+*/
QString QDS_Datum::shortDescription() const
{
initDatum();
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;
return val;
}
+/*!
+ Returns the datum value as string (QString object).
+*/
QString QDS_Datum::stringValue() const
{
initDatum();
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();
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();
return res;
}
+/*!
+ Returns the text from datum. Text consist of label, string value and units.
+*/
QString QDS_Datum::text() const
{
initDatum();
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();
emit paramChanged( str );
}
+/*!
+ Clear the control.
+*/
void QDS_Datum::clear()
{
initDatum();
}
}
+/*!
+ Set varian value (QVariant object) into datum.
+*/
void QDS_Datum::setValue( const QVariant& val )
{
if ( val.isValid() && val.canCast( QVariant::String ) )
clear();
}
+/*!
+ Set string value (QString object) into datum.
+*/
void QDS_Datum::setStringValue( const QString& txt )
{
initDatum();
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();
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();
}
/*!
- Returns true if all subwidgets specified by 'element' enabled.
+ Returns true if all subwidgets specified by \aelement enabled.
*/
bool QDS_Datum::isEnabled( const int element ) const
{
}
/*!
- Enable/Disable subwidgets specified by 'element'.
- Values: Label, Control, Units or their combinations.
+ Enable/Disable subwidgets specified by \aelement.
+ Possible values of \aelement: Label, Control, Units or their combinations.
*/
void QDS_Datum::setEnabled( const bool on, const int element )
{
setEnabled( on, Control );
}
+/*!
+ Show/hide subwidgets specified by \aelement.
+ Possible values of \aelement: Label, Control, Units or their combinations.
+*/
void QDS_Datum::setShown( const bool visible, const int flags )
{
- if ( visible )
- show( flags );
- else
- hide( flags );
+ initDatum();
+
+ uint flag = Units;
+ while ( flag )
+ {
+ if ( flags & flag && widget( flag ) )
+ widget( flag )->setShown( visible );
+ flag = flag >> 1;
+ }
}
/*!
- Show subwidgets specified by 'element'.
- Values: Label, Control, Units or their combinations.
+ Show subwidgets specified by \aelement.
+ Possible values of \aelement: Label, Control, Units or their combinations.
*/
void QDS_Datum::show( const int element )
{
- initDatum();
-
- if ( ( element & Label ) && labelWidget() )
- labelWidget()->show();
- if ( ( element & Units ) && unitsWidget() )
- unitsWidget()->show();
- if ( ( element & Control ) && controlWidget() )
- controlWidget()->show();
+ setShown( true, element );
}
/*!
- Hide subwidgets specified by 'element'.
- Values: Label, Control, Units or their combinations.
+ Hide subwidgets specified by \aelement.
+ Possible values of \aelement: Label, Control, Units or their combinations.
*/
void QDS_Datum::hide( const int element )
{
- initDatum();
-
- if ( ( element & Label ) && labelWidget() )
- labelWidget()->hide();
- if ( ( element & Units ) && unitsWidget() )
- unitsWidget()->hide();
- if ( ( element & Control ) && controlWidget() )
- controlWidget()->hide();
+ setShown( false, element );
}
/*!
- Returns subwidget specified by 'element'.
- Possible values: Label, Control, Units.
+ Returns subwidget specified by \aelement.
+ Possible values of \aelement: Label, Control, Units.
*/
QWidget* QDS_Datum::widget( const int element ) const
{
/*!
Returns true if control contains valid value otherwise returns false
- and display warning message box if parameter msgBox is set.
+ and display warning message box if parameter \amsgBox is set.
*/
bool QDS_Datum::isValid( const bool msgBox, const QString& extMsg, const QString& extLabel ) const
{
}
/*!
- Add widgets to the vertical layout.
+ Add widgets to the vertical box layout.
*/
void QDS_Datum::addTo( QVBoxLayout* l )
{
}
/*!
- Add widgets to the horizaontal layout.
+ Add widgets to the horizaontal box layout.
*/
void QDS_Datum::addTo( QHBoxLayout* l )
{
unitsWidget()->setAlignment( align );
}
+/*!
+ Perform delayed initialisation. Reimplemented for internal reasons.
+*/
bool QDS_Datum::eventFilter( QObject* o, QEvent* e )
{
if ( o == parent() )
}
/*!
- Notify about parameter changing.
+ Notify about parameter value changing.
*/
void QDS_Datum::onParamChanged()
{
}
/*!
- Delayed initialization.
+ Perform delayed initialization.
*/
void QDS_Datum::onInitDatum()
{
}
/*!
- Returns QLabel instance which contains data dictionary label.
+ Returns QLabel widget which contains dictionary item label.
*/
QLabel* QDS_Datum::labelWidget() const
{
}
/*!
- Returns QLabel instance which contains data dictionary units.
+ Returns QLabel widget which contains dictionary item units.
*/
QLabel* QDS_Datum::unitsWidget() const
{
}
/*!
- Creates QLabel widget for data label.
+ Creates QLabel widget for dictionary item label.
*/
QLabel* QDS_Datum::createLabel( QWidget* parent )
{
}
/*!
- Creates QLabel widget for data units.
+ Creates QLabel widget for dictionary item units.
*/
QLabel* QDS_Datum::createUnits( QWidget* parent )
{
}
/*!
- Returns validator accordance to data type.
+ Creates and returns validator accordance to datum type of value.
*/
QValidator* QDS_Datum::validator( const bool limits ) const
{
}
/*!
- Retrieves information from data dictionary and create subwidgets using virtual mechanism.
+ Retrieves information from dictionary and create subwidgets using virtual mechanism.
Virtual mechanism doesn't work in constructor and destructor, therefore this method should
be called outside the constructor.
*/
labelWidget()->setBuddy( ctrl );
}
+/*!
+ Notification about active unit system changing. Update label and units texts.
+*/
void QDS_Datum::unitSystemChanged( const QString& unitSystem )
{
QString labText = label();
}
/*!
- Format the specified integer as data dictionary value.
+ Format the specified integer as dictionary item value.
*/
QString QDS_Datum::format( const int num, const QString& id, const bool convert )
{
}
/*!
- Format the specified double as data dictionary value.
+ Format the specified double as dictionary item value.
*/
QString QDS_Datum::format( const double num, const QString& id, const bool convert )
{
}
/*!
- Format the specified string as data dictionary value.
+ Format the specified string as dictionary item value.
*/
QString QDS_Datum::format( const QString& str, const QString& id, const bool convert )
{
}
/*!
- Format the given string accordance to data format.
+ Format the given string accordance to dictionary item format.
*/
QString QDS_Datum::format( const QString& aFormat, const int aType, const int aValue )
{
}
/*!
- Format the given string accordance to data format.
+ Format the given string accordance to dictionary item format.
*/
QString QDS_Datum::format( const QString& aFormat, const int aType, const double aValue )
{
}
/*!
- Format the given string accordance to data format.
+ Format the given string accordance to dictionary item format.
*/
QString QDS_Datum::format( const QString& aFormat, const int aType, const QString& aValue )
{
}
/*!
- Returns displayable units string for given DD ID
+ Returns displayable units string for given dictionary item id
*/
QString QDS_Datum::units( const QString& id )
{
myTargetValue = QString::null;
}
+/*!
+ Remove the acceleartor tags '&' from specified label string \asrc.
+*/
QString QDS_Datum::removeAccel( const QString& src )
{
QString trg = src;
return trg;
}
+/*!
+ Returns true if given format string \atheFormat has specificator for double values.
+*/
bool QDS_Datum::isDoubleFormat( const QString& theFormat )
{
if ( theFormat.length() > 0 )
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 )
parent()->removeEventFilter( this );
}
+/*!
+ Return wrapper for specified subwidget. [internal]
+*/
QDS_Datum::Wrapper* QDS_Datum::wrapper( QWidget* wid ) const
{
if ( !wid )
return wrap;
}
+/*!
+ Return wrapper for specified subwidget name. [internal]
+*/
QDS_Datum::Wrapper* QDS_Datum::wrapper( const int id ) const
{
Wrapper* wrap = 0;
return wrap;
}
+/*!
+ Return subwidget name for specified wrapper. [internal]
+*/
int QDS_Datum::wrapperType( QDS_Datum::Wrapper* wrap ) const
{
int id = -1;
#include "QDS.h"
-#include <qobject.h>
+#include <qwidget.h>
#include <qstring.h>
#include <qvariant.h>
#include <qguardedptr.h>
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 bool isEnabled( const int = Control ) const;
virtual void setEnabled( const bool, const int );
- void show( const int = -1 );
- void hide( const int = -1 );
- void setShown( const bool, const int = -1 );
+ void show( const int = All );
+ void hide( const int = All );
+ virtual void setShown( const bool, const int = All );
QWidget* widget( const int ) const;
void setFocus();
#include <qvalidator.h>
/*
- Class: QDS_LineEdit::Editor
- Descr: Internal class inherited from line edit
+ class: QDS_LineEdit::Editor
+ descr: Internal class inherited from line edit
*/
class QDS_LineEdit::Editor : public QLineEdit
};
/*
- Class: QDS_LineEdit
- Descr: Data control corresponding to line edit
+ \class QDS_LineEdit
+
+ Datum with control corresponding to line edit. User can enter parameter value in single line editor.
+ User inputted values will be checked by validator according to type if value and parameter properties
+ (minimum, maximum, filter, precision, etc). If user input not valid value then this value will be
+ displayed in red color.
*/
/*!
- Constructor.
+ Constructor. Create line edit datum object with datum identifier \aid under widget \aparent. Parameter \aflags
+ define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All.
+ Parameter \acomp specify the component name which will be used during search of dictionary item.
*/
QDS_LineEdit::QDS_LineEdit( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QDS_Datum( id, parent, flags, comp )
{
}
+/*!
+ 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 );
}
/*!
- Set the aligment of line edit.
+ Select all text in the editor.
+*/
+void QDS_LineEdit::selectAll()
+{
+ if ( lineEdit() )
+ lineEdit()->selectAll();
+}
+
+/*!
+ Deselect all text in the editor.
+*/
+void QDS_LineEdit::deselect()
+{
+ if ( lineEdit() )
+ lineEdit()->deselect();
+}
+
+/*!
+ Select or deselect all text in the editor.
+*/
+void QDS_LineEdit::setSelection( const bool on )
+{
+ if ( on )
+ selectAll();
+ else
+ deselect();
+}
+
+/*!
+ Returns true if the editor has selected text.
+*/
+bool QDS_LineEdit::hasSelection() const
+{
+ return lineEdit() ? lineEdit()->hasSelectedText() : false;
+}
+
+/*!
+ Set the aligment of line edit. Reimplemented from QDS_Datum.
*/
void QDS_LineEdit::setAlignment( const int align, const int type )
{
}
/*!
- Returns string from QLineEdit widget.
+ Returns string value from QLineEdit widget. Reimplemented from QDS_Datum.
*/
QString QDS_LineEdit::getString() const
{
}
/*!
- Sets the string into QLineEdit widget.
+ Sets the string value into QLineEdit widget. Reimplemented from QDS_Datum.
*/
void QDS_LineEdit::setString( const QString& txt )
{
}
/*!
- Create QLineEdit widget as control subwidget.
+ Create QLineEdit widget as control subwidget. Reimplemented from QDS_Datum.
*/
QWidget* QDS_LineEdit::createControl( QWidget* parent )
{
}
/*!
- Checks the current parameter value on validity.
+ Checks the current parameter value on validity. If value is not valid then set text color as red.
*/
void QDS_LineEdit::onParamChanged()
{
{
Q_OBJECT
+ Q_PROPERTY( bool Selection READ hasSelection WRITE setSelection )
+
protected:
class Editor;
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();
#include <qbuttongroup.h>
#include <qradiobutton.h>
+/*
+ \class QDS_RadioBox
+
+ Datum with control corresponding to button group with set of exclusive radio buttons.
+ This control used for datum with enumerable values. It can be used for datum which has
+ type of value 'List'. Each radio button of combobox defined two properties:
+ integer identifier and string name. All operations on radio buttons performed via identifier.
+
+ If datum label text is specified then it displayed in group box title.
+*/
+
/*!
- Constructor.
+ Constructor. Create radio button box datum object with datum identifier \aid under widget \aparent.
+ Parameter \aflags define behaviour of datum and set of created subwidgets. Default value of this
+ parameter is QDS::Control. Parameter \acomp specify the component name which will be used during
+ search of dictionary item.
*/
QDS_RadioBox::QDS_RadioBox( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QDS_Datum( id, parent, flags & ~( Label | Units ), comp )
}
/*!
- Returns number of items in ComboBox. If total is 'false' then only
- visible items are taken into account otherwise all items.
+ Returns number of buttons in radio box. If total is 'false' then only
+ visible buttons are taken into account otherwise all buttons.
*/
int QDS_RadioBox::count( bool total ) const
{
}
/*!
- Returns list of ids. If total is 'false' then only visible items
- are taken into account otherwise all items.
+ Returns list of button identifiers \aids. If \atotal is 'false' then only visible
+ buttons are taken into account otherwise all buttons.
*/
void QDS_RadioBox::values( QValueList<int>& ids, bool total ) const
{
}
/*!
- Returns visible state of identificator.
+ Returns visible state of button specified by \aid.
*/
bool QDS_RadioBox::state( const int id ) const
{
}
/*!
- Sets the visible state of identificator. If 'id' is -1 then specified
- state will be set to all ids.
+ Sets the visible state of button specified by \aid. If \aid is -1 then specified
+ state will be set to all buttons. If \aappend is set then keep status for other
+ buttons otherwise status of other buttons will be cleared.
*/
void QDS_RadioBox::setState( const bool on, const int id, const bool append )
{
}
/*!
- Sets the visible state of identificator from the specified list.
+ Sets the visible state of buttons specified by list of identifiers \aids.
+ If \aappend is set then keep status for other buttons otherwise status of other
+ buttons will be cleared.
*/
void QDS_RadioBox::setState( const bool on, const QValueList<int>& ids, const bool append )
{
}
/*!
- Sets the user items into the combo box.
+ Sets the custom user buttons into the radio box. User buttons like standard dictionary
+ button from list will be added into the radio box. This functionality allow to user override
+ buttons.
*/
void QDS_RadioBox::setValues( const QValueList<int>& ids, const QStringList& names )
{
}
/*!
- Returns string from control.
+ Returns string from radio box. Reimplemented. String which contains identifier of
+ currently selected button returned.
*/
QString QDS_RadioBox::getString() const
{
}
/*!
- Sets the string into control.
+ Sets the string into radio box. Reimplemented. Button with identifier from specified
+ string \atxt became selected in radio box.
*/
void QDS_RadioBox::setString( const QString& txt )
{
}
/*!
- Create QComboBox widget as control subwidget.
+ Create QButtonGroup widget as control subwidget.
*/
QWidget* QDS_RadioBox::createControl( QWidget* parent )
{
return bg;
}
+/*!
+ Notification about active unit system changing. Reimplemented from QDS_Datum.
+ Update radio box content.
+*/
void QDS_RadioBox::unitSystemChanged( const QString& system )
{
QDS_Datum::unitSystemChanged( system );
}
/*!
- Notify about state changed in line edit of RadioBox.
+ Notify about activation radio button.
*/
void QDS_RadioBox::onToggled( bool on )
{
}
/*!
- Updates RadioBox after have change of visible state or items have been inserted / removed.
+ Updates RadioBox after have change of visible state or buttons have been inserted/removed.
*/
void QDS_RadioBox::updateRadioBox()
{
}
}
+/*!
+ Returns the list of the radio buttons from the button group.
+*/
void QDS_RadioBox::buttons( QPtrList<QRadioButton>& lst ) const
{
lst.setAutoDelete( false );
Q_OBJECT
public:
- QDS_RadioBox( const QString&, QWidget* = 0, const int = All, const QString& = QString::null );
+ QDS_RadioBox( const QString&, QWidget* = 0, const int = Control, const QString& = QString::null );
virtual ~QDS_RadioBox();
int count( bool = false ) const;
#include <qvalidator.h>
+/*
+ \class QDS_SpinBox
+
+ Datum with control corresponding to spin box. This control used for integer numbers.
+ User can input data directly in spin box or can modify current value with given
+ increment.
+*/
+
/*!
- Constructor.
+ Constructor. Create spin box datum object with datum identifier \aid under widget \aparent. Parameter \aflags
+ define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All.
+ Parameter \acomp specify the component name which will be used during search of dictionary item.
*/
QDS_SpinBox::QDS_SpinBox( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QDS_Datum( id, parent, flags, comp )
}
/*!
- Returns string from QSpinBox widget.
+ Returns string from QSpinBox widget. Reimplemented.
*/
QString QDS_SpinBox::getString() const
{
}
/*!
- Sets the string into QSpinBox widget.
+ Sets the string into QSpinBox widget. Reimplemented.
*/
void QDS_SpinBox::setString( const QString& txt )
{
}
/*!
- Create QSpinBox widget as control subwidget.
+ Create QSpinBox widget as control subwidget. Reimplemented.
*/
QWidget* QDS_SpinBox::createControl( QWidget* parent )
{
}
/*!
- Notify about text changing in spin box.
+ Notify about value changing in spin box.
*/
void QDS_SpinBox::onValueChanged( int val )
{
}
/*!
- This method is redefined from ancestor class to perform own initialization ( suffix, prefix, etc ).
+ Notification about active unit system changing. Reimplemented from QDS_Datum.
+ Update validator and spin box parameters: suffix, prefix, minimum, maximum.
*/
void QDS_SpinBox::unitSystemChanged( const QString& system )
{
#include <QtxDblSpinBox.h>
+/*
+ \class QDS_SpinBoxDbl
+
+ Datum with control corresponding to spin box. This control used for double numbers.
+ User can input data directly in spin box or can modify current value with given
+ increment.
+*/
+
/*!
- Constructor.
+ Constructor. Create spin box datum object with datum identifier \aid under widget \aparent. Parameter \aflags
+ define behaviour of datum and set of created subwidgets. Default value of this parameter is QDS::All.
+ Parameter \acomp specify the component name which will be used during search of dictionary item.
*/
QDS_SpinBoxDbl::QDS_SpinBoxDbl( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QDS_Datum( id, parent, flags, comp )
}
/*!
- Returns string from QSpinBox widget.
+ Returns string from QSpinBox widget. Reimplemented.
*/
QString QDS_SpinBoxDbl::getString() const
{
}
/*!
- Sets the string into QSpinBox widget.
+ Sets the string into QSpinBox widget. Reimplemented.
*/
void QDS_SpinBoxDbl::setString( const QString& txt )
{
}
/*!
- Create QSpinBox widget as control subwidget.
+ Create QSpinBox widget as control subwidget. Reimplemented.
*/
QWidget* QDS_SpinBoxDbl::createControl( QWidget* parent )
{
}
/*!
- Notify about text changing in spin box.
+ Notify about value changing in spin box.
*/
void QDS_SpinBoxDbl::onValueChanged( double )
{
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 );
--- /dev/null
+// 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<DeleteFilter> _filter = 0;
+ if ( !_filter )
+ _filter = new DeleteFilter( 0 );
+
+ if ( dat->widget( QDS::Control ) )
+ dat->widget( QDS::Control )->installEventFilter( _filter );
+}
--- /dev/null
+// 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 <QtxTable.h>
+
+#include <qmap.h>
+#include <qptrvector.h>
+
+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<QDS_Datum> DatumVector;
+ typedef QMap<int, QDS_Datum*> DatumMap;
+ typedef QMap<int, DatumMap> CellMap;
+
+private:
+ QDS_Datum* myHorEdit;
+ QDS_Datum* myVerEdit;
+ DatumVector myRowEdit;
+ DatumVector myColEdit;
+ CellMap myCellEdit;
+ QDS_Datum* myTableEdit;
+ bool myKeepEdits;
+};
+
+#endif
#include <qtextedit.h>
+/*
+ \class QDS_TextEdit
+
+ Datum with control corresponding to text edit. User can enter parameter value in multiple line editor.
+*/
+
/*!
- Constructor.
+ Constructor. Create text edit datum object with datum identifier \aid under widget \aparent.
+ Parameter \aflags define behaviour of datum and set of created subwidgets. Default value of this
+ parameter is QDS::All. Parameter \acomp specify the component name which will be used during search
+ of dictionary item.
*/
QDS_TextEdit::QDS_TextEdit( const QString& id, QWidget* parent, const int flags, const QString& comp )
: QDS_Datum( id, parent, flags, comp )
}
/*!
- Returns string from QTextEdit widget.
+ Returns string from QTextEdit widget. Reimplemented from QDS_Datum.
*/
QString QDS_TextEdit::getString() const
{
}
/*!
- Sets the string into QTextEdit widget.
+ Sets the string into QTextEdit widget. Reimplemented from QDS_Datum.
*/
void QDS_TextEdit::setString( const QString& txt )
{
}
/*!
- Notify about text changing in line edit.
+ Notify about text changing in text edit.
*/
void QDS_TextEdit::onTextChanged()
{
#include "QDS_Validator.h"
/*!
- Class: QDS_IntegerValidator
+ \class QDS_IntegerValidator
+
+ This class to provide validation of user inputted string for datum with 'Integer'
+ value type according to datum properties: minimum value, maximum value, filter.
+
+ Inherits from QIntValidator.
*/
+/*!
+ Constructor. Create empty validator object.
+*/
QDS_IntegerValidator::QDS_IntegerValidator( QObject* p )
: QIntValidator( p )
{
}
+/*!
+ Constructor. Create validator object with filter string \af.
+*/
QDS_IntegerValidator::QDS_IntegerValidator( const QString& f, QObject* p )
: QIntValidator( p ),
myFilter( f )
{
}
+/*!
+ Destructor.
+*/
QDS_IntegerValidator::~QDS_IntegerValidator()
{
}
+/*!
+ Validate the inputed string \ainput. Reimplemented from QIntValidator. Perform
+ standard check by QIntValidator::validate(). If returned state is not Invalid and
+ filter specified then perform validation with filter by QRegExpValidator.
+
+ Returns Invalid if input is invalid according to this validator's rules,
+ Intermediate if it is likely that a little more editing will make the input acceptable
+ and Acceptable if the input is valid.
+*/
QValidator::State QDS_IntegerValidator::validate( QString& input, int& pos ) const
{
State rgState = Acceptable;
}
/*!
- Class: QDS_DoubleValidator
+ \class QDS_DoubleValidator
+
+ This class to provide validation of user inputted string for datum with 'Float'
+ value type according to datum properties: minimum value, maximum value, precision, filter.
+
+ Inherits from QDoubleValidator.
*/
+/*!
+ Constructor. Create empty validator object.
+*/
QDS_DoubleValidator::QDS_DoubleValidator( QObject* p )
: QDoubleValidator( p )
{
}
+/*!
+ Constructor. Create validator object with filter string \af.
+*/
QDS_DoubleValidator::QDS_DoubleValidator( const QString& f, QObject* p )
: QDoubleValidator( p ),
myFilter( f )
{
}
+/*!
+ Destructor.
+*/
QDS_DoubleValidator::~QDS_DoubleValidator()
{
}
+/*!
+ Validate the inputed string \ainput. Reimplemented from QDoubleValidator. Perform
+ standard check by QDoubleValidator::validate(). If returned state is not Invalid and
+ filter specified then perform validation with filter by QRegExpValidator.
+
+ Returns Invalid if input is invalid according to this validator's rules,
+ Intermediate if it is likely that a little more editing will make the input acceptable
+ and Acceptable if the input is valid.
+*/
QValidator::State QDS_DoubleValidator::validate( QString& input, int& pos ) const
{
State rgState = Acceptable;
}
/*!
- Class: QDS_StringValidator
+ \class QDS_StringValidator
+
+ This class to provide validation of user inputted string for datum with 'String'
+ value type according to datum properties: format, filter.
+
+ Inherits from QDoubleValidator.
*/
+/*!
+ Constructor. Create empty validator object.
+*/
QDS_StringValidator::QDS_StringValidator( QObject* p )
: QValidator( p ),
myLen( -1 )
{
}
+/*!
+ Constructor. Create validator object with filter string \af.
+*/
QDS_StringValidator::QDS_StringValidator( const QString& f, QObject* p )
: QValidator( p ),
myFlags( f ),
{
}
+/*!
+ 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 ),
{
}
+/*!
+ Destructor.
+*/
QDS_StringValidator::~QDS_StringValidator()
{
}
+/*!
+ Returns valid string length. If length not specified -1 returned.
+*/
int QDS_StringValidator::length() const
{
return myLen;
}
-void QDS_StringValidator::setLength( const int l )
-{
- myLen = l;
+/*!
+ Sets the valid string length \al. If value less than zero valid string
+ length not specified.
+*/
+void QDS_StringValidator::setLength( const int l )
+{
+ myLen = l;
}
+/*!
+ Validate the inputed string \ainput. Reimplemented from QValidator. Convert specified
+ string to upper/lower case if the format flags contains specificator 'u'/'l'.
+ If valid string lenght is specified then check given string length. If
+ filter specified then perform validation with filter by QRegExpValidator.
+
+ Returns Invalid if input is invalid according to this validator's rules,
+ Intermediate if it is likely that a little more editing will make the input acceptable
+ and Acceptable if the input is valid.
+*/
QValidator::State QDS_StringValidator::validate( QString& input, int& pos ) const
{
if ( input.isEmpty() )
#include <qvalidator.h>
/*!
- Class: QDS_IntegerValidator
+ class QDS_IntegerValidator
*/
-
class QDS_EXPORT QDS_IntegerValidator : public QIntValidator
{
public:
};
/*!
- Class: QDS_DoubleValidator
+ class QDS_DoubleValidator
*/
-
class QDS_DoubleValidator : public QDoubleValidator
{
public:
};
/*!
- Class: QDS_StringValidator
+ class QDS_StringValidator
*/
-
class QDS_EXPORT QDS_StringValidator : public QValidator
{
public:
-
QDS_StringValidator( QObject* p = 0 );
QDS_StringValidator( const QString& f, QObject* p = 0 );
QDS_StringValidator( const QString& ft, const QString& fg, QObject* p = 0 );
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : suit
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files
+
+salomeinclude_HEADERS= Qtx.h \
+ QtxAction.h \
+ QtxColorScale.h \
+ QtxComboBox.h \
+ QtxDblSpinBox.h \
+ QtxDialog.h \
+ QtxDockAction.h \
+ QtxDockWindow.h \
+ QtxGroupBox.h \
+ QtxIntSpinBox.h \
+ QtxListAction.h \
+ QtxListBox.h \
+ QtxListOfOperations.h \
+ QtxLogoMgr.h \
+ QtxMenuButton.h \
+ QtxMRUAction.h \
+ QtxOperations.h \
+ QtxPathDialog.h \
+ QtxPopupMgr.h \
+ QtxResourceMgr.h \
+ QtxStdOperations.h \
+ QtxTable.h \
+ QtxToolBar.h \
+ QtxToolTip.h \
+ QtxParser.h \
+ QtxPopupMenu.h \
+ QtxActionMgr.h \
+ QtxActionMenuMgr.h \
+ QtxActionToolMgr.h \
+ QtxMainWindow.h \
+ QtxWorkspaceAction.h \
+ QtxWorkstackAction.h \
+ QtxListResourceEdit.h \
+ QtxWorkstack.h \
+ QtxResourceEdit.h \
+ QtxListView.h \
+ QtxDirListEditor.h \
+ QtxDblValidator.h \
+ QtxSplash.h
+
+# Libraries targets
+
+lib_LTLIBRARIES= libqtx.la
+
+dist_libqtx_la_SOURCES= \
+ Qtx.cxx \
+ QtxAction.cxx \
+ QtxColorScale.cxx \
+ QtxComboBox.cxx \
+ QtxDblSpinBox.cxx \
+ QtxDialog.cxx \
+ QtxDockAction.cxx \
+ QtxDockWindow.cxx \
+ QtxGroupBox.cxx \
+ QtxIntSpinBox.cxx \
+ QtxListAction.cxx \
+ QtxListBox.cxx \
+ QtxListOfOperations.cxx \
+ QtxLogoMgr.cxx \
+ QtxMenuButton.cxx \
+ QtxMRUAction.cxx \
+ QtxPathDialog.cxx \
+ QtxPopupMgr.cxx \
+ QtxResourceMgr.cxx \
+ QtxStdOperations.cxx \
+ QtxTable.cxx \
+ QtxToolBar.cxx \
+ QtxToolTip.cxx \
+ QtxOperations.cxx \
+ QtxParser.cxx \
+ QtxPopupMenu.cxx \
+ QtxActionMgr.cxx \
+ QtxActionMenuMgr.cxx \
+ QtxActionToolMgr.cxx \
+ QtxMainWindow.cxx \
+ QtxWorkspaceAction.cxx \
+ QtxWorkstackAction.cxx \
+ QtxListResourceEdit.cxx \
+ QtxResourceEdit.cxx \
+ QtxWorkstack.cxx \
+ QtxListView.cxx \
+ QtxDirListEditor.cxx \
+ QtxDblValidator.cxx \
+ QtxSplash.cxx
+
+MOC_FILES= \
+ QtxAction_moc.cxx \
+ QtxColorScale_moc.cxx \
+ QtxComboBox_moc.cxx \
+ QtxDblSpinBox_moc.cxx \
+ QtxDialog_moc.cxx \
+ QtxDockAction_moc.cxx \
+ QtxDockWindow_moc.cxx \
+ QtxGroupBox_moc.cxx \
+ QtxIntSpinBox_moc.cxx \
+ QtxListAction_moc.cxx \
+ QtxListBox_moc.cxx \
+ QtxLogoMgr_moc.cxx \
+ QtxMenuButton_moc.cxx \
+ QtxMRUAction_moc.cxx \
+ QtxPathDialog_moc.cxx \
+ QtxPopupMgr_moc.cxx \
+ QtxPopupMenu_moc.cxx \
+ QtxTable_moc.cxx \
+ QtxToolBar_moc.cxx \
+ QtxToolTip_moc.cxx \
+ QtxActionMgr_moc.cxx \
+ QtxActionMenuMgr_moc.cxx \
+ QtxActionToolMgr_moc.cxx \
+ QtxMainWindow_moc.cxx \
+ QtxWorkspaceAction_moc.cxx \
+ QtxWorkstackAction_moc.cxx \
+ QtxWorkstack_moc.cxx \
+ QtxListView_moc.cxx \
+ QtxListResourceEdit_moc.cxx \
+ QtxDirListEditor_moc.cxx \
+ QtxDblValidator_moc.cxx \
+ QtxSplash_moc.cxx
+nodist_libqtx_la_SOURCES= $(MOC_FILES)
+
+libqtx_la_CPPFLAGS=$(QT_INCLUDES)
+
+libqtx_la_LDFLAGS=$(QT_MT_LIBS)
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : suit
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-
-VPATH=.:@srcdir@:@srcdir@/resources
-
-@COMMENCE@
-
-# header files
-
-EXPORT_HEADERS= Qtx.h \
- QtxAction.h \
- QtxColorScale.h \
- QtxComboBox.h \
- QtxDblSpinBox.h \
- QtxDialog.h \
- QtxDockAction.h \
- QtxDockWindow.h \
- QtxGroupBox.h \
- QtxIntSpinBox.h \
- QtxListAction.h \
- QtxListBox.h \
- QtxListOfOperations.h \
- QtxLogoMgr.h \
- QtxMenuButton.h \
- QtxMRUAction.h \
- QtxOperations.h \
- QtxPathDialog.h \
- QtxPopupMgr.h \
- QtxResourceMgr.h \
- QtxStdOperations.h \
- QtxTable.h \
- QtxToolBar.h \
- QtxToolTip.h \
- QtxParser.h \
- QtxPopupMenu.h \
- QtxActionMgr.h \
- QtxActionMenuMgr.h \
- QtxActionToolMgr.h \
- QtxMainWindow.h \
- QtxWorkspaceAction.h \
- QtxWorkstackAction.h \
- QtxListResourceEdit.h \
- QtxWorkstack.h \
- QtxResourceEdit.h \
- QtxListView.h \
- QtxDirListEditor.h \
- QtxDblValidator.h \
- QtxSplash.h
-
-# .po files to transform in .qm
-
-PO_FILES = \
-
-# Libraries targets
-
-LIB = libqtx.la
-
-LIB_SRC= \
- Qtx.cxx \
- QtxAction.cxx \
- QtxColorScale.cxx \
- QtxComboBox.cxx \
- QtxDblSpinBox.cxx \
- QtxDialog.cxx \
- QtxDockAction.cxx \
- QtxDockWindow.cxx \
- QtxGroupBox.cxx \
- QtxIntSpinBox.cxx \
- QtxListAction.cxx \
- QtxListBox.cxx \
- QtxListOfOperations.cxx \
- QtxLogoMgr.cxx \
- QtxMenuButton.cxx \
- QtxMRUAction.cxx \
- QtxPathDialog.cxx \
- QtxPopupMgr.cxx \
- QtxResourceMgr.cxx \
- QtxStdOperations.cxx \
- QtxTable.cxx \
- QtxToolBar.cxx \
- QtxToolTip.cxx \
- QtxOperations.cxx \
- QtxParser.cxx \
- QtxPopupMenu.cxx \
- QtxActionMgr.cxx \
- QtxActionMenuMgr.cxx \
- QtxActionToolMgr.cxx \
- QtxMainWindow.cxx \
- QtxWorkspaceAction.cxx \
- QtxWorkstackAction.cxx \
- QtxListResourceEdit.cxx \
- QtxResourceEdit.cxx \
- QtxWorkstack.cxx \
- QtxListView.cxx \
- QtxDirListEditor.cxx \
- QtxDblValidator.cxx \
- QtxSplash.cxx
-
-LIB_MOC = \
- QtxAction.h \
- QtxColorScale.h \
- QtxComboBox.h \
- QtxDblSpinBox.h \
- QtxDialog.h \
- QtxDockAction.h \
- QtxDockWindow.h \
- QtxGroupBox.h \
- QtxIntSpinBox.h \
- QtxListAction.h \
- QtxListBox.h \
- QtxLogoMgr.h \
- QtxMenuButton.h \
- QtxMRUAction.h \
- QtxPathDialog.h \
- QtxPopupMgr.h \
- QtxPopupMenu.h \
- QtxTable.h \
- QtxToolBar.h \
- QtxToolTip.h \
- QtxActionMgr.h \
- QtxActionMenuMgr.h \
- QtxActionToolMgr.h \
- QtxMainWindow.h \
- QtxWorkspaceAction.h \
- QtxWorkstackAction.h \
- QtxWorkstack.h \
- QtxListView.h \
- QtxListResourceEdit.h \
- QtxDirListEditor.h \
- QtxDblValidator.h \
- QtxSplash.h
-
-RESOURCES_FILES = \
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-
-@CONCLUDE@
-
-
#include "Qtx.h"
#include <qdir.h>
+#include <qbitmap.h>
#include <qstring.h>
#include <qwidget.h>
#include <qlayout.h>
+#include <qpainter.h>
#include <qtoolbar.h>
#include <qgroupbox.h>
#include <qfileinfo.h>
for ( int i = 0; i < num; i++ )
lst.append( scaleColor( i, 0, num - 1 ) );
}
+
+/*!
+ Name: grayscale [static public]
+ Desc: Convert color image to grayscale image.
+*/
+QImage Qtx::grayscale( const QImage& img )
+{
+ QImage res = img;
+
+ int colNum = res.numColors();
+ if ( colNum )
+ {
+ for ( int i = 0; i < colNum; i++ )
+ res.setColor( i, qGray( res.color( i ) ) );
+ }
+ else
+ {
+ for ( int y = 0; y < res.height(); y++ )
+ {
+ for ( int x = 0; x < res.width(); x++ )
+ {
+ QRgb pix = res.pixel( x, y );
+ res.setPixel( x, y, qRgba( qGray( pix ), qGray( pix ), qGray( pix ), qAlpha( pix ) ) );
+ }
+ }
+ }
+
+ return res;
+}
+
+/*!
+ Name: grayscale [static public]
+ Desc: Convert color pixmap to grayscale pixmap.
+*/
+QPixmap Qtx::grayscale( const QPixmap& pix )
+{
+ QPixmap res;
+ res.convertFromImage( grayscale( pix.convertToImage() ) );
+ return res;
+}
+
+/*!
+ Name: transparentImage [static public]
+ Desc: Create transparent image with specified width \aw, height \ah and color depth \ad.
+*/
+QImage Qtx::transparentImage( const int w, const int h, const int d )
+{
+ QImage img;
+ if ( img.create( w, h, d < 0 ? QPixmap::defaultDepth() : d ) )
+ {
+ img.setAlphaBuffer( true );
+ for ( int i = 0; i < img.height(); i++ )
+ for ( int j = 0; j < img.width(); j++ )
+ img.setPixel( j, i, qRgba( 0, 0, 0, 0 ) );
+ }
+ return img;
+}
+
+/*!
+ Name: transparentPixmap [static public]
+ Desc: Create transparent pixmap with specified width \aw, height \ah and color depth \ad.
+*/
+QPixmap Qtx::transparentPixmap( const int w, const int h, const int d )
+{
+ QPixmap pix;
+ QImage img = transparentImage( w, h, d );
+ if ( !img.isNull() )
+ pix.convertFromImage( img );
+ return pix;
+}
+
+/*!
+ Name: composite [static public]
+ Desc: Create composite pixmap. Pixmap 'pix' draws over pixmap 'dest' with coordinates
+ specified relative upper left corner of 'dest'. If 'dest' not given then new empty
+ pixmap with appropriate size created.
+*/
+QPixmap Qtx::composite( const QPixmap& pix, const int x, const int y, const QPixmap& dest )
+{
+ if ( pix.isNull() )
+ return dest;
+
+ int width = QMAX( pix.width() + x, dest.width() );
+ int height = QMAX( pix.height() + y, dest.height() );
+
+ QPixmap res( width, height );
+ QImage img = transparentImage( width, height, 32 );
+
+ QPainter p;
+ p.begin( &res );
+ p.fillRect( 0, 0, width, height, QBrush( white ) );
+
+ if ( !dest.isNull() )
+ {
+ p.drawPixmap( 0, 0, dest );
+ QImage temp = dest.convertToImage();
+ for ( int i = 0; i < temp.width() && i < img.width(); i++ )
+ {
+ for ( int j = 0; j < temp.height() && j < img.height(); j++ )
+ {
+ if ( temp.hasAlphaBuffer() )
+ img.setPixel( i, j, temp.pixel( i, j ) );
+ else
+ {
+ QRgb p = temp.pixel( i, j );
+ img.setPixel( i, j, qRgba( qRed( p ), qGreen( p ), qBlue( p ), 255 ) );
+ }
+ }
+ }
+ }
+
+ p.drawPixmap( x, y, pix );
+ QImage temp = pix.convertToImage();
+ for ( int c = x; c < temp.width() + x && c < img.width(); c++ )
+ {
+ for ( int r = y; r < temp.height() + y && r < img.height(); r++ )
+ {
+ if ( qAlpha( temp.pixel( c - x, r - y ) ) > 0 )
+ img.setPixel( c, r, temp.pixel( c - x, r - y ) );
+ }
+ }
+
+ p.end();
+
+ for ( int ai = 0; ai < img.width(); ai++ )
+ {
+ for ( int aj = 0; aj < img.height(); aj++ )
+ {
+ if ( qAlpha( img.pixel( ai, aj ) ) < 1 )
+ img.setPixel( ai, aj, qRgba( 255, 255, 255, 255 ) );
+ else
+ img.setPixel( ai, aj, qRgba( 0, 0, 0, 0 ) );
+ }
+ }
+
+ QBitmap bmp( width, height );
+ bmp.convertFromImage( img, Qt::ColorMode_Mask | Qt::ThresholdDither );
+ res.setMask( bmp );
+
+ return res;
+}
#endif
#endif
+#include <qimage.h>
+#include <qpixmap.h>
+
class QObject;
class QString;
class QWidget;
static QColor scaleColor( const int, const int, const int );
static void scaleColors( const int, QValueList<QColor>& );
+
+ static QImage grayscale( const QImage& );
+ static QPixmap grayscale( const QPixmap& );
+ static QImage transparentImage( const int, const int, const int = -1 );
+ static QPixmap transparentPixmap( const int, const int, const int = -1 );
+ static QPixmap composite( const QPixmap&, const int, const int, const QPixmap& = QPixmap() );
};
#endif
successfully and false otherwise.
*/
-bool QtxAction::addTo( QWidget* w, int index )
+bool QtxAction::addTo( QWidget* w, const int index )
{
if ( !addTo( w ) )
return false;
if ( !w )
return;
- if ( !w->inherits( "QPopupMenu" ) && !w->inherits( "QMenuBar" ) )
- return; // unsupported widget type
+ QMenuData* pmd = 0;
+
+ if ( w->inherits( "QPopupMenu" ) )
+ pmd = ::qt_cast<QPopupMenu*>( w );
+ else if ( w->inherits( "QMenuBar" ) )
+ pmd = ::qt_cast<QMenuBar*>( w );
- QMenuData* md = 0;
- QMenuData* pmd = dynamic_cast<QMenuData*>( w );
if ( !pmd )
return; // bad widget
-
+
+ QMenuData* md = 0;
QMenuItem* item = pmd->findItem( id, &md );
if ( !item || md != pmd )
return; // item is not found
#include <qaction.h>
#include <qmap.h>
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
class QTX_EXPORT QtxAction : public QAction
{
Q_OBJECT
virtual ~QtxAction();
virtual bool addTo( QWidget* );
- virtual bool addTo( QWidget*, int );
+ virtual bool addTo( QWidget*, const int );
virtual bool removeFrom( QWidget* );
protected:
QMap<QWidget*,int> myMenuIds;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
QValueList<int> l;
const QMenuData* md = 0;
if ( w->inherits( "QMenuBar" ) )
- md = dynamic_cast<const QMenuData*>( w );
+ md = ::qt_cast<QMenuBar*>( w );
else if ( w->inherits( "QPopupMenu" ) )
- md = dynamic_cast<const QMenuData*>( w );
+ md = ::qt_cast<QPopupMenu*>( w );
if ( md ) {
- for ( int i=0; i < md->count(); i++ )
- l.append( md->idAt( i ) );
+ for ( uint i = 0; i < md->count(); i++ )
+ l.append( md->idAt( i ) );
}
return l;
}
{
const QMenuData* md = 0;
if ( w->inherits( "QMenuBar" ) )
- md = dynamic_cast<const QMenuData*>( w );
+ md = ::qt_cast<QMenuBar*>( w );
else if ( w->inherits( "QPopupMenu" ) )
- md = dynamic_cast<const QMenuData*>( w );
- if ( md ) {
- for ( int i=0, j=0; i < md->count() && j < l.count(); i++, j++ )
- if ( md->idAt( i ) != l[ j ] ) return retId ? md->idAt( i ) : i;
- if ( md->count() > l.count() ) return retId ? md->idAt( md->count()-1 ) : md->count()-1;
+ md = ::qt_cast<QPopupMenu*>( w );
+ if ( md )
+ {
+ for ( uint i = 0, j = 0; i < md->count() && j < l.count(); i++, j++ )
+ if ( md->idAt( i ) != l[ j ] )
+ return retId ? md->idAt( i ) : i;
+ if ( md->count() > l.count() )
+ return retId ? md->idAt( md->count()-1 ) : md->count() - 1;
}
return -1;
}
void dumpMenu( QWidget* w, bool before )
{
- QMenuData* md = dynamic_cast<QMenuData*>( w );
- if ( !w ) return;
- printf(">>> start dump menu (%s) >>>\n", before ? "before" : "after" );
- for( int i = 0; i < md->count(); i++ )
- printf("%d: %d: %s\n",i,md->idAt(i),md->text(md->idAt(i)).latin1() );
- printf("<<< end dump menu (%s) <<<\n", before ? "before" : "after" );
+ if ( !w )
+ return;
+
+ QMenuData* md = 0;
+ if ( w->inherits( "QMenuBar" ) )
+ md = ::qt_cast<QMenuBar*>( w );
+ else if ( w->inherits( "QPopupMenu" ) )
+ md = ::qt_cast<QPopupMenu*>( w );
+
+ if ( !md )
+ return;
+
+ printf( ">>> start dump menu (%s) >>>\n", before ? "before" : "after" );
+ for ( uint i = 0; i < md->count(); i++ )
+ printf( "%d: %d: %s\n", i, md->idAt( i ), md->text( md->idAt( i ) ).latin1() );
+ printf( "<<< end dump menu (%s) <<<\n", before ? "before" : "after" );
}
};
{
NodeList& lst = idMap[it2.current()->group];
int idx = it2.current()->idx;
- if ( idx < 0 || idx >= lst.count() )
+ if ( idx < 0 || idx >= (int)lst.count() )
lst.append( it2.current() );
else
lst.insert( idx, it2.current() );
#ifndef QTX_DOUBLE_VALIDATOR
#define QTX_DOUBLE_VALIDATOR
+#include "Qtx.h"
+
#include <qvalidator.h>
-class QtxDblValidator : public QDoubleValidator
+class QTX_EXPORT QtxDblValidator : public QDoubleValidator
{
Q_OBJECT
QtxDialog::QtxDialog( QWidget* parent, const char* name,
bool modal, bool allowResize, const int f, WFlags wf )
: QDialog( parent, name, modal,
-#ifdef WIN32
wf | WStyle_Customize | WStyle_Title | WStyle_SysMenu |
- ( allowResize ? WStyle_NormalBorder : WStyle_NoBorderEx ) ),
+#ifdef WIN32
+ ( allowResize ? WStyle_NormalBorder : WStyle_NoBorderEx ) |
#else
- wf | WStyle_NormalBorder | WStyle_Customize | WStyle_Title | WStyle_SysMenu ),
+ WStyle_NormalBorder |
#endif
+ ( allowResize ? WStyle_Maximize : 0 ) ),
mySender( 0 ),
myAlignment( 0 ),
myInited( false ),
void QtxDockWindow::setWidget( QWidget* wid )
{
if ( wid )
- wid->reparent( this, QPoint( 0, 0 ), wid->isVisibleTo( wid->parentWidget() ) );
+ {
+ if ( wid->parentWidget() != this )
+ wid->reparent( this, QPoint( 0, 0 ), wid->isVisibleTo( wid->parentWidget() ) );
+ if ( myWatcher )
+ {
+ setCaption( wid->caption() );
+ if ( wid->icon() )
+ setIcon( *wid->icon() );
+ }
+ }
QDockWindow::setWidget( wid );
}
QtxListAction::~QtxListAction()
{
- if ( myFrame )
+ if ( myFrame ) {
myFrame->myAction = 0;
+ delete myFrame;
+ myFrame = 0;
+ }
}
/*!
void QtxListResourceEdit::SelectItem::store()
{
int idx = myList->currentItem();
- if ( myIndex.contains( idx ) )
- setInteger( myIndex[idx] );
+ if ( idx >= 0 )
+ setInteger( myIndex.contains( idx ) ? myIndex[idx] : idx );
}
/*!
{
int id = getInteger( -1 );
- int idx = -1;
- for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end() && idx == -1; ++it )
+ for ( QMap<int, int>::ConstIterator it = myIndex.begin(); it != myIndex.end(); ++it )
{
- if ( it.data() == id )
- idx = it.key();
+ if ( it.data() == id ) {
+ myList->setCurrentItem( it.key() );
+ return;
+ }
}
-
- myList->setCurrentItem( idx );
+ if ( id >= 0 )
+ myList->setCurrentItem( id );
}
/*!
mySizes->setInsertionPolicy( QComboBox::NoInsertion );
myBold = new QCheckBox( tr( "Bold" ), this );
myItalic = new QCheckBox( tr( "Italic" ), this );
- myUnderline = new QCheckBox( tr( "Underline" ), this );
+ myUnderline = new QCheckBox( tr( "Shadow" ), this );
myPreview = new QToolButton( this );
myPreview->setText( "..." );
if( myFileDlg->exec()==QDialog::Accepted )
{
- myFile->setText( myFileDlg->selectedFile() );
+ QString selFile = QDir::convertSeparators( myFileDlg->selectedFile() );
+ myFile->setText( selFile );
}
}
virtual void update();
- QVariant property( const QString& ) const;
+ virtual QVariant property( const QString& ) const;
virtual void setProperty( const QString&, const QVariant& );
virtual void store() = 0;
QString dirs;
if ( ::getenv( envVar ) )
dirs = ::getenv( envVar );
-#ifdef WNT
+#ifdef WIN32
QString dirsep = ";"; // for Windows: ";" is used as directories separator
#else
QString dirsep = "[:|;]"; // for Linux: both ":" and ";" can be used
QStringList prefList = myTranslator.keys();
for ( QStringList::const_iterator it = prefList.begin(); it != prefList.end(); ++it )
removeTranslators( *it );
+ for ( ResListIterator resIt( myResources ); resIt.current(); ++resIt )
+ delete resIt.current();
+ myResources.clear();
+ for ( FormatListIterator formIt( myFormats ); formIt.current(); ++formIt )
+ delete formIt.current();
}
/*!
bool myIsPixmapCached;
bool myIsIgnoreUserValues;
+
+ friend class QtxResourceMgr::Format;
};
/*!
{
public:
Format( const QString& );
- ~Format();
+ virtual ~Format();
QString format() const;
myGradientType = Vertical;
myError = 0;
myStartColor = red;
+ myMargin = 5;
setPixmap( pixmap );
}
return myAlignment;
}
+/*!
+ \brief Set margin.
+
+ Margin is used when drawing progress bar and status messages.
+
+ \param m new margin
+ \sa margin()
+*/
+void QtxSplash::setMargin( const int m )
+{
+ myMargin = m;
+ repaint();
+}
+
+/*!
+ \brief Get margin.
+ \return current margin.
+ \sa setMargin()
+*/
+int QtxSplash::margin() const
+{
+ return myMargin;
+}
+
/*!
Sets message text color to \a color.
Default is white.
void QtxSplash::drawContents( QPainter* painter )
{
QRect r = rect();
+ int m = margin();
if ( myTotal > 0 ) {
- // draw progress bar outline rectangle
- painter->setPen( palette().active().dark() );
- painter->drawLine( r.x()+5,
- r.height()-5-_PROGRESS_WIDTH,
- r.width()-5,
- r.height()-5-_PROGRESS_WIDTH );
- painter->drawLine( r.x()+5,
- r.height()-5-_PROGRESS_WIDTH,
- r.x()+5,
- r.height()-5 );
- painter->setPen( palette().active().light() );
- painter->drawLine( r.x()+5,
- r.height()-5,
- r.width()-5,
- r.height()-5 );
- painter->drawLine( r.width()-5,
- r.height()-5-_PROGRESS_WIDTH,
- r.width()-5,
- r.height()-5 );
// draw progress bar
if ( myGradientType == Horizontal ) {
- int tng = r.width() - r.x() - 11;
+ int tng = r.width() - r.x() - m*2;
int ng = (int) ( 1.0 * tng * ( myProgress > 0 ? myProgress : 0 ) / myTotal );
int h1, h2, s1, s2, v1, v2;
myStartColor.hsv( &h1, &s1, &v1 );
s1 + ((s2-s1)*i)/(tng-1),
v1 + ((v2-v1)*i)/(tng-1),
QColor::Hsv ) );
- painter->drawLine( r.x()+6+i,
- r.height()-5-_PROGRESS_WIDTH+1,
- r.x()+6+i,
- r.height()-6 );
+ painter->drawLine( r.x()+m+i,
+ r.height()-m-_PROGRESS_WIDTH,
+ r.x()+m+i,
+ r.height()-m );
}
}
else {
- int ng = (int) ( 1.0 * (r.width() - r.x() - 11) * ( myProgress > 0 ? myProgress : 0 ) / myTotal );
+ int ng = (int) ( 1.0 * (r.width() - r.x() - m*2 - 1) * ( myProgress > 0 ? myProgress : 0 ) / myTotal );
int h1, h2, s1, s2, v1, v2;
myStartColor.hsv( &h1, &s1, &v1 );
myEndColor.isValid() ? myEndColor.hsv( &h2, &s2, &v2 ) :
myStartColor.hsv( &h2, &s2, &v2 );
- for ( int i = 0; i < _PROGRESS_WIDTH-1; i++ ) {
- painter->setPen( QColor( h1 + ((h2-h1)*i)/(_PROGRESS_WIDTH-2),
- s1 + ((s2-s1)*i)/(_PROGRESS_WIDTH-2),
- v1 + ((v2-v1)*i)/(_PROGRESS_WIDTH-2),
+ for ( int i = 0; i < _PROGRESS_WIDTH; i++ ) {
+ painter->setPen( QColor( h1 + ((h2-h1)*i)/(_PROGRESS_WIDTH-1),
+ s1 + ((s2-s1)*i)/(_PROGRESS_WIDTH-1),
+ v1 + ((v2-v1)*i)/(_PROGRESS_WIDTH-1),
QColor::Hsv ) );
- painter->drawLine( r.x()+6,
- r.height()-5-_PROGRESS_WIDTH+1+i,
- r.x()+6+ng-1,
- r.height()-5-_PROGRESS_WIDTH+1+i );
+ painter->drawLine( r.x()+m,
+ r.height()-m-_PROGRESS_WIDTH+i,
+ r.x()+m+ng,
+ r.height()-m-_PROGRESS_WIDTH+i );
}
}
+ // draw progress bar outline rectangle
+ painter->setPen( palette().active().dark() );
+ painter->drawLine( r.x()+m,
+ r.height()-m-_PROGRESS_WIDTH,
+ r.width()-m,
+ r.height()-m-_PROGRESS_WIDTH );
+ painter->drawLine( r.x()+m,
+ r.height()-m-_PROGRESS_WIDTH,
+ r.x()+m,
+ r.height()-m );
+ painter->setPen( palette().active().light() );
+ painter->drawLine( r.x()+m,
+ r.height()-m,
+ r.width()-m,
+ r.height()-m );
+ painter->drawLine( r.width()-m,
+ r.height()-m-_PROGRESS_WIDTH,
+ r.width()-m,
+ r.height()-m );
}
// draw status
if ( !myMessage.isEmpty() ) {
int i = myMessage.length() - 1;
while( i >= 0 && myMessage[ i-- ] == '\n' )
shift += spacing;
- QRect r1( r.x() + 5, r.y() + 5, r.width() - 10, r.height() - 10 - shift );
+ QRect r1( r.x() + m, r.y() + m, r.width() - m*2, r.height() - m*2 - shift );
QRect r2 = r1;
if ( myAlignment & Qt::AlignLeft ) r2.setLeft ( r2.left() + 1 );
if ( myAlignment & Qt::AlignTop ) r2.setTop ( r2.top() + 1 );
void setTextAlignment( const int );
int textAlignment() const;
+ void setMargin( const int );
+ int margin() const;
+
void setTextColor( const QColor& );
QColor textColor() const;
void setTextColors( const QColor&, const QColor& = QColor() );
QColor myEndColor;
int myGradientType;
int myError;
+ int myMargin;
};
#endif
*/
void QtxWorkstack::onContextMenuRequested( QWidget* w, QPoint p )
{
- QtxWorkstackArea* anArea = dynamic_cast<QtxWorkstackArea*>( (QObject*)sender() );
+ QtxWorkstackArea* anArea = ::qt_cast<QtxWorkstackArea*>( (QObject*)sender() );
if ( !anArea )
anArea = activeArea();
myActionsMap[Rename]->addTo( pm );
}
+ Qtx::simplifySeparators( pm );
+
if ( pm->count() )
pm->exec( p );
//Cuts starting '(' symbol and ending '(' symbol
void cutBrackets( QString& parameters )
{
- if ( !parameters.isEmpty() && parameters[0] == '(' && parameters[parameters.length()-1] == ')' )
+ QChar c1 = parameters[0];
+ QChar c2 = parameters[int(parameters.length()-1)];
+ if ( !parameters.isEmpty() && c1 == '(' && c2 == ')' )
parameters = parameters.mid( 1, parameters.length()-2 );
}
{
QString params( parameters );
// 1. begins and ends with brackets
- bool ok = ( params[0] == '(' && params[params.length()-1] == ')' );
+ QChar c1 = params[0];
+ QChar c2 = params[int(params.length()-1)];
+ bool ok = ( c1 == '(' && c2 == ')' );
if ( !ok ) return ok;
::cutBrackets( params );
// 2. has splitter word
int i = 1,
nOpen = 1, // count brackets: '(' increments nOpen, ')' decrements
start = 0;
- while ( i < str.length() ) {
- if ( str[i] == '(' ) {
+ while ( i < (int)str.length() )
+ {
+ if ( str[i] == '(' )
+ {
nOpen++;
if ( nOpen == 1 )
start = i;
}
- else if ( str[i] == ')' ) {
+ else if ( str[i] == ')' )
+ {
nOpen--;
if ( nOpen == 0 )
lst.append( str.mid( start, i-start+1 ) );
QWidget* view = 0;
QObjectList *l = parent->topLevelWidget()->queryList( "QWidget", aName, false, true );
if ( !l->isEmpty() )
- view = dynamic_cast<QWidget*>( l->first() );
+ view = ::qt_cast<QWidget*>( l->first() );
delete l;
return view;
}
// get splitter sizes and store it in the map for future setting
QValueList<int> sizes;
QStringList sizesLst = QStringList::split( ':', ::getValue( params, "sizes" ) );
- for ( QStringList::Iterator it = sizesLst.begin(); it != sizesLst.end(); ++it )
+ QStringList::Iterator it;
+ for ( it = sizesLst.begin(); it != sizesLst.end(); ++it )
sizes.append( (*it).toInt() );
sMap[ splitter ] = sizes;
qApp->processEvents();
// restore splitters' sizes (map of sizes is filled in setSplitters)
- for ( QMap< QSplitter*, QValueList<int> >::Iterator it = sMap.begin(); it != sMap.end(); ++it )
- it.key()->setSizes( it.data() );
+ for ( QMap< QSplitter*, QValueList<int> >::Iterator itm = sMap.begin(); itm != sMap.end(); ++itm )
+ itm.key()->setSizes( itm.data() );
return (*this);
}
{
QFont aFont = font();
aFont.setUnderline( on );
- QColorGroup* aColGrp = new QColorGroup();
+ QColorGroup aColGrp;
QPalette aPal = palette();
if ( !on ) {
- aPal.setColor( QColorGroup::HighlightedText, aColGrp->foreground() );
+ aPal.setColor( QColorGroup::HighlightedText, aColGrp.foreground() );
aPal.setColor( QColorGroup::Highlight, colorGroup().dark().light( DARK_COLOR_LIGHT ) );
setPalette( aPal );
}
else {
- aPal.setColor( QColorGroup::HighlightedText, aColGrp->highlightedText() );
- aPal.setColor( QColorGroup::Highlight, aColGrp->highlight() );
+ aPal.setColor( QColorGroup::HighlightedText, aColGrp.highlightedText() );
+ aPal.setColor( QColorGroup::Highlight, aColGrp.highlight() );
unsetPalette();
}
setFont( aFont );
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libQxGraph.la
+
+salomeinclude_HEADERS= \
+ QxGraph_ActiveItem.h \
+ QxGraph_Prs.h \
+ QxGraph_Canvas.h \
+ QxGraph_CanvasView.h \
+ QxGraph_ViewWindow.h \
+ QxGraph_ViewManager.h \
+ QxGraph_ViewModel.h \
+ QxGraph_Def.h \
+ QxGraph.h
+
+dist_libQxGraph_la_SOURCES= \
+ QxGraph_Prs.cxx \
+ QxGraph_Canvas.cxx \
+ QxGraph_CanvasView.cxx \
+ QxGraph_ViewWindow.cxx \
+ QxGraph_ViewManager.cxx \
+ QxGraph_ViewModel.cxx
+
+MOC_FILES= \
+ QxGraph_Canvas_moc.cxx \
+ QxGraph_CanvasView_moc.cxx \
+ QxGraph_ViewWindow_moc.cxx \
+ QxGraph_ViewManager_moc.cxx \
+ QxGraph_ViewModel_moc.cxx
+
+nodist_libQxGraph_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA= \
+ resources/view_fitall.png \
+ resources/view_fitarea.png \
+ resources/view_glpan.png \
+ resources/view_pan.png \
+ resources/view_reset.png \
+ resources/view_zoom.png
+
+nodist_salomeres_DATA= \
+ QxGraph_images.qm \
+ QxGraph_msg_en.qm
+
+libQxGraph_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT
+libQxGraph_la_LDFLAGS=$(QT_MT_LIBS) ../SUIT/libsuit.la
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifdef WNT
+#ifdef QXGRAPH_EXPORTS
+#define QXGRAPH_EXPORT __declspec(dllexport)
+#else
+#define QXGRAPH_EXPORT __declspec(dllimport)
+#endif
+#else
+#define QXGRAPH_EXPORT
+#endif
+
+#ifdef WNT
+#pragma warning ( disable:4251 )
+#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef QXGRAPH_ACTIVEITEM_H
+#define QXGRAPH_ACTIVEITEM_H
+
+#include "QxGraph.h"
+
+#include <qpoint.h>
+#include <qwmatrix.h>
+#include <qevent.h>
+
+class QXGRAPH_EXPORT QxGraph_ActiveItem
+{
+ public:
+ QxGraph_ActiveItem() {}
+ ~QxGraph_ActiveItem() {}
+
+ virtual bool isMoveable() = 0;
+ virtual void beforeMoving() = 0;
+ virtual void afterMoving() = 0;
+
+ virtual bool isResizable(QPoint thePoint, int& theCursorType) { return false; }
+ virtual bool isResizing() { return false; }
+ virtual void beforeResizing(int theCursorType) {}
+ virtual void resize(QPoint thePoint) {}
+ virtual void afterResizing() {}
+
+ virtual void hilight(const QPoint& theMousePos, const bool toHilight = true) = 0;
+ virtual void select(const QPoint& theMousePos, const bool toSelect = true) = 0;
+ virtual void showPopup(QWidget* theParent, QMouseEvent* theEvent, const QPoint& theMousePos = QPoint()) = 0;
+
+ virtual QString getToolTipText(const QPoint& theMousePos, QRect& theRect) const = 0;
+
+ virtual bool arePartsOfOtherItem(QxGraph_ActiveItem* theSecondItem) { return false; }
+
+ void setTMatrix(QWMatrix theMatrix) { myTMatrix = theMatrix; }
+ QWMatrix getTMatrix() const { return myTMatrix; }
+
+ private:
+ QWMatrix myTMatrix; // canvas view's current transformation matrix
+};
+
+#endif
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "QxGraph_Canvas.h"
+#include "QxGraph_Def.h"
+#include "QxGraph_Prs.h"
+
+#include <SUIT_ResourceMgr.h>
+
+#include <qobjectlist.h>
+#include <QxGraph_CanvasView.h>
+
+/*!
+ Constructor
+*/
+QxGraph_Canvas::QxGraph_Canvas(SUIT_ResourceMgr* theMgr) :
+ QCanvas()
+{
+ printf("Construct QxGraph_Canvas\n");
+
+ resize(GRAPH_WIDTH, GRAPH_HEIGHT);
+ setDoubleBuffering(true);
+
+ QColor aColor = theMgr->colorValue( "QxGraph", "Background", DEF_BACK_COLOR );
+ setBackgroundColor(aColor);
+}
+
+/*!
+ Destructor
+*/
+QxGraph_Canvas::~QxGraph_Canvas()
+{
+ /*QObjectList* aNodeList = queryList("QObject");
+ QObjectListIt aIt(*aNodeList);
+ QObject* anObj;
+ while ( (anObj = aIt.current()) != 0 ) {
+ ++aIt;
+ aNodeList->removeRef(anObj);
+ delete anObj;
+ }
+ delete aNodeList;*/
+
+ myPrsList.setAutoDelete(true);
+ myPrsList.clear();
+}
+
+/*!
+ Add view
+*/
+void QxGraph_Canvas::addView(QCanvasView* theView)
+{
+ myViews.append( theView );
+ QCanvas::addView(theView);
+ theView->setPaletteBackgroundColor(backgroundColor().light(120));
+}
+
+/*!
+ Remove view
+*/
+void QxGraph_Canvas::removeView( QCanvasView* theView )
+{
+ myViews.remove( theView );
+}
+
+/*!
+ Remove item
+*/
+void QxGraph_Canvas::removeItem( QCanvasItem* theItem )
+{
+ QValueList< QCanvasView* >::iterator anIter;
+ for ( anIter = myViews.begin(); anIter != myViews.end(); ++anIter )
+ {
+ QxGraph_CanvasView* aView = dynamic_cast<QxGraph_CanvasView*>( *anIter );
+ if ( aView )
+ aView->itemRemoved( theItem );
+ }
+
+ QCanvas::removeItem( theItem );
+}
+
+/*!
+ Get Prs object with index theIndex
+*/
+QxGraph_Prs* QxGraph_Canvas::getPrs(int theIndex)
+{
+ QxGraph_Prs* aRetPrs = 0;
+ if ( theIndex >= 0 && theIndex < myPrsList.count() )
+ aRetPrs = myPrsList.at(theIndex);
+ return aRetPrs;
+}
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef QXGRAPH_CANVAS_H
+#define QXGRAPH_CANVAS_H
+
+#include "QxGraph.h"
+
+#include <qcanvas.h>
+#include <qptrlist.h>
+
+class SUIT_ResourceMgr;
+class QxGraph_Prs;
+
+class QXGRAPH_EXPORT QxGraph_Canvas : public QCanvas {
+ Q_OBJECT
+
+ public:
+ QxGraph_Canvas(SUIT_ResourceMgr*);
+ virtual ~QxGraph_Canvas();
+
+ virtual void addView(QCanvasView* theView);
+ virtual void removeView(QCanvasView*);
+
+ QPtrList<QxGraph_Prs> getPrsList() const { return myPrsList; }
+ QxGraph_Prs* getPrs(int theIndex = 0);
+ void addPrs(QxGraph_Prs* thePrs) { myPrsList.append(thePrs); }
+
+ virtual void removeItem( QCanvasItem* );
+
+private:
+
+ QValueList< QCanvasView* > myViews;
+ QPtrList<QxGraph_Prs> myPrsList;
+
+};
+
+#endif
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "QxGraph_CanvasView.h"
+#include "QxGraph_Canvas.h"
+#include "QxGraph_ViewWindow.h"
+#include "QxGraph_ActiveItem.h"
+#include "QxGraph_Def.h"
+
+#include <qwmatrix.h>
+#include <math.h>
+
+const char* imageZoomCursor[] = {
+"32 32 3 1",
+". c None",
+"a c #000000",
+"# c #ffffff",
+"................................",
+"................................",
+".#######........................",
+"..aaaaaaa.......................",
+"................................",
+".............#####..............",
+"...........##.aaaa##............",
+"..........#.aa.....a#...........",
+".........#.a.........#..........",
+".........#a..........#a.........",
+"........#.a...........#.........",
+"........#a............#a........",
+"........#a............#a........",
+"........#a............#a........",
+"........#a............#a........",
+".........#...........#.a........",
+".........#a..........#a.........",
+".........##.........#.a.........",
+"........#####.....##.a..........",
+".......###aaa#####.aa...........",
+"......###aa...aaaaa.......#.....",
+".....###aa................#a....",
+"....###aa.................#a....",
+"...###aa...............#######..",
+"....#aa.................aa#aaaa.",
+".....a....................#a....",
+"..........................#a....",
+"...........................a....",
+"................................",
+"................................",
+"................................",
+"................................"};
+
+const char* imageCrossCursor[] = {
+ "32 32 3 1",
+ ". c None",
+ "a c #000000",
+ "# c #ffffff",
+ "................................",
+ "................................",
+ "................................",
+ "................................",
+ "................................",
+ "................................",
+ "................................",
+ "...............#................",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ ".......#################........",
+ "........aaaaaaa#aaaaaaaaa.......",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "...............#a...............",
+ "................a...............",
+ "................................",
+ "................................",
+ "................................",
+ "................................",
+ "................................",
+ "................................",
+ "................................"};
+
+/*!
+ Constructor
+*/
+QxGraph_CanvasView::QxGraph_CanvasView(QxGraph_Canvas* theCanvas, QxGraph_ViewWindow* theViewWindow) :
+ QCanvasView(theCanvas, theViewWindow, 0, Qt::WRepaintNoErase),
+ myCurrentItem(0),
+ myHilightedItem(0),
+ mySelectedItem(0),
+ myMovingDone(false),
+ myCenter(0,0)
+{
+ printf("Construct QxGraph_CanvasView\n");
+ setName("QxGraph_CanvasView");
+
+ myOperation = NOTHING;
+ myCursor = cursor();
+ mySelectedRect = 0;
+
+ myTimer = new QTimer(this);
+ connect(myTimer, SIGNAL(timeout()), this, SLOT(onTimeout()));
+
+ viewport()->setMouseTracking(true);
+}
+
+/*!
+ Destructor
+*/
+QxGraph_CanvasView::~QxGraph_CanvasView()
+{
+}
+
+void QxGraph_CanvasView::contentsMousePressEvent(QMouseEvent* theEvent)
+{
+ myPoint = inverseWorldMatrix().map(theEvent->pos());
+ myGlobalPoint = theEvent->globalPos();
+ myCurrentItem = 0;
+
+ if ( theEvent->button() == Qt::MidButton && theEvent->state() == Qt::ControlButton
+ ||
+ myOperation == PANVIEW )
+ { // Panning
+ if ( myOperation != PANVIEW ) {
+ myOperation = PANVIEW;
+ myCursor = cursor(); // save old cursor
+ QCursor panCursor (Qt::SizeAllCursor);
+ setCursor(panCursor);
+ }
+ return;
+ }
+
+ if ( myOperation == PANGLOBAL )
+ { // Global panning
+ return;
+ }
+
+ if ( myOperation == WINDOWFIT )
+ { // Fit area
+ return;
+ }
+
+ if ( theEvent->button() == Qt::LeftButton && theEvent->state() == Qt::ControlButton
+ ||
+ myOperation == ZOOMVIEW )
+ { // Zoom
+ if ( myOperation != ZOOMVIEW ) {
+ myOperation = ZOOMVIEW;
+ myCursor = cursor(); // save old cursor
+ QPixmap zoomPixmap (imageZoomCursor);
+ QCursor zoomCursor (zoomPixmap);
+ setCursor(zoomCursor);
+
+ // the center of the view before zooming
+ int aXVCenter = viewport()->width()/2;
+ int aYVCenter = viewport()->height()/2;
+ myCenter = viewportToContents(QPoint(aXVCenter,aYVCenter));
+ }
+ return;
+ }
+
+ if ( theEvent->button() == Qt::LeftButton )
+ {
+ QCanvasItemList aList = canvas()->collisions(myPoint);
+ // to move items on canvas view
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ int aCursorType;
+ if ( anActItem && anActItem->isResizable(myPoint,aCursorType) )
+ { // resize itself only active items if it is resizable
+ anActItem->beforeResizing(aCursorType);
+ myCurrentItem = *it;
+ return;
+ }
+ else if ( anActItem && anActItem->isMoveable() )
+ { // move itself only active items if it is moveable
+ anActItem->beforeMoving();
+ myCurrentItem = *it;
+ return;
+ }
+ }
+ }
+}
+
+void QxGraph_CanvasView::contentsMouseMoveEvent(QMouseEvent* theEvent)
+{
+ QPoint aPoint = inverseWorldMatrix().map(theEvent->pos());
+ QPoint aGlobalPoint = theEvent->globalPos();
+
+ if (myTimer->isActive()) myTimer->stop();
+
+ if ( myOperation == PANVIEW )
+ { // Panning
+ scrollBy(myGlobalPoint.x() - aGlobalPoint.x(),
+ myGlobalPoint.y() - aGlobalPoint.y());
+ myGlobalPoint = aGlobalPoint;
+ myMovingDone = true;
+ return;
+ }
+
+ if ( myOperation == WINDOWFIT )
+ { // Fit within rectangle
+ int aLX, aTY; //left x and top y
+ if (myPoint.x() < aPoint.x()) aLX = myPoint.x();
+ else aLX = aPoint.x();
+ if (myPoint.y() < aPoint.y()) aTY = myPoint.y();
+ else aTY = aPoint.y();
+ QRect aRect(aLX, aTY, abs(myPoint.x()-aPoint.x()), abs(myPoint.y()-aPoint.y()));
+ QCanvasRectangle* aRect1 = new QCanvasRectangle(aRect, canvas());
+
+ //hide old selected rectangle
+ if (mySelectedRect)
+ mySelectedRect->hide();
+ //draw new selected rectangle
+ QPen pen(Qt::black,1,Qt::SolidLine);
+ aRect1->setPen(pen);
+ aRect1->setZ(1E+6);
+ aRect1->show();
+
+ mySelectedRect = aRect1;
+ canvas()->update();
+
+ return;
+ }
+
+ if ( myOperation == ZOOMVIEW )
+ { // Zoom
+ QCanvasItemList aList = canvas()->allItems();
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it)
+ (*it)->hide();
+
+ int aXContCenter = myCenter.x();
+ int aYContCenter = myCenter.y();
+
+ QWMatrix m = worldMatrix();
+
+ double dx = aGlobalPoint.x() - myGlobalPoint.x();
+ double s = 1. + fabs(dx)*( (m.m11() < 1) ? m.m11() : 1. )/70.;
+ if (dx < 0) s = 1./s;
+
+ int aXContCenterScaled = aXContCenter*s;
+ int aYContCenterScaled = aYContCenter*s;
+
+ m.scale(s, s);
+ setWorldMatrix(m);
+
+ center(aXContCenterScaled,aYContCenterScaled);
+
+ myCenter.setX(aXContCenterScaled);
+ myCenter.setY(aYContCenterScaled);
+
+ // remember the canvas view's current transformation matrix in all canvas items
+ aList = canvas()->allItems();
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ if ( anActItem ) anActItem->setTMatrix(m);
+ (*it)->show();
+ }
+
+ myGlobalPoint = aGlobalPoint;
+ myMovingDone = true;
+
+ return;
+ }
+
+ if ( myCurrentItem )
+ {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( myCurrentItem );
+ if ( anActItem && anActItem->isResizing() )
+ { // to resize items on canvas view
+ anActItem->resize(aPoint);
+ myMovingDone = true;
+ return;
+ }
+
+ // to move items on canvas view
+ if ( myCurrentItem->x() && myCurrentItem->y() ) {
+ double cx = myCurrentItem->x() - myPoint.x();
+ double cy = myCurrentItem->y() - myPoint.y();
+
+ if (aPoint.x()+cx < 0) aPoint.setX(-(int)cx);
+ if (aPoint.y()+cy < 0) aPoint.setY(-(int)cy);
+ }
+ myCurrentItem->moveBy(aPoint.x() - myPoint.x(),
+ aPoint.y() - myPoint.y());
+ myMovingDone = true;
+ myPoint = aPoint;
+ canvas()->update();
+
+ // scroll contents if mouse is outside
+ QRect r(contentsX(), contentsY(), visibleWidth(), visibleHeight());
+ if (!r.contains(theEvent->pos())) {
+ int dx = 0, dy = 0;
+ if (theEvent->pos().x() < r.left()) dx = theEvent->pos().x() - r.left();
+ if (theEvent->pos().x() > r.right()) dx = theEvent->pos().x() - r.right();
+ if (theEvent->pos().y() < r.top()) dy = theEvent->pos().y() - r.top();
+ if (theEvent->pos().y() > r.bottom()) dy = theEvent->pos().y() - r.bottom();
+ scrollBy(dx, dy);
+ // start timer to scroll in silent mode
+ myDX = dx; myDY = dy;
+ myTimer->start(100);
+ }
+
+ return;
+ }
+ else
+ {
+ QCanvasItemList aList = canvas()->collisions(aPoint);
+ // perform actions for active items
+ bool isHilightPerformed = false;
+
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+
+ if (!isHilightPerformed && anActItem) {
+ // hilight
+ anActItem->hilight(aPoint);
+ if (anActItem != myHilightedItem) {
+ if (myHilightedItem)
+ myHilightedItem->hilight(aPoint, false);
+ myHilightedItem = anActItem;
+ }
+ isHilightPerformed = true;
+
+ // show tooltip
+ QxGraph_ToolTip* aToolTip = new QxGraph_ToolTip(this);
+ aToolTip->maybeTip(aPoint);
+ }
+
+ int aCursorType;
+ if ( anActItem && anActItem->isResizable(aPoint,aCursorType) ) {
+ // set resize cursor
+ QCursor resizeCursor;
+ switch (aCursorType)
+ {
+ case 1: //left
+ case 3: //right
+ resizeCursor = QCursor(Qt::SizeHorCursor);
+ break;
+ case 2: //top
+ case 4: //bottom
+ resizeCursor = QCursor(Qt::SizeVerCursor);
+ break;
+ case 5: //left-top
+ case 7: //right-bottom
+ resizeCursor = QCursor(Qt::SizeFDiagCursor);
+ break;
+ case 6: //right-top
+ case 8: //left-bottom
+ resizeCursor = QCursor(Qt::SizeBDiagCursor);
+ break;
+ default :
+ resizeCursor = QCursor(Qt::ArrowCursor);
+ break;
+ }
+ setCursor(resizeCursor);
+ return;
+ }
+ else {
+ // reset old cursor
+ setCursor(QCursor(Qt::ArrowCursor));
+ return;
+ }
+ }
+
+ if (!isHilightPerformed && myHilightedItem) {
+ myHilightedItem->hilight(aPoint, false);
+ myHilightedItem = 0;
+ QToolTip::hide(); //@ temporary solution
+ }
+
+ if ( cursor().shape() == Qt::SizeVerCursor || cursor().shape() == Qt::SizeHorCursor
+ || cursor().shape() == Qt::SizeBDiagCursor || cursor().shape() == Qt::SizeFDiagCursor)
+ setCursor(QCursor(Qt::ArrowCursor));
+ }
+}
+
+/*!
+ This method is called by QxGraph_Canvas when item is removed.
+ QxGraph_CanvasView updates its own data accordingly
+*/
+void QxGraph_CanvasView::itemRemoved( QCanvasItem* theItem )
+{
+ if ( myCurrentItem == theItem )
+ myCurrentItem = 0;
+
+ QxGraph_ActiveItem* anActiveItem = dynamic_cast<QxGraph_ActiveItem*>( theItem );
+ if ( anActiveItem )
+ {
+ if ( myHilightedItem == anActiveItem )
+ myHilightedItem = 0;
+ if ( mySelectedItem == anActiveItem )
+ mySelectedItem = 0;
+ }
+}
+
+void QxGraph_CanvasView::setSelectedItem( QxGraph_ActiveItem* theItem )
+{
+ mySelectedItem = theItem;
+}
+
+QxGraph_ActiveItem* QxGraph_CanvasView::getSelectedItem() const
+{
+ return mySelectedItem;
+}
+
+void QxGraph_CanvasView::contentsMouseReleaseEvent(QMouseEvent* theEvent)
+{
+ QPoint aPoint = inverseWorldMatrix().map(theEvent->pos());
+
+ if (myTimer->isActive()) myTimer->stop();
+
+ if (myCurrentItem)
+ { // to move items on canvas view
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( myCurrentItem );
+ if ( anActItem && anActItem->isResizing() )
+ {
+ anActItem->afterResizing();
+ // reset old cursor
+ setCursor(QCursor(Qt::ArrowCursor));
+ }
+ else if ( anActItem && anActItem->isMoveable() )
+ anActItem->afterMoving();
+ }
+ myCurrentItem = 0;
+
+ if ( myOperation == PANVIEW )
+ { // Panning
+ myOperation = NOTHING;
+ viewport()->setMouseTracking(true);
+ setCursor(myCursor);
+
+ emit viewOperationDone();
+ }
+
+ if ( myOperation == PANGLOBAL )
+ { // Global panning
+ myOperation = NOTHING;
+ center( theEvent->x(), theEvent->y() );
+ setCursor(myCursor);
+
+ emit viewOperationDone();
+ }
+
+ if ( myOperation == WINDOWFIT )
+ { // Fit within rectangle
+ myOperation = NOTHING;
+
+ if (mySelectedRect) {
+ mySelectedRect->hide();
+ mySelectedRect = 0;
+ //canvas()->update();
+ }
+
+ //myPoint is the start point for selecting rectangle now
+ int aLX, aTY; //left x and top y
+ if (myPoint.x() < aPoint.x()) aLX = myPoint.x();
+ else aLX = aPoint.x();
+ if (myPoint.y() < aPoint.y()) aTY = myPoint.y();
+ else aTY = aPoint.y();
+
+ //calculate width and height for new view and new zoom factor
+ double aXzoom = ((double)visibleWidth())/((double)(abs(myPoint.x()-aPoint.x())));
+ double aYzoom = ((double)visibleHeight())/((double)(abs(myPoint.y()-aPoint.y())));
+ if (aXzoom > aYzoom) aXzoom = aYzoom;
+
+ QWMatrix m;
+ m.scale(aXzoom, aXzoom);
+ setWorldMatrix(m);
+
+ // remember the canvas view's current transformation matrix in all canvas items
+ QCanvasItemList aList = canvas()->allItems();
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ if ( anActItem ) anActItem->setTMatrix(m);
+ }
+
+ setContentsPos((int)(aLX*aXzoom), (int)(aTY*aYzoom));
+
+ canvas()->update();
+
+ viewport()->setMouseTracking(true);
+ setCursor(myCursor);
+
+ emit viewOperationDone();
+ }
+
+ if ( myOperation == ZOOMVIEW )
+ { // Zoom
+ myOperation = NOTHING;
+ viewport()->setMouseTracking(true);
+ setCursor(myCursor);
+
+ emit viewOperationDone();
+ }
+
+ if ( theEvent->button() == RightButton )
+ {
+ // Selection mechanism
+ QCanvasItemList aList = canvas()->collisions(aPoint);
+ bool isSelectionPerformed = false;
+
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ if (!isSelectionPerformed && anActItem)
+ {
+ anActItem->select(aPoint);
+ if (anActItem != mySelectedItem)
+ {
+ if (mySelectedItem && isSelectedItemInCanvas() &&
+ !mySelectedItem->arePartsOfOtherItem(anActItem)) mySelectedItem->select(aPoint, false);
+ mySelectedItem = anActItem;
+
+ // unhilight hilighted item if selection was performed
+ if (myHilightedItem) {
+ myHilightedItem->hilight(aPoint, false);
+ myHilightedItem = 0;
+ }
+ }
+ isSelectionPerformed = true;
+ }
+ }
+
+ if (!isSelectionPerformed)
+ {
+ if ( mySelectedItem )
+ {
+ if ( isSelectedItemInCanvas() ) mySelectedItem->select(aPoint, false);
+ mySelectedItem = 0;
+ }
+
+ // Background popup
+ printf("Background popup\n");
+ QContextMenuEvent aEvent( QContextMenuEvent::Mouse,
+ theEvent->pos(), theEvent->globalPos(),
+ theEvent->state() );
+ if ( getViewWindow() )
+ getViewWindow()->contextPopupEvent(&aEvent); // => emit contextMenuRequested( &aEvent );
+ }
+ else
+ { // show context popup for the selected item
+ mySelectedItem->showPopup(viewport(), theEvent, aPoint);
+ }
+ }
+
+ if ( theEvent->button() == LeftButton && !myMovingDone )
+ {
+ // Selection mechanism
+ QCanvasItemList aList = canvas()->collisions(aPoint);
+
+ if ( aList.empty() && mySelectedItem )
+ {
+ if ( isSelectedItemInCanvas() ) mySelectedItem->select(aPoint, false);
+ mySelectedItem = 0;
+ }
+ else
+ {
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ if (anActItem)
+ {
+ anActItem->select(aPoint);
+ if (anActItem != mySelectedItem)
+ {
+ if (mySelectedItem && isSelectedItemInCanvas() &&
+ !mySelectedItem->arePartsOfOtherItem(anActItem)) mySelectedItem->select(aPoint, false);
+ mySelectedItem = anActItem;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ myMovingDone = false;
+}
+
+void QxGraph_CanvasView::contentsMouseDoubleClickEvent(QMouseEvent* theEvent)
+{
+
+}
+
+bool QxGraph_CanvasView::isSelectedItemInCanvas()
+{
+ // check if mySelectedItem is included into the canvas:
+ // if yes => unselect it
+ // if no => do nothing
+ bool anIsInCanvas = false;
+ QCanvasItemList aListC = canvas()->allItems();
+ for (QCanvasItemList::Iterator itC = aListC.begin(); itC != aListC.end(); ++itC) {
+ QxGraph_ActiveItem* anActItemC = dynamic_cast<QxGraph_ActiveItem*>( *itC );
+ if ( anActItemC && anActItemC == mySelectedItem ) {
+ anIsInCanvas = true;
+ break;
+ }
+ }
+ return anIsInCanvas;
+}
+
+void QxGraph_CanvasView::activateFitAll()
+{
+ //myOperation = FITALL;
+ int w = 0, h = 0;
+ QCanvasItemList l = canvas()->allItems();
+ for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {
+ QRect r = (*it)->boundingRect();
+ if (w < r.right()) w = r.right();
+ if (h < r.bottom()) h = r.bottom();
+ }
+ w += GRAPH_MARGIN; h += GRAPH_MARGIN;
+ double s = ((double)visibleWidth())/((double)w);
+ double s1 = ((double)visibleHeight())/((double)h);
+ if (s > s1) s = s1;
+
+ setContentsPos(0,0);
+ QWMatrix m;
+ m.scale(s, s);
+ setWorldMatrix(m);
+
+ // remember the canvas view's current transformation matrix in all canvas items
+ QCanvasItemList aList = canvas()->allItems();
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ if ( anActItem ) anActItem->setTMatrix(m);
+ }
+
+ canvas()->update();
+ //myOperation = NOTHING;
+
+ emit viewOperationDone();
+}
+
+void QxGraph_CanvasView::activateFitRect()
+{
+ myOperation = WINDOWFIT;
+ viewport()->setMouseTracking(false);
+ myCursor = cursor(); // save old cursor
+ QCursor handCursor (Qt::PointingHandCursor);
+ setCursor(handCursor);
+}
+
+void QxGraph_CanvasView::activateZoom()
+{
+ myOperation = ZOOMVIEW;
+ viewport()->setMouseTracking(false);
+ myCursor = cursor(); // save old cursor
+ QPixmap zoomPixmap (imageZoomCursor);
+ QCursor zoomCursor (zoomPixmap);
+ setCursor(zoomCursor);
+}
+
+void QxGraph_CanvasView::activatePanning()
+{
+ myOperation = PANVIEW;
+ viewport()->setMouseTracking(false);
+ myCursor = cursor(); // save old cursor
+ QCursor panCursor (Qt::SizeAllCursor);
+ setCursor(panCursor);
+}
+
+void QxGraph_CanvasView::activateGlobalPanning()
+{
+ myOperation = PANGLOBAL;
+ myCursor = cursor(); // save old cursor
+ QPixmap globalPanPixmap (imageCrossCursor);
+ QCursor glPanCursor (globalPanPixmap);
+ setCursor(glPanCursor);
+}
+
+void QxGraph_CanvasView::activateReset()
+{
+ //myOperation = RESETVIEW;
+ setContentsPos(0,0);
+ QWMatrix m;
+ setWorldMatrix(m);
+
+ // remember the canvas view's current transformation matrix in all canvas items
+ QCanvasItemList aList = canvas()->allItems();
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ if ( anActItem ) anActItem->setTMatrix(m);
+ }
+
+ //myOperation = NOTHING;
+
+ emit viewOperationDone();
+}
+
+void QxGraph_CanvasView::onTimeout()
+{
+ if (myCurrentItem) {
+ scrollBy(myDX, myDY);
+
+ double cx, cy;
+ inverseWorldMatrix().map((double)myDX, (double)myDY, &cx, &cy);
+ if (myCurrentItem->x()+cx < 0) cx = -myCurrentItem->x();
+ if (myCurrentItem->y()+cy < 0) cy = -myCurrentItem->y();
+ myCurrentItem->moveBy(cx, cy);
+ myPoint.setX(myPoint.x()+(int)cx);
+ myPoint.setY(myPoint.y()+(int)cy);
+ canvas()->update();
+ }
+}
+
+QxGraph_ViewWindow* QxGraph_CanvasView::getViewWindow() const
+{
+ return dynamic_cast<QxGraph_ViewWindow*>( parent() );
+}
+
+/*!
+ Shows tooltip if necessary
+*/
+void QxGraph_ToolTip::maybeTip(const QPoint& theMousePos) {
+ QCanvasItemList aList = ((QCanvasView*)parentWidget())->canvas()->collisions(theMousePos);
+
+ for (QCanvasItemList::Iterator it = aList.begin(); it != aList.end(); ++it) {
+ QxGraph_ActiveItem* anActItem = dynamic_cast<QxGraph_ActiveItem*>( *it );
+ if (anActItem)
+ {
+ QRect aRect;
+ QString aText = anActItem->getToolTipText(theMousePos, aRect);
+ int avX, avY;
+ QWMatrix aWM = ((QCanvasView*)parentWidget())->worldMatrix();
+ ((QCanvasView*)parentWidget())->contentsToViewport((int)(aRect.left()*aWM.m11()),
+ (int)(aRect.top()*aWM.m22()),
+ avX, avY);
+ QRect aTipRect(avX, avY, (int)(aRect.width()*aWM.m11()), (int)(aRect.height()*aWM.m22()));
+ if (!aText.isEmpty())
+ tip(aTipRect, aText);
+ return;
+ }
+ }
+}
+
+
+
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef QXGRAPH_CANVASVIEW_H
+#define QXGRAPH_CANVASVIEW_H
+
+#include "QxGraph.h"
+
+#include <qcanvas.h>
+#include <qcursor.h>
+#include <qtimer.h>
+#include <qtooltip.h>
+
+class QxGraph_Canvas;
+class QxGraph_ViewWindow;
+class QxGraph_ActiveItem;
+
+class QXGRAPH_EXPORT QxGraph_CanvasView : public QCanvasView {
+ Q_OBJECT
+
+ public:
+ enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, PANGLOBAL,
+ WINDOWFIT, FITALLVIEW, RESETVIEW };
+
+ QxGraph_CanvasView(QxGraph_Canvas* theCanvas, QxGraph_ViewWindow* theViewWindow);
+ virtual ~QxGraph_CanvasView();
+
+ QxGraph_ViewWindow* getViewWindow() const;
+
+ void activateFitAll();
+ void activateFitRect();
+ void activateZoom();
+ void activatePanning();
+ void activateGlobalPanning();
+ void activateReset();
+
+ void itemRemoved( QCanvasItem* );
+
+ void setSelectedItem( QxGraph_ActiveItem* theItem );
+ QxGraph_ActiveItem* getSelectedItem() const;
+
+ signals:
+ void viewOperationDone();
+
+ public slots:
+ void onTimeout();
+ //void changeBackground();
+
+ protected:
+ void contentsMousePressEvent(QMouseEvent* theEvent);
+ void contentsMouseMoveEvent(QMouseEvent* theEvent);
+ void contentsMouseReleaseEvent(QMouseEvent* theEvent);
+ void contentsMouseDoubleClickEvent(QMouseEvent* theEvent);
+
+ bool isSelectedItemInCanvas();
+
+ private:
+ // for moving items
+ QCanvasItem* myCurrentItem;
+ QPoint myPoint;
+ QPoint myGlobalPoint;
+ bool myMovingDone;
+ QPoint myCenter;
+
+ // for control toolbar actions
+ OperationType myOperation;
+ QCursor myCursor;
+ QCanvasRectangle* mySelectedRect;
+
+ // for automatic content scrolling if mouse is outside
+ QTimer* myTimer;
+ int myDX;
+ int myDY;
+
+ // for hilight
+ QxGraph_ActiveItem* myHilightedItem;
+
+ // for selection
+ QxGraph_ActiveItem* mySelectedItem;
+};
+
+
+class QxGraph_ToolTip: public QToolTip {
+
+ public:
+ QxGraph_ToolTip(QWidget* theWidget, QToolTipGroup* theGroup = 0):
+ QToolTip(theWidget, theGroup) {}
+ ~QxGraph_ToolTip() { remove(parentWidget()); }
+
+ virtual void maybeTip(const QPoint& theMousePos);
+};
+
+#endif
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef QXGRAPH_DEF_H
+#define QXGRAPH_DEF_H
+
+#define DEF_BACK_COLOR QColor(144, 208, 211)
+#define RECTANGLE_BODY QColor(255,249,147)
+
+#define GRAPH_WIDTH 1250
+#define GRAPH_HEIGHT 950
+
+#define GRAPH_MARGIN 50
+
+#endif
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "QxGraph_Prs.h"
+
+#include "QxGraph_Canvas.h"
+#include "QxGraph_Def.h" // for debug only
+
+#include "SUIT_Session.h" // for debug only
+
+/*!
+ Constructor
+*/
+QxGraph_Prs::QxGraph_Prs(QxGraph_Canvas* theCanvas):
+ myCanvas(theCanvas),
+ myDMode(0),
+ needUpdate(true)
+{
+ myCanvas->addPrs(this);
+}
+
+/*!
+ Destructor
+*/
+QxGraph_Prs::~QxGraph_Prs()
+{
+ for ( DMode2ItemList::iterator it1 = myDisplayMap.begin();
+ it1 != myDisplayMap.end();
+ it1++ )
+ {
+ for ( std::list<QCanvasItem*>::iterator it2 = (*it1).second.begin();
+ it2 != (*it1).second.end();
+ it2++ )
+ {
+ QCanvasItem* anItem = *it2;
+ if ( anItem ) delete anItem;
+ }
+ }
+
+ myDisplayMap.clear();
+}
+
+/*!
+ Add item to display in the view with index theDMode
+*/
+void QxGraph_Prs::addItem(QCanvasItem* theItem, int theDMode)
+{
+ if ( theDMode == -1 ) // add item for the current display mode
+ myDisplayMap[myDMode].push_back(theItem);
+ else
+ myDisplayMap[theDMode].push_back(theItem);
+}
+
+/*!
+ Remove item from the view with index theDMode
+*/
+void QxGraph_Prs::removeItem(QCanvasItem* theItem, int theDMode)
+{
+ if ( theDMode == -1 ) // remove item from the current display mode
+ myDisplayMap[myDMode].remove(theItem);
+ else
+ myDisplayMap[theDMode].remove(theItem);
+}
+
+/*! Adds all the items of this presentation for the current display mode
+ * to the canvas.
+ */
+void QxGraph_Prs::show()
+{
+ if ( isToUpdate() )
+ update();
+
+ for ( std::list<QCanvasItem*>::iterator it = myDisplayMap[myDMode].begin();
+ it != myDisplayMap[myDMode].end();
+ it++ )
+ {
+ QCanvasItem* anItem = *it;
+ if ( anItem )
+ {
+ anItem->setCanvas( myCanvas );
+ anItem->show();
+ }
+ }
+}
+
+/*! Removes all the items belonging to this presentation from the canvas.
+ */
+void QxGraph_Prs::hide()
+{
+ for ( DMode2ItemList::iterator it1 = myDisplayMap.begin();
+ it1 != myDisplayMap.end();
+ it1++ )
+ {
+ for ( std::list<QCanvasItem*>::iterator it2 = (*it1).second.begin();
+ it2 != (*it1).second.end();
+ it2++ )
+ {
+ QCanvasItem* anItem = *it2;
+ if ( anItem )
+ {
+ anItem->setCanvas( 0 );
+ }
+ }
+ }
+}
+
+/*! Prepare for full recomputation of the presentation
+ */
+void QxGraph_Prs::setToUpdate( const bool theFlag )
+{
+ needUpdate = theFlag;
+}
+
+/*! Re-fills the presentation with items.
+ * Base implementation just resets <needUpdate> flag.
+ * It should be called at the end by re-implementations.
+ */
+void QxGraph_Prs::update()
+{
+ setToUpdate( false );
+}
+
+/*!
+ Add a QCanvasRectangle item for display mode DMode
+*/
+QCanvasItem* QxGraph_Prs::addRectangleItem(QRect theRect, int theDMode)
+{
+ QCanvasRectangle* aRectItem;
+ if ( myCanvas )
+ {
+ QCanvasRectangle* aRectItem = new QCanvasRectangle(theRect, myCanvas);
+ aRectItem->setZ(0);
+ aRectItem->show();
+ myCanvas->update();
+
+ // test drawing features: brush, pen ...
+ QBrush aBr(SUIT_Session::session()->resourceMgr()->colorValue( "QxGraph", "NodeBody", RECTANGLE_BODY ));
+ aRectItem->setBrush(aBr);
+ }
+ addItem(aRectItem);
+ return aRectItem;
+}
+
+/*!
+ Add a QCanvasPolygon item for display mode DMode
+*/
+QCanvasItem* QxGraph_Prs::addPolygonItem(QPointArray thePA, int theDMode)
+{
+ QCanvasPolygon* aPolyItem;
+ if ( myCanvas )
+ {
+ aPolyItem = new QCanvasPolygon(myCanvas);
+ aPolyItem->setZ(0);
+ aPolyItem->setPoints(thePA);
+ aPolyItem->show();
+ myCanvas->update();
+
+ // test drawing features: brush, pen ...
+ QBrush aBr(SUIT_Session::session()->resourceMgr()->colorValue( "QxGraph", "NodeBody", RECTANGLE_BODY ));
+ aPolyItem->setBrush(aBr);
+ QPen aPen(Qt::black,2);
+ aPolyItem->setPen(aPen);
+ }
+ addItem(aPolyItem);
+ return aPolyItem;
+}
+
+/*!
+ Add a QCanvasLine item for display mode DMode
+*/
+QCanvasItem* QxGraph_Prs::addLineItem(QPoint theStart, QPoint theEnd, int theDMode)
+{
+ QCanvasLine* aLineItem;
+ if ( myCanvas )
+ {
+ aLineItem = new QCanvasLine(myCanvas);
+ aLineItem->setZ(0);
+ aLineItem->setPoints(theStart.x(), theStart.y(), theEnd.x(), theEnd.y());
+ aLineItem->show();
+ myCanvas->update();
+
+ // test drawing features: brush, pen ...
+ QPen aPen(Qt::black,2);
+ aLineItem->setPen(aPen);
+ }
+ addItem(aLineItem);
+ return aLineItem;
+}
+
+/*!
+ Add a QCanvasEllipse item for display mode DMode
+*/
+QCanvasItem* QxGraph_Prs::addEllipseItem(int theW, int theH, int theStartAngle, int theAngle, int theDMode)
+{
+ QCanvasEllipse* aEllipseItem;
+ if ( myCanvas )
+ {
+ aEllipseItem = new QCanvasEllipse(theW, theH, theStartAngle, theAngle, myCanvas);
+ aEllipseItem->setZ(0);
+ aEllipseItem->show();
+ myCanvas->update();
+
+ // test drawing features: brush, pen ...
+ QBrush aBr(SUIT_Session::session()->resourceMgr()->colorValue( "QxGraph", "NodeBody", RECTANGLE_BODY ));
+ aEllipseItem->setBrush(aBr);
+ QPen aPen(Qt::black,2);
+ aEllipseItem->setPen(aPen);
+ }
+ addItem(aEllipseItem);
+ return aEllipseItem;
+}
+
+/*!
+ Add a QCanvasText item for display mode DMode
+*/
+QCanvasItem* QxGraph_Prs::addTextItem(QString theText, int theDMode)
+{
+ QCanvasText* aTextItem;
+ if ( myCanvas )
+ {
+ aTextItem = new QCanvasText(theText, myCanvas);
+ aTextItem->setZ(0);
+ aTextItem->show();
+ myCanvas->update();
+
+ // test drawing features: font, color, text flags ...
+ aTextItem->setColor(Qt::darkBlue);
+ //aTextItem->setFont(QFont("Times"/*"Helvetica"*/, 14, QFont::Normal, true));
+ }
+ addItem(aTextItem);
+ return aTextItem;
+}
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef QXGRAPH_PRS_H
+#define QXGRAPH_PRS_H
+
+#include <QxGraph.h>
+
+#include <qcanvas.h>
+#include <map>
+#include <list>
+
+class QxGraph_Canvas;
+
+class QXGRAPH_EXPORT QxGraph_Prs
+{
+ public:
+ QxGraph_Prs(QxGraph_Canvas*);
+ virtual ~QxGraph_Prs();
+
+ QxGraph_Canvas* getCanvas() const { return myCanvas; }
+
+ void addItem(QCanvasItem* theItem, int theDMode = -1);
+ void removeItem(QCanvasItem* theItem, int theDMode = -1);
+
+ /* add items for display mode theDMode
+ if theDMode is equal to -1 add item for the current (active) display mode */
+ QCanvasItem* addRectangleItem(QRect theRect, int theDMode = -1);
+ QCanvasItem* addPolygonItem(QPointArray thePA, int theDMode = -1);
+ QCanvasItem* addLineItem(QPoint theStart, QPoint theEnd, int theDMode = -1);
+ QCanvasItem* addEllipseItem(int theW, int theH, int theStartAngle, int theAngle, int theDMode = -1);
+ QCanvasItem* addTextItem(QString theText, int theDMode = -1);
+
+ typedef std::map< int, std::list<QCanvasItem*> > DMode2ItemList;
+
+ const DMode2ItemList& getDisplayMap() const { return myDisplayMap; }
+ const std::list<QCanvasItem*>& getItems(int theDMode) { return myDisplayMap[theDMode]; }
+
+ void setDMode(int theDMode) { myDMode = theDMode; }
+ int getDMode() const { return myDMode; }
+
+ virtual void show();
+ virtual void hide();
+ virtual void setToUpdate( const bool );
+ bool isToUpdate() { return needUpdate; }
+
+protected:
+ virtual void update();
+
+private:
+ QxGraph_Canvas* myCanvas;
+ DMode2ItemList myDisplayMap;
+
+ int myDMode;
+ bool needUpdate;
+};
+
+#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "QxGraph_ViewManager.h"
+
+/*!
+ Constructor
+*/
+QxGraph_ViewManager::QxGraph_ViewManager( SUIT_Study* theStudy,
+ SUIT_Desktop* theDesktop,
+ SUIT_ViewModel* theViewModel )
+ : SUIT_ViewManager( theStudy, theDesktop, theViewModel )
+{
+}
+
+/*!
+ Destructor
+*/
+QxGraph_ViewManager::~QxGraph_ViewManager()
+{
+}
+
+/*!
+ Sets view name
+ \param theView - view to assign name
+*/
+void QxGraph_ViewManager::setViewName(SUIT_ViewWindow* theView)
+{
+ int aPos = myViews.find(theView);
+ theView->setCaption( QString( "QxGraph scene:%1 - viewer:%2" ).arg( myId ).arg(aPos+1));
+}
+
+/*!
+ Fills popup menu with custom actions
+ \param popup - popup menu to be filled with
+*/
+void QxGraph_ViewManager::contextMenuPopup( QPopupMenu* thePopup)
+{
+ SUIT_ViewManager::contextMenuPopup( thePopup );
+ // to be implemented
+}
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef QXGRAPH_VIEWMANAGER_H
+#define QXGRAPH_VIEWMANAGER_H
+
+#include "QxGraph.h"
+
+#include "QxGraph_ViewModel.h"
+#include "SUIT_ViewManager.h"
+
+class SUIT_Desktop;
+
+class QXGRAPH_EXPORT QxGraph_ViewManager : public SUIT_ViewManager
+{
+ Q_OBJECT
+
+public:
+ QxGraph_ViewManager( SUIT_Study* theStudy, SUIT_Desktop* theDesktop, SUIT_ViewModel* theViewModel = 0 );
+ ~QxGraph_ViewManager();
+
+ virtual void contextMenuPopup( QPopupMenu* thePopup );
+
+protected:
+ void setViewName(SUIT_ViewWindow* theView);
+
+};
+
+#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#include "QxGraph_ViewModel.h"
+#include "QxGraph_ViewWindow.h"
+#include "QxGraph_Canvas.h"
+#include "QxGraph_CanvasView.h"
+#include "QxGraph_Def.h"
+#include "QxGraph_Prs.h"
+
+#include "SUIT_Desktop.h"
+#include "SUIT_ViewWindow.h"
+#include "SUIT_Session.h"
+
+#include <qcolordialog.h>
+#include <qpopupmenu.h>
+#include <qcanvas.h> // for addRectangleItem(...) method (can be removed in the future)
+
+/*!
+ Constructor
+*/
+QxGraph_Viewer::QxGraph_Viewer()
+ :SUIT_ViewModel(),
+ myCanvas(0),
+ myCurrentView(0)
+{
+ printf("Construct QxGraph_Viewer\n");
+ //myCanvases.setAutoDelete(true);
+ //myCanvasViews.setAutoDelete(true);
+}
+
+/*!
+ Destructor
+*/
+QxGraph_Viewer::~QxGraph_Viewer()
+{
+ if ( myCanvas ) delete myCanvas;
+ //if ( !myCanvases.isEmpty() ) myCanvases.clear();
+ if ( !myCanvasViews.isEmpty() ) myCanvasViews.clear();
+ myCurrentView = 0;
+}
+
+/*!
+ Start initialization of view window
+ \param view - view window to be initialized
+*/
+void QxGraph_Viewer::initView( QxGraph_ViewWindow* view )
+{
+ if ( view )
+ {
+ view->initLayout();
+
+ /*
+ // test add items into the current canvas view
+ QRect aRect(100,200,200,100);
+ QCanvasItem* aRectItem = aPrs->addRectangleItem(aRect);
+ //delete aRectItem;
+
+ QPointArray aPA(6);
+ aPA.putPoints(0, 6, 400,100, 500,70, 600,100, 600,200, 500,230, 400,200);
+ QCanvasItem* aPolyItem = aPrs->addPolygonItem(aPA);
+ //delete aPolyItem;
+
+ QPoint aStart(500,300), aEnd(700,250);
+ QCanvasItem* aLineItem = aPrs->addLineItem(aStart, aEnd);
+ //delete aLineItem;
+
+ QCanvasItem* aEllipseItem = aPrs->addEllipseItem(200, 100, 30*16, 120*16);
+ aEllipseItem->setX(400);
+ aEllipseItem->setY(400);
+ //delete aEllipseItem;
+
+ QCanvasItem* aTextItem = aPrs->addTextItem("This is a QCanvasText item");
+ aTextItem->setX(100);
+ aTextItem->setY(500);
+ //delete aTextItem;
+ */
+ }
+}
+
+/*!
+ Creates new view window
+ \param theDesktop - main window of application
+*/
+SUIT_ViewWindow* QxGraph_Viewer::createView(SUIT_Desktop* theDesktop)
+{
+ QxGraph_ViewWindow* aRes = new QxGraph_ViewWindow( theDesktop, this );
+ initView( aRes );
+ return aRes;
+}
+
+/*!
+ Set view with index theIndex from myCanvasViews as current view
+ \param theIndex - the index of the view in the list
+*/
+void QxGraph_Viewer::setCurrentView(int theIndex)
+{
+ if ( theIndex >= 0 && theIndex < myCanvasViews.count() )
+ {
+ myCurrentView = myCanvasViews.at(theIndex);
+ myViewManager->getActiveView()->setCentralWidget(myCurrentView);
+ }
+}
+
+/*!
+ Builds popup for QxGraph viewer
+*/
+void QxGraph_Viewer::contextMenuPopup(QPopupMenu* thePopup)
+{
+ printf("QxGraph_Viewer::contextMenuPopup\n");
+ thePopup->insertItem( tr( "MEN_CHANGE_BACKGROUND" ), this, SLOT( onChangeBgColor() ) );
+
+ thePopup->insertSeparator();
+
+ QxGraph_ViewWindow* aView = (QxGraph_ViewWindow*)(myViewManager->getActiveView());
+ if ( aView && !aView->getToolBar()->isVisible() )
+ thePopup->insertItem( tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) );
+}
+
+/*!
+ SLOT: called if background color is to be changed changed, passes new color to current canvas view
+*/
+void QxGraph_Viewer::onChangeBgColor()
+{
+ QxGraph_ViewWindow* aView = (QxGraph_ViewWindow*)(myViewManager->getActiveView());
+ if( !aView )
+ return;
+ QColor aColorActive = aView->backgroundColor();
+
+ QColor selColor = QColorDialog::getColor( aColorActive, aView);
+ if ( selColor.isValid() )
+ aView->setBackgroundColor(selColor);
+}
+
+/*!
+ SLOT: called when popup item "Show toolbar" is activated, shows toolbar of active view window
+*/
+void QxGraph_Viewer::onShowToolbar() {
+ QxGraph_ViewWindow* aView = (QxGraph_ViewWindow*)(myViewManager->getActiveView());
+ if ( aView )
+ aView->getToolBar()->show();
+}
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+#ifndef QXGRAPH_VIEWMODEL_H
+#define QXGRAPH_VIEWMODEL_H
+
+#include "QxGraph.h"
+
+#include "SUIT_ViewModel.h"
+
+class QCanvasItem; // for addRectangleItem(...) method (can be removed in the future)
+
+class QxGraph_Canvas;
+class QxGraph_CanvasView;
+class QxGraph_ViewWindow;
+class QxGraph_Prs;
+
+class QXGRAPH_EXPORT QxGraph_Viewer: public SUIT_ViewModel
+{
+ Q_OBJECT
+
+ public:
+ static QString Type() { return "QxGraphViewer"; }
+
+ QxGraph_Viewer();
+ virtual ~QxGraph_Viewer();
+
+ virtual SUIT_ViewWindow* createView(SUIT_Desktop* theDesktop);
+ virtual QString getType() const { return Type(); }
+
+ virtual void contextMenuPopup(QPopupMenu*);
+
+ QxGraph_Canvas* getCanvas() const { return myCanvas; }
+ void setCanvas(QxGraph_Canvas* theCanvas) { myCanvas = theCanvas; }
+ //QPtrList<QxGraph_Canvas> getCanvases() { return myCanvases; }
+ //void setCanvases(QPtrList<QxGraph_Canvas> theCanvases) { myCanvases = theCanvases; }
+
+ //void addCanvas(QxGraph_Canvas* theCanvas) { myCanvases.append(theCanvas); }
+ //void removeCanvas(QxGraph_Canvas* theCanvas) { myCanvases.remove(theCanvas); }
+
+ QPtrList<QxGraph_CanvasView> getCanvasViews() { return myCanvasViews; }
+ void setCanvasViews(QPtrList<QxGraph_CanvasView> theViews) { myCanvasViews = theViews; }
+
+ void addView(QxGraph_CanvasView* theView) { myCanvasViews.append(theView); }
+ void removeView(QxGraph_CanvasView* theView) { myCanvasViews.remove(theView); }
+
+ QxGraph_CanvasView* getCurrentView() const { return myCurrentView; }
+ void setCurrentView(QxGraph_CanvasView* theView) { myCurrentView = theView; }
+ void setCurrentView(int theIndex);
+
+ protected:
+ void initView(QxGraph_ViewWindow* view);
+
+ protected slots:
+ void onShowToolbar();
+ void onChangeBgColor();
+
+ private:
+ QxGraph_Canvas* myCanvas;
+ //QPtrList<QxGraph_Canvas> myCanvases;
+ QPtrList<QxGraph_CanvasView> myCanvasViews;
+
+ QxGraph_CanvasView* myCurrentView;
+
+};
+
+#endif
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "QxGraph_ViewWindow.h"
+#include "QxGraph_Def.h"
+#include "QxGraph_Canvas.h"
+#include "QxGraph_CanvasView.h"
+
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SUIT_ToolButton.h>
+
+//QT Include
+#include <qlayout.h>
+#include <qcolor.h>
+//#include <qcolordialog.h>
+
+using namespace std;
+
+/*!
+ Constructor
+*/
+QxGraph_ViewWindow::QxGraph_ViewWindow( SUIT_Desktop* theDesktop, QxGraph_Viewer* theModel)
+ : SUIT_ViewWindow( theDesktop )
+{
+ printf("Construct QxGraph_ViewWindow\n");
+ myViewModel = theModel;
+}
+
+/*!
+ Initialization
+*/
+void QxGraph_ViewWindow::initLayout()
+{
+ initCanvas();
+ initCanvasViews();
+
+ myToolBar = new QToolBar(this);
+ myToolBar->setCloseMode(QDockWindow::Undocked);
+ myToolBar->setLabel(tr("LBL_TOOLBAR_LABEL"));
+ createActions();
+ createToolBar();
+}
+
+/*!
+ Canvas initialization
+*/
+void QxGraph_ViewWindow::initCanvas()
+{
+ if ( myViewModel )
+ myViewModel->setCanvas( new QxGraph_Canvas(resMgr()) );
+ //myViewModel->addCanvas( new QxGraph_Canvas(resMgr()) );
+}
+
+/*!
+ Canvas views initialization
+*/
+void QxGraph_ViewWindow::initCanvasViews()
+{
+ if ( myViewModel )
+ {
+ for (int i = 0; i < 2; i++)
+ {
+ //QxGraph_Canvas* aCanvas = new QxGraph_Canvas(resMgr());
+ //myViewModel->addCanvas( aCanvas );
+
+ QxGraph_CanvasView* aCanvasView = new QxGraph_CanvasView( myViewModel->getCanvas(), this );
+ //QxGraph_CanvasView* aCanvasView = new QxGraph_CanvasView( aCanvas, this );
+ myViewModel->addView(aCanvasView);
+
+ aCanvasView->hide();
+ }
+
+ // the first view is shown and is the current
+ myViewModel->getCanvasViews().first()->show();
+ myViewModel->setCurrentView( myViewModel->getCanvasViews().first() );
+
+ /* test for 1 view -->
+ QxGraph_CanvasView* aCanvasView = new QxGraph_CanvasView( myViewModel->getCanvas(), this );
+ myViewModel->addView(aCanvasView);
+ myViewModel->setCurrentView(aCanvasView);
+ test for 1 view <-- */
+
+ setCentralWidget( myViewModel->getCurrentView() );
+
+ /*if ( inherits( "QMainWindow" ) ) {
+ printf("== > 1\n");
+ ( ( QMainWindow* )this )->setCentralWidget( myViewModel->getCurrentView() );
+ }
+ else {
+ printf("== > 2\n");
+ QBoxLayout* layout = new QVBoxLayout( this );
+ layout->addWidget( myViewModel->getCurrentView() );
+ }*/
+ }
+}
+
+/*!
+ Creates actions of QxGraph view window
+*/
+void QxGraph_ViewWindow::createActions()
+{
+ if (!myActionsMap.isEmpty()) return;
+ SUIT_ResourceMgr* aResMgr = resMgr();
+ QtxAction* aAction;
+
+ // FitAll
+ aAction = new QtxAction(tr("MNU_FITALL"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_FITALL" ) ),
+ tr( "MNU_FITALL" ), 0, this);
+ aAction->setStatusTip(tr("DSC_FITALL"));
+ connect(aAction, SIGNAL(activated()), this, SLOT(onViewFitAll()));
+ myActionsMap[ FitAllId ] = aAction;
+
+ // FitRect
+ aAction = new QtxAction(tr("MNU_FITRECT"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_FITAREA" ) ),
+ tr( "MNU_FITRECT" ), 0, this);
+ aAction->setStatusTip(tr("DSC_FITRECT"));
+ connect(aAction, SIGNAL(activated()), this, SLOT(onViewFitArea()));
+ myActionsMap[ FitRectId ] = aAction;
+
+ // Zoom
+ aAction = new QtxAction(tr("MNU_ZOOM_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_ZOOM" ) ),
+ tr( "MNU_ZOOM_VIEW" ), 0, this);
+ aAction->setStatusTip(tr("DSC_ZOOM_VIEW"));
+ connect(aAction, SIGNAL(activated()), this, SLOT(onViewZoom()));
+ myActionsMap[ ZoomId ] = aAction;
+
+ // Panning
+ aAction = new QtxAction(tr("MNU_PAN_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_PAN" ) ),
+ tr( "MNU_PAN_VIEW" ), 0, this);
+ aAction->setStatusTip(tr("DSC_PAN_VIEW"));
+ connect(aAction, SIGNAL(activated()), this, SLOT(onViewPan()));
+ myActionsMap[ PanId ] = aAction;
+
+ // Global Panning
+ aAction = new QtxAction(tr("MNU_GLOBALPAN_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_GLOBALPAN" ) ),
+ tr( "MNU_GLOBALPAN_VIEW" ), 0, this);
+ aAction->setStatusTip(tr("DSC_GLOBALPAN_VIEW"));
+ connect(aAction, SIGNAL(activated()), this, SLOT(onViewGlobalPan()));
+ myActionsMap[ GlobalPanId ] = aAction;
+
+ // Reset
+ aAction = new QtxAction(tr("MNU_RESET_VIEW"), aResMgr->loadPixmap( "QxGraph", tr( "ICON_QXGRAPH_RESET" ) ),
+ tr( "MNU_RESET_VIEW" ), 0, this);
+ aAction->setStatusTip(tr("DSC_RESET_VIEW"));
+ connect(aAction, SIGNAL(activated()), this, SLOT(onViewReset()));
+ myActionsMap[ ResetId ] = aAction;
+}
+
+/*!
+ Creates toolbar of QxGraph view window
+*/
+void QxGraph_ViewWindow::createToolBar()
+{
+ SUIT_ToolButton* aScaleBtn = new SUIT_ToolButton(myToolBar, "scale");
+ aScaleBtn->AddAction(myActionsMap[FitAllId]);
+ aScaleBtn->AddAction(myActionsMap[FitRectId]);
+ aScaleBtn->AddAction(myActionsMap[ZoomId]);
+
+ SUIT_ToolButton* aPanningBtn = new SUIT_ToolButton(myToolBar, "pan");
+ aPanningBtn->AddAction(myActionsMap[PanId]);
+ aPanningBtn->AddAction(myActionsMap[GlobalPanId]);
+
+ myActionsMap[ResetId]->addTo(myToolBar);
+}
+
+/*!
+ Destructor
+*/
+QxGraph_ViewWindow::~QxGraph_ViewWindow() {}
+
+/*!
+ Reset the active view
+*/
+void QxGraph_ViewWindow::onViewReset()
+{
+ printf( "QxGraph_ViewWindow::onViewReset\n" );
+ if ( myViewModel && myViewModel->getCurrentView() )
+ myViewModel->getCurrentView()->activateReset();
+}
+
+/*!
+ Sets a new center of the active view
+*/
+void QxGraph_ViewWindow::onViewGlobalPan()
+{
+ printf( "QxGraph_ViewWindow::onViewGlobalPan\n" );
+ if ( myViewModel && myViewModel->getCurrentView() )
+ myViewModel->getCurrentView()->activateGlobalPanning();
+}
+
+/*!
+ Zooms the active view
+*/
+void QxGraph_ViewWindow::onViewZoom()
+{
+ printf( "QxGraph_ViewWindow::onViewZoom\n" );
+ if ( myViewModel && myViewModel->getCurrentView() )
+ myViewModel->getCurrentView()->activateZoom();
+}
+
+/*!
+ Moves the active view
+*/
+void QxGraph_ViewWindow::onViewPan()
+{
+ printf( "QxGraph_ViewWindow::onViewPan\n" );
+ if ( myViewModel && myViewModel->getCurrentView() )
+ myViewModel->getCurrentView()->activatePanning();
+}
+
+/*!
+ Fits all obejcts within a rectangular area of the active view
+*/
+void QxGraph_ViewWindow::onViewFitArea()
+{
+ printf( "QxGraph_ViewWindow::onViewFitArea\n" );
+ if ( myViewModel && myViewModel->getCurrentView() )
+ myViewModel->getCurrentView()->activateFitRect();
+}
+
+/*!
+ Fits all objects in the active view
+*/
+void QxGraph_ViewWindow::onViewFitAll()
+{
+ printf( "QxGraph_ViewWindow::onViewFitAll\n" );
+ if ( myViewModel && myViewModel->getCurrentView() )
+ myViewModel->getCurrentView()->activateFitAll();
+}
+
+/*!
+ Set background of the viewport
+*/
+void QxGraph_ViewWindow::setBackgroundColor( const QColor& color )
+{
+ if ( myViewModel && myViewModel->getCurrentView()) {
+ myViewModel->getCurrentView()->canvas()->setBackgroundColor(color);
+ myViewModel->getCurrentView()->setPaletteBackgroundColor(color.light(120));
+ }
+}
+
+/*!
+ Returns background of the viewport
+*/
+QColor QxGraph_ViewWindow::backgroundColor() const
+{
+ if ( myViewModel && myViewModel->getCurrentView())
+ return myViewModel->getCurrentView()->canvas()->backgroundColor();
+ return QColor();
+}
+
+/*!
+ Custom resize event handler
+*/
+void QxGraph_ViewWindow::resizeEvent( QResizeEvent* theEvent )
+{
+ // QMainWindow::resizeEvent( theEvent );
+ //if ( myView ) myView->resizeView( theEvent );
+}
+
+/*!
+ Get resource manager
+*/
+SUIT_ResourceMgr* QxGraph_ViewWindow::resMgr() const
+{
+ return SUIT_Session::session()->resourceMgr();
+}
+
--- /dev/null
+// SALOME QxGraph : build Supervisor viewer into desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef QXGRAPH_VIEWWINDOW_H
+#define QXGRAPH_VIEWWINDOW_H
+
+#include "QxGraph.h"
+#include "QxGraph_ViewModel.h"
+
+#include "SUIT_ViewWindow.h"
+
+#include "QtxAction.h"
+
+#include <qaction.h>
+
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
+class SUIT_ResourceMgr;
+
+class QXGRAPH_EXPORT QxGraph_ViewWindow : public SUIT_ViewWindow {
+ Q_OBJECT
+
+ public:
+ QxGraph_ViewWindow(SUIT_Desktop* theDesktop, QxGraph_Viewer* theModel);
+ virtual ~QxGraph_ViewWindow();
+
+ void setBackgroundColor( const QColor& );
+ QColor backgroundColor() const;
+
+ QToolBar* getToolBar() { return myToolBar; }
+
+ SUIT_ResourceMgr* resMgr() const;
+
+ QxGraph_Viewer* getViewModel() const { return myViewModel; }
+ void setViewModel(QxGraph_Viewer* theViewModel) { myViewModel = theViewModel; }
+
+ virtual void initLayout();
+
+ void contextPopupEvent(QContextMenuEvent* theEvent) { emit contextMenuRequested( theEvent); }
+
+ public slots:
+ void onViewFitAll();
+ void onViewFitArea();
+ void onViewZoom();
+ void onViewPan();
+ void onViewGlobalPan();
+ void onViewReset();
+
+ protected:
+ void resizeEvent( QResizeEvent* theEvent );
+
+ virtual void initCanvas();
+ virtual void initCanvasViews();
+
+ private:
+ void createActions();
+ void createToolBar();
+
+ //! Actions ID
+ enum { FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, ResetId };
+ typedef QMap<int, QtxAction*> ActionsMap;
+
+ ActionsMap myActionsMap;
+ QToolBar* myToolBar;
+
+ QxGraph_Viewer* myViewModel;
+
+};
+
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
+#endif
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File: QxGraph_images.po
+// Created: 03/02/2007
+// Author: Margarita Karpunina
+// Copyright (C) CEA 2007
+
+
+msgid "ICON_QXGRAPH_FITALL"
+msgstr "view_fitall.png"
+
+msgid "ICON_QXGRAPH_FITAREA"
+msgstr "view_fitarea.png"
+
+msgid "ICON_QXGRAPH_ZOOM"
+msgstr "view_zoom.png"
+
+msgid "ICON_QXGRAPH_PAN"
+msgstr "view_pan.png"
+
+msgid "ICON_QXGRAPH_GLOBALPAN"
+msgstr "view_glpan.png"
+
+msgid "ICON_QXGRAPH_RESET"
+msgstr "view_reset.png"
+
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File: QxGraph_msg_en.po
+// Created: 03/02/2007
+// Author: Margarita Karpunina
+// Copyright (C) CEA 2007
+
+msgid "LBL_TOOLBAR_LABEL"
+msgstr "View Operations"
+
+msgid "DSC_RESET_VIEW"
+msgstr "Reset View Point"
+
+msgid "MNU_RESET_VIEW"
+msgstr "Reset"
+
+msgid "DSC_PAN_VIEW"
+msgstr "Panning the view"
+
+msgid "MNU_PAN_VIEW"
+msgstr "Panning"
+
+msgid "MEN_CHANGE_BACKGROUND"
+msgstr "Change background..."
// Module : SALOME
// $Header$
-# ifndef __HELPWINDOW_H__
-# define __HELPWINDOW_H__
+#ifndef __HELPWINDOW_H__
+#define __HELPWINDOW_H__
-# include <qapplication.h>
-# include <qmainwindow.h>
+#include <qapplication.h>
+#include <qmainwindow.h>
class QTextView;
class HelpWindow : public QMainWindow
{
+ Q_OBJECT
+
public:
HelpWindow( QWidget* parent = 0, const char* name = 0);
~HelpWindow();
private:
QTextView* myTextView;
};
-# endif /* __HELPWINDOW_H__ */
-
+#endif
class IntervalWindow : public QDialog
{
+ Q_OBJECT
+
public:
IntervalWindow( QWidget* parent = 0 );
~IntervalWindow();
--- /dev/null
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libRegistryDisplay.la
+
+salomeinclude_HEADERS= \
+ HelpWindow.hxx \
+ IntervalWindow.hxx \
+ RegWidget.h
+
+dist_libRegistryDisplay_la_SOURCES= \
+ HelpWindow.cxx \
+ RegWidget.cxx \
+ RegWidgetFactory.cxx \
+ IntervalWindow.cxx
+
+MOC_FILES = RegWidget_moc.cxx
+nodist_libRegistryDisplay_la_SOURCES= $(MOC_FILES)
+
+libRegistryDisplay_la_CPPFLAGS=$(QT_INCLUDES) @KERNEL_CXXFLAGS@ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@\
+ -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl
+libRegistryDisplay_la_LDFLAGS=$(QT_MT_LIBS) $(KERNEL_LDFLAGS) -lSalomeNS -lOpUtil -lSalomeIDLKernel
+++ /dev/null
-# 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@
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();
class RegWidget : public QMainWindow
{
-
Q_OBJECT
public:
- RegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 );
+ RegWidget( CORBA::ORB_var &orb , QWidget *parent = 0, const char *name = 0 );
~RegWidget();
void SetListe();
void SetListeHistory();
};
-# endif /* # ifndef __REGWIDGET_H__ */
-
-
-
-
-
-
-
-
-
+#endif
--- /dev/null
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+bin_PROGRAMS= ResourceExporter
+
+dist_ResourceExporter_SOURCES=ResourceExporter.cxx
+
+ResourceExporter_CPPFLAGS= $(QT_INCLUDES) -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT
+
+ResourceExporter_LDFLAGS= $(QT_MT_LIBS)
+ResourceExporter_LDADD= ../SUIT/libsuit.la ../Qtx/libqtx.la
+++ /dev/null
-# 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@
-
-
-
-
-
QString value = resMgr->stringValue( section, param );
QStringList valsOld = QStringList::split( separ, value );
QStringList valsNew = QStringList::split( separ, newValue );
- for ( int i = 0; i < valsNew.count(); i++ )
+ for ( int i = 0; i < (int)valsNew.count(); i++ )
if ( !valsOld.contains( valsNew[i] ) )
valsOld.append( valsNew[i] );
resMgr->setValue( section, param, valsOld.join( separ ) );
--- /dev/null
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES= libSalomePy.la
+dist_libSalomePy_la_SOURCES= SalomePy.cxx
+
+libSalomePy_la_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) $(VTK_INCLUDES) \
+ $(OGL_INCLUDES) $(CAS_CXXFLAGS) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ \
+ -DHAVE_CONFIG_H -I$(srcdir)/../SalomeApp -I$(srcdir)/../LightApp \
+ -I$(srcdir)/../Event -I$(srcdir)/../Session -I$(srcdir)/../SVTK \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../CAM \
+ -I$(srcdir)/../STD -I$(srcdir)/../VTKViewer -I$(srcdir)/../OBJECT \
+ @CAS_CPPFLAGS@ \
+ -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@
+libSalomePy_la_LDFLAGS=$(PYTHON_LIBS) $(QT_MT_LIBS) $(VTK_LIBS) $(OGL_LIBS) \
+ ../SalomeApp/libSalomeApp.la \
+ -lvtkCommonPythonD -lvtkGraphicsPythonD -lvtkImagingPythonD
+++ /dev/null
-# 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@
using namespace std;
+#define PUBLISH_ENUM(i) \
+{ \
+ PyObject *w; \
+ int rc; \
+ if ( ( w = PyInt_FromLong( i ) ) == NULL ) return; \
+ rc = PyDict_SetItemString( aModuleDict, #i, w ); \
+ Py_DECREF( w ); \
+ if ( rc < 0 ) return; \
+}
+
+// enumeration : view type
+enum {
+ ViewFront, // fron view
+ ViewBack, // back view
+ ViewTop, // top view
+ ViewBottom, // bottom view
+ ViewRight, // right view
+ ViewLeft // left view
+};
+
+
/*!
VSR : 19.04.05 : Reimplemented for new SALOME GUI (SUIT-based)
All methods are implemented using Event mechanism:
- getRenderer()
- getRenderWindow()
- getRenderWindowInteractor()
- These methods open new VTK viewer if there is no one opened.
- In case of error methods return None object in Python.
+ - showTrihedron()
+ These methods (except showTrihedron() ) open new VTK viewer
+ if there is no one opened.
+ In case of error all methods return None object in Python.
*/
static PyObject* GetPyClass(const char* theClassName){
return aPyClass;
}
-static SVTK_ViewWindow* GetVTKViewWindow() {
+// internal enum: find or create VTK window
+enum { __Find, // try to find only
+ __FindOrCreate, // try to find: if not found - create new
+ __Create }; // try to find: if not found - create new
+
+static SVTK_ViewWindow* GetVTKViewWindow( int toCreate = __FindOrCreate ) {
SVTK_ViewWindow* aVW = NULL;
if ( SUIT_Session::session() ) {
// get application
SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
if ( aStudy ) {
// find or create VTK view manager
- SVTK_ViewManager* aVM = dynamic_cast<SVTK_ViewManager*>( anApp->getViewManager( "VTKViewer", true ) );
- if ( aVM ) {
- aVW = dynamic_cast<SVTK_ViewWindow*>( 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<SVTK_ViewWindow*>( aVM->getViews()[ 0 ] );
+ if ( toCreate == __Create ) {
+ SVTK_ViewManager* aVM = dynamic_cast<SVTK_ViewManager*>( anApp->createViewManager( "VTKViewer" ) );
+ if ( aVM ) {
+ aVW = dynamic_cast<SVTK_ViewWindow*>( aVM->getActiveView() );
+ if ( !aVW )
+ aVW = dynamic_cast<SVTK_ViewWindow*>( aVM->createViewWindow() );
+ // VSR : When new view window is created it can be not active yet at this moment,
+ // so the following is a some workaround
+ if ( !aVW && !aVM->getViews().isEmpty() )
+ aVW = dynamic_cast<SVTK_ViewWindow*>( aVM->getViews()[ 0 ] );
+ }
+ }
+ else {
+ SVTK_ViewManager* aVM = dynamic_cast<SVTK_ViewManager*>( anApp->getViewManager( "VTKViewer", toCreate == __FindOrCreate ) );
+ if ( aVM ) {
+ aVW = dynamic_cast<SVTK_ViewWindow*>( 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<SVTK_ViewWindow*>( aVM->getViews()[ 0 ] );
+ }
}
}
}
}
/*!
- Get VTK renderer (opens new VTK window if there is no one opened)
+ Get VTK renderer.
+ Always opens new VTK window if <toCreate> parameter is non zero.
+ Otherwise opens new VTK window only if there is no one opened.
*/
class TGetRendererEvent: public SALOME_Event {
public:
typedef PyObject* TResult;
TResult myResult;
- TGetRendererEvent() : myResult( Py_None ) {}
+ int myCreate;
+ TGetRendererEvent( bool toCreate )
+ : myResult( Py_None ), myCreate( toCreate ) {}
virtual void Execute() {
- if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) {
+ if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( myCreate ? __Create : __FindOrCreate ) ) {
PyObject* aPyClass = GetPyClass("vtkRenderer");
vtkRenderer* aVTKObject = aVTKViewWindow->getRenderer();
myResult = PyVTKObject_New(aPyClass,aVTKObject);
};
extern "C" PyObject *libSalomePy_getRenderer(PyObject *self, PyObject *args)
{
- return ProcessEvent( new TGetRendererEvent() );
+ PyObject* aResult = Py_None;
+ int toCreate = 0;
+ if ( !PyArg_ParseTuple(args, "|i:getRenderer", &toCreate) )
+ PyErr_Print();
+ else
+ aResult = ProcessEvent( new TGetRendererEvent( toCreate ) );
+ return aResult;
}
/*!
- Get VTK render window (opens new VTK window if there is no one opened)
+ Get VTK render window.
+ Always opens new VTK window if <toCreate> parameter is non zero.
+ Otherwise opens new VTK window only if there is no one opened.
*/
class TGetRenderWindowEvent: public SALOME_Event {
public:
typedef PyObject* TResult;
TResult myResult;
- TGetRenderWindowEvent() : myResult( Py_None ) {}
+ int myCreate;
+ TGetRenderWindowEvent( bool toCreate )
+ : myResult( Py_None ), myCreate( toCreate ) {}
virtual void Execute() {
- if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) {
+ if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( myCreate ? __Create : __FindOrCreate ) ) {
PyObject* aPyClass = GetPyClass("vtkRenderWindow");
vtkRenderWindow* aVTKObject = aVTKViewWindow->getRenderWindow();
myResult = PyVTKObject_New(aPyClass,aVTKObject);
};
extern "C" PyObject *libSalomePy_getRenderWindow(PyObject *self, PyObject *args)
{
- return ProcessEvent( new TGetRenderWindowEvent() );
+ PyObject* aResult = Py_None;
+ int toCreate = 0;
+ if ( !PyArg_ParseTuple(args, "|i:getRenderWindow", &toCreate) )
+ PyErr_Print();
+ else
+ aResult = ProcessEvent( new TGetRenderWindowEvent( toCreate ) );
+ return aResult;
}
/*!
- Get VTK render window interactor (opens new VTK window if there is no one opened)
+ Get VTK render window interactor.
+ Always opens new VTK window if <toCreate> parameter is non zero.
+ Otherwise opens new VTK window only if there is no one opened.
*/
class TGetRenderWindowInteractorEvent: public SALOME_Event {
public:
typedef PyObject* TResult;
TResult myResult;
- TGetRenderWindowInteractorEvent() : myResult( Py_None ) {}
+ int myCreate;
+ TGetRenderWindowInteractorEvent( bool toCreate )
+ : myResult( Py_None ), myCreate( toCreate ) {}
virtual void Execute() {
- if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow() ) {
+ if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( myCreate ? __Create : __FindOrCreate ) ) {
PyObject* aPyClass = GetPyClass("vtkRenderWindowInteractor");
vtkRenderWindowInteractor* aVTKObject = aVTKViewWindow->getInteractor();
myResult = PyVTKObject_New(aPyClass,aVTKObject);
};
extern "C" PyObject *libSalomePy_getRenderWindowInteractor(PyObject *self, PyObject *args)
{
- return ProcessEvent( new TGetRenderWindowInteractorEvent() );
+ PyObject* aResult = Py_None;
+ int toCreate = 0;
+ if ( !PyArg_ParseTuple(args, "|i:getRenderWindowInteractor", &toCreate) )
+ PyErr_Print();
+ else
+ aResult = ProcessEvent( new TGetRenderWindowInteractorEvent( toCreate ) );
+ return aResult;
+}
+
+/*!
+ Show/hide trihedron in the current VTK viewer (if there is one)
+*/
+extern "C" PyObject *libSalomePy_showTrihedron(PyObject *self, PyObject *args)
+{
+ class TEvent: public SALOME_Event {
+ public:
+ int myShow;
+ TEvent( int bShow )
+ : myShow( bShow ) {}
+ virtual void Execute() {
+ if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) {
+ if ( aVTKViewWindow->isTrihedronDisplayed() != myShow )
+ aVTKViewWindow->onViewTrihedron();
+ }
+ }
+ };
+
+ PyObject* aResult = Py_None;
+ int bShow = 0;
+ if ( !PyArg_ParseTuple(args, "i:showTrihedron", &bShow) )
+ PyErr_Print();
+ else
+ ProcessVoidEvent( new TEvent( bShow ) );
+ return aResult;
+}
+
+/*!
+ Fit all the contents in the current VTK viewer (if there is one)
+*/
+extern "C" PyObject *libSalomePy_fitAll(PyObject *self, PyObject *args)
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent() {}
+ virtual void Execute() {
+ if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) {
+ aVTKViewWindow->onFitAll();
+ }
+ }
+ };
+
+ ProcessVoidEvent( new TEvent() );
+ return Py_None;
+}
+
+/*!
+ Set view type fot the current VTK viewer (if there is one)
+*/
+extern "C" PyObject *libSalomePy_setView(PyObject *self, PyObject *args)
+{
+ class TEvent: public SALOME_Event {
+ public:
+ long myType;
+ TEvent( long type ) : myType( type) {}
+ virtual void Execute() {
+ if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) {
+ switch( myType ) {
+ case ViewFront:
+ aVTKViewWindow->onFrontView(); break;
+ case ViewBack:
+ aVTKViewWindow->onBackView(); break;
+ case ViewTop:
+ aVTKViewWindow->onTopView(); break;
+ case ViewBottom:
+ aVTKViewWindow->onBottomView(); break;
+ case ViewRight:
+ aVTKViewWindow->onRightView(); break;
+ case ViewLeft:
+ aVTKViewWindow->onLeftView(); break;
+ default:
+ PyErr_Format(PyExc_ValueError,"setView%: wrong parameter value; must be between %d and %d", ViewFront, ViewLeft );
+ break;
+ }
+ }
+ }
+ };
+
+ long type = -1;
+ if ( !PyArg_ParseTuple(args, "l:setView", &type) )
+ PyErr_Print();
+ else {
+ ProcessVoidEvent( new TEvent( type ) );
+ if( PyErr_Occurred() )
+ PyErr_Print();
+ }
+ return Py_None;
+}
+
+/*!
+ Reset contents of the current VTK viewer (if there is one)
+ to the default state
+*/
+extern "C" PyObject *libSalomePy_resetView(PyObject *self, PyObject *args)
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent() {}
+ virtual void Execute() {
+ if( SVTK_ViewWindow* aVTKViewWindow = GetVTKViewWindow( __Find ) ) {
+ aVTKViewWindow->onResetView();
+ }
+ }
+ };
+
+ ProcessVoidEvent( new TEvent() );
+ return Py_None;
}
/*!
*/
static PyMethodDef Module_Methods[] =
{
- { "getRenderer", libSalomePy_getRenderer, METH_NOARGS },
- { "getRenderWindow", libSalomePy_getRenderWindow, METH_NOARGS },
- { "getRenderWindowInteractor", libSalomePy_getRenderWindow, METH_NOARGS },
+ { "getRenderer", libSalomePy_getRenderer, METH_VARARGS },
+ { "getRenderWindow", libSalomePy_getRenderWindow, METH_VARARGS },
+ { "getRenderWindowInteractor", libSalomePy_getRenderWindowInteractor, METH_VARARGS },
+ { "showTrihedron", libSalomePy_showTrihedron, METH_VARARGS },
+ { "fitAll", libSalomePy_fitAll, METH_NOARGS },
+ { "setView", libSalomePy_setView, METH_VARARGS },
+ { "resetView", libSalomePy_resetView, METH_NOARGS },
{ NULL, NULL }
};
extern "C" void initlibSalomePy()
{
static char modulename[] = "libSalomePy";
- /*PyObject* aModule = */Py_InitModule(modulename, Module_Methods);
- if(PyErr_Occurred()){
+ // init module
+ PyObject* aModule = Py_InitModule(modulename, Module_Methods);
+ if( PyErr_Occurred() ) {
PyErr_Print();
return;
}
+ // get module's dictionary
+ PyObject *aModuleDict = PyModule_GetDict( aModule );
+ if ( aModuleDict == NULL )
+ return;
+ // add View type enumeration
+ PUBLISH_ENUM( ViewFront );
+ PUBLISH_ENUM( ViewBack );
+ PUBLISH_ENUM( ViewTop );
+ PUBLISH_ENUM( ViewBottom );
+ PUBLISH_ENUM( ViewRight );
+ PUBLISH_ENUM( ViewLeft );
}
--- /dev/null
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+SUBDIRS = SALOME_PYQT_GUI SalomePyQt
+++ /dev/null
-# 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@
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Nicolas REJNERI
+# Module : SALOME
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# Sip flags
+SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS)
+
+######################
+
+# Library target
+lib_LTLIBRARIES= libSalomePyQtGUI.la
+
+
+# Sip sources
+if IS_SIP_V4
+SIP_SRC = sipSalomePyQtGUIcmodule.cc
+SIP_FILES = SALOME_PYQT_GUI.sip
+else !IS_SIP_V4
+SIP_SRC = SalomePyQtGUIcmodule.cc
+SIP_FILES = SALOME_PYQT_GUI.sip
+endif
+
+EXTRA_DIST+= $(SIP_FILES)
+
+salomeinclude_HEADERS = \
+ SALOME_PYQT_GUI.h \
+ SALOME_PYQT_PyInterp.h \
+ SALOME_PYQT_Module.h
+
+dist_libSalomePyQtGUI_la_SOURCES= \
+ SALOME_PYQT_PyInterp.cxx \
+ SALOME_PYQT_Module.cxx
+
+dist_libSalomePyQtGUI_la_SOURCES: $(SIP_SRC)
+
+# moc pre-processing
+MOC_FILES= SALOME_PYQT_Module_moc.cxx
+nodist_libSalomePyQtGUI_la_SOURCES= $(MOC_FILES) $(SIP_SRC)
+
+libSalomePyQtGUI_la_CPPFLAGS= $(QT_INCLUDES) $(SIP_INCLUDES) $(PYTHON_INCLUDES) \
+ $(CAS_CPPFLAGS) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) \
+ -DHAVE_CONFIG_H @KERNEL_CXXFLAGS@ -D__CALL_OLD_METHODS__ \
+ -I$(srcdir)/../../PyInterp -I$(srcdir)/../../SalomeApp \
+ -I$(srcdir)/../../SUIT -I$(srcdir)/../../Qtx -I$(srcdir)/../../LightApp \
+ -I$(srcdir)/../../SalomeApp -I$(srcdir)/../../CAM -I$(srcdir)/../../STD \
+ -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@
+libSalomePyQtGUI_la_LIBADD= $(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) \
+ $(OGL_LIBS) ../../PyInterp/libPyInterp.la ../../SalomeApp/libSalomeApp.la
+
+##################################
+
+# Custom build step: generate C++ wrapping according to $(SIP_FILES)
+
+$(SIP_SRC): $(SIP_FILES)
+ $(SIP) $(SIP_FLAGS) $<
+
+$(dist_libSalomePyQtGUI_la_SOURCES): $(SIP_SRC)
+
+###################################
+++ /dev/null
-# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Nicolas REJNERI
-# Module : SALOME
-
-top_srcdir=@top_srcdir@
-top_builddir=../../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-@COMMENCE@
-
-# small trick for Mandrake-10.1: PyQt 3.13 does not support Qt 3.3.3
-ifeq ($(QT_VERS),Qt_3_3_3)
-QT_VERS = Qt_3_3_0
-endif
-
-ifeq ($(QT_VERS),Qt_3_3_4)
-QT_VERS = Qt_3_3_0
-endif
-
-# Sip flags
-SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS)
-
-# Sip 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@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+#include "PyInterp_Dispatcher.h"
#include "SALOME_PYQT_Module.h"
-#include "PyInterp_Dispatcher.h"
+
#include "SUIT_ResourceMgr.h"
#include "STD_MDIDesktop.h"
#include "STD_TabDesktop.h"
#include "SalomeApp_Application.h"
#include "SalomeApp_Study.h"
+#include "LightApp_Preferences.h"
#include "QtxWorkstack.h"
#include "QtxActionMenuMgr.h"
#include <qmenubar.h>
#include <qpopupmenu.h>
+#ifndef WIN32
#include "SALOME_PYQT_SipDefs.h"
-#if defined(SIP_VERS_v4_old) || defined(SIP_VERS_v4_new)
-#include "sipAPISalomePyQtGUI.h"
-#else
-#include "sipSalomePyQtGUIDeclSalomePyQtGUI.h"
#endif
+#include "sipAPISalomePyQtGUI.h"
-#include <sipqtQWidget.h>
-#include <sipqtQPopupMenu.h>
+#include <sip.h>
+#if SIP_VERSION < 0x040700
+#include "sipqtQWidget.h"
+#include "sipqtQPopupMenu.h"
+#endif
#include <CORBA.h>
SALOME_PYQT_Module::SALOME_PYQT_Module()
: SalomeApp_Module( __DEFAULT_NAME__ ),
myModule( 0 ),
- myXmlHandler ( 0 )
+ myXmlHandler ( 0 ),
+ myLastActivateStatus( true )
{
}
if ( !res )
return res;
+ // reset the activation status to the default value
+ myLastActivateStatus = true;
+
// ActivateReq: request class for internal activate() operation
class ActivateReq : public PyInterp_Request
{
// Posting the request
PyInterp_Dispatcher::Get()->Exec( new ActivateReq( theStudy, this ) );
+ if ( !lastActivationStatus() )
+ return false;
+
// activate menus, toolbars, etc
setMenuShown( true );
setToolShown( true );
if ( menuMgr() )
connect( menuMgr(), SIGNAL( menuHighlighted( int, int ) ),
this, SLOT( onMenuHighlighted( int, int ) ) );
+ connect( getApp(), SIGNAL( preferenceChanged( const QString&, const QString&, const QString& ) ),
+ this, SLOT( preferenceChanged( const QString&, const QString&, const QString& ) ) );
// create menus & toolbars from XML file if required
if ( myXmlHandler )
if ( menuMgr() )
disconnect( menuMgr(), SIGNAL( menuHighlighted( int, int ) ),
this, SLOT( onMenuHighlighted( int, int ) ) );
+ disconnect( getApp(), SIGNAL( preferenceChanged( const QString&, const QString&, const QString& ) ),
+ this, SLOT( preferenceChanged( const QString&, const QString&, const QString& ) ) );
// remove menus & toolbars created from XML file if required
if ( myXmlHandler )
return SalomeApp_Module::deactivateModule( theStudy );
}
+/*!
+ * Returns the status of last trying of module activation.
+ * Before fisrt activation - status is false
+*/
+bool SALOME_PYQT_Module::lastActivationStatus() const
+{
+ return myLastActivateStatus;
+}
+
+/*!
+ Preferences changing (application) - called when preference is changed
+*/
+void SALOME_PYQT_Module::preferenceChanged( const QString& module,
+ const QString& section,
+ const QString& setting )
+{
+ MESSAGE( "SALOME_PYQT_Module::preferenceChanged");
+
+ // perform synchronous request to Python event dispatcher
+ class Event : public PyInterp_LockRequest
+ {
+ public:
+ Event( PyInterp_base* _py_interp,
+ SALOME_PYQT_Module* _obj,
+ const QString& _section,
+ const QString& _setting )
+ : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true)
+ myObj ( _obj ),
+ mySection( _section ),
+ mySetting( _setting ) {}
+
+ protected:
+ virtual void execute()
+ {
+ myObj->prefChanged( mySection, mySetting );
+ }
+
+ private:
+ SALOME_PYQT_Module* myObj;
+ QString mySection, mySetting;
+ };
+
+ if ( module != moduleName() ) {
+ // Module's preferences are processed by preferencesChanged() method
+ // ...
+ // Posting the request only if dispatcher is not busy!
+ // Executing the request synchronously
+ if ( !PyInterp_Dispatcher::Get()->IsBusy() )
+ PyInterp_Dispatcher::Get()->Exec( new Event( myInterp, this, section, setting ) );
+ }
+}
+
/*!
* Called when study desktop is activated.
* Used for notifying about changing of the active study.
PyInterp_Dispatcher::Get()->Exec( new PopupMenuEvent( myInterp, this, theContext, thePopupMenu ) );
}
+/*!
+ * Export preferences for the Python module.
+ * Called only once when the first instance of the module is created.
+ */
+void SALOME_PYQT_Module::createPreferences()
+{
+ MESSAGE( "SALOME_PYQT_Module::createPreferences");
+ // perform synchronous request to Python event dispatcher
+ class Event : public PyInterp_LockRequest
+ {
+ public:
+ Event( PyInterp_base* _py_interp,
+ SALOME_PYQT_Module* _obj )
+ : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true)
+ myObj ( _obj ) {}
+
+ protected:
+ virtual void execute()
+ {
+ myObj->initPreferences();
+ }
+
+ private:
+ SALOME_PYQT_Module* myObj;
+ };
+
+ // Posting the request only if dispatcher is not busy!
+ // Executing the request synchronously
+ if ( !PyInterp_Dispatcher::Get()->IsBusy() )
+ PyInterp_Dispatcher::Get()->Exec( new Event( myInterp, this ) );
+}
+
/*!
* Defines the dockable window associated with the module.
* To fill the list of windows the correspondind Python module's windows()
}
}
+/*!
+ Preferences changing (module) - called when the module's preferences are changed
+*/
+void SALOME_PYQT_Module::preferencesChanged( const QString& section, const QString& setting )
+{
+ MESSAGE( "SALOME_PYQT_Module::preferencesChanged");
+
+ // perform synchronous request to Python event dispatcher
+ class Event : public PyInterp_LockRequest
+ {
+ public:
+ Event( PyInterp_base* _py_interp,
+ SALOME_PYQT_Module* _obj,
+ const QString& _section,
+ const QString& _setting )
+ : PyInterp_LockRequest( _py_interp, 0, true ), // this request should be processed synchronously (sync == true)
+ myObj ( _obj ),
+ mySection( _section ),
+ mySetting( _setting ) {}
+
+ protected:
+ virtual void execute()
+ {
+ myObj->prefChanged( mySection, mySetting );
+ }
+
+ private:
+ SALOME_PYQT_Module* myObj;
+ QString mySection, mySetting;
+ };
+
+ // Posting the request only if dispatcher is not busy!
+ // Executing the request synchronously
+ if ( !PyInterp_Dispatcher::Get()->IsBusy() )
+ PyInterp_Dispatcher::Get()->Exec( new Event( myInterp, this, section, setting ) );
+}
+
+
/*!
* Performs internal initialization
* - initializes/gets the Python interpreter (one per study)
// ... first put default values
myWindowsMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::DockLeft );
myWindowsMap.insert( SalomeApp_Application::WT_PyConsole, Qt::DockBottom );
- // VSR: LogWindow is not yet implemented
- // myWindowsMap.insert( SalomeApp_Application::WT_LogWindow, Qt::DockBottom );
+ myWindowsMap.insert( SalomeApp_Application::WT_LogWindow, Qt::DockBottom );
if(PyObject_HasAttrString(myModule , "windows")){
PyObjWrapper res1( PyObject_CallMethod( myModule, "windows", "" ) );
// call Python module's activate() method (for the new modules)
if(PyObject_HasAttrString(myModule , "activate")){
- PyObjWrapper res1( PyObject_CallMethod( myModule, "activate", "" ) );
- if( !res1 ) {
+ PyObject* res1 = PyObject_CallMethod( myModule, "activate", "" );
+ if ( !res1 || !PyBool_Check( res1 ) ) {
PyErr_Print();
+ //= true: for support of old modules
+ myLastActivateStatus = true;
+ }
+ else {
+ //detect return status
+ myLastActivateStatus = PyObject_IsTrue( res1 );
}
}
}
*/
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( "" );
}
}
+/*!
+ * Initialises preferences for the module
+ * - calls Python module's createPreferences() method
+ */
+void SALOME_PYQT_Module::initPreferences()
+{
+ // Python interpreter should be initialized and Python module should be
+ // import first
+ if ( !myInterp || !myModule )
+ return;
+
+ // temporary set myInitModule because createPreferences() method
+ // might be called during the module intialization process
+ myInitModule = this;
+
+ if ( PyObject_HasAttrString(myModule , "createPreferences") ) {
+ PyObjWrapper res( PyObject_CallMethod( myModule, "createPreferences", "" ) );
+ if( !res ) {
+ PyErr_Print();
+ }
+ }
+
+ myInitModule = 0;
+}
+
/*!
* Initialises python subinterpreter (one per study)
*/
} //__CALL_OLD_METHODS__
}
+/*!
+ * Preference changing callback function
+ * - calls Python module's preferenceChanged(string,string,string) method
+ */
+void SALOME_PYQT_Module::prefChanged( const QString& section, const QString& setting )
+{
+ // Python interpreter should be initialized and Python module should be
+ // import first
+ if ( !myInterp || !myModule )
+ return;
+
+ if ( PyObject_HasAttrString(myModule , "preferenceChanged") ) {
+ PyObjWrapper res( PyObject_CallMethod( myModule,
+ "preferenceChanged",
+ "ss",
+ section.latin1(),
+ setting.latin1() ) );
+ if( !res ) {
+ PyErr_Print();
+ }
+ }
+}
+
/*!
* Returns default menu group
*/
}
return a;
}
+
/*!
* Load icon from resource file
*/
return false;
}
+/*!
+ * The next methods call the parent implementation.
+ * This is done to open protected methods from LightApp_Module class.
+ */
+
+int SALOME_PYQT_Module::addGlobalPreference( const QString& label )
+{
+ LightApp_Preferences* pref = preferences();
+ if ( !pref )
+ return -1;
+
+ return pref->addPreference( label, -1 );
+}
+
+int SALOME_PYQT_Module::addPreference( const QString& label )
+{
+ return SalomeApp_Module::addPreference( label );
+}
+
+int SALOME_PYQT_Module::addPreference( const QString& label,
+ const int pId, const int type,
+ const QString& section,
+ const QString& param )
+{
+ return SalomeApp_Module::addPreference( label, pId, type, section, param );
+}
+
+QVariant SALOME_PYQT_Module::preferenceProperty( const int id,
+ const QString& prop ) const
+{
+ QVariant v = SalomeApp_Module::preferenceProperty( id, prop );
+ return v;
+}
+
+void SALOME_PYQT_Module::setPreferenceProperty( const int id,
+ const QString& prop,
+ const QVariant& var )
+{
+ SalomeApp_Module::setPreferenceProperty( id, prop, var );
+}
+
// SALOME_PYQT_XmlHandler class implementation
// gets an tag name for the dom element [ static ]
QMap<int, int> myWindowsMap;
/* compatible view managers list */
QStringList myViewMgrList;
+
+ /* status of last trying of module activation*/
+ bool myLastActivateStatus;
/******************************
* Construction/destruction
/* context popup menu request */
void contextMenuPopup( const QString&, QPopupMenu*, QString& );
+ /* create preferences */
+ void createPreferences();
+
/* get module engine IOR */
virtual QString engineIOR() const;
/* load icon from resource file */
QIconSet loadIcon( const QString& fileName );
+ /* working with preferences : open protected methods */
+ int addGlobalPreference( const QString& );
+ int addPreference( const QString& );
+ int addPreference( const QString&, const int, const int = -1,
+ const QString& = QString::null,
+ const QString& = QString::null );
+ QVariant preferenceProperty( const int, const QString& ) const;
+ void setPreferenceProperty( const int, const QString&, const QVariant& );
+
/* Show/hide menus/toolbars */
void setMenuShown( const bool );
void setToolShown( const bool );
+ /* Preferences changing (module) */
+ void preferencesChanged( const QString&, const QString& );
+
public slots:
/* activation */
virtual bool activateModule( SUIT_Study* );
/* deactivation */
virtual bool deactivateModule( SUIT_Study* );
+ /* Preferences changing (application) */
+ void preferenceChanged( const QString&, const QString&, const QString& );
+
/******************************
* Internal methods
******************************/
void init ( CAM_Application* );
/* internal activation */
void activate ( SUIT_Study* );
+
+ /* getting status of last module activation */
+ bool lastActivationStatus() const;
+
/* internal deactivation */
void deactivate ( SUIT_Study* );
/* customization */
void guiEvent( const int );
/* Menu highlight processing */
void menuHighlight( const int, const int );
+ /* Init preferences */
+ void initPreferences();
/* initialize a Python subinterpreter */
void initInterp ( int );
/* set workspace to Python GUI module */
void setWorkSpace();
+ /* preferences changing */
+ void prefChanged( const QString&, const QString& );
+
friend class SALOME_PYQT_XmlHandler;
};
--- /dev/null
+# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Nicolas REJNERI
+# Module : SALOME
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# Sip flags
+SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS)
+
+# Sip common sources
+SIP_SRC = sipSalomePyQtSalomePyQt.cc \
+ sipSalomePyQtSALOME_Selection.cc \
+ sipSalomePyQtQtxAction.cc
+
+# Sip version-specific sources
+if IS_SIP_V4
+SIP_SRC += sipSalomePyQtcmodule.cc
+else !IS_SIP_V4
+SIP_SRC += SalomePyQtcmodule.cc
+endif
+
+# Sip/moc sources and Sip definition files
+if IS_SIP_V4
+if IS_SIP_NEW
+MOC_SRC =
+MOC_H =
+SIP_FILES = SalomePyQt_v4.sip
+else !IS_SIP_NEW
+MOC_SRC = sipSalomePyQtcmodule_moc.cxx
+MOC_H = sipSalomePyQtcmodule.h
+SIP_FILES = SalomePyQt_v4.sip
+endif
+else !IS_SIP_V4
+SIP_FILES = SalomePyQt.sip
+if IS_SIP_NEW
+MOC_SRC = SalomePyQtcmodule_moc.cxx
+MOC_H = SalomePyQtcmodule.h
+else !IS_SIP_NEW
+MOC_SRC = sipSalomePyQtProxySalomePyQt_moc.cxx
+MOC_H = sipSalomePyQtProxySalomePyQt.h
+endif
+endif
+
+EXTRA_DIST+= SalomePyQt.sip SalomePyQt_v4.sip
+
+# Libraries targets
+MOC_FILES= SalomePyQt_moc.cxx
+
+COMMON_CPP_FLAGS=$(QT_INCLUDES) $(SIP_INCLUDES) $(PYTHON_INCLUDES) \
+ $(CAS_CPPFLAGS) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) \
+ -DHAVE_CONFIG_H @KERNEL_CXXFLAGS@ -I$(top_builddir)/salomeadn/unix \
+ -I$(top_builddir)/idl \
+ -I$(srcdir)/../../SUIT -I$(srcdir)/../../CAM -I$(srcdir)/../../STD \
+ -I$(srcdir)/../../Qtx -I$(srcdir)/../../SalomeApp -I$(srcdir)/../../Event \
+ -I$(srcdir)/../../SalomeSession -I$(srcdir)/../../LogWindow \
+ -I$(srcdir)/../../VTKViewer -I$(srcdir)/../../TOOLSGUI \
+ -I$(srcdir)/../SALOME_PYQT_GUI -I$(srcdir)/../../PyInterp \
+ -I$(srcdir)/../../LightApp -I$(srcdir)/../../ObjBrowser \
+ -I$(srcdir)/../../OBJECT \
+ -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@
+
+COMMON_LIBS=$(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) \
+ $(OGL_LIBS) ../../SUIT/libsuit.la ../../CAM/libCAM.la ../../STD/libstd.la \
+ ../../Qtx/libqtx.la ../../SalomeApp/libSalomeApp.la ../../Event/libEvent.la \
+ ../../Session/libSalomeSession.la ../../LogWindow/libLogWindow.la \
+ ../../VTKViewer/libVTKViewer.la ../../TOOLSGUI/libToolsGUI.la \
+ ../SALOME_PYQT_GUI/libSalomePyQtGUI.la
+
+if IS_SIP_V4
+
+lib_LTLIBRARIES = libSalomePyQt.la
+dist_libSalomePyQt_la_SOURCES= SalomePyQt.cxx
+nodist_libSalomePyQt_la_SOURCES= $(MOC_FILES) $(SIP_SRC) $(MOC_SRC)
+libSalomePyQt_la_CPPFLAGS = $(COMMON_CPP_FLAGS)
+libSalomePyQt_la_LIBADD = $(COMMON_LIBS)
+
+else !IS_SIP_V4
+
+lib_LTLIBRARIES = libSalomePyQtcmodule.la
+dist_libSalomePyQtcmodule_la_SOURCES= SalomePyQt.cxx
+nodist_libSalomePyQtcmodule_la_SOURCES= $(MOC_FILES) $(SIP_SRC) $(MOC_SRC)
+libSalomePyQtcmodule_la_CPPFLAGS = $(MY_CPP_FLAGS)
+libSalomePyQtcmodule_la_LIBADD = $(COMMON_LIBS)
+
+endif
+
+if IS_SIP_V4
+else
+nodist_sharedpkgpython_PYTHON= SalomePyQt.py
+endif
+
+# Custom build step: generate C++ wrapping according to $(SIP_FILES)
+$(SIP_SRC): $(SIP_FILES)
+ $(SIP) $(SIP_FLAGS) $<
+
+$(MOC_H): $(SIP_FILES)
+ $(SIP) $(SIP_FLAGS) $<
+
+if IS_SIP_V4
+install-exec-hook: $(libdir)/SalomePyQt.so
+$(libdir)/SalomePyQt.so:
+ (cd $(libdir); ln -s libSalomePyQt.so SalomePyQt.so;)
+else !IS_SIP_V4
+install-exec-hook: $(libdir)/SalomePyQtcmodule.so
+$(libdir)/SalomePyQt.so:
+ (cd $(libdir); ln -sf libSalomePyQtcmodule.so SalomePyQt.so;)
+endif
+
+$(SIP_SRC): $(MOC_SRC)
+++ /dev/null
-# Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Nicolas REJNERI
-# Module : SALOME
-
-top_srcdir=@top_srcdir@
-top_builddir=../../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-# small trick for Mandrake-10.1: PyQt 3.13 does not support Qt 3.3.3
-ifeq ($(QT_VERS),Qt_3_3_3)
-QT_VERS = Qt_3_3_0
-endif
-ifeq ($(QT_VERS),Qt_3_3_4)
-QT_VERS = Qt_3_3_0
-endif
-
-# Sip flags
-SIP_FLAGS = -t WS_X11 -t $(QT_VERS) $(PYQT_SIPFLAGS) -s ".cc" -c . -I $(PYQT_SIPS)
-
-# Sip common sources
-SIP_SRC = sipSalomePyQtSalomePyQt.cc \
- sipSalomePyQtSALOME_Selection.cc \
- sipSalomePyQtQtxAction.cc
-
-# Sip version-specific sources
-ifeq ($(SIP_VERS),v4_old)
-SIP_SRC += sipSalomePyQtcmodule.cc
-else
-ifeq ($(SIP_VERS),v4_new)
-SIP_SRC += sipSalomePyQtcmodule.cc
-else
-SIP_SRC += SalomePyQtcmodule.cc
-endif
-endif
-
-# Sip/moc sources
-ifeq ($(SIP_VERS),v4_old)
-MOC_SRC = sipSalomePyQtcmodule_moc.cxx
-MOC_H = sipSalomePyQtcmodule.h
-else
-ifeq ($(SIP_VERS),v3_new)
-MOC_SRC = SalomePyQtcmodule_moc.cxx
-MOC_H = SalomePyQtcmodule.h
-else
-ifeq ($(SIP_VERS),v3_old)
-MOC_SRC = sipSalomePyQtProxySalomePyQt_moc.cxx
-MOC_H = sipSalomePyQtProxySalomePyQt.h
-endif
-endif
-endif
-
-# Sip definition files
-ifeq ($(SIP_VERS),v4_old)
-SIP_FILES = SalomePyQt_v4.sip
-else
-ifeq ($(SIP_VERS),v4_new)
-SIP_FILES = SalomePyQt_v4.sip
-else
-SIP_FILES = SalomePyQt.sip
-endif
-endif
-
-# Libraries targets
-ifeq ($(SIP_VERS),v4_old)
-LIB = SalomePyQt.so
-else
-ifeq ($(SIP_VERS),v4_new)
-LIB = SalomePyQt.so
-else
-LIB = libSalomePyQtcmodule.la
-endif
-endif
-
-# Exported python scripts
-ifeq ($(SIP_VERS),v3_old)
-EXPORT_SHAREDPYSCRIPTS = SalomePyQt.py
-else
-ifeq ($(SIP_VERS),v3_new)
-EXPORT_SHAREDPYSCRIPTS = SalomePyQt.py
-endif
-endif
-
-# Library sources
-LIB_SRC = SalomePyQt.cxx \
- $(SIP_SRC) \
- $(MOC_SRC)
-
-# Library moc sources
-LIB_MOC = SalomePyQt.h
-
-# Client IDL
-LIB_CLIENT_IDL = SALOME_Exception.idl SALOME_GenericObj.idl
-
-# Compilation/linkage flags
-CPPFLAGS += $(QT_INCLUDES) $(SIP_INCLUDES) $(PYTHON_INCLUDES) $(OCC_INCLUDES) $(VTK_INCLUDES) $(OGL_INCLUDES) $(BOOST_CPPFLAGS) -DHAVE_CONFIG_H $(KERNEL_CXXFLAGS)
-LIBS += $(PYTHON_LIBS) $(SIP_LIBS) $(PYQT_LIBS) $(VTK_LIBS) $(OGL_LIBS)
-LDFLAGS += -lsuit -lCAM -lstd -lqtx -lSalomeApp -lSalomeSession -lEvent -lLogWindow -lVTKViewer -lToolsGUI -lSalomePyQtGUI
-
-
-# Custom build step: generate C++ wrapping according to $(SIP_FILES)
-$(SIP_SRC): $(SIP_FILES)
- $(SIP) $(SIP_FLAGS) $<
-
-$(MOC_SRC): $(MOC_H)
- $(MOC) $< -o $@
-
-@CONCLUDE@
#include "LightApp_SelectionMgr.h"
#include "OB_Browser.h"
#include "QtxAction.h"
+#include "LogWindow.h"
using namespace std;
ProcessVoidEvent( new TEvent( name, value, autoValue ) );
}
+/*!
+ SalomePyQt::addBoolSetting
+ Adds an boolean setting to the application preferences
+ <autoValue> parameter is obsolete parameter and currently not used. To be removed lately.
+ This function is obsolete. Use addSetting() instead.
+*/
+void SalomePyQt::addBoolSetting( const QString& name, const bool value, bool autoValue )
+{
+ class TEvent: public SALOME_Event {
+ QString myName;
+ bool myValue;
+ bool myAutoValue;
+ public:
+ TEvent( const QString& name, const bool value, bool autoValue )
+ : myName( name ), myValue( value ), myAutoValue( autoValue ) {}
+ virtual void Execute() {
+ if ( SUIT_Session::session() ) {
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ QStringList sl = QStringList::split( ":", myName );
+ QString _sec = sl.count() > 1 ? sl[ 0 ].stripWhiteSpace() : QString( DEFAULT_SECTION );
+ QString _nam = sl.count() > 1 ? sl[ 1 ].stripWhiteSpace() : sl.count() > 0 ? sl[ 0 ].stripWhiteSpace() : QString( "" );
+ if ( !_sec.isEmpty() && !_nam.isEmpty() )
+ resMgr->setValue( _sec, _nam, myValue );
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent( name, value, autoValue ) );
+}
+
/*!
SalomePyQt::removeSettings
Removes a setting from the application preferences
ProcessVoidEvent( new TEvent( section, name, value ) );
}
+/*!
+ SalomePyQt::addSetting
+ Adds a boolean setting to the application preferences
+ (note: the last "dumb" parameter is used in order to avoid
+ sip compilation error because of conflicting int and bool types)
+*/
+void SalomePyQt::addSetting( const QString& section, const QString& name, const bool value, const int )
+{
+ class TEvent: public SALOME_Event {
+ QString mySection;
+ QString myName;
+ bool myValue;
+ public:
+ TEvent( const QString& section, const QString& name, bool value )
+ : mySection( section ), myName( name ), myValue( value ) {}
+ virtual void Execute() {
+ if ( SUIT_Session::session() ) {
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ if ( !mySection.isEmpty() && !myName.isEmpty() )
+ resMgr->setValue( mySection, myName, myValue );
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent( section, name, value ) );
+}
+
/*!
SalomePyQt::addSetting
Adds a string setting to the application preferences
/*!
\return an double setting from the application preferences
*/
-double SalomePyQt::doubleSetting( const QString& section, const QString& name, const int def )
+double SalomePyQt::doubleSetting( const QString& section, const QString& name, const double def )
{
return ProcessEvent( new TGetDblSettingEvent( section, name, def ) );
}
ProcessVoidEvent( new TEvent( section, name ) );
}
+/*!
+ SalomePyQt::hasSetting
+ Returns True if the settings exists
+*/
+class THasColorSettingEvent: public SALOME_Event {
+public:
+ typedef bool TResult;
+ TResult myResult;
+ QString mySection;
+ QString myName;
+ THasColorSettingEvent( const QString& section, const QString& name )
+ : mySection( section ), myName( name ) {}
+ virtual void Execute() {
+ if ( SUIT_Session::session() ) {
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ myResult = resMgr->hasValue( mySection, myName );
+ }
+ }
+};
+bool SalomePyQt::hasSetting( const QString& section, const QString& name )
+{
+ return ProcessEvent( new THasColorSettingEvent( section, name ) );
+}
+
/*!
SalomePyQt::getFileName
Displays 'Open/Save file' dialog box and returns a user's choice (file name)
return ProcessEvent( new TClearMenuEvent( id, menu, removeActions ) );
}
+/*!
+ SalomePyQt::addGlobalPreference
+ Adds global (not module) preferences group
+ */
+class TAddGlobalPrefEvent: public SALOME_Event {
+public:
+ typedef int TResult;
+ TResult myResult;
+ QString myLabel;
+ TAddGlobalPrefEvent( const QString& label )
+ : myResult( -1 ), myLabel( label ) {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule();
+ if ( !module )
+ module = dynamic_cast<SALOME_PYQT_Module*>( anApp->activeModule() );
+ if ( module )
+ myResult = module->addGlobalPreference( myLabel );
+ }
+ }
+};
+int SalomePyQt::addGlobalPreference( const QString& label )
+{
+ return ProcessEvent( new TAddGlobalPrefEvent( label ) );
+}
+
+/*!
+ SalomePyQt::addPreference
+ Adds preference
+ */
+class TAddPrefEvent: public SALOME_Event {
+public:
+ typedef int TResult;
+ TResult myResult;
+ QString myLabel;
+ TAddPrefEvent( const QString& label )
+ : myResult( -1 ), myLabel( label ) {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule();
+ if ( !module )
+ module = dynamic_cast<SALOME_PYQT_Module*>( anApp->activeModule() );
+ if ( module )
+ myResult = module->addPreference( myLabel );
+ }
+ }
+};
+int SalomePyQt::addPreference( const QString& label )
+{
+ return ProcessEvent( new TAddPrefEvent( label ) );
+}
+
+/*!
+ SalomePyQt::addPreference
+ Adds preference
+ */
+class TAddPrefParamEvent: public SALOME_Event {
+public:
+ typedef int TResult;
+ TResult myResult;
+ QString myLabel;
+ int myPId;
+ int myType;
+ QString mySection;
+ QString myParam;
+ TAddPrefParamEvent( const QString& label,
+ const int pId, const int type,
+ const QString& section,
+ const QString& param )
+ : myResult( -1 ),
+ myLabel( label ), myPId( pId ), myType( type ),
+ mySection( section ), myParam ( param ) {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule();
+ if ( !module )
+ module = dynamic_cast<SALOME_PYQT_Module*>( anApp->activeModule() );
+ if ( module )
+ myResult = module->addPreference( myLabel, myPId, myType, mySection, myParam );
+ }
+ }
+};
+int SalomePyQt::addPreference( const QString& label, const int pId, const int type,
+ const QString& section, const QString& param )
+{
+ return ProcessEvent( new TAddPrefParamEvent( label, pId, type, section, param ) );
+}
+
+/*!
+ SalomePyQt::preferenceProperty
+ Gets the property value for the given (by id) preference
+ */
+class TPrefPropEvent: public SALOME_Event {
+public:
+ typedef QVariant TResult;
+ TResult myResult;
+ int myId;
+ QString myProp;
+ TPrefPropEvent( const int id, const QString& prop )
+ : myId( id ), myProp( prop )
+ {
+ myResult = QVariant();
+ }
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule();
+ if ( !module )
+ module = dynamic_cast<SALOME_PYQT_Module*>( anApp->activeModule() );
+ if ( module )
+ myResult = module->preferenceProperty( myId, myProp );
+ }
+ }
+};
+QVariant SalomePyQt::preferenceProperty( const int id, const QString& prop )
+{
+ return ProcessEvent( new TPrefPropEvent( id, prop ) );
+}
+
+/*!
+ SalomePyQt::setPreferenceProperty
+ Sets the property value for the given (by id) preference
+ */
+void SalomePyQt::setPreferenceProperty( const int id,
+ const QString& prop,
+ const QVariant& var )
+{
+ class TEvent: public SALOME_Event {
+ int myId;
+ QString myProp;
+ QVariant myVar;
+ public:
+ TEvent( const int id, const QString& prop, const QVariant& var )
+ : myId( id ), myProp( prop ), myVar( var ) {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule();
+ if ( !module )
+ module = dynamic_cast<SALOME_PYQT_Module*>( anApp->activeModule() );
+ if ( module )
+ module->setPreferenceProperty( myId, myProp, myVar );
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent( id, prop, var) );
+}
+
+/*!
+ SalomePyQt::addPreferenceProperty
+ Adds the property value to the list of values
+ for the given (by id) preference
+
+ This method allows creating properties which are QValueList<QVariant>
+ - there is no way to pass such values directly to QVariant parameter
+ from Python
+ */
+void SalomePyQt::addPreferenceProperty( const int id,
+ const QString& prop,
+ const int idx,
+ const QVariant& var )
+{
+ class TEvent: public SALOME_Event {
+ int myId;
+ QString myProp;
+ int myIdx;
+ QVariant myVar;
+ public:
+ TEvent( const int id, const QString& prop, const int idx, const QVariant& var )
+ : myId( id ), myProp( prop ), myIdx( idx), myVar( var ) {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SALOME_PYQT_Module* module = SALOME_PYQT_Module::getInitModule();
+ if ( !module )
+ module = dynamic_cast<SALOME_PYQT_Module*>( anApp->activeModule() );
+ if ( module ) {
+ QVariant var = module->preferenceProperty( myId, myProp );
+ if ( var.isValid() ) {
+ if ( var.type() == QVariant::StringList ) {
+ QStringList sl = var.asStringList();
+ if ( myIdx >= 0 && myIdx < sl.count() )
+ sl[myIdx] = myVar.asString();
+ else
+ sl.append( myVar.asString() );
+ module->setPreferenceProperty( myId, myProp, sl );
+ }
+ else if ( var.type() == QVariant::List ) {
+ QValueList<QVariant> vl = var.asList();
+ if ( myIdx >= 0 && myIdx < vl.count() )
+ vl[myIdx] = myVar;
+ else
+ vl.append( myVar );
+ module->setPreferenceProperty( myId, myProp, vl );
+ }
+ }
+ else {
+ QValueList<QVariant> vl;
+ vl.append( myVar );
+ module->setPreferenceProperty( myId, myProp, vl );
+ }
+ }
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent( id, prop, idx, var) );
+}
+
+/*!
+ SalomePyQt::message
+ Puts the message to the Log output window
+ */
+void SalomePyQt::message( const QString& msg, bool addSeparator )
+{
+ class TEvent: public SALOME_Event {
+ QString myMsg;
+ bool myAddSep;
+ public:
+ TEvent( const QString& msg, bool addSeparator )
+ : myMsg( msg ), myAddSep( addSeparator ) {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ LogWindow* lw = anApp->logWindow();
+ if ( lw )
+ lw->putMessage( myMsg, myAddSep );
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent( msg, addSeparator ) );
+}
+
+/*!
+ SalomePyQt::clearMessages
+ Removes all the messages from the Log output window
+ */
+void SalomePyQt::clearMessages()
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent() {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ LogWindow* lw = anApp->logWindow();
+ if ( lw )
+ lw->clear();
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent() );
+}
#include <qcolor.h>
#include <LightApp_Application.h>
+#include <LightApp_Preferences.h>
class LightApp_SelectionMgr;
class SalomeApp_Application;
WT_User = LightApp_Application::WT_User
};
+enum {
+ PT_Space = LightApp_Preferences::Space,
+ PT_Bool = LightApp_Preferences::Bool,
+ PT_Color = LightApp_Preferences::Color,
+ PT_String = LightApp_Preferences::String,
+ PT_Selector = LightApp_Preferences::Selector,
+ PT_DblSpin = LightApp_Preferences::DblSpin,
+ PT_IntSpin = LightApp_Preferences::IntSpin,
+ PT_Double = LightApp_Preferences::Double,
+ PT_Integer = LightApp_Preferences::Integer,
+ PT_GroupBox = LightApp_Preferences::GroupBox,
+ PT_Font = LightApp_Preferences::Font,
+ PT_DirList = LightApp_Preferences::DirList,
+ PT_File = LightApp_Preferences::File,
+ PT_User = LightApp_Preferences::User
+};
+
class SalomePyQt
{
public:
static void addSetting ( const QString&, const QString&, const double );
static void addSetting ( const QString&, const QString&, const int );
+ static void addSetting ( const QString&, const QString&, const bool, const int );
static void addSetting ( const QString&, const QString&, const QString& );
static void addSetting ( const QString&, const QString&, const QColor& );
static int integerSetting( const QString&, const QString&, const int = 0 );
- static double doubleSetting ( const QString&, const QString&, const int = 0 );
+ static double doubleSetting ( const QString&, const QString&, const double = 0 );
static bool boolSetting ( const QString&, const QString&, const bool = 0 );
static QString stringSetting ( const QString&, const QString&, const QString& = QString("") );
static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() );
static void removeSetting ( const QString&, const QString& );
+ static bool hasSetting ( const QString&, const QString& );
// obsolete
static void addStringSetting( const QString&, const QString&, bool = true );
static void addIntSetting ( const QString&, const int, bool = true );
+ static void addBoolSetting ( const QString&, const bool, bool = true );
static void addDoubleSetting( const QString&, const double, bool = true );
static void removeSettings ( const QString& );
static QString getSetting ( const QString& );
+
+ static int addGlobalPreference( const QString& );
+ static int addPreference( const QString& );
+ static int addPreference( const QString&,
+ const int, const int = -1,
+ const QString& = QString::null,
+ const QString& = QString::null );
+ static QVariant preferenceProperty( const int, const QString& );
+ static void setPreferenceProperty( const int,
+ const QString&,
+ const QVariant& );
+ static void addPreferenceProperty( const int,
+ const QString&,
+ const int,
+ const QVariant& );
+
+ static void message( const QString&, bool = true );
+ static void clearMessages();
};
#endif // SALOME_PYQT_H
WT_User
};
+enum PrefType {
+ PT_Space,
+ PT_Bool,
+ PT_Color,
+ PT_String,
+ PT_Selector,
+ PT_DblSpin,
+ PT_IntSpin,
+ PT_Double,
+ PT_Integer,
+ PT_GroupBox,
+ PT_Font,
+ PT_DirList,
+ PT_File,
+ PT_User
+};
+
class QtxAction : QAction
{
%TypeHeaderCode
static void addSetting ( const QString&, const QString&, const double );
static void addSetting ( const QString&, const QString&, const int /Constrained/ );
+ static void addSetting ( const QString&, const QString&, const bool, const int );
static void addSetting ( const QString&, const QString&, const QString& );
static void addSetting ( const QString&, const QString&, const QColor& );
static int integerSetting( const QString&, const QString&, int = 0 );
- static double doubleSetting ( const QString&, const QString&, int = 0 );
+ static double doubleSetting ( const QString&, const QString&, double = 0 );
static bool boolSetting ( const QString&, const QString&, bool = false );
static QString stringSetting ( const QString&, const QString&, const QString& = QString("") );
static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() );
static void removeSetting ( const QString&, const QString& );
+ static bool hasSetting ( const QString&, const QString& );
// obsolete
static void addStringSetting( const QString&, const QString&, bool = true );
static void addIntSetting ( const QString&, const int, bool = true );
static void addDoubleSetting( const QString&, const double, bool = true );
+ static void addBoolSetting ( const QString&, const bool, bool = true );
static void removeSettings ( const QString& );
static QString getSetting ( const QString& );
+
+ static int addGlobalPreference( const QString& );
+ static int addPreference( const QString& );
+ static int addPreference( const QString&, const int, int = -1,
+ const QString& = QString::null,
+ const QString& = QString::null );
+ static QVariant preferenceProperty( const int, const QString& );
+ static void setPreferenceProperty( const int,
+ const QString&,
+ const QVariant& );
+ static void addPreferenceProperty( const int,
+ const QString&,
+ const int,
+ const QVariant& );
+
+ static void message( const QString&, bool = true );
+ static void clearMessages();
};
%Import qtmod.sip
+%ExportedHeaderCode
+#include <SalomePyQt.h>
+%End
+
class SALOME_Selection : QObject
{
%TypeHeaderCode
%End
public:
- void Clear();
- void ClearIObjects();
- void ClearFilters();
+ void Clear() /ReleaseGIL/ ;
+ void ClearIObjects() /ReleaseGIL/ ;
+ void ClearFilters() /ReleaseGIL/ ;
private:
SALOME_Selection( QObject* /TransferThis/ );
void currentSelectionChanged();
};
+//%ExportedHeaderCode
+
enum MenuName {
File = 1,
View = 2,
WT_User
};
+enum PrefType {
+ PT_Space,
+ PT_Bool,
+ PT_Color,
+ PT_String,
+ PT_Selector,
+ PT_DblSpin,
+ PT_IntSpin,
+ PT_Double,
+ PT_Integer,
+ PT_GroupBox,
+ PT_Font,
+ PT_DirList,
+ PT_File,
+ PT_User
+};
+
+//%End
+
class QtxAction : QAction
{
%TypeHeaderCode
#include <QtxAction.h>
%End
-
private:
QtxAction(const QtxAction &);
};
%End
public:
- static QWidget* getDesktop();
- static QWidget* getMainFrame();
- static QMenuBar* getMainMenuBar();
- static QPopupMenu* getPopupMenu( const MenuName );
- static SALOME_Selection* getSelection() /Factory/;
- static int getStudyId();
- static void putInfo( const QString&, const int = 0 );
- static const QString getActiveComponent();
- static void updateObjBrowser( const int = 0, bool = true );
+ static QWidget* getDesktop() /ReleaseGIL/ ;
+ static QWidget* getMainFrame() /ReleaseGIL/ ;
+ static QMenuBar* getMainMenuBar() /ReleaseGIL/ ;
+ static QPopupMenu* getPopupMenu( const MenuName ) /ReleaseGIL/ ;
+ static SALOME_Selection* getSelection() /Factory,ReleaseGIL/ ;
+ static int getStudyId() /ReleaseGIL/ ;
+ static void putInfo( const QString&, const int = 0 ) /ReleaseGIL/ ;
+ static const QString getActiveComponent() /ReleaseGIL/ ;
+ static void updateObjBrowser( const int = 0, bool = true ) /ReleaseGIL/ ;
static QString getFileName ( QWidget*, const QString&, const QStringList&, const QString&, bool ) /ReleaseGIL/ ;
static QStringList getOpenFileNames ( QWidget*, const QString&, const QStringList&, const QString& ) /ReleaseGIL/ ;
static QString getExistingDirectory( QWidget*, const QString&, const QString& ) /ReleaseGIL/ ;
- static void helpContext( const QString&, const QString& );
+ static void helpContext( const QString&, const QString& ) /ReleaseGIL/ ;
- static bool dumpView( const QString& );
+ static bool dumpView( const QString& ) /ReleaseGIL/ ;
- static int defaultMenuGroup();
+ static int defaultMenuGroup() /ReleaseGIL/ ;
- static int createTool( const QString& );
- static int createTool( const int, const int, const int = -1 );
- static int createTool( const int, const QString&, const int = -1 );
- static int createTool( QtxAction*, const int, const int = -1, const int = -1 );
- static int createTool( QtxAction*, const QString&, const int = -1, const int = -1 );
+ static int createTool( const QString& ) /ReleaseGIL/ ;
+ static int createTool( const int, const int, const int = -1 ) /ReleaseGIL/ ;
+ static int createTool( const int, const QString&, const int = -1 ) /ReleaseGIL/ ;
+ static int createTool( QtxAction*, const int, const int = -1, const int = -1 ) /ReleaseGIL/ ;
+ static int createTool( QtxAction*, const QString&, const int = -1, const int = -1 ) /ReleaseGIL/ ;
static int createMenu( const QString&, const int,
- const int = -1, const int = -1, const int = -1 );
+ const int = -1, const int = -1, const int = -1 ) /ReleaseGIL/ ;
static int createMenu( const QString&, const QString&,
- const int = -1, const int = -1, const int = -1 );
+ const int = -1, const int = -1, const int = -1 ) /ReleaseGIL/ ;
static int createMenu( const int, const int,
- const int = -1, const int = -1 );
+ const int = -1, const int = -1 ) /ReleaseGIL/ ;
static int createMenu( const int, const QString&,
- const int = -1, const int = -1 );
+ const int = -1, const int = -1 ) /ReleaseGIL/ ;
static int createMenu( QtxAction*, const int, const int = -1,
- const int = -1, const int = -1 );
+ const int = -1, const int = -1 ) /ReleaseGIL/ ;
static int createMenu( QtxAction*, const QString&, const int = -1,
- const int = -1, const int = -1 );
- static QtxAction* createSeparator();
+ const int = -1, const int = -1 ) /ReleaseGIL/ ;
+ static QtxAction* createSeparator() /ReleaseGIL/ ;
static QtxAction* createAction( const int, const QString&,
const QString& = QString::null, const QString& = QString::null,
- const QString& = QString::null, const int = 0, const bool = false );
+ const QString& = QString::null, const int = 0, const bool = false ) /ReleaseGIL/ ;
- static QtxAction* action( const int );
- static int actionId( const QtxAction* );
+ static QtxAction* action( const int ) /ReleaseGIL/ ;
+ static int actionId( const QtxAction* ) /ReleaseGIL/ ;
static bool clearMenu( const int = 0, const int = 0,
- const bool = true );
-
- static void addSetting ( const QString&, const QString&, const double );
- static void addSetting ( const QString&, const QString&, const int /Constrained/ );
- static void addSetting ( const QString&, const QString&, const QString& );
- static void addSetting ( const QString&, const QString&, const QColor& );
- static int integerSetting( const QString&, const QString&, const int = 0 );
- static double doubleSetting ( const QString&, const QString&, const int = 0 );
- static bool boolSetting ( const QString&, const QString&, const bool = false );
- static QString stringSetting ( const QString&, const QString&, const QString& = QString("") );
- static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() );
- static void removeSetting ( const QString&, const QString& );
+ const bool = true ) /ReleaseGIL/ ;
+
+ static void addSetting ( const QString&, const QString&, const double ) /ReleaseGIL/ ;
+ static void addSetting ( const QString&, const QString&, const int /Constrained/ ) /ReleaseGIL/ ;
+ static void addSetting ( const QString&, const QString&, const bool, const int ) /ReleaseGIL/ ;
+ static void addSetting ( const QString&, const QString&, const QString& ) /ReleaseGIL/ ;
+ static void addSetting ( const QString&, const QString&, const QColor& ) /ReleaseGIL/ ;
+ static int integerSetting( const QString&, const QString&, const int = 0 ) /ReleaseGIL/ ;
+ static double doubleSetting ( const QString&, const QString&, const double = 0 ) /ReleaseGIL/ ;
+ static bool boolSetting ( const QString&, const QString&, const bool = false ) /ReleaseGIL/ ;
+ static QString stringSetting ( const QString&, const QString&, const QString& = QString("") ) /ReleaseGIL/ ;
+ static QColor colorSetting ( const QString&, const QString&, const QColor& = QColor() ) /ReleaseGIL/ ;
+ static void removeSetting ( const QString&, const QString& ) /ReleaseGIL/ ;
+ static bool hasSetting ( const QString&, const QString& ) /ReleaseGIL/ ;
// obsolete
- static void addStringSetting( const QString&, const QString&, bool = true );
- static void addIntSetting ( const QString&, const int, bool = true );
- static void addDoubleSetting( const QString&, const double, bool = true );
- static void removeSettings ( const QString& );
- static QString getSetting ( const QString& );
+ static void addStringSetting( const QString&, const QString&, bool = true ) /ReleaseGIL/ ;
+ static void addIntSetting ( const QString&, const int, bool = true ) /ReleaseGIL/ ;
+ static void addDoubleSetting( const QString&, const double, bool = true ) /ReleaseGIL/ ;
+ static void addBoolSetting ( const QString&, const bool, bool = true ) /ReleaseGIL/ ;
+ static void removeSettings ( const QString& ) /ReleaseGIL/ ;
+ static QString getSetting ( const QString& ) /ReleaseGIL/ ;
+
+ static int addGlobalPreference( const QString& ) /ReleaseGIL/ ;
+ static int addPreference( const QString& ) /ReleaseGIL/ ;
+ static int addPreference( const QString&,
+ const int, const int = -1,
+ const QString& = QString::null,
+ const QString& = QString::null ) /ReleaseGIL/ ;
+ static QVariant preferenceProperty( const int, const QString& ) /ReleaseGIL/ ;
+ static void setPreferenceProperty( const int,
+ const QString&,
+ const QVariant& ) /ReleaseGIL/ ;
+ static void addPreferenceProperty( const int,
+ const QString&,
+ const int,
+ const QVariant& ) /ReleaseGIL/ ;
+
+ static void message( const QString&, bool = true ) /ReleaseGIL/ ;
+ static void clearMessages() /ReleaseGIL/ ;
};
+
--- /dev/null
+# 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
+''')
+
--- /dev/null
+# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+#
+#
+# File : Makefile.in
+# Author : Paul RASCLE, EDF
+# Module : SALOME
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# ===============================================================
+# Swig targets
+# ===============================================================
+# (cf. http://www.geocities.com/foetsch/python/swig_linux.htm)
+#
+# Step 1: build the wrapping source files with swig
+#
+# libSALOME_LifeCycleCORBA.i -- swig --> swig_wrap.cpp
+# libSALOME_Swig.py
+#
+# Step 2: build the dynamic library from cpp built source files and
+# dependant libraries.
+#
+# swig_wrap.cpp -- gcc --> swig_wrap.o |-- link --> _libSALOME_Swig.la
+# + |
+# dependant libs |
+#
+# The file libSALOME_Swigcmodule.py will be installed in
+# <prefix>/lib/python<version>/site-package/salome.
+# The library will be installed in the same place.
+#
+
+# this option puts it to dist
+#BUILT_SOURCES = swig_wrap.cpp
+
+SWIG_FLAGS = @SWIG_FLAGS@ -I$(srcdir)
+SWIG_SOURCES = libSALOME_Swig.i
+
+nodist_pkgpython_DATA = libSALOME_Swig.py
+libSALOME_Swig.py: swig_wrap.cpp
+
+# library
+lib_LTLIBRARIES = libSALOME_Swigcmodule.la
+libSALOME_Swigcmodule_la_SOURCES = $(BUILT_SOURCES) $(SWIG_SOURCES) SALOMEGUI_Swig.cxx
+nodist_libSALOME_Swigcmodule_la_SOURCES = swig_wrap.cpp
+salomeinclude_HEADERS= SALOMEGUI_Swig.hxx SALOMEGUI_Swig.i
+
+libSALOME_Swigcmodule_la_CPPFLAGS =\
+ $(QT_INCLUDES) $(PYTHON_INCLUDES) $(CAS_CPPFLAGS) $(VTK_INCLUDES) \
+ $(OGL_INCLUDES) $(BOOST_CPPFLAGS) -DHAVE_CONFIG_H @KERNEL_CXXFLAGS@ \
+ -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl \
+ -I$(srcdir)/../SalomeApp -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT \
+ -I$(srcdir)/../ObjBrowser -I$(srcdir)/../LightApp -I$(srcdir)/../SOCC \
+ -I$(srcdir)/../SVTK -I$(srcdir)/../Event -I$(srcdir)/../OBJECT \
+ -I$(srcdir)/../CAM -I$(srcdir)/../STD -I$(srcdir)/../OCCViewer \
+ -I$(srcdir)/../Prs -I$(srcdir)/../VTKViewer -I$(srcdir)/../SPlot2d \
+ -I$(srcdir)/../Plot2d \
+ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@
+
+libSALOME_Swigcmodule_la_LDFLAGS = -module
+libSALOME_Swigcmodule_la_LIBADD = \
+ ../SalomeApp/libSalomeApp.la \
+ @PYTHON_LIBS@
+
+swig_wrap.cpp : $(SWIG_SOURCES)
+ $(SWIG) $(SWIG_FLAGS) -o $@ $<
+
+CLEANFILES = swig_wrap.cpp
+
+#
+# ===============================================================
+# Files to be installed
+# ===============================================================
+#
+
+# Scripts to be installed.
+dist_salomescript_DATA= \
+ examplevtk1.py \
+ test_table.py \
+ test_big_table.py \
+ test_many_objects.py \
+ test_remove_ref.py \
+ libSALOME_Swig.py
+
+nodist_salomescript_DATA= \
+ supervisionexample.py \
+ supervisiongeomexample.py
+
+EXTRA_DIST+= \
+ supervisionexample.py.in \
+ supervisiongeomexample.py.in
+
+sharedpkgpython_PYTHON= SALOMEGUI_shared_modules.py
+
+install-exec-hook: $(libdir)/_libSALOME_Swig.so
+
+$(libdir)/_libSALOME_Swig.so:
+ (cd $(libdir); ln -sf libSALOME_Swigcmodule.so _libSALOME_Swig.so;)
+++ /dev/null
-# 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@
--- /dev/null
+# 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)
+
#include "SALOME_Prs.h"
#include "SOCC_ViewModel.h"
#include "SVTK_ViewModel.h"
+#include "SVTK_ViewWindow.h"
+#include "SOCC_ViewWindow.h"
+#include "SPlot2d_ViewWindow.h"
#include "SALOME_Event.hxx"
#include "SALOME_ListIO.hxx"
SALOME_View* view = dynamic_cast<SALOME_View*>( window->getViewManager()->getViewModel() );
if ( view ) {
SALOME_Prs* aPrs = view->CreatePrs( myEntry );
- myResult = aPrs->IsNull();
+ myResult = !aPrs->IsNull();
}
}
}
{
return ProcessEvent( new TIsInViewerEvent( theEntry ) );
}
+
+/*!
+ Updates (repaint) current view
+*/
+void SALOMEGUI_Swig::UpdateView()
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent() {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
+ if ( window ) {
+ SALOME_View* view = dynamic_cast<SALOME_View*>( window->getViewManager()->getViewModel() );
+ if ( view )
+ view->Repaint();
+ }
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent() );
+}
+
+/*!
+ Fit all the contents of the current view window
+ */
+void SALOMEGUI_Swig::FitAll()
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent() {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
+ if ( window ) {
+ if ( dynamic_cast<SVTK_ViewWindow*>( window ) )
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onFitAll();
+ else if ( dynamic_cast<SOCC_ViewWindow*>( window ) )
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onFitAll();
+ else if ( dynamic_cast<SPlot2d_ViewWindow*>( window ) )
+ (dynamic_cast<SPlot2d_ViewWindow*>( window ))->onFitAll();
+ }
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent() );
+}
+
+/*!
+ Reset current view window to the default state.
+ */
+void SALOMEGUI_Swig::ResetView()
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent() {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
+ if ( window ) {
+ if ( dynamic_cast<SVTK_ViewWindow*>( window ) )
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onResetView();
+ else if ( dynamic_cast<SOCC_ViewWindow*>( window ) )
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onResetView();
+ else if ( dynamic_cast<SPlot2d_ViewWindow*>( window ) )
+ (dynamic_cast<SPlot2d_ViewWindow*>( window ))->onFitAll();
+ // VSR: there is no 'ResetView' functionality for Plot2d viewer,
+ // so we use 'FitAll' instead.
+ }
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent() );
+}
+
+enum {
+ __ViewTop,
+ __ViewBottom,
+ __ViewLeft,
+ __ViewRight,
+ __ViewFront,
+ __ViewBack
+};
+
+void setView( int view )
+{
+ class TEvent: public SALOME_Event {
+ private:
+ int myView;
+ public:
+ TEvent( int view ) : myView( view ) {}
+ virtual void Execute() {
+ if ( SalomeApp_Application* anApp = getApplication() ) {
+ SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
+ if ( window ) {
+ if ( dynamic_cast<SVTK_ViewWindow*>( window ) ) {
+ switch( myView ) {
+ case __ViewTop:
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onTopView(); break;
+ case __ViewBottom:
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onBottomView(); break;
+ case __ViewLeft:
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onLeftView(); break;
+ case __ViewRight:
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onRightView(); break;
+ case __ViewFront:
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onFrontView(); break;
+ case __ViewBack:
+ (dynamic_cast<SVTK_ViewWindow*>( window ))->onBackView(); break;
+ default:
+ break;
+ }
+ }
+ else if ( dynamic_cast<SOCC_ViewWindow*>( window ) ) {
+ switch( myView ) {
+ case __ViewTop:
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onTopView(); break;
+ case __ViewBottom:
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onBottomView(); break;
+ case __ViewLeft:
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onLeftView(); break;
+ case __ViewRight:
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onRightView(); break;
+ case __ViewFront:
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onFrontView(); break;
+ case __ViewBack:
+ (dynamic_cast<SOCC_ViewWindow*>( window ))->onBackView(); break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
+ };
+ ProcessVoidEvent( new TEvent( view ) );
+}
+
+/*!
+ Switch current view window to show top view
+ */
+void SALOMEGUI_Swig::ViewTop()
+{
+ setView( __ViewTop );
+}
+
+/*!
+ Switch current view window to show bottom view
+ */
+void SALOMEGUI_Swig::ViewBottom()
+{
+ setView( __ViewBottom );
+}
+
+/*!
+ Switch current view window to show left view
+ */
+void SALOMEGUI_Swig::ViewLeft()
+{
+ setView( __ViewLeft );
+}
+
+/*!
+ Switch current view window to show right view
+ */
+void SALOMEGUI_Swig::ViewRight()
+{
+ setView( __ViewRight );
+}
+
+/*!
+ Switch current view window to show front view
+ */
+void SALOMEGUI_Swig::ViewFront()
+{
+ setView( __ViewFront );
+}
+
+/*!
+ Switch current view window to show back view
+ */
+void SALOMEGUI_Swig::ViewBack()
+{
+ setView( __ViewBack );
+}
void DisplayAll();
void EraseAll();
bool IsInCurrentView( const char *Entry );
+ void UpdateView();
+
+ /* view operations */
+ void FitAll();
+ void ResetView();
+ void ViewTop();
+ void ViewBottom();
+ void ViewLeft();
+ void ViewRight();
+ void ViewFront();
+ void ViewBack();
/* get component name/username */
const char* getComponentName( const char* ComponentUserName );
#include "SALOMEGUI_Swig.hxx"
%}
-%include "pointer.i"
+%include "cpointer.i"
+
+/* Exception handler for all functions */
+%exception {
+ class PyAllowThreadsGuard {
+ public:
+ // Py_BEGIN_ALLOW_THREADS
+ PyAllowThreadsGuard() { _save = PyEval_SaveThread(); }
+ // Py_END_ALLOW_THREADS
+ ~PyAllowThreadsGuard() { PyEval_RestoreThread(_save); }
+ private:
+ PyThreadState *_save;
+ };
+
+ PyAllowThreadsGuard guard;
+
+ $action
+}
class SALOMEGUI_Swig
{
void DisplayAll();
void EraseAll();
bool IsInCurrentView(const char *Entry);
+ void UpdateView();
+
+/* view operations */
+ void FitAll();
+ void ResetView();
+ void ViewTop();
+ void ViewBottom();
+ void ViewLeft();
+ void ViewRight();
+ void ViewFront();
+ void ViewBack();
/* get component name/username */
const char* getComponentName( const char* ComponentUserName );
--- /dev/null
+# 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)
+
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#==============================================================================
-# File : supervisionexample.py
-# Created : 23 nov 2001
-# Author : Jean Rahuel
-# Project : SALOME
-# Copyright : CEA
-#==============================================================================
-
-from SuperV import *
-
-
-
-# load this object with Nodes, Links and Datas stored in GraphEssai.xml
-# (GraphEssai.xml was created with python in SuperVisionTest and GraphEssai.py)
-myGraph = Graph("@ROOT_BUILDDIR@/share/salome/resources/GraphEssai.xml")
-
-#myGraph = Graph("/home/data/jr_HEAD/build/share/salome/resources/GraphEssai.xml")
-# This DataFlow is "valid" : no loop, correct links between Nodes etc...
-
-print myGraph.IsValid()
-
-# Get Nodes
-myGraph.PrintNodes()
-Add,Sub,Mul,Div = myGraph.Nodes()
-
-# Load Datas
-Addx = Add.Input("x",3.)
-Addy = Add.Input("y",4.5)
-Subx = Sub.Input("x",1.5)
-
-# Get Output Port
-Addz = Add.Port('z')
-Subz = Sub.Port('z')
-Mulz = Mul.Port('z')
-Divz = Div.Port('z')
-
-# This DataFlow is "executable" : all pending Ports are defined with Datas
-print myGraph.IsExecutable()
-
-# Starts only execution of that DataFlow and gets control immediatly
-print myGraph.Run()
-
-# That DataFlow is running ==> 0 (false)
-print myGraph.IsDone()
-
-# Events of execution :
-aStatus,aNode,anEvent,aState = myGraph.Event()
-while aStatus :
- print aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
- aStatus,aNode,anEvent,aState = myGraph.Event()
-print myGraph.IsDone()
-
-# Wait for Completion (but it is already done after event loop ...)
-print "Done : ",myGraph.DoneW()
-
-# Get result
-print "Result : ",Divz.ToString()
-
-# Intermediate results :
-print "Intermediate Result Add\z : ",Addz.ToString()
-print "Intermediate Result Sub\z : ",Subz.ToString()
-print "Intermediate Result Mul\z : ",Mulz.ToString()
-
-print " "
-print "Type : print myGraph.IsDone()"
-print " If execution is finished ==> 1 (true)"
-print " "
-print "Type : print Divz.ToString()"
-print " You will get the result"
-print " "
-print "Type : myGraph.PrintPorts()"
-print " to see input and output values of the graph"
-print " "
-print "Type : Add.PrintPorts()"
-print "Type : Sub.PrintPorts()"
-print "Type : Mul.PrintPorts()"
-print "Type : Div.PrintPorts()"
-print " to see input and output values of nodes"
-
-# Export will create newsupervisionexample.xml and the corresponding .py file
-print myGraph.Export("@ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml")
-
-print " "
-print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml"
-print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.py"
# load this object with Nodes, Links and Datas stored in GraphEssai.xml
# (GraphEssai.xml was created with python in SuperVisionTest and GraphEssai.py)
-myGraph = Graph("@ROOT_BUILDDIR@/share/salome/resources/GraphEssai.xml")
+myGraph = Graph("@ROOT_BUILDDIR@/share/salome/resources/superv/GraphEssai.xml")
-#myGraph = Graph("/home/data/jr_HEAD/build/share/salome/resources/GraphEssai.xml")
+#myGraph = Graph("/home/data/jr_HEAD/build/share/salome/resources/superv/GraphEssai.xml")
# This DataFlow is "valid" : no loop, correct links between Nodes etc...
print myGraph.IsValid()
print " to see input and output values of nodes"
# Export will create newsupervisionexample.xml and the corresponding .py file
-print myGraph.Export("@ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml")
+print myGraph.Export("@ROOT_BUILDDIR@/share/salome/resources/superv/newsupervisionexample.xml")
print " "
-print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.xml"
-print "See file @ROOT_BUILDDIR@/share/salome/resources/newsupervisionexample.py"
+print "See file @ROOT_BUILDDIR@/share/salome/resources/superv/newsupervisionexample.xml"
+print "See file @ROOT_BUILDDIR@/share/salome/resources/superv/newsupervisionexample.py"
+++ /dev/null
-# 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"
+++ /dev/null
-# 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()
--- /dev/null
+# 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
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES=libSOCC.la
+
+salomeinclude_HEADERS= \
+ SOCC.h \
+ SOCC_ViewModel.h \
+ SOCC_Prs.h \
+ SOCC_ViewWindow.h
+
+dist_libSOCC_la_SOURCES= \
+ SOCC_ViewModel.cxx \
+ SOCC_Prs.cxx \
+ SOCC_ViewWindow.cxx
+
+MOC_FILES= \
+ SOCC_ViewModel_moc.cxx \
+ SOCC_ViewWindow_moc.cxx
+nodist_libSOCC_la_SOURCES= $(MOC_FILES)
+
+libSOCC_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(BOOST_CPPFLAGS) \
+ -I$(srcdir)/../SUIT -I$(srcdir)/../OBJECT -I$(srcdir)/../Prs \
+ -I$(srcdir)/../OCCViewer -I$(srcdir)/../Qtx
+
+libSOCC_la_LDFLAGS=$(QT_MT_LIBS)
+libSOCC_la_LIBADD= ../SUIT/libsuit.la ../OBJECT/libSalomeObject.la \
+ ../Prs/libSalomePrs.la ../OCCViewer/libOCCViewer.la
+++ /dev/null
-# 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@
*/
bool SOCC_Prs::IsNull() const
{
- return myObjects.IsEmpty();
+ return myObjects.IsEmpty() == Standard_True;
}
/*!
// }
//}
}
-
- // display trihedron if necessary
- if ( isTrihedronDisplayed )
- getAISContext()->Display( getTrihedron() );
- else
- Repaint();
+
+ Repaint();
}
/*!
myViewPort->fitAll();
break;
case SUIT_Accel::RotateLeft :
- myViewPort->startRotation( cx, cy );
- myViewPort->rotate( cx - inc, cy );
+ myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint );
+ myViewPort->rotate( cx - inc, cy, myCurrPointType, mySelectedPoint );
myViewPort->endRotation();
break;
case SUIT_Accel::RotateRight :
- myViewPort->startRotation( cx, cy );
- myViewPort->rotate( cx + inc, cy );
+ myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint );
+ myViewPort->rotate( cx + inc, cy, myCurrPointType, mySelectedPoint );
myViewPort->endRotation();
break;
case SUIT_Accel::RotateUp :
- myViewPort->startRotation( cx, cy );
- myViewPort->rotate( cx, cy - inc );
+ myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint );
+ myViewPort->rotate( cx, cy - inc, myCurrPointType, mySelectedPoint );
myViewPort->endRotation();
break;
case SUIT_Accel::RotateDown :
- myViewPort->startRotation( cx, cy );
- myViewPort->rotate( cx, cy + inc );
+ myViewPort->startRotation( cx, cy, myCurrPointType, mySelectedPoint );
+ myViewPort->rotate( cx, cy + inc, myCurrPointType, mySelectedPoint );
myViewPort->endRotation();
break;
}
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libSPlot2d.la
+
+salomeinclude_HEADERS = \
+ SPlot2d.h \
+ SPlot2d_Curve.h \
+ SPlot2d_Prs.h \
+ SPlot2d_ViewModel.h \
+ SPlot2d_ViewWindow.h
+
+dist_libSPlot2d_la_SOURCES = \
+ SPlot2d_Curve.cxx \
+ SPlot2d_Prs.cxx \
+ SPlot2d_ViewModel.cxx \
+ SPlot2d_ViewWindow.cxx
+
+MOC_FILES = \
+ SPlot2d_ViewModel_moc.cxx \
+ SPlot2d_ViewWindow_moc.cxx
+nodist_libSPlot2d_la_SOURCES = $(MOC_FILES)
+
+nodist_salomeres_DATA = SPlot2d_msg_en.qm
+
+libSPlot2d_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(QWT_INCLUDES) $(BOOST_CPPFLAGS) \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../Plot2d -I$(srcdir)/../Prs \
+ -I$(srcdir)/../OBJECT
+libSPlot2d_la_LDFLAGS=$(QT_MT_LIBS) $(QWT_LIBS) ../SUIT/libsuit.la ../Plot2d/libPlot2d.la ../Prs/libSalomePrs.la
+
+
+
+
+
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-EXPORT_HEADERS = \
- SPlot2d.h \
- SPlot2d_Curve.h \
- SPlot2d_Prs.h \
- SPlot2d_ViewModel.h
-
-# .po files to transform in .qm
-PO_FILES = SPlot2d_msg_en.po
-
-# Libraries targets
-
-LIB = libSPlot2d.la
-LIB_SRC = \
- SPlot2d_Curve.cxx \
- SPlot2d_Prs.cxx \
- SPlot2d_ViewModel.cxx
-
-LIB_MOC = \
- SPlot2d_ViewModel.h
-
-CPPFLAGS+=$(QT_INCLUDES) $(OCC_INCLUDES) $(QWT_INCLUDES) $(BOOST_CPPFLAGS)
-LDFLAGS+=$(QT_MT_LIBS) $(QWT_LIBS) -lsuit -lPlot2d -lSalomePrs
-
-
-@CONCLUDE@
-
-
-
-
-
#include "SPlot2d_ViewModel.h"
+#include "SPlot2d_ViewWindow.h"
+
#include "SPlot2d_Prs.h"
#include "SUIT_Session.h"
#include "SUIT_Application.h"
void SPlot2d_Viewer::renameAll( const Handle(SALOME_InteractiveObject)& IObj, const QString& name )
{
SUIT_ViewManager* vm = getViewManager();
- if( vm )
+ if ( vm )
{
const QPtrVector<SUIT_ViewWindow>& wnds = vm->getViews();
- for( int i=0; i<wnds.size(); i++ )
+ for ( uint i = 0; i < wnds.size(); i++ )
{
Plot2d_ViewWindow* pwnd = dynamic_cast<Plot2d_ViewWindow*>( wnds.at( i ) );
rename( IObj, name, pwnd->getViewFrame() );
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;
+}
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 );
--- /dev/null
+// 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;
+}
--- /dev/null
+// 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
+++ /dev/null
-# 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 <EMAIL@ADDRESS>\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-
--- /dev/null
+# 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 <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : STD
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libstd.la
+
+salomeinclude_HEADERS= \
+ STD_Application.h \
+ STD.h \
+ STD_MDIDesktop.h \
+ STD_SDIDesktop.h \
+ STD_TabDesktop.h \
+ STD_LoadStudiesDlg.h
+
+dist_libstd_la_SOURCES=\
+ STD_Application.cxx \
+ STD_MDIDesktop.cxx \
+ STD_SDIDesktop.cxx \
+ STD_TabDesktop.cxx \
+ STD_LoadStudiesDlg.cxx
+
+MOC_FILES= \
+ STD_Application_moc.cxx \
+ STD_MDIDesktop_moc.cxx \
+ STD_SDIDesktop_moc.cxx \
+ STD_TabDesktop_moc.cxx \
+ STD_LoadStudiesDlg_moc.cxx
+
+nodist_libstd_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA=\
+ resources/config \
+ resources/cut.png \
+ resources/copy.png \
+ resources/close.png \
+ resources/cursor_rotate.png \
+ resources/cursor_zoom.png \
+ resources/help.png \
+ resources/new.png \
+ resources/open.png \
+ resources/print.png \
+ resources/paste.png \
+ resources/redo.png \
+ resources/reset.png \
+ resources/save.png \
+ resources/undo_arrow.png \
+ resources/undo.png \
+ resources/std.ini
+
+nodist_salomeres_DATA=\
+ STD_images.qm \
+ STD_msg_en.qm
+
+libstd_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+libstd_la_LDFLAGS=$(QT_MT_LIBS)
+libstd_la_LIBADD=../SUIT/libsuit.la
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : STD
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= STD_Application.h \
- STD.h \
- STD_MDIDesktop.h \
- STD_SDIDesktop.h \
- STD_TabDesktop.h \
- STD_CloseDlg.h \
- STD_LoadStudiesDlg.h
-
-# .po files to transform in .qm
-PO_FILES = STD_images.po \
- STD_msg_en.po
-
-# Libraries targets
-LIB = libstd.la
-
-LIB_SRC= STD_Application.cxx \
- STD_MDIDesktop.cxx \
- STD_SDIDesktop.cxx \
- STD_TabDesktop.cxx \
- STD_CloseDlg.cxx \
- STD_LoadStudiesDlg.cxx
-
-LIB_MOC = STD_Application.h \
- STD_MDIDesktop.h \
- STD_SDIDesktop.h \
- STD_TabDesktop.h \
- STD_CloseDlg.h \
- STD_LoadStudiesDlg.h
-
-RESOURCES_FILES = \
-config \
-cut.png \
-copy.png \
-close.png \
-cursor_rotate.png \
-cursor_zoom.png \
-help.png \
-new.png \
-open.png \
-print.png \
-paste.png \
-redo.png \
-reset.png \
-save.png \
-undo_arrow.png \
-undo.png \
-std.ini
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-LIBS+= -lsuit
-
-@CONCLUDE@
#include "STD_MDIDesktop.h"
-#include "STD_CloseDlg.h"
-
#include <SUIT_Tools.h>
#include <SUIT_Desktop.h>
#include <SUIT_Session.h>
#include <SUIT_Operation.h>
#include <SUIT_MessageBox.h>
#include <SUIT_ResourceMgr.h>
+#include <SUIT_MsgDlg.h>
#include <QtxDockAction.h>
#include <QtxActionMenuMgr.h>
#include <qstatusbar.h>
#include <qfiledialog.h>
#include <qapplication.h>
+#include <qmessagebox.h>
#include <iostream>
/*!Constructor.*/
STD_Application::STD_Application()
: SUIT_Application(),
-myEditEnabled( true ),
-myActiveViewMgr( 0 )
+ myActiveViewMgr( 0 ),
+ myExitConfirm( true ),
+ myEditEnabled( true )
{
STD_MDIDesktop* desk = new STD_MDIDesktop();
/*!Destructor.*/
STD_Application::~STD_Application()
{
+ clearViewManagers();
+}
+
+/*! \retval requirement of exit confirmation*/
+bool STD_Application::exitConfirmation() const
+{
+ return myExitConfirm;
+}
+
+/*! Set the requirement of exit confirmation*/
+void STD_Application::setExitConfirmation( const bool on )
+{
+ myExitConfirm = on;
}
/*! \retval QString "StdApplication"*/
return;
}
- if ( !isPossibleToClose() )
+ bool closePermanently;
+ if ( !isPossibleToClose( closePermanently ) )
{
e->ignore();
return;
tr( "MEN_DESK_HELP_ABOUT" ), tr( "PRP_DESK_HELP_ABOUT" ),
SHIFT+Key_A, desk, false, this, SLOT( onHelpAbout() ) );
- //SRN: BugID IPAL9021, add an action "Load"
- createAction( FileLoadId, tr( "TOT_DESK_FILE_LOAD" ),
- resMgr->loadPixmap( "STD", tr( "ICON_FILE_OPEN" ) ),
- tr( "MEN_DESK_FILE_LOAD" ), tr( "PRP_DESK_FILE_LOAD" ),
- CTRL+Key_L, desk, false, this, SLOT( onLoadDoc() ) );
- //SRN: BugID IPAL9021: End
-
QtxDockAction* da = new QtxDockAction( tr( "TOT_DOCK_WINDOWS" ), tr( "MEN_DOCK_WINDOWS" ), desk );
registerAction( ViewWindowsId, da );
da->setAutoPlace( false );
createMenu( FileNewId, fileMenu, 0 );
createMenu( FileOpenId, fileMenu, 0 );
- createMenu( FileLoadId, fileMenu, 0 ); //SRN: BugID IPAL9021, add a menu item "Load"
createMenu( FileCloseId, fileMenu, 0 );
createMenu( separator(), fileMenu, -1, 0 );
createMenu( FileSaveId, fileMenu, 0 );
createMenu( EditPasteId, editMenu );
createMenu( separator(), editMenu );
- createMenu( ViewWindowsId, viewMenu );
- createMenu( ViewStatusBarId, viewMenu );
+ createMenu( ViewWindowsId, viewMenu, 0 );
+ createMenu( separator(), viewMenu, -1, 10 );
+ createMenu( ViewStatusBarId, viewMenu, 10 );
createMenu( separator(), viewMenu );
createMenu( HelpAboutId, helpMenu );
return res;
}
-/*! called on loading the existent study */
-void STD_Application::onLoadDoc()
-{
-}
-
/*! \retval true, if document was loaded successful, else false.*/
bool STD_Application::onLoadDoc( const QString& aName )
{
/*!Close document, if it's possible.*/
void STD_Application::onCloseDoc( bool ask )
{
- if ( ask && !isPossibleToClose() )
+ bool closePermanently = true;
+
+ if ( ask && !isPossibleToClose( closePermanently ) )
return;
SUIT_Study* study = activeStudy();
beforeCloseDoc( study );
if ( study )
- study->closeDocument(myClosePermanently);
+ study->closeDocument( closePermanently );
clearViewManagers();
/*!Check the application on closing.
* \retval true if possible, else false
*/
-bool STD_Application::isPossibleToClose()
+bool STD_Application::isPossibleToClose( bool& closePermanently )
{
- myClosePermanently = true; //SRN: BugID: IPAL9021
if ( activeStudy() )
{
activeStudy()->abortAllOperations();
if ( activeStudy()->isModified() )
{
QString sName = activeStudy()->studyName().stripWhiteSpace();
- QString msg = sName.isEmpty() ? tr( "INF_DOC_MODIFIED" ) : tr ( "INF_DOCUMENT_MODIFIED" ).arg( sName );
-
- //SRN: BugID: IPAL9021: Begin
- STD_CloseDlg dlg(desktop());
- switch( dlg.exec() )
- {
- case 1:
- if ( activeStudy()->isSaved() )
- onSaveDoc();
- else if ( !onSaveAsDoc() )
- return false;
- break;
- case 2:
- break;
- case 3:
- myClosePermanently = false;
- break;
- case 4:
- default:
- return false;
- }
- //SRN: BugID: IPAL9021: End
+ return closeAction( closeChoice( sName ), closePermanently );
}
}
return true;
}
+/*!
+ \brief Show dialog box to propose possible user actions when study is closed.
+ \param docName study name
+ \return chosen action ID
+ \sa closeAction()
+*/
+int STD_Application::closeChoice( const QString& docName )
+{
+ SUIT_MsgDlg dlg( desktop(), tr( "CLOSE_DLG_CAPTION" ), tr ( "CLOSE_DLG_DESCRIPTION" ),
+ QMessageBox::standardIcon( QMessageBox::Information ) );
+ dlg.addButton( tr ( "CLOSE_DLG_SAVE_CLOSE" ), CloseSave );
+ dlg.addButton( tr ( "CLOSE_DLG_CLOSE" ), CloseDiscard );
+
+ return dlg.exec();
+}
+
+/*!
+ \brief Process user actions selected from the dialog box when study is closed.
+ \param choice chosen action ID
+ \param closePermanently "forced study closing" flag
+ \return operation status
+ \sa closeChoice()
+*/
+bool STD_Application::closeAction( const int choice, bool& closePermanently )
+{
+ bool res = true;
+ switch( choice )
+ {
+ case CloseSave:
+ if ( activeStudy()->isSaved() )
+ onSaveDoc();
+ else if ( !onSaveAsDoc() )
+ res = false;
+ break;
+ case CloseDiscard:
+ break;
+ case CloseCancel:
+ default:
+ res = false;
+ }
+
+ return res;
+}
+
/*!Save document if all ok, else error message.*/
void STD_Application::onSaveDoc()
{
/*!Closing session.*/
void STD_Application::onExit()
{
- int aAnswer = SUIT_MessageBox::info2( desktop(), tr( "INF_DESK_EXIT" ), tr( "QUE_DESK_EXIT" ),
- tr( "BUT_OK" ), tr( "BUT_CANCEL" ), 1, 2, 2 );
- if ( aAnswer == 1 )
+ if ( !exitConfirmation() ||
+ SUIT_MessageBox::info2( desktop(),
+ tr( "INF_DESK_EXIT" ),
+ tr( "QUE_DESK_EXIT" ),
+ tr( "BUT_OK" ),
+ tr( "BUT_CANCEL" ), 1, 2, 2 ) == 1 ) {
SUIT_Session::session()->closeSession();
+ }
}
/*!Virtual slot. Not implemented here.*/
/*!Update commands status.*/
void STD_Application::updateCommandsStatus()
{
+ SUIT_Application::updateCommandsStatus();
+
bool aHasStudy = activeStudy() != 0;
bool aIsNeedToSave = false;
if ( aHasStudy )
emit viewManagerRemoved( vm );
vm->disconnectPopupRequest( this, SLOT( onConnectPopupRequest( SUIT_PopupClient*, QContextMenuEvent* ) ) );
- vm->disconnect();
+ disconnect( vm, SIGNAL( activated( SUIT_ViewManager* ) ),
+ this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) );
myViewMgrs.removeRef( vm );
if ( myActiveViewMgr == vm )
ViewManagerList lst;
viewManagers( lst );
- for ( QPtrListIterator<SUIT_ViewManager> it( lst ); it.current(); ++it )
- removeViewManager( it.current() );
+ for ( QPtrListIterator<SUIT_ViewManager> it( lst ); it.current(); ++it ) {
+ QGuardedPtr<SUIT_ViewManager> vm = it.current();
+ removeViewManager( vm );
+ delete vm;
+ }
}
/*!\retval TRUE, if view manager \a vm, already in view manager list (\a myViewMgrs).*/
virtual QString applicationName() const;
- virtual bool isPossibleToClose();
+ virtual bool isPossibleToClose( bool& );
virtual bool useFile( const QString& );
virtual void createEmptyStudy();
virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& ) {}
+ bool exitConfirmation() const;
+ void setExitConfirmation( const bool );
+
signals:
/*!emit that view manager added*/
void viewManagerAdded( SUIT_ViewManager* );
virtual void onOpenDoc();
virtual bool onOpenDoc( const QString& );
- virtual void onLoadDoc();
virtual bool onLoadDoc( const QString& );
virtual void onExit();
MenuHelpId = 7
};
- enum { FileNewId, FileOpenId, FileLoadId, FileCloseId,
+ enum { FileNewId, FileOpenId, FileCloseId,
FileSaveId, FileSaveAsId, FileExitId,
ViewStatusBarId, ViewWindowsId, NewWindowId,
EditCutId, EditCopyId, EditPasteId,
UserID
};
+ enum { CloseCancel, CloseSave, CloseDiscard };
+
protected:
virtual void createActions();
virtual void updateDesktopTitle();
virtual void setActiveViewManager( SUIT_ViewManager* );
+ virtual bool closeAction( const int, bool& );
+ virtual int closeChoice( const QString& );
+
private:
ViewManagerList myViewMgrs;
SUIT_ViewManager* myActiveViewMgr;
private:
+ bool myExitConfirm;
bool myEditEnabled;
- bool myClosePermanently;
};
#if defined WIN32
+++ /dev/null
-// 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 "STD_CloseDlg.h"
-
-#include <qlabel.h>
-#include <qlayout.h>
-#include <qpushbutton.h>
-#include <qmessagebox.h>
-#include <qhbuttongroup.h>
-
-#ifndef WNT
-using namespace std;
-#endif
-
-/*!
- * \brief creates a Close dialog box
- * \param parent a parent widget
- * \param modal bool argument, if true the dialog box is a modal dialog box
- * \param f style flags
- */
-
-STD_CloseDlg::STD_CloseDlg( QWidget* parent, bool modal, WFlags f )
-: QDialog( parent, "", true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
-{
- setSizeGripEnabled( true );
- setCaption( tr( "CLOSE_DLG_CAPTION" ) );
-
- QVBoxLayout* m_vbL = new QVBoxLayout( this );
- m_vbL->setMargin( 11 );
- m_vbL->setSpacing( 6 );
-
- QLabel* m_lIcon = new QLabel( this, "m_lDescr" );
- QPixmap pm = QMessageBox::standardIcon( QMessageBox::Warning );
- m_lIcon->setPixmap( pm );
- m_lIcon->setScaledContents( false );
- m_lIcon->setAlignment( Qt::AlignCenter );
-
- QLabel* m_lDescr = new QLabel (this, "m_lDescr");
- m_lDescr->setText ( tr ("CLOSE_DLG_DESCRIPTION") );
- m_lDescr->setAlignment( Qt::AlignCenter );
- m_lDescr->setMinimumHeight( m_lDescr->sizeHint().height()*5 );
- m_lDescr->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
-
- QHBoxLayout* m_hl1 = new QHBoxLayout();
- m_hl1->setMargin( 0 ); m_hl1->setSpacing( 6 );
- m_hl1->addWidget( m_lIcon );
- m_hl1->addWidget( m_lDescr );
-
- m_pb1 = new QPushButton( tr ("CLOSE_DLG_SAVE_CLOSE"), this );
- m_pb2 = new QPushButton( tr ("CLOSE_DLG_CLOSE"), this );
- m_pb3 = new QPushButton( tr ("CLOSE_DLG_UNLOAD"), this );
- m_pb4 = new QPushButton( tr ("BUT_CANCEL"), this );
-
- QGridLayout* m_hl2 = new QGridLayout();
- m_hl2->setMargin( 0 ); m_hl2->setSpacing( 6 );
- m_hl2->addWidget( m_pb1, 0, 0 );
- m_hl2->addWidget( m_pb2, 0, 1 );
- m_hl2->addWidget( m_pb3, 0, 2 );
- m_hl2->addColSpacing( 3, 10 );
- m_hl2->setColStretch( 3, 5 );
- m_hl2->addWidget( m_pb4, 0, 4 );
-
- m_vbL->addLayout( m_hl1 );
- m_vbL->addLayout( m_hl2 );
-
- connect( m_pb1, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) );
- connect( m_pb2, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) );
- connect( m_pb3, SIGNAL( clicked() ), this, SLOT( onButtonClicked() ) );
- connect( m_pb4, SIGNAL( clicked() ), this, SLOT( reject() ) );
-}
-
-/*!
- * \brief reaction on clicked(pressed) button
- */
-void STD_CloseDlg::onButtonClicked()
-{
- QPushButton* btn = ( QPushButton* )sender();
- if ( btn == m_pb1 )
- done( 1 );
- if ( btn == m_pb2 )
- done( 2 );
- if ( btn == m_pb3 )
- done( 3 );
-}
+++ /dev/null
-// 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 STD_CloseDlg_H
-#define STD_CloseDlg_H
-
-#include <qdialog.h>
-
-/*! \class QDialog
- * \brief For more information see <a href="http://doc.trolltech.com">QT documentation</a>.
- */
-/*!\class STD_CloseDlg
- * \brief Describes a dialog box shown on closing the active study
- */
-class STD_CloseDlg: public QDialog
-{
- Q_OBJECT
-
-public:
- STD_CloseDlg ( QWidget * parent = 0, bool modal = FALSE, WFlags f = 0 ) ;
- ~STD_CloseDlg ( ) { };
-
-private slots:
- void onButtonClicked();
-
-private:
- /*!\var m_pb1
- * \brief Private, stores a dialog button 1
- */
- QPushButton* m_pb1;
- /*!\var m_pb2
- * \brief Private, stores a dialog button 2
- */
- QPushButton* m_pb2;
- /*!\var m_pb3
- * \brief Private, stores a dialog button 3
- */
- QPushButton* m_pb3;
-
- /*!\var m_pb4
- * \brief Private, stores a dialog button 4
- */
- QPushButton* m_pb4;
-};
-
-#endif
-
msgstr ""
"Project-Id-Version: example-Qt-message-extraction\n"
"POT-Creation-Date: 1999-02-23 15:38+0200\n"
-"PO-Revision-Date: 1999-02-23 15:38+0200\n"
+"PO-Revision-Date: 2007-11-07 18:43+0300\n"
"Last-Translator: \n"
"Content-Type: text/plain; charset=iso-8859-1\n"
msgstr "Toggles standard toolbar on/off"
msgid "QUE_DESK_EXIT"
-msgstr "Do you really want to quit ?"
+msgstr "Are you sure you want to quit SALOME?"
msgid "TOT_DESK_FILE_NEW"
msgstr "New document"
msgstr "Can't save file \"%1\".\nPossible reason is permission denied or disc full.\nTry to use another file name."
msgid "CLOSE_DLG_SAVE_CLOSE"
-msgstr "&Save&&Close"
+msgstr "&Save && Close"
msgid "CLOSE_DLG_CLOSE"
msgstr "C&lose w/o saving"
msgstr "Close active study"
msgid "CLOSE_DLG_DESCRIPTION"
-msgstr "Do you want to close or only unload the study"
+msgstr "Study is modified. Do you want to save it?"
msgid "DLG_LOAD_STUDY_CAPTION"
msgstr "Load Study"
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : suit
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libsuit.la
+
+salomeinclude_HEADERS= \
+ SUIT.h \
+ SUIT_ActionOperation.h \
+ SUIT_Application.h \
+ SUIT_Convertor.h \
+ SUIT_DataObject.h \
+ SUIT_DataObjectIterator.h \
+ SUIT_DataObjectKey.h \
+ SUIT_DataOwner.h \
+ SUIT_Desktop.h \
+ SUIT_ExceptionHandler.h \
+ SUIT_FileDlg.h \
+ SUIT_FileValidator.h \
+ SUIT_MessageBox.h \
+ SUIT_MsgDlg.h \
+ SUIT_Operation.h \
+ SUIT_OverrideCursor.h \
+ SUIT_ParserSettings.h \
+ SUIT_PopupClient.h \
+ SUIT_ResourceMgr.h \
+ SUIT_SelectionMgr.h \
+ SUIT_Selector.h \
+ SUIT_Session.h \
+ SUIT_SmartPtr.h \
+ SUIT_Study.h \
+ SUIT_ToolButton.h \
+ SUIT_Tools.h \
+ SUIT_ViewManager.h \
+ SUIT_ViewModel.h \
+ SUIT_ViewWindow.h \
+ SUIT_SelectionFilter.h \
+ SUIT_Accel.h \
+ SUIT_TreeSync.h
+
+dist_libsuit_la_SOURCES= \
+ SUIT_ActionOperation.cxx \
+ SUIT_Application.cxx \
+ SUIT_DataObject.cxx \
+ SUIT_DataObjectIterator.cxx \
+ SUIT_DataObjectKey.cxx \
+ SUIT_DataOwner.cxx \
+ SUIT_Desktop.cxx \
+ SUIT_ExceptionHandler.cxx \
+ SUIT_FileDlg.cxx \
+ SUIT_FileValidator.cxx \
+ SUIT_MessageBox.cxx \
+ SUIT_MsgDlg.cxx \
+ SUIT_Operation.cxx \
+ SUIT_OverrideCursor.cxx \
+ SUIT_ParserSettings.cxx \
+ SUIT_PopupClient.cxx \
+ SUIT_ResourceMgr.cxx \
+ SUIT_SelectionMgr.cxx \
+ SUIT_Selector.cxx \
+ SUIT_Session.cxx \
+ SUIT_Study.cxx \
+ SUIT_ToolButton.cxx \
+ SUIT_Tools.cxx \
+ SUIT_ViewManager.cxx \
+ SUIT_ViewModel.cxx \
+ SUIT_ViewWindow.cxx \
+ SUIT_SelectionFilter.cxx \
+ SUIT_Accel.cxx
+
+MOC_FILES= \
+ SUIT_ActionOperation_moc.cxx \
+ SUIT_Application_moc.cxx \
+ SUIT_DataObject_moc.cxx \
+ SUIT_Desktop_moc.cxx \
+ SUIT_FileDlg_moc.cxx \
+ SUIT_MsgDlg_moc.cxx \
+ SUIT_Operation_moc.cxx \
+ SUIT_PopupClient_moc.cxx \
+ SUIT_Session_moc.cxx \
+ SUIT_Study_moc.cxx \
+ SUIT_ToolButton_moc.cxx \
+ SUIT_ViewModel_moc.cxx \
+ SUIT_ViewWindow_moc.cxx \
+ SUIT_ViewManager_moc.cxx \
+ SUIT_SelectionMgr_moc.cxx \
+ SUIT_Selector_moc.cxx \
+ SUIT_Accel_moc.cxx
+nodist_libsuit_la_SOURCES=$(MOC_FILES)
+
+dist_salomeres_DATA = \
+ resources/cascade.png \
+ resources/htile.png \
+ resources/vtile.png
+
+nodist_salomeres_DATA = \
+ SUIT_images.qm \
+ SUIT_msg_en.qm
+
+libsuit_la_CPPFLAGS=$(QT_INCLUDES) -I$(srcdir)/../Qtx
+libsuit_la_LDFLAGS=$(QT_MT_LIBS)
+libsuit_la_LIBADD=../Qtx/libqtx.la
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : suit
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= SUIT.h \
- SUIT_ActionOperation.h \
- SUIT_Application.h \
- SUIT_Convertor.h \
- SUIT_DataObject.h \
- SUIT_DataObjectIterator.h \
- SUIT_DataObjectKey.h \
- SUIT_DataOwner.h \
- SUIT_Desktop.h \
- SUIT_ExceptionHandler.h \
- SUIT_FileDlg.h \
- SUIT_FileValidator.h \
- SUIT_MessageBox.h \
- SUIT_Operation.h \
- SUIT_OverrideCursor.h \
- SUIT_ParserSettings.h \
- SUIT_PopupClient.h \
- SUIT_ResourceMgr.h \
- SUIT_SelectionMgr.h \
- SUIT_Selector.h \
- SUIT_Session.h \
- SUIT_SmartPtr.h \
- SUIT_Study.h \
- SUIT_ToolButton.h \
- SUIT_Tools.h \
- SUIT_ViewManager.h \
- SUIT_ViewModel.h \
- SUIT_ViewWindow.h \
- SUIT_SelectionFilter.h \
- SUIT_Accel.h \
- SUIT_TreeSync.h
-
-# .po files to transform in .qm
-PO_FILES = SUIT_images.po \
- SUIT_msg_en.po
-
-# Libraries targets
-LIB = libsuit.la
-
-LIB_SRC= SUIT_ActionOperation.cxx \
- SUIT_Application.cxx \
- SUIT_DataObject.cxx \
- SUIT_DataObjectIterator.cxx \
- SUIT_DataObjectKey.cxx \
- SUIT_DataOwner.cxx \
- SUIT_Desktop.cxx \
- SUIT_ExceptionHandler.cxx \
- SUIT_FileDlg.cxx \
- SUIT_FileValidator.cxx \
- SUIT_MessageBox.cxx \
- SUIT_Operation.cxx \
- SUIT_OverrideCursor.cxx \
- SUIT_ParserSettings.cxx \
- SUIT_PopupClient.cxx \
- SUIT_ResourceMgr.cxx \
- SUIT_SelectionMgr.cxx \
- SUIT_Selector.cxx \
- SUIT_Session.cxx \
- SUIT_Study.cxx \
- SUIT_ToolButton.cxx \
- SUIT_Tools.cxx \
- SUIT_ViewManager.cxx \
- SUIT_ViewModel.cxx \
- SUIT_ViewWindow.cxx \
- SUIT_SelectionFilter.cxx \
- SUIT_Accel.cxx
-
-LIB_MOC = SUIT_ActionOperation.h \
- SUIT_Application.h \
- SUIT_DataObject.h \
- SUIT_Desktop.h \
- SUIT_FileDlg.h \
- SUIT_Operation.h \
- SUIT_PopupClient.h \
- SUIT_Session.h \
- SUIT_Study.h \
- SUIT_ToolButton.h \
- SUIT_ViewModel.h \
- SUIT_ViewWindow.h \
- SUIT_ViewManager.h \
- SUIT_SelectionMgr.h \
- SUIT_Selector.h \
- SUIT_Accel.h
-
-RESOURCES_FILES = \
- cascade.png \
- htile.png \
- vtile.png
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS) -lqtx
-
-@CONCLUDE@
#include <qlabel.h>
#include <qtimer.h>
#include <qstatusbar.h>
+#include <qapplication.h>
#include <QtxAction.h>
#include <QtxActionMenuMgr.h>
Default constructor
*/
SUIT_Application::SUIT_Application()
-: QObject( 0 ),
-myStudy( 0 ),
-myDesktop( 0 ),
-myStatusLabel( 0 )
-{
+ : QObject( 0 ),
+ myStudy( 0 ),
+ myDesktop( 0 ),
+ myStatusLabel( 0 )
+{
}
/*!
*/
SUIT_Application::~SUIT_Application()
{
+ setActiveStudy( 0 );
delete myStudy;
- myStudy = 0;
setDesktop( 0 );
}
\return FALSE if application can not be closed (because of non saved data for example).
This method called by SUIT_Session whin closing of application was requested.
*/
-bool SUIT_Application::isPossibleToClose()
+bool SUIT_Application::isPossibleToClose( bool& )
{
return true;
}
\param msg - text of message
\param msec - time in milliseconds, after that the status label will be cleared
*/
-void SUIT_Application::putInfo ( const QString& msg, const int msec )
+void SUIT_Application::putInfo( const QString& msg, const int msec )
{
if ( !desktop() )
return;
myStatusLabel->show();
}
+ QString prev = myStatusLabel->text();
+
myStatusLabel->setText( msg );
if ( msec != -1 )
- QTimer::singleShot( msec <= 0 ? DEFAULT_MESSAGE_DELAY : msec, myStatusLabel, SLOT( clear() ) );
+ QTimer::singleShot( msec <= 0 ? DEFAULT_MESSAGE_DELAY : msec, this, SLOT( onInfoClear() ) );
+
+ if ( prev != msg )
+ emit infoChanged( msg );
+}
+
+/*!
+ Clear the information label in status bar after delay.
+*/
+void SUIT_Application::onInfoClear()
+{
+ if ( !myStatusLabel )
+ return;
+
+ bool changed = !myStatusLabel->text().isEmpty();
+ myStatusLabel->clear();
+ if ( changed )
+ emit infoChanged( QString::null );
}
+/*!
+ Updates status of the registerd actions
+*/
+void SUIT_Application::updateCommandsStatus()
+{}
+
/*!
Initialize with application arguments
\param argc - number of application arguments
delete myDesktop;
myDesktop = desk;
- if ( myDesktop )
+ if ( myDesktop ) {
connect( myDesktop, SIGNAL( activated() ), this, SLOT( onDesktopActivated() ) );
+ // Force desktop activation (NPAL16628)
+ QApplication::postEvent(myDesktop, new QEvent(QEvent::WindowActivate));
+ }
}
/*!
if ( myStudy == study )
return;
+ if(myStudy)
+ disconnect(myStudy, SIGNAL( studyModified( SUIT_Study* ) ), this, SLOT( updateCommandsStatus() ) );
+
+ if(study)
+ connect(study, SIGNAL( studyModified( SUIT_Study* ) ), this, SLOT( updateCommandsStatus() ) );
+
myStudy = study;
}
{
emit activated( this );
}
+
+/*!
+ SLOT: is used for Help browsing
+*/
+
+void SUIT_Application::onHelpContextModule (const QString& /*theComponentName*/,
+ const QString& /*theFileName*/)
+{
+}
#include <qobject.h>
#include <qwidget.h>
+class QLabel;
+class QString;
class QAction;
+class QIconSet;
class SUIT_Desktop;
class SUIT_Convertor;
class SUIT_ViewModel;
class SUIT_ResourceMgr;
-class QString;
-class QIconSet;
-class QLabel;
+
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*! \class QObject
* \brief For more information see <a href="http://doc.trolltech.com">QT documentation</a>.
*/
/*! Returns FALSE if application can not be closed (because of non saved data for example).
This method called by SUIT_Session whin closing of application was requested. */
- virtual bool isPossibleToClose();
+ virtual bool isPossibleToClose( bool& );
/*! Performs some finalization of life cycle of this application.
For instance, the application can force its documents(s) to close. */
signals:
void applicationClosed( SUIT_Application* );
void activated( SUIT_Application* );
+ void infoChanged( QString );
+
+public slots:
+ virtual void updateCommandsStatus();
+ virtual void onHelpContextModule( const QString&, const QString& );
+
+private slots:
+ void onInfoClear();
protected:
SUIT_Application* startApplication( int, char** ) const;
#define APP_CREATE_NAME "createApplication"
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
{
public:
SUIT_DataObjectKey();
- ~SUIT_DataObjectKey();
+ virtual ~SUIT_DataObjectKey();
virtual bool isLess( const SUIT_DataObjectKey* ) const = 0;
virtual bool isEqual( const SUIT_DataObjectKey* ) const = 0;
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
#include "SUIT_DataOwner.h"
#ifndef WNT
{
}
-/*! operator== : compares two owners*/
+/*! Operator == compares two owners*/
bool operator==( const SUIT_DataOwnerPtr& p1, const SUIT_DataOwnerPtr& p2 )
{
if ( !p1.isNull() && !p2.isNull() )
- return (p1->isEqual( *p2 ) && p2->isEqual( *p1 ));
+ return (p1->keyString() == p2->keyString());
return p1.isNull() && p2.isNull();
}
+// *** jfa: The below function has been put here 14.02.2007 from branch BR_Dev_For_4_0
+// *** and also improved for better comparison of DataOwners with DataSubOwners.
+// *** This comment is to be removed after merging with BR_Dev_For_4_0.
+/*! Operator < allows to order suit data owners for map */
+bool operator<( const SUIT_DataOwnerPtr& p1, const SUIT_DataOwnerPtr& p2 )
+{
+ if ( p1.isNull() && p2.isNull() )
+ return false;
+ else if ( p1.isNull() )
+ return true;
+ else if ( p2.isNull() )
+ return false;
+
+ return (p1->keyString() < p2->keyString());
+}
+// *** end
+
/*!
\class SUIT_DataOwnerPtrList
implements value list with unique items (uniqueness is
- provided by operator==())
+ provided by operator==() and operator<())
*/
/*!
*/
SUIT_DataOwnerPtrList::iterator SUIT_DataOwnerPtrList::append( const SUIT_DataOwnerPtr& x )
{
- if( mySkipEqual && myMap.contains( x ) ) //contains uses SUIT_DataOwnerPtr::operator==
+ if ( mySkipEqual && myMap.contains( x ) ) //contains uses SUIT_DataOwnerPtr::operator==
return myMap[ x ];
iterator it = QValueList<SUIT_DataOwnerPtr>::append( x );
- if( mySkipEqual )
+ if ( mySkipEqual )
myMap.insert( x, it );
return it;
myMap.remove(x);
return QValueList<SUIT_DataOwnerPtr>::remove( x );
}
-
-/*!
- Operator < allows to order suit data owners for map
-*/
-bool operator<( const SUIT_DataOwnerPtr& p1, const SUIT_DataOwnerPtr& p2 )
-{
- return p1.get()<p2.get();
-}
public:
SUIT_DataOwner();//!< constructor
virtual ~SUIT_DataOwner();//!< destructor
- //! compare function
- virtual bool isEqual( const SUIT_DataOwner& ) const = 0;
+ // *** jfa: The below line has been put here 14.02.2007.
+ // *** It cancels modifications from branch BR_Dev_For_4_0
+ virtual QString keyString() const = 0;//!< used for comparison
};
/*! \typedef SUIT_DataOwnerPtr
myLogoMgr->clear();
}
+/*!
+ Emits activated signal
+*/
+void SUIT_Desktop::emitActivated()
+{
+ emit activated();
+}
+/*!
+ Emits message signal
+*/
+void SUIT_Desktop::emitMessage( const QString& theMessage )
+{
+ emit message( theMessage );
+}
void logoRemove( const QString& );
void logoInsert( const QString&, const QPixmap&, const int = -1 );
+ void emitActivated();
+ void emitMessage( const QString& );
+
signals:
void activated();
void deactivated();
void windowActivated( SUIT_ViewWindow* );
void closing( SUIT_Desktop*, QCloseEvent* );
+ void message( const QString& );
protected:
virtual bool event( QEvent* );
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File : SUIT_MsgDlg.cxx
+// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
+//
+
+#include "SUIT_MsgDlg.h"
+
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+
+/*!
+ \class SUIT_MsgDlg
+ \brief Information message dialog box with custom number of buttons.
+
+ The class provides a functionality to display message box with the custom number
+ of buttons. Each button is identified by the unique non-zero number which can
+ be tested after dialog box finishes its execution. Pressing each button except
+ causes dialog box to finish execution with return status equal to the button
+ identifier. In addition, pressing "Cancel" button finishes dialog box execution
+ wih return status 0.
+
+ It is also possible to display custom pixmap or icon at the left side of the
+ dialog box. Pass the required pixmap to the constructor or use method setPixmap().
+
+ The typical usage of the dialog box:
+ \code
+ SUIT_MsgDlg dlg( this, tr( "Warning!" ),
+ tr( "File %s exists. Overwrite?" ).arg( files[i] ),
+ QMessageBox::standardIcon( QMessageBox::Warning ) );
+ dlg.addButton( "Yes", YesId );
+ dlg.addButton( "No", NoId );
+ dlg.addButton( "Yes to all", YesAllId );
+ dlg.addButton( "No to all", NoAllId );
+ int ret = dlg.exec();
+ switch( ret ) {
+ case YesId:
+ // process one file
+ processOneFile();
+ break;
+ case NoId:
+ // skip current file processing and proceed to the next file
+ break;
+ case YesAllId:
+ // process all files
+ processAllFiles();
+ stopped = true;
+ break;
+ case NoAllId:
+ // skip all process all files
+ processAllFiles();
+ break;
+ default:
+ // operation is cancelled
+ break;
+ }
+ \endcode
+
+ \sa addButton(), setPixmap()
+*/
+
+/*!
+ \brief Constructor.
+ \param parent parent widget
+ \param title dialog box caption
+ \param msg dialog box message
+ \param icon dialog box icon
+*/
+SUIT_MsgDlg::SUIT_MsgDlg( QWidget* parent,
+ const QString& title,
+ const QString& msg,
+ const QPixmap& icon )
+: QDialog ( parent, "SUIT_MsgDlg", true )
+{
+ // title
+ setCaption( title );
+
+ // icon
+ myIconLab = new QLabel( this );
+ myIconLab->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ) );
+ myIconLab->setScaledContents( false );
+ myIconLab->setAlignment( Qt::AlignCenter );
+
+ if ( !icon.isNull() )
+ myIconLab->setPixmap( icon );
+
+ // info message
+ myMsgLab = new QLabel( msg, this );
+ myMsgLab->setTextFormat( Qt::RichText );
+ myMsgLab->setAlignment( Qt::AlignCenter );
+
+ // Buttons
+ myButtonLayout = new QHBoxLayout();
+ myButtonLayout->setMargin( 0 );
+ myButtonLayout->setSpacing( 6 );
+
+ // <Cancel>
+ QPushButton* cancelBtn = new QPushButton( tr( "CANCEL" ), this );
+ myButtonLayout->addSpacing( 20 );
+ myButtonLayout->addStretch();
+ myButtonLayout->addWidget( cancelBtn );
+
+ QGridLayout* layout = new QGridLayout( this );
+ layout->setMargin( 11 );
+ layout->setSpacing( 6 );
+
+ layout->addWidget( myIconLab, 0, 0 );
+ layout->addWidget( myMsgLab, 0, 1 );
+ layout->addMultiCellLayout( myButtonLayout, 1, 1, 0, 1 );
+
+ // signals and slots connections
+ connect( cancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+}
+
+/*!
+ \brief Destructor.
+*/
+SUIT_MsgDlg::~SUIT_MsgDlg()
+{
+}
+
+/*!
+ \brief Add operation button to the dialog box.
+
+ If the parameter \a id is equal to -1, then the
+ button identifier is generated automatically.
+
+ \param btext button text
+ \param id button identifier
+ \return button identifier
+*/
+int SUIT_MsgDlg::addButton( const QString& btext, const int id )
+{
+ static int lastId = 0;
+ int bid = id == -1 ? --lastId : id;
+
+ QPushButton* b = button( bid );
+ if ( b ) {
+ myButtons.remove( b );
+ delete b;
+ }
+
+ QPushButton* newButton = new QPushButton( btext, this );
+
+ myButtonLayout->insertWidget( myButtons.count(), newButton );
+ myButtons.insert( newButton, bid );
+ connect( newButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
+
+ return bid;
+}
+
+/*!
+ \brief Set icon to the dialog box
+ \param icon pixmap
+*/
+void SUIT_MsgDlg::setPixmap( const QPixmap& icon )
+{
+ myIconLab->setPixmap( icon );
+}
+
+
+/*!
+ \brief Called when any dialog button (except \c Cancel)
+ is clicked.
+
+ Closes the dialog and sets its result code to the identifier
+ of the button clicked by the user.
+*/
+void SUIT_MsgDlg::accept()
+{
+ QPushButton* btn = ( QPushButton* )sender();
+ done( myButtons[ btn ] );
+}
+
+/*!
+ \brief Search button with the specified identifier.
+ \param id button identifier
+ \return button or 0 if \a id is invalid
+*/
+QPushButton* SUIT_MsgDlg::button( const int id ) const
+{
+ QPushButton* btn = 0;
+ for ( ButtonMap::ConstIterator it = myButtons.begin();
+ it != myButtons.end() && !btn; ++it ) {
+ if ( it.data() == id )
+ btn = it.key();
+ }
+ return btn;
+}
+
+/*!
+ \brief Get information icon label.
+ \return information icon label
+*/
+QLabel* SUIT_MsgDlg::iconLabel() const
+{
+ return myIconLab;
+}
+
+/*!
+ \brief Get information message label.
+ \return information message label
+*/
+QLabel* SUIT_MsgDlg::messageLabel() const
+{
+ return myMsgLab;
+}
--- /dev/null
+// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File : SUIT_MsgDlg.h
+// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
+//
+
+#ifndef SUIT_MSGDLG_H
+#define SUIT_MSGDLG_H
+
+#include "SUIT.h"
+
+#include <qdialog.h>
+#include <qpixmap.h>
+#include <qmap.h>
+
+class QLabel;
+class QPushButton;
+class QHBoxLayout;
+
+class SUIT_EXPORT SUIT_MsgDlg : public QDialog
+{
+ Q_OBJECT
+
+public:
+ SUIT_MsgDlg( QWidget*, const QString&, const QString&, const QPixmap& = QPixmap() ) ;
+ ~SUIT_MsgDlg();
+
+ int addButton( const QString&, const int = -1);
+ void setPixmap( const QPixmap& );
+
+public slots:
+ void accept();
+
+protected:
+ QPushButton* button( const int ) const;
+ QLabel* iconLabel() const;
+ QLabel* messageLabel() const;
+
+private:
+ typedef QMap<QPushButton*,int> ButtonMap;
+
+private:
+ ButtonMap myButtons;
+ QHBoxLayout* myButtonLayout;
+ QLabel* myIconLab;
+ QLabel* myMsgLab;
+};
+
+#endif // SUIT_MSGDLG_H
+
class Signal;
SUIT_PopupClient();
- ~SUIT_PopupClient();
+ virtual ~SUIT_PopupClient();
bool connectPopupRequest( QObject* reciever, const char* slot );
bool disconnectPopupRequest( QObject* reciever, const char* slot );
#include <qfileinfo.h>
#include <qdir.h>
+#include <qapplication.h>
+#include <qregexp.h>
/*!
Constructor
return path( docSection, prefix, id );
}
+#ifndef WIN32
#include <unistd.h>
+#endif
/*!
Returns the user file name for specified application
*/
QString SUIT_ResourceMgr::userFileName( const QString& appName, const bool for_load ) const
{
- QString pathName = QtxResourceMgr::userFileName( appName );
+ QString pathName;
+
+ // Try config file, given in arguments
+ for (int i = 1; i < qApp->argc(); i++) {
+ QRegExp rx ("--resources=(.+)");
+ if ( rx.search( QString(qApp->argv()[i]) ) >= 0 && rx.capturedTexts().count() > 1 ) {
+ QString file = rx.capturedTexts()[1];
+ QFileInfo fi (file);
+ pathName = fi.absFilePath();
+ }
+ }
+
+ if (!pathName.isEmpty())
+ return pathName;
+
+ // QtxResourceMgr::userFileName() + '.' + version()
+ pathName = QtxResourceMgr::userFileName( appName );
if ( !version().isEmpty() )
pathName += QString( "." ) + version();
- if( !QFileInfo( pathName ).exists() && for_load )
+ if ( !QFileInfo( pathName ).exists() && for_load )
{
QString newName = findAppropriateUserFile( pathName );
- if( !newName.isEmpty() )
+ if ( !newName.isEmpty() )
pathName = newName;
}
if( id<0 )
continue;
- if( abs( id-id0 ) < abs( appr-id0 ) )
+ if( appr < 0 || abs( id-id0 ) < abs( appr-id0 ) )
{
appr = id;
appr_file = d.absFilePath( *anIt );
{
public:
SUIT_SelectionFilter();
- ~SUIT_SelectionFilter();
+ virtual ~SUIT_SelectionFilter();
virtual bool isOk( const SUIT_DataOwner* ) const = 0;
};
#include <dlfcn.h>
#endif
+static bool SUIT_Session_IsPythonExecuted = false;
+static QMutex SUIT_Session_PythonMutex;
+
SUIT_Session* SUIT_Session::mySession = 0;
/*! Constructor.*/
myResMgr( 0 ),
myHandler( 0 ),
myActiveApp( 0 ),
-myExitStatus( FROM_GUI )
+myExitStatus( NORMAL ),
+myExitFlags ( 0 )
{
SUIT_ASSERT( !mySession )
{
myAppList.clear();
+ if (myResMgr) {
+ delete myResMgr;
+ myResMgr = 0;
+ }
mySession = 0;
}
/*!
Destroys session by closing all applications.
*/
-void SUIT_Session::closeSession( int mode )
+void SUIT_Session::closeSession( int mode, int flags )
{
while ( !myAppList.isEmpty() )
{
SUIT_Application* app = myAppList.getFirst();
- if ( mode == ASK && !app->isPossibleToClose() )
+ bool closePermanently;
+ if ( mode == ASK && !app->isPossibleToClose( closePermanently ) )
return;
else if ( mode == SAVE )
{
}
else if ( mode == DONT_SAVE )
{
- myExitStatus = FROM_CORBA_SESSION;
- //....
+ myExitStatus = FORCED;
}
app->closeApplication();
}
+ myExitFlags = flags;
+}
+
+/*!
+ Get session exit flags.
+
+ By default, exit flags are set to 0. You can use pass any flags to the
+ closeSession() method if you need to process them later on application
+ quiting.
+
+ \return exit flags
+*/
+int SUIT_Session::exitFlags() const
+{
+ return myExitFlags;
}
/*! \retval return myHandler*/
/*!
Slot, called on activation of some application's desktop
*/
-void SUIT_Session::onApplicationActivated( SUIT_Application* app )
+void SUIT_Session::onApplicationActivated( SUIT_Application* app )
{
myActiveApp = app;
}
+
+/*!
+ \retval Return TRUE, if a command is currently executed in Python Console,
+ FALSE otherwise.
+*/
+bool SUIT_Session::IsPythonExecuted()
+{
+ bool ret;
+ SUIT_Session_PythonMutex.lock();
+ ret = SUIT_Session_IsPythonExecuted;
+ SUIT_Session_PythonMutex.unlock();
+ return ret;
+}
+
+/*!
+ Set value of boolean flag, being returned by method \a IsPythonExecuted().
+ It is supposed to set the flag to TRUE when any python command starts
+ and reset it to FALSE when the command finishes.
+*/
+void SUIT_Session::SetPythonExecuted(bool isPythonExecuted)
+{
+ SUIT_Session_PythonMutex.lock();
+ SUIT_Session_IsPythonExecuted = isPythonExecuted;
+ SUIT_Session_PythonMutex.unlock();
+}
#include "SUIT_Application.h"
#include "SUIT_ResourceMgr.h"
+#include <qmutex.h>
#include <qobject.h>
#include <qptrlist.h>
#include <qptrvector.h>
typedef LIB_HANDLE AppLib;
enum { ASK = 0, SAVE, DONT_SAVE } CloseMode;
- enum { FROM_GUI = 0, FROM_CORBA_SESSION } ExitStatus;
+ enum { NORMAL = 0, FORCED } ExitStatus;
public:
SUIT_Session();
SUIT_ResourceMgr* resourceMgr() const;
- void closeSession( int mode = ASK );
+ void closeSession( int mode = ASK, int flags = 0 );
+ int exitFlags() const;
SUIT_ExceptionHandler* handler() const;
+ // To lock GUI user actions during python command execution (PAL12651)
+ static bool IsPythonExecuted();
+ static void SetPythonExecuted(bool isPythonExecuted);
+
signals:
void applicationClosed( SUIT_Application* );
static SUIT_Session* mySession;
int myExitStatus;
+ int myExitFlags;
};
#endif
myIsModified = on;
}
+/*!
+ Set study modified to \a on.
+ */
+void SUIT_Study::Modified()
+{
+ setIsModified( TRUE );
+ sendChangesNotification();
+}
+
/*!
Set root object.
*/
{
return false;
}
-
-/*!
- * \brief Stores the study state
-*/
-int SUIT_Study::storeState()
-{
- return -1;
-}
/*!
- * \brief Restores the study state
-*/
+ * \brief Restores the study state.
+ */
void SUIT_Study::restoreState(int savePoint)
{
+ // Redefined in SalomeApp_Study.
+ // Called from SALOME_Session_i::restoreVisualState(CORBA::Long theSavePoint)
}
virtual bool isSaved() const;
virtual bool isModified() const;
+ virtual void Modified();
virtual void createDocument();
virtual void closeDocument( bool = true );
bool suspend( SUIT_Operation* );
bool resume( SUIT_Operation* );
- virtual int storeState();
virtual void restoreState(int savePoint);
signals:
if( td.isEqual( r1, r2 ) )
{
// update items themselves
- td.updateItem( r2 );
+ td.updateItem( r1, r2 );
// iterate 'siblings' (direct children)
QValueList< DiffItem< SrcItem, TrgItem > > d;
else
{
//to update
- td.updateItem( item.myTrg );
+ td.updateItem( item.mySrc, item.myTrg );
synchronize( item.mySrc, item.myTrg, td );
lastItem = item.myTrg;
}
#include "SUIT_Study.h"
#include <qcursor.h>
+#include <qregexp.h>
#include <qmessagebox.h>
#ifdef WNT
#include <windows.h>
#endif
+QMap<QString, int> SUIT_ViewManager::_ViewMgrId;
+
/*!\class SUIT_ViewManager.
* Class provide manipulation with view windows.
*/
SUIT_ViewModel* theViewModel )
: QObject( 0 ),
myDesktop( theDesktop ),
-myTitle( "Default viewer" ),
+myTitle( "Default: %M - viewer %V" ),
myStudy( NULL )
{
myViewModel = 0;
myActiveView = 0;
- setViewModel(theViewModel);
- connect(theDesktop, SIGNAL(windowActivated(SUIT_ViewWindow*)),
- this, SLOT(onWindowActivated(SUIT_ViewWindow*)));
+ setViewModel( theViewModel );
+
+ myId = useNewId( getType() );
+
+ connect( theDesktop, SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
+ this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
myStudy = theStudy;
- if( myStudy )
+ if ( myStudy )
connect( myStudy, SIGNAL( destroyed() ), this, SLOT( onDeleteStudy() ) );
}
}
}
+int SUIT_ViewManager::useNewId( const QString& type )
+{
+ if ( !_ViewMgrId.contains( type ) )
+ _ViewMgrId.insert( type, 0 );
+
+ int id = _ViewMgrId[type];
+ _ViewMgrId[type]++;
+ return id;
+}
+
+void SUIT_ViewManager::setTitle( const QString& theTitle )
+{
+ if ( myTitle == theTitle )
+ return;
+
+ myTitle = theTitle;
+ for ( uint i = 0; i < myViews.count(); i++ )
+ setViewName( myViews[i] );
+}
+
/*!Sets view model \a theViewModel to view manager.*/
void SUIT_ViewManager::setViewModel(SUIT_ViewModel* theViewModel)
{
}
/*!Sets view name for view window \a theView.*/
-void SUIT_ViewManager::setViewName(SUIT_ViewWindow* theView)
+void SUIT_ViewManager::setViewName( SUIT_ViewWindow* theView )
{
- int aPos = myViews.find(theView);
- theView->setCaption(myTitle + QString(":%1").arg(aPos+1));
+ QString title = prepareTitle( getTitle(), myId + 1, myViews.find( theView ) + 1 );
+ theView->setCaption( title );
+}
+
+QString SUIT_ViewManager::prepareTitle( const QString& title, const int mId, const int vId )
+{
+ QString res = title;
+ QRegExp re( "%[%MV]" );
+ int i = 0;
+ while ( ( i = re.search( res, i ) ) != -1 )
+ {
+ QString rplc;
+ QString str = res.mid( i, re.matchedLength() );
+ if ( str == QString( "%%" ) )
+ rplc = QString( "%" );
+ else if ( str == QString( "%M" ) )
+ rplc = QString::number( mId );
+ else if ( str == QString( "%V" ) )
+ rplc = QString::number( vId );
+ res.replace( i, re.matchedLength(), rplc );
+ i += rplc.length();
+ }
+ return res;
}
/*! Creates View, adds it into list of views and returns just created view window*/
}
connect(theView, SIGNAL(closing(SUIT_ViewWindow*)),
- this, SLOT(onDeleteView(SUIT_ViewWindow*)));
+ this, SLOT(onClosingView(SUIT_ViewWindow*)));
connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)),
this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*)));
/*!Emit delete view. Remove view window \a theView from view manager.
*/
-void SUIT_ViewManager::onDeleteView(SUIT_ViewWindow* theView)
+void SUIT_ViewManager::onClosingView( SUIT_ViewWindow* theView )
{
- emit deleteView(theView);
- removeView(theView);
+ closeView( theView );
+}
+
+/*!
+ Remove the view window \a theView from view manager and destroy it.
+*/
+void SUIT_ViewManager::closeView( SUIT_ViewWindow* theView )
+{
+ if ( !theView )
+ return;
+
+ QGuardedPtr<SUIT_ViewWindow> view( theView );
+
+ view->hide();
+
+ if ( !view->testWFlags( WDestructiveClose ) )
+ return;
+
+ emit deleteView( view );
+ removeView( view );
+
+ if ( view )
+ delete view;
}
/*!Remove view window \a theView from view manager.
emit lastViewClosed(this);
}
+/*!
+ Set or clear flag Qt::WDestructiveClose for all views
+*/
+void SUIT_ViewManager::setDestructiveClose( const bool on )
+{
+ for ( uint i = 0; i < myViews.count(); i++ )
+ myViews[i]->setDestructiveClose( on );
+}
+
+/*!
+ Returns 'true' if any of views (view windows) is visible.
+*/
+bool SUIT_ViewManager::isVisible() const
+{
+ bool res = false;
+ for ( uint i = 0; i < myViews.count() && !res; i++ )
+ res = myViews[i]->isVisibleTo( myViews[i]->parentWidget() );
+ return res;
+}
+
/*!
Show or hide all views (view windows)
*/
*/
void SUIT_ViewManager::closeAllViews()
{
- unsigned int aSize = myViews.size();
- for (uint i = 0; i < aSize; i++) {
- if (myViews[i])
- myViews[i]->close();
- }
+ for ( uint i = 0; i < myViews.size(); i++ )
+ delete myViews[i];
+ myViews.clear();
}
/*!
*\retval QString - type of view model.
*/
-QString SUIT_ViewManager::getType() const
+QString SUIT_ViewManager::getType() const
{
return (!myViewModel)? "": myViewModel->getType();
}
int getViewsCount() { return myViews.count(); }
QPtrVector<SUIT_ViewWindow> getViews() { return myViews; }
- QString getTitle() const { return myTitle;}
- void setTitle(QString theTitle) { myTitle = theTitle; }
+ QString getTitle() const { return myTitle; }
+ virtual void setTitle( const QString& );
SUIT_ViewWindow* createViewWindow();
+ bool isVisible() const;
virtual void setShown( const bool );
+ virtual void setDestructiveClose( const bool );
+
+ int getId() const { return myId; }
public slots:
void createView();
protected slots:
void onWindowActivated(SUIT_ViewWindow*);
- void onDeleteView(SUIT_ViewWindow* theView);
- void onMousePressed(SUIT_ViewWindow* theView, QMouseEvent* theEvent);
+ void onClosingView( SUIT_ViewWindow* );
+ void onMousePressed(SUIT_ViewWindow*, QMouseEvent* );
void onDeleteStudy();
private slots:
/*! Removes the View from internal Views Vector.*/
virtual void removeView(SUIT_ViewWindow* theView);
+ /*! Close the specified View.*/
+ virtual void closeView(SUIT_ViewWindow* theView);
+
/*! Used to set unique name for the view.*/
virtual void setViewName(SUIT_ViewWindow* theView);
+ QString prepareTitle( const QString&, const int, const int );
+
+ static int useNewId( const QString& );
protected:
SUIT_Desktop* myDesktop;
QPtrVector<SUIT_ViewWindow> myViews;
SUIT_ViewWindow* myActiveView;
+ int myId;
QString myTitle;
SUIT_Study* myStudy;
+
+ static QMap<QString, int> _ViewMgrId;
};
#ifdef WIN32
return dumpViewToFormat( dumpView(), fileName, format );
}
+/*!
+ Set or clear flag Qt::WDestructiveClose
+*/
+void SUIT_ViewWindow::setDestructiveClose( const bool on )
+{
+ if ( on )
+ setWFlags( WDestructiveClose );
+ else
+ clearWFlags( WDestructiveClose );
+}
+
/*! Close event \a theEvent.
*/
void SUIT_ViewWindow::closeEvent(QCloseEvent* theEvent)
{
- QMainWindow::closeEvent( theEvent );
+// QMainWindow::closeEvent( theEvent );
emit closing( this );
}
virtual QString getVisualParameters();
virtual void setVisualParameters( const QString& parameters );
+ void setDestructiveClose( const bool );
+
public slots:
virtual void onDumpView();
--- /dev/null
+# 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 : suitApp
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libSUITApp.la
+
+salomeinclude_HEADERS= SUITApp_Application.h
+
+dist_libSUITApp_la_SOURCES= \
+ SUITApp.cxx \
+ SUITApp_Application.cxx
+
+MOC_FILES=SUITApp_Application_moc.cxx
+nodist_libSUITApp_la_SOURCES= $(MOC_FILES)
+
+nodist_salomeres_DATA= SUITApp_msg_en.qm
+
+libSUITApp_la_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) \
+ -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+
+libSUITApp_la_LDFLAGS=$(QT_MT_LIBS)
+libSUITApp_la_LIBADD= ../SUIT/libsuit.la ../Qtx/libqtx.la
+
+if ENABLE_PYCONSOLE
+libSUITApp_la_LDFLAGS+= -Xlinker -export-dynamic $(PYTHON_LIBS)
+endif
+
+# Executable
+bin_PROGRAMS= SUITApp
+
+dist_SUITApp_SOURCES=SUITApp.cxx
+
+SUITApp_CPPFLAGS=$(QT_INCLUDES) $(PYTHON_INCLUDES) \
+ -I$(srcdir)/../SUIT -I$(srcdir)/../Qtx
+
+SUITApp_LDADD= libSUITApp.la ../SUIT/libsuit.la ../Qtx/libqtx.la
+++ /dev/null
-# 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 : suitApp
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= SUITApp_Application.h
-
-# .po files to transform in .qm
-PO_FILES = SUITApp_msg_en.po
-
-LIB_SRC= SUITApp.cxx \
- SUITApp_Application.cxx
-
-LIB_MOC = SUITApp_Application.h
-
-# Libraries targets
-LIB = libSUITApp.la
-
-# Executables targets
-BIN = SUITApp
-BIN_SRC =
-
-CPPFLAGS+=$(QT_INCLUDES) $(PYTHON_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-
-LIBS+= -Xlinker -export-dynamic $(PYTHON_LIBS)
-LIBS+= -lsuit -lqtx
-LIBSFORBIN+= -lsuit -lqtx
-
-@CONCLUDE@
-
-
SUIT_ResourceMgr* resMgr = aSession->createResourceMgr( argList.first() );
if ( resMgr ) {
resMgr->loadLanguage();
- QString splashIcon, splashInfo, splashTextColors;
- resMgr->value( "splash", "image", splashIcon );
- resMgr->value( "splash", "info", splashInfo, false );
- resMgr->value( "splash", "text_colors", splashTextColors );
QString appName = QObject::tr( "APP_NAME" ).stripWhiteSpace();
QString appVersion = QObject::tr( "APP_VERSION" ).stripWhiteSpace();
if ( appVersion == "APP_VERSION" ) {
else
appVersion = "";
}
+ QString splashIcon;
+ resMgr->value( "splash", "image", splashIcon );
QPixmap px( splashIcon );
if ( !px.isNull() ) {
splash = QtxSplash::splash( px );
- if ( !splashTextColors.isEmpty() ) {
+ int splashMargin;
+ if ( resMgr->value( "splash", "margin", splashMargin ) && splashMargin > 0 ) {
+ splash->setMargin( splashMargin );
+ }
+ QString splashTextColors;
+ if ( resMgr->value( "splash", "text_colors", splashTextColors ) && !splashTextColors.isEmpty() ) {
QStringList colors = QStringList::split( "|", splashTextColors );
QColor c1, c2;
if ( colors.count() > 0 ) c1 = QColor( colors[0] );
QFont f = splash->font();
f.setBold( true );
splash->setFont( f );
- if ( !splashInfo.isEmpty() ) {
+ QString splashInfo;
+ if ( resMgr->value( "splash", "info", splashInfo, false ) && !splashInfo.isEmpty() ) {
splashInfo.replace( QRegExp( "%A" ), appName );
splashInfo.replace( QRegExp( "%V" ), QObject::tr( "ABOUT_VERSION" ).arg( appVersion ) );
splashInfo.replace( QRegExp( "%L" ), QObject::tr( "ABOUT_LICENSE" ) );
//
#include "SUITApp_Application.h"
+#include "SUIT_Session.h"
#include "SUIT_MessageBox.h"
#include "SUIT_ExceptionHandler.h"
*/
bool SUITApp_Application::notify( QObject* receiver, QEvent* e )
{
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) < 0x060101
+ // Disable GUI user actions while python command is executed
+ if (SUIT_Session::IsPythonExecuted()) {
+ // Disable mouse and keyboard events
+ QEvent::Type aType = e->type();
+ if (aType == QEvent::MouseButtonPress || aType == QEvent::MouseButtonRelease ||
+ aType == QEvent::MouseButtonDblClick || aType == QEvent::MouseMove ||
+ aType == QEvent::Wheel || aType == QEvent::ContextMenu ||
+ aType == QEvent::KeyPress || aType == QEvent::KeyRelease ||
+ aType == QEvent::Accel || aType == QEvent::AccelOverride)
+ return false;
+ }
+#endif
+
return myExceptHandler ? myExceptHandler->handle( receiver, e ) :
QApplication::notify( receiver, e );
}
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libSUPERVGraph.la
+
+salomeinclude_HEADERS= \
+ SUPERVGraph_ViewFrame.h \
+ SUPERVGraph_ViewManager.h \
+ SUPERVGraph_ViewModel.h \
+ SUPERVGraph.h
+
+dist_libSUPERVGraph_la_SOURCES= \
+ SUPERVGraph.cxx \
+ SUPERVGraph_ViewFrame.cxx \
+ SUPERVGraph_ViewManager.cxx \
+ SUPERVGraph_ViewModel.cxx
+
+MOC_FILES= \
+ SUPERVGraph_moc.cxx \
+ SUPERVGraph_ViewFrame_moc.cxx \
+ SUPERVGraph_ViewManager_moc.cxx \
+ SUPERVGraph_ViewModel_moc.cxx
+nodist_libSUPERVGraph_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA= \
+ resources/view_pan.png \
+ resources/view_reset.png
+
+nodist_salomeres_DATA= \
+ SUPERVGraph_images.qm \
+ SUPERVGraph_msg_en.qm
+
+libSUPERVGraph_la_CPPFLAGS=$(QT_INCLUDES) $(CAS_CPPFLAGS) $(PYTHON_INCLUDES) $(BOOST_CPPFLAGS) \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../OBJECT
+libSUPERVGraph_la_LDFLAGS=$(QT_MT_LIBS) ../SUIT/libsuit.la
+++ /dev/null
-# 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@
#include <qaction.h>
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
class SUPERVGRAPH_EXPORT SUPERVGraph_View: public QWidget, public SUIT_PopupClient {
Q_OBJECT;
public:
QToolBar* myToolBar;
SUPERVGraph_View* myView;
-};
+};
+
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
--- /dev/null
+# 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 : SVTK
+# $Header:
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libSVTK.la
+
+salomeinclude_HEADERS= \
+ SVTK.h \
+ SVTK_Prs.h \
+ SVTK_Actor.h \
+ SALOME_Actor.h \
+ SVTK_RectPicker.h \
+ SVTK_DeviceActor.h \
+ SVTK_DialogBase.h \
+ SVTK_FontWidget.h \
+ SVTK_CubeAxesActor2D.h \
+ SVTK_Functor.h \
+ SVTK_MainWindow.h \
+ SVTK_View.h \
+ SVTK_ViewManager.h \
+ SVTK_ViewModel.h \
+ SVTK_ViewWindow.h \
+ SVTK_Renderer.h \
+ SVTK_InteractorStyle.h \
+ SVTK_RenderWindowInteractor.h \
+ SVTK_GenericRenderWindowInteractor.h \
+ SVTK_Selector.h \
+ SVTK_Selection.h \
+ SVTK_SelectionEvent.h \
+ SVTK_SpaceMouse.h \
+ SVTK_Event.h \
+ SVTK_ViewModelBase.h \
+ SVTK_SetRotationPointDlg.h \
+ SVTK_Extension.h
+
+dist_libSVTK_la_SOURCES= \
+ SVTK_Prs.cxx \
+ SVTK_Actor.cxx \
+ SALOME_Actor.cxx \
+ SVTK_RectPicker.cxx \
+ SVTK_DeviceActor.cxx \
+ SVTK_CubeAxesActor2D.cxx \
+ SVTK_NonIsometricDlg.cxx \
+ SVTK_UpdateRateDlg.cxx \
+ SVTK_CubeAxesDlg.cxx \
+ SVTK_DialogBase.cxx \
+ SVTK_FontWidget.cxx \
+ SVTK_Trihedron.cxx \
+ SVTK_MainWindow.cxx \
+ SVTK_View.cxx \
+ SVTK_ViewManager.cxx \
+ SVTK_ViewModel.cxx \
+ SVTK_Renderer.cxx \
+ SVTK_ViewWindow.cxx \
+ SVTK_InteractorStyle.cxx \
+ SVTK_RenderWindowInteractor.cxx \
+ SVTK_GenericRenderWindowInteractor.cxx \
+ SVTK_SpaceMouse.cxx \
+ SVTK_Selector.cxx \
+ SVTK_SetRotationPointDlg.cxx \
+ SVTK_Extension.cxx
+
+EXTRA_DIST+= SVTK_SelectorDef.h SVTK_Trihedron.h
+
+MOC_FILES= \
+ SVTK_GenericRenderWindowInteractor_moc.cxx \
+ SVTK_RenderWindowInteractor_moc.cxx \
+ SVTK_NonIsometricDlg_moc.cxx \
+ SVTK_UpdateRateDlg_moc.cxx \
+ SVTK_CubeAxesDlg_moc.cxx \
+ SVTK_FontWidget_moc.cxx \
+ SVTK_DialogBase_moc.cxx \
+ SVTK_ViewModelBase_moc.cxx \
+ SVTK_ViewManager_moc.cxx \
+ SVTK_ViewWindow_moc.cxx \
+ SVTK_MainWindow_moc.cxx \
+ SVTK_ViewModel_moc.cxx \
+ SVTK_View_moc.cxx \
+ SVTK_SetRotationPointDlg_moc.cxx
+nodist_libSVTK_la_SOURCES= $(MOC_FILES)
+
+nodist_salomeres_DATA= \
+ SVTK_msg_en.qm \
+ SVTK_images.qm
+
+libSVTK_la_CPPFLAGS= \
+ $(QT_INCLUDES) \
+ $(CAS_CPPFLAGS) \
+ $(VTK_INCLUDES) \
+ $(QWT_INCLUDES) \
+ $(BOOST_CPPFLAGS) \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../STD \
+ -I$(srcdir)/../CAM -I$(srcdir)/../OBJECT -I$(srcdir)/../Prs \
+ -I$(srcdir)/../VTKViewer
+
+libSVTK_la_LDFLAGS= \
+ $(VTK_LIBS) \
+ $(QT_MT_LIBS) \
+ $(CAS_KERNEL) $(CAS_VIEWER) \
+ $(QWT_LIBS)
+
+libSVTK_la_LIBADD= ../Qtx/libqtx.la ../SUIT/libsuit.la ../STD/libstd.la \
+ ../CAM/libCAM.la ../OBJECT/libSalomeObject.la \
+ ../Prs/libSalomePrs.la ../VTKViewer/libVTKViewer.la
+
+# Executable
+bin_PROGRAMS = SVTK
+
+dist_SVTK_SOURCES= SVTK.cxx
+
+SVTK_CPPFLAGS=$(libSVTK_la_CPPFLAGS)
+SVTK_LDFLAGS=$(libSVTK_la_LDFLAGS)
+SVTK_LDADD=libSVTK.la $(libSVTK_la_LIBADD)
+++ /dev/null
-# 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 : SVTK
-# $Header:
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= \
- SVTK.h \
- SVTK_Prs.h \
- SVTK_Actor.h \
- SALOME_Actor.h \
- SVTK_RectPicker.h \
- SVTK_DeviceActor.h \
- SVTK_DialogBase.h \
- SVTK_FontWidget.h \
- SVTK_CubeAxesActor2D.h \
- SVTK_Functor.h \
- SVTK_MainWindow.h \
- SVTK_View.h \
- SVTK_ViewManager.h \
- SVTK_ViewModel.h \
- SVTK_ViewWindow.h \
- SVTK_Renderer.h \
- SVTK_InteractorStyle.h \
- SVTK_RenderWindowInteractor.h \
- SVTK_GenericRenderWindowInteractor.h \
- SVTK_Selector.h \
- SVTK_Selection.h \
- SVTK_SelectionEvent.h \
- SVTK_SpaceMouse.h \
- SVTK_Event.h \
- SVTK_ViewModelBase.h
-
-PO_FILES = \
- SVTK_msg_en.po \
- SVTK_images.po
-
-# Libraries targets
-LIB = libSVTK.la
-
-LIB_SRC= \
- SVTK_Prs.cxx \
- SVTK_Actor.cxx \
- SALOME_Actor.cxx \
- SVTK_RectPicker.cxx \
- SVTK_DeviceActor.cxx \
- SVTK_CubeAxesActor2D.cxx \
- SVTK_NonIsometricDlg.cxx \
- SVTK_UpdateRateDlg.cxx \
- SVTK_CubeAxesDlg.cxx \
- SVTK_DialogBase.cxx \
- SVTK_FontWidget.cxx \
- SVTK_Trihedron.cxx \
- SVTK_MainWindow.cxx \
- SVTK_View.cxx \
- SVTK_ViewManager.cxx \
- SVTK_ViewModel.cxx \
- SVTK_Renderer.cxx \
- SVTK_ViewWindow.cxx \
- SVTK_InteractorStyle.cxx \
- SVTK_RenderWindowInteractor.cxx \
- SVTK_GenericRenderWindowInteractor.cxx \
- SVTK_SpaceMouse.cxx \
- SVTK_Selector.cxx
-
-LIB_MOC = \
- SVTK_GenericRenderWindowInteractor.h \
- SVTK_RenderWindowInteractor.h \
- SVTK_NonIsometricDlg.h \
- SVTK_UpdateRateDlg.h \
- SVTK_CubeAxesDlg.h \
- SVTK_FontWidget.h \
- SVTK_DialogBase.h \
- SVTK_ViewModelBase.h \
- SVTK_ViewManager.h \
- SVTK_ViewWindow.h \
- SVTK_MainWindow.h \
- SVTK_ViewModel.h \
- SVTK_View.h
-
-BIN = SVTK
-
-CPPFLAGS+= \
- $(QT_INCLUDES) \
- $(OCC_INCLUDES) \
- $(VTK_INCLUDES) \
- $(QWT_INCLUDES) \
- $(BOOST_CPPFLAGS)
-
-LDFLAGS+= \
- $(QT_MT_LIBS) \
- $(OCC_LIBS) \
- $(QWT_LIBS) \
- $(VTK_LIBS)
-
-LIBS+= -lqtx -lsuit -lstd -lCAM -lSalomeObject -lSalomePrs -lVTKViewer
-
-LDFLAGSFORBIN=$(LDFLAGS) $(LIBS)
-
-@CONCLUDE@
#include "VTKViewer_Transform.h"
#include "VTKViewer_TransformFilter.h"
-#include "VTKViewer_PassThroughFilter.h"
#include "VTKViewer_GeometryFilter.h"
#include "SVTK_RectPicker.h"
#include <vtkInteractorStyle.h>
#include <vtkRenderWindowInteractor.h>
+#include <vtkPassThroughFilter.h>
#include <TColStd_MapOfInteger.hxx>
#include <TColStd_IndexedMapOfInteger.hxx>
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,
vtkSmartPointer<vtkOutlineSource> myOutline;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif // SALOME_ACTOR_H
myUnstructuredGrid(vtkUnstructuredGrid::New())
{
myIsShaded = true;
+ myIsResolveCoincidentTopology = false;
Visibility = Pickable = false;
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
{
~SVTK_Actor();
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include "SVTK.h"
#include "VTKViewer.h"
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
#ifndef WNT
class VTK_HYBRID_EXPORT SVTK_CubeAxesActor2D : public vtkCubeAxesActor2D
#else
void operator=(const SVTK_CubeAxesActor2D&); // Not implemented.
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include "VTKViewer_Transform.h"
#include "VTKViewer_TransformFilter.h"
-#include "VTKViewer_PassThroughFilter.h"
#include "VTKViewer_GeometryFilter.h"
// VTK Includes
#include <vtkPolyDataMapper.h>
#include <vtkDataSetMapper.h>
+#include <vtkPassThroughFilter.h>
+
using namespace std;
vtkStandardNewMacro(SVTK_DeviceActor);
myProperty = vtkProperty::New();
myRepresentation = SVTK::Representation::Surface;
- myIsResolveCoincidentTopology = false;
+ myIsResolveCoincidentTopology = true;
vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor,
myPolygonOffsetUnits);
myTransformFilter = VTKViewer_TransformFilter::New();
for(int i = 0; i < 6; i++)
- myPassFilter.push_back(VTKViewer_PassThroughFilter::New());
+ myPassFilter.push_back(vtkPassThroughFilter::New());
}
/*!
}else if(vtkPolyDataMapper* aMapper = dynamic_cast<vtkPolyDataMapper*>(theMapper)){
aMapper->SetInput(myPassFilter[anId]->GetPolyDataOutput());
}
- }else
- myPassFilter[ 0 ]->SetInput( NULL );
+ }
Superclass::SetMapper(theMapper);
}
{
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;
myShrinkFilter->SetShrinkFactor(theValue);
}
-
/*!
Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on)
param theMode - new mode
switch(myRepresentation){
case Points :
case Surface :
- myProperty->DeepCopy(GetProperty());
+ myProperty->SetAmbient(GetProperty()->GetAmbient());
+ myProperty->SetDiffuse(GetProperty()->GetDiffuse());
+ myProperty->SetSpecular(GetProperty()->GetSpecular());
}
switch(theMode){
case Points :
case Surface :
- GetProperty()->DeepCopy(myProperty);
+ GetProperty()->SetAmbient(myProperty->GetAmbient());
+ GetProperty()->SetDiffuse(myProperty->GetDiffuse());
+ GetProperty()->SetSpecular(myProperty->GetSpecular());
break;
default:
GetProperty()->SetAmbient(1.0);
factor = myPolygonOffsetFactor;
units = myPolygonOffsetUnits;
}
+
+vtkDataSetMapper* SVTK_DeviceActor::GetDataSetMapper()
+{
+ return myMapper;
+}
class VTKViewer_Transform;
class VTKViewer_TransformFilter;
-class VTKViewer_PassThroughFilter;
class VTKViewer_GeometryFilter;
class vtkCell;
class vtkDataSet;
class vtkShrinkFilter;
class vtkDataSetMapper;
+class vtkPassThroughFilter;
namespace SVTK
{
}
}
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor
{
void
Render(vtkRenderer *, vtkMapper *);
+ vtkDataSetMapper* GetDataSetMapper();
+
protected:
SVTK::Representation::Type myRepresentation;
vtkProperty *myProperty;
VTKViewer_GeometryFilter *myGeomFilter;
VTKViewer_TransformFilter *myTransformFilter;
- std::vector<VTKViewer_PassThroughFilter*> myPassFilter;
+ std::vector<vtkPassThroughFilter*> myPassFilter;
vtkShrinkFilter* myShrinkFilter;
vtkDataSetMapper* myMapper;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
#endif //SVTK_DEVICE_ACTOR_H
StartGlobalPan,
StartFitArea,
+ SetRotateGravity,
+ StartPointSelection,
+ SetRotateSelected,
+
+ BBCenterChanged,
+ RotationPointChanged,
+ ChangeRotationPoint,
+
LastEvent
};
}
--- /dev/null
+// 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 <windows.h>
+#else
+#include <dlfcn.h>
+#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
+}
--- /dev/null
+// 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 <SVTK.h>
+
+namespace SVTK
+{
+ SVTK_EXPORT void* getOpenGLExtension( const char* theExtension );
+}
+
+
+#endif
#ifndef SVTK_FontWidget_H
#define SVTK_FontWidget_H
+#include "SVTK.h"
+
#include <qhbox.h>
class QToolButton;
* Class : SVTK_FontWidget
* Description : Dialog for specifynig font
*/
-class SVTK_FontWidget : public QHBox
+class SVTK_EXPORT SVTK_FontWidget : public QHBox
{
Q_OBJECT
class SVTK_Selector;
class SVTK_Renderer;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
/*!
\class QVTK_GenericRenderWindowInteractor
QWidget* myRenderWidget; //!< Keeps a pointer to QWidget, where vtkRenderWindow maps to.
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include "SVTK_Event.h"
#include "SVTK_Selector.h"
#include "SVTK_Functor.h"
+#include "SVTK_Actor.h"
#include "VTKViewer_Algorithm.h"
#include "SVTK_Functor.h"
#include <vtkCommand.h>
#include <vtkCamera.h>
#include <vtkRenderer.h>
-#include <vtkPicker.h>
+#include <vtkPointPicker.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCallbackCommand.h>
#include <vtkRendererCollection.h>
+#include <vtkDataSet.h>
+#include <vtkPerspectiveTransform.h>
+#include <vtkMatrix4x4.h>
#include <qapplication.h>
#include <qpixmap.h>
//VRV: porting on Qt 3.0.5
#include <algorithm>
+#include <iostream>
+
using namespace std;
namespace
theInteractor->GetEventPosition(theX,theY);
theY = theInteractor->GetSize()[1] - theY - 1;
}
-
- //==================================================================
- // function : GetFirstSALOMEActor
- // purpose :
- //==================================================================
- struct THaveIO
- {
- bool
- operator()(SALOME_Actor* theActor)
- {
- return theActor->hasIO();
- }
- };
-
- inline
- SALOME_Actor*
- GetFirstSALOMEActor(vtkPicker *thePicker)
- {
- return VTK::Find<SALOME_Actor>(thePicker->GetActors(),THaveIO());
- }
}
vtkStandardNewMacro(SVTK_InteractorStyle);
+
/*!
Constructor
*/
SVTK_InteractorStyle
::SVTK_InteractorStyle():
mySelectionEvent(new SVTK_SelectionEvent()),
- myPicker(vtkPicker::New()),
+ myPointPicker(vtkPointPicker::New()),
myLastHighlitedActor(NULL),
myLastPreHighlitedActor(NULL),
myControllerIncrement(SVTK_ControllerIncrement::New()),
- myControllerOnKeyDown(SVTK_ControllerOnKeyDown::New())
+ myControllerOnKeyDown(SVTK_ControllerOnKeyDown::New()),
+ myHighlightRotationPointActor(SVTK_Actor::New())
{
- myPicker->Delete();
+ myPointPicker->Delete();
+
+ myPointPicker->SetTolerance(0.025);
this->MotionFactor = 10.0;
this->State = VTK_INTERACTOR_STYLE_CAMERA_NONE;
//
myControllerIncrement->Delete();
myControllerOnKeyDown->Delete();
+
+ myCurrRotationPointType = SVTK::SetRotateGravity;
+ myPrevRotationPointType = myCurrRotationPointType;
+
+ myHighlightRotationPointActor->Delete();
+ myHighlightRotationPointActor->Initialize();
+ myHighlightRotationPointActor->PickableOff();
+ myHighlightRotationPointActor->SetVisibility( false );
+
+ myHighlightRotationPointActor->GetProperty()->SetPointSize(SALOME_POINT_SIZE+2);
+ myHighlightRotationPointActor->GetProperty()->SetLineWidth(SALOME_LINE_WIDTH+2);
+ myHighlightRotationPointActor->GetProperty()->SetRepresentationToPoints();
+
+ myBBFirstCheck = true;
}
/*!
SVTK_InteractorStyle
::RotateXY(int dx, int dy)
{
- if(GetCurrentRenderer() == NULL)
+ /* if(GetCurrentRenderer() == NULL)
return;
int *size = GetCurrentRenderer()->GetRenderWindow()->GetSize();
GetCurrentRenderer()->ResetCameraClippingRange();
+ this->Render();*/
+
+ if(GetCurrentRenderer() == NULL)
+ return;
+
+ vtkCamera *cam = GetCurrentRenderer()->GetActiveCamera();
+
+ double viewFP[3], viewPos[3];
+ cam->GetFocalPoint(viewFP);
+ cam->GetPosition(viewPos);
+
+ if ( myCurrRotationPointType == SVTK::SetRotateGravity )
+ {
+ vtkFloatingPointType aCenter[3];
+ if ( ComputeBBCenter(GetCurrentRenderer(),aCenter) )
+ {
+ myRotationPointX = aCenter[0];
+ myRotationPointY = aCenter[1];
+ myRotationPointZ = aCenter[2];
+ }
+ }
+
+ // Calculate corresponding transformation
+ vtkPerspectiveTransform* aTransform = vtkPerspectiveTransform::New();
+ aTransform->Identity();
+ aTransform->Translate(+myRotationPointX, +myRotationPointY, +myRotationPointZ);
+
+ // Azimuth transformation
+ int *size = GetCurrentRenderer()->GetRenderWindow()->GetSize();
+ double aDeltaAzimuth = -20.0 / size[0];
+
+ double rxf = double(dx) * aDeltaAzimuth * this->MotionFactor;
+ aTransform->RotateWXYZ(rxf, cam->GetViewUp());
+
+ // Elevation transformation
+ double aDeltaElevation = -20.0 / size[1];
+
+ double ryf = double(dy) * aDeltaElevation * this->MotionFactor;
+ vtkMatrix4x4* aMatrix = cam->GetViewTransformMatrix();
+ const double anAxis[3] = {-aMatrix->GetElement(0,0), // mkr : 27.11.2006 : PAL14011 - Strange behaviour in rotation in VTK Viewer.
+ -aMatrix->GetElement(0,1),
+ -aMatrix->GetElement(0,2)};
+
+ aTransform->RotateWXYZ(ryf, anAxis);
+
+ aTransform->Translate(-myRotationPointX, -myRotationPointY, -myRotationPointZ);
+
+ // To apply the transformation
+ cam->SetPosition(aTransform->TransformPoint(viewPos));
+ cam->SetFocalPoint(aTransform->TransformPoint(viewFP));
+
+ cam->OrthogonalizeViewUp();
+
+ GetCurrentRenderer()->ResetCameraClippingRange();
+
this->Render();
}
} else {
if (ctrl)
startOperation(VTK_INTERACTOR_STYLE_CAMERA_ZOOM);
+ else if ( myCurrRotationPointType == SVTK::StartPointSelection )
+ {
+ SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY();
+
+ SALOME_Actor* anActor = GetSelector()->Pick(aSelectionEvent, GetCurrentRenderer());
+
+ if ( anActor )
+ {
+ myPointPicker->Pick( aSelectionEvent->myX,
+ aSelectionEvent->myY,
+ 0.0,
+ GetCurrentRenderer() );
+ int aVtkId = myPointPicker->GetPointId();
+ if ( aVtkId >= 0 )
+ {
+ int anObjId = anActor->GetNodeObjId( aVtkId );
+ vtkFloatingPointType* aCoords = anActor->GetNodeCoord(anObjId);
+
+ myCurrRotationPointType = SVTK::SetRotateSelected;
+
+ // invoke event for update coordinates in SVTK_SetRotationPointDlg
+ InvokeEvent(SVTK::RotationPointChanged,(void*)aCoords);
+ }
+ else
+ {
+ // invoke event with no data (for SVTK_SetRotationPointDlg)
+ InvokeEvent(SVTK::RotationPointChanged,0);
+ myCurrRotationPointType = myPrevRotationPointType;
+ }
+ }
+ else
+ {
+ // invoke event with no data (for SVTK_SetRotationPointDlg)
+ InvokeEvent(SVTK::RotationPointChanged,0);
+ myCurrRotationPointType = myPrevRotationPointType;
+ }
+
+ myHighlightRotationPointActor->SetVisibility( false );
+ if(GetCurrentRenderer() != NULL)
+ GetCurrentRenderer()->RemoveActor( myHighlightRotationPointActor.GetPointer() );
+
+ GetRenderWidget()->setCursor(myDefCursor);
+ }
else
startOperation(VTK_INTERACTOR_STYLE_CAMERA_SELECT);
}
+
return;
}
ForcedState = VTK_INTERACTOR_STYLE_CAMERA_ROTATE;
}
+/*!
+ Set rotation point selected by user
+*/
+void
+SVTK_InteractorStyle
+::startPointSelection()
+{
+ myCurrRotationPointType = SVTK::StartPointSelection;
+
+ if(GetCurrentRenderer() != NULL) {
+ GetCurrentRenderer()->AddActor( myHighlightRotationPointActor.GetPointer() );
+ vtkFloatingPointType aColor[3];
+ GetCurrentRenderer()->GetBackground( aColor );
+ myHighlightRotationPointActor->GetProperty()->SetColor(1. - aColor[0],
+ 1. - aColor[1],
+ 1. - aColor[2]);
+ }
+
+ setCursor(VTK_INTERACTOR_STYLE_CAMERA_NONE);
+}
/*!
Starts Spin operation (e.g. through menu command)
break;
case VTK_INTERACTOR_STYLE_CAMERA_NONE:
default:
- GetRenderWidget()->setCursor(myDefCursor);
+ if ( myCurrRotationPointType == SVTK::StartPointSelection )
+ GetRenderWidget()->setCursor(myHandCursor);
+ else
+ GetRenderWidget()->setCursor(myDefCursor);
myCursorState = false;
break;
}
fitRect(x1, y1, x2, y2);
}
else {
- if (myPoint == myOtherPoint) {
- // process point selection
- this->FindPokedRenderer(aSelectionEvent->myX, aSelectionEvent->myY);
- Interactor->StartPickCallback();
-
- myPicker->Pick(aSelectionEvent->myX,
- aSelectionEvent->myY,
- 0.0,
- GetCurrentRenderer());
- //
- SALOME_Actor* anActor = GetFirstSALOMEActor(myPicker.GetPointer());
- aSelectionEvent->myIsRectangle = false;
-
- if(!myShiftState)
- GetSelector()->ClearIObjects();
-
- if(anActor){
- anActor->Highlight( this, aSelectionEvent, true );
- }else{
- if(myLastHighlitedActor.GetPointer() && myLastHighlitedActor.GetPointer() != anActor)
- myLastHighlitedActor->Highlight( this, aSelectionEvent, false );
- }
- myLastHighlitedActor = anActor;
- }
- else {
- //processing rectangle selection
- Interactor->StartPickCallback();
- GetSelector()->StartPickCallback();
- aSelectionEvent->myIsRectangle = true;
-
- if(!myShiftState)
- GetSelector()->ClearIObjects();
-
- vtkActorCollection* aListActors = GetCurrentRenderer()->GetActors();
- aListActors->InitTraversal();
- while(vtkActor* aActor = aListActors->GetNextActor()){
- if(aActor->GetVisibility()){
- if(SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast(aActor)){
- if(aSActor->hasIO()){
- aSActor->Highlight( this, aSelectionEvent, true );
- }
+ if (myPoint == myOtherPoint)
+ {
+ // process point selection
+ this->FindPokedRenderer(aSelectionEvent->myX, aSelectionEvent->myY);
+ Interactor->StartPickCallback();
+
+ SALOME_Actor* anActor = GetSelector()->Pick(aSelectionEvent, GetCurrentRenderer());
+
+ aSelectionEvent->myIsRectangle = false;
+
+ if(!myShiftState)
+ GetSelector()->ClearIObjects();
+
+ if(anActor)
+ {
+ anActor->Highlight( this, aSelectionEvent, true );
+ }
+ else
+ {
+ if(myLastHighlitedActor.GetPointer() && myLastHighlitedActor.GetPointer() != anActor)
+ myLastHighlitedActor->Highlight( this, aSelectionEvent, false );
+ myLastHighlitedActor = anActor;
+ }
+ }
+ else
+ {
+ //processing rectangle selection
+ Interactor->StartPickCallback();
+ GetSelector()->StartPickCallback();
+ aSelectionEvent->myIsRectangle = true;
+
+ if(!myShiftState)
+ GetSelector()->ClearIObjects();
+
+ vtkActorCollection* aListActors = GetCurrentRenderer()->GetActors();
+ aListActors->InitTraversal();
+ while(vtkActor* aActor = aListActors->GetNextActor())
+ {
+ if(aActor->GetVisibility())
+ {
+ if(SALOME_Actor* aSActor = SALOME_Actor::SafeDownCast(aActor))
+ {
+ if(aSActor->hasIO())
+ aSActor->Highlight( this, aSelectionEvent, true );
+ }
+ }
}
- }
}
- }
Interactor->EndPickCallback();
GetSelector()->EndPickCallback();
}
::onCursorMove(QPoint mousePos)
{
// processing highlighting
- SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY();
+ SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY();
this->FindPokedRenderer(aSelectionEvent->myX,aSelectionEvent->myY);
bool anIsChanged = false;
- myPicker->Pick(aSelectionEvent->myX,
- aSelectionEvent->myY,
- 0.0,
- GetCurrentRenderer());
+ SALOME_Actor *anActor = GetSelector()->Pick(aSelectionEvent, GetCurrentRenderer());
- SALOME_Actor *anActor = GetFirstSALOMEActor(myPicker.GetPointer());
- if (anActor){
- anIsChanged |= anActor->PreHighlight( this, aSelectionEvent, true );
+ if ( myCurrRotationPointType == SVTK::StartPointSelection )
+ {
+ myHighlightRotationPointActor->SetVisibility( false );
+
+ if ( anActor )
+ {
+ myPointPicker->Pick( aSelectionEvent->myX, aSelectionEvent->myY, 0.0, GetCurrentRenderer() );
+ int aVtkId = myPointPicker->GetPointId();
+ if ( aVtkId >= 0 ) {
+ int anObjId = anActor->GetNodeObjId( aVtkId );
+
+ TColStd_IndexedMapOfInteger aMapIndex;
+ aMapIndex.Add( anObjId );
+ myHighlightRotationPointActor->MapPoints( anActor, aMapIndex );
+
+ myHighlightRotationPointActor->SetVisibility( true );
+ anIsChanged = true;
+ }
+ }
}
+ else {
+ if (anActor){
+ anIsChanged |= anActor->PreHighlight( this, aSelectionEvent, true );
+ }
- if(myLastPreHighlitedActor.GetPointer() && myLastPreHighlitedActor.GetPointer() != anActor)
- anIsChanged |= myLastPreHighlitedActor->PreHighlight( this, aSelectionEvent, false );
+ if(myLastPreHighlitedActor.GetPointer() && myLastPreHighlitedActor.GetPointer() != anActor)
+ anIsChanged |= myLastPreHighlitedActor->PreHighlight( this, aSelectionEvent, false );
+ }
+
myLastPreHighlitedActor = anActor;
if(anIsChanged)
theInteractor->AddObserver( SVTK::StartRotate, EventCallbackCommand, Priority );
theInteractor->AddObserver( SVTK::StartGlobalPan, EventCallbackCommand, Priority );
theInteractor->AddObserver( SVTK::StartFitArea, EventCallbackCommand, Priority );
+
+ theInteractor->AddObserver( SVTK::SetRotateGravity, EventCallbackCommand, Priority );
+ theInteractor->AddObserver( SVTK::StartPointSelection, EventCallbackCommand, Priority );
+
+ theInteractor->AddObserver( SVTK::ChangeRotationPoint, EventCallbackCommand, Priority );
}
}
{
//vtkInteractorStyle::OnTimer();
this->Interactor->Render();
+ // check if bounding box was changed
+ if ( GetCurrentRenderer() )
+ {
+ vtkFloatingPointType aCurrBBCenter[3];
+ if ( ComputeBBCenter(GetCurrentRenderer(),aCurrBBCenter) )
+ {
+ if ( !myBBFirstCheck )
+ {
+ if ( fabs(aCurrBBCenter[0]-myBBCenter[0]) > 1e-38 ||
+ fabs(aCurrBBCenter[1]-myBBCenter[1]) > 1e-38 ||
+ fabs(aCurrBBCenter[2]-myBBCenter[2]) > 1e-38 ) {
+ // bounding box was changed => send SVTK::RotationPointChanged event
+ // invoke event for update coordinates in SVTK_SetRotationPointDlg
+ InvokeEvent(SVTK::BBCenterChanged,(void*)aCurrBBCenter);
+ for ( int i =0; i < 3; i++) myBBCenter[i] = aCurrBBCenter[i];
+ }
+ }
+ else
+ {
+ for ( int i =0; i < 3; i++) myBBCenter[i] = aCurrBBCenter[i];
+ myBBFirstCheck = false;
+ }
+ }
+ }
}
/*!
vtkObject* anObject = reinterpret_cast<vtkObject*>( clientData );
SVTK_InteractorStyle* self = dynamic_cast<SVTK_InteractorStyle*>( anObject );
int aSpeedIncrement=self->ControllerIncrement()->Current();
+ vtkFloatingPointType aCenter[3];
+ vtkFloatingPointType* aSelectedPoint;
if ( self ) {
switch ( event ) {
case SVTK::SpaceMouseMoveEvent :
case SVTK::StartFitArea:
self->startFitArea();
return;
+
+ case SVTK::SetRotateGravity:
+ if ( self->myCurrRotationPointType == SVTK::StartPointSelection )
+ {
+ self->myHighlightRotationPointActor->SetVisibility( false );
+ if( self->GetCurrentRenderer() != NULL )
+ self->GetCurrentRenderer()->RemoveActor( self->myHighlightRotationPointActor.GetPointer() );
+ self->GetRenderWidget()->setCursor(self->myDefCursor);
+ }
+ self->myPrevRotationPointType = self->myCurrRotationPointType;
+ self->myCurrRotationPointType = SVTK::SetRotateGravity;
+ if ( ComputeBBCenter(self->GetCurrentRenderer(),aCenter) )
+ // invoke event for update coordinates in SVTK_SetRotationPointDlg
+ self->InvokeEvent(SVTK::BBCenterChanged,(void*)aCenter);
+ return;
+ case SVTK::StartPointSelection:
+ self->startPointSelection();
+ return;
+
+ case SVTK::ChangeRotationPoint:
+ if ( self->myCurrRotationPointType == SVTK::StartPointSelection )
+ {
+ self->myHighlightRotationPointActor->SetVisibility( false );
+ if( self->GetCurrentRenderer() != NULL )
+ self->GetCurrentRenderer()->RemoveActor( self->myHighlightRotationPointActor.GetPointer() );
+ self->GetRenderWidget()->setCursor(self->myDefCursor);
+ }
+ self->myPrevRotationPointType = self->myCurrRotationPointType;
+ self->myCurrRotationPointType = SVTK::SetRotateSelected;
+ aSelectedPoint = (vtkFloatingPointType*)callData;
+ self->myRotationPointX = aSelectedPoint[0];
+ self->myRotationPointY = aSelectedPoint[1];
+ self->myRotationPointZ = aSelectedPoint[2];
+ return;
}
}
}
#include <map>
#include <vtkObject.h>
+
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
//
//! Control the value of increment in SALOME way.
/*!
This class controls of value of increment,
for pan/rotate/zoom operations in SALOME way
*/
-class SVTK_ControllerIncrement : public vtkObject{
+class SVTK_EXPORT SVTK_ControllerIncrement : public vtkObject{
public:
vtkTypeMacro(SVTK_ControllerIncrement, vtkObject);
static SVTK_ControllerIncrement* New();
This class controls the behaviour of KeyDown event
in SALOME way
*/
-class SVTK_ControllerOnKeyDown : public vtkObject{
+class SVTK_EXPORT SVTK_ControllerOnKeyDown : public vtkObject{
public:
vtkTypeMacro(SVTK_ControllerOnKeyDown, vtkObject);
static SVTK_ControllerOnKeyDown* New();
};
class vtkCell;
-class vtkPicker;
+class vtkPointPicker;
class SALOME_Actor;
class SVTK_Selector;
class SVTK_GenericRenderWindowInteractor;
+class SVTK_Actor;
#define VTK_INTERACTOR_STYLE_CAMERA_NONE 0
#define VTK_INTERACTOR_STYLE_CAMERA_ROTATE 1
#define VTK_INTERACTOR_STYLE_CAMERA_FIT 5
#define VTK_INTERACTOR_STYLE_CAMERA_SELECT 6
#define VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN 7
+#define VTK_INTERACTOR_STYLE_CAMERA_SELECT_ROTATION_POINT 8
//! Introduce SALOME way of user interaction
/*!
SVTK_Selector* GetSelector();
- protected:
+ protected:
SVTK_InteractorStyle();
~SVTK_InteractorStyle();
void startFitArea();
void startSpin();
+ void startPointSelection();
+
protected:
void loadCursors();
void startOperation(int operation);
PSelectionEvent mySelectionEvent;
- vtkSmartPointer<vtkPicker> myPicker;
+ unsigned long myCurrRotationPointType;
+ unsigned long myPrevRotationPointType;
+
+ double myRotationPointX;
+ double myRotationPointY;
+ double myRotationPointZ;
+
+ vtkSmartPointer<SVTK_Actor> myHighlightRotationPointActor;
+ vtkSmartPointer<vtkPointPicker> myPointPicker;
+
+ vtkFloatingPointType myBBCenter[3];
+ bool myBBFirstCheck;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include "SVTK_NonIsometricDlg.h"
#include "SVTK_UpdateRateDlg.h"
#include "SVTK_CubeAxesDlg.h"
+#include "SVTK_SetRotationPointDlg.h"
#include "SVTK_MainWindow.h"
#include "SVTK_Event.h"
#include "SVTK_Renderer.h"
#include "SVTK_RenderWindowInteractor.h"
+#include "SVTK_InteractorStyle.h"
#include "SVTK_Selector.h"
myUpdateRateDlg = new SVTK_UpdateRateDlg(myActionsMap[UpdateRate],this,"SVTK_UpdateRateDlg");
myNonIsometricDlg = new SVTK_NonIsometricDlg(myActionsMap[NonIsometric],this,"SVTK_NonIsometricDlg");
myCubeAxesDlg = new SVTK_CubeAxesDlg(myActionsMap[GraduatedAxes],this,"SVTK_CubeAxesDlg");
+ mySetRotationPointDlg = new SVTK_SetRotationPointDlg(myActionsMap[ChangeRotationPointId],this,"SVTK_SetRotationPointDlg");
}
/*!
GetRenderer()->OnAdjustTrihedron();
GetInteractor()->update();
+
+ if ( (SVTK_InteractorStyle*)GetInteractorStyle() )
+ ((SVTK_InteractorStyle*)GetInteractorStyle())->OnTimer();
}
/*!
/*!
Redirect the request to SVTK_Renderer::GetTrihedronSize
*/
-int
+vtkFloatingPointType
SVTK_MainWindow
::GetTrihedronSize()
{
*/
void
SVTK_MainWindow
-::SetTrihedronSize( const int theSize, const bool theRelative )
+::SetTrihedronSize( const vtkFloatingPointType theSize, const bool theRelative )
{
GetRenderer()->SetTrihedronSize(theSize, theRelative);
Repaint();
connect(anAction, SIGNAL(activated()), this, SLOT(activateGlobalPanning()));
myActionsMap[ GlobalPanId ] = anAction;
+ // Change rotation point
+ anAction = new QtxAction(tr("MNU_CHANGINGROTATIONPOINT_VIEW"),
+ theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ROTATION_POINT" ) ),
+ tr( "MNU_CHANGINGROTATIONPOINT_VIEW" ), 0, this);
+ anAction->setStatusTip(tr("DSC_CHANGINGROTATIONPOINT_VIEW"));
+ anAction->setToggleAction(true);
+ connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onChangeRotationPoint(bool)));
+ myActionsMap[ ChangeRotationPointId ] = anAction;
+
// Rotation
anAction = new QtxAction(tr("MNU_ROTATE_VIEW"),
theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_VTKVIEWER_VIEW_ROTATE" ) ),
aPanningBtn->AddAction(myActionsMap[PanId]);
aPanningBtn->AddAction(myActionsMap[GlobalPanId]);
+ myActionsMap[ChangeRotationPointId]->addTo(myToolBar);
+
myActionsMap[RotationId]->addTo(myToolBar);
SUIT_ToolButton* aViewsBtn = new SUIT_ToolButton(myToolBar);
myEventDispatcher->InvokeEvent(SVTK::StartRotate,0);
}
+/*!
+ Change rotation point
+*/
+void
+SVTK_MainWindow
+::onChangeRotationPoint(bool theIsActivate)
+{
+ if(theIsActivate){
+ mySetRotationPointDlg->addObserver();
+ if ( mySetRotationPointDlg->IsFirstShown() )
+ activateSetRotationGravity();
+ mySetRotationPointDlg->show();
+ }else
+ mySetRotationPointDlg->hide();
+}
+
+/*!
+ Set the gravity center as a rotation point
+*/
+void
+SVTK_MainWindow
+::activateSetRotationGravity()
+{
+ myEventDispatcher->InvokeEvent(SVTK::SetRotateGravity,0);
+}
+
+/*!
+ Set the selected point as a rotation point
+*/
+void
+SVTK_MainWindow
+::activateSetRotationSelected(void* theData)
+{
+ myEventDispatcher->InvokeEvent(SVTK::ChangeRotationPoint,theData);
+}
+
+/*!
+ Set the point selected by user as a rotation point
+*/
+void
+SVTK_MainWindow
+::activateStartPointSelection()
+{
+ myEventDispatcher->InvokeEvent(SVTK::StartPointSelection,0);
+}
+
/*!
Starts global panning transformation
*/
class SVTK_UpdateRateDlg;
class SVTK_CubeAxesActor2D;
class SVTK_CubeAxesDlg;
+class SVTK_SetRotationPointDlg;
class VTKViewer_Trihedron;
class VTKViewer_Transform;
bool theIsUpdate = false);
//! Redirect the request to #SVTK_Renderer::GetTrihedronSize
- int
+ vtkFloatingPointType
GetTrihedronSize();
//! Redirect the request to #SVTK_Renderer::SetTrihedronSize
void
- SetTrihedronSize(const int theSize, const bool theRelative = true);
+ SetTrihedronSize(const vtkFloatingPointType theSize, const bool theRelative = true);
//! Redirect the request to #SVTK_Renderer::AdjustActors
void
void activatePanning();
void activateGlobalPanning();
+ void onChangeRotationPoint(bool theIsActivate);
+
+ void activateSetRotationGravity();
+ void activateSetRotationSelected(void* theData);
+ void activateStartPointSelection();
+
void onFrontView();
void onBackView();
void onTopView();
void
SetEventDispatcher(vtkObject* theDispatcher);
- enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, RotationId,
+ enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId,
+ ChangeRotationPointId, RotationId,
FrontId, BackId, TopId, BottomId, LeftId, RightId, ResetId,
ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate};
typedef QMap<int, QtxAction*> TActionsMap;
SVTK_NonIsometricDlg* myNonIsometricDlg;
SVTK_UpdateRateDlg* myUpdateRateDlg;
SVTK_CubeAxesDlg* myCubeAxesDlg;
+ SVTK_SetRotationPointDlg* mySetRotationPointDlg;
vtkSmartPointer<vtkObject> myEventDispatcher;
TActionsMap myActionsMap;
// WorldToView() is called. This is expensive, so we get the matrix once
// and handle the transformation ourselves.
vtkMatrix4x4 *aMatrix = vtkMatrix4x4::New();
- aMatrix->DeepCopy(theRenderer->GetActiveCamera()->
- GetCompositePerspectiveTransformMatrix(1,0,1));
+ aMatrix->DeepCopy( theRenderer->GetActiveCamera()->
+ GetCompositePerspectiveTransformMatrix( theRenderer->GetTiledAspectRatio(), 0, 1 ) );
// We grab the z-buffer for the selection region all at once and probe the resulting array.
float *aZPtr = theRenderer->GetRenderWindow()->
GetZbufferData(theSelection[0], theSelection[1], theSelection[2], theSelection[3]);
//cout<<"theSelection = {"<<theSelection[0]<<", "<<theSelection[1]<<", "<<theSelection[2]<<", "<<theSelection[3]<<"}\n";
- /*
+
+ //cout<<"\t";
+ for(int iX = theSelection[0]; iX <= theSelection[2]; iX++){
+ //cout<<iX<<"\t";
+ }
+ //cout<<endl;
+
for(int iY = theSelection[1]; iY <= theSelection[3]; iY++){
+ //cout<<iY<<"\t";
for(int iX = theSelection[0]; iX <= theSelection[2]; iX++){
- cout<<GetZ(aZPtr,theSelection,iX,iY)<<" ";
+ //cout<<std::setprecision(4)<<GetZ(aZPtr,theSelection,iX,iY)<<"\t";
}
- cout<<endl;
+ //cout<<endl;
}
- */
+
for(vtkIdType aPntId = 0; aPntId < aNumPts; aPntId++){
// perform conversion
vtkFloatingPointType aX[4] = {1.0, 1.0, 1.0, 1.0};
class vtkRenderer;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*! \class vtkAbstractPropPicker
* \brief For more information see <a href="http://www.vtk.org/">VTK documentation
*/
vtkRenderer*);
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
QVTK_RenderWindowInteractor
::Initialize(vtkGenericRenderWindowInteractor* theDevice)
{
- if(GetDevice())
- myDevice->SetRenderWindow(NULL);
+ if ( GetDevice() )
+ myDevice->SetRenderWindow( NULL );
myDevice = theDevice;
- if(theDevice)
- theDevice->SetRenderWindow(getRenderWindow());
+ if ( theDevice )
+ theDevice->SetRenderWindow( getRenderWindow() );
}
/*!
QVTK_RenderWindowInteractor
::~QVTK_RenderWindowInteractor()
{
- if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance())
- if(aSpaceMouse->isSpaceMouseOn())
- aSpaceMouse->close(x11Display());
+#ifndef WIN32
+ SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance();
+ if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() )
+ aSpaceMouse->close( x11Display() );
+#endif
}
{
// Final initialization just before the widget is displayed
GetDevice()->SetSize(width(),height());
- if(!GetDevice()->GetInitialized()){
+ if(!GetDevice()->GetInitialized() && GetDevice()->GetRenderWindow()){
GetDevice()->Initialize();
GetDevice()->ConfigureEvent();
}
{
QWidget::focusInEvent( event );
+#ifndef WIN32
// register set space mouse events receiver
- if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance()){
- if(!aSpaceMouse->isSpaceMouseOn()) {// initialize 3D space mouse driver
- aSpaceMouse->initialize(x11Display(),winId());
- }else{
- aSpaceMouse->setWindow(x11Display(),winId());
- }
+ SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance();
+
+ if ( aSpaceMouse )
+ {
+ if ( !aSpaceMouse->isSpaceMouseOn() )
+ // initialize 3D space mouse driver
+ aSpaceMouse->initialize( x11Display(), winId() );
+ else
+ aSpaceMouse->setWindow( x11Display(), winId() );
}
+#endif
}
/*!
{
QWidget::focusOutEvent( event );
+#ifndef WIN32
// unregister set space mouse events receiver
- if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance()){
- if(aSpaceMouse->isSpaceMouseOn())
- aSpaceMouse->setWindow(x11Display(),0);
- }
+ SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance();
+ if ( aSpaceMouse && aSpaceMouse->isSpaceMouseOn() )
+ aSpaceMouse->setWindow( x11Display(), 0 );
+#endif
+}
+
+
+#ifdef WIN32
+
+/*!
+ To handle native Win32 events (from such devices as SpaceMouse)
+*/
+bool QVTK_RenderWindowInteractor::winEvent( MSG* msg )
+{
+ // TODO: Implement event handling for SpaceMouse
+ return QWidget::winEvent( msg );
}
+#else
/*!
To handle native X11 events (from such devices as SpaceMouse)
::x11Event( XEvent *xEvent )
{
// handle 3d space mouse events
- if(SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance()){
- if(aSpaceMouse->isSpaceMouseOn() && xEvent->type == ClientMessage){
+ if ( SVTK_SpaceMouse* aSpaceMouse = SVTK_SpaceMouse::getInstance() )
+ {
+ if ( aSpaceMouse->isSpaceMouseOn() && xEvent->type == ClientMessage )
+ {
SVTK_SpaceMouse::MoveEvent anEvent;
int type = aSpaceMouse->translateEvent( x11Display(), xEvent, &anEvent, 1.0, 1.0 );
- switch( type ){
- case SVTK_SpaceMouse::SpaceMouseMove :
- GetDevice()->InvokeEvent(SVTK::SpaceMouseMoveEvent, anEvent.data );
- break;
- case SVTK_SpaceMouse::SpaceButtonPress :
- GetDevice()->InvokeEvent( SVTK::SpaceMouseButtonEvent, &anEvent.button );
- break;
- case SVTK_SpaceMouse::SpaceButtonRelease :
- break;
+ switch ( type )
+ {
+ case SVTK_SpaceMouse::SpaceMouseMove:
+ GetDevice()->InvokeEvent( SVTK::SpaceMouseMoveEvent, anEvent.data );
+ break;
+ case SVTK_SpaceMouse::SpaceButtonPress:
+ GetDevice()->InvokeEvent( SVTK::SpaceMouseButtonEvent, &anEvent.button );
+ break;
+ case SVTK_SpaceMouse::SpaceButtonRelease:
+ break;
}
return true; // stop handling the event
}
return QWidget::x11Event( xEvent );
}
+#endif
+
/*!
Constructor
*/
class SVTK_Selector;
class SVTK_Renderer;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*!
\class QVTK_RenderWindowInteractor
Implements Qt based vtkRenderWindowInteractor.
virtual void focusInEvent( QFocusEvent* );
virtual void focusOutEvent( QFocusEvent* );
- //! To handle native X11 events (from such devices as SpaceMouse)
+ //! To handle native events (from such devices as SpaceMouse)
+#ifdef WIN32
+ virtual bool winEvent( MSG* );
+#else
virtual bool x11Event( XEvent *e );
+#endif
vtkSmartPointer<vtkRenderWindow> myRenderWindow;
vtkSmartPointer<vtkGenericRenderWindowInteractor> myDevice;
TInteractorStyles myInteractorStyles;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
#endif
myDevice->Delete();
myTransform->Delete();
- SetSelectionTolerance();
-
myPointPicker->Delete();
myCellPicker->Delete();
myEventCallbackCommand->Delete();
myTrihedron->AddToRender(GetDevice());
- GetDevice()->AddProp(GetCubeAxes());
+ GetDevice()->AddViewProp(GetCubeAxes());
myBndBox[0] = myBndBox[2] = myBndBox[4] = 0;
myBndBox[1] = myBndBox[3] = myBndBox[5] = myTrihedron->GetSize();
{
myInteractor = theInteractor;
mySelector = theSelector;
+ SetSelectionTolerance();
}
/*!
void
SVTK_Renderer
::SetSelectionTolerance(const double& theTolNodes,
- const double& theTolCell)
+ const double& theTolCell,
+ const double& theTolObjects)
{
myPointPicker->SetTolerance( theTolNodes );
myCellPicker->SetTolerance( theTolCell );
myPointRectPicker->SetTolerance( theTolNodes );
myCellRectPicker->SetTolerance( theTolCell );
+
+ mySelector->SetTolerance( theTolObjects );
}
*/
void
SVTK_Renderer
-::SetTrihedronSize(int theSize, const bool theRelative)
+::SetTrihedronSize(vtkFloatingPointType theSize, const bool theRelative)
{
if(myTrihedronSize != theSize || myIsTrihedronRelative != theRelative){
myTrihedronSize = theSize;
/*!
\return size of the trihedron in percents from bounding box of the scene
*/
-int
+vtkFloatingPointType
SVTK_Renderer
::GetTrihedronSize() const
{
class VTKViewer_Actor;
class SVTK_Selector;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
/*!
\class SVTK_Renderer
//! Setup requested tolerance for the picking
void
SetSelectionTolerance(const double& theTolNodes = 0.025,
- const double& theTolCell = 0.001);
+ const double& theTolCell = 0.001,
+ const double& theTolObjects = 0.025);
//----------------------------------------------------------------------------
//! Adjust all intenal actors (trihedron and graduated rules) to the scene
//! Set size of the trihedron in percents from bounding box of the scene
void
- SetTrihedronSize(int theSize, const bool theRelative = true);
+ SetTrihedronSize(vtkFloatingPointType theSize, const bool theRelative = true);
//! Get size of the trihedron in percents from bounding box of the scene
- int
+ vtkFloatingPointType
GetTrihedronSize() const;
//! Shows if the size of the trihedron is relative
//----------------------------------------------------------------------------
vtkSmartPointer<SVTK_CubeAxesActor2D> myCubeAxes;
vtkSmartPointer<VTKViewer_Trihedron> myTrihedron;
- int myTrihedronSize;
+ vtkFloatingPointType myTrihedronSize;
bool myIsTrihedronRelative;
vtkFloatingPointType myBndBox[6];
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include <TColStd_IndexedMapOfInteger.hxx>
#include <vtkCallbackCommand.h>
+#include <vtkActorCollection.h>
+#include <vtkCellPicker.h>
+
+
+/*!
+ Find first SALOME_Actor from the end of actors collection
+*/
+inline
+SALOME_Actor*
+GetLastSALOMEActor(vtkActorCollection* theCollection)
+{
+ if (theCollection) {
+ for (int i = theCollection->GetNumberOfItems() - 1; i >= 0; i--) {
+ if (SALOME_Actor* anActor = dynamic_cast<SALOME_Actor*>(theCollection->GetItemAsObject(i)))
+ if (anActor->hasIO())
+ return anActor;
+ }
+ }
+ return NULL;
+}
+
/*!
\return new SVTK_Selector
Default constructor
*/
SVTK_SelectorDef
-::SVTK_SelectorDef()
+::SVTK_SelectorDef():
+ myPicker(vtkPicker::New()),
+ myCellPicker(vtkCellPicker::New())
{
mySelectionMode = ActorSelection;
+
+ myPicker->Delete();
+ myCellPicker->Delete();
}
/*!
TMapIOSubIndex::const_iterator anIter = myMapIOSubIndex.find(theIO);
if(anIter != myMapIOSubIndex.end()){
const TColStd_IndexedMapOfInteger& aMapIndex = anIter->second.myMap;
- return aMapIndex.Contains(theIndex);
+ return aMapIndex.Contains( theIndex ) == Standard_True;
}
return false;
}
-static
-bool
-removeIndex(TColStd_IndexedMapOfInteger& theMapIndex,
- const int theIndex)
+static bool removeIndex(TColStd_IndexedMapOfInteger& theMapIndex, const int theIndex)
{
int anId = theMapIndex.FindIndex(theIndex); // i==0 if Index is not in the MapIndex
if(anId){
theMapIndex = aNewMap;
}
}
- return anId;
+ return anId != 0;
}
/*!
}
TColStd_IndexedMapOfInteger& aMapIndex = anIter->second.myMap;
- bool anIsConatains = aMapIndex.Contains(theIndex);
- if(anIsConatains)
- removeIndex(aMapIndex,theIndex);
+ bool anIsConatains = aMapIndex.Contains( theIndex ) == Standard_True;
+ if ( anIsConatains )
+ removeIndex( aMapIndex, theIndex );
- if(!theIsModeShift)
+ if ( !theIsModeShift )
aMapIndex.Clear();
- if(!anIsConatains)
+ if ( !anIsConatains )
aMapIndex.Add( theIndex );
- if( aMapIndex.IsEmpty())
- myMapIOSubIndex.erase(theIO);
+ if ( aMapIndex.IsEmpty() )
+ myMapIOSubIndex.erase( theIO );
return false;
}
return Handle(VTKViewer_Filter)();
}
+SALOME_Actor*
+SVTK_SelectorDef
+::Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const
+{
+ myCellPicker->Pick(theEvent->myX,
+ theEvent->myY,
+ 0.0,
+ theRenderer);
+
+ vtkActorCollection* aListActors = myCellPicker->GetActors();
+ SALOME_Actor* anActor = GetLastSALOMEActor(aListActors);
+
+ if (! anActor) {
+ myPicker->Pick(theEvent->myX,
+ theEvent->myY,
+ 0.0,
+ theRenderer);
+ aListActors = myPicker->GetActors();
+ anActor = GetLastSALOMEActor(aListActors);
+ }
+
+ return anActor;
+}
+
+void
+SVTK_SelectorDef
+::SetTolerance(const double& theTolerance)
+{
+ myPicker->SetTolerance(theTolerance);
+ myCellPicker->SetTolerance(theTolerance);
+}
#ifndef SVTK_SELECTOR_H
#define SVTK_SELECTOR_H
+#include "SVTK.h"
#include "SVTK_Selection.h"
#include "SALOME_ListIO.hxx"
#include "VTKViewer_Filter.h"
class SALOME_Actor;
+class SVTK_SelectionEvent;
+
+class vtkRenderer;
+
+
//! Define an abstract interface for selection in SVTK package
/*!
The class implements selection functionality through storing corresponding
\note
Also, for each #SALOME_InteractiveObject it tries to keep corresponding refenrence to #SALOME_Actor
*/
-class SVTK_Selector: public vtkObject
+class SVTK_EXPORT SVTK_Selector: public vtkObject
{
public:
static SVTK_Selector* New();
virtual
void
EndPickCallback() = 0;
+
+ //----------------------------------------------------------------------------
+ virtual
+ SALOME_Actor*
+ Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const =0;
+
+ virtual
+ void
+ SetTolerance(const double& theTolerance) = 0;
};
class SVTK_Viewer;
class SVTK_ViewWindow;
+class vtkPicker;
+class vtkCellPicker;
+
class SVTK_SelectorDef: public SVTK_Selector
{
public:
void
EndPickCallback();
+ //----------------------------------------------------------------------------
+ virtual
+ SALOME_Actor*
+ Pick(const SVTK_SelectionEvent* theEvent, vtkRenderer* theRenderer) const;
+
+ virtual
+ void
+ SetTolerance(const double& theTolerance);
+
private:
int mySelectionMode;
typedef std::map<TFilterID,Handle(VTKViewer_Filter)> TFilters;
TFilters myFilters;
+
+ vtkSmartPointer<vtkPicker> myPicker;
+ vtkSmartPointer<vtkCellPicker> myCellPicker;
};
#endif
--- /dev/null
+// SALOME VTKViewer : build VTK viewer into Salome desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//
+//
+// File :
+// Author :
+// Module : SALOME
+// $Header$
+
+#include "SVTK_SetRotationPointDlg.h"
+#include "SVTK_MainWindow.h"
+#include "SVTK_RenderWindowInteractor.h"
+#include "SVTK_Event.h"
+#include "SVTK_InteractorStyle.h"
+
+#include "VTKViewer_Utilities.h"
+
+#include "QtxAction.h"
+
+#include <qlineedit.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qvalidator.h>
+#include <qbuttongroup.h>
+#include <qobjectlist.h>
+#include <qcheckbox.h>
+#include <qhbox.h>
+
+#include <vtkCallbackCommand.h>
+
+using namespace std;
+
+/*!
+ Constructor
+*/
+SVTK_SetRotationPointDlg
+::SVTK_SetRotationPointDlg(QtxAction* theAction,
+ SVTK_MainWindow* theParent,
+ const char* theName):
+ SVTK_DialogBase(theAction,
+ theParent,
+ theName),
+ myMainWindow(theParent),
+ myPriority(0.0),
+ myEventCallbackCommand(vtkCallbackCommand::New()),
+ myRWInteractor(theParent->GetInteractor())
+{
+ setCaption(tr("DLG_TITLE"));
+ setSizeGripEnabled(TRUE);
+
+ // Create layout for this dialog
+ QGridLayout* layoutDlg = new QGridLayout (this);
+ layoutDlg->setSpacing(6);
+ layoutDlg->setMargin(11);
+
+ // Create check box "Use Bounding Box Center"
+ QHBox* aCheckBox = new QHBox(this);
+
+ myIsBBCenter = new QCheckBox(tr("USE_BBCENTER"), aCheckBox);
+ myIsBBCenter->setChecked(true);
+ connect(myIsBBCenter, SIGNAL(stateChanged(int)), SLOT(onBBCenterChecked()));
+
+ // Create croup button with radio buttons
+ myGroupSelButton = new QButtonGroup(2,Qt::Vertical,"",this);
+ myGroupSelButton->setMargin(11);
+
+ // Create "Set to Origin" button
+ myToOrigin = new QPushButton(myGroupSelButton);
+ myToOrigin->setText(tr("LBL_TOORIGIN"));
+ connect(myToOrigin, SIGNAL(clicked()), this, SLOT(onToOrigin()));
+
+ // Create "Select Point from View" button
+ mySelectPoint = new QPushButton(myGroupSelButton);
+ mySelectPoint->setText(tr("LBL_SELECTPOINT"));
+ mySelectPoint->setToggleButton(true);
+ connect(mySelectPoint, SIGNAL(clicked()), this, SLOT(onSelectPoint()));
+
+ // Create croup box with grid layout
+ myGroupBoxCoord = new QGroupBox(this, "GroupBox");
+ QHBoxLayout* aHBoxLayout = new QHBoxLayout(myGroupBoxCoord);
+ aHBoxLayout->setMargin(11);
+ aHBoxLayout->setSpacing(6);
+
+ // "X" coordinate
+ QLabel* TextLabelX = new QLabel (tr("LBL_X"), myGroupBoxCoord, "TextLabelX");
+ TextLabelX->setFixedWidth(15);
+ myX = new QLineEdit(myGroupBoxCoord);
+ myX->setValidator(new QDoubleValidator(myX));
+ myX->setText(QString::number(0.0));
+ connect(myX, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged()));
+
+ // "Y" coordinate
+ QLabel* TextLabelY = new QLabel (tr("LBL_Y"), myGroupBoxCoord, "TextLabelY");
+ TextLabelY->setFixedWidth(15);
+ myY = new QLineEdit(myGroupBoxCoord);
+ myY->setValidator(new QDoubleValidator(myY));
+ myY->setText(QString::number(0.0));
+ connect(myY, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged()));
+
+ // "Z" coordinate
+ QLabel* TextLabelZ = new QLabel (tr("LBL_Z"), myGroupBoxCoord, "TextLabelZ");
+ TextLabelZ->setFixedWidth(15);
+ myZ = new QLineEdit(myGroupBoxCoord);
+ myZ->setValidator(new QDoubleValidator(myZ));
+ myZ->setText(QString::number(0.0));
+ connect(myZ, SIGNAL(textChanged(const QString&)), this, SLOT(onCoordChanged()));
+
+ // Layout widgets in the horizontal group box
+ aHBoxLayout->addWidget(TextLabelX);
+ aHBoxLayout->addWidget(myX);
+ aHBoxLayout->addWidget(TextLabelY);
+ aHBoxLayout->addWidget(myY);
+ aHBoxLayout->addWidget(TextLabelZ);
+ aHBoxLayout->addWidget(myZ);
+
+ // "Close" button
+ QGroupBox* aGroupBox = new QGroupBox(this);
+ QHBoxLayout* aHBoxLayout2 = new QHBoxLayout(aGroupBox);
+ aHBoxLayout2->setMargin(11);
+ aHBoxLayout2->setSpacing(6);
+
+ QPushButton* m_bClose = new QPushButton(tr("&Close"), aGroupBox, "m_bClose");
+ m_bClose->setAutoDefault(TRUE);
+ m_bClose->setFixedSize(m_bClose->sizeHint());
+ connect(m_bClose, SIGNAL(clicked()), this, SLOT(onClickClose()));
+
+ // Layout buttons
+ aHBoxLayout2->addWidget(m_bClose);
+
+ // Layout top level widgets
+ layoutDlg->addWidget(aCheckBox,0,0);
+ layoutDlg->addWidget(myGroupSelButton,1,0);
+ layoutDlg->addWidget(myGroupBoxCoord,2,0);
+ layoutDlg->addWidget(aGroupBox,3,0);
+
+ setEnabled(myGroupSelButton,!myIsBBCenter->isChecked());
+ setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked());
+
+ this->resize(400, this->sizeHint().height());
+
+ myEventCallbackCommand->Delete();
+ myEventCallbackCommand->SetClientData(this);
+ myEventCallbackCommand->SetCallback(SVTK_SetRotationPointDlg::ProcessEvents);
+ myIsObserverAdded = false;
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+SVTK_SetRotationPointDlg
+::~SVTK_SetRotationPointDlg()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+void
+SVTK_SetRotationPointDlg
+::addObserver()
+{
+ if ( !myIsObserverAdded ) {
+ vtkInteractorStyle* aIStyle = myRWInteractor->GetInteractorStyle();
+ aIStyle->AddObserver(SVTK::BBCenterChanged, myEventCallbackCommand.GetPointer(), myPriority);
+ aIStyle->AddObserver(SVTK::RotationPointChanged, myEventCallbackCommand.GetPointer(), myPriority);
+ myIsObserverAdded = true;
+ }
+}
+
+/*!
+ Return true if it is the first show for this dialog
+*/
+bool
+SVTK_SetRotationPointDlg
+::IsFirstShown()
+{
+ return myIsBBCenter->isChecked() && myX->text().toDouble() == 0.
+ && myY->text().toDouble() == 0. && myZ->text().toDouble() == 0.;
+}
+
+/*!
+ Processes events
+*/
+void
+SVTK_SetRotationPointDlg
+::ProcessEvents(vtkObject* vtkNotUsed(theObject),
+ unsigned long theEvent,
+ void* theClientData,
+ void* theCallData)
+{
+ SVTK_SetRotationPointDlg* self = reinterpret_cast<SVTK_SetRotationPointDlg*>(theClientData);
+ vtkFloatingPointType* aCoord = (vtkFloatingPointType*)theCallData;
+
+ switch ( theEvent ) {
+ case SVTK::BBCenterChanged:
+ if ( self->myIsBBCenter->isChecked()
+ ||
+ IsBBEmpty(self->myMainWindow->getRenderer()) )
+ {
+ if ( aCoord )
+ {
+ self->myX->setText( QString::number(aCoord[0]) );
+ self->myY->setText( QString::number(aCoord[1]) );
+ self->myZ->setText( QString::number(aCoord[2]) );
+ }
+ }
+ break;
+ case SVTK::RotationPointChanged:
+ if ( aCoord )
+ {
+ self->myX->setText( QString::number(aCoord[0]) );
+ self->myY->setText( QString::number(aCoord[1]) );
+ self->myZ->setText( QString::number(aCoord[2]) );
+ }
+ if ( !self->myIsBBCenter->isChecked() )
+ self->mySelectPoint->toggle();
+ }
+}
+
+void
+SVTK_SetRotationPointDlg
+::setEnabled(QGroupBox* theGrp, const bool theState)
+{
+ QObjectList aChildren(*theGrp->children());
+ QObject* anObj;
+ for(anObj = aChildren.first(); anObj !=0; anObj = aChildren.next())
+ {
+ if (anObj !=0 && anObj->inherits("QLineEdit"))
+ ((QLineEdit*)anObj)->setReadOnly(!theState);
+ if (anObj !=0 && anObj->inherits("QPushButton"))
+ ((QLineEdit*)anObj)->setEnabled(theState);
+ }
+
+}
+
+void
+SVTK_SetRotationPointDlg
+::onBBCenterChecked()
+{
+ setEnabled(myGroupSelButton,!myIsBBCenter->isChecked());
+ setEnabled(myGroupBoxCoord,!myIsBBCenter->isChecked());
+
+ if ( myIsBBCenter->isChecked() )
+ {
+ if ( mySelectPoint->state() == QButton::On )
+ mySelectPoint->toggle();
+ // activate mode : the rotation point is the center of the bounding box
+ // send the data to the SVTK_InteractorStyle: set the type of the rotation point
+ // calculate coordinates of the rotation point
+ myMainWindow->activateSetRotationGravity();
+ }
+ else
+ {
+ QString aX = myX->text();
+ myX->setText(QString::number(aX.toDouble()+1.));
+ myX->setText(aX);
+ }
+}
+
+void
+SVTK_SetRotationPointDlg
+::onToOrigin()
+{
+ if ( mySelectPoint->state() == QButton::On )
+ mySelectPoint->toggle();
+ myX->setText(QString::number(0.0));
+ myY->setText(QString::number(0.0));
+ myZ->setText(QString::number(0.0));
+}
+
+void
+SVTK_SetRotationPointDlg
+::onSelectPoint()
+{
+ if ( mySelectPoint->state() == QButton::On )
+ myMainWindow->activateStartPointSelection();
+ else
+ mySelectPoint->toggle();
+}
+
+void
+SVTK_SetRotationPointDlg
+::onCoordChanged()
+{
+ if ( !myIsBBCenter->isChecked() ) {
+ if ( mySelectPoint->state() == QButton::On
+ &&
+ ( myX->hasFocus() || myY->hasFocus() || myZ->hasFocus() ) )
+ mySelectPoint->toggle();
+ vtkFloatingPointType aCenter[3] = {myX->text().toDouble(),
+ myY->text().toDouble(),
+ myZ->text().toDouble()};
+ myMainWindow->activateSetRotationSelected((void*)aCenter);
+ }
+ else
+ myMainWindow->activateSetRotationGravity();
+}
+
+void
+SVTK_SetRotationPointDlg
+::onClickClose()
+{
+ reject();
+}
+
+
--- /dev/null
+// SALOME VTKViewer : build VTK viewer into Salome desktop
+//
+// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//
+//
+// File :
+// Author :
+// Module : SALOME
+// $Header$
+
+#ifndef SVTK_SETROTATIONPOINTDLG_H
+#define SVTK_SETROTATIONPOINTDLG_H
+
+#include "SVTK.h"
+
+#include "SVTK_DialogBase.h"
+
+#include <vtkSmartPointer.h>
+
+class SVTK_MainWindow;
+class SVTK_RenderWindowInteractor;
+
+class QtxAction;
+
+class QLineEdit;
+class QPushButton;
+class QGroupBox;
+class QButtonGroup;
+class QCheckBox;
+
+class vtkCallbackCommand;
+class vtkObject;
+
+class SVTK_EXPORT SVTK_SetRotationPointDlg : public SVTK_DialogBase
+{
+ Q_OBJECT;
+
+public:
+ SVTK_SetRotationPointDlg(QtxAction* theAction,
+ SVTK_MainWindow* theParent,
+ const char* theName);
+
+ ~SVTK_SetRotationPointDlg();
+
+ void addObserver();
+ bool IsFirstShown();
+
+protected:
+ SVTK_MainWindow *myMainWindow;
+ SVTK_RenderWindowInteractor* myRWInteractor;
+ bool myIsObserverAdded;
+
+ QCheckBox* myIsBBCenter;
+
+ QButtonGroup* myGroupSelButton;
+ QPushButton* myToOrigin;
+ QPushButton* mySelectPoint;
+
+ QGroupBox* myGroupBoxCoord;
+ QLineEdit* myX;
+ QLineEdit* myY;
+ QLineEdit* myZ;
+
+ void setEnabled(QGroupBox* theGrp, const bool theState);
+
+ //----------------------------------------------------------------------------
+ // Priority at which events are processed
+ vtkFloatingPointType myPriority;
+
+ // Used to process events
+ vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
+
+ // Description:
+ // Main process event method
+ static void ProcessEvents(vtkObject* object,
+ unsigned long event,
+ void* clientdata,
+ void* calldata);
+
+protected slots:
+ void onBBCenterChecked();
+
+ void onToOrigin();
+ void onSelectPoint();
+
+ void onCoordChanged();
+
+ void onClickClose();
+
+};
+
+#endif // SVTK_SETROTATIONPOINTDLG_H
#include <math.h>
#include <stdio.h>
+#ifndef WIN32
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
+#endif
#include "SVTK_SpaceMouse.h"
*/
SVTK_SpaceMouse::SVTK_SpaceMouse()
{
+#ifndef WIN32
win = InputFocus;
+#endif
spaceMouseOn = 0;
}
+#ifndef WIN32
+
/*!
Initialization
*/
return (!display);
}
+#endif
#ifndef SVTK_SpaceMouse_h
#define SVTK_SpaceMouse_h
+#ifndef WIN32
extern "C"
{
#include <X11/X.h>
#include <X11/Xlib.h>
}
+#endif
class SVTK_SpaceMouse
{
bool isSpaceMouseOn() const { return spaceMouseOn != 0; }
+#ifndef WIN32
int initialize ( Display*, Window );
int setWindow ( Display*, Window );
int translateEvent ( Display*, XEvent*, MoveEvent*, double, double );
int close ( Display* );
+#endif
private:
SVTK_SpaceMouse();
static SVTK_SpaceMouse* myInstance;
+#ifndef WIN32
Atom XMotionEvent;
Atom XButtonPressEvent;
Atom XButtonReleaseEvent;
Atom XCommandEvent;
Window win;
+#endif
int spaceMouseOn;
};
int aCount = 0;
while(vtkActor* aProp = aCollection->GetNextActor()) {
if(aProp->GetVisibility())
- if(SALOME_Actor* anActor = SALOME_Actor::SafeDownCast(aProp))
+ if(SALOME_Actor* anActor = SALOME_Actor::SafeDownCast(aProp)) {
if(!anActor->IsInfinitive())
- aCount++;
+ aCount++;
+ }
+ else if ( !OwnActor( anActor ) ) {
+ aCount++;
+ }
}
return aCount;
}
void
SVTK_View
::SetSelectionTolerance(const double& theTolNodes,
- const double& theTolCell)
+ const double& theTolCell,
+ const double& theTolObjects)
{
- GetRenderer()->SetSelectionTolerance(theTolNodes,theTolCell);
+ GetRenderer()->SetSelectionTolerance(theTolNodes,theTolCell, theTolObjects);
}
/*!
//! Redirect the request to #SVTK_Renderer::SetPreselectionProp
void
SetSelectionTolerance(const double& theTolNodes = 0.025,
- const double& theTolCell = 0.001);
+ const double& theTolCell = 0.001,
+ const double& theTolObjects = 0.025);
protected:
int myDisplayMode;
#include "SVTK_ViewManager.h"
#include "SVTK_ViewModel.h"
-int SVTK_ViewManager::_SVTKViewMgr_Id = 0;
+#include <VTKViewer_ViewManager.h>
/*!
Constructor
*/
-SVTK_ViewManager::SVTK_ViewManager( SUIT_Study* study,
- SUIT_Desktop* theDesktop )
-: SUIT_ViewManager( study, theDesktop )
+SVTK_ViewManager::SVTK_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop )
+: SUIT_ViewManager( study, theDesktop, new SVTK_Viewer() )
{
- myId = ++_SVTKViewMgr_Id;
- setViewModel( new SVTK_Viewer() );
+ setTitle( VTKViewer_ViewManager::tr( "VTK_VIEW_TITLE" ) );
}
/*!
{
return myDesktop;
}
-
-/*!
- Sets default name of view
-*/
-void SVTK_ViewManager::setViewName(SUIT_ViewWindow* theView)
-{
- int aPos = myViews.find(theView);
- theView->setCaption( tr( "VTK_VIEW_TITLE" ).arg( myId ).arg( aPos + 1 ) );
-}
virtual ~SVTK_ViewManager();
SUIT_Desktop* getDesktop();
-
-protected:
- void setViewName( SUIT_ViewWindow* theView );
-
-private:
- int myId;
- static int _SVTKViewMgr_Id;
};
#endif
/*!
\return trihedron size
*/
-int SVTK_Viewer::trihedronSize() const
+vtkFloatingPointType SVTK_Viewer::trihedronSize() const
{
return myTrihedronSize;
}
\param theSize - new size
\param theRelative - new relativeness
*/
-void SVTK_Viewer::setTrihedronSize( const int theSize, const bool theRelative )
+void SVTK_Viewer::setTrihedronSize( const vtkFloatingPointType theSize, const bool theRelative )
{
myTrihedronSize = theSize;
myTrihedronRelative = theRelative;
if (SUIT_ViewManager* aViewManager = getViewManager()) {
QPtrVector<SUIT_ViewWindow> aViews = aViewManager->getViews();
- for (int i = 0; i < aViews.count(); i++) {
- if (TViewWindow* aView = dynamic_cast<TViewWindow*>(aViews.at(i))) {
- aView->SetTrihedronSize(theSize, theRelative);
- }
+ for ( uint i = 0; i < aViews.count(); i++ )
+ {
+ if ( TViewWindow* aView = dynamic_cast<TViewWindow*>(aViews.at( i )) )
+ aView->SetTrihedronSize( theSize, theRelative );
}
}
}
if ( !aView->getMainWindow()->getToolBar()->isVisible() ){
thePopup->insertItem( VTKViewer_Viewer::tr( "MEN_SHOW_TOOLBAR" ), this, SLOT( onShowToolbar() ) );
}
+ aView->RefreshDumpImage();
}
}
void setBackgroundColor( const QColor& );
//! Get size of trihedron of the viewer (see #SVTK_Renderer::SetTrihedronSize)
- int trihedronSize() const;
+ vtkFloatingPointType trihedronSize() const;
//! Shows if the size of trihedron relative (see #SVTK_Renderer::SetTrihedronSize)
bool trihedronRelative() const;
//! Set size of trihedron of the viewer (see #SVTK_Renderer::SetTrihedronSize)
- void setTrihedronSize( const int, const bool = true );
+ void setTrihedronSize( const vtkFloatingPointType, const bool = true );
public:
void enableSelection(bool isEnabled);
private:
QColor myBgColor;
- int myTrihedronSize;
+ vtkFloatingPointType myTrihedronSize;
bool myTrihedronRelative;
bool mySelectionEnabled;
bool myMultiSelectionEnabled;
#include <vtkPointPicker.h>
#include <vtkCellPicker.h>
#include <vtkAxisActor2D.h>
+#include <vtkGL2PSExporter.h>
#include "QtxAction.h"
#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(SUIT_Desktop* theDesktop):
SUIT_ViewWindow(theDesktop),
myMainWindow(NULL),
- myView(NULL)
+ myView(NULL),
+ myDumpImage(QImage())
{}
/*!
::setBackgroundColor( const QColor& color )
{
myMainWindow->SetBackgroundColor( color );
+ SUIT_ViewWindow::setBackgroundColor( color );
}
/*!
/*!
\return trihedron size
*/
-int
+vtkFloatingPointType
SVTK_ViewWindow
::GetTrihedronSize() const
{
*/
void
SVTK_ViewWindow
-::SetTrihedronSize(const int theSize, const bool theRelative)
+::SetTrihedronSize(const vtkFloatingPointType theSize, const bool theRelative)
{
myMainWindow->SetTrihedronSize(theSize, theRelative);
}
QImage
SVTK_ViewWindow
::dumpView()
+{
+ if ( myMainWindow->getToolBar()->hasMouse() || myDumpImage.isNull() )
+ return myMainWindow->dumpView();
+
+ return myDumpImage;
+}
+
+QString SVTK_ViewWindow::filter() const
{
- return myMainWindow->dumpView();
+ return tr( "SVTK_IMAGE_FILES" );
+}
+
+bool SVTK_ViewWindow::dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format )
+{
+ if ( format != "PS" && format != "EPS" && format != "PDF" )
+ return SUIT_ViewWindow::dumpViewToFormat( img, fileName, format );
+
+ QApplication::setOverrideCursor( Qt::waitCursor );
+
+ vtkGL2PSExporter *anExporter = vtkGL2PSExporter::New();
+ anExporter->SetRenderWindow(getRenderWindow());
+
+ if ( format == "PS" ) {
+ anExporter->SetFileFormatToPS();
+ anExporter->CompressOff();
+ }
+
+ if ( format == "EPS" ) {
+ anExporter->SetFileFormatToEPS();
+ anExporter->CompressOff();
+ }
+
+ if ( format == "PDF" ) {
+ anExporter->SetFileFormatToPDF();
+ }
+
+ QString aFilePrefix(fileName);
+ QString anExtension(SUIT_Tools::extension(fileName));
+ aFilePrefix.truncate(aFilePrefix.length() - 1 - anExtension.length());
+ anExporter->SetFilePrefix(aFilePrefix.latin1());
+ anExporter->Write();
+ anExporter->Delete();
+
+ QApplication::restoreOverrideCursor();
+ return true;
+}
+
+/*!
+ \refresh QImage, containing all scene rendering in window
+*/
+void SVTK_ViewWindow::RefreshDumpImage()
+{
+ myDumpImage = myMainWindow->dumpView();
}
/*!
void
SVTK_ViewWindow
::SetSelectionTolerance(const double& theTolNodes,
- const double& theTolItems)
+ const double& theTolItems,
+ const double& theTolObjects)
{
- myView->SetSelectionTolerance(theTolNodes,theTolItems);
-}
-
-int convertAction( const int accelAction )
-{
- switch ( accelAction ) {
- case SUIT_Accel::PanLeft : return SVTK::PanLeftEvent;
- case SUIT_Accel::PanRight : return SVTK::PanRightEvent;
- case SUIT_Accel::PanUp : return SVTK::PanUpEvent;
- case SUIT_Accel::PanDown : return SVTK::PanDownEvent;
- case SUIT_Accel::ZoomIn : return SVTK::ZoomInEvent;
- case SUIT_Accel::ZoomOut : return SVTK::ZoomOutEvent;
- case SUIT_Accel::RotateLeft : return SVTK::RotateLeftEvent;
- case SUIT_Accel::RotateRight : return SVTK::RotateRightEvent;
- case SUIT_Accel::RotateUp : return SVTK::RotateUpEvent;
- case SUIT_Accel::RotateDown : return SVTK::RotateDownEvent;
- }
- return accelAction;
+ myView->SetSelectionTolerance(theTolNodes,theTolItems, theTolObjects);
}
/*!
if ( accelAction == SUIT_Accel::ZoomFit )
onFitAll();
else {
- int anEvent = convertAction( accelAction );
+ int anEvent = SVTK::convertAction( accelAction );
myMainWindow->InvokeEvent( anEvent, 0 );
}
return true;
#include "SUIT_ViewWindow.h"
#include "SALOME_InteractiveObject.hxx"
+#include <qimage.h>
+
class SUIT_Desktop;
class VTKViewer_Actor;
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
{
virtual
~SVTK_ViewWindow();
+ virtual QImage dumpView();
+
//! To initialize #SVTK_ViewWindow instance
virtual
void
GetCubeAxes();
//! Redirect the request to #SVTK_Renderer::GetTrihedronSize
- int
+ vtkFloatingPointType
GetTrihedronSize() const;
//! Redirect the request to #SVTK_Renderer::SetTrihedronSize
virtual
void
- SetTrihedronSize( const int, const bool = true );
+ SetTrihedronSize( const vtkFloatingPointType, const bool = true );
//! Redirect the request to #SVTK_Renderer::SetSelectionProp
virtual
virtual
void
SetSelectionTolerance(const double& theTolNodes = 0.025,
- const double& theTolCell = 0.001);
+ const double& theTolCell = 0.001,
+ const double& theTolObjects = 0.025);
//! Methods to save/restore visual parameters of a view (pan, zoom, etc.)
virtual
virtual
bool
eventFilter( QObject*, QEvent* );
+
+ virtual
+ void RefreshDumpImage();
public slots:
virtual
void
doSetVisualParameters( const QString& );
- QImage dumpView();
+ virtual QString filter() const;
+ virtual bool dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format );
+
virtual bool action( const int );
-
+
SVTK_View* myView;
SVTK_MainWindow* myMainWindow;
SVTK_ViewModelBase* myModel;
QString myVisualParams; // used for delayed setting of view parameters
+
+private:
+ QImage myDumpImage;
};
#ifdef WIN32
msgid "MNU_ROTATE_VIEW"
msgstr "Rotation"
+msgid "DSC_CHANGINGROTATIONPOINT_VIEW"
+msgstr "Change the point, around which the rotation is performed"
+
+msgid "MNU_CHANGINGROTATIONPOINT_VIEW"
+msgstr "Change Rotation Point"
+
msgid "DSC_DUMP_VIEW"
msgstr "Saves the active view in the image file"
msgid "SVTK_MainWindow::DSC_SVTK_SCALING"
msgstr "Scaling"
+msgid "SVTK_SetRotationPointDlg::DLG_TITLE"
+msgstr "Set Rotation Point"
+
+msgid "SVTK_SetRotationPointDlg::USE_BBCENTER"
+msgstr "Use Bounding Box Center"
+
+msgid "SVTK_SetRotationPointDlg::LBL_TOORIGIN"
+msgstr "Set to Origin"
+
+msgid "SVTK_SetRotationPointDlg::LBL_SELECTPOINT"
+msgstr "Select Point from View"
+
+msgid "SVTK_SetRotationPointDlg::LBL_CENTER_OF_BOUNDING_BOX"
+msgstr "Center of bounding box"
+
+msgid "SVTK_SetRotationPointDlg::LBL_ORIGIN"
+msgstr "Origin of the coordinate system"
+
+msgid "SVTK_SetRotationPointDlg::LBL_SELECTED_POINT"
+msgstr "Selected point"
+
+msgid "SVTK_SetRotationPointDlg::LBL_X"
+msgstr "X :"
+
+msgid "SVTK_SetRotationPointDlg::LBL_Y"
+msgstr "Y :"
+
+msgid "SVTK_SetRotationPointDlg::LBL_Z"
+msgstr "Z :"
+
+msgid "SVTK_SetRotationPointDlg::RBUTTONGROUP_TITLE"
+msgstr "The rotation point type"
+
msgid "SVTK_FontWidget::ARIAL"
msgstr "Arial"
msgid "SVTK_UpdateRateDlg::NUMBER_CELLS"
msgstr "Number of Cells, -"
+msgid "SVTK_IMAGE_FILES"
+msgstr "Images Files (*.bmp *.png *.jpg *.jpeg *.pdf *.ps *.eps)""
\ No newline at end of file
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : SalomeApp
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+if CPPUNIT_IS_OK
+if GUI_ENABLE_CORBA
+ SUBDIRS=Test
+endif
+endif
+
+lib_LTLIBRARIES= libSalomeApp.la
+
+salomeinclude_HEADERS= \
+ SalomeApp.h \
+ SalomeApp_Application.h \
+ SalomeApp_DataModel.h \
+ SalomeApp_DataObject.h \
+ SalomeApp_Module.h \
+ SalomeApp_Study.h \
+ SalomeApp_ExceptionHandler.h \
+ SalomeApp_EventFilter.h \
+ SalomeApp_Tools.h \
+ SalomeApp_ImportOperation.h \
+ SalomeApp_Filter.h \
+ SalomeApp_TypeFilter.h \
+ SalomeApp_StudyPropertiesDlg.h \
+ SalomeApp_CheckFileDlg.h \
+ SalomeApp_VisualState.h \
+ SalomeApp_ExitDlg.h
+
+dist_libSalomeApp_la_SOURCES= \
+ SalomeApp_Module.cxx \
+ SalomeApp_Application.cxx \
+ SalomeApp_DataModel.cxx \
+ SalomeApp_DataObject.cxx \
+ SalomeApp_Study.cxx \
+ SalomeApp_ExceptionHandler.cxx \
+ SalomeApp_EventFilter.cxx \
+ SalomeApp_PyInterp.cxx \
+ SalomeApp_Tools.cxx \
+ SalomeApp_ImportOperation.cxx \
+ SalomeApp_Filter.cxx \
+ SalomeApp_TypeFilter.cxx \
+ SalomeApp_StudyPropertiesDlg.cxx \
+ SalomeApp_ListView.cxx \
+ SalomeApp_CheckFileDlg.cxx \
+ SalomeApp_VisualState.cxx \
+ SalomeApp_ExitDlg.cxx
+
+MOC_FILES= \
+ SalomeApp_Application_moc.cxx \
+ SalomeApp_DataModel_moc.cxx \
+ SalomeApp_Module_moc.cxx \
+ SalomeApp_Study_moc.cxx \
+ SalomeApp_StudyPropertiesDlg_moc.cxx \
+ SalomeApp_ListView_moc.cxx \
+ SalomeApp_CheckFileDlg_moc.cxx \
+ SalomeApp_ExitDlg_moc.cxx
+
+nodist_libSalomeApp_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA= \
+ resources/SalomeApp.ini \
+ resources/SalomeApp.xml
+
+nodist_salomeres_DATA= \
+ SalomeApp_images.qm \
+ SalomeApp_msg_en.qm
+
+libSalomeApp_la_CPPFLAGS=$(PYTHON_INCLUDES) $(QT_INCLUDES) $(QWT_INCLUDES) \
+ $(CAS_CPPFLAGS) $(VTK_INCLUDES) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ \
+ -I$(srcdir)/../LightApp -I$(srcdir)/../CAM -I$(srcdir)/../Qtx \
+ -I$(srcdir)/../SUIT -I$(srcdir)/../OBJECT -I$(srcdir)/../SVTK \
+ -I$(srcdir)/../STD -I$(srcdir)/../VTKViewer -I$(srcdir)/../ObjBrowser \
+ -I$(srcdir)/../PythonConsole -I$(srcdir)/../TOOLSGUI \
+ -I$(srcdir)/../PyInterp -I$(srcdir)/../Session -I$(top_builddir)/idl \
+ -I$(srcdir)/../Event \
+ -I$(srcdir)/../CASCatch \
+ -I$(top_builddir)/salome_adm/unix @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ @LIBXML_INCLUDES@
+libSalomeApp_la_LDFLAGS=$(PYTHON_LIBS) $(QT_MT_LIBS)
+libSalomeApp_la_LIBADD= $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSalomeDSClient \
+ ../SUIT/libsuit.la ../STD/libstd.la ../CAM/libCAM.la ../ObjBrowser/libObjBrowser.la \
+ ../Prs/libSalomePrs.la ../SPlot2d/libSPlot2d.la ../GLViewer/libGLViewer.la \
+ ../OCCViewer/libOCCViewer.la ../VTKViewer/libVTKViewer.la ../OBJECT/libSalomeObject.la \
+ ../SVTK/libSVTK.la ../SOCC/libSOCC.la ../PyInterp/libPyInterp.la \
+ ../PythonConsole/libPythonConsole.la ../LogWindow/libLogWindow.la \
+ ../LightApp/libLightApp.la ../TOOLSGUI/libToolsGUI.la ../CASCatch/libCASCatch.la $(CAS_KERNEL)
+
+EXTRA_DIST+=SalomeApp_PyInterp.h
+++ /dev/null
-# 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@
-
-
-
-
-
#include "SalomeApp_DataObject.h"
#include "SalomeApp_EventFilter.h"
#include "SalomeApp_VisualState.h"
+#include "SalomeApp_ExitDlg.h"
#include "SalomeApp_StudyPropertiesDlg.h"
#include <SUIT_Tools.h>
#include <SUIT_Session.h>
+#include <SUIT_MsgDlg.h>
#include <QtxMRUAction.h>
#include <SALOME_ModuleCatalog_impl.hxx>
#include <SALOME_LifeCycleCORBA.hxx>
-#include <qmap.h>
#include <qaction.h>
#include <qcombobox.h>
#include <qlistbox.h>
#include <qcheckbox.h>
#include <qpushbutton.h>
#include <qlabel.h>
+#include <qmessagebox.h>
#include "SALOMEDSClient_ClientFactory.hxx"
#include "SALOMEDSClient_IParameters.hxx"
#include <SALOMEDSClient_ClientFactory.hxx>
+#include <vector>
+/*!Internal class that updates object browser item properties */
+class SalomeApp_Updater : public OB_Updater
+{
+public:
+ SalomeApp_Updater() : OB_Updater(){};
+ virtual ~SalomeApp_Updater(){};
+ virtual void update( SUIT_DataObject* theObj, OB_ListItem* theItem );
+};
+
+void SalomeApp_Updater::update( SUIT_DataObject* theObj, OB_ListItem* theItem )
+{
+ if( !theObj || !theItem )
+ return;
+
+ SalomeApp_DataObject* SAObj = dynamic_cast<SalomeApp_DataObject*>( theObj );
+ if( !SAObj )
+ return;
+
+ _PTR(SObject) SObj = SAObj->object();
+ if( !SObj )
+ return;
+ _PTR( GenericAttribute ) anAttr;
+
+ // Selectable
+ if ( SObj->FindAttribute( anAttr, "AttributeSelectable" ) )
+ {
+ _PTR(AttributeSelectable) aAttrSel = anAttr;
+ theItem->setSelectable( aAttrSel->IsSelectable() );
+ }
+ // Expandable
+ if ( SObj->FindAttribute(anAttr, "AttributeExpandable") )
+ {
+ _PTR(AttributeExpandable) aAttrExpand = anAttr;
+ theItem->setExpandable( aAttrExpand->IsExpandable() );
+ }
+ // Opened
+ //this attribute is not supported in the version of SALOME 3.x
+ //if ( SObj->FindAttribute(anAttr, "AttributeOpened") )
+ //{
+ // _PTR(AttributeOpened) aAttrOpen = anAttr;
+ // theItem->setOpen( aAttrOpen->IsOpened() );
+ //}
+}
+
/*!Create new instance of SalomeApp_Application.*/
extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication()
{
SalomeApp_Application::SalomeApp_Application()
: LightApp_Application()
{
+ connect( desktop(), SIGNAL( message( const QString& ) ),
+ this, SLOT( onDesktopMessage( const QString& ) ) );
}
/*!Destructor.
LightApp_Application::start();
SalomeApp_EventFilter::Init();
+
+ static bool isFirst = true;
+ if ( isFirst ) {
+ isFirst = false;
+
+ QString hdffile;
+ QStringList pyfiles;
+
+ for (int i = 1; i < qApp->argc(); i++) {
+ QRegExp rxs ("--study-hdf=(.+)");
+ if ( rxs.search( QString(qApp->argv()[i]) ) >= 0 && rxs.capturedTexts().count() > 1 ) {
+ QString file = rxs.capturedTexts()[1];
+ QFileInfo fi ( file );
+ QString extension = fi.extension( false ).lower();
+ if ( extension == "hdf" && fi.exists() )
+ hdffile = fi.absFilePath();
+ }
+ else {
+ QRegExp rxp ("--pyscript=(.+)");
+ if ( rxp.search( QString(qApp->argv()[i]) ) >= 0 && rxp.capturedTexts().count() > 1 ) {
+ QStringList files = QStringList::split(",",rxp.capturedTexts()[1],false);
+ pyfiles += files;
+ }
+ }
+ }
+
+ if ( !hdffile.isEmpty() ) // open hdf file given as parameter
+ onOpenDoc( hdffile );
+ else if ( pyfiles.count() > 0 ) // create new study
+ onNewDoc();
+
+ // import/execute python scripts
+ if ( pyfiles.count() > 0 && activeStudy() ) {
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( activeStudy() );
+ if ( appStudy ) {
+ _PTR(Study) aStudy = appStudy->studyDS();
+ if ( !aStudy->GetProperties()->IsLocked() ) {
+ for (uint j = 0; j < pyfiles.count(); j++ ) {
+ QFileInfo fi ( pyfiles[j] );
+ PythonConsole* pyConsole = pythonConsole();
+ if ( pyConsole ) {
+ QString extension = fi.extension( false ).lower();
+ if ( fi.exists() ) {
+ // execute python script
+ QString command = QString( "execfile(\"%1\")" ).arg( fi.absFilePath() );
+ pyConsole->exec( command );
+ }
+ else {
+ // import python module
+ QString command = QString( "import %1" ).arg( pyfiles[j] );
+ if ( extension == "py" )
+ command = QString( "import %1" ).arg( fi.baseName( true ) );
+ pyConsole->exec( command );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
/*!Create actions:*/
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 );
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 ) )
{
}
}
+/*!
+ \brief Close application.
+*/
+void SalomeApp_Application::onExit()
+{
+ bool killServers = false;
+ bool result = true;
+
+ if ( exitConfirmation() ) {
+ SalomeApp_ExitDlg dlg( desktop() );
+ result = dlg.exec() == QDialog::Accepted;
+ killServers = dlg.isServersShutdown();
+ }
+
+ if ( result )
+ SUIT_Session::session()->closeSession( SUIT_Session::ASK, killServers );
+}
/*!SLOT. Load document with \a aName.*/
bool SalomeApp_Application::onLoadDoc( const QString& aName )
}
}
+/*! Check if the study is locked */
+void SalomeApp_Application::onCloseDoc( bool ask )
+{
+ SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(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()
{
fd->setFilters( aFilters );
fd->myPublishChk->setChecked( true );
fd->mySaveGUIChk->setChecked( true );
- fd->exec();
- QString aFileName = fd->selectedFile();
+ QString aFileName;
+ while (1) {
+ fd->exec();
+ fd->raise();
+ aFileName = fd->selectedFile();
+ if (!aFileName.isEmpty()) {
+ if ( (aFileName.find('-', 0) == -1) && (aFileName.find('!', 0) == -1) && (aFileName.find('?', 0) == -1) &&
+ (aFileName.find('#', 0) == -1) && (aFileName.find('*', 0) == -1) && (aFileName.find('&', 0) == -1)) {
+ break;
+ }
+ else {
+ SUIT_MessageBox::warn1 ( desktop(),
+ QObject::tr("WRN_WARNING"),
+ tr("WRN_FILE_NAME_BAD"),
+ QObject::tr("BUT_OK") );
+ }
+ }
+ else {
+ break;
+ }
+ }
bool toPublish = fd->myPublishChk->isChecked();
bool toSaveGUI = fd->mySaveGUIChk->isChecked();
delete fd;
if ( flag == WT_ObjectBrowser )
{
OB_Browser* ob = (OB_Browser*)wid;
+ ob->setUpdater( new SalomeApp_Updater() );
connect( ob->listView(), SIGNAL( doubleClicked( QListViewItem* ) ), this, SLOT( onDblClick( QListViewItem* ) ) );
bool autoSize = resMgr->booleanValue( "ObjectBrowser", "auto_size", false ),
autoSizeFirst = resMgr->booleanValue( "ObjectBrowser", "auto_size_first", true );
desktop()->setCaption( aTitle );
}
+/*!
+ \brief Show dialog box to propose possible user actions when study is closed.
+ \param docName study name
+ \return chosen action ID
+ \sa closeAction()
+*/
+int SalomeApp_Application::closeChoice( const QString& docName )
+{
+ SUIT_MsgDlg dlg( desktop(), tr( "APPCLOSE_CAPTION" ), tr ( "APPCLOSE_DESCRIPTION" ),
+ QMessageBox::standardIcon( QMessageBox::Information ) );
+ dlg.addButton( tr ( "APPCLOSE_SAVE" ), CloseSave );
+ dlg.addButton( tr ( "APPCLOSE_CLOSE" ), CloseDiscard );
+ dlg.addButton( tr ( "APPCLOSE_UNLOAD" ), CloseUnload );
+
+ return dlg.exec();
+}
+
+/*!
+ \brief Process user actions selected from the dialog box when study is closed.
+ \param choice chosen action ID
+ \param closePermanently "forced study closing" flag
+ \return operation status
+ \sa closeChoice()
+*/
+bool SalomeApp_Application::closeAction( const int choice, bool& closePermanently )
+{
+ bool res = true;
+ switch( choice )
+ {
+ case CloseSave:
+ if ( activeStudy()->isSaved() )
+ onSaveDoc();
+ else if ( !onSaveAsDoc() )
+ res = false;
+ break;
+ case CloseDiscard:
+ break;
+ case CloseUnload:
+ closePermanently = false;
+ break;
+ case CloseCancel:
+ default:
+ res = false;
+ }
+ return res;
+}
+
+/*!
+ \brief Get module activation actions
+ \return map <action_id><action_name> where
+ - action_id is unique non-zero action identifier
+ - action_name is action title
+ \sa moduleActionSelected()
+*/
+QMap<int, QString> SalomeApp_Application::activateModuleActions() const
+{
+ QMap<int, QString> opmap = LightApp_Application::activateModuleActions();
+ opmap.insert( LoadStudyId, tr( "ACTIVATE_MODULE_OP_LOAD" ) );
+ return opmap;
+}
+
+/*!
+ \brief Process module activation action.
+ \param id action identifier
+ \sa activateModuleActions()
+*/
+void SalomeApp_Application::moduleActionSelected( const int id )
+{
+ if ( id == LoadStudyId )
+ onLoadDoc();
+ else
+ LightApp_Application::moduleActionSelected( id );
+}
+
/*!Gets CORBA::ORB_var*/
CORBA::ORB_var SalomeApp_Application::orb()
{
QString anIOR( "" );
CORBA::Object_ptr anEngine = namingService()->Resolve( "/SalomeAppEngine" );
if ( !CORBA::is_nil( anEngine ) )
- anIOR = orb()->object_to_string( anEngine );
+ {
+ CORBA::String_var objStr = orb()->object_to_string( anEngine );
+ anIOR = QString( objStr.in() );
+ }
return anIOR;
}
CAM_Module* currentModule = activeModule();
if (currentModule && currentModule->moduleName() == aModuleTitle)
return;
- thePopup->insertItem( tr( "MEN_OPENWITH" ), this, SLOT( onOpenWith() ) );
+ if ( !aModuleTitle.isEmpty() )
+ thePopup->insertItem( tr( "MEN_OPENWITH" ).arg( aModuleTitle ), this, SLOT( onOpenWith() ) );
}
/*!Update obect browser:
delete it.data();
}
+/*! Check data object */
+bool SalomeApp_Application::checkDataObject(LightApp_DataObject* theObj)
+{
+ if (theObj)
+ return true;
+
+ return false;
+}
+
+/*! Process standard messages from desktop */
+void SalomeApp_Application::onDesktopMessage( const QString& message )
+{
+ // update object browser
+ if ( message.lower() == "updateobjectbrowser" ||
+ message.lower() == "updateobjbrowser" )
+ updateObjectBrowser();
+}
+
#include "SalomeApp.h"
#include <LightApp_Application.h>
+#include <qmap.h>
+
#include <CORBA.h>
#include <SALOMEconfig.h>
public:
enum { MenuToolsId = 5 };
enum { DumpStudyId = LightApp_Application::UserID, LoadScriptId, PropertiesId,
- CatalogGenId, RegDisplayId, SaveGUIStateId, UserID };
+ CatalogGenId, RegDisplayId, SaveGUIStateId, FileLoadId, UserID };
+
+protected:
+ enum { CloseUnload = CloseDiscard + 1 };
+ enum { LoadStudyId = OpenStudyId + 1 };
public:
SalomeApp_Application();
virtual void contextMenuPopup( const QString&, QPopupMenu*, QString& );
+ virtual bool checkDataObject(LightApp_DataObject* theObj);
+
static CORBA::ORB_var orb();
static SALOMEDSClient_StudyManager* studyMgr();
static SALOME_NamingService* namingService();
virtual bool onOpenDoc( const QString& );
virtual void onLoadDoc();
virtual bool onLoadDoc( const QString& );
+ virtual void onExit();
virtual void onCopy();
virtual void onPaste();
void onSaveGUIState();// called from VISU
+ virtual void onCloseDoc( bool ask = true);
protected slots:
void onStudySaved( SUIT_Study* );
void onStudyOpened( SUIT_Study* );
+ void onDesktopMessage( const QString& );
protected:
virtual void createActions();
virtual void createPreferences( LightApp_Preferences* );
virtual void updateDesktopTitle();
+
+ virtual bool closeAction( const int, bool& );
+ virtual int closeChoice( const QString& );
+
+ virtual QMap<int, QString> activateModuleActions() const;
+ virtual void moduleActionSelected( const int );
private slots:
void onDeleteInvalidReferences();
void onCatalogGen();
void onRegDisplay();
void onOpenWith();
+
};
#ifdef WIN32
#include <SUIT_TreeSync.h>
#include <SUIT_DataObjectIterator.h>
-#include "SALOMEDS_Tool.hxx"
-
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SALOME_Exception)
void children( const suitPtr&, QValueList<suitPtr>& ) const;
suitPtr parent( const suitPtr& ) const;
bool isCorrect( const kerPtr& ) const;
- void updateItem( const suitPtr& ) const;
+ void updateItem( const kerPtr&, const suitPtr& ) const;
private:
_PTR( Study ) myStudy;
{
kerPtr refObj;
QString name = so->GetName().c_str();
- bool res = so && ( so->GetName().size() || so->ReferencedObject( refObj ) );
+ _PTR( GenericAttribute ) anAttr;
+ bool isDraw = true;
+ if ( so->FindAttribute(anAttr, "AttributeDrawable") )
+ {
+ _PTR(AttributeDrawable) aAttrDraw = anAttr;
+ isDraw = aAttrDraw->IsDrawable();
+ }
+ bool res = so && ( so->GetName().size() || so->ReferencedObject( refObj ) ) && isDraw;
return res;
}
Updates SUIT object
\param p - SUIT object
*/
-void SalomeApp_DataModelSync::updateItem( const suitPtr& ) const
+void SalomeApp_DataModelSync::updateItem( const kerPtr& obj, const suitPtr& ) const
{
}
{
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;
#else
if ( componentObject() != (SUIT_DataObject*)this )
#endif
- txt = value( referencedObject() );
+ txt = value( object() );
+ if ( txt.isEmpty() )
+ txt = value( referencedObject() );
break;
case CT_Entry:
txt = entry( object() );
else
clr = QColor( 200, 200, 200 );
}
+ else if ( myObject )
+ {
+ _PTR(GenericAttribute) anAttr;
+ if( myObject->FindAttribute ( anAttr, "AttributeTextHighlightColor") )
+ {
+ _PTR(AttributeTextHighlightColor) aHighColAttr = anAttr;
+ clr = QColor( (int)(aHighColAttr->TextHighlightColor().R),
+ (int)(aHighColAttr->TextHighlightColor().G),
+ (int)(aHighColAttr->TextHighlightColor().B));
+ }
+ }
break;
case HighlightedText:
if ( isReference() )
+++ /dev/null
-// 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 <SALOME_InteractiveObject.hxx>
-
-#include <SUIT_Session.h>
-#include <SUIT_Desktop.h>
-#include <SUIT_ViewManager.h>
-#include <SUIT_ViewModel.h>
-#include <SUIT_ViewWindow.h>
-
-#include <qstring.h>
-
-/*!
- 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 (<forced> == true)
- SUIT_Session* ses = SUIT_Session::session();
- SUIT_Application* app = ses->activeApplication();
- if ( app )
- {
- SUIT_Desktop* desk = app->desktop();
- QPtrList<SUIT_ViewWindow> 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<SALOME_View*>(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<SalomeApp_Application*>( app ) ) {
- if( SUIT_ViewManager* vman = sApp->activeViewManager() ) {
- if ( SUIT_ViewModel* vmod = vman->getViewModel() )
- return dynamic_cast<SALOME_View*>( vmod );
- }
- }
- }
- return 0;
-}
+++ /dev/null
-// 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 <SALOME_Prs.h>
-
-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
#include <qstring.h>
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ #include <Standard_ErrorHandler.hxx>
+ #include <Standard_Failure.hxx>
+#else
+ #include "CASCatch.hxx"
+#endif
+
/*!Constructor. Initialize by \a floatSignal.*/
SalomeApp_ExceptionHandler::SalomeApp_ExceptionHandler( const bool floatSignal )
: SUIT_ExceptionHandler()
{
- OSD::SetSignal( floatSignal );
+ // JFA 2006-09-28: PAL10867: suppress signal catching,
+ // if environment variable DISABLE_SIGNALS_CATCHING is set to 1.
+ // Commonly this is used with "noexcepthandler" option.
+ char* envNoCatchSignals = getenv("NOT_INTERCEPT_SIGNALS");
+ if (!envNoCatchSignals || !atoi(envNoCatchSignals))
+ {
+ OSD::SetSignal( floatSignal );
+ }
}
/*!Try to call SUIT_ExceptionHandler::internalHandle(o, e), catch if failure.*/
bool SalomeApp_ExceptionHandler::handleSignals( QObject* o, QEvent* e )
{
- CASCatch_TRY {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ try {
+ OCC_CATCH_SIGNALS;
+#else
+ CASCatch_TRY {
+#endif
SUIT_ExceptionHandler::internalHandle( o, e );
}
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+ catch(Standard_Failure) {
+#else
CASCatch_CATCH(Standard_Failure) {
- Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+#endif
+ Handle(Standard_Failure) aFail = Standard_Failure::Caught();
throw Standard_Failure( aFail->GetMessageString() );
}
-
+
return true;
}
}
/*!Create new SUIT_ExceptionHandler*/
+
extern "C" SALOMEAPP_EXPORT SUIT_ExceptionHandler* getExceptionHandler()
{
// MSV 2006-04-26: work around PAL12004 "VTK window => SIGFPE Arithmetic Exception Detected"
// We disable FPE signal as it was in earlier versions of SALOME. It is enabled
// only in debug mode if the environment variable DISABLE_FPE is not set to 1.
bool raiseFPE;
-#ifdef _DEBUG_
+#if defined(_DEBUG_) | defined(_DEBUG) //the Last for WNT default settings
raiseFPE = true;
char* envDisableFPE = getenv("DISABLE_FPE");
if (envDisableFPE && atoi(envDisableFPE))
#else
raiseFPE = false;
#endif
+
return new SalomeApp_ExceptionHandler( raiseFPE );
}
--- /dev/null
+// 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_ExitDlg.cxx
+// Author: Margarita KARPUNINA, Open CASCADE S.A.S.
+//
+
+#include "SalomeApp_ExitDlg.h"
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qcheckbox.h>
+
+/*!
+ * \brief creates a Exit dialog box
+ * \param parent a parent widget
+ * \param modal bool argument, if true the dialog box is a modal dialog box
+ * \param f style flags
+ */
+SalomeApp_ExitDlg::SalomeApp_ExitDlg( QWidget* parent )
+ : QDialog( parent, "SalomeApp_ExitDlg", true )
+{
+ setSizeGripEnabled( true );
+ setCaption( tr( "INF_DESK_EXIT" ) );
+
+ QVBoxLayout* m_vbL = new QVBoxLayout( this );
+ m_vbL->setMargin( 11 );
+ m_vbL->setSpacing( 6 );
+
+ QLabel* m_lIcon = new QLabel( this, "m_lDescr" );
+ QPixmap pm = QMessageBox::standardIcon( QMessageBox::Question );
+ m_lIcon->setPixmap( pm );
+ m_lIcon->setScaledContents( false );
+ m_lIcon->setAlignment( Qt::AlignCenter );
+
+ QLabel* m_lDescr = new QLabel (this, "m_lDescr");
+ m_lDescr->setText ( tr ("QUE_DESK_EXIT") );
+ m_lDescr->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
+
+ myServersShutdown = new QCheckBox( tr("SHUTDOWN_SERVERS"), this );
+ myServersShutdown->setChecked(true);
+
+ QVBoxLayout* m_vl1 = new QVBoxLayout();
+ m_vl1->setMargin( 10 ); m_vl1->setSpacing( 16 );
+ m_vl1->addWidget( m_lDescr );
+ m_vl1->addWidget( myServersShutdown );
+
+ QHBoxLayout* m_hl1 = new QHBoxLayout();
+ m_hl1->setMargin( 0 ); m_hl1->setSpacing( 6 );
+ m_hl1->addWidget( m_lIcon );
+ m_hl1->addStretch();
+ m_hl1->addLayout( m_vl1 );
+ m_hl1->addStretch();
+
+ QPushButton* m_pbOk = new QPushButton( tr( "BUT_OK" ), this );
+ QPushButton* m_pbCancel = new QPushButton( tr( "BUT_CANCEL" ), this );
+
+ QGridLayout* m_hl2 = new QGridLayout();
+ m_hl2->setMargin( 0 ); m_hl2->setSpacing( 6 );
+ m_hl2->addWidget( m_pbOk, 0, 0 );
+ m_hl2->setColStretch( 1, 5 );
+ m_hl2->addWidget( m_pbCancel, 0, 2 );
+
+ m_vbL->addStretch();
+ m_vbL->addLayout( m_hl1 );
+ m_vbL->addStretch();
+ m_vbL->addLayout( m_hl2 );
+
+ connect( m_pbOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ connect( m_pbCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+}
+
+/*!
+ * \brief Destructor
+ */
+SalomeApp_ExitDlg::~SalomeApp_ExitDlg()
+{
+}
+
+/*!
+ * \brief get the check box status
+ */
+bool SalomeApp_ExitDlg::isServersShutdown()
+{
+ return myServersShutdown->isChecked();
+}
+
--- /dev/null
+// 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_ExitDlg.h
+// Author: Margarita KARPUNINA, Open CASCADE S.A.S.
+//
+
+#ifndef SALOMEAPP_EXITDLG_H
+#define SALOMEAPP_EXITDLG_H
+
+#include <qdialog.h>
+
+class QCheckBox;
+
+/*!\class SalomeApp_ExitDlg
+ * \brief Describes a dialog box shown on question about quit application
+ */
+class SalomeApp_ExitDlg: public QDialog
+{
+ Q_OBJECT
+
+public:
+ SalomeApp_ExitDlg( QWidget* ) ;
+ ~SalomeApp_ExitDlg();
+
+ bool isServersShutdown();
+
+private:
+ QCheckBox* myServersShutdown;
+};
+
+#endif // SALOMEAPP_EXITDLG_H
+
virtual void storeVisualParameters(int savePoint);
virtual void restoreVisualParameters(int savePoint);
+ virtual LightApp_Selection* createSelection() const;
protected:
virtual CAM_DataModel* createDataModel();
- virtual LightApp_Selection* createSelection() const;
virtual void extractContainers( const SALOME_ListIO&, SALOME_ListIO& ) const;
};
#include <qdict.h>
#include "utilities.h"
-#include <iostream.h>
+#include <iostream>
#include <string>
#include <vector>
*/
bool SalomeApp_Study::saveDocumentAs( const QString& theFileName )
{
- bool store = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", true );
+ bool store = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", false );
if ( store )
SalomeApp_VisualState( (SalomeApp_Application*)application() ).storeState();
_PTR(Study) studyPtr = studyDS();
if ( studyPtr )
{
- if(permanently) SalomeApp_Application::studyMgr()->Close( studyPtr );
+ if(permanently) {
+ SalomeApp_Application::studyMgr()->Close( studyPtr );
+ }
SALOMEDSClient_Study* aStudy = 0;
setStudyDS( _PTR(Study)(aStudy) );
}
return isAnyChanged;
}
+/*!
+ Set study modified to \a on.
+ */
+void SalomeApp_Study::Modified()
+{
+ if(_PTR(Study) aStudy = studyDS())
+ aStudy->Modified();
+ LightApp_Study::Modified();
+}
+
/*!
\return if data model is saved
*/
return "Interface Applicative";
}
+/*!
+ * \brief Restores the study state
+ */
+void SalomeApp_Study::restoreState(int savePoint)
+{
+ SalomeApp_VisualState((SalomeApp_Application*)application()).restoreState(savePoint);
+}
+
+
/*!
Slot: called on change of a root of a data model. Redefined from CAM_Study
*/
virtual bool isSaved() const;
virtual bool isModified() const;
+ virtual void Modified();
virtual void addComponent ( const CAM_DataModel* dm);
void setNameOfSavePoint(int savePoint, const QString& nameOfSavePoint);
virtual std::string getVisualComponentName();
+ virtual void restoreState(int savePoint);
+
protected:
virtual void saveModuleData ( QString theModuleName, QStringList theListOfFiles );
virtual void openModuleData ( QString theModuleName, QStringList& theListOfFiles );
//Resize the views, set their captions and apply visual parameters.
QPtrVector<SUIT_ViewWindow> views = vm->getViews();
- for (int i = 0, j = 0; i<viewCount; i++, j++) {
+ for (int i = 0, j = 0; i<viewCount; i++, j+=2) {
viewWin = views[i];
if ( !viewWin )
continue;
// wait untill the window is really shown. This step fixes MANY bugs..
- while ( !viewWin->isVisible() )
+ while ( !vm->isVisible() )
qApp->processEvents();
viewWin->setCaption(ip->getValue(viewerEntry, j).c_str());
--- /dev/null
+# 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
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES= libSalomeAppTest.la
+
+salomeinclude_HEADERS= SalomeAppTest.hxx
+
+dist_libSalomeAppTest_la_SOURCES= SalomeAppTest.cxx
+
+libSalomeAppTest_la_CXXFLAGS= @CPPUNIT_INCLUDES@ $(KERNEL_CXXFLAGS)
+libSalomeAppTest_la_LIBADD= @CPPUNIT_LIBS@
+
+bin_PROGRAMS= TestSalomeApp
+
+TestSalomeApp_SOURCES= TestSalomeApp.cxx
+
+TestSalomeApp_CXXFLAGS= $(libSalomeAppTest_la_CXXFLAGS)
+TestSalomeApp_LDADD= $(libSalomeAppTest_la_LIBADD) libSalomeAppTest.la
+
+dist_salomescript_PYTHON = TestSalomeApp.py
+UNIT_TEST_PROG = TestSalomeApp
+++ /dev/null
-# 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@
modules = GEOM,SMESH,VISU
[resources]
-SUIT = $(SUITRoot)/resources
-STD = $(SUITRoot)/resources
-Plot2d = $(SUITRoot)/resources
-GLViewer = $(SUITRoot)/resources
-OCCViewer = $(SUITRoot)/resources
-VTKViewer = $(SUITRoot)/resources
-SVTK = $(SUITRoot)/resources
-LightApp = $(SUITRoot)/resources
-SalomeApp = $(SUITRoot)/resources
-GEOM = $(GEOM_ROOT_DIR)/share/salome/resources
-SMESH = $(SMESH_ROOT_DIR)/share/salome/resources
-VISU = $(VISU_ROOT_DIR)/share/salome/resources
+SUIT = $(GUI_ROOT_DIR)/share/salome/resources/gui
+STD = $(GUI_ROOT_DIR)/share/salome/resources/gui
+Plot2d = $(GUI_ROOT_DIR)/share/salome/resources/gui
+GLViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui
+OCCViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui
+VTKViewer = $(GUI_ROOT_DIR)/share/salome/resources/gui
+SVTK = $(GUI_ROOT_DIR)/share/salome/resources/gui
+LightApp = $(GUI_ROOT_DIR)/share/salome/resources/gui
+SalomeApp = $(GUI_ROOT_DIR)/share/salome/resources/gui
+GEOM = $(GEOM_ROOT_DIR)/share/salome/resources/geom
+SMESH = $(SMESH_ROOT_DIR)/share/salome/resources/smesh
+VISU = $(VISU_ROOT_DIR)/share/salome/resources/visu
[GEOM]
name = Geometry
<parameter name="xterm" value="no"/>
<parameter name="portkill" value="no"/>
<parameter name="killall" value="no"/>
+ <parameter name="pinter" value="no"/>
<parameter name="noexcepthandler" value="no"/>
<parameter name="modules" value="GEOM,SMESH,VISU,SUPERV,MED,COMPONENT,PYCALCULATOR"/>
<parameter name="pyModules" value=""/>
</section>
<section name="splash" >
<!-- Splash screen settings -->
- <parameter name="image" value="${SUITRoot}/resources/icon_about.png" />
+ <parameter name="image" value="${GUI_ROOT_DIR}/share/salome/resources/gui/icon_about.png" />
<parameter name="info" value="%V" />
- <parameter name="text_colors" value="#543AA9|#FFFFFF" />
- <parameter name="progress_colors" value="#0A4E5F|#B2EFED|1" />
+ <parameter name="text_colors" value="#FFFFFF" />
+ <parameter name="progress_colors" value="#c33232|#d1d1d1|0" />
+ <parameter name="margin" value="26" />
</section>
<section name="resources">
<!-- Resource directories (resource manager)-->
- <parameter name="SUIT" value="${SUITRoot}/resources"/>
- <parameter name="STD" value="${SUITRoot}/resources"/>
- <parameter name="Plot2d" value="${SUITRoot}/resources"/>
- <parameter name="SPlot2d" value="${SUITRoot}/resources"/>
- <parameter name="GLViewer" value="${SUITRoot}/resources"/>
- <parameter name="OCCViewer" value="${SUITRoot}/resources"/>
- <parameter name="VTKViewer" value="${SUITRoot}/resources"/>
- <parameter name="SVTK" value="${SUITRoot}/resources"/>
- <parameter name="LightApp" value="${SUITRoot}/resources"/>
- <parameter name="SalomeApp" value="${SUITRoot}/resources"/>
- <parameter name="OB" value="${SUITRoot}/resources"/>
- <parameter name="CAM" value="${SUITRoot}/resources"/>
- <parameter name="SUPERVGraph" value="${SUITRoot}/resources"/>
- <parameter name="ToolsGUI" value="${SUITRoot}/resources"/>
- <parameter name="NETGENPlugin" value="${NETGENPLUGIN_ROOT_DIR}/share/salome/resources"/>
- <parameter name="GHS3DPlugin" value="${GHS3DPLUGIN_ROOT_DIR}/share/salome/resources"/>
+ <parameter name="SUIT" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="STD" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="Plot2d" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="SPlot2d" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="GLViewer" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="OCCViewer" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="VTKViewer" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="SVTK" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="LightApp" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="SalomeApp" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="OB" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="CAM" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="SUPERVGraph" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="QxGraph" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <parameter name="ToolsGUI" value="${GUI_ROOT_DIR}/share/salome/resources/gui"/>
+ <!-- NETGENPlugin and GHS3DPlugin -->
+ <!-- Here the environment variables are used in upper case, -->
+ <!-- In SMESH/resources/SalomeApp.xml case-sensitive notation is used. -->
+ <!-- As a result, both variants are acceptable. -->
+ <parameter name="NETGENPlugin" value="${NETGENPLUGIN_ROOT_DIR}/share/salome/resources/netgenplugin"/>
+ <parameter name="GHS3DPlugin" value="${GHS3DPLUGIN_ROOT_DIR}/share/salome/resources/ghs3dplugin"/>
+ <parameter name="BLSURFPlugin" value="${BLSURFPLUGIN_ROOT_DIR}/share/salome/resources"/>
+ <parameter name="HexoticPLUGIN" value="${HexoticPLUGIN_ROOT_DIR}/share/salome/resources"/>
</section>
<section name="SMESH">
<!-- Default SMESH module plugins -->
- <parameter name="plugins" value="NETGENPlugin,GHS3DPlugin"/>
+ <parameter name="plugins" value="NETGENPlugin,GHS3DPlugin,BLSURFPlugin,HexoticPLUGIN"/>
</section>
<section name="desktop" >
<!-- Default GUI desktop state, position, size -->
<parameter name="Title" value="63, 213, 255" />
<parameter name="NodeBody" value="255, 249, 147" />
</section>
+ <section name="QxGraph" >
+ <!-- QxGraph viewer preferences -->
+ <parameter name="Background" value="144, 208, 211" />
+ <parameter name="Title" value="63, 213, 255" />
+ <parameter name="NodeBody" value="255, 249, 147" />
+ </section>
<section name="FileDlg" >
<!-- "Open/Save File" dialog box preferences-->
<parameter name="QuickDirList" value="${DATA_DIR}" />
</section>
<section name="ExternalBrowser" >
<!-- External HELP browser settings -->
+ <parameter value="D:\Program Files\Internet Explorer\iexplore.exe" name="winapplication" />
<parameter value="/usr/bin/mozilla" name="application" />
</section>
</document>
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-// File: CATHAREGUI_msg_en.po
+// File: SalomeApp_msg_en.po
// Created: 10/25/2004 12:46:36 PM
// Author: Sergey LITONIN
-// Copyright (C) CEA 2004
msgid ""
msgstr ""
msgstr "Object browser"
msgid "SalomeApp_Application::MEN_OPENWITH"
-msgstr "Activate Module"
+msgstr "Activate %1 Module"
msgid "SalomeApp_Application::MEN_DELETE_INVALID_REFERENCE"
msgstr "Delete Invalid Reference"
msgid "SalomeApp_Application::WRN_DUMP_STUDY_FAILED"
msgstr "Dump study failed"
+msgid "SalomeApp_Application::WRN_FILE_NAME_BAD"
+msgstr "Please enter correct file name"
+
msgid "SAVE_POINT_OBJECT_TOOLTIP"
msgstr "Saved GUI state: %1"
msgid "SAVE_POINT_ROOT_NAME"
msgstr "GUI states"
+msgid "CLOSE_LOCKED_STUDY"
+msgstr "Close locked study?"
+
//=======================================================================================
msgid "SalomeApp_Application::MEN_RESTORE_VS"
msgid "SalomeApp_Application::MEN_DELETE_VS"
msgstr "Delete"
+
+msgid "SalomeApp_Application::APPCLOSE_CAPTION"
+msgstr "Close study"
+
+msgid "SalomeApp_Application::APPCLOSE_DESCRIPTION"
+msgstr "Do you want to save or unload study before closing?"
+
+msgid "SalomeApp_Application::APPCLOSE_CLOSE"
+msgstr "&Close w/o saving"
+
+msgid "SalomeApp_Application::APPCLOSE_SAVE"
+msgstr "&Save && Close"
+
+msgid "SalomeApp_Application::APPCLOSE_UNLOAD"
+msgstr "&Unload"
+
+msgid "SalomeApp_ExitDlg::SHUTDOWN_SERVERS"
+msgstr "Shutdown standalone servers"
+
+msgid "SalomeApp_Application::ACTIVATE_MODULE_OP_LOAD"
+msgstr "&Load..."
#include <qvbox.h>
#include <qguardedptr.h>
-#ifdef WNT
-#include <SALOME_WNT.hxx>
-#else
-#define SALOME_WNT_EXPORT
-#endif
+#include <SALOME_Session.hxx>
/*!
\class InquireEvent
Contains QCustomEvents for posting to InquireServersQThread
*/
-class SALOME_WNT_EXPORT InquireEvent : public QCustomEvent
+class SESSION_EXPORT InquireEvent : public QCustomEvent
{
public:
class InquireServersGUI;
-class SALOME_WNT_EXPORT InquireServersQThread : public QThread
+class SESSION_EXPORT InquireServersQThread : public QThread
{
public:
InquireServersQThread( InquireServersGUI* r );
class QLabel;
class QFrame;
class QProgressBar;
-class SALOME_WNT_EXPORT InquireServersGUI : public QVBox
+class SESSION_EXPORT InquireServersGUI : public QVBox
{
Q_OBJECT
--- /dev/null
+# SALOME Session : implementation of Session.idl
+#
+# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+#
+#
+# File : Makefile.in
+# Author : Paul RASCLE, EDF
+# Module : SALOME
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libSalomeSession.la
+
+salomeinclude_HEADERS= \
+ Session_Session_i.hxx \
+ Session_ServerLauncher.hxx \
+ Session_ServerThread.hxx \
+ Session_ServerCheck.hxx \
+ SalomeApp_Engine_i.hxx
+
+# Libraries targets
+
+dist_libSalomeSession_la_SOURCES= \
+ Session_Session_i.cxx \
+ Session_ServerThread.cxx \
+ Session_ServerLauncher.cxx \
+ Session_ServerCheck.cxx \
+ SalomeApp_Engine_i.cxx
+
+libSalomeSession_la_CPPFLAGS= $(QT_MT_INCLUDES) $(PYTHON_INCLUDES) \
+ $(HDF5_INCLUDES) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ $(CAS_CPPFLAGS) \
+ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ \
+ -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT -I$(srcdir)/../Event \
+ @LIBXML_INCLUDES@
+
+libSalomeSession_la_LDFLAGS= $(QT_MT_LIBS) $(KERNEL_LDFLAGS) -lSalomeNS \
+ -lSalomeLifeCycleCORBA -lOpUtil -lSALOMELocalTrace -lSalomeCatalog \
+ -lSalomeDSClient $(CAS_KERNEL) -lwith_loggerTraceCollector \
+ ../SUIT/libsuit.la ../Event/libEvent.la ../../idl/libSalomeIDLGUI.la
+
+# Executable
+bin_PROGRAMS= SALOME_Session_Server
+
+dist_SALOME_Session_Server_SOURCES= SALOME_Session_Server.cxx
+
+SALOME_Session_Server_CPPFLAGS= $(libSalomeSession_la_CPPFLAGS)
+SALOME_Session_Server_LDADD= $(libSalomeSession_la_LDFLAGS) $(OMNIORB_LIBS) \
+ $(HDF5_LIBS) -lSalomeContainer -lSalomeResourcesManager -lTOOLSDS \
+ -lSalomeHDFPersist -lSalomeDSImpl -lSalomeGenericObj -lRegistry \
+ -lSalomeNotification -lSALOMEBasics -lSalomeLauncher ../Qtx/libqtx.la \
+ $(top_builddir)/idl/libSalomeIDLGUI.la \
+ libSalomeSession.la
+
+lib-hook:
+ ln -sf $(top_builddir)/bin/salome/styles styles
+
+# ../SalomeApp/libSalomeApp.la
+++ /dev/null
-# SALOME Session : implementation of Session.idl
-#
-# Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-#
-#
-# File : Makefile.in
-# Author : Paul RASCLE, EDF
-# Module : SALOME
-# $Header$
-
-# source path
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@top_srcdir@/idl
-
-
-@COMMENCE@
-
-EXPORT_HEADERS= Session_Session_i.hxx \
- Session_ServerLauncher.hxx \
- Session_ServerThread.hxx \
- Session_ServerCheck.hxx \
- SalomeApp_Engine_i.hxx
-
-# Libraries targets
-LIB = libSalomeSession.la
-
-LIB_SRC=Session_Session_i.cxx \
- Session_ServerThread.cxx \
- Session_ServerLauncher.cxx \
- Session_ServerCheck.cxx \
- SalomeApp_Engine_i.cxx \
-
-LIB_MOC =
-
-# Executables targets
-BIN = SALOME_Session_Server
-BIN_SRC =
-LIB_SERVER_IDL = SALOME_Session.idl SalomeApp_Engine.idl
-BIN_SERVER_IDL =
-BIN_CLIENT_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Component.idl SALOME_Registry.idl SALOME_ModuleCatalog.idl SALOME_Exception.idl SALOME_GenericObj.idl
-
-CPPFLAGS += $(QT_MT_INCLUDES) $(PYTHON_INCLUDES) $(HDF5_INCLUDES) $(BOOST_CPPFLAGS) $(KERNEL_CXXFLAGS) -I$(OCC_INCLUDES)
-CXXFLAGS += $(OCC_CXXFLAGS) $(BOOST_CPPFLAGS)
-LDFLAGS += $(QT_MT_LIBS) $(KERNEL_LDFLAGS) -lSalomeNS -lsuit -lSalomeLifeCycleCORBA -lOpUtil -lSALOMELocalTrace -lwith_loggerTraceCollector -lEvent -lSalomeCatalog -lSalomeDSClient $(CAS_KERNEL)
-
-LDFLAGSFORBIN= $(LDFLAGS) $(OMNIORB_LIBS) $(HDF5_LIBS) -lqtx -lSalomeContainer -lSalomeResourcesManager -lTOOLSDS -lSalomeHDFPersist -lSalomeDSImpl -lSalomeGenericObj -lRegistry -lSalomeNotification -lSALOMEBasics
-
-@CONCLUDE@
-
--- /dev/null
+// 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
#include "SALOME_NamingService.hxx"
#include "SALOMETraceCollector.hxx"
+#include "SALOME_ModuleCatalog_impl.hxx"
+#include "OpUtil.hxx"
+#include "RegistryService.hxx"
+#include "ConnectionManager_i.hxx"
+
#include <iostream>
#ifndef WNT
#include <unistd.h>
+#include <iostream.h>
+#include <string.h>
#endif
#include <qdir.h>
{
if ( myExtAppName.isNull() || myExtAppVersion.isNull() ) {
SALOME_ResourceMgr resMgr( "SalomeApp", QString( "%1Config" ) );
+ resMgr.loadLanguage( "LightApp", "en" );
resMgr.loadLanguage( "SalomeApp", "en" );
myExtAppName = QObject::tr( "APP_NAME" ).stripWhiteSpace();
virtual int userFileId( const QString& _fname ) const
{
- QRegExp exp( "\\.SalomeApprc\\.([a-zA-Z0-9.]+)$" );
- QRegExp vers_exp( "^([0-9]+)([A-Za-z]?)([0-9]*)$" );
-
- QString fname = QFileInfo( _fname ).fileName();
- if( exp.exactMatch( fname ) )
- {
- QStringList vers = QStringList::split( ".", exp.cap( 1 ) );
- int major=0, minor=0;
- major = vers[0].toInt();
- minor = vers[1].toInt();
- if( vers_exp.search( vers[2] )==-1 )
- return -1;
- int release = 0, dev1 = 0, dev2 = 0;
- release = vers_exp.cap( 1 ).toInt();
- dev1 = vers_exp.cap( 2 )[ 0 ].latin1();
- dev2 = vers_exp.cap( 3 ).toInt();
-
- int dev = dev1*100+dev2, id = major;
- id*=100; id+=minor;
- id*=100; id+=release;
- id*=10000; id+=dev;
- return id;
+ if ( !myExtAppName.isEmpty() ) {
+ QRegExp exp( QString( "\\.%1rc\\.([a-zA-Z0-9.]+)$" ).arg( myExtAppName ) );
+ QRegExp vers_exp( "^([0-9]+)([A-Za-z]?)([0-9]*)$" );
+
+ QString fname = QFileInfo( _fname ).fileName();
+ if( exp.exactMatch( fname ) ) {
+ QStringList vers = QStringList::split( ".", exp.cap( 1 ) );
+ int major=0, minor=0;
+ major = vers[0].toInt();
+ minor = vers[1].toInt();
+ if( vers_exp.search( vers[2] )==-1 )
+ return -1;
+ int release = 0, dev1 = 0, dev2 = 0;
+ release = vers_exp.cap( 1 ).toInt();
+ dev1 = vers_exp.cap( 2 )[ 0 ].latin1();
+ dev2 = vers_exp.cap( 3 ).toInt();
+
+ int dev = dev1*100+dev2, id = major;
+ id*=100; id+=minor;
+ id*=100; id+=release;
+ id*=10000;
+ if ( dev > 0 ) id+=dev-10000;
+ return id;
+ }
}
return -1;
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 );
}
return false;
}
+void killOmniNames()
+{
+ QString fileName( ::getenv ("OMNIORB_CONFIG") );
+ QString portNumber;
+ if ( !fileName.isEmpty() )
+ {
+ QFile aFile( fileName );
+ if ( aFile.open(IO_ReadOnly) ) {
+ QRegExp re("InitRef = .*:([0-9]+)$");
+ QTextStream stream ( &aFile );
+ while ( !stream.atEnd() ) {
+ QString textLine = stream.readLine();
+ if ( re.search( textLine ) > -1 )
+ portNumber = re.cap(1);
+ }
+ aFile.close();
+ }
+ }
+
+ if ( !portNumber.isEmpty() )
+ {
+ QString cmd ;
+ cmd = QString( "ps -eo pid,command | grep -v grep | grep -E \"omniNames.*%1\" | awk '{cmd=sprintf(\"kill -9 %s\",$1); system(cmd)}'" ).arg( portNumber );
+ system ( cmd.latin1() );
+ }
+
+ /////////////////// NPAL 18309 (Kill Notifd) ////////////////////////////
+ if ( !portNumber.isEmpty() )
+ {
+ QString cmd = QString("import pickle, os; ");
+ cmd += QString("from killSalomeWithPort import getPiDict; ");
+ cmd += QString("filedict=getPiDict(%1); ").arg(portNumber);
+ cmd += QString("f=open(filedict, 'r'); ");
+ cmd += QString("pids=pickle.load(f); ");
+ cmd += QString("m={}; ");
+ cmd += QString("[ m.update(i) for i in pids ]; ");
+ cmd += QString("pids=filter(lambda a: 'notifd' in m[a], m.keys()); ");
+ cmd += QString("[ os.kill(pid, 9) for pid in pids ]; ");
+ cmd += QString("os.remove(filedict); ");
+ cmd = QString("python -c \"%1\" > /dev/null").arg(cmd);
+ system( cmd.latin1() );
+ }
+
+}
+
+// shutdown standalone servers
+void shutdownServers( SALOME_NamingService* theNS )
+{
+ // get each Container from NamingService => shutdown it
+ // (the order is inverse to the order of servers initialization)
+
+ CORBA::Object_var objS = theNS->Resolve("/Kernel/Session");
+ SALOME::Session_var session = SALOME::Session::_narrow(objS);
+ if (!CORBA::is_nil(session)) {
+ session->ping();
+
+ string hostname = GetHostname();
+ //string containerName = "/Containers/" + hostname;
+
+ // 1) SuperVisionContainer
+ //string containerNameSV = containerName + "/SuperVisionContainer";
+ //CORBA::Object_var objSV = theNS->Resolve(containerNameSV.c_str());
+ //Engines::Container_var SVcontainer = Engines::Container::_narrow(objSV) ;
+ //if ( !CORBA::is_nil(SVcontainer) && ( session->getPID() != SVcontainer->getPID() ) )
+ // SVcontainer->Shutdown();
+
+ // 2) FactoryServerPy
+ //string containerNameFSP = containerName + "/FactoryServerPy";
+ //CORBA::Object_var objFSP = theNS->Resolve(containerNameFSP.c_str());
+ //Engines::Container_var FSPcontainer = Engines::Container::_narrow(objFSP) ;
+ //if ( !CORBA::is_nil(FSPcontainer) && ( session->getPID() != FSPcontainer->getPID() ) )
+ // FSPcontainer->Shutdown();
+
+ // 3) FactoryServer
+ //string containerNameFS = containerName + "/FactoryServer";
+ //CORBA::Object_var objFS = theNS->Resolve(containerNameFS.c_str());
+ //Engines::Container_var FScontainer = Engines::Container::_narrow(objFS) ;
+ //if ( !CORBA::is_nil(FScontainer) && ( session->getPID() != FScontainer->getPID() ) )
+ // FScontainer->Shutdown();
+
+ // 4) ContainerManager
+ //CORBA::Object_var objCM=theNS->Resolve("/ContainerManager");
+ //Engines::ContainerManager_var contMan=Engines::ContainerManager::_narrow(objCM);
+ //if ( !CORBA::is_nil(contMan) && ( session->getPID() != contMan->getPID() ) )
+ // contMan->ShutdownWithExit();
+
+ // 4) SalomeLauncher
+ CORBA::Object_var objSL = theNS->Resolve("/SalomeLauncher");
+ Engines::SalomeLauncher_var launcher = Engines::SalomeLauncher::_narrow(objSL);
+ if (!CORBA::is_nil(launcher) && (session->getPID() != launcher->getPID()))
+ launcher->Shutdown();
+
+ // 5) ConnectionManager
+ CORBA::Object_var objCnM=theNS->Resolve("/ConnectionManager");
+ Engines::ConnectionManager_var connMan=Engines::ConnectionManager::_narrow(objCnM);
+ if ( !CORBA::is_nil(connMan) && ( session->getPID() != connMan->getPID() ) )
+ connMan->ShutdownWithExit();
+
+ // 6) SALOMEDS
+ CORBA::Object_var objSDS = theNS->Resolve("/myStudyManager");
+ SALOMEDS::StudyManager_var studyManager = SALOMEDS::StudyManager::_narrow(objSDS) ;
+ if ( !CORBA::is_nil(studyManager) && ( session->getPID() != studyManager->getPID() ) )
+ studyManager->Shutdown();
+
+ // 7) ModuleCatalog
+ CORBA::Object_var objMC=theNS->Resolve("/Kernel/ModulCatalog");
+ SALOME_ModuleCatalog::ModuleCatalog_var catalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(objMC);
+ if ( !CORBA::is_nil(catalog) && ( session->getPID() != catalog->getPID() ) )
+ catalog->shutdown();
+
+ // 8) Registry
+ CORBA::Object_var objR = theNS->Resolve("/Registry");
+ Registry::Components_var registry = Registry::Components::_narrow(objR);
+ if ( !CORBA::is_nil(registry) && ( session->getPID() != registry->getPID() ) )
+ registry->Shutdown();
+
+ // 9) Kill OmniNames
+ //killOmniNames();
+ }
+}
+
// ---------------------------- MAIN -----------------------
int main( int argc, char **argv )
{
resMgr.setCurrentFormat( "xml" );
resMgr.loadLanguage( "LightApp", "en" );
// ...get splash preferences
- QString splashIcon, splashInfo, splashTextColors, splashProgressColors;
- resMgr.value( "splash", "image", splashIcon );
- resMgr.value( "splash", "info", splashInfo, false );
- resMgr.value( "splash", "text_colors", splashTextColors );
- resMgr.value( "splash", "progress_colors", splashProgressColors );
+ QString splashIcon;
+ resMgr.value( "splash", "image", splashIcon );
QPixmap px( splashIcon );
if ( px.isNull() ) // try to get splash pixmap from resources
px = resMgr.loadPixmap( "LightApp", QObject::tr( "ABOUT_SPLASH" ) );
if ( !px.isNull() ) {
// ...set splash pixmap
splash = QtxSplash::splash( px );
+ // ... set margin
+ int splashMargin;
+ if ( resMgr.value( "splash", "margin", splashMargin ) && splashMargin > 0 ) {
+ splash->setMargin( splashMargin );
+ }
// ...set splash text colors
- if ( !splashTextColors.isEmpty() ) {
+ QString splashTextColors;
+ if ( resMgr.value( "splash", "text_colors", splashTextColors ) && !splashTextColors.isEmpty() ) {
QStringList colors = QStringList::split( "|", splashTextColors );
QColor c1, c2;
if ( colors.count() > 0 ) c1 = QColor( colors[0] );
splash->setTextColors( Qt::white, Qt::black );
}
// ...set splash progress colors
- if ( !splashProgressColors.isEmpty() ) {
+ QString splashProgressColors;
+ if ( resMgr.value( "splash", "progress_colors", splashProgressColors ) && !splashProgressColors.isEmpty() ) {
QStringList colors = QStringList::split( "|", splashProgressColors );
QColor c1, c2;
int gradType = QtxSplash::Vertical;
f.setBold( true );
splash->setFont( f );
// ...show splash initial status
- if ( !splashInfo.isEmpty() ) {
+ QString splashInfo;
+ if ( resMgr.value( "splash", "info", splashInfo, false ) && !splashInfo.isEmpty() ) {
splashInfo.replace( QRegExp( "%A" ), QObject::tr( "APP_NAME" ) );
splashInfo.replace( QRegExp( "%V" ), QObject::tr( "ABOUT_VERSION" ).arg( salomeVersion() ) );
splashInfo.replace( QRegExp( "%L" ), QObject::tr( "ABOUT_LICENSE" ) );
PortableServer::POAManager_var pman = poa->the_POAManager();
pman->activate() ;
- INFOS( "pman->activate()" );
+ MESSAGE( "pman->activate()" );
_NS = new SALOME_NamingService( orb );
_GUIMutex.unlock();
}
+ bool shutdown = false;
if ( !result ) {
// Launch GUI activator
if ( isGUI ) {
SALOME::Session_var session = SALOME::Session::_narrow( obj ) ;
ASSERT ( ! CORBA::is_nil( session ) );
// ...create GUI launcher
- INFOS( "Session activated, Launch IAPP..." );
+ MESSAGE( "Session activated, Launch IAPP..." );
guiThread = new GetInterfaceThread( session );
}
aGUISession = new SALOME_Session();
// Load SalomeApp dynamic library
- INFOS( "creation SUIT_Application" );
+ MESSAGE( "creation SUIT_Application" );
SUIT_Application* aGUIApp = aGUISession->startApplication( "SalomeApp", 0, 0 );
if ( aGUIApp )
{
delete splash;
splash = 0;
- if ( result == SUIT_Session::FROM_GUI ) // desktop is closed by user from GUI
+ if ( result == SUIT_Session::NORMAL ) { // desktop is closed by user from GUI
+ shutdown = aGUISession->exitFlags();
break;
+ }
}
delete aGUISession;
// unlock Session mutex
_SessionMutex.unlock();
+ if ( shutdown )
+ shutdownServers( _NS );
+
if ( myServerLauncher )
myServerLauncher->KillAll(); // kill embedded servers
delete myServerLauncher;
delete _NS;
- LocalTraceBufferPool *bp1 = LocalTraceBufferPool::instance();
- LocalTraceBufferPool::deleteInstance(bp1);
+ PyGILState_STATE gstate = PyGILState_Ensure();
+ Py_Finalize();
+
+ try
+ {
+ orb->destroy();
+ }
+ catch(...)
+ {
+ //////////////////////////////////////////////////////////////
+ // VSR: silently skip exception:
+ // CORBA.BAD_INV_ORDER.BAD_INV_ORDER_ORBHasShutdown
+ // exception is raised when orb->destroy() is called and
+ // cpp continer is launched in the embedded mode
+ //////////////////////////////////////////////////////////////
+ // std::cerr << "Caught unexpected exception on destroy : ignored !!" << std::endl;
+ }
+
+ if ( shutdown )
+ killOmniNames();
return result;
}
#ifndef _SALOMEAPP_ENGINE_I_HXX_
#define _SALOMEAPP_ENGINE_I_HXX_
+#include <SALOME_Session.hxx>
+
#include "SALOME_Component_i.hxx"
#include <vector>
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SalomeApp_Engine)
-#ifdef WNT
-#include <SALOME_WNT.hxx>
-#else
-#define SALOME_WNT_EXPORT
-#endif
-
-class SALOME_WNT_EXPORT SalomeApp_Engine_i: public POA_SalomeApp::Engine,
+class SESSION_EXPORT SalomeApp_Engine_i: public POA_SalomeApp::Engine,
public Engines_Component_i
{
public:
const int __DEFAULT__ATTEMPTS__ = 300; // number of checks attemtps
// can be overrided by CSF_RepeatServerRequest
// environment variable
-const int __DEFAULT__DELAY__ = 100000; // delay between attempts (microseconds)
+const int __DEFAULT__DELAY__ = 50000; // delay between attempts (microseconds)
// can be overrided by CSF_DelayServerRequest
// environment variable
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for naming service..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
CORBA::Object_var obj = orb->resolve_initial_references( "NameService" );
return;
}
QtxSplash::setStatus( info.arg( "Waiting for naming service...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
// 2. Check registry server
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for registry server..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
return;
}
QtxSplash::setStatus( info.arg( "Waiting for registry server...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
// 3. Check data server
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for study server..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
return;
}
QtxSplash::setStatus( info.arg( "Waiting for study server...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
// 4. Check module catalogue server
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for module catalogue server..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
return;
}
QtxSplash::setStatus( info.arg( "Waiting for module catalogue server...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
// 5. Check data server
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for session server..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
return;
}
QtxSplash::setStatus( info.arg( "Waiting for session server...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
// 6. Check C++ container
if ( myCheckCppContainer ) {
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for C++ container..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
return;
}
QtxSplash::setStatus( info.arg( "Waiting for C++ container...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
}
// 7. Check Python container
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for Python container..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
return;
}
QtxSplash::setStatus( info.arg( "Waiting for Python container...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
}
// 8. Check supervision container
bOk = false;
for ( i = 0; i < myAttempts ; i++ ) {
QtxSplash::setStatus( info.arg( "Waiting for Supervision container..." ), current * myAttempts + i );
- QThread::usleep( i == 0 ? 500000 : myDelay );
+ QThread::usleep( i == 0 ? 50000 : myDelay );
try {
CORBA::ORB_var orb = CORBA::ORB_init( argc, argv );
SALOME_NamingService &NS = *SINGLETON_<SALOME_NamingService>::Instance();
return;
}
QtxSplash::setStatus( info.arg( "Waiting for Supervision container...OK" ), ++current * myAttempts );
- QThread::usleep( 300000 );
+ QThread::usleep( 30000 );
}
// clear splash status
splash->setProgress( 0, 0 );
#if !defined(SESSION_SERVERCHECK_HXX)
#define SESSION_SERVERCHECK_HXX
-#ifdef WNT
-#include <SALOME_WNT.hxx>
-#else
-#define SALOME_WNT_EXPORT
-#endif
+#include <SALOME_Session.hxx>
#include <qthread.h>
#include <qapplication.h>
/*!
Class Session_ServerCheck : check SALOME servers
*/
-class SALOME_WNT_EXPORT Session_ServerCheck : public QThread
+class SESSION_EXPORT Session_ServerCheck : public QThread
{
public:
// constructor
_ServerLaunch->wakeAll();
// run ORB
- _orb->run(); // this thread waits, during omniORB process events
+ //_orb->run(); // No need to call orb->run() : it waits on a lock. Qt is already waiting in the mainloop.
}
/*!
{
for (int i=0; i<argc-1; i++)
//argv[i+1] = _argCopy[(*itServ)._firstArg + i].c_str();
- argv[i+1] = _argv[(*itServ)._firstArg + i];
+ argv[i+1] = _argv[(*itServ)._firstArg + i];
}
- std::cout << "*** activating [" << argc << "] : " << argv[0] << std::endl;
+ MESSAGE("*** activating [" << argc << "] : " << argv[0]);
Session_ServerThread* aServerThread
= new Session_ServerThread(argc, argv, _orb,_root_poa);
_serverThreads.push_front(aServerThread);
aServerThread->Init();
+ free( argv[0] );
+ delete[] argv;
}
// Always launch Session Server
- std::cout << "*** activating [ SESSION ] " << std::endl;
+ MESSAGE("*** activating [ SESSION ] ");
int argc=1;
char** argv = new char*[argc];
Session_SessionThread* aServerThread
= new Session_SessionThread(argc, argv, _orb,_root_poa,_SessionMutex,_SessionStarted);
_serverThreads.push_front(aServerThread);
-
aServerThread->Init();
+ delete[] argv;
}
/*!
#ifndef _SESSION_SERVERLAUNCHER_HXX_
#define _SESSION_SERVERLAUNCHER_HXX_
+#include <SALOME_Session.hxx>
+
#include "Session_ServerThread.hxx"
#include <CORBA.h>
#include <qthread.h>
#include <qwaitcondition.h>
-
-#ifdef WNT
-#include <SALOME_WNT.hxx>
-#else
-#define SALOME_WNT_EXPORT
-#endif
-
using namespace std;
-class ServArg
+class SESSION_EXPORT ServArg
{
public:
int _servType;
_servType(servType),_firstArg(firstArg),_lastArg(lastArg)
{}
-class SALOME_WNT_EXPORT Session_ServerLauncher: public QThread
+class SESSION_EXPORT Session_ServerLauncher: public QThread
{
public:
Session_ServerLauncher();
// SALOME Session : implementation of Session_ServerThread.cxx
//
// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
//
#include "Session_ServerThread.hxx"
#include "SALOME_Container_i.hxx"
-#include "SALOME_ContainerManager.hxx"
+#include "SALOME_Launcher.hxx"
#include <SALOMEDSClient.hxx>
#include <SALOMEDSClient_ClientFactory.hxx>
#include "SALOME_ModuleCatalog_impl.hxx"
const int Session_ServerThread::NB_SRV_TYP = 7;
const char* Session_ServerThread::_serverTypes[NB_SRV_TYP] = {"Container",
- "ModuleCatalog",
- "Registry",
- "SALOMEDS",
- "Session",
- "SalomeAppEngine",
+ "ModuleCatalog",
+ "Registry",
+ "SALOMEDS",
+ "Session",
+ "SalomeAppEngine",
"ContainerManager"};
-/*!
+/*!
default constructor not for use
*/
Session_ServerThread::Session_ServerThread()
ASSERT(0); // must not be called
}
-/*!
+/*!
constructor
*/
Session_ServerThread::Session_ServerThread(int argc,
- char ** argv,
- CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa)
+ char ** argv,
+ CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa)
{
//MESSAGE("Session_ServerThread Constructor " << argv[0]);
_argc = argc;
- _argv = argv;
+ _argv = new char*[ _argc + 1 ];
+ _argv[_argc] = 0;
+ for (int i = 0; i < _argc; i++ )
+ _argv[i] = strdup( argv[i] );
+
_orb = CORBA::ORB::_duplicate(orb);
_root_poa = PortableServer::POA::_duplicate(poa);
_servType =-1;
// multi thread coherence problems
}
-/*!
- destructor
+/*!
+ destructor
*/
Session_ServerThread::~Session_ServerThread()
{
//MESSAGE("~Session_ServerThread "<< _argv[0]);
+ delete _NS;
+ for (int i = 0; i <_argc ; i++ )
+ free( _argv[i] );
+ delete[] _argv;
}
-/*!
+/*!
run the thread : activate one servant, the servant type is given by
argument _argv[0]
*/
void Session_ServerThread::Init()
{
- MESSAGE("Session_ServerThread::Init "<< _argv[0]);
+ MESSAGE("Session_ServerThread::Init "<< _argv[0]);
for (int i=0; i<_argc; i++) SCRUTE(_argv[i]);
#ifndef WNT
#endif
if (strcmp(_argv[0],_serverTypes[i])==0)
{
- _servType = i;
- MESSAGE("Server Thread type : "<<_serverTypes[i]);
- switch (_servType)
- {
- case 0: // Container
- {
- NamingService_WaitForServerReadiness(_NS,"/Registry");
- NamingService_WaitForServerReadiness(_NS,"/ContainerManager");
- ActivateContainer(_argc, _argv);
- break;
- }
- case 1: // ModuleCatalog
- {
- NamingService_WaitForServerReadiness(_NS,"/Registry");
- ActivateModuleCatalog(_argc, _argv);
- break;
- }
- case 2: // Registry
- {
- NamingService_WaitForServerReadiness(_NS,"");
- ActivateRegistry(_argc, _argv);
- break;
- }
- case 3: // SALOMEDS
- {
- NamingService_WaitForServerReadiness(_NS,"/Kernel/ModulCatalog");
- ActivateSALOMEDS(_argc, _argv);
- break;
- }
- case 4: // Session
- {
- NamingService_WaitForServerReadiness(_NS,"/myStudyManager");
- string containerName = "/Containers/";
- containerName = containerName + GetHostname();
- containerName = containerName + "/FactoryServer";
- NamingService_WaitForServerReadiness(_NS,containerName);
- ActivateSession(_argc, _argv);
- break;
- }
- case 5: // SalomeApp_Engine
- {
- NamingService_WaitForServerReadiness(_NS,"/myStudyManager");
- ActivateEngine(_argc, _argv);
- break;
- }
- case 6: // Container Manager
- {
- NamingService_WaitForServerReadiness(_NS,"");
- ActivateContainerManager(_argc, _argv);
- break;
- }
- default:
- {
- ASSERT(0);
- break;
- }
- }
+ _servType = i;
+ MESSAGE("Server Thread type : "<<_serverTypes[i]);
+ switch (_servType)
+ {
+ case 0: // Container
+ {
+ NamingService_WaitForServerReadiness(_NS,"/Registry");
+ NamingService_WaitForServerReadiness(_NS,"/ContainerManager");
+ ActivateContainer(_argc, _argv);
+ break;
+ }
+ case 1: // ModuleCatalog
+ {
+ NamingService_WaitForServerReadiness(_NS,"/Registry");
+ ActivateModuleCatalog(_argc, _argv);
+ break;
+ }
+ case 2: // Registry
+ {
+ NamingService_WaitForServerReadiness(_NS,"");
+ ActivateRegistry(_argc, _argv);
+ break;
+ }
+ case 3: // SALOMEDS
+ {
+ NamingService_WaitForServerReadiness(_NS,"/Kernel/ModulCatalog");
+ ActivateSALOMEDS(_argc, _argv);
+ break;
+ }
+ case 4: // Session
+ {
+ NamingService_WaitForServerReadiness(_NS,"/myStudyManager");
+ string containerName = "/Containers/";
+ containerName = containerName + GetHostname();
+ containerName = containerName + "/FactoryServer";
+ NamingService_WaitForServerReadiness(_NS,containerName);
+ ActivateSession(_argc, _argv);
+ break;
+ }
+ case 5: // SalomeApp_Engine
+ {
+ NamingService_WaitForServerReadiness(_NS,"/myStudyManager");
+ ActivateEngine(_argc, _argv);
+ break;
+ }
+ case 6: // Container Manager
+ {
+ NamingService_WaitForServerReadiness(_NS,"");
+ ActivateContainerManager(_argc, _argv);
+ break;
+ }
+ default:
+ {
+ ASSERT(0);
+ break;
+ }
+ }
}
}
void Session_ServerThread::ActivateModuleCatalog(int argc,
- char ** argv)
+ char ** argv)
{
try
{
- INFOS("ModuleCatalog thread started");
+ MESSAGE("ModuleCatalog thread started");
// allocation on heap to allow destruction by POA
SALOME_ModuleCatalogImpl* Catalogue_i
- = new SALOME_ModuleCatalogImpl(argc, argv);
+ = new SALOME_ModuleCatalogImpl(argc, argv);
// Tell the POA that the objects are ready to accept requests.
- _root_poa->activate_object (Catalogue_i);
+ PortableServer::ObjectId_var id= _root_poa->activate_object (Catalogue_i);
+ Catalogue_i->_remove_ref();
- CORBA::Object_ptr myCata = Catalogue_i->_this();
+ CORBA::Object_var myCata = Catalogue_i->_this();
_NS->Register(myCata ,"/Kernel/ModulCatalog");
}
catch(CORBA::SystemException&)
INFOS( " line: " << fe.line() );
INFOS( " mesg: " << fe.errmsg() );
}
- catch(...)
+ catch(...)
{
INFOS( "Caught unknown exception." );
}
}
void Session_ServerThread::ActivateSALOMEDS(int argc,
- char ** argv)
+ char ** argv)
{
try
{
- INFOS("SALOMEDS thread started");
+ MESSAGE("SALOMEDS thread started");
// We allocate the objects on the heap. Since these are reference
// counted objects, they will be deleted by the POA when they are no
- // longer needed.
+ // longer needed.
ClientFactory::createStudyManager(_orb,_root_poa);
}
INFOS( " line: " << fe.line() );
INFOS( " mesg: " << fe.errmsg() );
}
- catch(...)
+ catch(...)
{
INFOS( "Caught unknown exception." );
}
}
void Session_ServerThread::ActivateRegistry(int argc,
- char ** argv)
+ char ** argv)
{
- INFOS("Registry thread started");
- SCRUTE(argc);
+ MESSAGE("Registry thread started");
+ SCRUTE(argc);
if( argc<3 )
{
INFOS("you must provide the Salome session name when you call SALOME_Registry_Server");
for ( k=1 ; k<argc ; k++ )
{
if( strcmp(argv[k],"--salome_session")==0 )
- {
- ptrSessionName=argv[k+1];
- break;
- }
+ {
+ ptrSessionName=argv[k+1];
+ break;
+ }
}
ASSERT(ptrSessionName) ;
ASSERT(strlen( ptrSessionName )>0);
{
RegistryService *ptrRegistry = SINGLETON_<RegistryService>::Instance();
ptrRegistry->SessionName( ptrSessionName );
+ ptrRegistry->SetOrb(_orb);
varComponents = ptrRegistry->_this();
// The RegistryService must not already exist.
-
+
try
- {
- CORBA::Object_var pipo = _NS->Resolve( registryName );
- if (CORBA::is_nil(pipo) ) throw ServiceUnreachable();
- INFOS("RegistryService servant already existing" );
- ASSERT(0);
- }
- catch( const ServiceUnreachable &ex )
- {
- }
- catch( const CORBA::Exception &exx )
- {
- }
+ {
+ CORBA::Object_var pipo = _NS->Resolve( registryName );
+ if (CORBA::is_nil(pipo) ) throw ServiceUnreachable();
+ INFOS("RegistryService servant already existing" );
+ ASSERT(0);
+ }
+ catch( const ServiceUnreachable &/*ex*/ )
+ {
+ }
+ catch( const CORBA::Exception &/*exx*/ )
+ {
+ }
string absoluteName = string("/") + registryName;
_NS->Register( varComponents , absoluteName.c_str() );
MESSAGE("On attend les requetes des clients");
}
void Session_ServerThread::ActivateContainerManager(int argc,
- char ** argv)
+ char ** argv)
{
try
{
PortableServer::POA_var root_poa=PortableServer::POA::_the_root_poa();
- cout << "ActivateContainerManager ......!!!! " << endl;
- SALOME_ContainerManager * myContainer
- = new SALOME_ContainerManager(_orb);
+ cout << "ActivateSalomeLauncher ......!!!! " << endl;
+ SALOME_Launcher * myContainer = new SALOME_Launcher(_orb,root_poa);
}
catch(CORBA::SystemException&)
{
}
void Session_ServerThread::ActivateContainer(int argc,
- char ** argv)
+ char ** argv)
{
try
{
- INFOS("Container thread started");
+ MESSAGE("Container thread started");
// get or create the child POA
PortableServer::POA_var factory_poa;
try
- {
- factory_poa = _root_poa->find_POA("factory_poa",0);
- // 0 = no activation (already done if exists)
- }
+ {
+ factory_poa = _root_poa->find_POA("factory_poa",0);
+ // 0 = no activation (already done if exists)
+ }
catch (PortableServer::POA::AdapterNonExistent&)
- {
- INFOS("factory_poa does not exists, create...");
- // define policy objects
- PortableServer::ImplicitActivationPolicy_var implicitActivation =
- _root_poa->create_implicit_activation_policy(
- PortableServer::NO_IMPLICIT_ACTIVATION);
- // default = NO_IMPLICIT_ACTIVATION
- PortableServer::ThreadPolicy_var threadPolicy =
- _root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL);
- // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL
-
- // create policy list
- CORBA::PolicyList policyList;
- policyList.length(2);
- policyList[0] = PortableServer::ImplicitActivationPolicy::
- _duplicate(implicitActivation);
- policyList[1] = PortableServer::ThreadPolicy::
- _duplicate(threadPolicy);
-
- PortableServer::POAManager_var nil_mgr
- = PortableServer::POAManager::_nil();
- factory_poa = _root_poa->create_POA("factory_poa",
- nil_mgr,
- policyList);
- //with nil_mgr instead of pman,
- //a new POA manager is created with the new POA
-
- // destroy policy objects
- implicitActivation->destroy();
- threadPolicy->destroy();
-
- // obtain the factory poa manager
- PortableServer::POAManager_var pmanfac = factory_poa->the_POAManager();
- pmanfac->activate();
- MESSAGE("pmanfac->activate()");
- }
-
+ {
+ MESSAGE("factory_poa does not exists, create...");
+ // define policy objects
+ PortableServer::ImplicitActivationPolicy_var implicitActivation =
+ _root_poa->create_implicit_activation_policy(
+ PortableServer::NO_IMPLICIT_ACTIVATION);
+ // default = NO_IMPLICIT_ACTIVATION
+ PortableServer::ThreadPolicy_var threadPolicy =
+ _root_poa->create_thread_policy(PortableServer::ORB_CTRL_MODEL);
+ // default = ORB_CTRL_MODEL, other choice SINGLE_THREAD_MODEL
+
+ // create policy list
+ CORBA::PolicyList policyList;
+ policyList.length(2);
+ policyList[0] = PortableServer::ImplicitActivationPolicy::
+ _duplicate(implicitActivation);
+ policyList[1] = PortableServer::ThreadPolicy::
+ _duplicate(threadPolicy);
+
+ PortableServer::POAManager_var nil_mgr
+ = PortableServer::POAManager::_nil();
+ factory_poa = _root_poa->create_POA("factory_poa",
+ nil_mgr,
+ policyList);
+ //with nil_mgr instead of pman,
+ //a new POA manager is created with the new POA
+
+ // destroy policy objects
+ implicitActivation->destroy();
+ threadPolicy->destroy();
+
+ // obtain the factory poa manager
+ PortableServer::POAManager_var pmanfac = factory_poa->the_POAManager();
+ pmanfac->activate();
+ MESSAGE("pmanfac->activate()");
+ }
+
char *containerName = "";
- if (argc >1)
- {
- containerName = argv[1];
- }
-
- Engines_Container_i * myContainer
- = new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false);
+ if (argc >1)
+ {
+ containerName = argv[1];
+ }
+
+ Engines_Container_i * myContainer
+ = new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false);
}
catch(CORBA::SystemException&)
{
void Session_ServerThread::ActivateEngine(int /*argc*/, char ** /*argv*/)
{
- try
- {
- INFOS("SalomeApp_Engine thread started");
- SalomeApp_Engine_i* anEngine = new SalomeApp_Engine_i();
- /*PortableServer::ObjectId_var id = */_root_poa->activate_object( anEngine );
- INFOS("poa->activate_object( SalomeApp_Engine )");
-
- CORBA::Object_ptr obj = anEngine->_this();
- _NS->Register( obj ,"/SalomeAppEngine");
+ try
+ {
+ MESSAGE("SalomeApp_Engine thread started");
+ SalomeApp_Engine_i* anEngine = new SalomeApp_Engine_i();
+ PortableServer::ObjectId_var id =_root_poa->activate_object( anEngine );
+ MESSAGE("poa->activate_object( SalomeApp_Engine )");
- }
- catch (CORBA::SystemException&)
- {
- INFOS("Caught CORBA::SystemException.");
- }
- catch (CORBA::Exception&)
- {
- INFOS("Caught CORBA::Exception.");
- }
- catch (...)
- {
- INFOS("Caught unknown exception.");
- }
+ CORBA::Object_var obj = anEngine->_this();
+ anEngine->_remove_ref();
+ _NS->Register( obj ,"/SalomeAppEngine");
+
+ }
+ catch (CORBA::SystemException&)
+ {
+ INFOS("Caught CORBA::SystemException.");
+ }
+ catch (CORBA::Exception&)
+ {
+ INFOS("Caught CORBA::Exception.");
+ }
+ catch (...)
+ {
+ INFOS("Caught unknown exception.");
+ }
}
void Session_ServerThread::ActivateSession(int argc,
- char ** argv)
+ char ** argv)
{
MESSAGE("Session_ServerThread::ActivateSession() not implemented!");
}
-/*!
- constructor
+/*!
+ constructor
*/
Session_SessionThread::Session_SessionThread(int argc,
- char** argv,
- CORBA::ORB_ptr orb,
- PortableServer::POA_ptr poa,
- QMutex* GUIMutex,
- QWaitCondition* GUILauncher)
-: Session_ServerThread(argc, argv, orb, poa),
- _GUIMutex( GUIMutex ),
- _GUILauncher( GUILauncher )
+ char** argv,
+ CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa,
+ QMutex* GUIMutex,
+ QWaitCondition* GUILauncher)
+ : Session_ServerThread(argc, argv, orb, poa),
+ _GUIMutex( GUIMutex ),
+ _GUILauncher( GUILauncher )
{
}
-/*!
- destructor
+/*!
+ destructor
*/
Session_SessionThread::~Session_SessionThread()
{
}
void Session_SessionThread::ActivateSession(int argc,
- char ** argv)
+ char ** argv)
{
- try
- {
- INFOS("Session thread started");
- SALOME_Session_i * mySALOME_Session
- = new SALOME_Session_i(argc, argv, _orb, _root_poa, _GUIMutex, _GUILauncher) ;
- PortableServer::ObjectId_var mySALOME_Sessionid
- = _root_poa->activate_object(mySALOME_Session);
- INFOS("poa->activate_object(mySALOME_Session)");
-
- CORBA::Object_var obj = mySALOME_Session->_this();
- CORBA::String_var sior(_orb->object_to_string(obj));
-
- mySALOME_Session->NSregister();
- }
- catch (CORBA::SystemException&)
- {
- INFOS("Caught CORBA::SystemException.");
- }
- catch (CORBA::Exception&)
- {
- INFOS("Caught CORBA::Exception.");
- }
- catch (...)
- {
- INFOS("Caught unknown exception.");
- }
+ try
+ {
+ MESSAGE("Session thread started");
+ SALOME_Session_i * mySALOME_Session
+ = new SALOME_Session_i(argc, argv, _orb, _root_poa, _GUIMutex, _GUILauncher) ;
+ PortableServer::ObjectId_var mySALOME_Sessionid
+ = _root_poa->activate_object(mySALOME_Session);
+ MESSAGE("poa->activate_object(mySALOME_Session)");
+
+ CORBA::Object_var obj = mySALOME_Session->_this();
+ CORBA::String_var sior(_orb->object_to_string(obj));
+ mySALOME_Session->_remove_ref();
+
+ mySALOME_Session->NSregister();
+ }
+ catch (CORBA::SystemException&)
+ {
+ INFOS("Caught CORBA::SystemException.");
+ }
+ catch (CORBA::Exception&)
+ {
+ INFOS("Caught CORBA::Exception.");
+ }
+ catch (...)
+ {
+ INFOS("Caught unknown exception.");
+ }
}
#ifndef _SESSION_SERVERTHREAD_HXX_
#define _SESSION_SERVERTHREAD_HXX_
+#include <SALOME_Session.hxx>
+
#include <CORBA.h>
#include <string>
void WaitForServerReadiness(string serverName);
-class Session_ServerThread
+class SESSION_EXPORT Session_ServerThread
{
public:
static const int NB_SRV_TYP;
};
-class Session_SessionThread : public Session_ServerThread
+class SESSION_EXPORT Session_SessionThread : public Session_ServerThread
{
public:
Session_SessionThread() {}
#include "SUIT_Session.h"
#include "SUIT_Application.h"
+#include "SUIT_Desktop.h"
#include <qapplication.h>
_poa = PortableServer::POA::_duplicate(poa) ;
_GUIMutex = GUIMutex;
_GUILauncher = GUILauncher;
+ _NS = new SALOME_NamingService(_orb);
//MESSAGE("constructor end");
}
*/
SALOME_Session_i::~SALOME_Session_i()
{
+ delete _NS;
//MESSAGE("destructor end");
}
*/
void SALOME_Session_i::NSregister()
{
- SALOME::Session_ptr pSession = SALOME::Session::_narrow(_this());
+ CORBA::Object_var obref=_this();
+ SALOME::Session_var pSession = SALOME::Session::_narrow(obref);
try
{
- _NS = new SALOME_NamingService(_orb);
_NS->Register(pSession, "/Kernel/Session");
}
catch (ServiceUnreachable&)
return false;
}
+
+void SALOME_Session_i::emitMessage(const char* theMessage)
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent(const char * msg) {
+ _msg = msg;
+ }
+ virtual void Execute() {
+ SUIT_Session::session()->activeApplication()->desktop()->emitMessage(_msg);
+ }
+ private:
+ const char* _msg;
+ };
+ if ( SUIT_Session::session() ) {
+ if ( SUIT_Session::session()->activeApplication() ) {
+ if ( SUIT_Session::session()->activeApplication()->desktop() ) {
+ ProcessVoidEvent( new TEvent(theMessage) );
+ }
+ }
+ }
+}
+
+void SALOME_Session_i::emitMessageOneWay(const char* theMessage)
+{
+ emitMessage(theMessage);
+}
#ifndef _SESSION_SESSION_I_HXX_
#define _SESSION_SESSION_I_HXX_
+#include <SALOME_Session.hxx>
+
#include <qthread.h>
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SALOME_Session)
class SALOME_NamingService;
-class SALOME_Session_i: public virtual POA_SALOME::Session,
- public virtual PortableServer::RefCountServantBase
+class SESSION_EXPORT SALOME_Session_i: public virtual POA_SALOME::Session,
+ public virtual PortableServer::ServantBase
{
public:
SALOME_Session_i(int argc,
void NSregister();
CORBA::Long GetActiveStudyId();
-
+
void ping(){};
+ CORBA::Long getPID() { return (CORBA::Long)getpid(); };
//! Restors a visual state of the study at theSavePoint
bool restoreVisualState(CORBA::Long theSavePoint);
+ //! Emit a qt signal from the session GUI desktop window.
+ void emitMessage(const char* theMessage);
+ void emitMessageOneWay(const char* theMessage);
+
protected:
//! Naming service interface
+++ /dev/null
-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
-
--- /dev/null
+# 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
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# Libraries targets
+lib_LTLIBRARIES = libSalomeStyle.la
+
+libSalomeStyle_la_SOURCES = SalomeStyle.cxx
+
+libSalomeStyle_la_CPPFLAGS=$(QT_INCLUDES)
+
+libSalomeStyle_la_LDFLAGS=$(QT_MT_LIBS)
+
+EXTRA_DIST+=SalomeStyle.h
+
+install-exec-hook:
+ mkdir -p $(bindir)/styles
+ (cd $(bindir)/styles; ln -sf ../../../lib@LIB_LOCATION_SUFFIX@/salome/libSalomeStyle.so libSalomeStyle.so;)
+
+uninstall-hook:
+ rm -f $(bindir)/styles/libSalomeStyle.so
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : SalomeApp
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS=
-
-# .po files to transform in .qm
-PO_FILES =
-
-# Libraries targets
-LIB = libSalomeStyle.la
-
-LIB_SRC= SalomeStyle.cxx
-
-LIB_MOC =
-
-LIB_CLIENT_IDL =
-
-RESOURCES_FILES =
-
-CPPFLAGS+=$(QT_INCLUDES)
-
-LDFLAGS+=$(QT_MT_LIBS)
-LIBS+=
-
-# create $(top_builddir)/src/Session/styles directory and copy libSalomeStyle.so there
-LIB_PLUGINDIR = $(top_builddir)/src/Session/styles
-LIB_PLUGINLIB = $(patsubst %.la, $(LIB_PLUGINDIR)/%.so, $(filter %.la, $(LIB)))
-
-lib: $(LIB) $(LIB_PLUGINDIR) $(LIB_PLUGINLIB)
-
-$(LIB_PLUGINDIR):
- mkdir -p $@
-
-$(LIB_PLUGINLIB): $(LIB_PLUGINDIR)/%.so: .libs/%.so
- -$(RM) $@
- ln -sf $(CURDIR)/$< $@ || true
-
-# do the same in install step
-INSTALL_PLUGINDIR = $(bindir)/styles
-INSTALL_COPYLIB = $(patsubst %.la, $(INSTALL_PLUGINDIR)/%.so, $(filter %.la, $(LIB)))
-
-install: $(INSTALL_PLUGINDIR) $(INSTALL_COPYLIB)
-
-$(INSTALL_PLUGINDIR):
- mkdir -p $@
-
-$(INSTALL_COPYLIB):
- (cd $(bindir)/styles; ln -sf $(patsubst %.la, ../../../lib@LIB_LOCATION_SUFFIX@/salome/%.so, $(filter %.la, $(LIB))) $@) || true
-
-@CONCLUDE@
-
int textW = flags & Style_Horizontal ? rt.height() : rt.width();
int textH = flags & Style_Horizontal ? rt.width() : rt.height();
- QString title = titleText( wnd->caption(), textW, p->fontMetrics() );
-
- if ( wnd )
+ QFont old_font = p->font(), f = old_font;
+
+ QString title = titleText( wnd->caption(), textW, textH, f );
+ p->setFont( f );
+ if ( wnd )
{
- QColorGroup cgroup = wnd->isActiveWindow() ? wnd->palette().active() : wnd->palette().inactive();
- p->setPen( cgroup.highlightedText() );
+ QColorGroup cgroup = wnd->isActiveWindow() ? wnd->palette().active() : wnd->palette().inactive();
+ p->setPen( cgroup.highlightedText() );
- if ( flags & Style_Horizontal )
+ if ( flags & Style_Horizontal )
{
- p->rotate( 270.0 );
- p->translate( -(rt.height()+rt.y()), (rt.width()-rt.x()) );
- p->drawText( 0, 0, title );
- }
+ p->rotate( 270.0 );
+ p->translate( -(rt.height()+rt.y()), (rt.width()-rt.x()) );
+ p->drawText( 0, 0, title );
+ }
else
- p->drawText( 2, 2, textW, textH, AlignLeft, title );
- }
+ p->drawText( 2, 2, textW, textH, AlignLeft, title );
+ }
+ p->setFont( old_font );
}
break;
}
\param w - possible width
\param fm - font metrics
*/
-QString SalomeStyle::titleText( const QString& txt, const int W, const QFontMetrics& fm ) const
+QString SalomeStyle::titleText( const QString& txt, const int W, const int H, QFont& f ) const
{
QString res = txt.stripWhiteSpace();
+ QFontMetrics fm( f );
+ while( fm.height() > H && f.pointSize()>1 )
+ {
+ f.setPointSize( f.pointSize()-1 );
+ fm = QFontMetrics( f );
+ }
+
if ( fm.width( res ) > W )
{
QString end( "..." );
void drawGradient( QPainter*, const QRect&, const QColor&,
const QColor&, const Direction, gradient_func ) const;
- QString titleText( const QString&, const int, const QFontMetrics& ) const;
+ QString titleText( const QString&, const int, const int, QFont& f ) const;
private:
QWidget* myTitleParent;
--- /dev/null
+# 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$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libToolsGUI.la
+
+salomeinclude_HEADERS= \
+ ToolsGUI.h \
+ ToolsGUI_RegWidget.h \
+ ToolsGUI_CatalogGeneratorDlg.h
+
+dist_libToolsGUI_la_SOURCES= \
+ ToolsGUI_CatalogGeneratorDlg.cxx \
+ ToolsGUI_HelpWindow.cxx \
+ ToolsGUI_RegWidget.cxx \
+ ToolsGUI_IntervalWindow.cxx \
+ ToolsGUI.cxx
+
+EXTRA_DIST+=
+
+MOC_FILES= \
+ ToolsGUI_CatalogGeneratorDlg_moc.cxx \
+ ToolsGUI_RegWidget_moc.cxx \
+ ToolsGUI_HelpWindow_moc.cxx \
+ ToolsGUI_IntervalWindow_moc.cxx
+
+nodist_libToolsGUI_la_SOURCES= $(MOC_FILES)
+
+# .po files to transform in .qm
+nodist_salomeres_DATA= \
+ ToolsGUI_icons.qm \
+ ToolsGUI_msg_en.qm
+
+libToolsGUI_la_CPPFLAGS = $(QT_INCLUDES) $(CAS_CPPFLAGS) $(BOOST_CPPFLAGS) \
+ @KERNEL_CXXFLAGS@ @CORBA_CXXFLAGS@ @CORBA_INCLUDES@ \
+ -I$(top_builddir)/salome_adm/unix -I$(top_builddir)/idl \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT
+libToolsGUI_la_LDFLAGS = $(QT_MT_LIBS) ../SUIT/libsuit.la $(CAS_KERNEL) $(KERNEL_LDFLAGS) \
+ -lSalomeNS -lOpUtil $(top_builddir)/idl/libSalomeIDLGUI.so
+++ /dev/null
-# 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
-
-# .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
-
-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@
-
class ToolsGUI_HelpWindow : public QMainWindow
{
+ Q_OBJECT
+
public:
ToolsGUI_HelpWindow( QWidget* parent = 0, const char* name = 0);
~ToolsGUI_HelpWindow();
class ToolsGUI_IntervalWindow : public QDialog
{
+ Q_OBJECT
+
public:
ToolsGUI_IntervalWindow( QWidget* parent = 0 );
~ToolsGUI_IntervalWindow();
// Recuperation de la reference de l'objet
CORBA::Object_var object = 0 ;
try
- {
- SCRUTE(registryName) ;
- object = naming.Resolve( registryName ) ;
- if(CORBA::is_nil(object)) throw CommException( "unable to find the RegistryService" ) ;
- }
- catch( const ServiceUnreachable &ex )
- {
- MESSAGE( ex.what() )
- exit( EXIT_FAILURE ) ;
- }
- catch( const CORBA::Exception &exx )
- {
- exit( EXIT_FAILURE ) ;
- }
-
+ {
+ SCRUTE(registryName) ;
+ object = naming.Resolve( registryName ) ;
+ if(CORBA::is_nil(object)) throw CommException( "unable to find the RegistryService" ) ;
+ }
+ catch( const ServiceUnreachable& ex )
+ {
+ MESSAGE( ex.what() )
+ exit( EXIT_FAILURE ) ;
+ }
+ catch( const CORBA::Exception& )
+ {
+ exit( EXIT_FAILURE ) ;
+ }
+
// Specialisation de l'objet generique
-
+
return Registry::Components::_narrow( object ) ;
}
QString a = QString( "<hr><h2>" ) + tr( "Code" ) + QString( " : " );
a.append( QString( c_info.name ) );
a.append( "</h1><hr><br>" );
+ a.append( "<code>" ); // ASV: 28.07.06 : added <code> 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( QString::number( int( c_info.difftime ) ) ) );
a.append( QString( " " ) + tr( "seconds" ) + QString( ")<br>" ) );
}
+ a.append( "</code>" ); // ASV: 28.07.06 : added <code> tags to make the text font be
+ // fixed width (looks much better on Windows)
END_OF("setlongText");
return a;
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();
// Try CSF_SaloameResources env.var directory ( or directory list )
cenv = getenv( "CSF_SalomeResources" );
if ( cenv ) {
- dir.sprintf( "%s", cenv );
- if ( !dir.isEmpty() ) {
- QStringList dirList = QStringList::split( SEPARATOR, dir, false ); // skip empty entries
- for ( int i = 0; i < dirList.count(); i++ ) {
- QFileInfo fileInfo( addSlash( dirList[ i ] ) + filename );
- if ( fileInfo.isFile() && fileInfo.exists() )
- return fileInfo.filePath();
+ dir.sprintf( "%s", cenv );
+ if ( !dir.isEmpty() )
+ {
+ QStringList dirList = QStringList::split( SEPARATOR, dir, false ); // skip empty entries
+ for ( int i = 0; i < (int)dirList.count(); i++ )
+ {
+ QFileInfo fileInfo( addSlash( dirList[ i ] ) + filename );
+ if ( fileInfo.isFile() && fileInfo.exists() )
+ return fileInfo.filePath();
}
}
}
return filename;
}
+
QString addSlash( const QString& path )
{
return Qtx::addSlash( path );
-// if (!path.isNull()) {
-//#ifdef WNT
-// QChar slash ('\\');
-//#else
-// QChar slash ('/');
-//#endif
-// if ( path.at(path.length()-1) != slash )
-// return path + slash;
-// }
-// return path;
}
// Module : SALOME
// $Header$
-# ifndef __REGWIDGET_H__
-# define __REGWIDGET_H__
-# include <qapplication.h>
-# include <qmainwindow.h>
+#ifndef __REGWIDGET_H__
+#define __REGWIDGET_H__
+#include <qapplication.h>
+#include <qmainwindow.h>
#include <SALOMEconfig.h>
#include CORBA_CLIENT_HEADER(SALOME_Registry)
class ToolsGUI_HelpWindow;
class ToolsGUI_IntervalWindow;
-class Standard_EXPORT ToolsGUI_InfoWindow : public QMainWindow {
+class Standard_EXPORT ToolsGUI_InfoWindow : public QMainWindow
+{
+ Q_OBJECT
+
public:
ToolsGUI_InfoWindow( QWidget* parent = 0, const char* name = 0);
QTextView* myTextView;
};
-class Standard_EXPORT ToolsGUI_RegWidget : public QMainWindow
+class Standard_EXPORT ToolsGUI_RegWidget : public QMainWindow
{
-
Q_OBJECT
public:
static ToolsGUI_RegWidget* myRegWidgetPtr;
};
-# endif /* # ifndef __REGWIDGET_H__ */
-
-
-
-
-
-
-
-
-
+#endif
--- /dev/null
+# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# File : Makefile.in
+# Author : Vladimir Klyachin (OCN)
+# Module : VTKViewer
+# $Header$
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+lib_LTLIBRARIES = libVTKViewer.la
+
+salomeinclude_HEADERS= \
+ VTKViewer.h \
+ VTKViewer_CellLocationsArray.h \
+ VTKViewer_Actor.h \
+ VTKViewer_ExtractUnstructuredGrid.h \
+ VTKViewer_ConvexTool.h \
+ VTKViewer_Filter.h \
+ VTKViewer_GeometryFilter.h \
+ VTKViewer_AppendFilter.h \
+ VTKViewer_Algorithm.h \
+ VTKViewer_InteractorStyle.h \
+ VTKViewer_RenderWindow.h \
+ VTKViewer_RenderWindowInteractor.h \
+ VTKViewer_ShrinkFilter.h \
+ VTKViewer_TransformFilter.h \
+ VTKViewer_Transform.h \
+ VTKViewer_Trihedron.h \
+ VTKViewer_Utilities.h \
+ VTKViewer_ViewManager.h \
+ VTKViewer_ViewModel.h \
+ VTKViewer_ViewWindow.h \
+ VTKViewer_Functor.h
+
+dist_libVTKViewer_la_SOURCES= \
+ VTKViewer_CellLocationsArray.cxx \
+ VTKViewer_Actor.cxx \
+ VTKViewer_ExtractUnstructuredGrid.cxx \
+ VTKViewer_Filter.cxx \
+ VTKViewer_GeometryFilter.cxx \
+ VTKViewer_AppendFilter.cxx \
+ VTKViewer_InteractorStyle.cxx \
+ VTKViewer_RenderWindow.cxx \
+ VTKViewer_RenderWindowInteractor.cxx \
+ VTKViewer_ShrinkFilter.cxx \
+ VTKViewer_Transform.cxx \
+ VTKViewer_TransformFilter.cxx \
+ VTKViewer_Trihedron.cxx \
+ VTKViewer_Utilities.cxx \
+ VTKViewer_ViewManager.cxx \
+ VTKViewer_ViewModel.cxx \
+ VTKViewer_ConvexTool.cxx \
+ VTKViewer_ViewWindow.cxx
+
+MOC_FILES= \
+ VTKViewer_RenderWindow_moc.cxx \
+ VTKViewer_RenderWindowInteractor_moc.cxx \
+ VTKViewer_ViewManager_moc.cxx \
+ VTKViewer_ViewModel_moc.cxx \
+ VTKViewer_ViewWindow_moc.cxx
+nodist_libVTKViewer_la_SOURCES= $(MOC_FILES)
+
+dist_salomeres_DATA=\
+ resources/view_back.png \
+ resources/view_bottom.png \
+ resources/view_camera_dump.png \
+ resources/view_fitall.png \
+ resources/view_fitarea.png \
+ resources/view_front.png \
+ resources/view_glpan.png \
+ resources/view_graduated_axes.png \
+ resources/view_left.png \
+ resources/view_pan.png \
+ resources/view_reset.png \
+ resources/view_right.png \
+ resources/view_rotate.png \
+ resources/view_scaling.png \
+ resources/view_top.png \
+ resources/view_triedre.png \
+ resources/view_update_rate.png \
+ resources/view_zoom.png \
+ resources/view_rotation_point.png
+
+nodist_salomeres_DATA= \
+ VTKViewer_images.qm \
+ VTKViewer_msg_en.qm
+
+libVTKViewer_la_CPPFLAGS=$(QT_INCLUDES) $(VTK_INCLUDES) $(CAS_CPPFLAGS) \
+ -I$(srcdir)/../Qtx -I$(srcdir)/../SUIT
+libVTKViewer_la_LDFLAGS=$(VTK_LIBS) $(QT_MT_LIBS) $(CAS_KERNEL) \
+ ../Qtx/libqtx.la ../SUIT/libsuit.la
+
+# Executable
+
+bin_PROGRAMS = VTKViewer
+
+dist_VTKViewer_SOURCES=VTKViewer.cxx
+
+VTKViewer_CPPFLAGS=$(libVTKViewer_la_CPPFLAGS)
+VTKViewer_LDADD=libVTKViewer.la $(libVTKViewer_la_LDFLAGS)
+
+++ /dev/null
-# Copyright (C) 2005 CEA/DEN, EDF R&D, OPEN CASCADE, PRINCIPIA R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-# File : Makefile.in
-# Author : Vladimir Klyachin (OCN)
-# Module : VTKViewer
-# $Header$
-
-top_srcdir=@top_srcdir@
-top_builddir=../..
-srcdir=@srcdir@
-VPATH=.:@srcdir@:@srcdir@/resources
-
-
-@COMMENCE@
-
-# header files
-EXPORT_HEADERS= \
- VTKViewer.h \
- VTKViewer_CellLocationsArray.h \
- VTKViewer_Actor.h \
- VTKViewer_ExtractUnstructuredGrid.h \
- VTKViewer_ConvexTool.h \
- VTKViewer_Filter.h \
- VTKViewer_GeometryFilter.h \
- VTKViewer_AppendFilter.h \
- VTKViewer_Algorithm.h \
- VTKViewer_InteractorStyle.h \
- VTKViewer_PassThroughFilter.h \
- VTKViewer_RenderWindow.h \
- VTKViewer_RenderWindowInteractor.h \
- VTKViewer_ShrinkFilter.h \
- VTKViewer_TransformFilter.h \
- VTKViewer_Transform.h \
- VTKViewer_Trihedron.h \
- VTKViewer_Utilities.h \
- VTKViewer_VectorText.h \
- VTKViewer_ViewManager.h \
- VTKViewer_ViewModel.h \
- VTKViewer_ViewWindow.h \
- VTKViewer_Functor.h
-
-PO_FILES = \
- VTKViewer_images.po \
- VTKViewer_msg_en.po
-
-# Libraries targets
-LIB = libVTKViewer.la
-
-LIB_SRC= \
- VTKViewer_CellLocationsArray.cxx \
- VTKViewer_Actor.cxx \
- VTKViewer_ExtractUnstructuredGrid.cxx \
- VTKViewer_Filter.cxx \
- VTKViewer_GeometryFilter.cxx \
- VTKViewer_AppendFilter.cxx \
- VTKViewer_InteractorStyle.cxx \
- VTKViewer_PassThroughFilter.cxx \
- VTKViewer_RenderWindow.cxx \
- VTKViewer_RenderWindowInteractor.cxx \
- VTKViewer_ShrinkFilter.cxx \
- VTKViewer_Transform.cxx \
- VTKViewer_TransformFilter.cxx \
- VTKViewer_Trihedron.cxx \
- VTKViewer_Utilities.cxx \
- VTKViewer_VectorText.cxx \
- VTKViewer_ViewManager.cxx \
- VTKViewer_ViewModel.cxx \
- VTKViewer_ConvexTool.cxx \
- VTKViewer_ViewWindow.cxx
-
-LIB_MOC = \
- VTKViewer_RenderWindow.h \
- VTKViewer_RenderWindowInteractor.h \
- VTKViewer_ViewManager.h \
- VTKViewer_ViewModel.h \
- VTKViewer_ViewWindow.h
-
-BIN = VTKViewer
-
-CPPFLAGS+=$(QT_INCLUDES) $(VTK_INCLUDES) $(OCC_INCLUDES)
-
-LDFLAGS+=$(VTK_LIBS) $(QT_MT_LIBS) $(CAS_KERNEL) -lqtx -lsuit
-
-LDFLAGSFORBIN=$(LDFLAGS)
-
-@CONCLUDE@
\ No newline at end of file
// $Header$
#include "VTKViewer_Actor.h"
-#include "VTKViewer_CellRectPicker.h"
#include "VTKViewer_ExtractUnstructuredGrid.h"
#include "VTKViewer_ConvexTool.h"
#include "VTKViewer_Filter.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_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_Transform.h"
#include "VTKViewer_TransformFilter.h"
-#include "VTKViewer_PassThroughFilter.h"
#include "VTKViewer_GeometryFilter.h"
// VTK Includes
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
+#include <vtkPassThroughFilter.h>
using namespace std;
myPolygonOffsetUnits);
for(int i = 0; i < 6; i++)
- myPassFilter.push_back(VTKViewer_PassThroughFilter::New());
+ myPassFilter.push_back(vtkPassThroughFilter::New());
}
/*!
unsigned long mTime = this->Superclass::GetMTime();
unsigned long time = myTransformFilter->GetMTime();
mTime = ( time > mTime ? time : mTime );
- if(vtkDataSet *aDataSet = myPassFilter[0]->GetInput()){
+ if(vtkDataSet *aDataSet = dynamic_cast<vtkDataSet*>(myPassFilter[0]->GetInput())){ // bad usage of GetInput
time = aDataSet->GetMTime();
mTime = ( time > mTime ? time : mTime );
}
class vtkCamera;
class vtkProperty;
class vtkRenderer;
+class vtkPassThroughFilter;
class VTKViewer_Transform;
class VTKViewer_GeometryFilter;
class VTKViewer_TransformFilter;
-class VTKViewer_PassThroughFilter;
extern int VTKViewer_POINT_SIZE;
extern int VTKViewer_LINE_WIDTH;
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*! \class vtkLODActor
* \brief For more information see <a href="http://www.vtk.org/">VTK documentation</a>
*/
bool myStoreMapping;
VTKViewer_GeometryFilter *myGeomFilter;
VTKViewer_TransformFilter *myTransformFilter;
- std::vector<VTKViewer_PassThroughFilter*> myPassFilter;
+ std::vector<vtkPassThroughFilter*> myPassFilter;
int myRepresentation;
vtkProperty *myProperty;
bool myIsHighlighted;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif // VTKVIEVER_ACTOR_H
#include <vtkObjectFactory.h>
#include <vtkPointData.h>
#include <vtkUnstructuredGrid.h>
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
#include <vtkPoints.h>
void
VTKViewer_AppendFilter
-::SetPoints(vtkPoints* thePoints)
+::SetSharedPointsDataSet(vtkPointSet* thePointsDataSet)
{
- if(GetPoints() == thePoints)
+ if(GetSharedPointsDataSet() == thePointsDataSet)
return;
- myPoints = thePoints;
+ mySharedPointsDataSet = thePointsDataSet;
- this->Modified();
+ Modified();
}
-vtkPoints*
+vtkPointSet*
VTKViewer_AppendFilter
-::GetPoints()
+::GetSharedPointsDataSet()
{
- return myPoints.GetPointer();
+ return mySharedPointsDataSet.GetPointer();
}
-void
+int
VTKViewer_AppendFilter
-::Execute()
+::RequestData(
+ vtkInformation *request,
+ vtkInformationVector **inputVector,
+ vtkInformationVector *outputVector)
{
- if(myPoints.GetPointer())
- MakeOutput();
+ int aRet = 0;
+ if(GetSharedPointsDataSet())
+ aRet = MakeOutput(request,inputVector,outputVector);
else
- Superclass::Execute();
+ aRet = Superclass::RequestData(request,inputVector,outputVector);
if(myDoMappingFlag)
DoMapping();
+
+ return aRet;
}
vtkIdType aPntStartId = 0;
vtkIdType aCellStartId = 0;
- for(vtkIdType aDataSetId = 0; aDataSetId < this->NumberOfInputs; ++aDataSetId){
- vtkDataSet* aDataSet = (vtkDataSet *)(this->Inputs[aDataSetId]);
+ for(vtkIdType aDataSetId = 0; aDataSetId < this->GetNumberOfInputPorts(); ++aDataSetId){
+ vtkDataSet* aDataSet = (vtkDataSet *)(this->GetInput(aDataSetId));
// Do mapping of the nodes
- if(!myPoints.GetPointer()){
+ if(!GetSharedPointsDataSet()){
vtkIdType aNbPnts = aDataSet->GetNumberOfPoints();
myNodeRanges.push_back(aPntStartId + aNbPnts);
aPntStartId += aNbPnts;
::GetPointOutputID(vtkIdType theInputID,
vtkIdType theInputDataSetID)
{
- if(myPoints.GetPointer())
+ if(GetSharedPointsDataSet())
return theInputID;
return GetOutputID(theInputID,theInputDataSetID,myNodeRanges);
::GetCellOutputID(vtkIdType theInputID,
vtkIdType theInputDataSetID)
{
- if(myPoints.GetPointer())
+ if(GetSharedPointsDataSet())
return theInputID;
return GetOutputID(theInputID,theInputDataSetID,myCellRanges);
vtkIdType& theStartID,
vtkIdType& theInputDataSetID)
{
- if(myPoints.GetPointer()) {
+ if(GetSharedPointsDataSet()) {
theStartID = theInputDataSetID = 0;
theInputID = theOutputID;
return;
}
-void
+int
VTKViewer_AppendFilter
-::MakeOutput()
+::MakeOutput(
+ vtkInformation *vtkNotUsed(request),
+ vtkInformationVector **inputVector,
+ vtkInformationVector *outputVector)
{
int idx;
vtkIdType numPts, numCells, newCellId, cellId;
vtkCellData *cd;
vtkIdList *ptIds;
vtkDataSet *ds;
- vtkUnstructuredGrid *output = this->GetOutput();
+ int numInputs = this->GetNumberOfInputConnections(0);
+
+ // get the output info object
+ vtkInformation *outInfo = outputVector->GetInformationObject(0);
+
+ // get the ouptut
+ vtkUnstructuredGrid *output = vtkUnstructuredGrid::SafeDownCast(
+ outInfo->Get(vtkDataObject::DATA_OBJECT()));
//
- numPts = myPoints->GetNumberOfPoints();
+ numPts = mySharedPointsDataSet->GetNumberOfPoints();
if (numPts < 1) {
- return;
+ return 0;
}
//
numCells = 0;
- for (idx = 0; idx < this->NumberOfInputs; ++idx) {
- ds = (vtkDataSet *)(this->Inputs[idx]);
+ vtkInformation *inInfo = 0;
+ for (idx = 0; idx < numInputs;++idx) {
+ inInfo = inputVector[0]->GetInformationObject(idx);
+ ds = 0;
+ if (inInfo)
+ {
+ ds = vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ }
if (ds != NULL) {
if ( ds->GetNumberOfPoints() <= 0 && ds->GetNumberOfCells() <= 0 ) {
continue; //no input, just skip
}//if non-empty dataset
}//for all inputs
if (numCells < 1) {
- return;
+ return 0;
}
//
// Now can allocate memory
// Append each input dataset together
//
// 1.points
- output->SetPoints(myPoints.GetPointer());
+ output->SetPoints(GetSharedPointsDataSet()->GetPoints());
+ output->GetPointData()->PassData(GetSharedPointsDataSet()->GetPointData());
// 2.cells
- for (idx = 0; idx < this->NumberOfInputs; ++idx) {
- ds = (vtkDataSet *)(this->Inputs[idx]);
+ for (idx = 0; idx < numInputs; ++idx) {
+ inInfo = inputVector[0]->GetInformationObject(idx);
+ ds = 0;
+ if (inInfo)
+ {
+ ds = vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ }
if (ds != NULL) {
+
numCells = ds->GetNumberOfCells();
cd = ds->GetCellData();
// copy cell and cell data
}
//
ptIds->Delete();
+ return 1;
}
+int VTKViewer_AppendFilter::FillInputPortInformation(int, vtkInformation *info)
+{
+ info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkDataSet");
+ info->Set(vtkAlgorithm::INPUT_IS_REPEATABLE(), 1);
+ return 1;
+}
#include <vector>
#include <map>
-class vtkPoints;
+class vtkPointSet;
+
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
/*! \brief This class used same as vtkAppendFilter. See documentation on VTK for more information.
*/
bool DoMappingFlag() const;
void
- SetPoints(vtkPoints* thePoints);
+ SetSharedPointsDataSet(vtkPointSet* thePointsDataSet);
- vtkPoints*
- GetPoints();
+ vtkPointSet*
+ GetSharedPointsDataSet();
vtkIdType
GetPointOutputID(vtkIdType theInputID,
* \brief Destructor.
*/
~VTKViewer_AppendFilter();
- /*! \fn void Execute();
- * \brief Filter culculation method.
- */
- virtual void Execute();
- //
+
+ // Usual data generation method
+ virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
+
+ virtual int FillInputPortInformation(int port, vtkInformation *info);
+
void DoMapping();
void Reset();
- void MakeOutput();
+ int MakeOutput(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
bool myDoMappingFlag;
TVectorIds myNodeRanges;
TVectorIds myCellRanges;
- vtkSmartPointer<vtkPoints> myPoints;
+ vtkSmartPointer<vtkPointSet> mySharedPointsDataSet;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include "VTKViewer.h"
-#if (VTK_MAJOR_VERSION >= 4) && (VTK_MINOR_VERSION >= 4)
+#if ((VTK_MAJOR_VERSION == 4) && (VTK_MINOR_VERSION >= 4)) || (VTK_MAJOR_VERSION > 4)
# include <vtkIdTypeArray.h>
# define TCellLocationsArray vtkIdTypeArray
#else
+++ /dev/null
-// 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_CellRectPicker.h>
-
-#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 = (d1<d2) ? 1 : 2;
- }
-
- if (result == 0) {
- // test for boundary cells
- for (k = 0; k < tcell->Points->GetNumberOfPoints(); k++) {
- p = tcell->Points->GetPoint(k);
- vtkPlane::GeneralizedProjectPoint(p, orig, dir, pp);
- if (PointInside(pp, aPoints)) {
- result = 1; break;
- }
- }
- if (result && d2<d1) result = 2;
- }
-
- aPoints->Delete();
- 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;
-}
+++ /dev/null
-// 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 <map>
-#include <vector>
-
-/*! \brief Cell data structure*/
-typedef struct {
- vtkIdType cellId;
- int subId;
- float depth;
- float p1[3];
- float p2[3];
-} VTKViewer_CellData;
-
-typedef std::vector<VTKViewer_CellData> VTKViewer_CellDataSet;
-typedef std::map<vtkActor*, VTKViewer_CellDataSet> VTKViewer_ActorDataMap;
-
-class vtkCell;
-class vtkGenericCell;
-class vtkQuad;
-/*!Rectangular cell picker class.*/
-class VTK_EXPORT VTKViewer_CellRectPicker : public VTKViewer_RectPicker
-{
-public:
- /*!Create new instance of CellRectPicker class.*/
- static VTKViewer_CellRectPicker *New();
-
- /*! \fn vtkTypeMacro(VTKViewer_CellRectPicker,VTKViewer_RectPicker);
- * \brief VTK type macros.
- */
- vtkTypeMacro(VTKViewer_CellRectPicker,VTKViewer_RectPicker);
-
- /*! \fn VTKViewer_CellDataSet GetCellData(vtkActor* actor)
- * \brief Get the id of the picked cells.
- * \brief (Notes: use GetActors() to get picked actors list)
- * \param actor - vtkActor pointer
- */
- VTKViewer_CellDataSet GetCellData(vtkActor* actor)
- { return this->ActorData[actor]; }
-
- static int IntersectCells(vtkCell* c1, float d1, vtkCell* c2, float d2, float dir[3]);
-
- static char PointInside(float point[3], vtkPoints* list);
-
-protected:
-
- VTKViewer_CellRectPicker();
- ~VTKViewer_CellRectPicker();
-
- VTKViewer_ActorDataMap ActorData;
-
- virtual float IntersectWithHex(float p1[4][4], float p2[4][4], float tol,
- vtkAssemblyPath *path, vtkProp3D *p,
- vtkAbstractMapper3D *m);
-
- void Initialize();
-
-
- void IncludeCell(vtkDataSet* input, VTKViewer_CellData cellData, VTKViewer_CellDataSet& dalaList);
- void IncludeActor(vtkProp3D* prop, vtkDataSet* input, VTKViewer_CellDataSet& dataList);
-
-private:
- vtkGenericCell *Cell;
- vtkQuad* Quad1;
- vtkQuad* Quad2;
-};
-
-#endif
-
-
#include <set>
#include <map>
+#ifdef WNT
+#include <algorithm>
+#endif
+
#include <vtkUnstructuredGrid.h>
#include <vtkGeometryFilter.h>
#include <vtkDelaunay3D.h>
#include <vtkCell.h>
#include <vtkPlane.h>
#include <vtkMath.h>
+#include <vtkCellArray.h>
+#include <vtkTriangle.h>
+#include <vtkOrderedTriangulator.h>
+
+#ifdef _DEBUG_
+static int DEBUG_TRIA_EXECUTE = 0;
+#else
+static int DEBUG_TRIA_EXECUTE = 0;
+#endif
namespace
{
typedef std::vector<TPolygon> TPolygons;
}
-/*!
- Constructor
-*/
+
+//----------------------------------------------------------------------------
VTKViewer_Triangulator
::VTKViewer_Triangulator():
- myInput(NULL),
- myCellId(-1),
- myShowInside(-1),
- myAllVisible(-1),
- myCellsVisibility(NULL),
- myCellIds(vtkIdList::New())
+ myCellIds(vtkIdList::New()),
+ myFaceIds(vtkIdList::New()),
+ myPoints(vtkPoints::New()),
+ myPointIds(NULL)
{}
-/*!
- Destructor
-*/
+//----------------------------------------------------------------------------
VTKViewer_Triangulator
::~VTKViewer_Triangulator()
{
myCellIds->Delete();
+ myFaceIds->Delete();
+ myPoints->Delete();
+}
+
+
+//----------------------------------------------------------------------------
+vtkPoints*
+VTKViewer_Triangulator
+::InitPoints(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId)
+{
+ myPoints->Reset();
+ myPoints->Modified(); // the VTK bug
+
+ vtkIdType aNumPts;
+ theInput->GetCellPoints(theCellId, aNumPts, myPointIds);
+ if ( aNumPts > 0 ) {
+ vtkFloatingPointType anAbsoluteCoord[3];
+ myPoints->SetNumberOfPoints(aNumPts);
+ vtkPoints *anInputPoints = theInput->GetPoints();
+ for (int aPntId = 0; aPntId < aNumPts; aPntId++) {
+ anInputPoints->GetPoint(myPointIds[aPntId], anAbsoluteCoord);
+ myPoints->SetPoint(aPntId, anAbsoluteCoord);
+ }
+ }
+
+ return myPoints;
+}
+
+
+//----------------------------------------------------------------------------
+vtkIdType
+VTKViewer_Triangulator
+::GetNbOfPoints()
+{
+ return myPoints->GetNumberOfPoints();
+}
+
+
+//----------------------------------------------------------------------------
+vtkIdType
+VTKViewer_Triangulator
+::GetPointId(vtkIdType thePointId)
+{
+ return thePointId;
+}
+
+
+//----------------------------------------------------------------------------
+vtkFloatingPointType
+VTKViewer_Triangulator
+::GetCellLength()
+{
+ vtkFloatingPointType aBounds[6];
+ myPoints->GetBounds(aBounds);
+
+ vtkFloatingPointType aCoordDiff[3];
+ aCoordDiff[0] = (aBounds[1] - aBounds[0]);
+ aCoordDiff[1] = (aBounds[3] - aBounds[2]);
+ aCoordDiff[2] = (aBounds[5] - aBounds[4]);
+
+ return sqrt(aCoordDiff[0]*aCoordDiff[0] +
+ aCoordDiff[1]*aCoordDiff[1] +
+ aCoordDiff[2]*aCoordDiff[2]);
+}
+
+
+//----------------------------------------------------------------------------
+void
+VTKViewer_Triangulator
+::GetCellNeighbors(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId,
+ vtkCell* theFace,
+ vtkIdList* theCellIds)
+{
+ myFaceIds->Reset();
+ vtkIdList *anIdList = theFace->PointIds;
+ myFaceIds->InsertNextId(myPointIds[anIdList->GetId(0)]);
+ myFaceIds->InsertNextId(myPointIds[anIdList->GetId(1)]);
+ myFaceIds->InsertNextId(myPointIds[anIdList->GetId(2)]);
+
+ theInput->GetCellNeighbors(theCellId, myFaceIds, theCellIds);
}
+//----------------------------------------------------------------------------
+vtkIdType
+VTKViewer_Triangulator
+::GetConnectivity(vtkIdType thePntId)
+{
+ return myPointIds[thePntId];
+}
+
+//----------------------------------------------------------------------------
bool
VTKViewer_Triangulator
::Execute(vtkUnstructuredGrid *theInput,
std::vector<vtkIdType>& theVTK2ObjIds,
bool theIsCheckConvex)
{
- myInput = theInput;
- myCellId = theCellId;
- myShowInside = theShowInside;
- myAllVisible = theAllVisible;
- myCellsVisibility = theCellsVisibility;
-
- vtkPoints *aPoints = InitPoints();
+ vtkPoints *aPoints = InitPoints(theInput, theCellId);
vtkIdType aNumPts = GetNbOfPoints();
- //cout<<"Triangulator - aNumPts = "<<aNumPts<<"\n";
+ if(DEBUG_TRIA_EXECUTE) cout<<"Triangulator - aNumPts = "<<aNumPts<<"\n";
if(aNumPts == 0)
return true;
vtkFloatingPointType aPntCoord[3];
for (int aPntId = 0; aPntId < aNumPts; aPntId++) {
aPoints->GetPoint(GetPointId(aPntId),aPntCoord);
- //cout<<"\taPntId = "<<aPntId<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"}\n";
+ if(DEBUG_TRIA_EXECUTE) cout<<"\taPntId = "<<GetPointId(aPntId)<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"}\n";
aCellCenter[0] += aPntCoord[0];
aCellCenter[1] += aPntCoord[1];
aCellCenter[2] += aPntCoord[2];
int aNumFaces = GetNumFaces();
static vtkFloatingPointType EPS = 1.0E-2;
- vtkFloatingPointType aDistEps = aCellLength * EPS;
- //cout<<"\taCellLength = "<<aCellLength<<"; aDistEps = "<<aDistEps<<"\n";
+ vtkFloatingPointType aDistEps = aCellLength/3.0 * EPS;
+ if(DEBUG_TRIA_EXECUTE) cout<<"\taNumFaces = "<<aNumFaces<<"; aCellLength = "<<aCellLength<<"; aDistEps = "<<aDistEps<<"\n";
// To initialize set of points that belong to the cell
typedef std::set<vtkIdType> TPointIds;
for (int aFaceId = 0; aFaceId < aNumFaces; aFaceId++) {
vtkCell* aFace = GetFace(aFaceId);
- GetCellNeighbors(theCellId, aFace, myCellIds);
- if((!myAllVisible && !myCellsVisibility[myCellIds->GetId(0)]) ||
- myCellIds->GetNumberOfIds() <= 0 || myShowInside)
+ GetCellNeighbors(theInput, theCellId, aFace, myCellIds);
+ if((!theAllVisible && !theCellsVisibility[myCellIds->GetId(0)]) ||
+ myCellIds->GetNumberOfIds() <= 0 || theShowInside)
{
TPointIds aPointIds;
vtkIdList *anIdList = aFace->PointIds;
// To get know, if the points of the trinagle were already observed
bool anIsObserved = aFace2PointIds.find(aPointIds) == aFace2PointIds.end();
- //cout<<"\taFaceId = "<<aFaceId<<"; anIsObserved = "<<anIsObserved;
- //cout<<"; aNewPts = {"<<aNewPts[0]<<", "<<aNewPts[1]<<", "<<aNewPts[2]<<"}\n";
+ if(DEBUG_TRIA_EXECUTE) {
+ cout<<"\taFaceId = "<<aFaceId<<"; anIsObserved = "<<anIsObserved;
+ cout<<"; aNewPts = {"<<aNewPts[0]<<", "<<aNewPts[1]<<", "<<aNewPts[2]<<"}\n";
+ }
if(!anIsObserved){
// To get coordinates of the points of the traingle face
aPoints->GetPoint(aNewPts[1],aCoord[1]);
aPoints->GetPoint(aNewPts[2],aCoord[2]);
- // To calculate plane normal
+ /* To calculate plane normal for face (aFace)
+
+
+ ^ aNormal
+ |
+ | ^ aVector01
+ | /
+ /_________> aVector02
+
+
+ */
vtkFloatingPointType aVector01[3] = { aCoord[1][0] - aCoord[0][0],
aCoord[1][1] - aCoord[0][1],
aCoord[1][2] - aCoord[0][2] };
aCoord[2][1] - aCoord[0][1],
aCoord[2][2] - aCoord[0][2] };
+ vtkMath::Normalize(aVector01);
+ vtkMath::Normalize(aVector02);
+
// To calculate the normal for the triangle
vtkFloatingPointType aNormal[3];
vtkMath::Cross(aVector02,aVector01,aNormal);
vtkFloatingPointType aPntCoord[3];
vtkIdType aPntId = *anIter;
aPoints->GetPoint(aPntId,aPntCoord);
+
+ vtkFloatingPointType aVector0Pnt[3] = { aPntCoord[0] - aCoord[0][0],
+ aPntCoord[1] - aCoord[0][1],
+ aPntCoord[2] - aCoord[0][2] };
+
+
+ vtkMath::Normalize(aVector0Pnt);
+
+ vtkFloatingPointType aNormalPnt[3];
+ // calculate aNormalPnt
+ {
+ vtkFloatingPointType aCosPnt01 = vtkMath::Dot(aVector0Pnt,aVector01);
+ vtkFloatingPointType aCosPnt02 = vtkMath::Dot(aVector0Pnt,aVector02);
+ if(aCosPnt01<-1)
+ aCosPnt01 = -1;
+ if(aCosPnt01>1)
+ aCosPnt01 = 1;
+ if(aCosPnt02<-1)
+ aCosPnt02 = -1;
+ if(aCosPnt02>1)
+ aCosPnt02 = 1;
+
+ vtkFloatingPointType aDist01,aDist02;// deflection from Pi/3 angle (equilateral triangle)
+ vtkFloatingPointType aAngPnt01 = fabs(acos(aCosPnt01));
+ vtkFloatingPointType aAngPnt02 = fabs(acos(aCosPnt02));
+
+ /* check that triangle similar to equilateral triangle
+ AOC or COB ?
+ aVector0Pnt = (OC)
+ aVector01 = (OB)
+ aVector02 = (OA)
+
+ B
+ ^ aVector01 C
+ | ^ aVector0Pnt
+ | _____/
+ | ___/
+ |/________> aVector02
+ O A
+ */
+ aDist01 = fabs(aAngPnt01-(vtkMath::Pi())/3.0);
+ aDist02 = fabs(aAngPnt02-(vtkMath::Pi())/3.0);
+
+ // caculate a normal for best triangle
+ if(aDist01 <= aDist02)
+ vtkMath::Cross(aVector0Pnt,aVector01,aNormalPnt);
+ else
+ vtkMath::Cross(aVector0Pnt,aVector02,aNormalPnt);
+
+ }
+
+ vtkMath::Normalize(aNormalPnt);
+
+ if(DEBUG_TRIA_EXECUTE)
+ cout<<"\t\taPntId = "<<aPntId<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"};";
+
vtkFloatingPointType aDist = vtkPlane::DistanceToPlane(aPntCoord,aNormal,aCoord[0]);
- //cout<<"\t\taPntId = "<<aPntId<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"}; aDist = "<<aDist<<"\n";
+ if(DEBUG_TRIA_EXECUTE) cout<<": aDist = "<<aDist;
if(fabs(aDist) < aDistEps){
aPointIds.insert(aPntId);
aCenter[0] += aPntCoord[0];
aCenter[1] += aPntCoord[1];
aCenter[2] += aPntCoord[2];
+ if(DEBUG_TRIA_EXECUTE) cout << "; Added = TRUE" << endl;
+ } else {
+ if(DEBUG_TRIA_EXECUTE) cout << "; Added = FALSE" << endl;
}
}
int aNbPoints = aPointIds.size();
vtkMath::Normalize(aVectorC);
vtkFloatingPointType aDot = vtkMath::Dot(aNormal,aVectorC);
- //cout<<"\t\taNormal = {"<<aNormal[0]<<", "<<aNormal[1]<<", "<<aNormal[2]<<"}";
- //cout<<"; aVectorC = {"<<aVectorC[0]<<", "<<aVectorC[1]<<", "<<aVectorC[2]<<"}\n";
- //cout<<"\t\taDot = "<<aDot<<"\n";
+ if(DEBUG_TRIA_EXECUTE) {
+ cout<<"\t\taNormal = {"<<aNormal[0]<<", "<<aNormal[1]<<", "<<aNormal[2]<<"}";
+ cout<<"; aVectorC = {"<<aVectorC[0]<<", "<<aVectorC[1]<<", "<<aVectorC[2]<<"}\n";
+ cout<<"\t\taDot = "<<aDot<<"\n";
+ }
if(aDot > 0){
aNormal[0] = -aNormal[0];
aNormal[1] = -aNormal[1];
aCoord[0][2] - aCenter[2] };
vtkMath::Normalize(aVector0);
- //cout<<"\t\taCenter = {"<<aCenter[0]<<", "<<aCenter[1]<<", "<<aCenter[2]<<"}";
- //cout<<"; aVector0 = {"<<aVector0[0]<<", "<<aVector0[1]<<", "<<aVector0[2]<<"}\n";
+ if(DEBUG_TRIA_EXECUTE) {
+ cout<<"\t\taCenter = {"<<aCenter[0]<<", "<<aCenter[1]<<", "<<aCenter[2]<<"}";
+ cout<<"; aVector0 = {"<<aVector0[0]<<", "<<aVector0[1]<<", "<<aVector0[2]<<"}\n";
+ }
// To calculate the set of points by face those that belong to the plane
TFace2PointIds aRemoveFace2PointIds;
anIds.begin(),anIds.end(),
std::inserter(anIntersection,anIntersection.begin()));
+
+ if(DEBUG_TRIA_EXECUTE) {
+ cout << "anIntersection:";
+ TPointIds::iterator aII = anIntersection.begin();
+ for(;aII!=anIntersection.end();aII++)
+ cout << *aII << ",";
+ cout << endl;
+ cout << "anIds :";
+ TPointIds::const_iterator aIIds = anIds.begin();
+ for(;aIIds!=anIds.end();aIIds++)
+ cout << *aIIds << ",";
+ cout << endl;
+ }
if(anIntersection == anIds){
aRemoveFace2PointIds.insert(anIds);
}
vtkFloatingPointType aCross[3];
vtkMath::Cross(aVector,aVector0,aCross);
- bool aGreaterThanPi = vtkMath::Dot(aCross,aNormal) < 0;
+ vtkFloatingPointType aCr = vtkMath::Dot(aCross,aNormal);
+ bool aGreaterThanPi = aCr < 0;
vtkFloatingPointType aCosinus = vtkMath::Dot(aVector,aVector0);
- if(aCosinus > 1.0)
+ vtkFloatingPointType anAngle = 0.0;
+ if(aCosinus >= 1.0){
aCosinus = 1.0;
- if(aCosinus < -1.0)
+ } else if (aCosinus <= -1.0){
aCosinus = -1.0;
- static vtkFloatingPointType a2Pi = 2.0 * vtkMath::Pi();
- vtkFloatingPointType anAngle = acos(aCosinus);
- //cout<<"\t\t\taPntId = "<<aPntId<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"}";
- //cout<<"; aGreaterThanPi = "<<aGreaterThanPi<<"; aCosinus = "<<aCosinus<<"; anAngle = "<<anAngle<<"\n";
- if(aGreaterThanPi){
- anAngle = a2Pi - anAngle;
- //cout<<"\t\t\t\tanAngle = "<<anAngle<<"\n";
+ anAngle = vtkMath::Pi();
+ } else {
+ anAngle = acos(aCosinus);
+ if(aGreaterThanPi)
+ anAngle = 2*vtkMath::Pi() - anAngle;
+ }
+
+ if(DEBUG_TRIA_EXECUTE) {
+ cout << "\t\t\t vtkMath::Dot(aCross,aNormal)="<<aCr<<endl;
+ cout<<"\t\t\taPntId = "<<aPntId<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"}";
+ cout<<"; aGreaterThanPi = "<<aGreaterThanPi<<"; aCosinus = "<<aCosinus<<"; anAngle = "<<anAngle<<"\n";
}
aSortedPointIds[anAngle] = aPntId;
}
::TConnectivities aConnectivities(aNumFacePts);
TSortedPointIds::const_iterator anIter = aSortedPointIds.begin();
TSortedPointIds::const_iterator anEndIter = aSortedPointIds.end();
+ if(DEBUG_TRIA_EXECUTE) cout << "Polygon:";
for(vtkIdType anId = 0; anIter != anEndIter; anIter++, anId++){
vtkIdType aPntId = anIter->second;
aConnectivities[anId] = GetConnectivity(aPntId);
+ if(DEBUG_TRIA_EXECUTE) cout << aPntId << ",";
}
+ if(DEBUG_TRIA_EXECUTE) cout << endl;
aPolygons.push_back(::TPolygon(aConnectivities,aCenter,aNormal));
}
}
}
}
-
if(aPolygons.empty())
return true;
::TPolygon& aPolygon = aPolygons[aPolygonId];
vtkFloatingPointType* aNormal = aPolygon.myNormal;
vtkFloatingPointType* anOrigin = aPolygon.myOrigin;
- //cout<<"\taPolygonId = "<<aPolygonId<<"\n";
- //cout<<"\t\taNormal = {"<<aNormal[0]<<", "<<aNormal[1]<<", "<<aNormal[2]<<"}";
- //cout<<"; anOrigin = {"<<anOrigin[0]<<", "<<anOrigin[1]<<", "<<anOrigin[2]<<"}\n";
+ if(DEBUG_TRIA_EXECUTE) {
+ cout<<"\taPolygonId = "<<aPolygonId<<"\n";
+ cout<<"\t\taNormal = {"<<aNormal[0]<<", "<<aNormal[1]<<", "<<aNormal[2]<<"}";
+ cout<<"; anOrigin = {"<<anOrigin[0]<<", "<<anOrigin[1]<<", "<<anOrigin[2]<<"}\n";
+ }
for(vtkIdType aPntId = 0; aPntId < aNumPts; aPntId++){
vtkFloatingPointType aPntCoord[3];
vtkIdType anId = GetPointId(aPntId);
aPoints->GetPoint(anId,aPntCoord);
vtkFloatingPointType aDist = vtkPlane::Evaluate(aNormal,anOrigin,aPntCoord);
- //cout<<"\t\taPntId = "<<anId<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"}; aDist = "<<aDist<<"\n";
+ if(DEBUG_TRIA_EXECUTE) cout<<"\t\taPntId = "<<anId<<" {"<<aPntCoord[0]<<", "<<aPntCoord[1]<<", "<<aPntCoord[2]<<"}; aDist = "<<aDist<<"\n";
if(aDist < -aDistEps)
return false;
}
int aNbPolygons = aPolygons.size();
for (int aPolygonId = 0; aPolygonId < aNbPolygons; aPolygonId++) {
::TPolygon& aPolygon = aPolygons[aPolygonId];
+ if(DEBUG_TRIA_EXECUTE) cout << "PoilygonId="<<aPolygonId<<" | ";
TConnectivities& aConnectivities = aPolygon.myConnectivities;
+ if(DEBUG_TRIA_EXECUTE) {
+ for(int i=0;i<aConnectivities.size();i++)
+ cout << aConnectivities[i] << ",";
+ cout << endl;
+ }
int aNbPoints = aConnectivities.size();
vtkIdType aNewCellId = theOutput->InsertNextCell(VTK_POLYGON,aNbPoints,&aConnectivities[0]);
if(theStoreMapping)
}
}
- //cout<<"\tTriangulator - Ok\n";
+ if(DEBUG_TRIA_EXECUTE) cout<<"\tTriangulator - Ok\n";
+
return true;
}
-/*!
- Constructor
-*/
+
+//----------------------------------------------------------------------------
VTKViewer_OrderedTriangulator
::VTKViewer_OrderedTriangulator():
- myCell(vtkGenericCell::New())
-{}
+ myTriangulator(vtkOrderedTriangulator::New()),
+ myBoundaryTris(vtkCellArray::New()),
+ myTriangle(vtkTriangle::New())
+{
+ myBoundaryTris->Allocate(VTK_CELL_SIZE);
+ myTriangulator->PreSortedOff();
+}
+
-/*!
- Destructor
-*/
+//----------------------------------------------------------------------------
VTKViewer_OrderedTriangulator
::~VTKViewer_OrderedTriangulator()
{
- myCell->Delete();
+ myTriangle->Delete();
+ myBoundaryTris->Delete();
+ myTriangulator->Delete();
}
+
+//----------------------------------------------------------------------------
vtkPoints*
VTKViewer_OrderedTriangulator
-::InitPoints()
+::InitPoints(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId)
{
- myInput->GetCell(myCellId,myCell);
- return myInput->GetPoints();
-}
+ myBoundaryTris->Reset();
-vtkIdType
-VTKViewer_OrderedTriangulator
-::GetNbOfPoints()
-{
- return myCell->GetNumberOfPoints();
-}
+ vtkPoints* aPoints = VTKViewer_Triangulator::InitPoints(theInput, theCellId);
+ vtkIdType aNumPts = myPoints->GetNumberOfPoints();
+ if ( aNumPts > 0 ) {
+ myTriangulator->InitTriangulation(0.0, 1.0, 0.0, 1.0, 0.0, 1.0, aNumPts);
-vtkIdType
-VTKViewer_OrderedTriangulator
-::GetPointId(vtkIdType thePointId)
-{
- return myCell->GetPointId(thePointId);
-}
+ vtkFloatingPointType aBounds[6];
+ myPoints->GetBounds(aBounds);
-vtkFloatingPointType
-VTKViewer_OrderedTriangulator
-::GetCellLength()
-{
- return sqrt(myCell->GetLength2());
+ vtkFloatingPointType anAbsoluteCoord[3];
+ vtkFloatingPointType aParamentrucCoord[3];
+ for (int aPntId = 0; aPntId < aNumPts; aPntId++) {
+ myPoints->GetPoint(aPntId, anAbsoluteCoord);
+ aParamentrucCoord[0] = (anAbsoluteCoord[0] - aBounds[0]) / (aBounds[1] - aBounds[0]);
+ aParamentrucCoord[1] = (anAbsoluteCoord[1] - aBounds[2]) / (aBounds[3] - aBounds[2]);
+ aParamentrucCoord[2] = (anAbsoluteCoord[2] - aBounds[4]) / (aBounds[5] - aBounds[4]);
+ myTriangulator->InsertPoint(aPntId, anAbsoluteCoord, aParamentrucCoord, 0);
+ }
+
+ myTriangulator->Triangulate();
+ myTriangulator->AddTriangles(myBoundaryTris);
+ }
+
+ return aPoints;
}
+
+//----------------------------------------------------------------------------
vtkIdType
VTKViewer_OrderedTriangulator
::GetNumFaces()
{
- return myCell->GetNumberOfFaces();
+ return myBoundaryTris->GetNumberOfCells();
}
+
+//----------------------------------------------------------------------------
vtkCell*
VTKViewer_OrderedTriangulator
::GetFace(vtkIdType theFaceId)
{
- return myCell->GetFace(theFaceId);
-}
+ vtkIdType aNumCells = myBoundaryTris->GetNumberOfCells();
+ if ( theFaceId < 0 || theFaceId >= aNumCells )
+ return NULL;
-void
-VTKViewer_OrderedTriangulator
-::GetCellNeighbors(vtkIdType theCellId,
- vtkCell* theFace,
- vtkIdList* theCellIds)
-{
- vtkIdList *anIdList = theFace->PointIds;
- myInput->GetCellNeighbors(theCellId, anIdList, theCellIds);
-}
+ vtkIdType *aCells = myBoundaryTris->GetPointer();
-vtkIdType
-VTKViewer_OrderedTriangulator
-::GetConnectivity(vtkIdType thePntId)
-{
- return thePntId;
+ // Each triangle has three points plus number of points
+ vtkIdType *aCellPtr = aCells + 4*theFaceId;
+
+ myTriangle->PointIds->SetId(0, aCellPtr[1]);
+ myTriangle->Points->SetPoint(0, myPoints->GetPoint(aCellPtr[1]));
+
+ myTriangle->PointIds->SetId(1, aCellPtr[2]);
+ myTriangle->Points->SetPoint(1, myPoints->GetPoint(aCellPtr[2]));
+
+ myTriangle->PointIds->SetId(2, aCellPtr[3]);
+ myTriangle->Points->SetPoint(2, myPoints->GetPoint(aCellPtr[3]));
+
+ return myTriangle;
}
-/*!
- Constructor
-*/
+
+//----------------------------------------------------------------------------
VTKViewer_DelaunayTriangulator
::VTKViewer_DelaunayTriangulator():
myUnstructuredGrid(vtkUnstructuredGrid::New()),
myGeometryFilter(vtkGeometryFilter::New()),
myDelaunay3D(vtkDelaunay3D::New()),
- myFaceIds(vtkIdList::New()),
- myPoints(vtkPoints::New()),
- myPolyData(NULL),
- myPointIds(NULL)
+ myPolyData(NULL)
{
+ myUnstructuredGrid->Initialize();
+ myUnstructuredGrid->Allocate();
+ myUnstructuredGrid->SetPoints(myPoints);
+
myDelaunay3D->SetInput(myUnstructuredGrid);
myGeometryFilter->SetInput(myDelaunay3D->GetOutput());
+ myPolyData = myGeometryFilter->GetOutput();
}
-
-/*!
- Destructor
-*/
+//----------------------------------------------------------------------------
VTKViewer_DelaunayTriangulator
::~VTKViewer_DelaunayTriangulator()
{
myUnstructuredGrid->Delete();
myGeometryFilter->Delete();
myDelaunay3D->Delete();
- myFaceIds->Delete();
- myPoints->Delete();
}
+//----------------------------------------------------------------------------
vtkPoints*
VTKViewer_DelaunayTriangulator
-::InitPoints()
+::InitPoints(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId)
{
- myUnstructuredGrid->Initialize();
- myUnstructuredGrid->Allocate();
- myUnstructuredGrid->SetPoints(myPoints);
-
- vtkIdType aNumPts;
- myInput->GetCellPoints(myCellId,aNumPts,myPointIds);
- {
- vtkFloatingPointType aPntCoord[3];
- myPoints->SetNumberOfPoints(aNumPts);
- vtkPoints *anInputPoints = myInput->GetPoints();
- for (int aPntId = 0; aPntId < aNumPts; aPntId++) {
- anInputPoints->GetPoint(myPointIds[aPntId],aPntCoord);
- myPoints->SetPoint(aPntId,aPntCoord);
- }
- }
+ vtkPoints* aPoints = VTKViewer_Triangulator::InitPoints(theInput, theCellId);
+ myPoints->Modified();
+ myUnstructuredGrid->Modified();
myGeometryFilter->Update();
- myPolyData = myGeometryFilter->GetOutput();
-
- return myPoints;
+
+ return aPoints;
}
-vtkIdType
-VTKViewer_DelaunayTriangulator
-::GetNbOfPoints()
-{
- return myPoints->GetNumberOfPoints();
-}
-
-vtkIdType
-VTKViewer_DelaunayTriangulator
-::GetPointId(vtkIdType thePointId)
-{
- return thePointId;
-}
-
-vtkFloatingPointType
-VTKViewer_DelaunayTriangulator
-::GetCellLength()
-{
- return myPolyData->GetLength();
-}
+//----------------------------------------------------------------------------
vtkIdType
VTKViewer_DelaunayTriangulator
::GetNumFaces()
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];
-}
class vtkPoints;
class vtkIdList;
class vtkCell;
+class vtkCellArray;
+class vtkTriangle;
+class vtkOrderedTriangulator;
+
+//----------------------------------------------------------------------------
class VTKVIEWER_EXPORT VTKViewer_Triangulator
{
public:
std::vector<vtkIdType>& theVTK2ObjIds,
bool theIsCheckConvex);
- protected:
+ private:
vtkIdList* myCellIds;
- vtkUnstructuredGrid *myInput;
- vtkIdType myCellId;
- int myShowInside;
- int myAllVisible;
- const char* myCellsVisibility;
+ protected:
+ vtkIdType *myPointIds;
+ vtkIdList* myFaceIds;
+ vtkPoints* myPoints;
virtual
vtkPoints*
- InitPoints() = 0;
+ InitPoints(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId);
virtual
vtkIdType
- GetNbOfPoints() = 0;
+ GetNumFaces() = 0;
virtual
- vtkIdType
- GetPointId(vtkIdType thePointId) = 0;
+ vtkCell*
+ GetFace(vtkIdType theFaceId) = 0;
- virtual
- vtkFloatingPointType
- GetCellLength() = 0;
+ vtkIdType
+ GetNbOfPoints();
- virtual
vtkIdType
- GetNumFaces() = 0;
+ GetPointId(vtkIdType thePointId);
- virtual
- vtkCell*
- GetFace(vtkIdType theFaceId) = 0;
+ vtkFloatingPointType
+ GetCellLength();
- virtual
void
- GetCellNeighbors(vtkIdType theCellId,
+ GetCellNeighbors(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId,
vtkCell* theFace,
- vtkIdList* theCellIds) = 0;
+ vtkIdList* theCellIds);
- virtual
vtkIdType
- GetConnectivity(vtkIdType thePntId) = 0;
+ GetConnectivity(vtkIdType thePntId);
};
+//----------------------------------------------------------------------------
class VTKVIEWER_EXPORT VTKViewer_OrderedTriangulator : public VTKViewer_Triangulator
{
public:
~VTKViewer_OrderedTriangulator();
protected:
- vtkGenericCell *myCell;
+ vtkOrderedTriangulator *myTriangulator;
+ vtkCellArray *myBoundaryTris;
+ vtkTriangle *myTriangle;
virtual
vtkPoints*
- InitPoints();
-
- virtual
- vtkIdType
- GetNbOfPoints();
-
- vtkIdType
- GetPointId(vtkIdType thePointId);
-
- virtual
- vtkFloatingPointType
- GetCellLength();
+ InitPoints(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId);
virtual
vtkIdType
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:
vtkGeometryFilter* myGeometryFilter;
vtkDelaunay3D* myDelaunay3D;
vtkPolyData* myPolyData;
- vtkIdType *myPointIds;
- vtkIdList* myFaceIds;
- vtkPoints* myPoints;
virtual
vtkPoints*
- InitPoints();
-
- virtual
- vtkIdType
- GetNbOfPoints();
-
- vtkIdType
- GetPointId(vtkIdType thePointId);
-
- virtual
- vtkFloatingPointType
- GetCellLength();
+ InitPoints(vtkUnstructuredGrid *theInput,
+ vtkIdType theCellId);
virtual
vtkIdType
virtual
vtkCell*
GetFace(vtkIdType theFaceId);
-
- virtual
- void
- GetCellNeighbors(vtkIdType theCellId,
- vtkCell* theFace,
- vtkIdList* theCellIds);
-
- virtual
- vtkIdType
- GetConnectivity(vtkIdType thePntId);
};
#include <vtkCellArray.h>
#include <vtkIdList.h>
#include <vtkCell.h>
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
using namespace std;
this->Modified();
}
-vtkIdType VTKViewer_ExtractUnstructuredGrid::GetInputId(int theOutId) const{
- if(myCellIds.empty() && myCellTypes.empty()) return theOutId;
- if(myOut2InId.empty() || theOutId > myOut2InId.size()) return -1;
+vtkIdType VTKViewer_ExtractUnstructuredGrid::GetInputId(int theOutId) const
+{
+ if ( myCellIds.empty() && myCellTypes.empty() )
+ return theOutId;
+
+ if ( myOut2InId.empty() || theOutId > (int)myOut2InId.size() )
+ return -1;
#if defined __GNUC_2__
return myOut2InId[theOutId];
#else
}
}
-void VTKViewer_ExtractUnstructuredGrid::Execute(){
+
+// int VTKViewer_ExtractUnstructuredGrid::RequestData(
+// vtkInformation *vtkNotUsed(request),
+// vtkInformationVector **inputVector,
+// vtkInformationVector *outputVector)
+void VTKViewer_ExtractUnstructuredGrid::Execute()
+{
+ /*
+ not ported yet to the new executive-based pipeline architecture.
+
+ // get the info objects
+ vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+ vtkInformation *outInfo = outputVector->GetInformationObject(0);
+
+ // get the input and ouptut
+ vtkUnstructuredGrid *anInput = vtkUnstructuredGrid::SafeDownCast(
+ inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ vtkUnstructuredGrid *anOutput = vtkUnstructuredGrid::SafeDownCast(
+ outInfo->Get(vtkDataObject::DATA_OBJECT()));
+ */
vtkUnstructuredGrid *anInput = this->GetInput();
vtkUnstructuredGrid *anOutput = this->GetOutput();
+
myOut2InId.clear(); myIn2OutId.clear();
/* if(MYDEBUG){
MESSAGE("Execute - myIn2OutId.size() = "<<myIn2OutId.size());
}
}*/
+// return 1;
}
#include <set>
#include <map>
#include <vector>
+
+#ifdef WIN32
+#pragma warning ( disable:4251 )
+#endif
+
/*! \class vtkUnstructuredGridToUnstructuredGridFilter
* \brief For more information see <a href="http://www.vtk.org/">VTK documentation</a>
*/
~VTKViewer_ExtractUnstructuredGrid();
//! Main method, which calculate output
- void Execute();
+ // not ported yet to the new executive-based pipeline architecture.
+ // see http://www.vtk.org/cgi-bin/viewcvs.cgi/Filtering/vtkUnstructuredGridToUnstructuredGridFilter.h?rev=1.19&view=log
+ // virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
+ virtual void Execute();
EExtraction myExtractionMode;
void operator=(const VTKViewer_ExtractUnstructuredGrid&);
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include <vtkUnstructuredGrid.h>
#include <vtkVoxel.h>
#include <vtkWedge.h>
+#include <vtkInformationVector.h>
+#include <vtkInformation.h>
#include <algorithm>
#include <iterator>
{}
-void
+int
VTKViewer_GeometryFilter
-::Execute()
+::RequestData(
+ vtkInformation *request,
+ vtkInformationVector **inputVector,
+ vtkInformationVector *outputVector)
{
- vtkDataSet *input= this->GetInput();
+ // get the info objects
+ vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+ vtkInformation *outInfo = outputVector->GetInformationObject(0);
+
+ // get the input and ouptut
+ vtkDataSet *input = vtkDataSet::SafeDownCast(
+ inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ vtkPolyData *output = vtkPolyData::SafeDownCast(
+ outInfo->Get(vtkDataObject::DATA_OBJECT()));
+
vtkIdType numCells=input->GetNumberOfCells();
if (numCells == 0)
{
- return;
+ return 0;
}
if (input->GetDataObjectType() == VTK_UNSTRUCTURED_GRID){
- this->UnstructuredGridExecute();
- return;
+ return this->UnstructuredGridExecute(input, output, outInfo);
}else
- vtkGeometryFilter::Execute();
+ return Superclass::RequestData(request,inputVector,outputVector);
+
+ return 1;
}
-void
+int
VTKViewer_GeometryFilter
-::UnstructuredGridExecute()
+::UnstructuredGridExecute(
+ vtkDataSet *dataSetInput,
+ vtkPolyData *output,
+ vtkInformation *outInfo)
{
- vtkUnstructuredGrid *input= (vtkUnstructuredGrid *)this->GetInput();
+
+ vtkUnstructuredGrid *input= (vtkUnstructuredGrid *)dataSetInput;
vtkCellArray *Connectivity = input->GetCells();
// Check input
if ( Connectivity == NULL )
{
vtkDebugMacro(<<"Nothing to extract");
- return;
+ return 0;
}
vtkIdType cellId;
vtkIdType numCells=input->GetNumberOfCells();
vtkPointData *pd = input->GetPointData();
vtkCellData *cd = input->GetCellData();
- vtkPolyData *output = this->GetOutput();
vtkPointData *outputPD = output->GetPointData();
VTKViewer_OrderedTriangulator anOrderedTriangulator;
{
delete [] cellVis;
}
+
+ return 0;
}
}
-vtkIdType VTKViewer_GeometryFilter::GetElemObjId(int theVtkID){
- if(myVTK2ObjIds.empty() || theVtkID > myVTK2ObjIds.size()) return -1;
+vtkIdType VTKViewer_GeometryFilter::GetElemObjId( int theVtkID )
+{
+ if( myVTK2ObjIds.empty() || theVtkID > (int)myVTK2ObjIds.size() )
+ return -1;
#if defined __GNUC_2__
return myVTK2ObjIds[theVtkID];
#else
#include <vtkGeometryFilter.h>
#include <vector>
+
+#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
* \brief Destructor.
*/
~VTKViewer_GeometryFilter();
- /*! \fn void Execute();
- * \brief Filter culculation method.
- */
- void Execute();
+
+ virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
+
+ //special cases for performance
+
/*! \fn void UnstructuredGridExecute();
* \brief Filter culculation method for data object type is VTK_UNSTRUCTURED_GRID.
*/
- void UnstructuredGridExecute();
+ int UnstructuredGridExecute (vtkDataSet *, vtkPolyData *, vtkInformation *);
private:
typedef std::vector<vtkIdType> TVectorId;
int myIsWireframeMode;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#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
//@}
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include <vtkDataSet.h>
#include <vtkObjectFactory.h>
#include <vtkPointData.h>
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
vtkCxxRevisionMacro(VTKViewer_PassThroughFilter, "$Revision$");
vtkStandardNewMacro(VTKViewer_PassThroughFilter);
*/
/*!Execute method.Output calculation.*/
-void VTKViewer_PassThroughFilter::Execute()
+int VTKViewer_PassThroughFilter::RequestData(
+ vtkInformation *,
+ vtkInformationVector **inputVector,
+ vtkInformationVector *outputVector)
{
- vtkDataSet *input = static_cast<vtkDataSet*>(this->GetInput());
- vtkDataSet *output = static_cast<vtkDataSet*>(this->GetOutput());
+ // get the info objects
+ vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+ vtkInformation *outInfo = outputVector->GetInformationObject(0);
+
+ // get the input and ouptut
+ vtkDataSet *input = vtkDataSet::SafeDownCast(
+ inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ vtkDataSet *output = vtkDataSet::SafeDownCast(
+ outInfo->Get(vtkDataObject::DATA_OBJECT()));
// This has to be here because it initialized all field datas.
output->CopyStructure( input );
output->GetPointData()->PassData( input->GetPointData() );
output->GetCellData()->PassData( input->GetCellData() );
+ return 1;
}
/*!Methods invoked by print to print information about the object including superclasses.\n
VTKViewer_PassThroughFilter() {};//!< Null body.
virtual ~VTKViewer_PassThroughFilter() {};//!< Null body.
- void Execute();
+ virtual int RequestData(vtkInformation *, vtkInformationVector **,
+ vtkInformationVector *); //generate output data
private:
VTKViewer_PassThroughFilter( const VTKViewer_PassThroughFilter& ); //!< Not implemented.
+++ /dev/null
-// 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 <VTKViewer_RectPicker.h>
-
-#include "vtkActor.h"
-#include "vtkAssemblyNode.h"
-#include "vtkAssemblyPath.h"
-#include "vtkCamera.h"
-#include "vtkCommand.h"
-#include "vtkImageData.h"
-#include "vtkLODProp3D.h"
-#include "vtkMapper.h"
-#include "vtkMath.h"
-#include "vtkObjectFactory.h"
-#include "vtkPoints.h"
-#include "vtkProp3DCollection.h"
-#include "vtkProperty.h"
-#include "vtkRenderWindow.h"
-#include "vtkRenderer.h"
-#include "vtkTransform.h"
-#include "vtkVertex.h"
-#include "vtkVolume.h"
-#include "vtkVolumeMapper.h"
-
-using namespace std;
-
-
-vtkStandardNewMacro(VTKViewer_RectPicker);
-
-
-/*!Constructor. Do nothing*/
-VTKViewer_RectPicker::VTKViewer_RectPicker()
-{
-}
-
-
-/*!Perform pick operation with selection rectangle provided. Normally the
- * first two values for the selection top-left and right-bottom points are
- * x-y pixel coordinate, and the third value is =0.
- * \retval Return non-zero if something was successfully picked.
- */
-int VTKViewer_RectPicker::Pick(float selectionX1, float selectionY1, float selectionZ1,
- float selectionX2, float selectionY2, float selectionZ2,
- vtkRenderer *renderer)
-{
- int k, i;
- vtkProp *prop;
- vtkCamera *camera;
- vtkAbstractMapper3D *mapper = NULL;
- float p1World[4][4], p2World[4][4], p1Mapper[4][4], p2Mapper[4][4];
- float c1[3], c2[3];
- int picked=0;
- int *winSize;
- float x, y, t, p;
- float *viewport;
- float cameraPos[4], cameraFP[4];
- float *displayCoords, *worldCoords;
- float pickPosition[4][3];
- double *clipRange;
- float ray[4][3], rayLength[4];
- int pickable;
- int LODId;
- float windowLowerLeft[4], windowUpperRight[4];
- float bounds[6], tol;
- float tF, tB;
- float hitPosition[3];
- float cameraDOP[3];
-
- // Initialize picking process
- this->Initialize();
- this->Renderer = renderer;
-
- /* Selection point is not defined for the rectangle
- this->SelectionPoint[0] =
- this->SelectionPoint[1] =
- this->SelectionPoint[2] =
- */
-
- // Invoke start pick method if defined
- this->InvokeEvent(vtkCommand::StartPickEvent,NULL);
-
- if ( renderer == NULL )
- {
- vtkErrorMacro(<<"Must specify renderer!");
- return 0;
- }
-
- // Get camera focal point and position. Convert to display (screen)
- // coordinates. We need a depth value for z-buffer.
- //
- camera = renderer->GetActiveCamera();
- camera->GetPosition((float *)cameraPos); cameraPos[3] = 1.0;
- camera->GetFocalPoint((float *)cameraFP); cameraFP[3] = 1.0;
-
- renderer->SetWorldPoint(cameraFP);
- renderer->WorldToDisplay();
- displayCoords = renderer->GetDisplayPoint();
- selectionZ1 = selectionZ2 = displayCoords[2];
-
- // Convert the selection rectangle into world coordinates.
- //
- renderer->SetDisplayPoint(selectionX1, selectionY1, selectionZ1);
- renderer->DisplayToWorld();
- worldCoords = renderer->GetWorldPoint();
- if ( worldCoords[3] == 0.0 )
- {
- vtkErrorMacro(<<"Bad homogeneous coordinates");
- return 0;
- }
- for (i=0; i < 3; i++)
- {
- pickPosition[0][i] = worldCoords[i] / worldCoords[3];
- }
-
- renderer->SetDisplayPoint(selectionX1, selectionY2, (selectionZ1+selectionZ2)/2);
- renderer->DisplayToWorld();
- worldCoords = renderer->GetWorldPoint();
- if ( worldCoords[3] == 0.0 )
- {
- vtkErrorMacro(<<"Bad homogeneous coordinates");
- return 0;
- }
- for (i=0; i < 3; i++)
- {
- pickPosition[1][i] = worldCoords[i] / worldCoords[3];
- }
-
- renderer->SetDisplayPoint(selectionX2, selectionY2, selectionZ2);
- renderer->DisplayToWorld();
- worldCoords = renderer->GetWorldPoint();
- if ( worldCoords[3] == 0.0 )
- {
- vtkErrorMacro(<<"Bad homogeneous coordinates");
- return 0;
- }
- for (i=0; i < 3; i++)
- {
- pickPosition[2][i] = worldCoords[i] / worldCoords[3];
- }
-
- renderer->SetDisplayPoint(selectionX2, selectionY1, (selectionZ1+selectionZ2)/2);
- renderer->DisplayToWorld();
- worldCoords = renderer->GetWorldPoint();
- if ( worldCoords[3] == 0.0 )
- {
- vtkErrorMacro(<<"Bad homogeneous coordinates");
- return 0;
- }
- for (i=0; i < 3; i++)
- {
- pickPosition[3][i] = worldCoords[i] / worldCoords[3];
- }
-
- // Compute the ray endpoints. The ray is along the line running from
- // the camera position to the selection point, starting where this line
- // intersects the front clipping plane, and terminating where this
- // line intersects the back clipping plane.
- for (k=0; k < 4; k++) {
- for (i=0; i<3; i++)
- {
- ray[k][i] = pickPosition[k][i] - cameraPos[i];
- }
- }
- for (i=0; i<3; i++)
- {
- cameraDOP[i] = cameraFP[i] - cameraPos[i];
- }
-
- vtkMath::Normalize(cameraDOP);
-
- for (k=0; k < 4; k++) {
- if (( rayLength[k] = vtkMath::Dot(cameraDOP,ray[k])) == 0.0 )
- {
- vtkWarningMacro("Cannot process points");
- return 0;
- }
- }
-
- clipRange = camera->GetClippingRange();
-
- if ( camera->GetParallelProjection() )
- {
- for (k=0; k < 4; k++) {
- tF = clipRange[0] - rayLength[k];
- tB = clipRange[1] - rayLength[k];
- for (i=0; i<3; i++)
- {
- p1World[k][i] = pickPosition[k][i] + tF*cameraDOP[i];
- p2World[k][i] = pickPosition[k][i] + tB*cameraDOP[i];
- }
- p1World[k][3] = p2World[k][3] = 1.0;
- }
- }
- else
- {
- for (k=0; k < 4; k++) {
- tF = clipRange[0] / rayLength[k];
- tB = clipRange[1] / rayLength[k];
- for (i=0; i<3; i++)
- {
- p1World[k][i] = cameraPos[i] + tF*ray[k][i];
- p2World[k][i] = cameraPos[i] + tB*ray[k][i];
- }
- p1World[k][3] = p2World[k][3] = 1.0;
- }
- }
-
- // Compute the center points of ray rectangle
- for (i=0; i<3; i++) {
- c1[i] = c2[i] = 0;
- for (k=0; k<4; k++) {
- c1[i] += p1World[k][i];
- c2[i] += p2World[k][i];
- }
- c1[i] = c1[i]/4;
- c2[i] = c2[i]/4;
- }
-
- // Compute the tolerance in world coordinates. Do this by
- // determining the world coordinates of the diagonal points of the
- // window, computing the width of the window in world coordinates, and
- // multiplying by the tolerance.
- //
- viewport = renderer->GetViewport();
- winSize = renderer->GetRenderWindow()->GetSize();
- x = winSize[0] * viewport[0];
- y = winSize[1] * viewport[1];
- renderer->SetDisplayPoint(x, y, selectionZ1);
- renderer->DisplayToWorld();
- renderer->GetWorldPoint(windowLowerLeft);
-
- x = winSize[0] * viewport[2];
- y = winSize[1] * viewport[3];
- renderer->SetDisplayPoint(x, y, selectionZ2);
- renderer->DisplayToWorld();
- renderer->GetWorldPoint(windowUpperRight);
-
- for (tol=0.0,i=0; i<3; i++)
- {
- tol += (windowUpperRight[i] - windowLowerLeft[i]) *
- (windowUpperRight[i] - windowLowerLeft[i]);
- }
-
- tol = sqrt (tol) * this->Tolerance;
-
- // Loop over all props. Transform ray (defined from position of
- // camera to selection point) into coordinates of mapper (not
- // transformed to actors coordinates! Reduces overall computation!!!).
- // Note that only vtkProp3D's can be picked by vtkPicker.
- //
- vtkPropCollection *props;
- vtkProp *propCandidate;
- if ( this->PickFromList )
- {
- props = this->GetPickList();
- }
- else
- {
- props = renderer->GetProps();
- }
-
- vtkActor *actor;
- vtkLODProp3D *prop3D;
- vtkVolume *volume;
- vtkAssemblyPath *path;
- vtkProperty *tempProperty;
- this->Transform->PostMultiply();
- for ( props->InitTraversal(); (prop=props->GetNextProp()); )
- {
- for ( prop->InitPathTraversal(); (path=prop->GetNextPath()); )
- {
- pickable = 0;
- actor = NULL;
- propCandidate = path->GetLastNode()->GetProp();
- if ( propCandidate->GetPickable() && propCandidate->GetVisibility() )
- {
- pickable = 1;
- if ( (actor=vtkActor::SafeDownCast(propCandidate)) != NULL )
- {
- mapper = actor->GetMapper();
- if ( actor->GetProperty()->GetOpacity() <= 0.0 )
- {
- pickable = 0;
- }
- }
- else if ( (prop3D=vtkLODProp3D::SafeDownCast(propCandidate)) != NULL )
- {
- LODId = prop3D->GetPickLODID();
- mapper = prop3D->GetLODMapper(LODId);
-
- // if the mapper is a vtkMapper (as opposed to a vtkVolumeMapper),
- // then check the transparency to see if the object is pickable
- if ( vtkMapper::SafeDownCast(mapper) != NULL)
- {
- prop3D->GetLODProperty(LODId, &tempProperty);
- if ( tempProperty->GetOpacity() <= 0.0 )
- {
- pickable = 0;
- }
- }
- }
- else if ( (volume=vtkVolume::SafeDownCast(propCandidate)) != NULL )
- {
- mapper = volume->GetMapper();
- }
- else
- {
- pickable = 0; //only vtkProp3D's (actors and volumes) can be picked
- }
- }
- // If actor can be picked, get its composite matrix, invert it, and
- // use the inverted matrix to transform the ray points into mapper
- // coordinates.
- if ( pickable && mapper != NULL )
- {
- vtkMatrix4x4 *LastMatrix = path->GetLastNode()->GetMatrix();
- if (LastMatrix == NULL)
- {
- vtkErrorMacro (<< "Pick: Null matrix.");
- return 0;
- }
- this->Transform->SetMatrix(LastMatrix);
- this->Transform->Push();
- this->Transform->Inverse();
-
- for (k=0; k < 4; k++) {
- this->Transform->TransformPoint(p1World[k],p1Mapper[k]);
- this->Transform->TransformPoint(p2World[k],p2Mapper[k]);
-
- for (i=0; i<3; i++)
- {
- ray[k][i] = p2Mapper[k][i] - p1Mapper[k][i];
- }
- }
-
- this->Transform->Pop();
-
- // Have the ray endpoints in mapper space, now need to compare this
- // with the mapper bounds to see whether intersection is possible.
- //
- // Get the bounding box of the modeller. Note that the tolerance is
- // added to the bounding box to make sure things on the edge of the
- // bounding box are picked correctly.
- mapper->GetBounds(bounds);
- bounds[0] -= tol; bounds[1] += tol;
- bounds[2] -= tol; bounds[3] += tol;
- bounds[4] -= tol; bounds[5] += tol;
- if ( HitBBox(bounds, p1Mapper, ray) ) {
- t = this->IntersectWithHex(p1Mapper, p2Mapper, tol, path,
- (vtkProp3D *)propCandidate, mapper);
- if ( t >= 0.0 && t <= 1.0 /*t < VTK_LARGE_FLOAT*/ ) {
- picked = 1;
- this->Prop3Ds->AddItem((vtkProp3D *)prop);
- this->PickedPositions->InsertNextPoint
- ((1.0 - t)*c1[0] + t*c2[0],
- (1.0 - t)*c1[1] + t*c2[1],
- (1.0 - t)*c1[2] + t*c2[2]);
-
- // backwards compatibility: also add to this->Actors
- if (actor) {
- this->Actors->AddItem(actor);
- }
- }
- }
-
- }//if visible and pickable not transparent and has mapper
- }//for all parts
- }//for all actors
-
- // Invoke end pick method if defined
- this->InvokeEvent(vtkCommand::EndPickEvent,NULL);
-
- return picked;
-}
-
-#define SIDE_LEFT 0
-#define SIDE_RIGHT 1
-#define SIDE_MIDDLE 2
-
-float GetParameterValue(float start, float end, float point)
-{
- if (start == end) return -VTK_LARGE_FLOAT;
- return (point-start)/(end-start);
-}
-
-void GetPointCoord(const float start[3], const float end[3], float t, float point[3])
-{
- int i;
- for (i = 0; i < 3; i++) {
- point[i] = start[i] + t*(end[i]-start[i]);
- }
-}
-
-char GetIntersectionPoint(const float start[3], const float end[3],
- const int& index, const float p, float point[3])
-{
- float t = GetParameterValue(start[index], end[index], p);
- char result = 0;
- if (t >= 0.0 && t <= 1.0) {
- result = 1;
- GetPointCoord(start, end, t, point);
- }
- return result;
-}
-
-
-/*! Bounding box intersection with hexahedron. Origin[4][4] starts the ray from corner points,
- * dir[4][3] is the vector components of the ray in the x-y-z directions.
- * (Notes: the intersection ray dir[4][3] is NOT normalized.)
- * \retval The method returns a non-zero value, if the bounding box is hit.
- */
-char VTKViewer_RectPicker::HitBBox (float bounds[6], float origin[4][4], float dir[4][3])
-{
- int i, j, k, n;
- float endray[4][3];
-
- for (k = 0; k < 4; k++) {
- for (i = 0; i < 3; i++) {
- endray[k][i] = origin[k][i] + dir[k][i];
- }
- }
-
- // Compute hex bounding box, center point and center direction
- float hbounds[6], center[3], ray[3];
- for (i = 0; i < 3; i++) {
- hbounds[2*i] = hbounds[2*i+1] = origin[0][i];
- center[i] = ray[i] = 0;
- for (k = 0; k < 4; k++) {
- center[i] += origin[k][i];
- ray[i] += endray[k][i];
- if (origin[k][i] < hbounds[2*i]) {
- hbounds[2*i] = origin[k][i];
- }
- else if (origin[k][i] > hbounds[2*i+1])
- hbounds[2*i+1] = origin[k][i];
- if (endray[k][i] < hbounds[2*i])
- hbounds[2*i] = endray[k][i];
- else if (endray[k][i] > hbounds[2*i+1])
- hbounds[2*i+1] = endray[k][i];
- }
- center[i] = center[i]/4;
- ray[i] = ray[i]/4;
- ray[i] = ray[i] - center[i];
- }
-
- // Check for intersection between bouning boxes
- for (i = 0; i < 3; i++) {
- if (bounds[2*i+1] < hbounds[2*i] || bounds[2*i] > hbounds[2*i+1])
- return 0;
- }
-
- // Check if one of the origin point lays inside bbox
- char inside;
- for (k = 0; k < 4; k++) {
- inside = 1;
- for (i = 0; i < 3; i++) {
- if (origin[k][i] < bounds[2*i] || origin[k][i] > bounds[2*i+1]) {
- inside = 0;
- break;
- }
- }
- if (inside) return 1;
- }
-
- // Find the closest coord plane for the center point
- char side[3];
- float coordPlane[3];
- inside = 1;
- for (i = 0; i < 3; i++) {
- if (center[i] < bounds[2*i]) {
- inside = 0;
- coordPlane[i] = bounds[2*i];
- side[i] = SIDE_LEFT;
- }
- else if (center[i] > bounds[2*i+1]) {
- inside = 0;
- coordPlane[i] = bounds[2*i+1];
- side[i] = SIDE_RIGHT;
- }
- else {
- coordPlane[i] = (ray[i]<0.0) ? bounds[2*i] : bounds[2*i+1];
- side[i] = SIDE_MIDDLE;
- }
- }
- if (inside) return 1;
-
- // Calculate parametric distances to the planes and find the max
- float maxT[3];
- int whichPlane = 0;
- char defined = 0;
- for (i = 0; i < 3; i++) {
- if (side[i] != SIDE_MIDDLE && ray[i] != 0.0) {
- maxT[i] = (coordPlane[i]-center[i])/ray[i];
- defined = 1;
- }
- else
- maxT[i] = -1.0;
- }
- for (i = 0; i < 3; i++) {
- if (maxT[whichPlane] < maxT[i])
- whichPlane = i;
- }
-
- // Check for intersection along the center ray
- float coord;
- if (maxT[whichPlane] <= 1.0 && maxT[whichPlane] >= 0.0) {
- inside = 1;
- for (i = 0; i < 3; i++) {
- if (i != whichPlane) {
- coord = center[i] + maxT[whichPlane]*ray[i];
- if (coord < bounds[2*i] || coord > bounds[2*i+1])
- inside = 0;
- }
- }
- if (inside) return 1;
- }
-
- // Define the intersection plane
- if (!defined) {
- for (i = 0; i < 3; i++) {
- if (ray[i] != 0.0) {
- maxT[i] = (coordPlane[i]-center[i])/ray[i];
- }
- else
- maxT[i] = VTK_LARGE_FLOAT;
- }
- for (i = 0; i < 3; i++) {
- if (maxT[whichPlane] > maxT[i])
- whichPlane = i;
- }
- }
-
- // Compute the intersection between hex and coord plane
- float t[4];
- for (k = 0; k < 4; k++) {
- if (dir[k][whichPlane] != 0.0) {
- t[k] = (coordPlane[whichPlane]-origin[k][whichPlane])/dir[k][whichPlane];
- }
- else {
- t[k] = VTK_LARGE_FLOAT;
- }
- }
-
- vtkPoints* aPoints = vtkPoints::New();
- float p[3], q[3], t1;
- for (k = 0; k < 4; k++) {
- n = (k+1)%4; // next point
- if (t[k] > 1.0) {
- if (t[n] < 1.0) {
- // find intersection point
- t1 = GetParameterValue(endray[k][whichPlane], endray[n][whichPlane], coordPlane[whichPlane]);
- if (t1 > 0.0 && t1 < 1.0) {
- GetPointCoord(endray[k], endray[n], t1, p);
- aPoints->InsertNextPoint(p[0], p[1], p[2]);
- }
- }
- if (t[n] < 0.0) {
- // find second intersection point
- t1 = GetParameterValue(origin[k][whichPlane], origin[n][whichPlane], coordPlane[whichPlane]);
- if (t1 > 0.0 && t1 < 1.0) {
- GetPointCoord(origin[k], origin[n], t1, p);
- aPoints->InsertNextPoint(p[0], p[1], p[2]);
- }
- }
- }
- else if (t[k] < 0.0) {
- if (t[n] > 0.0) {
- // find intersection point
- t1 = GetParameterValue(origin[k][whichPlane], origin[n][whichPlane], coordPlane[whichPlane]);
- if (t1 > 0.0 && t1 < 1.0) {
- GetPointCoord(origin[k], origin[n], t1, p);
- aPoints->InsertNextPoint(p[0], p[1], p[2]);
- }
- }
- }
- else {
- // find intersection point
- GetPointCoord(origin[k], endray[k], t[k], p);
- aPoints->InsertNextPoint(p[0], p[1], p[2]);
-
- if (t[n] < 0.0) {
- // find second intersection point
- t1 = GetParameterValue(origin[k][whichPlane], origin[n][whichPlane], coordPlane[whichPlane]);
- if (t1 > 0.0 && t1 < 1.0) {
- GetPointCoord(origin[k], origin[n], t1, p);
- aPoints->InsertNextPoint(p[0], p[1], p[2]);
- }
- }
- else if (t[n] > 1.0) {
- // find second intersection point
- t1 = GetParameterValue(endray[k][whichPlane], endray[n][whichPlane], coordPlane[whichPlane]);
- if (t1 > 0.0 && t1 < 1.0) {
- GetPointCoord(endray[k], endray[n], t1, p);
- aPoints->InsertNextPoint(p[0], p[1], p[2]);
- }
- }
- }
- }
- n = aPoints->GetNumberOfPoints();
- if (n == 0) {
- aPoints->Delete();
- return 0;
- }
-
- if (n == 1) {
- aPoints->GetPoint(0, p);
- inside = 1;
- for (i = 0; i < 3; i++) {
- if (i != whichPlane) {
- if (p[i] < bounds[2*i] || p[i] > bounds[2*i+1]) {
- inside = 0; break;
- }
- }
- }
- aPoints->Delete();
- return inside;
- }
-
- // Analize intersection
- int nearPlane, boundPlane = -1;
- float boundCoord, boundMin, boundMax;
- char intersect = 0;
- for (k = 0; k < n; k++) {
- aPoints->GetPoint(k, p);
- j = k+1; if (j == n) j = 0;
- aPoints->GetPoint(j, q);
- inside = 1;
- nearPlane = 0;
- // if the point is inside bbox
- for (i = 0; i < 3; i++) {
- if (i != whichPlane) {
- if (p[i] < bounds[2*i]) {
- side[i] = SIDE_LEFT;
- maxT[i] = GetParameterValue(p[i], q[i], bounds[2*i]);
- inside = 0;
- }
- else if (p[i] > bounds[2*i+1]) {
- side[i] = SIDE_RIGHT;
- maxT[i] = GetParameterValue(p[i], q[i], bounds[2*i+1]);
- inside = 0;
- }
- else {
- side[i] = SIDE_MIDDLE;
- maxT[i] = -1.0;
- }
- }
- else maxT[i] = -1.0;
- if (maxT[i] > maxT[nearPlane]) nearPlane = i;
- }
- if (inside) break;
- // if segment intersects bbox
- if (maxT[nearPlane] >= 0.0 && maxT[nearPlane] <= 1.0) {
- for (i = 0; i < 3; i++) {
- if (i != whichPlane && i != nearPlane) {
- coord = p[i] + maxT[nearPlane]*(q[i]-p[i]);
- if (coord >= bounds[2*i] && coord <= bounds[2*i+1]) {
- intersect = 1; break;
- }
- }
- }
- // intersect with boundPlane
- if (boundPlane == -1) {
- boundCoord = p[nearPlane] + maxT[nearPlane]*(q[nearPlane]-p[nearPlane]);
- boundPlane = nearPlane;
- for (i = 0; i < 3; i++) {
- if (i != whichPlane && i != boundPlane) {
- coord = p[i] + maxT[nearPlane]*(q[i]-p[i]);
- boundMin = boundMax = coord;
- }
- }
- }
- else {
- t1 = GetParameterValue(p[boundPlane], q[boundPlane], boundCoord);
- if (t1 >= 0.0 && t1 <= 1.0) {
- for (i = 0; i < 3; i++) {
- if (i != whichPlane && i != boundPlane) {
- coord = p[i] + t1*(q[i]-p[i]);
- if (coord < boundMin) boundMin = coord;
- if (coord > boundMax) boundMax = coord;
- }
- }
- }
- }
- }
- if (intersect) break;
- }
- aPoints->Delete();
- if (inside || intersect) {
- return 1;
- }
-
- inside = 1;
- for (i = 0; i < 3; i++) {
- if (i != whichPlane && i != boundPlane) {
- if (boundMin > bounds[2*i+1] || boundMax < bounds[2*i])
- inside = 0;
- }
- }
-
- return inside;
-}
-
-/*! Position of point relative to hexahedron. p1[4][4] is the corner points of top face,
- * p2[4][4] is the corner points of bottom face.
- * \retval The method returns a non-zero value, if the point is inside.
- */
-char VTKViewer_RectPicker::PointInside (float p[3], float p1[4][4], float p2[4][4], float tol)
-{
- int i, j, k;
- float t, coord[3];
-
- // Fix one coordinate (x, for example) and
- // compute intersection with coordinate plane
- vtkPoints* aPoints = vtkPoints::New();
- int mode = 0;
- for (k = 0; k < 4; k++) {
- j = k+1; if (j == 4) j = 0;
- switch (mode) {
- case 0:
- if (GetIntersectionPoint(p1[k], p1[j], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 0;
- }
- if (GetIntersectionPoint(p1[k], p2[k], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 1;
- }
- if (GetIntersectionPoint(p2[k], p2[j], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 2;
- }
- /*
- if ((p1[k][0]-p[0])*(p2[k][0]-p[0]) <= 0) {
- t = GetParameterValue(p1[k][0], p2[k][0], p[0]);
- if (t >= 0.0 && t <= 1.0) {
- GetPointCoord(p1[k], p2[k], t, coord);
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- }
- }
- */
- break;
- case 1:
- if (GetIntersectionPoint(p1[k], p2[k], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 1;
- }
- if (GetIntersectionPoint(p2[k], p2[j], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 2;
- }
- if (GetIntersectionPoint(p1[k], p1[j], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 0;
- }
- /*
- if ((p1[k][0]-p[0])*(p1[j][0]-p[0]) <= 0) {
- t = GetParameterValue(p1[k][0], p1[j][0], p[0]);
- if (t > 0.0 && t < 1.0) {
- GetPointCoord(p1[k], p1[j], t, coord);
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- }
- }
- */
- break;
- case 2:
- if (GetIntersectionPoint(p2[k], p2[j], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 2;
- }
- if (GetIntersectionPoint(p1[k], p2[k], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 1;
- }
- if (GetIntersectionPoint(p1[k], p1[j], 0, p[0], coord)) {
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- mode = 0;
- }
- /*
- if ((p2[k][0]-p[0])*(p2[j][0]-p[0]) <= 0) {
- t = GetParameterValue(p2[k][0], p2[j][0], p[0]);
- if (t > 0.0 && t < 1.0) {
- GetPointCoord(p2[k], p2[j], t, coord);
- aPoints->InsertNextPoint(coord[0], coord[1], coord[2]);
- }
- }
- */
- break;
- }
- }
- int n = aPoints->GetNumberOfPoints();
- //cout << "---> Points in X projection " << n << endl;
- if (n == 0) {
- aPoints->Delete();
- return 0;
- }
-
- // Fix the second coord and define bounds
- float zMin = VTK_LARGE_FLOAT, zMax = -VTK_LARGE_FLOAT, z, ncoord[3];
- char inside = 0;
- for (k = 0; k < n; k++) {
- aPoints->GetPoint(k, coord);
- //cout << " P" << k << " (" << coord[0] << ", " << coord[1] << ", " << coord[2] << ")";
- j = k+1; if (j == n) j = 0;
- if (j == k) {
- if (p[1] == coord[1] && p[2] == coord[2]) {
- inside = 1;
- }
- break;
- }
- aPoints->GetPoint(j, ncoord);
- t = GetParameterValue(coord[1], ncoord[1], p[1]);
- if (t >= 0.0 && t <= 1) {
- z = coord[2] + t*(ncoord[2]-coord[2]);
- if (z < zMin) zMin = z;
- if (z > zMax) zMax = z;
- }
- }
- //cout << endl << " Zmin = " << zMin << ", Zmax = " << zMax << endl;
- if (!inside) {
- if (p[2] <= (zMax+tol) && p[2] >= (zMin-tol))
- inside = 1;
- }
-
- aPoints->Delete();
- return inside;
-}
-
-float VTKViewer_RectPicker::IntersectWithHex(float p1[4][4], float p2[4][4], float tol,
- vtkAssemblyPath *path, vtkProp3D *prop3D,
- vtkAbstractMapper3D *mapper)
-{
- int i, k;
- float *center, p0[3], ray[3], rayFactor, t;
-
- // Get the data from the modeler
- //
- center = mapper->GetCenter();
-
- if (!PointInside(center, p1, p2)) {
- return 2.0;
- }
-
- // Determine appropriate info
- //
- for (i = 0; i < 3; i++) {
- p0[i] = ray[i] = 0;
- for (k = 0; k < 4; k++) {
- p0[i] += p1[k][i];
- ray[i] += p2[k][i];
- }
- p0[i] = p0[i]/4;
- ray[i] = ray[i]/4;
- ray[i] = ray[i] - p0[i];
- }
- if (( rayFactor = vtkMath::Dot(ray,ray)) == 0.0 ) {
- vtkErrorMacro("Cannot process points");
- return 2.0;
- }
-
- // Project the center point onto the ray and determine its parametric value
- //
- t = (ray[0]*(center[0]-p0[0]) + ray[1]*(center[1]-p0[1])
- + ray[2]*(center[2]-p0[2])) / rayFactor;
-
- if ( t >= 0.0 && t <= 1.0 && t < this->GlobalTMin ) {
- this->MarkPicked(path, prop3D, mapper, t, center);
- }
- return t;
-}
+++ /dev/null
-// 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 <vtkPicker.h>
-
-/*! \class vtkPicker
- * \brief For more information see <a href="http://www.vtk.org/">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
-
-
#include <vtkObjectFactory.h>
#include <vtkPointData.h>
#include <vtkUnstructuredGrid.h>
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
vtkCxxRevisionMacro(VTKViewer_ShrinkFilter, "$Revision$");
vtkStandardNewMacro(VTKViewer_ShrinkFilter);
/*!Execute method. Calculate output.*/
-void VTKViewer_ShrinkFilter::Execute()
+int VTKViewer_ShrinkFilter::RequestData(
+ vtkInformation *vtkNotUsed(request),
+ vtkInformationVector **inputVector,
+ vtkInformationVector *outputVector)
{
+ // get the info objects
+ vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+ vtkInformation *outInfo = outputVector->GetInformationObject(0);
+
+ // get the input and ouptut
+ vtkDataSet *input = vtkDataSet::SafeDownCast(
+ inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ vtkUnstructuredGrid *output = vtkUnstructuredGrid::SafeDownCast(
+ outInfo->Get(vtkDataObject::DATA_OBJECT()));
+
vtkPoints *newPts;
int i, j, numIds, abort=0;
vtkIdType cellId, numCells, numPts;
vtkFloatingPointType center[3], *p, pt[3];
vtkPointData *pd, *outPD;;
vtkIdList *ptIds, *newPtIds;
- vtkDataSet *input= this->GetInput();
- vtkUnstructuredGrid *output = this->GetOutput();
vtkIdType tenth;
vtkFloatingPointType decimal;
if (numCells < 1 || numPts < 1)
{
vtkErrorMacro(<<"No data to shrink!");
- return;
+ return 0;
}
ptIds = vtkIdList::New();
ptIds->Delete();
newPtIds->Delete();
newPts->Delete();
+
+ return 1;
}
/*!Sets store mapping.*/
/*!Return node object id by vtk node id.
*\retval -1 - if no object, else return id.
*/
-vtkIdType VTKViewer_ShrinkFilter::GetNodeObjId(int theVtkID){
- if(myVTK2ObjIds.empty() || theVtkID > myVTK2ObjIds.size()) return -1;
+vtkIdType VTKViewer_ShrinkFilter::GetNodeObjId(int theVtkID)
+{
+ if ( myVTK2ObjIds.empty() || theVtkID > (int)myVTK2ObjIds.size() )
+ return -1;
return myVTK2ObjIds.at(theVtkID);
}
#include <vector>
+#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.
*/
VTKViewer_ShrinkFilter();
~VTKViewer_ShrinkFilter();
- void Execute();
+ virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
/*!Not implemented.*/
void UnstructuredGridExecute();
TVectorId myVTK2ObjIds;
};
+#ifdef WIN32
+#pragma warning ( default:4251 )
+#endif
+
#endif
#include <vtkPointData.h>
#include <vtkCellData.h>
#include <vtkPoints.h>
-
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
vtkStandardNewMacro(VTKViewer_TransformFilter);
/*!Execution method. Calculate output.*/
-void VTKViewer_TransformFilter::Execute(){
+int VTKViewer_TransformFilter::RequestData(
+ vtkInformation *vtkNotUsed(request),
+ vtkInformationVector **inputVector,
+ vtkInformationVector *outputVector)
+{
+ // get the info objects
+ vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+ vtkInformation *outInfo = outputVector->GetInformationObject(0);
+
+ // get the input and ouptut
+ vtkPointSet *input = vtkPointSet::SafeDownCast(
+ inInfo->Get(vtkDataObject::DATA_OBJECT()));
+ vtkPointSet *output = vtkPointSet::SafeDownCast(
+ outInfo->Get(vtkDataObject::DATA_OBJECT()));
+
vtkPoints *inPts;
vtkPoints *newPts;
int numPts, numCells;
- vtkPointSet *input = this->GetInput();
- vtkPointSet *output = this->GetOutput();
vtkPointData *pd=input->GetPointData(), *outPD=output->GetPointData();
vtkCellData *cd=input->GetCellData(), *outCD=output->GetCellData();
output->CopyStructure( input );
}
outPD->PassData(pd);
outCD->PassData(cd);
+
+ return 1;
}
VTKViewer_TransformFilter(const VTKViewer_TransformFilter&) {/*!Do nothing*/}
/*!Operator = */
void operator=(const VTKViewer_TransformFilter&) {/*!Do nothing*/}
- void Execute();
+
+ int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
};
#endif
#include <vtkLineSource.h>
#include <vtkConeSource.h>
#include <vtkPolyDataMapper.h>
-
-#include "VTKViewer_VectorText.h"
+#include <vtkVectorText.h>
vtkStandardNewMacro(VTKViewer_UnScaledActor);
myLineActor->SetArrowActor(myArrowActor);
/*! \li Initialize the Label pipe-line representation */
- myVectorText = VTKViewer_VectorText::New();
+ myVectorText = vtkVectorText::New();
myMapper[2] = vtkPolyDataMapper::New();
myMapper[2]->SetInput(myVectorText->GetOutput());
myLabelActor->AddPosition(aPosition);
}
+/*! Check if actor belongs to the axis object
+ * \param theActor - vtkActor pointer
+ * \retval Return true if the actor belongs to the axis object
+ */
+bool VTKViewer_Axis::OwnActor(const vtkActor* theActor)
+{
+ return theActor == myLineActor ||
+ theActor == myArrowActor ||
+ theActor == myLabelActor;
+}
+
/*! \class VTKViewer_XAxis
* \brief X Axis actor
*/
int aCount = 0;
while(vtkActor* prop = aCollection->GetNextActor()) {
if( prop->GetVisibility())
- if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(prop))
+ if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(prop)) {
if(!anActor->IsInfinitive())
- aCount++;
+ aCount++;
+ }
+ else if ( !OwnActor( anActor ) ) {
+ aCount++;
+ }
//int aCount = theRenderer->VisibleActorCount();
//SetVisibility(aVis);
}
return aCount;
}
+
+/*! Check if actor belongs to the axis object
+ * \param theActor - vtkActor pointer
+ * \retval Return true if the actor belongs to the axis object
+ */
+bool VTKViewer_Trihedron::OwnActor(const vtkActor* theActor)
+{
+ myPresent->InitTraversal();
+ while(vtkActor* anActor = myPresent->GetNextActor()) {
+ if ( anActor == theActor ) return true;
+ }
+ for(int i = 0; i < 3; i++) {
+ if ( myAxis[i]->OwnActor(theActor) ) return true;
+ }
+ return false;
+}
class vtkPolyDataMapper;
class vtkLineSource;
class vtkConeSource;
+class vtkVectorText;
class VTKViewer_Axis;
-class VTKViewer_VectorText;
/*! \class vtkFollower
* See <a href="http://www.vtk.org/">vtk documentation</a>
};
/*!This class provide support trihedron object in vtk viewer.*/
-class VTKVIEWER_EXPORT VTKVIEWER_EXPORT VTKViewer_Trihedron : public vtkObject
+class VTKVIEWER_EXPORT VTKViewer_Trihedron : public vtkObject
{
protected:
/*!Initialize fields by default values.*/
*/
virtual int GetVisibleActorCount(vtkRenderer* theRenderer);
+ /*! Check if actor belongs to the trihedron object
+ * \param theActor - vtkActor pointer
+ * \retval Return true if the actor belongs to the trihedron object
+ */
+ virtual bool OwnActor(const vtkActor* theActor);
+
protected:
/*! Actor collection*/
vtkActorCollection* myPresent;
* \retval Return myArrowActor
*/
virtual VTKViewer_UnScaledActor* GetArrow() { return myArrowActor; }
+
+ /*! Check if actor belongs to the axis object
+ * \param theActor - vtkActor pointer
+ * \retval Return true if the actor belongs to the axis object
+ */
+ virtual bool OwnActor(const vtkActor* theActor);
protected:
/*! Visibility flag.
/*! VTKViewer_VectorText pointer (Label)
*/
- VTKViewer_VectorText* myVectorText;
+ vtkVectorText* myVectorText;
};
#endif
return fabs( theNewSize - theSize) > theSize * EPS_SIZE ||
fabs( theNewSize-theSize ) > theNewSize * EPS_SIZE;
}
+
+bool IsBBEmpty(vtkRenderer* theRenderer)
+{
+ if(!theRenderer)
+ return false;
+
+ vtkFloatingPointType aNewBndBox[6];
+ aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_LARGE_FLOAT;
+ aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_LARGE_FLOAT;
+
+ // iterate through displayed objects and set size if necessary
+ vtkActorCollection* anActors = theRenderer->GetActors();
+ anActors->InitTraversal();
+ bool isAny = false;
+ while(vtkActor* anAct = anActors->GetNextActor())
+ //if(SALOME_Actor* anActor = dynamic_cast<SALOME_Actor*>(anAct))
+ if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(anAct))
+ if(anActor->GetVisibility() && !anActor->IsInfinitive())
+ {
+ vtkFloatingPointType *aBounds = anActor->GetBounds();
+ if(aBounds[0] > -VTK_LARGE_FLOAT && aBounds[1] < VTK_LARGE_FLOAT &&
+ aBounds[2] > -VTK_LARGE_FLOAT && aBounds[3] < VTK_LARGE_FLOAT &&
+ aBounds[4] > -VTK_LARGE_FLOAT && aBounds[5] < VTK_LARGE_FLOAT)
+ isAny = true;
+ }
+
+ return !isAny;
+}
+
+bool ComputeBBCenter(vtkRenderer* theRenderer, vtkFloatingPointType theCenter[3])
+{
+ theCenter[0] = theCenter[1] = theCenter[2] = 0.0;
+
+ if(!theRenderer)
+ return false;
+
+ vtkFloatingPointType aNewBndBox[6];
+ aNewBndBox[ 0 ] = aNewBndBox[ 2 ] = aNewBndBox[ 4 ] = VTK_LARGE_FLOAT;
+ aNewBndBox[ 1 ] = aNewBndBox[ 3 ] = aNewBndBox[ 5 ] = -VTK_LARGE_FLOAT;
+
+ // iterate through displayed objects and set size if necessary
+ vtkActorCollection* anActors = theRenderer->GetActors();
+ anActors->InitTraversal();
+ bool isAny = false;
+ while(vtkActor* anAct = anActors->GetNextActor())
+ {
+ //if(SALOME_Actor* anActor = dynamic_cast<SALOME_Actor*>(anAct))
+ if(VTKViewer_Actor* anActor = VTKViewer_Actor::SafeDownCast(anAct))
+ {
+ if(anActor->GetVisibility() && !anActor->IsInfinitive())
+ {
+ vtkFloatingPointType *aBounds = anActor->GetBounds();
+ if(aBounds[0] > -VTK_LARGE_FLOAT && aBounds[1] < VTK_LARGE_FLOAT &&
+ aBounds[2] > -VTK_LARGE_FLOAT && aBounds[3] < VTK_LARGE_FLOAT &&
+ aBounds[4] > -VTK_LARGE_FLOAT && aBounds[5] < VTK_LARGE_FLOAT)
+ {
+ for(int i = 0; i < 5; i = i + 2){
+ if(aBounds[i] < aNewBndBox[i])
+ aNewBndBox[i] = aBounds[i];
+ if(aBounds[i+1] > aNewBndBox[i+1])
+ aNewBndBox[i+1] = aBounds[i+1];
+ }
+ isAny = true;
+ }
+ }
+ }
+ }
+
+ if ( !isAny )
+ {
+ // null bounding box => the center is (0,0,0)
+ return true;
+ }
+
+ if(aNewBndBox[0] > -VTK_LARGE_FLOAT && aNewBndBox[1] < VTK_LARGE_FLOAT &&
+ aNewBndBox[2] > -VTK_LARGE_FLOAT && aNewBndBox[3] < VTK_LARGE_FLOAT &&
+ aNewBndBox[4] > -VTK_LARGE_FLOAT && aNewBndBox[5] < VTK_LARGE_FLOAT)
+ {
+ static vtkFloatingPointType MIN_DISTANCE = 1.0 / VTK_LARGE_FLOAT;
+
+ vtkFloatingPointType aLength = aNewBndBox[1]-aNewBndBox[0];
+ aLength = max((aNewBndBox[3]-aNewBndBox[2]),aLength);
+ aLength = max((aNewBndBox[5]-aNewBndBox[4]),aLength);
+
+ if(aLength < MIN_DISTANCE)
+ return false;
+
+ vtkFloatingPointType aWidth =
+ sqrt((aNewBndBox[1]-aNewBndBox[0])*(aNewBndBox[1]-aNewBndBox[0]) +
+ (aNewBndBox[3]-aNewBndBox[2])*(aNewBndBox[3]-aNewBndBox[2]) +
+ (aNewBndBox[5]-aNewBndBox[4])*(aNewBndBox[5]-aNewBndBox[4]));
+
+ if(aWidth < MIN_DISTANCE)
+ return false;
+
+ theCenter[0] = (aNewBndBox[0] + aNewBndBox[1])/2.0;
+ theCenter[1] = (aNewBndBox[2] + aNewBndBox[3])/2.0;
+ theCenter[2] = (aNewBndBox[4] + aNewBndBox[5])/2.0;
+ return true;
+ }
+
+ return false;
+
+ /*
+ vtkFloatingPointType aBounds[6];
+ int aCount = ComputeVisiblePropBounds(theRenderer,aBounds);
+ printf("aNewBndBox[0] = %f, aNewBndBox[1] = %f,\naNewBndBox[2] = %f, aNewBndBox[3] = %f,\naNewBndBox[4] = %f, aNewBndBox[5] = %f\n",
+ aBounds[0],aBounds[1],aBounds[2],aBounds[3],aBounds[4],aBounds[5]);
+ printf("aCount = %d\n",aCount);
+
+ if(aCount){
+ static vtkFloatingPointType MIN_DISTANCE = 1.0 / VTK_LARGE_FLOAT;
+
+ vtkFloatingPointType aLength = aBounds[1]-aBounds[0];
+ aLength = max((aBounds[3]-aBounds[2]),aLength);
+ aLength = max((aBounds[5]-aBounds[4]),aLength);
+
+ if(aLength < MIN_DISTANCE)
+ return false;
+
+ vtkFloatingPointType aWidth =
+ sqrt((aBounds[1]-aBounds[0])*(aBounds[1]-aBounds[0]) +
+ (aBounds[3]-aBounds[2])*(aBounds[3]-aBounds[2]) +
+ (aBounds[5]-aBounds[4])*(aBounds[5]-aBounds[4]));
+
+ if(aWidth < MIN_DISTANCE)
+ return false;
+
+ theCenter[0] = (aBounds[0] + aBounds[1])/2.0;
+ theCenter[1] = (aBounds[2] + aBounds[3])/2.0;
+ theCenter[2] = (aBounds[4] + aBounds[5])/2.0;
+ return true;
+ }
+ return false;*/
+}
const vtkFloatingPointType theSize,
const vtkFloatingPointType theSizeInPercents);
+VTKVIEWER_EXPORT
+extern
+bool IsBBEmpty(vtkRenderer* theRenderer);
+VTKVIEWER_EXPORT
+extern
+bool ComputeBBCenter(vtkRenderer* theRenderer,
+ vtkFloatingPointType theCenter[3]);
#endif
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
+ PURPOSE. See the above copyright notice for more information.*/
-=========================================================================*/
// VTKViewer_VectorText.cxx is a copy of vtkVectorText.cxx file.
// Purpose of copying: to remove linking to libHybrid.so VTK library
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
+ PURPOSE. See the above copyright notice for more information.*/
-=========================================================================*/
// .NAME vtkVectorText - create polygonal text
// .SECTION Description
VTKViewer_VectorText();
~VTKViewer_VectorText();
- void Execute();
+ //! Main method, which calculate output
+ virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
+
char *Text;
char *Letters[127];
#include "VTKViewer_ViewManager.h"
#include "VTKViewer_ViewModel.h"
-int VTKViewer_ViewManager::_VTKViewMgr_Id = 0;
-
/*!Constructor.Initialize SIUT_ViewManager by \a study and \a theDesktop.
* Create new instance of VTKViewer_Viewer and set view model by it.
*/
VTKViewer_ViewManager::VTKViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* theDesktop )
-: SUIT_ViewManager( study, theDesktop )
+: SUIT_ViewManager( study, theDesktop, new VTKViewer_Viewer() )
{
- myId = ++_VTKViewMgr_Id;
- setViewModel( new VTKViewer_Viewer() );
+ setTitle( tr( "VTK_VIEW_TITLE" ) );
}
/*!Destructor.*/
{
/*!Do nothing.*/
}
-
-/*!Sets view window name*/
-void VTKViewer_ViewManager::setViewName(SUIT_ViewWindow* theView)
-{
- int aPos = myViews.find(theView);
- theView->setCaption( tr( "VTK_VIEW_TITLE" ).arg( myId ).arg( aPos + 1 ) );
-}
public:
VTKViewer_ViewManager( SUIT_Study* study, SUIT_Desktop* );
virtual ~VTKViewer_ViewManager();
-
-protected:
- void setViewName( SUIT_ViewWindow* theView );
-
-private:
- int myId;
- static int _VTKViewMgr_Id;
};
#endif
#include <qpalette.h>
#include <qpopupmenu.h>
+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(),
myRWInteractor->Delete();
//m_RW->Delete() ;
- myRenderer->RemoveAllProps();
+ myRenderer->RemoveAllViewProps();
//m_Renderer->Delete() ;
myTrihedron->Delete();
}
(bnd[5]-bnd[4])*(bnd[5]-bnd[4]));
}else{
aLength = bnd[1]-bnd[0];
- aLength = max((bnd[3]-bnd[2]),aLength);
- aLength = max((bnd[5]-bnd[4]),aLength);
+ aLength = std::max((bnd[3]-bnd[2]),aLength);
+ aLength = std::max((bnd[5]-bnd[4]),aLength);
}
static vtkFloatingPointType aSizeInPercents = 105;
msgid "ICON_VTKVIEWER_VIEW_RIGHT"
msgstr "view_right.png"
+msgid "ICON_VTKVIEWER_VIEW_ROTATION_POINT"
+msgstr "view_rotation_point.png"
+
msgid "ICON_VTKVIEWER_VIEW_ROTATE"
msgstr "view_rotate.png"
msgstr "Change background..."
msgid "VTKViewer_ViewManager::VTK_VIEW_TITLE"
-msgstr "VTK scene:%1 - viewer:%2"
+msgstr "VTK scene:%M - viewer:%V"
msgid "MNU_SHOW_TRIHEDRON"
msgstr "Show/Hide trihedron"