Browse Source

Create GIT repository

master
Maxim Lihachev 11 years ago
commit
0b6c3aee88
  1. 674
      COPYING
  2. 45
      README.md
  3. 2
      example.filter
  4. 276
      lib/bwidget/BWman/ArrowButton.html
  5. 228
      lib/bwidget/BWman/BWidget.html
  6. 307
      lib/bwidget/BWman/Button.html
  7. 266
      lib/bwidget/BWman/ButtonBox.html
  8. 402
      lib/bwidget/BWman/ComboBox.html
  9. 328
      lib/bwidget/BWman/Dialog.html
  10. 141
      lib/bwidget/BWman/DragSite.html
  11. 266
      lib/bwidget/BWman/DropSite.html
  12. 251
      lib/bwidget/BWman/DynamicHelp.html
  13. 341
      lib/bwidget/BWman/Entry.html
  14. 362
      lib/bwidget/BWman/Label.html
  15. 194
      lib/bwidget/BWman/LabelEntry.html
  16. 144
      lib/bwidget/BWman/LabelFrame.html
  17. 675
      lib/bwidget/BWman/ListBox.html
  18. 297
      lib/bwidget/BWman/MainFrame.html
  19. 218
      lib/bwidget/BWman/MessageDlg.html
  20. 374
      lib/bwidget/BWman/NoteBook.html
  21. 180
      lib/bwidget/BWman/PagesManager.html
  22. 158
      lib/bwidget/BWman/PanedWindow.html
  23. 153
      lib/bwidget/BWman/PanelFrame.html
  24. 214
      lib/bwidget/BWman/PasswdDlg.html
  25. 152
      lib/bwidget/BWman/ProgressBar.html
  26. 145
      lib/bwidget/BWman/ProgressDlg.html
  27. 130
      lib/bwidget/BWman/ScrollView.html
  28. 194
      lib/bwidget/BWman/ScrollableFrame.html
  29. 160
      lib/bwidget/BWman/ScrolledWindow.html
  30. 164
      lib/bwidget/BWman/SelectColor.html
  31. 152
      lib/bwidget/BWman/SelectFont.html
  32. 77
      lib/bwidget/BWman/Separator.html
  33. 250
      lib/bwidget/BWman/SpinBox.html
  34. 147
      lib/bwidget/BWman/StatusBar.html
  35. 107
      lib/bwidget/BWman/TitleFrame.html
  36. 937
      lib/bwidget/BWman/Tree.html
  37. 502
      lib/bwidget/BWman/Widget.html
  38. 95
      lib/bwidget/BWman/contents.html
  39. 7
      lib/bwidget/BWman/index.html
  40. 41
      lib/bwidget/BWman/navtree.html
  41. 458
      lib/bwidget/BWman/options.htm
  42. 266
      lib/bwidget/CHANGES.txt
  43. 2148
      lib/bwidget/ChangeLog
  44. 41
      lib/bwidget/LICENSE.txt
  45. 127
      lib/bwidget/README.txt
  46. 551
      lib/bwidget/arrow.tcl
  47. 94
      lib/bwidget/bitmap.tcl
  48. 393
      lib/bwidget/button.tcl
  49. 419
      lib/bwidget/buttonbox.tcl
  50. 493
      lib/bwidget/color.tcl
  51. 913
      lib/bwidget/combobox.tcl
  52. 199
      lib/bwidget/demo/basic.tcl
  53. 46
      lib/bwidget/demo/bwidget.xbm
  54. 212
      lib/bwidget/demo/demo.tcl
  55. 42
      lib/bwidget/demo/dnd.tcl
  56. 141
      lib/bwidget/demo/manager.tcl
  57. 59
      lib/bwidget/demo/select.tcl
  58. 214
      lib/bwidget/demo/tmpldlg.tcl
  59. 260
      lib/bwidget/demo/tree.tcl
  60. 2258
      lib/bwidget/demo/x1.xbm
  61. 357
      lib/bwidget/dialog.tcl
  62. 197
      lib/bwidget/dragsite.tcl
  63. 456
      lib/bwidget/dropsite.tcl
  64. 793
      lib/bwidget/dynhelp.tcl
  65. 498
      lib/bwidget/entry.tcl
  66. 570
      lib/bwidget/font.tcl
  67. BIN
      lib/bwidget/images/bold.gif
  68. BIN
      lib/bwidget/images/copy.gif
  69. BIN
      lib/bwidget/images/cut.gif
  70. BIN
      lib/bwidget/images/dragfile.gif
  71. BIN
      lib/bwidget/images/dragicon.gif
  72. BIN
      lib/bwidget/images/error.gif
  73. BIN
      lib/bwidget/images/file.gif
  74. BIN
      lib/bwidget/images/folder.gif
  75. BIN
      lib/bwidget/images/hourglass.gif
  76. BIN
      lib/bwidget/images/info.gif
  77. BIN
      lib/bwidget/images/italic.gif
  78. 5
      lib/bwidget/images/minus.xbm
  79. BIN
      lib/bwidget/images/new.gif
  80. 5
      lib/bwidget/images/opcopy.xbm
  81. BIN
      lib/bwidget/images/open.gif
  82. BIN
      lib/bwidget/images/openfold.gif
  83. 5
      lib/bwidget/images/oplink.xbm
  84. 5
      lib/bwidget/images/opmove.xbm
  85. BIN
      lib/bwidget/images/overstrike.gif
  86. BIN
      lib/bwidget/images/palette.gif
  87. BIN
      lib/bwidget/images/passwd.gif
  88. BIN
      lib/bwidget/images/paste.gif
  89. 5
      lib/bwidget/images/plus.xbm
  90. BIN
      lib/bwidget/images/print.gif
  91. BIN
      lib/bwidget/images/question.gif
  92. BIN
      lib/bwidget/images/redo.gif
  93. BIN
      lib/bwidget/images/save.gif
  94. 9
      lib/bwidget/images/target.xbm
  95. BIN
      lib/bwidget/images/underline.gif
  96. BIN
      lib/bwidget/images/undo.gif
  97. BIN
      lib/bwidget/images/warning.gif
  98. 54
      lib/bwidget/init.tcl
  99. 329
      lib/bwidget/label.tcl
  100. 105
      lib/bwidget/labelentry.tcl
  101. Some files were not shown because too many files have changed in this diff Show More

674
COPYING

@ -0,0 +1,674 @@ @@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, 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
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If 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 convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU 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
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "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 PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state 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 program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

45
README.md

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
**tMKB10** - справочник Международной классификации болезней десятого пересмотра с текстовым и графическим пользовательскими интерфейсами
##Лицензия
Copyright (C) 2011-2014, Maxim Lihachev, <envrm@yandex.ru>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
##Описание
Международная статистическая классификация болезней и проблем, связанных со
здоровьем — документ, используемый как ведущая статистическая и
классификационная основа в здравоохранении. МКБ является нормативным документом,
обеспечивающим единство методических подходов и международную сопоставимость
материалов. В настоящее время действует Международная классификация болезней
Десятого пересмотра (МКБ-10, ICD-10).
##Использование
cli: tMKB10.tcl [код МКБ]
gui: tMKB10.tcl
##Версия
0.1
##Текстовый интерфейс
![][screenshot1]
[screenshot1]: tMKB10.gif
##Графический интерфейс
![][screenshot2]
[screenshot2]: tMKB10.gif
##Структура программы
![][structure]
[structure]: tMKB10.gif

2
example.filter

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
filter magenta {Заболевания органов дыхания} J00-J99
filter green {Сахарный диабет} E10

276
lib/bwidget/BWman/ArrowButton.html

@ -0,0 +1,276 @@ @@ -0,0 +1,276 @@
<HTML>
<HEAD><TITLE>ArrowButton</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ArrowButton</B>
- Button widget with an arrow shape.
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ArrowButton</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-activebackground">-activebackground</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-activeforeground">-activeforeground</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-disabledforeground">-disabledforeground</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightbackground">-highlightbackground</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightcolor">-highlightcolor</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightthickness">-highlightthickness</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-repeatdelay">-repeatdelay</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-repeatinterval">-repeatinterval</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-troughcolor">-troughcolor</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-armcommand">-armcommand</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-arrowbd">-arrowbd</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-arrowrelief">-arrowrelief</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-clean">-clean</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-command">-command</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-dir">-dir</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-disarmcommand">-disarmcommand</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-helptext">-helptext</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-helptype">-helptype</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-helpvar">-helpvar</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-ipadx">-ipadx</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-ipady">-ipady</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-state">-state</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-type">-type</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#invoke"><B>invoke</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ArrowButton can be of two types following <B>type</B> option:
for <B>button</B> type, it is standard button with an arrow drawn on it;
for <B>arrow</B> type, it is an arrow like scrollbar's arrow.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-armcommand"><B>-armcommand</B></A></DT>
<DD>
Specifies a Tcl command to associate with the ArrowButton when mouse button 1 is pressed
over the ArrowButton. When <B>repeatdelay</B> or <B>repeatinterval</B> option is positive
integer, this command is repeatedly called if mouse pointer is over the button and until
mouse button 1 is released.
</DD>
</DL>
<DL><DT><A NAME="-arrowbd"><B>-arrowbd</B></A></DT>
<DD>
When ArrowButton <B>type</B> is <I>arrow</I>, specifies the border width of the
arrow. Must be 1 or 2.
</DD>
</DL>
<DL><DT><A NAME="-arrowrelief"><B>-arrowrelief</B></A></DT>
<DD>
When ArrowButton <B>type</B> is <I>arrow</I>, specifies the relief of the arrow.
Must be <B>raised</B> or <B>sunken</B>.
</DD>
</DL>
<DL><DT><A NAME="-clean"><B>-clean</B></A></DT>
<DD>
Specifies a level of quality, between 0 and 2, for the arrow.
If 0, the arrow is drawn with its maximum width and height.
If 1, the base of arrow is arranged to be odd to have same edges.
If 2, the base of arrow is arranged to be odd and the orthogonal to be (base+1)/2 to
have 'straight' diagonal for edges.
</DD>
</DL>
<DL><DT><A NAME="-command"><B>-command</B></A></DT>
<DD>
Specifies a Tcl command to associate with the ArrowButton. This command
is typically invoked when mouse button 1 is released over the ArrowButton
window.
</DD>
</DL>
<DL><DT><A NAME="-dir"><B>-dir</B></A></DT>
<DD>
Specifies the direction of the arrow: <B>top</B>, <B>bottom</B>, <B>left</B>
or <B>right</B>.
</DD>
</DL>
<DL><DT><A NAME="-disarmcommand"><B>-disarmcommand</B></A></DT>
<DD>
Specifies a Tcl command to associate with the ArrowButton when mouse button 1 is released.
This command is called even if pointer is not over the ArrowButton, and always before
the command specified by <B>command</B> option.
It is typically used in conjuntion with <B>armcommand</B>, <B>repeatdelay</B> and
<B>repeatinterval</B>.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies a desired height for the ArrowButton. The value is in screen units.
</DD>
</DL>
<DL><DT><A NAME="-helptext"><B>-helptext</B></A></DT>
<DD>
Text for dynamic help. If empty, no help is available for this widget.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helptype"><B>-helptype</B></A></DT>
<DD>
Type of dynamic help. Use <I>balloon</I> or <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helpvar"><B>-helpvar</B></A></DT>
<DD>
Variable to use when <B>helptype</B> option is <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-ipadx"><B>-ipadx</B></A></DT>
<DD>
Specifies a minimun pad between the ArrowButton border and the right and left side
of the arrow. The value is in screen units.
</DD>
</DL>
<DL><DT><A NAME="-ipady"><B>-ipady</B></A></DT>
<DD>
Specifies a minimun pad between the ArrowButton border and the top and bottom side
of the arrow. The value is in screen units.
</DD>
</DL>
<DL><DT><A NAME="-state"><B>-state</B></A></DT>
<DD>
Specifies one of three states for the ArrowButton: <B>normal</B>, <B>active</B>,
or <B>disabled</B>.
<DL><DT>If ArrowButton <B>type</B> is <I>button</I>:</DT>
<DD>In normal state the ArrowButton is displayed using the
<B>foreground</B> and <B>background</B> options. The active state is
typically used when the pointer is over the ArrowButton. In active state
the ArrowButton is displayed using the <B>activeforeground</B> and
<B>activebackground</B> options. In disabled state the <B>disabledforeground</B> and
<B>background</B> options determine how the ArrowButton is displayed.
</DD>
<DT>If ArrowButton <B>type</B> is <I>arrow</I>:</DT>
<DD>Only colors of arrow change. The background of ArrowButton is always
displayed using <B>troughcolor</B> option.
In normal state the ArrowButton is displayed using the <B>background</B> option. The active
state is typically used when the pointer is over the ArrowButton. In active state
the ArrowButton is displayed using the <B>activebackground</B> option. In disabled state
the ArrowButton is displayed with a dark stipple.
</DD>
</DL>
Disabled state means that the ArrowButton
should be insensitive: the default bindings will refuse to activate
the widget and will ignore mouse button presses.
</DD>
</DL>
<DL><DT><A NAME="-type"><B>-type</B></A></DT>
<DD>
Determines the type of the ArrowButton: <B>button</B> for standard button look, or
<B>arrow</B> scrollbar's arrow look.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies a desired width for the ArrowButton. The value is in screen units.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="invoke"><I>pathName</I> <B>invoke</B></A>
</DT><DD>
If ArrowButton <B>state</B> is not disabled, this invoke the commands of the button.
ArrowButton is redisplayed with active color and sunken relief, and
<B>armcommand</B> is called. Then ArrowButton is redisplayed with
normal color and its defined relief, and <B>disarmcommand</B> then <B>command</B>
are called.
<P><B>invoke</B> is called when ArrowButton has input focus and user press the space bar.
</DD></DL>
</BODY></HTML>

228
lib/bwidget/BWman/BWidget.html

@ -0,0 +1,228 @@ @@ -0,0 +1,228 @@
<HTML>
<HEAD><TITLE>BWidget</TITLE></HEAD>
<BODY BGCOLOR=white>
<IMG SRC="constr.gif" WIDTH="40" HEIGHT="40"> Under construction ...<BR>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>BWidget</B>
- Description text
</DD></DL>
<DL>
<DT><I><A HREF="#wc">COMMAND</A></I></DT>
<DD>BWidget::<A HREF="#XLFDfont"><B>XLFDfont</B></A>
<I>cmd</I>
?<I>arg...</I>?
</DD>
<DD>BWidget::<A HREF="#assert"><B>assert</B></A>
<I>exp</I>
?<I>msg</I>?
</DD>
<DD>BWidget::<A HREF="#badOptionString"><B>badOptionString</B></A>
<I>type</I>
<I>value</I>
<I>list</I>
</DD>
<DD>BWidget::<A HREF="#bindMouseWheel"><B>bindMouseWheel</B></A>
<I>widget</I>
</DD>
<DD>BWidget::<A HREF="#classes"><B>classes</B></A>
<I>class</I>
</DD>
<DD>BWidget::<A HREF="#clonename"><B>clonename</B></A>
<I>menu</I>
</DD>
<DD>BWidget::<A HREF="#focus"><B>focus</B></A>
<I>option</I>
<I>path</I>
</DD>
<DD>BWidget::<A HREF="#get3dcolor"><B>get3dcolor</B></A>
<I>path</I>
<I>bgcolor</I>
</DD>
<DD>BWidget::<A HREF="#getname"><B>getname</B></A>
<I>name</I>
</DD>
<DD>BWidget::<A HREF="#grab"><B>grab</B></A>
<I>option</I>
<I>path</I>
</DD>
<DD>BWidget::<A HREF="#inuse"><B>inuse</B></A>
<I>class</I>
</DD>
<DD>BWidget::<A HREF="#library"><B>library</B></A>
<I>class</I> ?<i>class ...</i>?
</DD>
<DD>BWidget::<A HREF="#lreorder"><B>lreorder</B></A>
<I>list</I>
<I>neworder</I>
</DD>
<DD>BWidget::<A HREF="#parsetext"><B>parsetext</B></A>
<I>text</I>
</DD>
<DD>BWidget::<A HREF="#place"><B>place</B></A>
<I>path</I>
<I>w</I>
<I>h</I>
?<I>arg...</I>?
</DD>
<DD>BWidget::<A HREF="#write"><B>write</B></A>
<I>filename</I> ?<i>mode</i>?
</DD>
<DD>BWidget::<A HREF="#wrongNumArgsString"><B>wrongNumArgsString</B></A>
<I>string</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
Description text
</P>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">COMMAND</A></B><BR>
<DL><DT><A NAME="XLFDfont">BWidget::<B>XLFDfont</B></A>
<I>cmd</I>
?<I>arg...</I>?
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="assert">BWidget::<B>assert</B></A>
<I>exp</I>
?<I>msg</I>?
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="badOptionString">BWidget::<B>badOptionString</B></A>
<I>type</I>
<I>value</I>
<I>list</I>
</DT><DD>
Return a proper error string for a <i>value</i> of <i>type</i> that doesn't
match <i>list</i>.
</DD></DL>
<DL><DT><A NAME="bindMouseWheel">BWidget::<B>bindMouseWheel</B></A>
<I>widget</I>
</DT><DD>
Bind the given <i>widget</i> with the standard mouse wheel bindings.
</DD></DL>
<DL><DT><A NAME="classes">BWidget::<B>classes</B></A>
<I>class</I>
</DT><DD>
Returns a list of classes needed by the given <i>class</i>.
</DD></DL>
<DL><DT><A NAME="clonename">BWidget::<B>clonename</B></A>
<I>menu</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="focus">BWidget::<B>focus</B></A>
<I>option</I>
<I>path</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="get3dcolor">BWidget::<B>get3dcolor</B></A>
<I>path</I>
<I>bgcolor</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="getname">BWidget::<B>getname</B></A>
<I>name</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="grab">BWidget::<B>grab</B></A>
<I>option</I>
<I>path</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="inuse">BWidget::<B>inuse</B></A>
<I>class</I>
</DT><DD>
Returns true or false if the given <i>class</i> is being used by the
current running program.
</DD></DL>
<DL><DT><A NAME="library">BWidget::<B>library</B></A>
<I>class</I>
?<i>class ...</i>?
</DT><DD>
Returns a string of code that contains all the libraries needed to
use the widgets given by <i>class</i>. Each class's code and the
code of its dependent classes is appended to the string and returned.
This is mostly useful for saving BWidgets to another project.
</DD></DL>
<DL><DT><A NAME="lreorder">BWidget::<B>lreorder</B></A>
<I>list</I>
<I>neworder</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="parsetext">BWidget::<B>parsetext</B></A>
<I>text</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="place">BWidget::<B>place</B></A>
<I>path</I>
<I>w</I>
<I>h</I>
?<I>arg...</I>?
</DT><DD>
Used to position and resize the widget specified by
<I>path</I>. <I>w</I> and <I>h</I> are used to specify the requested
width and height of the <I>path</I> widget for use by <B>wm
geometry</B> (set to 0 to use current values). The placement of the widget relative to other widgets or
the screen is controlled by additional arguments:
<DL>
<DT><B>at</B> <I>x</I> <I>y</I></DT>
<DD>Place the widget specified by the <I>path</I> argument at screen
position x,y. See <B>wm geometry</B> for information about window
placement values.</DD>
<DT><B>center</B> <I>?widget?</I></DT>
<DD>Place the <I>path</I> widget centered against <I>widget</I> or against the
root widget if <I>widget</I> is not given.</DD>
<DT><B>left</B> <I>?widget?</I></DT>
<DT><B>right</B> <I>?widget?</I></DT>
<DD>Place the <I>path</I> widget either left or right of the
reference widget (or the root widget if <I>widget</I> is not
specified). If the reference widget's position is such that the newly
placed window might be obscured then the opposite side will be tried.</DD>
<DT><B>above</B> <I>?widget?</I></DT>
<DT><B>below</B> <I>?widget?</I></DT>
<DD>As for left/right above, this option causes the widget to be
placed either above or below the reference widget with the opposite
placement being attempted if the newly placed widget will not be visible.
</DL>
</DL>
<DL><DT><A NAME="write">BWidget::<B>write</B></A>
<I>filename</I>
?<i>mode</i>?
</DT><DD>
Writes the currently used set of BWidget class code to the given
<i>filename</i>. All the code necessary to run the BWidgets
currently in use is written to the file. This is mostly useful
for saving BWidget code to another project as a single file instead
of the entire BWidget package.
</DD></DL>
<DL>
<DT><A NAME="wrongNumArgsString">BWidget::<B>wrongNumArgsString</B></A>
<I>string</I>
</DT>
<DD>
Returns a standard error string for the wrong number of arguments.
<i>string</i> is appended to the standard string.
</DD>
</DL>
</BODY></HTML>

307
lib/bwidget/BWman/Button.html

@ -0,0 +1,307 @@ @@ -0,0 +1,307 @@
<HTML>
<HEAD><TITLE>Button</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>Button</B>
- Button widget with enhanced options
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>Button</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DT><I>Not themed</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-activebackground">-activebackground</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-activeforeground">-activeforeground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-anchor">-anchor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
</TD>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-bitmap">-bitmap</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-cursor">-cursor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-disabledforeground">-disabledforeground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
</TD>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightbackground">-highlightbackground</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightcolor">-highlightcolor</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightthickness">-highlightthickness</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-image">-image</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-justify">-justify</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-padx">-padx</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-pady">-pady</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-repeatdelay">-repeatdelay</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-repeatinterval">-repeatinterval</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-text">-text</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-textvariable">-textvariable</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-wraplength">-wraplength</A></TD>
</TABLE></DD>
<DT><I>Themed</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-compound">-compound</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-cursor">-cursor</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-image">-image</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-style">-style</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-repeatdelay">-repeatdelay</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-repeatinterval">-repeatinterval</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-text">-text</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-textvariable">-textvariable</A></TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-armcommand">-armcommand</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-command">-command</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-default">-default</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-disarmcommand">-disarmcommand</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-helptext">-helptext</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-helptype">-helptype</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-helpvar">-helpvar</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-name">-name</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-relief">-relief</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-state">-state</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-underline">-underline</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#invoke"><B>invoke</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
Button widget extends the Tk button with new options.
<A HREF="DynamicHelp.html">DynamicHelp</A> options,
a new relief style, callback for <B>arm</B>/<B>disarm</B>, and
<B>repeatdelay</B>/<B>repeatinterval</B> options has been added.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-armcommand"><B>-armcommand</B></A></DT>
<DD>
Specifies a Tcl command to associate with the Button when mouse button 1 is pressed over the
Button. When <B>repeatdelay</B> or <B>repeatinterval</B> option is positive integer,
this command is repeatedly called if mouse pointer is over the Button and until mouse
button 1 is released.
</DD>
</DL>
<DL><DT><A NAME="-command"><B>-command</B></A></DT>
<DD>
Specifies a Tcl command to associate with the Button. This command
is typically invoked when mouse button 1 is released over the Button
window.
</DD>
</DL>
<DL><DT><A NAME="-default"><B>-default</B></A></DT>
<DD>
Specifies one of three states for the default ring: <B>normal</B>, <B>active</B>,
or <B>disabled</B>. In active state, the button is drawn with the platform specific
appearance for a default button. In normal state, the button is drawn with the platform
specific appearance for a non-default button, leaving enough space to draw the default
button appearance. The normal and active states will result in buttons of the same size.
In disabled state, the button is drawn with the non-default button appearance without
leaving space for the default appearance. The disabled state may result
in a smaller button than the active state.
</DD>
</DL>
<DL><DT><A NAME="-disarmcommand"><B>-disarmcommand</B></A></DT>
<DD>
Specifies a Tcl command to associate with the Button when mouse button 1 is released.
This command is called even if pointer is not over the Button, and always before
the command specified by <B>command</B> option.
It is typically used in conjuntion with <B>armcommand</B>, <B>repeatdelay</B> and
<B>repeatinterval</B>.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies a desired height for the Button.
If an image or bitmap is being displayed in the Button then the value is in
screen units;
for text it is in lines of text.
If this option isn't specified, the Button's desired height is computed
from the size of the image or bitmap or text being displayed in it.<BR>
Option not available when widget is <I>themed</I>.
</DD>
</DL>
<DL><DT><A NAME="-helptext"><B>-helptext</B></A></DT>
<DD>
Text for dynamic help. If empty, no help is available for this widget.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helptype"><B>-helptype</B></A></DT>
<DD>
Type of dynamic help. Use <I>balloon</I> or <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helpvar"><B>-helpvar</B></A></DT>
<DD>
Variable to use when <B>helptype</B> option is <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-name"><B>-name</B></A></DT>
<DD>
Specifies a standard name for the button. If the option <B>*<I>name</I>Name</B> is
found in the resources database, then <B>text</B> and <B>underline</B> options
are extracted from its value.
</DD>
</DL>
<DL><DT><A NAME="-relief"><B>-relief</B></A></DT>
<DD>
Specifies the 3-D effect desired for the widget. Acceptable values are standard values for
button relief (<B>raised</B>, <B>sunken</B>, <B>flat</B>, <B>ridge</B>, <B>solid</B>, and <B>groove</B>) and <B>link</B>, which specifies that button relief is <B>flat</B> when pointer
is outside the button and <B>raised</B> when pointer is inside.<BR>
This option has only the following effect if the widget is <I>themed</I>:
The value <B>link</B> used a style <B>Toolbutton</B> while any other value uses the standard effect.
</DD>
</DL>
<DL><DT><A NAME="-state"><B>-state</B></A></DT>
<DD>
Specifies one of three states for the Button: <B>normal</B>, <B>active</B>,
or <B>disabled</B>. In normal state the Button is displayed using the
<B>foreground</B> and <B>background</B> options. The active state is
typically used when the pointer is over the Button. In active state
the Button is displayed using the <B>activeforeground</B> and
<B>activebackground</B> options. Disabled state means that the Button
should be insensitive: the default bindings will refuse to activate
the widget and will ignore mouse button presses.
In this state the <B>disabledforeground</B> and
<B>background</B> options determine how the Button is displayed.
</DD>
</DL>
<DL><DT><A NAME="-underline"><B>-underline</B></A></DT>
<DD>
Specifies the integer index of a character to underline in the label of the button.
0 corresponds to the first character of the text displayed, 1 to the next character,
and so on.
<BR>The binding <B>&lt;Alt-<I>char</I>&gt;</B> is automatically set on the toplevel
of the Button to call Button::<B>setfocus</B>.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
If an image or bitmap is being displayed in the Button then the value is in
screen units;
for text it is in characters.
If this option isn't specified, the Button's desired width is computed
from the size of the image or bitmap or text being displayed in it.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="invoke"><I>pathName</I> <B>invoke</B></A>
</DT><DD>
If Button <B>state</B> is not disabled, this invoke the commands of the Button.
Button is redisplayed with active color and sunken relief, and
<B>armcommand</B> is called. Then Button is redisplayed with
normal color and its defined relief, and <B>disarmcommand</B> then <B>command</B>
are called.
<P><B>invoke</B> is called when Button has input focus and user press the space bar.
</DD></DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">BINDINGS</A></B><BR>
<DL><DT><A NAME="Invoke"><I>&lt;&lt;Invoke&gt;&gt;</I></A>
</DT><DD>
Invoke the <B>invoke</B> widget command.
</DD></DL>
<HR WIDTH="50%"><BR>
</BODY></HTML>

266
lib/bwidget/BWman/ButtonBox.html

@ -0,0 +1,266 @@ @@ -0,0 +1,266 @@
<HTML>
<HEAD><TITLE>ButtonBox</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ButtonBox</B>
- Set of buttons with horizontal or vertical layout
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ButtonBox</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-default">-default</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-homogeneous">-homogeneous</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-orient">-orient</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-padx">-padx</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-pady">-pady</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-spacing">-spacing</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-state">-state</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#add"><B>add</B></A>
?<I>option value...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#delete"><B>delete</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#index"><B>index</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#insert"><B>insert</B></A>
<i>index</i> ?<I>option value...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#invoke"><B>invoke</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#itemcget"><B>itemcget</B></A>
<I>index</I>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#itemconfigure"><B>itemconfigure</B></A>
<I>index</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#setfocus"><B>setfocus</B></A>
<I>index</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ButtonBox layouts Button horizontally or vertically.
Some commands take an <I>index</I> as argument indicating on which
Button it work. This index may be specified in any of the following forms:
<P>
<DL COMPACT>
<DT>
<I>number</I>
<DD>
Specifies the Button numerically, where 0 corresponds
to the first added Button, 1 to the next, and so on.
<DT>
<B>end</B> or <B>last</B>
<DD>
Indicates the last item added.
<DT><B>default</B>
<DD>
Indicates the default Button.
<DT>
<i>name</i>
<DD>
Indicates the button whose <b>-name</b> option is <i>name</i>.
<DT>
<i>text</i>
<DD>
Indicates the button whose <b>-text</b> option is <i>text</i>.
</DL>
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-background"><B>-background</B></A></DT>
<DD>
Specifies a default background color for all added buttons and for the frame.<BR>
For <I>themed</I> wigets, the button color is not set.
</DD>
</DL>
<DL><DT><A NAME="-default"><B>-default</B></A></DT>
<DD>
Specifies the default button of the button box. The value is an integer
referencing the n-th added button, starting from 0.
If this value is -1 (the default), all button wil be drawn with their -default
option set to disabled, and this value can not be changed. <BR>If this value is
not -1, the associated button is drawn with -default option set to active and
the others are drawn with -default option set to normal. The value can be changed
by configure.
</DD>
</DL>
<DL><DT><A NAME="-homogeneous"><B>-homogeneous (read-only)</B></A></DT>
<DD>
Specifies wether or not buttons must have the same width for horizontal layout.
</DD>
</DL>
<DL><DT><A NAME="-orient"><B>-orient (read-only)</B></A></DT>
<DD>
Specifies the orientation of the button box. If this option is <B>horizontal</B>
(the default), buttons are added from top to bottom.
If this option is <B>vertical</B>, buttons are added from left to right.
</DD>
</DL>
<DL><DT><A NAME="-padx"><B>-padx</B></A></DT>
<DD>
Specifies a default value for the -padx option of all added buttons.<BR>
Option has no effect for <I>themed</I> wigets.
</DD>
</DL>
<DL><DT><A NAME="-pady"><B>-pady</B></A></DT>
<DD>
Specifies a default value for the -pady option of all added buttons.<BR>
Option has no effect for <I>themed</I> wigets.
</DD>
</DL>
<DL><DT><A NAME="-spacing"><B>-spacing</B></A></DT>
<DD>
Specifies the default spacing between buttons. This value can be changed before each
call to <B>add</B>.
</DD>
</DL>
<DL><DT><A NAME="-state"><B>-state</B></A></DT>
<DD>
Specifies a state for all the buttons in the button box. Can be any state supported by buttons.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="add"><I>pathName</I> <B>add</B></A>
?<I>option value...</I>?
</DT><DD>
Add a button to the button box.
<P>
See <A HREF="Button.html"><B>Button</B></A> for description of options.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="delete"><I>pathName</I> <B>delete</B></A>
<I>index</I>
</DT><DD>
Delete the button at <i>index</i> from the button box.
</DD></DL>
<DL><DT><A NAME="index"><I>pathName</I> <B>index</B></A>
<I>index</I>
</DT><DD>
Return the numerical index corresponding to the item.
</DD></DL>
<DL><DT><A NAME="insert"><I>pathName</I> <B>insert</B></A>
<I>index</I> ?<I>option value...</I>?
</DT><DD>
Insert a new button into the button box before the given index.
</DD></DL>
<DL><DT><A NAME="invoke"><I>pathName</I> <B>invoke</B></A>
<I>index</I>
</DT><DD>
Invoke the Button given by <I>index</I>.
</DD></DL>
<DL><DT><A NAME="itemcget"><I>pathName</I> <B>itemcget</B></A>
<I>index</I>
<I>option</I>
</DT><DD>
Returns the current value of a configuration option for the item.
<I>Option</I> may have any of the values accepted by the item creation command.
</DD></DL>
<DL><DT><A NAME="itemconfigure"><I>pathName</I> <B>itemconfigure</B></A>
<I>index</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
This command is similar to the <B>configure</B> command, except that it applies to the
options for an individual item, whereas <B>configure</B> applies to the options for
the widget as a whole. <B>Options</B> may have any of the values accepted by the
item creation widget command. If options are specified, options are modified as indicated
in the command and the command returns an empty string. If no options are specified,
returns a list describing the current options for the item.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="setfocus"><I>pathName</I> <B>setfocus</B></A>
<I>index</I>
</DT><DD>
Set the focus to the Button given by <I>index</I>.
</DD></DL>
</BODY></HTML>

402
lib/bwidget/BWman/ComboBox.html

@ -0,0 +1,402 @@ @@ -0,0 +1,402 @@
<HTML>
<HEAD><TITLE>ComboBox</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ComboBox</B>
- ComboBox widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ComboBox</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="ArrowButton.html">OPTIONS from <B>ArrowButton</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-foreground or -fg</TD>
<TD>&nbsp;&nbsp;-state</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="Entry.html">OPTIONS from <B>Entry</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-command</TD>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dragenabled</TD>
<TD>&nbsp;&nbsp;-dragendcmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dragevent</TD>
<TD>&nbsp;&nbsp;-draginitcmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dragtype</TD>
<TD>&nbsp;&nbsp;-dropcmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dropenabled</TD>
<TD>&nbsp;&nbsp;-dropovercmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-droptypes</TD>
<TD>&nbsp;&nbsp;-editable</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-entrybg (see <B>-background</B>)</TD>
<TD>&nbsp;&nbsp;-entryfg (see <B>-foreground</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-exportselection</TD>
<TD>&nbsp;&nbsp;-font</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helptext</TD>
<TD>&nbsp;&nbsp;-helptype</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helpvar</TD>
<TD>&nbsp;&nbsp;-highlightbackground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-highlightcolor</TD>
<TD>&nbsp;&nbsp;-highlightthickness</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertbackground</TD>
<TD>&nbsp;&nbsp;-insertborderwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertofftime</TD>
<TD>&nbsp;&nbsp;-insertontime</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertwidth</TD>
<TD>&nbsp;&nbsp;-justify</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-selectbackground</TD>
<TD>&nbsp;&nbsp;-selectborderwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-selectforeground</TD>
<TD>&nbsp;&nbsp;-show</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-state</TD>
<TD>&nbsp;&nbsp;-takefocus</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-text</TD>
<TD>&nbsp;&nbsp;-textvariable</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-width</TD>
<TD>&nbsp;&nbsp;-xscrollcommand</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-autocomplete">-autocomplete</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-autopost">-autopost</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-bwlistbox">-bwlistbox</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-expand">-expand</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-hottrack">-hottrack</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-images">-images</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-listboxwidth">-listboxwidth</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-modifycmd">-modifycmd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-postcommand">-postcommand</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-values">-values</A></TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#bind"><B>bind</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#clearvalue"><B>clearvalue</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#get"><B>get</B></A></DD>
<DD><I>pathName</I> <A HREF="#getlistbox"><B>getlistbox</B></A></DD>
<DD><I>pathName</I> <A HREF="#getvalue"><B>getvalue</B></A></DD>
<DD><I>pathName</I> <A HREF="#icursor"><B>icursor</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#post"><B>post</B></A></DD>
<DD><I>pathName</I> <A HREF="#setvalue"><B>setvalue</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#unpost"><B>unpost</B></A></DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ComboBox widget enables the user to select a value among a list given by
the <B>values</B> option. The list of possible values can be popped by
pressing the ArrowButton or by clicking in the entry when <B>editable</B>
value of the ComboBox is <B>false</B>.<BR> If <B>editable</B> value of the
ComboBox is <B>true</B> and the entry has the focus, the user can press the
top and bottom arrow keys to modify its value. If the current value exactly
match a value in the list, then the previous (for top arrow key) or then
next (for bottom arrow key) value in the list is displayed. If the current
value match the beginning of a value in the list, then this value is
displayed. If the current value doesnt match anything, then the first
value is displayed.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL>
<DT><A NAME="-autocomplete"><B>-autocomplete</B></A></DT>
<DD>
Specifies whether or not the combobox should attempt to auto-complete
the value in the entry field as the user types. If true, the combobox
will fill in a value that it finds in its value list as the user types
into the entry.
</DD>
</DL>
<DL>
<DT><A NAME="-autopost"><B>-autopost</B></A></DT>
<DD>
Specifies whether or not the combobox should post the drop down as
the user types. If true, the combobox will post and scroll to the
entry that most closely matches the user entry.
</DD>
</DL>
<DL>
<DT><A NAME="-bwlistbox"><B>-bwlistbox</B></A></DT>
<DD>
Specifies that the combobox should use a BWidget listbox in its drop
down instead of the standard Tk option. This option is enabled by
default if the <b>-images</b> option is not empty.
</DD>
</DL>
<DL><DT><A NAME="-expand"><B>-expand</B></A></DT>
<DD>
Specifies the value expansion behavior for the window. It must be
<B>none</B> (default) or <B>tab</B>. If <B>tab</B> is specified, then
a Tab binding is added to attempt to expand the current value based on
the other values in <B>-values</B>.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the window, in lines. If zero or less,
then the desired height for the window is made just large enough to hold
all the elements in the listbox.
</DD>
<DL>
<DT><A NAME="-hottrack"><B>-hottrack</B></A></DT>
<DD>
The selection in the drop down listbox will follow the mouse cursor
as it moves.
</DD>
</DL>
<DL>
<DT><A NAME="-images"><B>-images</B></A></DT>
<DD>
A list of images that correspond to the <b>-values</b> option. Each
image will be drawn next to its value in the drop down. This option
enables the <b>-bwlistbox</b> by default as it is needed to display
images.
</DD>
</DL>
<DL>
<DT><A NAME="-listboxwidth"><B>-listboxwidth</B></A></DT>
<DD>
Specifies the width of the listbox in the drop down. Defaults to the
same size as the combobox.
</DD>
</DL>
</DL>
<DL><DT><A NAME="-modifycmd"><B>-modifycmd</B></A></DT>
<DD>
Specifies a Tcl command called when the user modify the value of the ComboBox by selecting it in the listbox or pressing arrow key.
</DD>
</DL>
<DL><DT><A NAME="-postcommand"><B>-postcommand</B></A></DT>
<DD>
Specifies a Tcl command called before the listbox of the ComboBox is mapped.
</DD>
</DL>
<DL><DT><A NAME="-values"><B>-values</B></A></DT>
<DD>
Specifies the values to display in the listbox of the ComboBox.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="bind"><I>pathName</I> <B>bind</B></A>
?<I>arg...</I>?
</DT><DD>
Set bindings on the entry widget.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="clearvalue"><I>pathName</I> <B>clearvalue</B></A>
</DT><DD>
Clears the current text of the ComboBox.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no
<I>option</I> is specified, returns a list describing all of the available
options for <I>pathName</I>. If <I>option</I> is specified with no
<I>value</I>, then the command returns a list describing the one named
<I>option</I> (this list will be identical to the corresponding sublist of
the value returned if no <I>option</I> is specified). If one or more
<I>option-value</I> pairs are specified, then the command modifies the
given widget option(s) to have the given value(s); in this case the command
returns an empty string. <I>Option</I> may have any of the values accepted
by the creation command. Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="get"><I>pathName</I> <B>get</B></A>
</DT><DD>
Returns the current contents of the entry.
</DD></DL>
<DL><DT><A NAME="getlistbox"><I>pathName</I> <B>getlistbox</B></A>
</DT><DD>
Returns the path to the listbox in the drop down.
</DD></DL>
<DL><DT><A NAME="getvalue"><I>pathName</I> <B>getvalue</B></A>
</DT><DD>
Returns the index of the current text of the ComboBox in the list of values,
or -1 if it doesn't match any value.
</DD></DL>
<DL><DT><A NAME="icursor"><I>pathName</I> <B>icursor</B></A>
<I>index</I>
</DT><DD>
Arrange for the insertion cursor to be displayed just before the
character given by <i>index</i>. Returns an empty string.
</DD></DL>
<DL><DT><A NAME="post"><I>pathName</I> <B>post</B></A>
</DT><DD>
Post the drop down.
</DD></DL>
<DL><DT><A NAME="setvalue"><I>pathName</I> <B>setvalue</B></A>
<I>index</I>
</DT><DD>
Set the text of the ComboBox to the value indicated by <I>index</I> in the list of values.
<I>index</I> may be specified in any of the following forms:
<P>
<DL COMPACT>
<DT>
<B>last</B>
<DD>
Specifies the last element of the list of values.
<DT><B>first</B>
<DD>
Specifies the first element of the list of values.
<DT>
<B>next</B>
<DD>
Specifies the element following the current (ie returned by <B>getvalue</B>) in the list
of values.
<DT><B>previous</B>
<DD>
Specifies the element preceding the current (ie returned by <B>getvalue</B>) in the list
of values.
<DT>
@<I>number</I>
<DD>
Specifies the integer index in the list of values.
</DL>
</DD></DL>
<DL><DT><A NAME="unpost"><I>pathName</I> <B>unpost</B></A>
</DT><DD>
Unpost the drop down.
</DD></DL>
<HR><BR><B>BINDINGS</B><BR><BR>
When Entry of the ComboBox has the input focus, it has the following bindings, in addition
to the default Entry bindings:
<UL>
<LI>Page up set the value of the ComboBox to the first value.
<LI>Page down set the value of the ComboBox to the last value.
<LI>Arrow up set the value of the ComboBox to the previous value.
<LI>Arrow down set the value of the ComboBox to the next value.
<LI>If <B>-autopost</B> is enabled, Escape unposts the listbox.
</UL>
If the listbox is not mapped and ComboBox is not editable or disabled,
mouse button 1 on the Entry cause the listbox to popup, as if the user press the ArrowButton.
</BODY></HTML>

328
lib/bwidget/BWman/Dialog.html

@ -0,0 +1,328 @@ @@ -0,0 +1,328 @@
<HTML>
<HEAD><TITLE>Dialog</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>Dialog</B>
- Dialog abstraction with custom buttons
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>Dialog</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="ButtonBox.html">OPTIONS from <B>ButtonBox</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-homogeneous</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-padx</TD>
<TD>&nbsp;&nbsp;-pady</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-spacing</TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-anchor">-anchor</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-bitmap">-bitmap</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-cancel">-cancel</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-default">-default</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-geometry">-geometry</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-image">-image</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-modal">-modal</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-parent">-parent</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-place">-place</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-separator">-separator</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-side">-side</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-title">-title</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-transient">-transient</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#add"><B>add</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#draw"><B>draw</B></A>
?<I>focus</I>?
</DD>
<DD><I>pathName</I> <A HREF="#enddialog"><B>enddialog</B></A>
<I>result</I>
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#invoke"><B>invoke</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#itemcget"><B>itemcget</B></A>
<I>index</I>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#itemconfigure"><B>itemconfigure</B></A>
<I>index</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#setfocus"><B>setfocus</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#withdraw"><B>withdraw</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
Dialog widget enables the user to create a dialog box.
Some commands take an <I>index</I> as argument indicating on which
Button it work. This index is the same specified for equivalent ButtonBox command:
<P>
<DL COMPACT>
<DT>
<I>number</I>
<DD>
Specifies the Button numerically, where 0 corresponds
to the first added Button, 1 to the next, and so on.
<DT>
<B>end</B> or <B>last</B>
<DD>
Indicates the last item added.
<DT><B>default</B>
<DD>
Indicates the default Button.
</DL>
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-anchor"><B>-anchor (read-only)</B></A></DT>
<DD>
Specifies the anchor point of the ButtonBox.
Must be one of <B>w</B>, <B>e</B>, <B>n</B>, <B>s</B> or <B>c</B>.
If <B>side</B> option is set to <I>top</I> or <I>bottom</I>,
<B>anchor</B> values <I>n</I>, <I>s</I> and <I>c</I> have the same effect.
If <B>side</B> option is set to <I>left</I> or <I>right</I>,
<B>anchor</B> values <I>w</I>, <I>e</I> and <I>c</I> have the same effect.
</DD>
</DL>
<DL><DT><A NAME="-bitmap"><B>-bitmap (read-only)</B></A></DT>
<DD>
Specifies a bitmap to display at the left of the user frame.
<B>image</B> option override <B>bitmap</B>.
</DD>
</DL>
<DL><DT><A NAME="-cancel"><B>-cancel</B></A></DT>
<DD>
Specifies the number of the cancel button of the Dialog. When user presses Esc or the windows close button,
this button is invoked.<BR>
If set to <B>-1</B>, Esc does not invoke anything.
The window close button <I>destroys</I> the dialog in this case and returns <B>-1</B>.
</DD>
</DL>
<DL><DT><A NAME="-default"><B>-default</B></A></DT>
<DD>
Specifies the number of the default button of the Dialog.
When user press Return in the Dialog, this button is invoked.
</DD>
</DL>
</DL>
<DL><DT><A NAME="-geometry"><B>-geometry</B></A></DT>
<DD>
Set the <B>geometry</B> used when method <B>draw</B> is called.
See <B>wm geometry</B> for a parameter description.
</DD>
</DL>
<DL><DT><A NAME="-image"><B>-image (read-only)</B></A></DT>
<DD>
Specifies an image to display at the left of the user frame.
<B>image</B> option override <B>bitmap</B>.
</DD>
</DL>
<DL><DT><A NAME="-modal"><B>-modal</B></A></DT>
<DD>
This option must be <B>none</B>, <B>local</B> or <B>global</B>. The value of this option
specifies the grab mode of the dialog and how works Dialog::<B>draw</B>.
</DD>
</DL>
<DL><DT><A NAME="-parent"><B>-parent</B></A></DT>
<DD>
Parent of the Dialog. Dialog is placed relative to its parent. If empty, it is
placed relative to the root window. Also see <B>place</B> option.
</DD>
</DL>
<DL><DT><A NAME="-place"><B>-place</B></A></DT>
<DD>
Specifies where to draw the Dialog toplevel relative to the dialog's
parent. Must be one of <B>none</B>, <B>center</B>, <B>left</B>, <B>right</B>,
<B>above</B>, <B>below</B>. Default value of <B>place</B> is <I>center</I>.
</DD>
</DL>
<DL><DT><A NAME="-separator"><B>-separator (read-only)</B></A></DT>
<DD>
Specifies wether or not to draw a separator between the user frame and the ButtonBox.
</DD>
</DL>
<DL><DT><A NAME="-side"><B>-side (read-only)</B></A></DT>
<DD>
Specifies where to draw the ButtonBox relative to the user frame. Must be one of
<B>top</B>, <B>left</B>, <B>bottom</B> or <B>right</B>.
</DD>
</DL>
<DL><DT><A NAME="-title"><B>-title</B></A></DT>
<DD>
Title of the Dialog toplevel.
</DD>
</DL>
<DL><DT><A NAME="-transient"><B>-transient (read-only)</B></A></DT>
<DD>
Specifies if the Dialog Toplevel should be a transient window or not. Default
value of <B>transient</B> is <I>true</I>.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="add"><I>pathName</I> <B>add</B></A>
?<I>arg...</I>?
</DT><DD>
Add a button to the button box of the dialog box. Default -command option is
<I>Dialog::enddialog $path index</I> where <I>index</I> is number of button added.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="draw"><I>pathName</I> <B>draw</B></A>
?<I>focus</I>?
</DT><DD>
This command draw the Dialog, and set grab to it following <B>modal</B> option.
If <B>modal</B> option is set to <I>none</I>, the command returns immediatly
an empty string. In all other case, the command returns when Dialog::<B>enddialog</B>
is called or when Dialog is destroyed.
The return value is the result argument of Dialog::<B>enddialog</B> or -1 if it is destroyed.
<P>
By default, the focus is set to the default button referenced by <B>default</B> option,
or to the toplevel of Dialog if no default button has been set.
If <I>focus</I> is present, it must be a pathname, or an index to a button.
Initial focus is set on this pathname or corresponding button.
</DD></DL>
<DL><DT><A NAME="enddialog"><I>pathName</I> <B>enddialog</B></A>
<I>result</I>
</DT><DD>
This command is typically called within a command of a button to make Dialog::<B>draw</B>
return.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Returns the pathname of the user window.
</DD></DL>
<DL><DT><A NAME="invoke"><I>pathName</I> <B>invoke</B></A>
<I>index</I>
</DT><DD>
Invoke the Button given by <I>index</I>.
</DD></DL>
<DL><DT><A NAME="itemcget"><I>pathName</I> <B>itemcget</B></A>
<I>index</I>
<I>option</I>
</DT><DD>
Returns the current value of a configuration option for the item.
<I>Option</I> may have any of the values accepted by the item creation command.
</DD></DL>
<DL><DT><A NAME="itemconfigure"><I>pathName</I> <B>itemconfigure</B></A>
<I>index</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
This command is similar to the <B>configure</B> command, except that it applies to the
options for an individual item, whereas <B>configure</B> applies to the options for
the widget as a whole. <B>Options</B> may have any of the values accepted by the
item creation widget command. If options are specified, options are modified as indicated
in the command and the command returns an empty string. If no options are specified,
returns a list describing the current options for the item.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="setfocus"><I>pathName</I> <B>setfocus</B></A>
<I>index</I>
</DT><DD>
Set the focus to the Button given by <I>index</I>.
</DD></DL>
<DL><DT><A NAME="withdraw"><I>pathName</I> <B>withdraw</B></A>
</DT><DD>
Call this command to hide the dialog box.
</DD></DL>
</BODY></HTML>

141
lib/bwidget/BWman/DragSite.html

@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
<HTML>
<HEAD><TITLE>DragSite</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>DragSite</B>
- Commands set for Drag facilities
</DD></DL>
<DL>
<DT><I><A HREF="#wc">COMMAND</A></I></DT>
<DD>DragSite::<A HREF="#include"><B>include</B></A>
<I>class</I>
<I>type</I>
<I>event</I>
</DD>
<DD>DragSite::<A HREF="#register"><B>register</B></A>
<I>path</I>
?<I>option value...</I>?
</DD>
<DD>DragSite::<A HREF="#setdrag"><B>setdrag</B></A>
<I>path</I>
<I>subpath</I>
<I>initcmd</I>
<I>endcmd</I>
?<I>force</I>?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
Commands of this namespace enable user to define a BWidget or a Tk widget as a drag site.
</P>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">COMMAND</A></B><BR>
<DL><DT><A NAME="include">DragSite::<B>include</B></A>
<I>class</I>
<I>type</I>
<I>event</I>
</DT><DD>
This command provides a simple way to include options relatives to a drag site into
BWidget resources definition.
It includes the options needed for <B>register</B>: <I>-dragevent</I>, initialized to
<I>event</I>, <I>-draginitcmd</I> and <I>-dragendcmd</I>, initialized to empty string,
and two new options:
<TABLE BORDER=0 CELLSPACING=1>
<TR><TD><I>-dragenabled</I><TD>Specifies wether or not drag is active (initialized to 0)
<TR><TD><I>-dragtype</I><TD>Default or alternate dragged data type (initialized to <I>type</I>)
</TABLE>
</DD></DL>
<DL><DT><A NAME="register">DragSite::<B>register</B></A>
<I>path</I>
?<I>option value...</I>?
</DT><DD>
This command is used to declare <I>path</I> as a drag site. Options are:
<P>
<DL><DT><A NAME="DragSite-dragendcmd"><B>-dragendcmd</B></A></DT>
<DD>
Command called when drag terminates (ie when user release drag icon).
This command is called with the following arguments:
<UL>
<LI>the pathname of the drag source (the widget itself),
<LI>the pathname of the drop target,
<LI>the operation,
<LI>the type of the dragged data,
<LI>the dragged data,
<LI>result of the drop (result of the call to <B>-dropcmd</B> of the target),
</UL>
If the drop does not occurs, the target and the operation are empty string and the result
is 0.
</DD>
</DL>
<DL><DT><A NAME="DragSite-dragevent"><B>-dragevent</B></A></DT>
<DD>
Specifies the number of the mouse button associated to the drag.
Must be <B>1</B>, <B>2</B> or <B>3</B>.
</DD>
</DL>
<DL><DT><A NAME="DragSite-draginitcmd"><B>-draginitcmd</B></A></DT>
<DD>
Command called when drag initiates. When the event of option <B>dragevent</B> occurs on
<I>path</I>, this command is called with the following arguments:
<UL>
<LI>pathname of the drag source (<I>path</I>),
<LI>root x-coordinate of pointer,
<LI>root y-coordinate of pointer,
<LI>a toplevel created to represent dragged data. When returning, if it
has no children, a bitmap is automatically displayed.
</UL>
If the command returns an empty string, then the drag will be
suppressed. Otherwise the command must return a list containing three
elements:
<UL>
<LI>the type of the data,
<LI>the list of acceptable basic operations (<B>copy</B>, <B>move</B> and <B>link</B>)
<LI>and the data.
</UL>
Note that even if <B>copy</B> does not appear in the list of basic
operation, it is considered as an acceptable operation, since
<B>copy</B> semantic does not modify the drag source.
</DD>
</DL>
</DD></DL>
<DL><DT><A NAME="setdrag">DragSite::<B>setdrag</B></A>
<I>path</I>
<I>subpath</I>
<I>initcmd</I>
<I>endcmd</I>
?<I>force</I>?
</DT><DD>
This command provides a simple way to call <B>register</B> during a BWidget creation or
configuration.
<UL>
<LI><I>path</I> is the pathname of the BWidget,
<LI><I>subpath</I> is the pathname of the tk widget where drag event occurs,
<LI><I>initcmd</I> BWidget command for <I>drag-init</I> event,
<LI><I>endcmd</I> BWidget command for <I>drag-end</I> event,
<LI><I>force</I> specifies wether or not to call <B>register</B> whenever no option value has
changed (0 by default - for BWidget configuration, use 1 for BWidget creation).
</UL>
<B>setdrag</B> verifies the modification flag of options <B>dragenabled</B> and
<B>dragevent</B> and calls <B>register</B> if needed according to the options values and
<I>initcmd</I> and <I>endcmd</I> arguments. <B>draginitcmd</B> and <B>dragendcmd</B> are not
taken from options of widget because they are considered as user command, called by
BWidget implementation of <I>drag-init</I> and <I>drag-end</I> events.
</DD></DL>
</BODY></HTML>

266
lib/bwidget/BWman/DropSite.html

@ -0,0 +1,266 @@ @@ -0,0 +1,266 @@
<HTML>
<HEAD><TITLE>DropSite</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>DropSite</B>
- Commands set for Drop facilities
</DD></DL>
<DL>
<DT><I><A HREF="#wc">COMMAND</A></I></DT>
<DD>DropSite::<A HREF="#include"><B>include</B></A>
<I>class</I>
<I>types</I>
</DD>
<DD>DropSite::<A HREF="#register"><B>register</B></A>
<I>path</I>
?<I>option value...</I>?
</DD>
<DD>DropSite::<A HREF="#setcursor"><B>setcursor</B></A>
<I>cursor</I>
</DD>
<DD>DropSite::<A HREF="#setdrop"><B>setdrop</B></A>
<I>path</I>
<I>subpath</I>
<I>dropover</I>
<I>drop</I>
?<I>force</I>?
</DD>
<DD>DropSite::<A HREF="#setoperation"><B>setoperation</B></A>
<I>op</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
Commands of this namespace enable user to define a BWidget or a Tk widget as a drop site.
A drop site is composed of the type of object that can be dropped and associated operation,
a command called when drop occurs, and a command when an object is dragged over the widget.
A drop site must have at least one type of acceptable object and a drop command.
</P>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">COMMAND</A></B><BR>
<DL><DT><A NAME="include">DropSite::<B>include</B></A>
<I>class</I>
<I>types</I>
</DT><DD>
This command provides a simple way to include options relatives to a drop site into
BWidget resources definition.
It includes the options needed for <B>register</B>, <I>-dropovercmd</I> and <I>-dropcmd</I>,
initialized to empty string, and <I>-droptypes</I>, initialized to <I>types</I>,
and one new option:
<TABLE BORDER=0 CELLSPACING=1>
<TR><TD><I>-dropenabled</I><TD>Specifies wether or not drop is active (initialized to 0)
</TABLE>
</DD></DL>
<DL><DT><A NAME="register">DropSite::<B>register</B></A>
<I>path</I>
?<I>option value...</I>?
</DT><DD>
This command is used to declare <I>path</I> as a drop site. Options are:
<P>
<DL><DT><A NAME="DropSite-dropcmd"><B>-dropcmd</B></A></DT>
<DD>
This command is called when user release the drag icon over a valid
drop target widget. Arguments passed to the command are:
<UL>
<LI>pathname of the drop target (the widget itself),
<LI>pathname of the drag source,
<LI>root x-coordinate of the pointer,
<LI>root y-coordinate of the pointer,
<LI>operation,
<LI>type of the dragged data,
<LI>dragged data.
</UL>
Its return values is passed as a result to the <B>-dragendcmd</B>
command of the drag source widget.
</DD>
</DL>
<DL><DT><A NAME="DropSite-dropovercmd"><B>-dropovercmd</B></A></DT>
<DD>
This command can be used to provide a dynamic drag while <I>drag-over</I> events.
While a drag occurs, events &lt;Enter&gt;, &lt;Motion&gt; and &lt;Leave&gt; are catched.
Arguments passed to the command are:
<UL>
<LI>pathname of the drop target (the widget itself),
<LI>pathname of the drag source,
<LI>event over the drop target: <I>enter</I>, <I>motion</I> or <I>leave</I>,
<LI>root x-coordinate of the pointer,
<LI>root y-coordinate of the pointer,
<LI>operation,
<LI>type of the dragged data,
<LI>dragged data.
</UL>
Command must the new status of the drag:
<UL>
<LI>0 if widget refuse this drag. Command will not be recalled on motion/leave event.
<LI>1 if widget accept this drag. Command will not be recalled on motion/leave event.
<LI>2 if widget refuse this drag. Command will be recalled on each motion event to reevaluate.
<LI>3 if widget accept this drag. Command will be recalled on each motion event to reevaluate.
</UL>
Here is a list of events and associated actions on a DropSite widget. This example
assumes that dragged data type is valid for the drop target.
<B>status</B> is the status of the drag on a DropSite. Its value is:
<BR><BR>
<TABLE BORDER CELLSPACING=1 CELLPADDING=4>
<TR>
<TD WIDTH="18%" VALIGN="TOP" ALIGN="CENTER">Event</TD>
<TD WIDTH="10%" VALIGN="TOP" ALIGN="CENTER">Old status</TD>
<TD WIDTH="48%" VALIGN="TOP" ALIGN="CENTER">Action</TD>
<TD WIDTH="24%" VALIGN="TOP" ALIGN="CENTER">New status</TD>
</TR>
<TR><TD WIDTH="18%" VALIGN="TOP" ROWSPAN=2>
<FONT SIZE=2>&lt;Enter&gt;</FONT></TD>
<TD WIDTH="10%" VALIGN="TOP" ROWSPAN=2>
<FONT SIZE=2>-</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>if DropSite has <B>dropovercmd</B>, call it with <I>enter</I></FONT></TD>
<TD WIDTH="24%" VALIGN="TOP">
<FONT SIZE=2>result of <B>dropovercmd</B></FONT></TD>
</TR>
<TR><TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>else</FONT></TD>
<TD WIDTH="24%" VALIGN="TOP">
<FONT SIZE=2>1</FONT></TD>
</TR>
<TR><TD WIDTH="18%" VALIGN="TOP" ROWSPAN=2>
<FONT SIZE=2>&lt;Motion&gt;</FONT></TD>
<TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>0 or 1</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="24%" VALIGN="TOP">
<FONT SIZE=2>unchanged</FONT></TD>
</TR>
<TR><TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>2 or 3</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>call <B>dropovercmd</B> with <I>motion</I></FONT></TD>
<TD WIDTH="24%" VALIGN="TOP">
<FONT SIZE=2>result of <B>dropovercmd</B></FONT></TD>
</TR>
<TR><TD WIDTH="18%" VALIGN="TOP" ROWSPAN=2>
<FONT SIZE=2>&lt;Leave&gt;</FONT>&nbsp;</TD>
<TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>0 or 1</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">&nbsp;</TD>
<TD WIDTH="24%" VALIGN="TOP">
<FONT SIZE=2>-</FONT></TD>
</TR>
<TR><TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>2 or 3</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>call <B>dropovercmd</B> with <I>leave</I></FONT></TD>
<TD WIDTH="24%" VALIGN="TOP">
<FONT SIZE=2>-</FONT></TD>
</TR>
<TR><TD WIDTH="18%" VALIGN="TOP" ROWSPAN=4>
<FONT SIZE=2>&lt;Drop&gt;</FONT></TD>
<TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>0</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>call <B>dragendcmd</B> of drag source</FONT></TD>
<TD WIDTH="24%" VALIGN="TOP" ROWSPAN=4>
<FONT SIZE=2>-</FONT></TD>
</TR>
<TR><TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>1</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>call <B>dropcmd</B> and call <B>dragendcmd</B> of drag source</FONT></TD>
</TR>
<TR><TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>2</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>call <B>dropovercmd</B> with <I>leave</I> and call <B>dragendcmd</B> of drag source</FONT></TD>
</TR>
<TR><TD WIDTH="10%" VALIGN="TOP">
<FONT SIZE=2>3</FONT></TD>
<TD WIDTH="48%" VALIGN="TOP">
<FONT SIZE=2>call <B>dropcmd</B> and call <B>dragendcmd</B> of drag source</FONT></TD>
</TR>
</TABLE>
<BR>
</DD>
</DL>
<DL><DT><A NAME="DropSite-droptypes"><B>-droptypes</B></A></DT>
<DD>
Specifies a list {<I>type</I> <I>oplist</I> ?<I>type</I> <I>oplist</I>? ...} of acceptable
types and associated operations for the drop target.
For each type, <I>oplist</I> is a list
{<I>descops</I> <I>mod</I> ?<I>descops</I> <I>mod</I>? ...} describing operations and
modifier keys for these operations.
<I>descops</I> describe an operation. It can be a predefined operations (<B>copy</B>,
<B>move</B> or <B>link</B>) or a new user defined operation, of the form {<I>subop</I>
<B>baseop</B> ?<I>bitmap</I>?}.
<I>subop</I> is the name given to the sub operation, <I>baseop</I> is the name of the
base operation (<B>copy</B>, <B>move</B> or <B>link</B>) and <I>bitmap</I> is a bitmap
to display for the operation.
<BR>If <I>bitmap</I> is empty, the default bitmap of the base operation is used for the
sub operation.
<BR><I>subop</I> can be a base operation, in order to change the bitmap of a base operation.
In this case, <I>baseop</I> must be empty or equal to <I>subop</I>.
<BR><I>mod</I> is the modifer key for the operation. It can be:
<UL>
<LI><B>none</B> to specify that no modifier key is pressed. This modifier can only be used
with a sub operation named <B>default</B> (and vice versa), which has the behaviour of not
display any bitmap operation. For all type, if the modifier <B>none</B> is not given, it is
automatically associated to the <B>default</B> sub operation of a <B>copy</B> base operation.
<LI><B>program</B> to specifies a sub operation accessible only by <B>DropSite::setoperation</B>.
<LI>A list combining <B>shift</B>, <B>control</B> and <B>alt</B>, which means their
corresponding key.
</UL>
</DD>
</DL>
</DD></DL>
<DL><DT><A NAME="setcursor">DropSite::<B>setcursor</B></A>
<I>cursor</I>
</DT><DD>
This command can be used within the script <B>dragovercmd</B>. It is usefull to provide
visual effect about the state of the drag.
</DD></DL>
<DL><DT><A NAME="setdrop">DropSite::<B>setdrop</B></A>
<I>path</I>
<I>subpath</I>
<I>dropover</I>
<I>drop</I>
?<I>force</I>?
</DT><DD>
This command provides a simple way to call <B>register</B> during a BWidget creation or
configuration.
<UL>
<LI><I>path</I> is the pathname of the BWidget,
<LI><I>subpath</I> is the pathname of the tk widget where drag event occurs,
<LI><I>dropover</I> is a command for <I>drag-over</I> event,
<LI><I>drop</I> is a command for <I>drop</I> event,
<LI><I>force</I> specifies wether or not to call <B>register</B> whenever no option value
has changed (0 by default - for BWidget configuration, use 1 for BWidget creation).
</UL>
<B>setdrop</B> verifies the modification flag of options <B>dropenabled</B> and
<B>droptypes</B> and calls <B>register</B> if needed according to the options values and
<I>dropover</I> and <I>drop</I> arguments. <B>dropovercmd</B> and <B>dropcmd</B> are not
taken from options of widget because they are considered as user command, called by
BWidget implementation of <I>drag-over</I> and <I>drop</I> events.
</DD></DL>
<DL><DT><A NAME="setoperation">DropSite::<B>setoperation</B></A>
<I>op</I>
</DT><DD>
Description text
</DD></DL>
</BODY></HTML>

251
lib/bwidget/BWman/DynamicHelp.html

@ -0,0 +1,251 @@ @@ -0,0 +1,251 @@
<HTML>
<HEAD><TITLE>DynamicHelp</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>DynamicHelp</B>
- Provide help to Tk widget or BWidget
</DD></DL>
<DL>
<DT><I><A HREF="#wc">COMMAND</A></I></DT>
<DD>DynamicHelp::<A HREF="#add"><B>add</B></A>
<i>widget</i> ?<I>option value ...</I>?
</DD>
<DD>DynamicHelp::<A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD>DynamicHelp::<A HREF="#delete"><B>delete</B></A>
<i>widget</i>
</DD>
<DD>DynamicHelp::<A HREF="#include"><B>include</B></A>
<I>class</I>
<I>type</I>
</DD>
<DD>DynamicHelp::<A HREF="#register"><B>register</B></A>
<I>path</I>
<I>type</I>
?<I>arg...</I>?
</DD>
<DD>DynamicHelp::<A HREF="#sethelp"><B>sethelp</B></A>
<I>path</I>
<I>subpath</I>
?<I>force</I>?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
Description text
</P>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">COMMAND</A></B><BR>
<DL><DT><A NAME="add">DynamicHelp::<B>add</B></A>
?<I>option value ...</I>?
</DT><DD>
<p>
This command adds dynamic help to the given <i>widget</i>.
</p>
<DL><DT><A NAME="add-command"><B>-command</B></A></DT>
<DD>
If specified, refers to a command to execute to get the help
text to display. The command must return a string to display.
If the command returns an empty string, no help is displayed.
</DD>
</DL>
<DL><DT><A NAME="add-index"><B>-index</B></A></DT>
<DD>
If specified, refers to a menu index to bind the help to instead of
a widget. If <b>-type</b> is not menu, this option is ignored.
</DD>
</DL>
<DL><DT><A NAME="add-item"><B>-item</B></A></DT>
<DD>
If specified, refers to an item or tag on a canvas widget or to a tag
in a text widget to bind the help to instead of to a widget.
</DD>
</DL>
<DL><DT><A NAME="add-type"><B>-type</B></A></DT>
<DD>
Specifies the type of help. Can be:
<b>balloon</b>, <b>variable</b> or <b>menu</b>.
Default is <b>balloon</b>.
</DD>
</DL>
<DL><DT><A NAME="add-text"><B>-text</B></A></DT>
<DD>
The text to be displayed as help.
</DD>
</DL>
<DL><DT><A NAME="add-variable"><B>-variable</B></A></DT>
<DD>
Specifies a variable name to which the help string will be
written. Some other widget (e.g., a status bar) is
responsible for displaying this variable.
</DD>
</DL>
<p>
Creating dynamic help for a menu is a two-step process. The menu
itself must first be added and then each menu entry must be added
separately. Here is a brief example.
</p>
<TABLE BORDER=2 CELLSPACING=2 WIDTH="80%">
<TR><TD><PRE>
<FONT COLOR=red><I># create menu</I></FONT>
menu .m -type menubar
<FONT COLOR=red><I># associate menubar to toplevel BEFORE DynamicHelp::register</I></FONT>
<FONT COLOR=red><I># to make it works with menu clone name</I></FONT>
. configure -menu .m
.m add cascade -label "File" -menu .m.file
menu .m.file
.m.file add command -label "Open..."
.m.file add command -label "Quit"
<FONT COLOR=red><I># create label for help, using variable varinfo</I></FONT>
label .l -textvariable varinfo
<FONT COLOR=red><I># associate all entries of menu .m.file to variable varinfo</I></FONT>
DynamicHelp::add .m.file -type menu -variable varinfo
<FONT COLOR=red><I># then declare entries of .m.file</I></FONT>
DynamicHelp::add .m.file -type menu -index 0 -text "Detach menu"
DynamicHelp::add .m.file -type menu -index 1 -text "Open a file"
DynamicHelp::add .m.file -type menu -index 2 -text "Exit demo"
</PRE></TD></TR></TABLE></CENTER>
</DL>
<DL><DT><A NAME="configure">DynamicHelp::<B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
This command configure the ballon help.
<P>
<DL><DT><A NAME="DynamicHelp-borderwidth"><B>-borderwidth</B></A></DT>
<DD>
Width of the black border around the balloon.
</DD>
</DL>
<DL><DT><A NAME="DynamicHelp-delay"><B>-delay</B></A></DT>
<DD>
Define the delay in millisecond of mouse inactivity before displaying
the balloon.
</DD>
</DL>
<dl>
<dt><a name="DynamicHelp-state"><b>-state</b></a></dt>
<dd>
Specifies one of two states for help balloons: <b>normal</b> and
<b>disabled</b>.
</dd>
<dd>
If <b>state</b> is <b>disabled</b>, help balloons will not be displayed
for any registered widget.
</dd>
</dl>
<DL><DT><A NAME="DynamicHelp-topbackground"><B>-topbackground</B></A></DT>
<DD>
The background color of the toplevel window created for a balloon.
</DD>
</DL>
<BR>Other standard options are:
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-justify">-justify</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-padx">-padx</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-pady">-pady</A></TR>
</TR>
</TABLE></DD>
</DD></DL>
<DL><DT><A NAME="delete">DynamicHelp::<B>delete</B></A>
<I>widget</I>
</DT><DD>
Delete all dynamic help for the given <i>widget</i>.
</DD></DL>
<DL><DT><A NAME="include">DynamicHelp::<B>include</B></A>
<I>class</I>
<I>type</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="register">DynamicHelp::<B>register</B></A>
<I>path</I>
<I>type</I>
?<I>arg...</I>?
</DT><DD>
<p>
<b>Its use is deprecated. Use <i>DynamicHelp::add</i> instead.</b>
</p>
Register a help text to the widget <I>path</I>.
<I>type</I> determines the type of the help or the type of the widget.
Depending on <I>type</I>, other options must be provided.
<BR>
<TABLE CELLSPACING=5 CELLPADDING=0 BORDER=0>
<TR><TD><B> type </B></TD><TD><B> options </B></TD></TR>
<TR><TD><B><I> balloon </I></B></TD><TD><I> ?tagOrItem? text </I></TD></TR>
<TR><TD><B><I> variable </I></B></TD><TD><I> ?tagOrItem? varName text </I></TD></TR>
<TR><TD><B><I> menu </I></B></TD><TD><I> varName </I></TD></TR>
<TR><TD><B><I> menuentry </I></B></TD><TD><I> index text </I></TD></TR>
</TABLE>
<BR>If one of the option is missing or is empty, help is removed for this widget.
<p>
If <i>tagOrItem</i> is specified, then <i>path</i> is a canvas or a text. In
case of a canvas, <i>tagOrItem</i> is the name of a tag or item on the canvas
to which the help will be bound. In case of a text, <i>tagOrItem</i> is the
name of a tag on the text to which the help will be bound.
</p>
For type other than <I>balloon</I>, <I>varName</I> is typically a variable
linked to a label.
<BR>For menu, balloon type help is not available. To declare a help for menu,
you first declare the menu, and then entries of this menu.
<BR>For example:
<BR><BR>
<CENTER>
<TABLE BORDER=2 CELLSPACING=2 WIDTH="80%">
<TR><TD><PRE>
<FONT COLOR=red><I># create menu</I></FONT>
menu .m -type menubar
<FONT COLOR=red><I># associate menubar to toplevel BEFORE DynamicHelp::register</I></FONT>
<FONT COLOR=red><I># to make it works with menu clone name</I></FONT>
. configure -menu .m
.m add cascade -label "File" -menu .m.file
menu .m.file
.m.file add command -label "Open..."
.m.file add command -label "Quit"
<FONT COLOR=red><I># create label for help, using variable varinfo</I></FONT>
label .l -textvariable varinfo
<FONT COLOR=red><I># associate all entries of menu .m.file to variable varinfo</I></FONT>
DynamicHelp::register .m.file menu varinfo
<FONT COLOR=red><I># then declare entries of .m.file</I></FONT>
DynamicHelp::register .m.file menuentry 0 "Detach menu"
DynamicHelp::register .m.file menuentry 1 "Open a file"
DynamicHelp::register .m.file menuentry 2 "Exit demo"
</PRE></TD></TR></TABLE></CENTER>
<BR>
<BR>Notice that if popup menu is owned by a menubar, you must associate first the menubar
to its toplevel. In this case, when you create a menu popup, its clone window is also
created, and DynamicHelp::register detects the exitence of the clone window and maps
events to it.
</DD></DL>
<DL><DT><A NAME="sethelp">DynamicHelp::<B>sethelp</B></A>
<I>path</I>
<I>subpath</I>
?<I>force</I>?
</DT><DD>
Description text
</DD></DL>
</BODY></HTML>

341
lib/bwidget/BWman/Entry.html

@ -0,0 +1,341 @@ @@ -0,0 +1,341 @@
<HTML>
<HEAD><TITLE>Entry</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>Entry</B>
- Entry widget with <B>state</B> option, dynamic help and drag and drop facilities
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>Entry</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-disabledbackground">-disabledbackground</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-disabledforeground">-disabledforeground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-exportselection">-exportselection</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightbackground">-highlightbackground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightcolor">-highlightcolor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightthickness">-highlightthickness</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-insertbackground">-insertbackground</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-insertborderwidth">-insertborderwidth</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-insertofftime">-insertofftime</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-insertontime">-insertontime</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-insertwidth">-insertwidth</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-justify">-justify</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-selectbackground">-selectbackground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-selectborderwidth">-selectborderwidth</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-selectforeground">-selectforeground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-text">-text</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-textvariable">-textvariable</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-xscrollcommand">-xscrollcommand</A></TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-command">-command</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dragenabled">-dragenabled</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragendcmd">-dragendcmd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dragevent">-dragevent</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-draginitcmd">-draginitcmd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dragtype">-dragtype</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropcmd">-dropcmd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dropenabled">-dropenabled</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropovercmd">-dropovercmd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-droptypes">-droptypes</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-editable">-editable</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-helptext">-helptext</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-helptype">-helptype</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-helpvar">-helpvar</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-show">-show</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-state">-state</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#invoke"><B>invoke</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
The <B>Entry</B> widget extends the default Tk entry. Options have been added to provide
visual effect depending on the state of the Entry,
<A HREF="DynamicHelp.html">DynamicHelp</A> options,
and <A HREF="DragSite.html">Drag</A> and
<A HREF="DropSite.html">Drop</A>.
Entry behaves much like a Label, with <B>text</B> option to set its contents.
<BR>Tk entry command can also be used on Entry widget.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-command"><B>-command</B></A></DT>
<DD>
Specifies a command when user press &lt;Return&gt; in the Entry.
</DD>
</DL>
<DL><DT><A NAME="-dragenabled"><B>-dragenabled</B></A></DT>
<DD>
A boolean specifying if drag is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dragendcmd"><B>-dragendcmd</B></A></DT>
<DD>
Specifies a command to be called when drag ended.
<B>dragendcmd</B> must be a command conforming to the description of the
option <B>dragendcmd</B> of <B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
<BR>If <B>dragendcmd</B> is empty, the internal <I>dragend</I> command updates the entry
following the operation (<B>move</B> or <B>copy</B>) and the dragged data
(whole or selected part of the entry).
</DD>
</DL>
<DL><DT><A NAME="-dragevent"><B>-dragevent</B></A></DT>
<DD>
Specifies the number of the mouse button associated to the drag.
Must be <B>1</B>, <B>2</B> or <B>3</B>.
</DD>
</DL>
<DL><DT><A NAME="-draginitcmd"><B>-draginitcmd</B></A></DT>
<DD>
Specifies a command to be called when <B>dragevent</B> occurs on widget.
<B>draginitcmd</B> must be a command conforming to the description of the
option <B>draginitcmd</B> of <B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
<BR>if <B>draginitcmd</B> is empty, the command refuse the drag if entry is empty or if
portion of text is selected and event doesn't occur above the selection. In all other cases,
the command returns:
<UL>
<LI>as the data type, the value of option <B>dragtype</B> or <I>TEXT</I> if empty,
<LI>as the operations, <I>{copy move}</I> if <B>state</B> is normal and <B>editable</B>
is true, or <I>{copy}</I> only in other cases,
<LI>as the data, the whole content or the selected portion of the entry.
</UL>
</DD>
</DL>
<DL><DT><A NAME="-dragtype"><B>-dragtype</B></A></DT>
<DD>
Specifies an alternate type of dragged object.
</DD>
</DL>
<DL><DT><A NAME="-dropcmd"><B>-dropcmd</B></A></DT>
<DD>
Entry has a command wrapper for <I>drop</I> events. This command stops auto scrolling
and extract current position.
<BR>If <B>dropcmd</B> is not empty, it is called with the following arguments:
<UL>
<LI>the pathname of the Entry,
<LI>the pathname of the drag source,
<LI>the numeric index in the entry designated by the cursor,
<LI>the current operation,
<LI>the data type,
<LI>the data.
</UL>
and must return a value conforming to <B>dropcmd</B> option described in
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
If <B>dropcmd</B> is empty, the wrapper updates the entry following the type of data:
<DL><DD><TABLE BORDER=0 CELLSPACING=1>
<TR><TD><I>COLOR</I> or <I>FGCOLOR</I></TD>
<TD>reconfigure the <B>foreground</B> of the Entry</TD>
<TR><TD><I>BGCOLOR</I></TD>
<TD>reconfigure the <B>background</B> of the Entry</TD>
<TR><TD><I>TEXT</I>,<BR>or any other tag</TD>
<TD>reconfigure the Entry to display the associated string.</TD>
</TABLE></DL>
and returns 1.
</DD>
</DL>
<DL><DT><A NAME="-dropenabled"><B>-dropenabled</B></A></DT>
<DD>
A boolean specifying if drop is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dropovercmd"><B>-dropovercmd</B></A></DT>
<DD>
Entry has a command wrapper for <I>drag-over</I> events. This command enables auto scrolling
and position extraction during the <I>drag-over</I>.
<BR>If <B>dropovercmd</B> is empty, the wrapper accepts the drop if <B>editable</b> option is
true and <B>state</B> option is normal.
<BR>If <B>dropovercmd</B> is not empty, it is called with the following arguments:
<UL>
<LI>the pathname of the Entry,
<LI>the pathname of the drag source,
<LI>the event,
<LI>the numeric index in the entry designated by the cursor,
<LI>the current operation,
<LI>the data type,
<LI>the data.
</UL>
and must return a value conforming to <B>dropovercmd</B> option described in
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
</DD>
</DL>
<DL><DT><A NAME="-droptypes"><B>-droptypes</B></A></DT>
<DD>
Specifies a list of accepted dropped object/operation.
See option <B>droptypes</B> of
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
for more infromation.
Default accepts <I>FGCOLOR</I>, <I>COLOR</I>, <I>BGCOLOR</I> and <I>TEXT</I>,
all with <B>copy</B> and <B>move</B> operations.
</DD>
</DL>
<DL><DT><A NAME="-editable"><B>-editable</B></A></DT>
<DD>
Specifies whether the Entry is editable by the user. Equivalent to the <B>state</B> option
of the Tk entry widget.
</DD>
</DL>
<DL><DT><A NAME="-helptext"><B>-helptext</B></A></DT>
<DD>
Text for dynamic help. If empty, no help is available for this widget.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helptype"><B>-helptype</B></A></DT>
<DD>
Type of dynamic help. Use <I>balloon</I> or <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helpvar"><B>-helpvar</B></A></DT>
<DD>
Variable to use when <B>helptype</B> option is <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-show"><B>-show</B></A></DT>
<DD>
If this option is specified, then the true contents of the entry are not displayed in the
window. Instead, each character in the entry's value will be displayed as the first character
in the value of this option, such as ``*''. This is useful, for example, if the entry is to
be used to enter a password. If characters in the entry are selected and copied elsewhere, the
information copied will be what is displayed, not the true contents of the entry.
</DD>
</DL>
<DL><DT><A NAME="-state"><B>-state</B></A></DT>
<DD>
Specifies one of two states for the Entry: <B>normal</B> or <B>disabled</B>.
In normal state the text of the Entry is displayed using the <B>foreground</B> option.
In disabled state the text of the Entry is displayed using the <B>disabledforeground</B>
option. If the entry is disabled then the value may not be changed by user input
and no insertion cursor will be displayed, even if the input focus is in the widget.
Disabled state is the same as not editable with visual effect.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies an integer value indicating the desired width of the entry window, in average-size
characters of the widget's font. If the value is less than or equal to zero, the widget picks
a size just large enough to hold its current text.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="invoke"><I>pathName</I> <B>invoke</B></A>
</DT><DD>
Calls the command specified by the option <B>-command</B>.
</DD></DL>
</BODY></HTML>

362
lib/bwidget/BWman/Label.html

@ -0,0 +1,362 @@ @@ -0,0 +1,362 @@
<HTML>
<HEAD><TITLE>Label</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>Label</B>
- Label widget with <B>state</B> option, dynamic help and drag and drop facilities
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>Label</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DT><I>Not themed</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-anchor">-anchor</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-bitmap">-bitmap</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-cursor">-cursor</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-disabledforeground">-disabledforeground</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightbackground">-highlightbackground</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightcolor">-highlightcolor</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightthickness">-highlightthickness</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-image">-image</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-justify">-justify</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-padx">-padx</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-pady">-pady</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-text">-text</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-textvariable">-textvariable</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-wraplength">-wraplength</A></TR>
</TR>
</TABLE></DD>
<DT><I>Themed</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-anchor">-anchor</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-cursor">-cursor</A></TD></TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
</TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-image">-image</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-justify">-justify</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-text">-text</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-textvariable">-textvariable</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-wraplength">-wraplength</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragenabled">-dragenabled</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragendcmd">-dragendcmd</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragevent">-dragevent</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-draginitcmd">-draginitcmd</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragtype">-dragtype</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropcmd">-dropcmd</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropenabled">-dropenabled</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropovercmd">-dropovercmd</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-droptypes">-droptypes</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-focus">-focus</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-helptext">-helptext</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-helptype">-helptype</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-helpvar">-helpvar</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-name">-name</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-state">-state</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-underline">-underline</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#setfocus"><B>setfocus</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
The <B>Label</B> widget extends the default Tk label. Options have been added to provide
visual effect depending on the state of the Label, <A HREF="DynamicHelp.html">DynamicHelp</A> options, and <A HREF="DragSite.html">Drag
</A> and <A HREF="DropSite.html">Drop</A>.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-dragenabled"><B>-dragenabled</B></A></DT>
<DD>
A boolean specifying if drag is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dragendcmd"><B>-dragendcmd</B></A></DT>
<DD>
Specifies a command to be called when drag ended.
<B>dragendcmd</B> must be a command conforming to the description of the
option <B>dragendcmd</B> of <B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
</DD>
</DL>
<DL><DT><A NAME="-dragevent"><B>-dragevent</B></A></DT>
<DD>
Specifies the number of the mouse button associated to the drag.
Must be <B>1</B>, <B>2</B> or <B>3</B>.
</DD>
</DL>
<DL><DT><A NAME="-draginitcmd"><B>-draginitcmd</B></A></DT>
<DD>
Specifies a command to be called when <B>dragevent</B> occurs on widget.
<B>draginitcmd</B> must be a command conforming to the description of the
option <B>draginitcmd</B> of <B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
<BR>If <B>draginitcmd</B> is empty, the internal <B>draginitcmd</B> command is used instead
and returns:
<DL><DD><TABLE BORDER=0 CELLSPACING=1>
<TR><TD valign=top><I>IMAGE&nbsp;{copy}&nbsp;&lt;image&nbsp;name&gt;</I>
<TD>if an image is displayed.
<TR><TD valign=top><I>BITMAP&nbsp;{copy}&nbsp;&lt;bitmap&nbsp;name&gt;</I>
<TD>if a bitmap is displayed.
<TR><TD valign=top><I>TEXT&nbsp;{copy}&nbsp;&lt;text&gt;</I>
<TD>if a text is displayed.
</TABLE></DL>
Note that if <B>dragtype</B> option is not empty, its value is used instead of those above.
</DD>
</DL>
<DL><DT><A NAME="-dragtype"><B>-dragtype</B></A></DT>
<DD>
Specifies an alternate type of dragged object.
</DD>
</DL>
<DL><DT><A NAME="-dropcmd"><B>-dropcmd</B></A></DT>
<DD>
Specifies a command to be called when drop occurs on the widget.
<B>dropcmd</B> must be a command conforming to the description of the
option <B>dropcmd</B> of <B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
<BR>If <B>dropcmd</B> is empty, the command updates the label following the type of the data:
<DL><DD><TABLE BORDER=0 CELLSPACING=1>
<TR><TD><I>COLOR</I> or <I>FGCOLOR</I></TD>
<TD>reconfigure the <B>foreground</B> of the Label.</TD>
<TR><TD><I>BGCOLOR</I></TD>
<TD>reconfigure the <B>background</B> of the Label.</TD>
<TR><TD><I>IMAGE</I></TD>
<TD>reconfigure the Label to display the associated image.</TD>
<TR><TD><I>BITMAP</I></TD>
<TD>reconfigure the Label to display the associated bitmap.
<B>image</B> option is set to empty.</TD>
<TR><TD><I>TEXT</I>,<BR>or any other tag</TD>
<TD>reconfigure the Label to display the associated string.
<B>image</B> and <B>bitmap</B> options are set to empty.</TD>
</TABLE></DL>
and returns 1.
</DD>
</DL>
<DL><DT><A NAME="-dropenabled"><B>-dropenabled</B></A></DT>
<DD>
A boolean specifying if drop is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dropovercmd"><B>-dropovercmd</B></A></DT>
<DD>
Specifies a command to be called when drag icon is over the widget.
<B>dropovercmd</B> must be a command conforming to the description of the
option <B>dropovercmd</B> of <B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
<BR>If <B>dropovercmd</B> is empty, Label always accepts the drop if data type is
<I>FGCOLOR</I>, <I>COLOR</I>, <I>BGCOLOR</I>, and accepts all other data type only if
<B>state</B> is normal.
</DD>
</DL>
<DL><DT><A NAME="-droptypes"><B>-droptypes</B></A></DT>
<DD>
Specifies a list of accepted dropped object/operation.
See option <B>droptypes</B> of
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
for more infromation.
Default accepts <I>FGCOLOR</I>, <I>COLOR</I>, <I>BGCOLOR</I>, <I>TEXT</I>, <I>BITMAP</I>
and <I>IMAGE</I>, all with <B>copy</B> and <B>move</B> operations.
</DD>
</DL>
<DL><DT><A NAME="-focus"><B>-focus</B></A></DT>
<DD>
Specifies a pathname to set the focus on for Label::<B>setfocus</B> command.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies a desired height for the label.
If an image or bitmap is being displayed in the label then the value is in
screen units, for text it is in lines of text.
If this option isn't specified, the label's desired height is computed
from the size of the image or bitmap or text being displayed in it.<BR>
Option not available for <I>themed</I> widgets.
</DD>
</DL>
<DL><DT><A NAME="-helptext"><B>-helptext</B></A></DT>
<DD>
Text for dynamic help. If empty, no help is available for this widget.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helptype"><B>-helptype</B></A></DT>
<DD>
Type of dynamic help. Use <I>balloon</I> or <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helpvar"><B>-helpvar</B></A></DT>
<DD>
Variable to use when <B>helptype</B> option is <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-name"><B>-name</B></A></DT>
<DD>
Specifies a standard name for the label. If the option <B>*<I>name</I>Name</B> is
found in the resource database, then <B>text</B> and <B>underline</B> options
are extracted from its value.
</DD>
</DL>
<DL><DT><A NAME="-state"><B>-state</B></A></DT>
<DD>
Specifies one of two states for the Label: <B>normal</B> or <B>disabled</B>.
In normal state the text of the Label is displayed using the <B>foreground</B> option.
In disabled state the text of the Label is displayed using the <B>disabledforeground</B> option.
</DD>
</DL>
<DL><DT><A NAME="-underline"><B>-underline</B></A></DT>
<DD>
Specifies the integer index of a character to underline in the label.
0 corresponds to the first character of the text displayed, 1 to the next character,
and so on.
<BR>The binding <B>&lt;Alt-<I>char</I>&gt;</B> is automatically set on the toplevel
of the Label to call Label::<B>setfocus</B>.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies a desired width for the label.
If an image or bitmap is being displayed in the label then the value is in
screen units, for text it is in characters.
If this option isn't specified, the label's desired width is computed
from the size of the image or bitmap or text being displayed in it.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="setfocus"><I>pathName</I> <B>setfocus</B></A>
</DT><DD>
Set the focus on the pathname given by <B>-focus</B> option if <B>-state</B> is <I>normal</I>.
</DD></DL>
</BODY></HTML>

194
lib/bwidget/BWman/LabelEntry.html

@ -0,0 +1,194 @@ @@ -0,0 +1,194 @@
<HTML>
<HEAD><TITLE>LabelEntry</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>LabelEntry</B>
-
LabelFrame containing an Entry widget.
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>LabelEntry</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="Entry.html">OPTIONS from <B>Entry</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-borderwidth or -bd</TD>
<TD>&nbsp;&nbsp;-command</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
<TD>&nbsp;&nbsp;-dragenabled</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dragendcmd</TD>
<TD>&nbsp;&nbsp;-dragevent</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-draginitcmd</TD>
<TD>&nbsp;&nbsp;-dragtype</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dropcmd</TD>
<TD>&nbsp;&nbsp;-dropenabled</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dropovercmd</TD>
<TD>&nbsp;&nbsp;-droptypes</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-editable</TD>
<TD>&nbsp;&nbsp;-entrybg (see <B>-background</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-entryfg (see <B>-foreground</B>)</TD>
<TD>&nbsp;&nbsp;-exportselection</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-font</TD>
<TD>&nbsp;&nbsp;-helptext</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helptype</TD>
<TD>&nbsp;&nbsp;-helpvar</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-highlightbackground</TD>
<TD>&nbsp;&nbsp;-highlightcolor</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-highlightthickness</TD>
<TD>&nbsp;&nbsp;-insertbackground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertborderwidth</TD>
<TD>&nbsp;&nbsp;-insertofftime</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertontime</TD>
<TD>&nbsp;&nbsp;-insertwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-justify</TD>
<TD>&nbsp;&nbsp;-relief</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-selectbackground</TD>
<TD>&nbsp;&nbsp;-selectborderwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-selectforeground</TD>
<TD>&nbsp;&nbsp;-show</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-state</TD>
<TD>&nbsp;&nbsp;-takefocus</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-text</TD>
<TD>&nbsp;&nbsp;-textvariable</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-width</TD>
<TD>&nbsp;&nbsp;-xscrollcommand</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="LabelFrame.html">OPTIONS from <B>LabelFrame</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-foreground or -fg</TD>
<TD>&nbsp;&nbsp;-helptext</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helptype</TD>
<TD>&nbsp;&nbsp;-helpvar</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-label (see <B>-text</B>)</TD>
<TD>&nbsp;&nbsp;-labelanchor (see <B>-anchor</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-labelfont (see <B>-font</B>)</TD>
<TD>&nbsp;&nbsp;-labelheight (see <B>-height</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-labeljustify (see <B>-justify</B>)</TD>
<TD>&nbsp;&nbsp;-labelwidth (see <B>-width</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-name</TD>
<TD>&nbsp;&nbsp;-padx</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-pady</TD>
<TD>&nbsp;&nbsp;-side</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-state</TD>
<TD>&nbsp;&nbsp;-underline</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-wraplength</TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#bind"><B>bind</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
LabelEntry is a widget composed of <A HREF="LabelFrame.html">LabelFrame</A> widget
containing an <A HREF="Entry.html">Entry</A> widget.
Tk entry command can also be used on LabelEntry widget.
</P>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="bind"><I>pathName</I> <B>bind</B></A>
?<I>arg...</I>?
</DT><DD>
Set bindings on the entry widget.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
</BODY></HTML>

144
lib/bwidget/BWman/LabelFrame.html

@ -0,0 +1,144 @@ @@ -0,0 +1,144 @@
<HTML>
<HEAD><TITLE>LabelFrame</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>LabelFrame</B>
- Frame with a Label
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>LabelFrame</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="Label.html">OPTIONS from <B>Label</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-anchor</TD>
<TD>&nbsp;&nbsp;-background or -bg</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-bitmap</TD>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-focus</TD>
<TD>&nbsp;&nbsp;-font</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-foreground or -fg</TD>
<TD>&nbsp;&nbsp;-height</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helptext</TD>
<TD>&nbsp;&nbsp;-helptype</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helpvar</TD>
<TD>&nbsp;&nbsp;-image</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-justify</TD>
<TD>&nbsp;&nbsp;-name</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-padx</TD>
<TD>&nbsp;&nbsp;-pady</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-state</TD>
<TD>&nbsp;&nbsp;-text</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-textvariable</TD>
<TD>&nbsp;&nbsp;-underline</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-width</TD>
<TD>&nbsp;&nbsp;-wraplength</TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-side">-side</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD>LabelFrame::<A HREF="#align"><B>align</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
LabelFrame enables user to create a frame with a
<A HREF="Label.html">Label</A> positionned at any side.
LabelFrame is used by <A HREF="ComboBox.html">ComboBox</A>
and <A HREF="SpinBox.html">SpinBox</A>.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-side"><B>-side (read-only)</B></A></DT>
<DD>
Specifies where to position the Label relative to the user frame: <B>top</B>, <B>bottom</B>, <B>left</B> or <B>right</B>.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="align">LabelFrame::<B>align</B></A>
?<I>arg...</I>?
</DT><DD>
This command align label of all widget given by <I>args</I> of class LabelFrame
(or "derived") by setting their width to the max one +1
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Return the frame where the user can create any other widget.
</DD></DL>
</BODY></HTML>

675
lib/bwidget/BWman/ListBox.html

@ -0,0 +1,675 @@ @@ -0,0 +1,675 @@
<HTML>
<HEAD><TITLE>ListBox</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ListBox</B>
- ListBox widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ListBox</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-cursor">-cursor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightbackground">-highlightbackground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightcolor">-highlightcolor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightthickness">-highlightthickness</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-selectbackground">-selectbackground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-selectforeground">-selectforeground</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-xscrollcommand">-xscrollcommand</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-yscrollcommand">-yscrollcommand</A></TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-autofocus">-autofocus</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-deltax">-deltax</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-deltay">-deltay</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragenabled">-dragenabled</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dragendcmd">-dragendcmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragevent">-dragevent</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-draginitcmd">-draginitcmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragtype">-dragtype</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dropcmd">-dropcmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropenabled">-dropenabled</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dropovercmd">-dropovercmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropovermode">-dropovermode</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-droptypes">-droptypes</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-multicolumn">-multicolumn</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-padx">-padx</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-redraw">-redraw</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-selectfill">-selectfill</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-selectmode">-selectmode</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#bindImage"><B>bindImage</B></A>
<I>event</I>
<I>script</I>
</DD>
<DD><I>pathName</I> <A HREF="#bindText"><B>bindText</B></A>
<I>event</I>
<I>script</I>
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#delete"><B>delete</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#edit"><B>edit</B></A>
<I>item</I>
<I>text</I>
?<I>verifycmd</I>?
?<I>clickres</I>?
?<I>select</I>?
</DD>
<DD><I>pathName</I> <A HREF="#exists"><B>exists</B></A>
<I>item</I>
</DD>
<DD><I>pathName</I> <A HREF="#index"><B>index</B></A>
<I>item</I>
</DD>
<DD><I>pathName</I> <A HREF="#insert"><B>insert</B></A>
<I>index</I>
<I>item</I>
?<I>option value...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#item"><B>item</B></A>
<I>first</I>
?<I>last</I>?
</DD>
<DD><I>pathName</I> <A HREF="#itemcget"><B>itemcget</B></A>
<I>item</I>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#itemconfigure"><B>itemconfigure</B></A>
<I>item</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#items"><B>items</B></A>
?<I>first</I>?
?<I>last</I>?
</DD>
<DD><I>pathName</I> <A HREF="#move"><B>move</B></A>
<I>item</I>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#reorder"><B>reorder</B></A>
<I>neworder</I>
</DD>
<DD><I>pathName</I> <A HREF="#see"><B>see</B></A>
<I>item</I>
</DD>
<DD><I>pathName</I> <A HREF="#selection"><B>selection</B></A>
<I>cmd</I>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#xview"><B>xview</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#yview"><B>yview</B></A>
?<I>arg...</I>?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
<B>ListBox</B> widget uses canvas to display a list of items.
Each item is composed of a label with its own font and foreground attributes, and an optional
image or window. Each item is drawn in a single line, whose height is defined by the
<B>deltay</B> option, so they must have at most this height.
A item is uniquely identified by a string given at creation (by the
<B>insert</B> command). The ListBox can have one or more columns, depending on
<B>multicolumn</B> option. The user do not handle columns; the number of columns
is determined following the height of the ListBox in order to see each item vertically.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-autofocus"><B>-autofocus</B></A></DT>
<DD>
If this option is true, the listbox will take focus any time the user
clicks in it. Without focus, the listbox's mouse wheel bindings will
not work properly. The default is true.
</DD>
</DL>
<DL><DT><A NAME="-deltax"><B>-deltax</B></A></DT>
<DD>
Specifies horizontal pad between each columns.
</DD>
</DL>
<DL><DT><A NAME="-deltay"><B>-deltay</B></A></DT>
<DD>
Specifies vertical size of the items.
</DD>
</DL>
<DL><DT><A NAME="-dragenabled"><B>-dragenabled</B></A></DT>
<DD>
A boolean specifying if drag is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dragendcmd"><B>-dragendcmd</B></A></DT>
<DD>
Specifies a command to be called when drag ended.
<B>dragendcmd</B> must be a command conforming to the description of the
option <B>dragendcmd</B> of <B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
</DD>
</DL>
<DL><DT><A NAME="-dragevent"><B>-dragevent</B></A></DT>
<DD>
Specifies the number of the mouse button associated to the drag.
Must be <B>1</B>, <B>2</B> or <B>3</B>.
</DD>
</DL>
<DL><DT><A NAME="-draginitcmd"><B>-draginitcmd</B></A></DT>
<DD>
ListBox has a command wrapper for <I>drag-init</I> events. This command refused the drag
if no item is designated. In other cases:
<BR>If <B>draginitcmd</B> is empty, it returns:
<UL>
<LI>the value of option <B>dragtype</B> or <I>LISTBOX_ITEM</I> if empty as the data type,
<LI><I>{move copy link}</I> as the operations,
<LI>the item identifier as the data.
</UL>
If <B>draginitcmd</B> is not empty, it is called with the following arguments:
<UL>
<LI>the pathname of the listbox,
<LI>the identifier of the dragged item,
<LI>the toplevel created to represent dragged data.
</UL>
and must return a value conforming to <B>draginitcmd</B> option described in
<B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
</DD>
</DL>
<DL><DT><A NAME="-dragtype"><B>-dragtype</B></A></DT>
<DD>
Specifies an alternate type of dragged object.
</DD>
</DL>
<DL><DT><A NAME="-dropcmd"><B>-dropcmd</B></A></DT>
<DD>
ListBox has a command wrapper for <I>drop</I> events. This command stops auto scrolling
and extract item and position.
<BR>If <B>dropcmd</B> is not empty, it is called with the following arguments:
<UL>
<LI>the pathname of the listbox,
<LI>the pathname of the drag source,
<LI>a list describing where the drop occurs. It can be:
<UL>
<LI><I>{</I><B>widget</B><I>}</I>,
<LI><I>{</I><B>item</B> <I>item}</I> or
<LI><I>{</I><B>position</B> <I>index}</I>.
</UL>
<LI>the current operation,
<LI>the data type,
<LI>the data.
</UL>
<p>
The default drop command allows for drag-and-drop within the listbox but
not to or from other widgets.
</p>
</DD>
</DL>
<DL><DT><A NAME="-dropenabled"><B>-dropenabled</B></A></DT>
<DD>
A boolean specifying if drop is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dropovercmd"><B>-dropovercmd</B></A></DT>
<DD>
LsitBox has a command wrapper for <I>drag-over</I> events. This command enables auto scrolling
and position extraction during the <I>drag-over</I>.
If <B>dropovercmd</B> is not empty, the command is called with the following aguments:
<UL>
<LI>the pathname of the listbox,
<LI>the pathname of the drag source,
<LI>a list describing where the drop can occur, whose elements are:
<UL>
<LI>the string <I>widget</I> if <B>dropovertype</B> option contains <I>w</I>, else empty string.
<LI>the targeted item if drag icon points an item and <B>dropovertype</B> option contains
<I>i</I>, else empty string.
<LI>an index within two items where drag icon points to if <B>dropovertype</B> option
contains <I>p</I>, else empty string.
<LI>optionally, the preferred method if drop can occur both inside an item and between two
items. The value is <I>position</I> or <I>item</I>.
</UL>
<LI>the current operation,
<LI>the data type,
<LI>the data.
</UL>
The command must return a list with two elements:
<UL>
<LI>the drop status, conforming to those described in <B>dropovercmd</B> option of
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>,
<LI>the choosen method: <I>widget</I>, <I>item</I> or <I>position</I>.
</UL>
</DD>
</DL>
<DL><DT><A NAME="-dropovermode"><B>-dropovermode</B></A></DT>
<DD>
Specifies the type of <I>drop-over</I> interaction. Must be a combination of
<B>w</B>, which specifies that drop can occurs everywhere on widget,
<B>p</B>, which specifies that drop can occurs between two items,
and <B>i</B>, which specifies that drop occurs inside items.
</DD>
</DL>
<DL><DT><A NAME="-droptypes"><B>-droptypes</B></A></DT>
<DD>
Specifies a list of accepted dropped object/operation.
See option <B>droptypes</B> of
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
for more infromation.
<BR>Default is <I>LISTBOX_ITEM</I> with operations <B>copy</B> and <B>move</B>.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the listbox in units of <B>deltay</B> pixels.
</DD>
</DL>
<DL><DT><A NAME="-multicolumn"><B>-multicolumn</B></A></DT>
<DD>
Specifies wether or not ListBox layouts items in order to see each one vertically.
</DD>
</DL>
<DL><DT><A NAME="-padx"><B>-padx</B></A></DT>
<DD>
Specifies distance between image or window and text of the items.
</DD>
</DL>
<DL><DT><A NAME="-redraw"><B>-redraw</B></A></DT>
<DD>
Specifies wether or not the listbox should be redrawn when entering idle.
Set it to false if you call <B>update</B> while modifying the listbox.
</DD>
</DL>
<DL><DT><A NAME="-selectfill"><B>-selectfill</B></A></DT>
<DD>
If true, the listbox will draw a selection rectangle that fills the
listbox from left-to-right instead of just drawing a box around the
selected item. This more closely mimics the standard Tk listbox.
</DD>
</DL>
<DL><DT><A NAME="-selectmode"><B>-selectmode</B></A></DT>
<DD>
Specifies the desired selection-mode for the listbox. Must be one of
<B>none</B>, <B>single</B> or <B>multiple</B>. <B>selectmode</B> <I>single</I>
allows to select 1 item by its text or image. <B>selectmode</B> <I>multiple</I>
allows to select multiple items by their text or image. For more info on
selectmodes <I>single</I> or <I>multiple</I>, see the Tk <B>listbox</B>
command. Default value for <B>selectmode</B> is <I>none</I>.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the listbox in units of 8 pixels.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="bindImage"><I>pathName</I> <B>bindImage</B></A>
<I>event</I>
<I>script</I>
</DT><DD>
This command associates a command to execute whenever the event
sequence given by <I>event</I> occurs on the image of a item.
The item idenfier on which the event occurs is appended to the command.
<p>
Any occurrence of <b>%W</b> in <i>script</i> is substituted with the
path of the listbox.
</p>
</DD></DL>
<DL><DT><A NAME="bindText"><I>pathName</I> <B>bindText</B></A>
<I>event</I>
<I>script</I>
</DT><DD>
This command associates a command to execute whenever the event
sequence given by <I>event</I> occurs on the label of a item.
The item idenfier on which the event occurs is appended to the command.
<p>
Any occurrence of <b>%W</b> in <i>script</i> is substituted with the
path of the listbox.
</p>
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="delete"><I>pathName</I> <B>delete</B></A>
?<I>arg...</I>?
</DT><DD>
Deletes all items in <I>arg</I>. <I>arg</I> can be a list
of items or a list of list of items.
To delete all items, do <I>$pathName delete [$pathName items]</I>.
</DD></DL>
<DL><DT><A NAME="edit"><I>pathName</I> <B>edit</B></A>
<I>item</I>
<I>text</I>
?<I>verifycmd</I>?
?<I>clickres</I>?
?<I>select</I>?
</DT><DD>
Provides a way for the user to edit in place the label of an item.
<BR>The command takes the initial text as argument and does not modify the label of the
edited node, but returns an empty string if edition is canceled, or the typed text
if edition is accepted.
<BR>When editing, the user can cancel by pressing Escape, or accept by pressing Return.
<BR><I>clickres</I> specifies what to do if the user click outside the editable area.
If <I>clickres</I> is 0 (the default), the edition is canceled.
If <I>clickres</I> is 1, the edition is accepted.
In all other case, the edition continues.
<BR>If edition is accepted and <I>modifycmd</I> is not empty, then it is called with
the new text as argument and must return 1 to accept the new text, 0 to refuse it
and continue edition.
<BR><I>select</I> specifies wether or not the initial text should be selected. Default is 1.
</DD></DL>
<DL><DT><A NAME="exists"><I>pathName</I> <B>exists</B></A>
<I>item</I>
</DT><DD>
Returns 1 if <I>item</I> exists in the listbox, else 0.
</DD></DL>
<DL><DT><A NAME="index"><I>pathName</I> <B>index</B></A>
<I>item</I>
</DT><DD>
Returns the position of <I>item</I> in the list.
</DD></DL>
<DL><DT><A NAME="insert"><I>pathName</I> <B>insert</B></A>
<I>index</I>
<I>item</I>
?<I>option value...</I>?
</DT><DD>
<p>
Inserts a new item identified by <I>item</I> in the list at position <I>index</I>.
</p>
<p>
Any instance of <i>#auto</i> within the item name will be replaced by the
number of the item in the order of insertion.
</p>
<P>
<DL><DT><A NAME="Item-data"><B>-data</B></A></DT>
<DD>
User data associated to the item.
</DD>
</DL>
<DL><DT><A NAME="Item-fill"><B>-fill</B></A></DT>
<DD>
Specifies the foreground color of the label of the item.
</DD>
</DL>
<DL><DT><A NAME="Item-font"><B>-font</B></A></DT>
<DD>
Specifies a font for the label of the item.
</DD>
</DL>
<DL><DT><A NAME="Item-image"><B>-image</B></A></DT>
<DD>
Specifies an image to display at the left of the label of the item.
<B>window</B> option override <B>image</B>.
</DD>
</DL>
<DL><DT><A NAME="Item-indent"><B>-indent</B></A></DT>
<DD>
Specifies the amount of extra space in pixels at the left of the item.
</DD>
</DL>
<DL><DT><A NAME="Item-text"><B>-text</B></A></DT>
<DD>
Specifies the label of the item.
</DD>
</DL>
<DL><DT><A NAME="Item-window"><B>-window</B></A></DT>
<DD>
Specifies a pathname to display at the left of the label of the item.
<B>window</B> option override <B>image</B>.
</DD>
</DL>
</DD></DL>
<DL><DT><A NAME="item"><I>pathName</I> <B>item</B></A>
<I>first</I>
?<I>last</I>?
</DT><DD>
<B>Its use is deprecated. Use <I>items</I> instead.</B><BR>
If <I>last</I> is omitted, returns the item at index <I>first</I> in the list,
or an empty string if <I>first</I> refers to a non-existent element.
If <I>last</I> is specified, the command returns a list whose elements are all
of the items between <I>first</I> and <I>last</I>, inclusive.
Both <I>first</I> and <I>last</I> may have any of the standard forms for indices.
</DD></DL>
<DL><DT><A NAME="itemcget"><I>pathName</I> <B>itemcget</B></A>
<I>item</I>
<I>option</I>
</DT><DD>
Returns the current value of a configuration option for the item.
<I>Option</I> may have any of the values accepted by the item creation command.
</DD></DL>
<DL><DT><A NAME="itemconfigure"><I>pathName</I> <B>itemconfigure</B></A>
<I>item</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
This command is similar to the <B>configure</B> command, except that it applies to the
options for an individual item, whereas <B>configure</B> applies to the options for
the widget as a whole. <B>Options</B> may have any of the values accepted by the
item creation widget command. If options are specified, options are modified as indicated
in the command and the command returns an empty string. If no options are specified,
returns a list describing the current options for the item.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="items"><I>pathName</I> <B>items</B></A>
?<I>first</I>?
?<I>last</I>?
</DT><DD>
If <I>first</I> and <I>last</I> are omitted, returns the list of all items.
If <I>first</I> is specified and <I>last</I> omitted, returns the item at index
<I>first</I>, or an empty string if <I>first</I> refers to a non-existent element.
If <I>first</I> and <I>last</I> are specified, the command returns a list whose elements
are all of the items between <I>first</I> and <I>last</I>,
inclusive. Both <I>first</I> and <I>last</I> may have any of the standard
forms for indices.
</DD></DL>
<DL><DT><A NAME="move"><I>pathName</I> <B>move</B></A>
<I>item</I>
<I>index</I>
</DT><DD>
Moves <I>item</I> at position <I>index</I> in the list.
</DD></DL>
<DL><DT><A NAME="reorder"><I>pathName</I> <B>reorder</B></A>
<I>neworder</I>
</DT><DD>
Modifies the order of items in the listbox given by <I>neworder</I>. Items that do not
appear in <I>neworder</I> are no moved.
</DD></DL>
<DL><DT><A NAME="see"><I>pathName</I> <B>see</B></A>
<I>item</I>
</DT><DD>
Arrange the scrolling area to make <I>item</I> visible.
</DD></DL>
<DL><DT><A NAME="selection"><I>pathName</I> <B>selection</B></A>
<I>cmd</I>
?<I>arg...</I>?
</DT><DD>
Modifies the list of selected items following <I>cmd</I>:
<DL>
<DT><B>clear</B>
<DD>remove all items of the selection.
<DT><B>set</B>
<DD>set the selection to all items in <I>arg</I>
<DT><B>add</B>
<DD>add all items of <I>arg</I> in the selection
<DT><B>remove</B>
<DD>remove all items of <I>arg</I> of the selection
<DT><B>get</B>
<DD>return the current selected items
</DL>
</DD></DL>
<DL><DT><A NAME="xview"><I>pathName</I> <B>xview</B></A>
?<I>arg...</I>?
</DT><DD>
Standard command to enable horizontal scrolling of <I>pathName</I>.
</DD></DL>
<DL><DT><A NAME="yview"><I>pathName</I> <B>yview</B></A>
?<I>arg...</I>?
</DT><DD>
Standard command to enable vertical scrolling of <I>pathName</I>.
</DD></DL>
<b>BINDINGS</b>
<p>
A <b>&lt;&lt;ListboxSelect&gt;&gt;</b> virtual event is generated any time the
selection in the listbox changes.
</p>
<p>
The listbox has all the standard mouse wheel bindings when it has focus.
</p>
</p>
</BODY></HTML>

297
lib/bwidget/BWman/MainFrame.html

@ -0,0 +1,297 @@ @@ -0,0 +1,297 @@
<HTML>
<HEAD><TITLE>MainFrame</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>MainFrame</B>
- Manage toplevel with menu, toolbar and statusbar
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>MainFrame</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="ProgressBar.html">OPTIONS from <B>ProgressBar</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-progressfg (see <B>-foreground</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-progressmax (see <B>-maximum</B>)</TD>
<TD>&nbsp;&nbsp;-progresstype (see <B>-type</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-progressvar (see <B>-variable</B>)</TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-menu">-menu</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-separator">-separator</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-textvariable">-textvariable</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-sizegrip">-sizegrip</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#addindicator"><B>addindicator</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#addtoolbar"><B>addtoolbar</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#getindicator"><B>getindicator</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#getmenu"><B>getmenu</B></A>
<I>menuid</I>
</DD>
<DD><I>pathName</I> <A HREF="#gettoolbar"><B>gettoolbar</B></A>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#setmenustate"><B>setmenustate</B></A>
<I>tag</I>
<I>state</I>
</DD>
<DD><I>pathName</I> <A HREF="#showstatusbar"><B>showstatusbar</B></A>
<I>name</I>
</DD>
<DD><I>pathName</I> <A HREF="#showtoolbar"><B>showtoolbar</B></A>
<I>index</I>
<I>bool</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
MainFrame manage toplevel to have:<BR>
<UL>
<LI>simple menu creation, with automatic accelerator bindings and
<A HREF="DynamicHelp.html">DynamicHelp</A> association,
<LI>one or more toolbars that user can hide,
<LI>a status bar, displaying a user message or a menu description, and optionally a
<A HREF="ProgressBar.html">ProgressBar</A>.
</UL>
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the user frame in any of the forms acceptable to
Tk_GetPixels. If this option is less than or equal to zero (the default) then the window
will not request any size at all.
</DD>
</DL>
<DL><DT><A NAME="-menu"><B>-menu (read-only)</B></A></DT>
<DD>
This option describes the menu. This is a list whose each five elements describe
one cascade menu. It has the following form:
{<I>menuname</I> <I>tags</I> <I>menuId</I> <I>tearoff</I> <I>menuentries</I>...}
where <I>menuentries</I> is a list where each element describe one menu entry, which can be:
<UL>
<LI>for a separator:<BR>
{<B>separator</B>}
<LI>for a command:<BR>
{<B>command</B> <I>menuname</I> ?<I>tags</I>? ?<I>description</I>? ?<I>accelerator</I>? ?<I>option</I> <I>value</I>? ...}
<LI>for a check button:<BR>
{<B>checkbutton</B> <I>menuname</I> ?<I>tags</I>? ?<I>description</I>? ?<I>accelerator</I>? ?<I>option</I> <I>value</I>? ...}
<LI>for a radio button:<BR>
{<B>radiobutton</B> <I>menuname</I> ?<I>tags</I>? ?<I>description</I>? ?<I>accelerator</I> ?<I>option</I> <I>value</I>? ...}
<LI>for a cascade menu:<BR>
{<B>cascade</B> <I>menuname</I> <I>tags</I> <I>menuId</I> <I>tearoff</I> <I>menuentries</I>}
</UL>
where:
<UL>
<LI><I>menuname</I> is the name of the menu. If it contains a &amp;, the following character
is automatically converted to the corresponding <B>-underline</B> option of <B>menu add</B>
command.
<LI><I>tags</I> is the tags list for the entry, used for enabling or disabling menu
entries with <B>MainFrame::setmenustate</B>.
<LI><I>menuId</I> is an id for the menu, from which you can get menu pathname with
<B>MainFrame::getmenu</B>.
<LI><I>tearoff</I> specifies if menu has tearoff entry.
<LI><I>description</I> specifies a string for <A HREF=\"DynamicHelp.html\">DynamicHelp</A>.
<LI><I>accelerator</I> specifies a key sequence. It is a list of two elements, where the first
is one of <B>Ctrl</B>, <B>Alt</B> or <B>CtrlAlt</B>, and the second as letter or a digit.
An accelerator string is build and corresponding binding set on the toplevel to invoke the
menu entry.
<LI><I>option value</I> specifies additionnal options for the entry (see <B>menu add</B>
command).
</UL>
Each value enclosed by ? are optional and defaulted to empty string, but must be
provided if one or more following options is not empty.
<BR>Example:
<PRE>
set descmenu {
"&File" {} {} 0 {
{command "&New" {} "Create a new document" {Ctrl n} -command Menu::new}
{command "&Open..." {} "Open an existing document" {Ctrl o} -command Menu::open}
{command "&Save" open "Save the document" {Ctrl s} -command Menu::save}
{cascade "&Export" {} export 0 {
{command "Format &1" open "Export document to format 1" {} -command {Menu::export 1}}
{command "Format &2" open "Export document to format 2" {} -command {Menu::export 2}}
}}
{separator}
{cascade "&Recent files" {} recent 0 {}}
{separator}
{command "E&xit" {} "Exit the application" {} -command Menu::exit}
}
"&Options" {} {} 0 {
{checkbutton "Toolbar" {} "Show/hide toolbar" {}
-variable Menu::_drawtoolbar
-command {$Menu::_mainframe showtoolbar toolbar $Menu::_drawtoolbar}
}
}
}
</PRE>
</DD>
</DL>
<DL><DT><A NAME="-separator"><B>-separator (read-only)</B></A></DT>
<DD>
Specifies if separator should be drawn at the top and/or at the bottom of the user window.
Must be one of the values <B>none</B>, <B>top</B>, <B>bottom</B> or <B>both</B>.
It depends on the relief of subwidgets of user window.
</DD>
</DL>
<DL><DT><A NAME="-textvariable"><B>-textvariable</B></A></DT>
<DD>
Specifies the textvariable option for the label of the status bar.
<A HREF="DynamicHelp.html">DynamicHelp</A> description
of menu entries are mapped to this variable at the creation of the MainFrame.
If this variable is changed by MainFrame::configure, menu description will
not be available.
<BR>You change the text of the label by modifying the value of the variable.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the user frame in any of the forms acceptable to
Tk_GetPixels. If this option is less than or equal to zero (the default) then the window
will not request any size at all.
</DD>
</DL>
<DL><DT><A NAME="-sizegrip"><B>-sizegrip (themed, read-only)</B></A></DT>
<DD>
If bool argument is true and themed mode, show a ttk sizegrip widget in the lower-right corner.
</DD>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="addindicator"><I>pathName</I> <B>addindicator</B></A>
?<I>arg...</I>?
</DT><DD>
Add an indicator box at the right of the status bar. Each indicator are added from left
to right. An indicator is a Tk label widget configured with option-value pair
given by ?<I>arg...</I>?. <B>-relief</B> and <B>-borderwidth</B> options are respetively
defaulted to <I>sunken</I> and 1. Returns the pathname of the created label.
</DD></DL>
<DL><DT><A NAME="addtoolbar"><I>pathName</I> <B>addtoolbar</B></A>
</DT><DD>
Add a toolbar to the MainFrame. Returns the pathname of the new window where to place
toolbar items.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Returns the pathname of the user window.
</DD></DL>
<DL><DT><A NAME="getindicator"><I>pathName</I> <B>getindicator</B></A>
<I>index</I>
</DT><DD>
Returns the pathname of the <I>index</I>th added indicator.
</DD></DL>
<DL><DT><A NAME="getmenu"><I>pathName</I> <B>getmenu</B></A>
<I>menuid</I>
</DT><DD>
Returns the pathname of the menu whose id is <I>menuid</I>.
</DD></DL>
<DL><DT><A NAME="getmenustate"><I>pathName</I> <B>getmenustate</B></A>
<I>tag</I>
<I>state</I>
</DT><DD>
Returns the state of the given menu <I>tag</I>.
</DD></DL>
<DL><DT><A NAME="gettoolbar"><I>pathName</I> <B>gettoolbar</B></A>
<I>index</I>
</DT><DD>
Returns the pathname of the <I>index</I>th added toolbar.
</DD></DL>
<DL><DT><A NAME="setmenustate"><I>pathName</I> <B>setmenustate</B></A>
<I>tag</I>
<I>state</I>
</DT><DD>
Set the <B>-state</B> option value of all the menu entries that have the tag <I>tag</I>
to <I>state</I>.
A menu entry is disabled, if one of its associated tags have state <B>disabled</B>.
</DD></DL>
<DL><DT><A NAME="showstatusbar"><I>pathName</I> <B>showstatusbar</B></A>
<I>name</I>
</DT><DD>
<I>name</I> is one of <B>none</B>, <B>status</B> or <B>progression</B>.
Use <B>none</B> to hide the status bar, <B>status</B> to display the label only, or
<B>progression</B> to display the label and the
<A HREF="ProgressBar.html">ProgressBar</A>.
</DD></DL>
<DL><DT><A NAME="showtoolbar"><I>pathName</I> <B>showtoolbar</B></A>
<I>index</I>
<I>bool</I>
</DT><DD>
Hide if <I>bool</I> is 0, or show if <I>bool</I> is 1 the <I>index</I>th added toolbar.
To prevent your toplevel from resizing while hiding/showing toolbar,
do [wm geometry $top [wm geometry $top]] when it is managed.
</DD></DL>
</BODY></HTML>

218
lib/bwidget/BWman/MessageDlg.html

@ -0,0 +1,218 @@ @@ -0,0 +1,218 @@
<HTML>
<HEAD><TITLE>MessageDlg</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>MessageDlg</B>
- Message dialog box
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>MessageDlg</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-anchor">-anchor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-padx">-padx</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-pady">-pady</A></TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="Dialog.html">OPTIONS from <B>Dialog</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-cancel</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-default</TD>
<TD>&nbsp;&nbsp;-parent</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-aspect">-aspect</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-buttons">-buttons</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-buttonwidth">-buttonwidth</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-icon">-icon</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-justify">-justify</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-message">-message</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-title">-title</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-type">-type</A></TD>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TD>
</TR>
</TR>
</TABLE></DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
MessageDlg provides a simple way to display a message dialog.
MessageDlg::<B>create</B> creates the message dialog, displays
it and return the index of the pressed button, or -1 if it is destroyed.
When returning, the dialog no longer exists.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-aspect"><B>-aspect</B></A></DT>
<DD>
Specifies a non-negative integer value indicating desired
aspect ratio for the text. The aspect ratio is specified as
100*width/height. 100 means the text should
be as wide as it is tall, 200 means the text should
be twice as wide as it is tall, 50 means the text should
be twice as tall as it is wide, and so on.
Used to choose line length for text if <B>width</B> option
isn't specified.
Defaults to 150.
</DD>
</DL>
<DL><DT><A NAME="-buttons"><B>-buttons</B></A></DT>
<DD>
Specifies a list of buttons to display when <B>type</B> option is <I>user</I>.
If a button has a symbolic name, its associated text will be displayed.
</DD>
</DL>
<DL><DT><A NAME="-buttonwidth"><B>-buttonwidth</B></A></DT>
<DD>
Specifies the standard width of the buttons in the dialog.
</DD>
</DL>
<DL><DT><A NAME="-icon"><B>-icon</B></A></DT>
<DD>
Specifies an icon to display. Must be one of the following: <B>error</B>, <B>info</B>,
<B>question</B> or <B>warning</B>.
</DD>
</DL>
<DL><DT><A NAME="-justify"><B>-justify</B></A></DT>
<DD>
Specifies how to justify lines of text.
Must be one of <B>left</B>, <B>center</B>, or <B>right</B>. Defaults
to <B>left</B>.
This option works together with the <B>anchor</B>, <B>aspect</B>,
<B>padx</B>, <B>pady</B>, and <B>width</B> options to provide a variety
of arrangements of the text within the window.
The <B>aspect</B> and <B>width</B> options determine the amount of
screen space needed to display the text.
The <B>anchor</B>, <B>padx</B>, and <B>pady</B> options determine where this
rectangular area is displayed within the widget's window, and the
<B>justify</B> option determines how each line is displayed within that
rectangular region.
For example, suppose <B>anchor</B> is <B>e</B> and <B>justify</B> is
<B>left</B>, and that the message window is much larger than needed
for the text.
The the text will displayed so that the left edges of all the lines
line up and the right edge of the longest line is <B>padx</B> from
the right side of the window; the entire text block will be centered
in the vertical span of the window.
</DD>
</DL>
<DL><DT><A NAME="-message"><B>-message</B></A></DT>
<DD>
Specifies the message to display in this message box.
</DD>
</DL>
<DL><DT><A NAME="-title"><B>-title</B></A></DT>
<DD>
Specifies a string to display as the title of the message box.
If the value is empty (the default), a default title will be set corresponding
to the <B>icon</B> option.
The default associated title is in english, and can be modified to set it in
another language by specifying the resource:
<PRE> *MessageDlg.<I>name</I>Title: <I>value</I></PRE>
or the equivalent tcl command:
<PRE> option add *MessageDlg.<I>name</I>Title <I>value</I></PRE>
where <I>name</I> is the name of an icon as defined in the <B>icon</B> option.
<BR>For example, for french language, you can specify for a warning dialog:
<PRE> option add *MessageDlg.warningTitle "Attention"</PRE>
</DD>
</DL>
<DL><DT><A NAME="-type"><B>-type</B></A></DT>
<DD>
Specifies a set of buttons to be displayed. The following values are possible:
<DD>
<P>
<DL COMPACT>
<DT>
<B>abortretryignore</B>
<DD>
Displays three buttons whose symbolic names are <B>abort</B>,
<B>retry</B> and <B>ignore</B>.<P>
<DT>
<B>ok</B>
<DD>
Displays one button whose symbolic name is <B>ok</B>.<P>
<DT>
<B>okcancel</B>
<DD>
Displays two buttons whose symbolic names are <B>ok</B> and <B>cancel</B>.<P>
<DT>
<B>retrycancel</B>
<DD>
Displays two buttons whose symbolic names are <B>retry</B> and <B>cancel</B>.<P>
<DT>
<B>yesno</B>
<DD>
Displays two buttons whose symbolic names are <B>yes</B> and <B>no</B>.<P>
<DT>
<B>yesnocancel</B>
<DD>
Displays three buttons whose symbolic names are <B>yes</B>, <B>no</B>
and <B>cancel</B>.
<P>
<DT>
<B>user</B>
<DD>
Displays buttons of <B>-buttons</B> option.<P>
<DT>
</DL COMPACT>
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the length of lines in the window.
If this option has a value greater than zero then the <B>aspect</B>
option is ignored and the <B>width</B> option determines the line
length.
If this option has a value less than or equal to zero, then
the <B>aspect</B> option determines the line length.
</DD>
</DL>
</BODY></HTML>

374
lib/bwidget/BWman/NoteBook.html

@ -0,0 +1,374 @@ @@ -0,0 +1,374 @@
<HTML>
<HEAD><TITLE>NoteBook</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>NoteBook</B>
- Notebook manager widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>NoteBook</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="ArrowButton.html">OPTIONS from <B>ArrowButton</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-activebackground</TD>
<TD>&nbsp;&nbsp;-activeforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-borderwidth or -bd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
<TD>&nbsp;&nbsp;-foreground or -fg</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-repeatdelay</TD>
<TD>&nbsp;&nbsp;-repeatinterval</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-arcradius">-arcradius</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-homogeneous">-homogeneous</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-side">-side</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-tabbevelsize">-tabbevelsize</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-tabpady">-tabpady</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#bindtabs"><B>bindtabs</B></A>
<I>event</I>
<I>script</I>
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#compute_size"><B>compute_size</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#delete"><B>delete</B></A>
<I>page</I>
?<I>destroyframe</I>?
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
<I>page</I>
</DD>
<DD><I>pathName</I> <A HREF="#index"><B>index</B></A>
<I>page</I>
</DD>
<DD><I>pathName</I> <A HREF="#insert"><B>insert</B></A>
<I>index</I>
<I>page</I>
?<I>option value...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#itemcget"><B>itemcget</B></A>
<I>page</I>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#itemconfigure"><B>itemconfigure</B></A>
<I>page</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#move"><B>move</B></A>
<I>page</I>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#page"><B>page</B></A>
<I>first</I>
?<I>last</I>?
</DD>
<DD><I>pathName</I> <A HREF="#pages"><B>pages</B></A>
?<I>first</I>?
?<I>last</I>?
</DD>
<DD><I>pathName</I> <A HREF="#raise"><B>raise</B></A>
?<I>page</I>?
</DD>
<DD><I>pathName</I> <A HREF="#see"><B>see</B></A>
<I>page</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
NoteBook widget manage a set of pages and displays one of them.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-arcradius"><B>-arcradius</B></A></DT>
<DD>
Specifies the amount of rounding effect at the corners of a tab. This value
can be adjusted from 0 to 8 pixels with the default being 2 pixels. Usually,
small values are preferable.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the pages. If this option is equal to zero (the default)
then the window will not request any size at all.
In this case, user may want to call NoteBook::<B>compute_size</B> to make NoteBook larger
enough to contains the largest page.
</DD>
</DL>
<DL><DT><A NAME="-homogeneous"><B>-homogeneous</B></A></DT>
<DD>
Specifies wether or not the label of the pages must have the same width.
</DD>
</DL>
<DL><DT><A NAME="-side"><B>-side</B></A></DT>
<DD>
Specifies the side where to place the label of the pages. Must be one
of <B>top</B> or <B>bottom</B>.
</DD>
</DL>
<DL><DT><A NAME="-tabbevelsize"><B>-tabbevelsize</B></A></DT>
<DD>
Specifies the amount of bevel the tabs should have. This value can be adjusted from
0 to 8 pixels with the default being 0 pixels. A zero pixel bevel is essentially rectangular
while non-zero bevel size will look trapezoidal.
</DD>
</DL>
<DL><DT><A NAME="-tabpady"><B>-tabpady</B></A></DT>
<DD>
Specifies the padding between the text in the tab and the top and bottom
of the tab. Padding may be a list of two values to specify padding for
top and bottom separately. Padding defaults to {0 6}.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the pages. If this option is equal to zero (the default)
then the window will not request any size at all.
In this case, user may want to call NoteBook::<B>compute_size</B> to make NoteBook larger
enough to contains the largest page.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="bindtabs"><I>pathName</I> <B>bindtabs</B></A>
<I>event</I>
<I>script</I>
</DT><DD>
This command associates a command to execute whenever the event
sequence given by <I>event</I> occurs on a tab. The page identifier on which
the event occurs is appended to the command.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="compute_size"><I>pathName</I> <B>compute_size</B></A>
</DT><DD>
This command can be called to make the NoteBook large enough to contain the largest page.
Note that if all pages use -createcmd, they will have no requested size.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="delete"><I>pathName</I> <B>delete</B></A>
<I>page</I>
?<I>destroyframe</I>?
</DT><DD>
Deletes the page <I>page</I>. If <I>destroyframe</I> is 1 (the default), the frame
associated to <I>page</I> is destroyed. If <I>destroyframe</I> is 0, the frame is not
destroyed and is reused by further call to <B>insert</B> with the same <I>page</I>.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
<I>page</I>
</DT><DD>
Returns the pathname of the page <I>page</I>.
</DD></DL>
<DL><DT><A NAME="index"><I>pathName</I> <B>index</B></A>
<I>page</I>
</DT><DD>
Return the numerical index corresponding to the item.
</DD></DL>
<DL><DT><A NAME="insert"><I>pathName</I> <B>insert</B></A>
<I>index</I>
<I>page</I>
?<I>option value...</I>?
</DT><DD>
Insert a new page idendified by <I>page</I> at position <I>index</I> in the pages list.
<I>index</I> must be numeric or <B>end</B>. The pathname of the new page is returned.
<P>
<DL><DT><A NAME="Page-createcmd"><B>-createcmd</B></A></DT>
<DD>
Specifies a command to be called the first time the page is raised.
</DD>
</DL>
<DL><DT><A NAME="Page-image"><B>-image</B></A></DT>
<DD>
Specifies an image to display for the page at the left of the label
</DD>
</DL>
<DL><DT><A NAME="Page-leavecmd"><B>-leavecmd</B></A></DT>
<DD>
Specifies a command to be called when a page is about to be leaved.
The command must return 0 if the page can not be leaved, or 1 if it can.
</DD>
</DL>
<DL><DT><A NAME="Page-raisecmd"><B>-raisecmd</B></A></DT>
<DD>
Specifies a command to be called each time the page is raised.
</DD>
</DL>
<DL><DT><A NAME="Page-state"><B>-state</B></A></DT>
<DD>
Specifies the state of the page. Must be <B>normal</B> or <B>disabled</B>.
</DD>
</DL>
<DL><DT><A NAME="Page-text"><B>-text</B></A></DT>
<DD>
Specifies a label to display for the page.
</DD>
</DL>
</DD></DL>
<DL><DT><A NAME="itemcget"><I>pathName</I> <B>itemcget</B></A>
<I>page</I>
<I>option</I>
</DT><DD>
Returns the current value of a configuration option for the item.
<I>Option</I> may have any of the values accepted by the item creation command.
</DD></DL>
<DL><DT><A NAME="itemconfigure"><I>pathName</I> <B>itemconfigure</B></A>
<I>page</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
This command is similar to the <B>configure</B> command, except that it applies to the
options for an individual item, whereas <B>configure</B> applies to the options for
the widget as a whole. <B>Options</B> may have any of the values accepted by the
item creation widget command. If options are specified, options are modified as indicated
in the command and the command returns an empty string. If no options are specified,
returns a list describing the current options for the item.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="move"><I>pathName</I> <B>move</B></A>
<I>page</I>
<I>index</I>
</DT><DD>
Moves <I>page</I> tab to index <I>index</I>.
</DD></DL>
<DL><DT><A NAME="page"><I>pathName</I> <B>page</B></A>
<I>first</I>
?<I>last</I>?
</DT><DD>
<B>Its use is deprecated. Use <I>pages</I> instead.</B><BR>
If <I>last</I> is omitted, returns the page at index <I>first</I>, or an empty string if
<I>first</I> refers to a non-existent element. If <I>last</I> is specified, the command
returns a list whose elements are all of the pages between <I>first</I> and <I>last</I>,
inclusive. Both <I>first</I> and <I>last</I> may have any of the standard
forms for indices.
</DD></DL>
<DL><DT><A NAME="pages"><I>pathName</I> <B>pages</B></A>
?<I>first</I>?
?<I>last</I>?
</DT><DD>
If <I>first</I> and <I>last</I> are omitted, returns the list of all pages.
If <I>first</I> is specified and <I>last</I> omitted, returns the page at index
<I>first</I>, or an empty string if <I>first</I> refers to a non-existent element.
If <I>first</I> and <I>last</I> are specified, the command returns a list whose elements
are all of the pages between <I>first</I> and <I>last</I>,
inclusive. Both <I>first</I> and <I>last</I> may have any of the standard
forms for indices.
</DD></DL>
<DL><DT><A NAME="raise"><I>pathName</I> <B>raise</B></A>
?<I>page</I>?
</DT><DD>
Raise the page <I>page</I>, or return the raised page if <I>page</I> is omitted.
</DD></DL>
<DL><DT><A NAME="see"><I>pathName</I> <B>see</B></A>
<I>page</I>
</DT><DD>
Scrolls labels to make the label of the page <I>page</I> visible.
</DD></DL>
</BODY></HTML>

180
lib/bwidget/BWman/PagesManager.html

@ -0,0 +1,180 @@ @@ -0,0 +1,180 @@
<HTML>
<HEAD><TITLE>PagesManager</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>PagesManager</B>
- Pages manager widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>PagesManager</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#add"><B>add</B></A>
<I>page</I>
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#compute_size"><B>compute_size</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#delete"><B>delete</B></A>
<I>page</I>
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
<I>page</I>
</DD>
<DD><I>pathName</I> <A HREF="#page"><B>page</B></A>
<I>first</I>
?<I>last</I>?
</DD>
<DD><I>pathName</I> <A HREF="#pages"><B>pages</B></A>
?<I>first</I>?
?<I>last</I>?
</DD>
<DD><I>pathName</I> <A HREF="#raise"><B>raise</B></A>
?<I>page</I>?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
PagesManager widget manages a set of pages and displays one of them.
PagesManager does not provide any user access method, as NoteBook
does, so it can be done through a listbox, a menu, radiobutton, or
whatever. The widget shows no pages during creation; there must be an
explicit call to <B>raise</B> to display one.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the pages. If this option is equal to zero (the default)
then the window will not request any size at all.
In this case, user may want to call PagesManager::<B>compute_size</B> to make PagesManager
larger enough to contains the largest page.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the pages. If this option is equal to zero (the default)
then the window will not request any size at all.
In this case, user may want to call PagesManager::<B>compute_size</B> to make PagesManager
larger enough to contains the largest page.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="add"><I>pathName</I> <B>add</B></A>
<I>page</I>
</DT><DD>
Add a new page identified by <I>page</I>, which is an arbitrary
identifier. The pathname of the new page is returned and widgets for
the page should be created with this as the parent or ancestor.
However, PagesManager manages its own geometry. <B>pack</B>,
<B>grid</B> or an equivalent should not be used with the pathname
returned by <B>add</B>.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="compute_size"><I>pathName</I> <B>compute_size</B></A>
</DT><DD>
This command can be called to make the PagesManager large enough to contain the largest page.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="delete"><I>pathName</I> <B>delete</B></A>
<I>page</I>
</DT><DD>
Deletes the page <I>page</I>.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
<I>page</I>
</DT><DD>
Returns the pathname of the page <I>page</I>.
</DD></DL>
<DL><DT><A NAME="page"><I>pathName</I> <B>page</B></A>
<I>first</I>
?<I>last</I>?
</DT><DD>
<B>Its use is deprecated. Use <I>pages</I> instead.</B><BR>
If <I>last</I> is omitted, returns the page at index <I>first</I>, or an empty string if
<I>first</I> refers to a non-existent element. If <I>last</I> is specified, the command
returns a list whose elements are all of the pages between <I>first</I> and <I>last</I>,
inclusive. Both <I>first</I> and <I>last</I> may have any of the standard
forms for indices.
</DD></DL>
<DL><DT><A NAME="pages"><I>pathName</I> <B>pages</B></A>
?<I>first</I>?
?<I>last</I>?
</DT><DD>
If <I>first</I> and <I>last</I> are omitted, returns the list of all pages.
If <I>first</I> is specified and <I>last</I> omitted, returns the page at index
<I>first</I>, or an empty string if <I>first</I> refers to a non-existent element.
If <I>first</I> and <I>last</I> are specified, the command returns a list whose elements
are all of the pages between <I>first</I> and <I>last</I>,
inclusive. Both <I>first</I> and <I>last</I> may have any of the standard
forms for indices.
</DD></DL>
<DL><DT><A NAME="raise"><I>pathName</I> <B>raise</B></A>
?<I>page</I>?
</DT><DD>
Raise the page <I>page</I>, or return the raised page if <I>page</I> is omitted.
</DD></DL>
</BODY></HTML>

158
lib/bwidget/BWman/PanedWindow.html

@ -0,0 +1,158 @@ @@ -0,0 +1,158 @@
<HTML>
<HEAD><TITLE>PanedWindow</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>PanedWindow</B>
- Tiled layout manager widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>PanedWindow</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-activator">-activator</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-pad">-pad</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-side">-side</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-weights">-weights</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#add"><B>add</B></A>
?<I>option value...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
<I>index</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
PanedWindow is a widget that lays out children in
a vertically or horizontally tiled format.
The user can adjust the size of the panes, with a pane control sash created
between children.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-activator"><B>-activator (read-only)</B></A></DT>
<DD>
By default, the control sash is either a button or a line depending
upon the underlying operating system. This sash may be explicitly set
using this option. If set to <B>line</B> then the sash consists of
just a dividing line. Otherwise if set to <B>button</B> then it
constists of a knob that can be dragged.
</DD>
</DL>
<DL><DT><A NAME="-pad"><B>-pad (read-only)</B></A></DT>
<DD>
Specifies additional space between the button of the sash and children.
</DD>
</DL>
<DL><DT><A NAME="-side"><B>-side (read-only)</B></A></DT>
<DD>
Specifies the side of the sash, which implies the layout: <B>top</B> or <B>bottom</B>
(horizontal layout), <B>left</B> or <B>right</B> (vertical layout).
</DD>
</DL>
<DL><DT><A NAME="-weights"><B>-weights (read-only)</B></A></DT>
<DD>
Specifies how the weights specified when adding panes should be used. Must be
<B>extra</B> or <B>available</B>. When using <I>extra</I>, only extra space is
devided among the diffferent panes relative to their weight. When using
<I>available</I>, all space is devided among the diffferent panes relative to
their weight. Default value for <B>weights</B> is <I>extra</I>.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width (read-only)</B></A></DT>
<DD>
Specifies the width of the button of the sash. This option is ignored
if the activator is set to <B>line</B>.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="add"><I>pathName</I> <B>add</B></A>
?<I>option value...</I>?
</DT><DD>
This command add a new pane. The new pane is placed below the previous pane for
vertical layout or at right for horizontal layout. This command returns a frame
where user can place its widget. Valid options are:
<P>
<DL><DT><A NAME="Pane-minsize"><B>-minsize</B></A></DT>
<DD>
Specifies the minimum size requested for the pane.
See the <B>grid</B> command for more information.
</DD>
</DL>
<DL><DT><A NAME="Pane-weight"><B>-weight</B></A></DT>
<DD>
Specifies the relative weight for apportioning any extra spaces among panes.
See the <B>grid</B> command for more information.
</DD>
</DL>
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
<I>index</I>
</DT><DD>
Returns the pathname of the <I>index</I>th added pane.
</DD></DL>
</BODY></HTML>

153
lib/bwidget/BWman/PanelFrame.html

@ -0,0 +1,153 @@ @@ -0,0 +1,153 @@
<HTML>
<HEAD><TITLE>PanelFrame</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>PanelFrame</B>
- Frame with a boxed title area
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>PanelFrame</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-text">-text</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-textvariable">-textvariable</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-panelbackground">-panelbackground</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-panelforeground">-panelforeground</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-ipad">-ipad</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
PanelFrame creates a frame area with a boxed title area. The boxed title
area contains a label ands allows for other items to be placed in it. This
can serve like a mini-toolbar.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the widget.
</DD>
<DT><A NAME="-ipad"><B>-ipad</B></A></DT>
<DD>
The spacing to place around individual panel area items.
</DD>
<DT><A NAME="-panelbackground"><B>-panelbackground</B></A></DT>
<DD>
The color for the panel area background.
Defaults to the selection highlight background color.
</DD>
<DT><A NAME="-panelforeground"><B>-panelforeground</B></A></DT>
<DD>
The color for the title text.
Defaults to the selection highlight foreground color.
</DD>
<DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the widget.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="add"><I>pathName</I> <B>add</B></A> <B>widget</B>
?<I>option</I> <I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Add a widget to the panel. Widgets are <B>pack</B>ed in.
Possible options are:
<DL>
<DT><B>-side</B></DT>
<DD>Side to place item on (defaults to <B>right</B>).</DD>
<DT><B>-fill</B></DT>
<DD>Whether to fill space (defaults to <B>none</B>).</DD>
<DT><B>-expand</B></DT>
<DD>Whether to expand space (defaults to <B>0</B>).</DD>
<DT><B>-pad</B></DT>
<DD>Override of the widget's <B>-ipad</B> option for this item.</DD>
</DL>
</DD>
</DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD>
</DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no
<I>option</I> is specified, returns a list describing all of the available
options for <I>pathName</I>. If <I>option</I> is specified with no
<I>value</I>, then the command returns a list describing the one named
<I>option</I> (this list will be identical to the corresponding sublist of
the value returned if no <I>option</I> is specified). If one or more
<I>option-value</I> pairs are specified, then the command modifies the
given widget option(s) to have the given value(s); in this case the command
returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD>
</DL>
<DL><DT><A NAME="delete"><I>pathName</I> <B>delete</B></A>
<B>widget</B> ?<I>widget</I> ...?
</DT><DD>
Delete a widget and associated state from the panel.</DD>
</DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Get the frame widget for the status bar in which status bar items should be
created.</DD>
</DD>
</DL>
<DL><DT><A NAME="items"><I>pathName</I> <B>items</B></A>
</DT><DD>List of items in the status bar.</DD>
<DL>
<DL><DT><A NAME="remove"><I>pathName</I> <B>remove</B></A>
<B>widget</B> ?<I>widget</I> ...?
</DT><DD>
Remove a widget item and associated state from the panel without destroying
the item.</DD>
</DL>
</BODY></HTML>

214
lib/bwidget/BWman/PasswdDlg.html

@ -0,0 +1,214 @@ @@ -0,0 +1,214 @@
<HTML>
<HEAD><TITLE>PasswdDlg</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>PasswdDlg</B>
- Login/Password dialog box
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>PasswdDlg</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="Dialog.html">OPTIONS from <B>Dialog</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-anchor</TD>
<TD>&nbsp;&nbsp;-background or -bg</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-homogeneous</TD>
<TD>&nbsp;&nbsp;-modal</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-padx</TD>
<TD>&nbsp;&nbsp;-pady</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-parent</TD>
<TD>&nbsp;&nbsp;-spacing</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-title</TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="LabelEntry.html">OPTIONS from <B>LabelEntry</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-borderwidth or -bd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
<TD>&nbsp;&nbsp;-entrybg</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-entryfg</TD>
<TD>&nbsp;&nbsp;-exportselection</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-font</TD>
<TD>&nbsp;&nbsp;-foreground or -fg</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helptype</TD>
<TD>&nbsp;&nbsp;-highlightbackground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-highlightcolor</TD>
<TD>&nbsp;&nbsp;-highlightthickness</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertbackground</TD>
<TD>&nbsp;&nbsp;-insertborderwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertofftime</TD>
<TD>&nbsp;&nbsp;-insertontime</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertwidth</TD>
<TD>&nbsp;&nbsp;-labelanchor</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-labelfont</TD>
<TD>&nbsp;&nbsp;-labelheight</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-labeljustify</TD>
<TD>&nbsp;&nbsp;-labelwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-loginhelptext (see <B>-helptext</B>)</TD>
<TD>&nbsp;&nbsp;-loginhelpvar (see <B>-helpvar</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-loginlabel (see <B>-label</B>)</TD>
<TD>&nbsp;&nbsp;-logintext (see <B>-text</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-logintextvariable (see <B>-textvariable</B>)</TD>
<TD>&nbsp;&nbsp;-loginunderline (see <B>-underline</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-passwdeditable (see <B>-editable</B>)</TD>
<TD>&nbsp;&nbsp;-passwdhelptext (see <B>-helptext</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-passwdhelpvar (see <B>-helpvar</B>)</TD>
<TD>&nbsp;&nbsp;-passwdlabel (see <B>-label</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-passwdstate (see <B>-state</B>)</TD>
<TD>&nbsp;&nbsp;-passwdtext (see <B>-text</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-passwdtextvariable (see <B>-textvariable</B>)</TD>
<TD>&nbsp;&nbsp;-passwdunderline (see <B>-underline</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-relief</TD>
<TD>&nbsp;&nbsp;-selectbackground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-selectborderwidth</TD>
<TD>&nbsp;&nbsp;-selectforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-wraplength</TD>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-command">-command</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-type">-type</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
PasswdDlg provides a simple way to display a login/password dialog.
PasswdDlg::<B>create</B> creates the dialog, displays it, and return the value of login
and password in a list, or an empty list if it is destroyed or user press cancel.
When returning, the dialog no longer exists.
<BR>Additionnal resources can be set to modify other text:
<PRE>
*loginName Label for login LabelEntry
*passwordName Label for password LabelEntry
</PRE>
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-command"><B>-command</B></A></DT>
<DD>
Specifies a command to call when user press ok button.
</DD>
</DL>
<DL><DT><A NAME="-type"><B>-type</B></A></DT>
<DD>
Specifies a set of buttons to be displayed. The following values are possible:
<DD>
<P>
<DL COMPACT>
<DT>
<B>ok</B>
<DD>
Displays one button whose symbolic name is <B>ok</B>.<P>
<DT>
<B>okcancel</B>
<DD>
Displays two buttons whose symbolic names are <B>ok</B> and <B>cancel</B>.<P>
</DL COMPACT>
</DD>
</DL>
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<HR>
<ADRESS>Stephane Lavirotte <A HREF="mailto:Stephane.Lavirotte@sophia.inria.fr">(Stephane.Lavirotte@sophia.inria.fr)</A></ADRESS>
</BODY></HTML>

152
lib/bwidget/BWman/ProgressBar.html

@ -0,0 +1,152 @@ @@ -0,0 +1,152 @@
<HTML>
<HEAD><TITLE>ProgressBar</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ProgressBar</B>
- Progress indicator widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ProgressBar</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-orient">-orient</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-troughcolor">-troughcolor</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-maximum">-maximum</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-type">-type</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-variable">-variable</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ProgressBar widget indicates the user the progress of a lengthly operation.
It is used by <A HREF="MainFrame.html">MainFrame</A>
and <A HREF="ProgressDlg.html">ProgressDlg</A>.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the progress indicator.
</DD>
</DL>
<DL><DT><A NAME="-maximum"><B>-maximum</B></A></DT>
<DD>
Specifies the maximum value of the variable. This value must be
greater than zero.
</DD>
</DL>
<DL><DT><A NAME="-type"><B>-type</B></A></DT>
<DD>
Specifies the type of the ProgressBar. Must be one of <B>normal</B>,
<B>incremental</B>, <B>infinite</B> or <B>nonincremental_infinite</B>.
<BR><BR>If <B>type</B> is <I>normal</I>, the progress indicator is drawn
proportional to the variable value and <B>maximum</B> option each time the
variable is set.
<BR><BR>If <B>type</B> is <I>incremental</I>, the value of the progress
indicator is maintained internally, and incremented each time the variable is
set by its value. The progress indicator is drawn proportional to the internal
value and
<B>maximum</B> option.
<BR><BR>If <B>type</B> is <I>infinite</I>, the value of the progress indicator
is maintained internally, and incremented each time the variable is set by its
value. The progress indicator moves from left to right if internal value
(modulo <B>maximum</B>) is less than <B>maximum</B>/2, and from right to left
if internal value is greater than <B>maximum</B>/2.
<BR><BR>If <B>type</B> is <I>nonincremental_infinite</I>, the value of the
progress indicator taken from the variable value, The progress indicator moves
from left to right if variable value (modulo <B>maximum</B>) is less than
<B>maximum</B>/2, and from right to left if internal value is greater than
<B>maximum</B>/2.
<BR><BR>See <B>-variable</B> option for special case of its value,
<BR><BR>Default value for <B>type</B> is <I>normal</I>.
</DD>
</DL>
<DL><DT><A NAME="-variable"><B>-variable</B></A></DT>
<DD>
Specifies the variable attached to the progress indicator. Progress indicator
is updated when the value of the variable changes. If the value of the
variable is negative, the progress indicator is not displayed (it is drawn flat
with <B>background</B> color - usefull for ProgressDlg to make it
invisible). If its value 0, progress indicator is reinitialized.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the progress indicator.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
</BODY></HTML>

145
lib/bwidget/BWman/ProgressDlg.html

@ -0,0 +1,145 @@ @@ -0,0 +1,145 @@
<HTML>
<HEAD><TITLE>ProgressDlg</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ProgressDlg</B>
- Progress indicator dialog box
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ProgressDlg</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-textvariable">-textvariable</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="Dialog.html">OPTIONS from <B>Dialog</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-parent</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-separator</TD>
<TD>&nbsp;&nbsp;-title</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="ProgressBar.html">OPTIONS from <B>ProgressBar</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-borderwidth or -bd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-foreground or -fg</TD>
<TD>&nbsp;&nbsp;-maximum</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-relief</TD>
<TD>&nbsp;&nbsp;-troughcolor</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-type</TD>
<TD>&nbsp;&nbsp;-variable</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-command">-command</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-stop">-stop</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ProgressDlg provides a simple way to display a progress indicator dialog.
ProgressDlg::<B>create</B> creates the dialog, displays it, set a local
grab to it and immediatly return. The dialog is updated by modifying the
value of the variable of options <B>-textvariable</B> and <B>-variable</B>.
You have to destroy the dialog after use.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-command"><B>-command</B></A></DT>
<DD>
Specifies a command to call when user press stop button. Note that it
is the program's responsibility to periodically call <B>update</B> so
that button press events can be generated.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies a desired height for the label in lines of text.
</DD>
</DL>
<DL><DT><A NAME="-stop"><B>-stop</B></A></DT>
<DD>
Specifies the text of the button typically used to stop process. If empty, no button will
be drawn. This can be a symbolic name.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies a desired width for the label in characters.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
</BODY></HTML>

130
lib/bwidget/BWman/ScrollView.html

@ -0,0 +1,130 @@ @@ -0,0 +1,130 @@
<HTML>
<HEAD><TITLE>ScrollView</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ScrollView</B>
- Display the visible area of a scrolled window
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ScrollView</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-cursor">-cursor</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-fill">-fill</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-foreground">-foreground or -fg</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-window">-window</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ScrollView displays the visible area of a scrolled window within
its scroll region.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-fill"><B>-fill</B></A></DT>
<DD>
Specifies the fill color of the rectangle.
</DD>
</DL>
<DL><DT><A NAME="-foreground"><B>-foreground</B></A></DT>
<DD>
Specifies the color of the border of the rectangle.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the ScrollView.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the ScrollView.
</DD>
</DL>
<DL><DT><A NAME="-window"><B>-window</B></A></DT>
<DD>
Specifies the window to view. This widget must have <B>-xscrollcommand</B> and
<B>-yscrollcommand</B> options, and respond to <B>xview</B> and <B>yview</B> command.
In order to make ScrollView working with other scrollbar, <B>-xscrollcommand</B> and
<B>-yscrollcommand</B> options of the widget must be set before the widget is passed to
the <B>-window</B> option of the ScrollView (for example, if the widget is handled by
a ScrolledWindow, call <B>setwidget</B> before setting <B>-window</B> option).
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<HR><BR><B>BINDINGS</B><BR><BR>
<DL><DT>If mouse button 1 is pressed and dragged over the ScrollView, the top left corner of
the visible area of the scrolled window is moved proportionally to the mouse displacement.
</DT></DL>
<DL><DT>If mouse button 3 is pressed over the ScrollView, the top left corner of the visible
area is proportionally set to this point.
</DT></DL>
</BODY></HTML>

194
lib/bwidget/BWman/ScrollableFrame.html

@ -0,0 +1,194 @@ @@ -0,0 +1,194 @@
<HTML>
<HEAD><TITLE>ScrollableFrame</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ScrollableFrame</B>
- Scrollable frame containing widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ScrollableFrame</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-xscrollcommand">-xscrollcommand</A></TD></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-yscrollcommand">-yscrollcommand</A></TD></TR>
</TABLE></DD>
<BR>
Themed widget (<B>Widget::theme true</B>): Options <B>-background</B> and <B>-bg</B> are not available.
Modify style <B>TFrame</B> property <B>-background</B> instead.
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-areaheight">-areaheight</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-areawidth">-areawidth</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-constrainedheight">-constrainedheight</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-constrainedwidth">-constrainedwidth</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-xscrollincrement">-xscrollincrement</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-yscrollincrement">-yscrollincrement</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#see"><B>see</B></A>
<I>widget</I>
?<I>vert</I>?
?<I>horz</I>?
</DD>
<DD><I>pathName</I> <A HREF="#xview"><B>xview</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#yview"><B>yview</B></A>
?<I>arg...</I>?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ScrollableFrame widget containing widget.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-areaheight"><B>-areaheight</B></A></DT>
<DD>
Specifies the height for the scrollable area. If zero, then the height
of the scrollable area is made just large enough to hold all its children.
</DD>
</DL>
<DL><DT><A NAME="-areawidth"><B>-areawidth</B></A></DT>
<DD>
Specifies the width for the scrollable area. If zero, then the width
of the scrollable area window is made just large enough to hold all its children.
</DD>
</DL>
<DL><DT><A NAME="-constrainedheight"><B>-constrainedheight</B></A></DT>
<DD>
Specifies whether or not the scrollable area should have the same height of the
scrolled window. If true, vertical scrollbar is not needed.
</DD>
</DL>
<DL><DT><A NAME="-constrainedwidth"><B>-constrainedwidth</B></A></DT>
<DD>
Specifies whether or not the scrollable area should have the same width of the
scrolled window. If true, horizontal scrollbar is not needed.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the window in pixels.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the window in pixels.
</DD>
</DL>
<DL><DT><A NAME="-xscrollincrement"><B>-xscrollincrement</B></A></DT>
<DD>
See <B>xscrollincrement</B> option of <B>canvas</B> widget.
</DD>
</DL>
<DL><DT><A NAME="-yscrollincrement"><B>-yscrollincrement</B></A></DT>
<DD>
See <B>yscrollincrement</B> option of <B>canvas</B> widget.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Return the pathname of the scrolled frame where widget should be created.
</DD></DL>
<DL><DT><A NAME="see"><I>pathName</I> <B>see</B></A>
<I>widget</I>
?<I>vert</I>?
?<I>horz</I>?
</DT><DD>
Arrange scrollable area to make <I>widget</I> visible in the window.
<I>vert</I> and <I>horz</I> specify which part of <I>widget</I> must be preferably
visible, in case where <I>widget</I> is too tall or too large to be entirely visible.
<I>vert</I> must be <B>top</B> (the default) or <B>bottom</B>,
and <I>horz</I> must be <B>left</B> (the default) or <B>right</B>.
If <I>vert</I> or <I>horz</I> is not a valid value, area is not scrolled in this direction.
</DD></DL>
<DL><DT><A NAME="xview"><I>pathName</I> <B>xview</B></A>
?<I>arg...</I>?
</DT><DD>
Standard command to enable horizontal scrolling of <I>pathName</I>.
</DD></DL>
<DL><DT><A NAME="yview"><I>pathName</I> <B>yview</B></A>
?<I>arg...</I>?
</DT><DD>
Standard command to enable vertical scrolling of <I>pathName</I>.
</DD></DL>
</BODY></HTML>

160
lib/bwidget/BWman/ScrolledWindow.html

@ -0,0 +1,160 @@ @@ -0,0 +1,160 @@
<HTML>
<HEAD><TITLE>ScrolledWindow</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>ScrolledWindow</B>
- Generic scrolled widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>ScrolledWindow</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DT><I>Not themed</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
</TABLE></DD>
<DT><I>Themed</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;(<B>-bg</B> has no effect)</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-auto">-auto</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-ipad">-ipad</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-managed">-managed</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-scrollbar">-scrollbar</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-sides">-sides</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-size">-size</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#setwidget"><B>setwidget</B></A>
<I>widget</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
ScrolledWindow enables user to create easily a widget with its scrollbar.
Scrollbars are created by ScrolledWindow and scroll commands are automatically associated to
a scrollable widget with <B>ScrolledWindow::setwidget</B>.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-auto"><B>-auto</B></A></DT>
<DD>
Specifies the desired auto managed scrollbar:
<LI><B>none</B> means scrollbar are always drawn
<LI><B>horizontal</B> means horizontal scrollbar is drawn as needed
<LI><B>vertical</B> means vertical scrollbar is drawn as needed
<LI><B>both</B> means horizontal and vertical scrollbars are drawn as needed (default value)
</DD>
</DL>
<DL><DT><A NAME="-ipad"><B>-ipad (read-only)</B></A></DT>
<DD>
Padding in pixels between client widget and scrollbars.
Default value: <B>1</B>.
</DD>
</DL>
<DL><DT><A NAME="-managed"><B>-managed (read-only)</B></A></DT>
<DD>
If true, scrollbar are managed during creation, so their size are included in the requested size of the
ScrolledWindow. If false, they are not.
Default value: <B>true</B>.
</DD>
</DL>
<DL><DT><A NAME="-scrollbar"><B>-scrollbar</B></A></DT>
<DD>
Specifies the desired scrollbar: <B>none</B>, <B>horizontal</B>, <B>vertical</B>
or <B>both</B> (default value).
</DD>
</DL>
<DL><DT><A NAME="-sides"><B>-sides (read-only)</B></A></DT>
<DD>
Side of the scrollbars.
Possible values are: <B>ne</B>, <B>en</B>, <B>nw</B>, <B>wn</B>, <B>se</B> (default value), <B>es</B>, <B>sw</B>, <B>ws</B>.
</DD>
</DL>
<DL><DT><A NAME="-size"><B>-size (read-only)</B></A></DT>
<DD>
Size of the scrollbars in pixels.
Use </B>0</B> for standard size (default value).<BR>
This option has no effect if widget is <I>themed</I>.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Return the pathname of the frame where the scrolled widget should be created. This command
is no longer needed. You can directly create the scrolled widget as the child
of <I>pathName</I>.
</DD></DL>
<DL><DT><A NAME="setwidget"><I>pathName</I> <B>setwidget</B></A>
<I>widget</I>
</DT><DD>
Associate <I>widget</I> to the the scrollbars. <I>widget</I> becomes
managed by the ScrolledWindow. The user should not attempt to manage
<I>widget</I> until it is no longer managed by the ScrolledWindow.
<I>widget</I> must be a scrollable widget, i.e. have the options
<B>xscrollcommand</B>/<B>yscrollcommand</B> and the command <B>xview</B>/<B>yview</B>,
such as canvas or text.
</DD></DL>
</BODY></HTML>

164
lib/bwidget/BWman/SelectColor.html

@ -0,0 +1,164 @@ @@ -0,0 +1,164 @@
<HTML>
<HEAD><TITLE>SelectColor</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>SelectColor</B>
- Color selection widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>SelectColor</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-color">-color</A></td>
<TD>&nbsp;&nbsp;<A HREF="#-parent">-parent</A></td>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-placement">-placement</A></td>
<TD>&nbsp;&nbsp;<A HREF="#-title">-title</A></td>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-type">-type</A></td>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD>SelectColor::<A HREF="#dialog"><B>dialog</B></A>
<I>pathName</I>
<I>?option value ...?</I>
</DD>
<DD>SelectColor::<A HREF="#menu"><B>menu</B></A>
<I>pathName</I>
<I>placement</I>
<I>?option value ...?</I>
</DD>
<DD>SelectColor::<A HREF="#setcolor"><B>setcolor</B></A>
<I>index</I>
<I>color</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
SelectColor provides a simple way to select color. It can be displayed
as a dialog box or as a menubutton.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-color"><B>-color</B></A></DT>
<DD>
Specifies the color value of the widget.
</DD>
</DL>
<DL><DT><A NAME="-parent"><B>-parent</B></A></DT>
<DD>
Parent of the Dialog. Dialog is centered in its parent. If empty, it is centered in
root window.
</DD>
</DL>
<DL><DT><A NAME="-placement"><B>-placement</B></A></DT>
<DD>
Where to place the <i>popup</i> color dialog when displaying it.
Must be any of: <b>at</b>, <b>center</b>, <b>left</b>,
<b>right</b>, <b>above</b>, or <b>below</b>. If <i>-parent</i> is specified,
placement will be in relation to the parent widget.
</DD>
</DL>
<DL><DT><A NAME="-title"><B>-title</B></A></DT>
<DD>
Title of the Dialog toplevel.
</DD>
</DL>
<DL><DT><A NAME="-type"><B>-type (read-only)</B></A></DT>
<DD>
Specifies the type of the SelectColor widget. Must be <B>dialog</B> or
<B>popup</B>. <BR>If <B>type</B> option is <I>dialog</I>,
SelectColor::<B>create</B> directly creates the dialog, displays it and
return an empty string if cancel button is pressed or if dialog is destroyed,
and the selected color if ok button is pressed. In all cases, dialog is
destroyed. <BR>If <B>type</B> option is <I>popup</I>,
SelectColor::<B>create</B> creates a small, popup dialog with a small set of
predefined colors and a button to activate a full color dialog.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="dialog">SelectColor::<B>dialog</B></A>
<I>pathName</I>
<I>?option value ...?</I>
</DT><DD>
Creates a dialog for the user to select a custom color.
</DD></DL>
<DL><DT><A NAME="dialog">SelectColor::<B>menu</B></A>
<I>pathName</I>
<I>placement</I>
<I>?option value ...?</I>
</DT><DD>
Creates a small, popup dialog for the user to select from a predefined list
of colors with an additional button to display a full color dialog.
<p>
<i>placement</i> can be any of <b>at</b>, <b>center</b>, <b>left</b>,
<b>right</b>, <b>above</b>, or <b>below</b>. If <i>-parent</i> is specified,
placement will be in relation to the parent widget.
</p>
</DD></DL>
</DD></DL>
<DL><DT><A NAME="setcolor">SelectColor::<B>setcolor</B></A>
<I>index</I>
<I>color</I>
</DT><DD>
Set the value of user predefined color at index <I>index</I> to <I>color</I>.
<I>index</I> must be between 0 and 10.
</DD></DL>
</BODY></HTML>

152
lib/bwidget/BWman/SelectFont.html

@ -0,0 +1,152 @@ @@ -0,0 +1,152 @@
<HTML>
<HEAD><TITLE>SelectFont</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>SelectFont</B>
- Font selection widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>SelectFont</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-command">-command</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-initialcolor">-initialcolor</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-nosizes">-nosizes</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-parent">-parent</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-sampletext">-sampletext</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-title">-title</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-type">-type</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD>SelectFont::<A HREF="#loadfont"><B>loadfont</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
SelectFont provides a simple way to choose font. It can be displayed
as a dialog box or as a toolbar.
<BR>Textual items in Dialog box uses <B>-name</B> options so they
can be translated to any language. Symbolic name used are
<B>ok</B>, <B>cancel</B>, <B>font</B>, <B>size</B>, <B>style</B>,
<B>bold</B>, <B>italic</B>, <B>underline</B> and <B>overstrike</B>.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-command"><B>-command</B></A></DT>
<DD>
Specifies a command to call when user select a new font when SelectFont <B>type</B>
option is <I>toolbar</I>.
</DD>
</DL>
<DL><DT><A NAME="-initialcolor"><B>-initialcolor</B></A></DT>
<DD>
If specified, add an additional button that lets the user pick a
color. This option is ignored if <B>type</B> is <I>toolbar</I>.
</DD>
</DL>
<DL><DT><A NAME="-nosizes"><B>-nosizes</B></A></DT>
<DD>
If true, don't show the listbox containing valid font sizes. This
option is ignored if <B>type</B> is <I>toolbar</I>.
</DD>
</DL>
<DL><DT><A NAME="-parent"><B>-parent</B></A></DT>
<DD>
Parent of the Dialog. Dialog is centered in its parent. If empty, it is centered in
root window.
</DD>
</DL>
<DL><DT><A NAME="-sampletext"><B>-sampletext</B></A></DT>
<DD>
Specifies the text displayed in the preview area.
</DD>
</DL>
<DL><DT><A NAME="-title"><B>-title</B></A></DT>
<DD>
Title of the Dialog toplevel.
</DD>
</DL>
<DL><DT><A NAME="-type"><B>-type</B></A></DT>
<DD>
Specifies the type of the SelectFont widget. Must be <B>dialog</B> or <B>toolbar</B>.
<BR>If <B>type</B> option is <I>dialog</I>, SelectFont::<B>create</B> directly creates the
dialog, displays it and return an empty string if cancel button is
pressed or if dialog is destroyed, and the selected font (and color
if <B>initialcolor</B>) if ok button is pressed. In all cases, dialog
is destroyed.
<BR>If <B>type</B> option is <I>toolbar</I>, SelectFont::<B>create</B> returns the pathname
of the widget created.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="loadfont">SelectFont::<B>loadfont</B></A>
</DT><DD>
Load the font available in the system.
</DD></DL>
</BODY></HTML>

77
lib/bwidget/BWman/Separator.html

@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
<HTML>
<HEAD><TITLE>Separator</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>Separator</B>
- 3D separator widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>Separator</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-orient">-orient</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-relief">-relief</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
Separator is a widget that display an horizontal or vertical 3-D line.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-relief"><B>-relief</B></A></DT>
<DD>
Specifies the relief of the Separator. Must be <B>groove</B> (the default) or <B>ridge</B>.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
</BODY></HTML>

250
lib/bwidget/BWman/SpinBox.html

@ -0,0 +1,250 @@ @@ -0,0 +1,250 @@
<HTML>
<HEAD><TITLE>SpinBox</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>SpinBox</B>
- SpinBox widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>SpinBox</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I><A HREF="ArrowButton.html">OPTIONS from <B>ArrowButton</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-background or -bg</TD>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-foreground or -fg</TD>
<TD>&nbsp;&nbsp;-repeatdelay</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-repeatinterval</TD>
<TD>&nbsp;&nbsp;-state</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="Entry.html">OPTIONS from <B>Entry</B></A></I></DT>
<DD><TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;-command</TD>
<TD>&nbsp;&nbsp;-disabledforeground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dragenabled</TD>
<TD>&nbsp;&nbsp;-dragendcmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dragevent</TD>
<TD>&nbsp;&nbsp;-draginitcmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dragtype</TD>
<TD>&nbsp;&nbsp;-dropcmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-dropenabled</TD>
<TD>&nbsp;&nbsp;-dropovercmd</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-droptypes</TD>
<TD>&nbsp;&nbsp;-editable</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-entrybg (see <B>-background</B>)</TD>
<TD>&nbsp;&nbsp;-entryfg (see <B>-foreground</B>)</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-exportselection</TD>
<TD>&nbsp;&nbsp;-font</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helptext</TD>
<TD>&nbsp;&nbsp;-helptype</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-helpvar</TD>
<TD>&nbsp;&nbsp;-highlightbackground</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-highlightcolor</TD>
<TD>&nbsp;&nbsp;-highlightthickness</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertbackground</TD>
<TD>&nbsp;&nbsp;-insertborderwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertofftime</TD>
<TD>&nbsp;&nbsp;-insertontime</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-insertwidth</TD>
<TD>&nbsp;&nbsp;-justify</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-selectbackground</TD>
<TD>&nbsp;&nbsp;-selectborderwidth</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-selectforeground</TD>
<TD>&nbsp;&nbsp;-show</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-state</TD>
<TD>&nbsp;&nbsp;-takefocus</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-text</TD>
<TD>&nbsp;&nbsp;-textvariable</TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;-width</TD>
<TD>&nbsp;&nbsp;-xscrollcommand</TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-modifycmd">-modifycmd</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-range">-range</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-values">-values</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#bind"><B>bind</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#getvalue"><B>getvalue</B></A>
</DD>
<DD><I>pathName</I> <A HREF="#setvalue"><B>setvalue</B></A>
<I>index</I>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
SpinBox widget enables the user to select a value among a list given by the <B>values</B>
option or a set of values defined by a mininum, a maximum and an increment.
Notice that <B>range</B> option defines a list of values, so <B>getvalue</B> and
<B>setvalue</B> work with both values and range.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-modifycmd"><B>-modifycmd</B></A></DT>
<DD>
Specifies a Tcl command called when the user modify the value of the SpinBox.
</DD>
</DL>
<DL><DT><A NAME="-range"><B>-range</B></A></DT>
<DD>
Specifies a list of three intergers (or real) describing the minimum, maximum and increment
of the SpinBox.
</DD>
</DL>
<DL><DT><A NAME="-values"><B>-values</B></A></DT>
<DD>
Specifies the values accepted by the SpinBox. This option takes precedence over
<B>range</B> option.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="bind"><I>pathName</I> <B>bind</B></A>
?<I>arg...</I>?
</DT><DD>
Set bindings on the entry widget.
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="getvalue"><I>pathName</I> <B>getvalue</B></A>
</DT><DD>
Returns the index of the current text of the SpinBox in the list of values,
or -1 if it doesn't match any value.
</DD></DL>
<DL><DT><A NAME="setvalue"><I>pathName</I> <B>setvalue</B></A>
<I>index</I>
</DT><DD>
Set the text of the SpinBox to the value indicated by <I>index</I> in the list of values.
<I>index</I> may be specified in any of the following forms:
<P>
<DL COMPACT>
<DT>
<B>last</B>
<DD>
Specifies the last element of the list of values.
<DT><B>first</B>
<DD>
Specifies the first element of the list of values.
<DT>
<B>next</B>
<DD>
Specifies the element following the current (ie returned by <B>getvalue</B>) in the list
of values.
<DT><B>previous</B>
<DD>
Specifies the element preceding the current (ie returned by <B>getvalue</B>) in the list
of values.
<DT>
@<I>number</I>
<DD>
Specifies the integer index in the list of values.
</DL>
</DD></DL>
<HR><BR><B>BINDINGS</B><BR><BR>
When Entry of the SpinBox has the input focus, it has the following bindings, in addition
to the default Entry bindings:
<UL>
<LI>Page up set the value of the SpinBox to the last value.
<LI>Page down set the value of the SpinBox to the first value.
<LI>Arrow up set the value of the SpinBox to the next value.
<LI>Arrow down set the value of the SpinBox to the previous value.
</UL>
</BODY></HTML>

147
lib/bwidget/BWman/StatusBar.html

@ -0,0 +1,147 @@ @@ -0,0 +1,147 @@
<HTML>
<HEAD><TITLE>StatusBar</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>StatusBar</B>
- status bar widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>StatusBar</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-orient">-orient</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-troughcolor">-troughcolor</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-showresize">-showresize</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-ipad">-ipad</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-pad">-pad</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
StatusBar widget is a simple container widget with a corner resize control,
meant to be placed at the bottom of a toplevel dialog.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the widget.
</DD>
</DL>
<DL><DT><A NAME="-showresize"><B>-showresize</B></A></DT>
<DD>
Specifies whether to show the corner resize control.
</DD>
</DL>
<DL><DT><A NAME="-pad"><B>-pad</B></A></DT>
<DD>
The spacing to place around the status bar.
</DD>
</DL>
<DL><DT><A NAME="-ipad"><B>-ipad</B></A></DT>
<DD>
The spacing to place around individual status bar items.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the widget.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="add"><I>pathName</I> <B>add</B></A> <B>widget</B>
?<I>option</I> <I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Add a widget to the status bar. Possible options are:
<DL>
<DT><B>-weight</B></DT>
<DD>Weighting of this item for resizing (passed to <B>grid</B>).</DD>
<DT><B>-separator</B></DT>
<DD>Whether to use a separator for this item.</DD>
<DT><B>-sticky</B></DT>
<DD>Passed on to grid.</DD>
<DT><B>-pad</B></DT>
<DD>Override of the widget's <B>-ipad</B> option for this item.</DD>
</DL>
</DD>
</DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD>
</DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no
<I>option</I> is specified, returns a list describing all of the available
options for <I>pathName</I>. If <I>option</I> is specified with no
<I>value</I>, then the command returns a list describing the one named
<I>option</I> (this list will be identical to the corresponding sublist of
the value returned if no <I>option</I> is specified). If one or more
<I>option-value</I> pairs are specified, then the command modifies the
given widget option(s) to have the given value(s); in this case the command
returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD>
</DL>
<DL><DT><A NAME="delete"><I>pathName</I> <B>delete</B></A>
<B>widget</B> ?<I>widget</I> ...?
</DT><DD>
Delete a widget and associated state from the status bar.</DD>
</DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Get the frame widget for the status bar in which status bar items should be
created.</DD>
</DD>
</DL>
<DL><DT><A NAME="items"><I>pathName</I> <B>items</B></A>
</DT><DD>List of items in the status bar.</DD>
<DL>
</BODY></HTML>

107
lib/bwidget/BWman/TitleFrame.html

@ -0,0 +1,107 @@ @@ -0,0 +1,107 @@
<HTML>
<HEAD><TITLE>TitleFrame</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>TitleFrame</B>
- Frame with a title
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>TitleFrame</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-font">-font</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-foreground">-foreground or -fg</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-text">-text</A></TR>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-baseline">-baseline</A></TR>
<TD>&nbsp;&nbsp;<A HREF="#-ipad">-ipad</A></TR>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-side">-side</A></TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#getframe"><B>getframe</B></A>
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
TitleFrame enables user to create a frame with a title like XmFrame Motif widget.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-baseline"><B>-baseline</B></A></DT>
<DD>
Specifies the vertical alignment of the title: <B>top</B>, <B>center</B> or <B>bottom</B>.
</DD>
</DL>
<DL><DT><A NAME="-ipad"><B>-ipad</B></A></DT>
<DD>
Specifies a pad between the border of the frame and the user frame.
The value is in screen units.
</DD>
</DL>
<DL><DT><A NAME="-side"><B>-side</B></A></DT>
<DD>
Specifies the horizontal alignment of the title: <B>left</B>, <B>center</B> or <B>right</B>.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is specified,
returns a list describing all of the available options for <I>pathName</I>.
If <I>option</I> is specified with no <I>value</I>, then the command returns a list
describing the one named <I>option</I> (this list will be identical to the corresponding
sublist of the value returned if no <I>option</I> is specified). If one or
more <I>option-value</I> pairs are specified, then the command modifies the given widget
option(s) to have the given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="getframe"><I>pathName</I> <B>getframe</B></A>
</DT><DD>
Return the frame where the user can create any other widget.
</DD></DL>
</BODY></HTML>

937
lib/bwidget/BWman/Tree.html

@ -0,0 +1,937 @@ @@ -0,0 +1,937 @@
<HTML>
<HEAD><TITLE>Tree</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>Tree</B>
- Tree widget
</DD></DL>
<DL>
<DT><I>CREATION</I></DT>
<DD><A HREF="#descr"><B>Tree</B></A> <I>pathName</I> ?<I>option value...</I>?</DD>
</DL>
<DL>
<DT><I>STANDARD OPTIONS</I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-background">-background or -bg</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-borderwidth">-borderwidth or -bd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-cursor">-cursor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightbackground">-highlightbackground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightcolor">-highlightcolor</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-highlightthickness">-highlightthickness</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-relief">-relief</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-selectbackground">-selectbackground</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-selectforeground">-selectforeground</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-takefocus">-takefocus</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-xscrollcommand">-xscrollcommand</A></TD>
<TD>&nbsp;&nbsp;<A HREF="options.htm#M-yscrollcommand">-yscrollcommand</A></TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wso">WIDGET-SPECIFIC OPTIONS</A></I></DT>
<DD><TABLE CELLSPACING=0 CELLSPACING=0 BORDER=0>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-closecmd">-closecmd</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-crossfill">-crossfill</A></TD>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-crossclosebitmap">-crossclosebitmap</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-crosscloseimage">-crosscloseimage</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-crossopenbitmap">-crossopenbitmap</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-crossopenimage">-crossopenimage</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-deltax">-deltax</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-deltay">-deltay</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragenabled">-dragenabled</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dragendcmd">-dragendcmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragevent">-dragevent</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-draginitcmd">-draginitcmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dragtype">-dragtype</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dropcmd">-dropcmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropenabled">-dropenabled</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-dropovercmd">-dropovercmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-dropovermode">-dropovermode</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-droptypes">-droptypes</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-height">-height</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-linesfill">-linesfill</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-linestipple">-linestipple</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-opencmd">-opencmd</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-padx">-padx</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-redraw">-redraw</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-selectcommand">-selectcommand</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-selectfill">-selectfill</A></TD>
</TR>
<TR>
<TD>&nbsp;&nbsp;<A HREF="#-showlines">-showlines</A></TD>
<TD>&nbsp;&nbsp;<A HREF="#-width">-width</A></TD>
</TR>
</TABLE></DD>
</DL>
<DL>
<DT><I><A HREF="#wc">WIDGET COMMAND</A></I></DT>
<DD><I>pathName</I> <A HREF="#bindArea"><B>bindArea</B></A>
<I>event</I>
<I>script</I>
</DD>
<DD><I>pathName</I> <A HREF="#bindImage"><B>bindImage</B></A>
<I>event</I>
<I>script</I>
</DD>
<DD><I>pathName</I> <A HREF="#bindText"><B>bindText</B></A>
<I>event</I>
<I>script</I>
</DD>
<DD><I>pathName</I> <A HREF="#cget"><B>cget</B></A>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#closetree"><B>closetree</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#configure"><B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#delete"><B>delete</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#edit"><B>edit</B></A>
<I>node</I>
<I>text</I>
?<I>verifycmd</I>?
?<I>clickres</I>?
?<I>select</I>?
</DD>
<DD><I>pathName</I> <A HREF="#exists"><B>exists</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#find"><B>find</B></A>
<I>findinfo</I>
?<I>confine</I>?
</DD>
<DD><I>pathName</I> <A HREF="#index"><B>index</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#insert"><B>insert</B></A>
<I>index</I>
<I>parent</I>
<I>node</I>
?<I>option value...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#itemcget"><B>itemcget</B></A>
<I>node</I>
<I>option</I>
</DD>
<DD><I>pathName</I> <A HREF="#itemconfigure"><B>itemconfigure</B></A>
<I>node</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DD>
<DD><I>pathName</I> <A HREF="#line"><B>line</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#move"><B>move</B></A>
<I>parent</I>
<I>node</I>
<I>index</I>
</DD>
<DD><I>pathName</I> <A HREF="#nodes"><B>nodes</B></A>
<I>node</I>
?<I>first</I>?
?<I>last</I>?
</DD>
<DD><I>pathName</I> <A HREF="#opentree"><B>opentree</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#parent"><B>parent</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#reorder"><B>reorder</B></A>
<I>node</I>
<I>neworder</I>
</DD>
<DD><I>pathName</I> <A HREF="#see"><B>see</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#selection"><B>selection</B></A>
<I>cmd</I>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#toggle"><B>toggle</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#visible"><B>visible</B></A>
<I>node</I>
</DD>
<DD><I>pathName</I> <A HREF="#xview"><B>xview</B></A>
?<I>arg...</I>?
</DD>
<DD><I>pathName</I> <A HREF="#yview"><B>yview</B></A>
?<I>arg...</I>?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
<B>Tree</B> widget uses canvas to display a hierarchical list of items (called nodes).
Each node is composed of a label with its own font and foreground attributes, and an optional
image or window. Each node can have a list of subnodes, which can be collapsed or expanded.
Each node is drawn in a single line, whose height is defined by the
<B>deltay</B> option, so they must have at most this height.
A node is uniquely identified by a string given at creation (by the
<B>insert</B> command). The node named <I>root</I> is the root of
the tree and is not drawn.
The tree structure is directly maintained by the widget.
</P>
<BR><HR WIDTH="50%"><BR>
<B><A NAME="wso">WIDGET-SPECIFIC OPTIONS</A></B><BR>
<DL><DT><A NAME="-closecmd"><B>-closecmd</B></A></DT>
<DD>
Specifies a command to be called when user close a node. The
closed node is appended to the command.
</DD>
</DL>
<DL>
<DT><A NAME="-crossfill"><B>-crossfill</B></A></DT>
<DD>
Specifies a foreground color for the cross bitmap.
</DD>
</DL>
<DL><DT><A NAME="-crossclosebitmap"><B>-crossclosebitmap</B></A></DT>
<DD>
Specifies a bitmap to be displayed in place of the standard cross
when a node is closed.
</DD>
</DL>
<DL><DT><A NAME="-crosscloseimage"><B>-crosscloseimage</B></A></DT>
<DD>
Specifies an image to be displayed in place of the standard cross
when a node is closed. Overrides the -crossclosebitmap option.
</DD>
</DL>
<DL><DT><A NAME="-crossopenbitmap"><B>-crossopenbitmap</B></A></DT>
<DD>
Specifies a bitmap to be displayed in place of the standard cross
when a node is open.
</DD>
</DL>
<DL><DT><A NAME="-crossopenimage"><B>-crossopenimage</B></A></DT>
<DD>
Specifies an image to be displayed in place of the standard cross
when a node is open. Overrides the -crossopenbitmap option.
</DD>
</DL>
<DL><DT><A NAME="-deltax"><B>-deltax</B></A></DT>
<DD>
Specifies horizontal indentation between a node and its children.
</DD>
</DL>
<DL><DT><A NAME="-deltay"><B>-deltay</B></A></DT>
<DD>
Specifies vertical size of the nodes.
</DD>
</DL>
<DL><DT><A NAME="-dragenabled"><B>-dragenabled</B></A></DT>
<DD>
A boolean specifying if drag is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dragendcmd"><B>-dragendcmd</B></A></DT>
<DD>
Specifies a command to be called when drag ended.
<B>dragendcmd</B> must be a command conforming to the description of the
option <B>dragendcmd</B> of <B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
</DD>
</DL>
<DL><DT><A NAME="-dragevent"><B>-dragevent</B></A></DT>
<DD>
Specifies the number of the mouse button associated to the drag.
Must be <B>1</B>, <B>2</B> or <B>3</B>.
</DD>
</DL>
<DL><DT><A NAME="-draginitcmd"><B>-draginitcmd</B></A></DT>
<DD>
Tree has a command wrapper for <I>drag-init</I> events. This command refused the drag
if no node is designated. In other cases:
<BR>If <B>draginitcmd</B> is empty, it returns:
<UL>
<LI>the value of option <B>dragtype</B> or <I>TREE_NODE</I> if empty as the data type,
<LI><I>{copy move link}</I> as the operations,
<LI>the node identifier as the data.
</UL>
If <B>draginitcmd</B> is not empty, it is called with the following arguments:
<UL>
<LI>the pathname of the tree,
<LI>the identifier of the dragged node,
<LI>the toplevel created to represent dragged data.
</UL>
and must return a value conforming to <B>draginitcmd</B> option described in
<B>DragSite::<A HREF="DragSite.html#register">register</A></B>.
</DD>
</DL>
<DL><DT><A NAME="-dragtype"><B>-dragtype</B></A></DT>
<DD>
Specifies an alternate type of dragged object.
</DD>
</DL>
<DL><DT><A NAME="-dropcmd"><B>-dropcmd</B></A></DT>
<DD>
Tree has a command wrapper for <I>drop</I> events. This command stops auto scrolling
and extract node and position.
<BR>If <B>dropcmd</B> is not empty, it is called with the following arguments:
<UL>
<LI>the pathname of the tree,
<LI>the pathname of the drag source,
<LI>a list describing where the drop occurs. It can be:
<UL>
<LI><I>{</I><B>widget</B><I>}</I>,
<LI><I>{</I><B>node</B> <I>node}</I> or
<LI><I>{</I><B>position</B> <I>node index}</I>.
</UL>
<LI>the current operation,
<LI>the data type,
<LI>the data.
</UL>
</DD>
</DL>
<DL><DT><A NAME="-dropenabled"><B>-dropenabled</B></A></DT>
<DD>
A boolean specifying if drop is enabled.
</DD>
</DL>
<DL><DT><A NAME="-dropovercmd"><B>-dropovercmd</B></A></DT>
<DD>
Tree has a command wrapper for <I>drag-over</I> events. This command enables auto scrolling
and position extraction during the <I>drag-over</I>.
If <B>dropovercmd</B> is not empty, the command is called with the following aguments:
<UL>
<LI>the pathname of the tree,
<LI>the pathname of the drag source,
<LI>a list describing where the drop can occur, whose elements are:
<UL>
<LI>the string <I>widget</I> if <B>dropovertype</B> option contains <I>w</I>, else empty string.
<LI>the targeted node if drag icon points a node and <B>dropovertype</B> option contains <I>n</I>, else empty string.
<LI>a list containing a node and the position within the children of the node where drag
icon points to if <B>dropovertype</B> option contains <I>p</I>, else empty string.
<LI>optionally, the preferred method if drop can occur both inside a node and between two
nodes. The value is <I>position</I> or <I>node</I>.
</UL>
<LI>the current operation,
<LI>the data type,
<LI>the data.
</UL>
The command must return a list with two elements:
<UL>
<LI>the drop status, conforming to those described in <B>dropovercmd</B> option of
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>,
<LI>the choosen method: <I>widget</I>, <I>node</I> or <I>position</I>.
</UL>
</DD>
</DL>
<DL><DT><A NAME="-dropovermode"><B>-dropovermode</B></A></DT>
<DD>
Specifies the type of <I>drop-over</I> interaction. Must be a combination of
<B>w</B>, which specifies that drop can occurs everywhere on widget,
<B>p</B>, which specifies that drop can occurs between two nodes,
and <B>n</B>, which specifies that drop occurs inside nodes.
</DD>
</DL>
<DL><DT><A NAME="-droptypes"><B>-droptypes</B></A></DT>
<DD>
Specifies a list of accepted dropped object/operation.
See option <B>droptypes</B> of
<B>DropSite::<A HREF="DropSite.html#register">register</A></B>.
for more infromation.
<BR>Default is <I>TREE_NODE</I> with operations <B>copy</B> and <B>move</B>.
</DD>
</DL>
<DL><DT><A NAME="-height"><B>-height</B></A></DT>
<DD>
Specifies the desired height for the tree in units of <B>deltay</B> pixels.
</DD>
</DL>
<DL><DT><A NAME="-linesfill"><B>-linesfill</B></A></DT>
<DD>
Specifies a foreground color for the lines between nodes.
</DD>
</DL>
<DL><DT><A NAME="-linestipple"><B>-linestipple</B></A></DT>
<DD>
Specifies a stipple bitmap for the lines between nodes.
</DD>
</DL>
<DL><DT><A NAME="-opencmd"><B>-opencmd</B></A></DT>
<DD>
Specifies a command to be called when the user opens a node. The name
of the opened node is appended to the command.
</DD>
</DL>
<DL><DT><A NAME="-padx"><B>-padx</B></A></DT>
<DD>
Specifies distance between image or window and text of the nodes.
</DD>
</DL>
<DL><DT><A NAME="-redraw"><B>-redraw</B></A></DT>
<DD>
Specifies wether or not the tree should be redrawn when entering idle.
Set it to false if you call <B>update</B> while modifying the tree.
</DD>
</DL>
<DL><DT><A NAME="-selectcommand"><B>-selectcommand</B></A></DT>
<DD>
Specifies a command to be called when the selection is changed. The
path of the tree widget and the selected nodes are appended to the
command.
</DD>
</DL>
<DL><DT><A NAME="-selectfill"><B>-selectfill</B></A></DT>
<DD>
If true, the selection box will be drawn across the entire tree from
left-to-right instead of just around the item text.
</DD>
</DL>
<DL><DT><A NAME="-showlines"><B>-showlines</B></A></DT>
<DD>
Specifies whether or not lines should be drawn between nodes.
</DD>
</DL>
<DL><DT><A NAME="-width"><B>-width</B></A></DT>
<DD>
Specifies the desired width for the tree in units of 8 pixels.
</DD>
</DL>
<HR WIDTH="50%"><BR>
<B><A NAME="nodes">NODE NAMES</A></B><BR>
<p>
Certain special characters in node names are automatically substituted
by the tree during operation. These characters are <b>&amp; | ^ !</b>.
They are all substituted with a <b>_</b> character. This is only to
avoid errors because the characters are special to the tree widget.
</p>
<B><A NAME="wc">WIDGET COMMAND</A></B><BR>
<DL><DT><A NAME="bindArea"><I>pathName</I> <B>bindArea</B></A>
<I>event</I>
<I>script</I>
</DT><DD>
This command associates a command to execute whenever the event
sequence given by <I>event</I> occurs anywhere within the Tree area.
</DD></DL>
<DL><DT><A NAME="bindImage"><I>pathName</I> <B>bindImage</B></A>
<I>event</I>
<I>script</I>
</DT><DD>
This command associates a command to execute whenever the event
sequence given by <I>event</I> occurs on the image of a node.
The node idenfier on which the event occurs is appended to the command and may be used to manipulate the tree (e.g. don't use <B>%W</B>).
<P>
If <B>-selectfill</B> is given, an eventual binding of the background box by <B>bindText</B> is overwritten.
</P>
</DD></DL>
<DL><DT><A NAME="bindText"><I>pathName</I> <B>bindText</B></A>
<I>event</I>
<I>script</I>
</DT><DD>
This command associates a command to execute whenever the event
sequence given by <I>event</I> occurs on the label of a node.
The node idenfier on which the event occurs is appended to the command and may be used to manipulate the tree (e.g. don't use <B>%W</B>).
<P>
If <B>-selectfill</B> is given, an eventual binding of the background box by <B>bindImage</B> is overwritten.
</P>
</DD></DL>
<DL><DT><A NAME="cget"><I>pathName</I> <B>cget</B></A>
<I>option</I>
</DT><DD>
Returns the current value of the configuration option given by <I>option</I>.
<I>Option</I> may have any of the values accepted by the creation command.
</DD></DL>
<DL><DT><A NAME="closetree"><I>pathName</I> <B>closetree</B></A> <I>node</I>
?<I>recurse</I>?
</DT><DD>
This command close all the subtree given by <I>node</I>. Recurse
through the tree starting at <I>node</I> and set <B>open</B> option to 0
depending on <I>recurse</I>. Default value of <I>recurse</I> is <I>true</I>.
</DD></DL>
<DL><DT><A NAME="configure"><I>pathName</I> <B>configure</B></A>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
Query or modify the configuration options of the widget. If no <I>option</I> is
specified, returns a list describing all of the available options for
<I>pathName</I>. If <I>option</I> is specified with no <I>value</I>, then the
command returns a list describing the one named <I>option</I> (this list will
be identical to the corresponding sublist of the value returned if no
<I>option</I> is specified). If one or more <I>option-value</I> pairs are
specified, then the command modifies the given widget option(s) to have the
given value(s); in this case the command returns an empty string.
<I>Option</I> may have any of the values accepted by the creation command.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="delete"><I>pathName</I> <B>delete</B></A>
?<I>arg...</I>?
</DT><DD>
Deletes all nodes (and children of them) in <I>arg</I>. <I>arg</I> can be a list
of nodes or a list of list of nodes.
To delete all the tree, do <I>$pathName delete [$pathName nodes root]</I>.
</DD></DL>
<DL><DT><A NAME="edit"><I>pathName</I> <B>edit</B></A>
<I>node</I>
<I>text</I>
?<I>verifycmd</I>?
?<I>clickres</I>?
?<I>select</I>?
</DT><DD>
Provides a way for the user to edit in place the label of a node. This is
possible only if <I>node</I> is visible (all its parents are open).
<BR>The command takes the initial text as argument and does not modify the label of the
edited node, but returns an empty string if edition is canceled, or the typed text
if edition is accepted.
<BR>When editing, the user can cancel by pressing Escape, or accept by pressing Return.
<BR><I>clickres</I> specifies what to do if the user click outside the editable area.
If <I>clickres</I> is 0 (the default), the edition is canceled.
If <I>clickres</I> is 1, the edition is accepted.
In all other case, the edition continues.
<BR>If edition is accepted and <I>modifycmd</I> is not empty, then it is called with
the new text as argument and must return 1 to accept the new text, 0 to refuse it
and continue edition.
<BR><I>select</I> specifies wether or not the initial text should be selected. Default is 1.
</DD></DL>
<DL><DT><A NAME="exists"><I>pathName</I> <B>exists</B></A>
<I>node</I>
</DT><DD>
Returns whether or not <I>node</I> exists in the tree.
</DD></DL>
<DL><DT><A NAME="find"><I>pathName</I> <B>find</B></A>
<I>findinfo</I>
?<I>confine</I>?
</DT><DD>
<p>
Returns the node given by the position <I>findinfo</I>.
<I>findinfo</I> can take the form of a pixel position <I>@x,y</I> or
of the line number of a currently visible Tree node. The first line
of the Tree has the value of zero.
</p>
<p>
If <I>confine</I> is non-empty, then confine <I>findinfo</I> to only
match pixel positions for the area consumed by Tree labels, not just
anywhere on their lines. (<I>confine</I> has no effect if
<I>findinfo</I> is a line number.)
</p>
</DD></DL>
<DL><DT><A NAME="index"><I>pathName</I> <B>index</B></A>
<I>node</I>
</DT><DD>
Returns the position of <I>node</I> in its parent.
</DD></DL>
<DL><DT><A NAME="insert"><I>pathName</I> <B>insert</B></A>
<I>index</I>
<I>parent</I>
<I>node</I>
?<I>option value...</I>?
</DT><DD>
<p>
Inserts a new node identified by <I>node</I> in the children list of
<I>parent</I> at position <I>index</I>.
</p>
<p>
Any instance of <i>#auto</i> within the node name will be replaced by the
number of the item in the order of insertion. The non-printable characters
\1 to \5 are reserved for internal use and should not be present in node
names.
</p>
<P>
<DL><DT><A NAME="Node-anchor"><B>-anchor</B></A></DT>
<DD>
Specifies the anchor of the image or window of the node. Defaults to w.
</DD>
</DL>
<DL><DT><A NAME="Node-data"><B>-data</B></A></DT>
<DD>
User data associated to the node.
</DD>
</DL>
<DL><DT><A NAME="-deltax"><B>-deltax</B></A></DT>
<DD>
Specifies the horizontal indentation of the node. If the value is -1, the
node will be drawn with the deltax for the entire tree.
</DD>
</DL>
<DL><DT><A NAME="Node-drawcross"><B>-drawcross</B></A></DT>
<DD>
Specifies how the cross used to expand or collapse the children of a node
should be drawn.
Must be one of <B>auto</B>, <B>always</B> or <B>never</B>.
<BR>If <B>auto</B>, the cross is drawn only if the node has children.
If <B>always</B>, the cross is always drawn.
If <B>never</B>, the cross is never drawn.
To maintain compatibility with older versions of this widget,
<B>allways</B> is a deprecated synonym to <B>always</B>.
</DD>
</DL>
<DL><DT><A NAME="Node-fill"><B>-fill</B></A></DT>
<DD>
Specifies the foreground color of the label of the node.
</DD>
</DL>
<DL><DT><A NAME="Node-font"><B>-font</B></A></DT>
<DD>
Specifies a font for the label of the node.
</DD>
</DL>
<DL><DT><A NAME="-helpcmd"><B>-helpcmd</B></A></DT>
<DD>
If specified, refers to a command to execute to get the help text to display.
The command must return a string to display.
If the command returns an empty string, no help is displayed.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helptext"><B>-helptext</B></A></DT>
<DD>
Text for dynamic help.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helptype"><B>-helptype</B></A></DT>
<DD>
Type of dynamic help. Use <I>balloon</I> or <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="-helpvar"><B>-helpvar</B></A></DT>
<DD>
Variable to use when <B>helptype</B> option is <I>variable</I>.
See also <A HREF="DynamicHelp.html">DynamicHelp</A>.
</DD>
</DL>
<DL><DT><A NAME="Node-image"><B>-image</B></A></DT>
<DD>
Specifies an image to display at the left of the label of the node.
<B>window</B> option override <B>image</B>.
</DD>
</DL>
<DL><DT><A NAME="Node-open"><B>-open</B></A></DT>
<DD>
Specifies wether or not the children of the node should be drawn.
</DD>
</DL>
<DL><DT><A NAME="-padx"><B>-padx</B></A></DT>
<DD>
Specifies the distance between image or window and the text of the node. If
the value is -1, the node will be drawn with the padx for the entire tree.
</DD>
</DL>
<DL><DT><A NAME="Node-selectable"><B>-selectable</B></A></DT>
<DD>
Specifies if the node can be selected or not.
</DD>
</DL>
<DL><DT><A NAME="Node-text"><B>-text</B></A></DT>
<DD>
Specifies the label of the node.
</DD>
</DL>
<DL><DT><A NAME="Node-window"><B>-window</B></A></DT>
<DD>
Specifies a pathname to display at the left of the label of the node.
<B>window</B> option override <B>image</B>.
</DD>
</DL>
</DD></DL>
<DL><DT><A NAME="itemcget"><I>pathName</I> <B>itemcget</B></A>
<I>node</I>
<I>option</I>
</DT><DD>
Returns the current value of a configuration option for the item.
<I>Option</I> may have any of the values accepted by the item creation command.
</DD></DL>
<DL><DT><A NAME="itemconfigure"><I>pathName</I> <B>itemconfigure</B></A>
<I>node</I>
?<I>option</I>? ?<I>value</I> <I>option</I> <I>value</I> ...?
</DT><DD>
This command is similar to the <B>configure</B> command, except that it applies to the
options for an individual item, whereas <B>configure</B> applies to the options for
the widget as a whole. <B>Options</B> may have any of the values accepted by the
item creation widget command. If options are specified, options are modified as indicated
in the command and the command returns an empty string. If no options are specified,
returns a list describing the current options for the item.
Read-only options are not be modified.
</DD></DL>
<DL><DT><A NAME="line"><I>pathName</I> <B>line</B></A>
<I>node</I>
</DT><DD>
<p>
Returns the line number where <I>node</I> was drawn. If the node is
not visible then return -1. The first line of the tree has the value
of 0.
</p>
</DD></DL>
<DL><DT><A NAME="move"><I>pathName</I> <B>move</B></A>
<I>parent</I>
<I>node</I>
<I>index</I>
</DT><DD>
Moves <I>node</I> to the children list of <I>parent</I> at position <I>index</I>.
<I>parent</I> can not be a descendant of <I>node</I>.
</DD></DL>
<DL><DT><A NAME="nodes"><I>pathName</I> <B>nodes</B></A>
<I>node</I>
?<I>first</I>?
?<I>last</I>?
</DT><DD>
Returns parts of the children of <I>node</I>, following <I>first</I> and <I>last</I>.<BR>
If <I>first</I> and <I>last</I> are omitted, returns the list of all children.
If <I>first</I> is specified and <I>last</I> omitted, returns the child at index
<I>first</I>, or an empty string if <I>first</I> refers to a non-existent element.
If <I>first</I> and <I>last</I> are specified, the command returns a list whose elements
are all of the children between <I>first</I> and <I>last</I>,
inclusive. Both <I>first</I> and <I>last</I> may have any of the standard
forms for indices.
</DD></DL>
<DL><DT><A NAME="opentree"><I>pathName</I> <B>opentree</B></A> <I>node</I> ?<I>recurse</I>?
</DT><DD>
This command open all the subtree given by <I>node</I>. Recurse through the
tree starting at <I>node</I> and set <B>open</B> option to 1 depending on value
of <I>recurse</I>. Default value of <I>recurse</I> is <I>true</I>.
</DD></DL>
<DL><DT><A NAME="parent"><I>pathName</I> <B>parent</B></A>
<I>node</I>
</DT><DD>
Returns the parent of <I>node</I>.
</DD></DL>
<DL><DT><A NAME="reorder"><I>pathName</I> <B>reorder</B></A>
<I>node</I>
<I>neworder</I>
</DT><DD>
Modifies the order of children of <I>node</I> given by <I>neworder</I>. Children of
<I>node</I> that do not appear in <I>neworder</I> are no moved.
</DD></DL>
<DL><DT><A NAME="see"><I>pathName</I> <B>see</B></A>
<I>node</I>
</DT><DD>
Arrange the scrolling area to make <I>node</I> visible.
</DD></DL>
<DL><DT><A NAME="selection"><I>pathName</I> <B>selection</B></A>
<I>cmd</I>
?<I>arg...</I>?
</DT><DD>
Modifies the list of selected nodes following <I>cmd</I>:
<DL>
<DT><B>add</B>
<DD>Adds all nodes in <I>arg</I> to the selection.
<DT><B>clear</B>
<DD>Removes all nodes from the selection.
<DT><B>get</B>
<DD>Returns a list containing the indices of current selected nodes.
<DT><B>includes</B>
<DD>Tests if the specified node is selected. Returns true if the answer is yes, and false else.
<DT><B>range</B>
<DD>Sets the selection to all nodes between the two specified ones.
<DT><B>remove</B>
<DD>Removes all nodes in <I>arg</I> from the selection.
<DT><B>set</B>
<DD>Sets the selection to all nodes in <I>arg</I>.
<DT><B>toggle</B>
<DD>Toggles the selection status of all nodes in <I>arg</I>.
</DL>
The subcommands <B>add</B>, <B>range</B>, and <B>set</B> silently
ignore nodes which are declared unselectable. See the node option
<a href="#Node-selectable">-selectable</a> to influence this.
</DD></DL>
</DD></DL>
<DL><DT><A NAME="toggle"><I>pathName</I> <B>toggle</B></A>
<I>node</I>
</DT><DD>
Toggle the open/close status of the given <i>node</i>.
</DD></DL>
<DL><DT><A NAME="visible"><I>pathName</I> <B>visible</B></A>
<I>node</I>
</DT><DD>
Returns whether or not <I>node</I> is visible (all its parents are open).
</DD></DL>
<DL><DT><A NAME="xview"><I>pathName</I> <B>xview</B></A>
?<I>arg...</I>?
</DT><DD>
Standard command to enable horizontal scrolling of <I>pathName</I>.
</DD></DL>
<DL><DT><A NAME="yview"><I>pathName</I> <B>yview</B></A>
?<I>arg...</I>?
</DT><DD>
Standard command to enable vertical scrolling of <I>pathName</I>.
</DD></DL>
<B><A NAME="nodes">BINDINGS</A></B><BR>
<p>
A <b>&lt;&lt;TreeSelect&gt;&gt;</b> virtual event is generated any time the
selection in the tree changes. This is the default behavior of an
item in the tree, but it can be overridden with the bindText or
bindImage command. If the button 1 binding is overridden, this event may
not be generated.
</p>
<p>
The tree has all the standard mouse wheel bindings when it has focus.
</p>
</BODY></HTML>

502
lib/bwidget/BWman/Widget.html

@ -0,0 +1,502 @@ @@ -0,0 +1,502 @@
<HTML>
<HEAD><TITLE>Widget</TITLE></HEAD>
<BODY BGCOLOR=white>
<IMG SRC="constr.gif" WIDTH="40" HEIGHT="40"> Under construction ...<BR>
<DL><DT><I><A HREF="#descr">NAME</A></I></DT>
<DD><B>Widget</B>
- The Widget base class
</DD></DL>
<DL>
<DT><I><A HREF="#wc">COMMAND</A></I></DT>
<DD>Widget::<A HREF="#addmap"><B>addmap</B></A>
<I>class</I>
<I>subclass</I>
<I>subpath</I>
<I>options</I>
</DD>
<DD>Widget::<A HREF="#bwinclude"><B>bwinclude</B></A>
<I>class</I>
<I>subclass</I>
<I>subpath</I>
?<I>arg...</I>?
</DD>
<DD>Widget::<A HREF="#cget"><B>cget</B></A>
<I>path</I>
<I>option</I>
</DD>
<DD>Widget::<A HREF="#configure"><B>configure</B></A>
<I>path</I>
<I>options</I>
</DD>
<DD>Widget::<A HREF="#create"><B>create</B></A>
<I>class</I>
<I>path</I>
?<I>rename</I>?
</DD>
<DD>Widget::<A HREF="#declare"><B>declare</B></A>
<I>class</I>
<I>optlist</I>
</DD>
<DD>Widget::<A HREF="#define"><B>define</B></A>
<I>class</I>
<I>filename</I>
?<I>class ...</I>?
</DD>
<DD>Widget::<A HREF="#destroy"><B>destroy</B></A>
<I>path</I>
</DD>
<DD>Widget::<A HREF="#focusNext"><B>focusNext</B></A>
<I>w</I>
</DD>
<DD>Widget::<A HREF="#focusOK"><B>focusOK</B></A>
<I>w</I>
</DD>
<DD>Widget::<A HREF="#focusPrev"><B>focusPrev</B></A>
<I>w</I>
</DD>
<DD>Widget::<A HREF="#generate-doc"><B>generate-doc</B></A>
<I>dir</I>
<I>widgetlist</I>
</DD>
<DD>Widget::<A HREF="#generate-widget-doc"><B>generate-widget-doc</B></A>
<I>class</I>
<I>iscmd</I>
<I>file</I>
</DD>
<DD>Widget::<A HREF="#getoption"><B>getoption</B></A>
<I>path</I>
<I>option</I>
</DD>
<DD>Widget::<A HREF="#getVariable"><B>getVariable</B></A>
<I>path</I>
<I>varName</I>
<I>?myVarName?</I>
</DD>
<DD>Widget::<A HREF="#hasChanged"><B>hasChanged</B></A>
<I>path</I>
<I>option</I>
<I>pvalue</I>
</DD>
<DD>Widget::<A HREF="#init"><B>init</B></A>
<I>class</I>
<I>path</I>
<I>options</I>
</DD>
<DD>Widget::<A HREF="#setoption"><B>setoption</B></A>
<I>path</I>
<I>option</I>
<I>value</I>
</DD>
<DD>Widget::<A HREF="#subcget"><B>subcget</B></A>
<I>path</I>
<I>subwidget</I>
</DD>
<DD>Widget::<A HREF="#syncoptions"><B>syncoptions</B></A>
<I>class</I>
<I>subclass</I>
<I>subpath</I>
<I>options</I>
</DD>
<DD>Widget::<A HREF="#tkinclude"><B>tkinclude</B></A>
<I>class</I>
<I>tkwidget</I>
<I>subpath</I>
?<I>arg...</I>?
</DD>
</DL>
<BR><HR WIDTH="100%"><BR>
<B><A NAME="descr"></A>DESCRIPTION</B><BR>
<P>
The <B>Widget</B> namespace handle data associated to all BWidget and provide commands
to easily define BWidget.
<BR>For commands can be used to define a BWidget:
<B>tkinclude</B>, <B>bwinclude</B>, <B>declare</B>, <B>addmap</B> and <B>syncoptions</B>.
Here is the definition of <A HREF="ComboBox.html">ComboBox</A> widget:
<BR><BR>
<CENTER>
<TABLE BORDER=2 CELSPACING=2 WIDTH=80%>
<TR><TD><PRE>
namespace eval ComboBox {
<FONT COLOR=red><I># We're using ArrowButton, Entry and LabelFrame</I></FONT>
ArrowButton::use
Entry::use
LabelFrame::use
<FONT COLOR=red><I># Include resources of LabelFrame</I></FONT>
Widget::bwinclude ComboBox LabelFrame .labf \
rename {-text -label} \
remove {-focus} \
prefix {label -justify -width -anchor -height -font} \
initialize {-relief sunken -borderwidth 2}
<FONT COLOR=red><I># Include resources of Entry</I></FONT>
Widget::bwinclude ComboBox Entry .e \
remove {-relief -bd -borderwidth -bg -fg} \
rename {-foreground -entryfg -background -entrybg}
<FONT COLOR=red><I># Declare new resources</I></FONT>
Widget::declare ComboBox {
{-height TkResource 0 0 listbox}
{-values String "" 0}
{-modifycmd String "" 0}
{-postcommand String "" 0}
}
<FONT COLOR=red><I># Map resources to subwidget</I></FONT>
Widget::addmap ComboBox "" :cmd {-background {}}
Widget::addmap ComboBox ArrowButton .a \
{-foreground {} -background {} -disabledforeground {} -state {}}
<FONT COLOR=red><I># Synchronize subwidget options</I></FONT>
Widget::syncoptions ComboBox Entry .e {-text {}}
Widget::syncoptions ComboBox LabelFrame .labf {-label -text -underline {}}
proc use {} {}
}</PRE>
</TD></TR>
</TABLE></CENTER>
</P>
<HR WIDTH="50%"><BR>
<B><A NAME="wc">COMMAND</A></B><BR>
<DL><DT><A NAME="addmap">Widget::<B>addmap</B></A>
<I>class</I>
<I>subclass</I>
<I>subpath</I>
<I>options</I>
</DT><DD>
This command map some resources to subwidget.
Mapped resources automatically configure subwidget when widget is configured.
<UL>
<LI><I>class</I> is the class of the new BWidget
<LI><I>subclass</I> is the class the subwidget (BWidget class, e.g Entry, or empty for Tk widget)
<LI><I>subpath</I> is the path of the subwidget
<LI><I>options</I> is the list <I>{option realres ...}</I> of options to map to subwidget
</UL>
</DD></DL>
<DL><DT><A NAME="bwinclude">Widget::<B>bwinclude</B></A>
<I>class</I>
<I>subclass</I>
<I>subpath</I>
?<I>arg...</I>?
</DT><DD>
This command includes into a new BWidget the resources of another BWidget.
Arguments are:
<UL>
<LI><I>class</I> class of the new widget
<LI><I>subclass</I> class name of the BWidget to be included
<LI><I>subpath</I> path of the widget to configure when BWidget is configured
<LI><I>options</I> is:
<UL>
<LI><I><B>include</B> {option option ...}</I>
<BR>list of options to include (all if not defined)
<LI><I><B>remove</B> {option option ...}</I>
<BR> list of options to remove
<LI><I><B>rename</B> {option name option name ...}</I>
<BR>list of options to rename
<LI><I><B>prefix</B> {prefix option option ...}</I>
<BR>pefix all <I>option</I> by <I>prefix</I>
<LI><I><B>initialize</B> {option value option value ...}</I>
<BR>default value of options
<LI><I><B>readonly</B> {option value option value ...}</I>
<BR>new readonly flag
</UL></UL>
</DD></DL>
<DL><DT><A NAME="cget">Widget::<B>cget</B></A>
<I>path</I>
<I>option</I>
</DT><DD>
Returns the value of <I>option</I> of BWidget <I>path</I>. <B>cget</B> tests the option
existence and takes care of synchronization with subwidget.
Typically called by the BWidget <B>cget</B> command.
</DD></DL>
<DL><DT><A NAME="configure">Widget::<B>configure</B></A>
<I>path</I>
<I>options</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="create">Widget::<B>create</B></A>
<I>class</I>
<I>path</I>
?<I>rename</I>?
</DT><DD>
The standard method for creating a BWidget. The real widget path
is renamed to $path:cmd, and a new proc is created to replace the
path which points to the BWidget's commands.
<p>
If <i>rename</i> is false, the path will not be renamed, but the
proc will still be created. This is useful when inheriting another
BWidget who will already have renamed the widget.
</p>
<p>
The command returns the widget path. This command is usually the
last command executed in the ::create command for the widget.
</p>
</DD></DL>
<DL><DT><A NAME="declare">Widget::<B>declare</B></A>
<I>class</I>
<I>optlist</I>
</DT><DD>
This command declare new resources for a BWidget.
<UL>
<LI><I>class</I> is class of the new widget
<LI><I>options</I> is the list describing new options. Each new option is a list
<B>{option type value ro ?args?}</B> where:
<UL>
<LI><I>option</I> is the name of the option
<LI><I>type</I> is the type of the option
<LI><I>value</I> is the default value of the option
<LI><I>ro</I> is the readonly flag of the option
<LI><I>args</I> depends on type
</UL></UL>
<BR>
<I>type</I> can be:
<BR>
<DL>
<DT><B>TkResource</B></DT>
<DD>
<I>value</I> of <I>option</I> denotes a resource of a Tk widget. <I>args</I> must be <I>class</I> or
<I>{class realoption}</I>. <I>class</I> is the creation command of the Tk widget, e.g.
<B>entry</B>.
The second form must be used if <I>option</I> has not the same name in Tk widget,
but <I>realoption</I>.
<BR>If <I>value</I> is empty, it is initialized to the default value of the Tk widget.
</DD>
<DT><B>BwResource</B></DT>
<DD>
<I>value</I> of <I>option</I> denotes a resource of a BWidget. <I>args</I> must be <I>class</I> or
<I>{class realoption}</I>. <I>class</I> is the name of the namespace of the BWidget, e.g.
<B>LabelFrame</B>.
The second form must be used if <I>option</I> has not the same name in BWidget,
but <I>realoption</I>.
<BR>If <I>value</I> is empty, it is initialized to the default value of the BWidget.
</DD>
<DT><B>Int</B></DT>
<DD><I>value</I> of <I>option</I> is an integer.
<I>args</I> can be <I>{?min? ?max?}</I> to force it to be in a range. The test is
<I>[expr $option &gt; $min] && [expr $option &lt; $max]</I> so
if args is <I>{0 10}</I>, value must be beetween 0 and 10 exclude,
if <I>args</I> is <I>{=0 =10}</I> , value must be beetween 0 and 10 include.
</DD>
<DT><B>Boolean</B></DT>
<DD><I>value</I> of <I>option</I> is a boolean. True values can be <B>1</B>, <B>true</B> or <B>yes</B>.
False values can be <B>0</B>, <B>false</B> or <B>no</B>. <B>Widget::cget</B> always return
0 or 1.
</DD>
<DT><B>Enum</B></DT>
<DD>
<I>value</I> of <I>option</I> is a element of a enumeration. <I>args</I> must be the list
of enumeration, e.g. <I>{top left bottom right}</I>.
</DD>
<DT><B>Flag</B></DT>
<DD>
<I>value</I> of <I>option</I> is a combination of a set of chars. <I>args</I> must be a
string defining the set.
</DD>
<DT><B>String</B></DT>
<DD>
<DD><I>value</I> of <I>option</I> is any uncontrolled string.
</DD>
<DT><B>Synonym</B></DT>
<DD>
<DD><I>option</I> is a synonym of option <I>args</I>. <I>value</I> has no effect here.
</DD>
</DL>
</DD></DL>
<DL><DT><A NAME="define">Widget::<B>define</B></A>
<I>class</I>
<I>filename</I>
?<I>class ...</I>?
</DT><DD>
<p>
This command is used to define a new BWidget class. It is
usually the first command executed in a new widget definition.
</p>
<ul>
<li><i>class</i> is the name of the new widget class.</li>
<li><i>filename</i> is the name of the file (without extension) in the
BWidget distribution that defines this class.</li>
</ul>
<p>
Each class defined after the filename is a class that this widget
depends on. The ::use command will be called for each of these
classes after the new widget has been defined.
</p>
<p>
This command does several things to setup the new class. First, it
creates an alias in the global namespace for the name of the class
that points to the class's ::create subcommand. Second, it defines
a ::use subcommand for the class which other classes can use to load
this class on the fly. Lastly, it creates a default binding to the
&lt;Destroy&gt; event for the class that calls Widget::destroy on
the path. This is the default setup for almost all widgets in the
BWidget package.
</p>
</DD></DL>
<DL><DT><A NAME="destroy">Widget::<B>destroy</B></A>
<I>path</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="focusNext">Widget::<B>focusNext</B></A>
<I>w</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="focusOK">Widget::<B>focusOK</B></A>
<I>w</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="focusPrev">Widget::<B>focusPrev</B></A>
<I>w</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="generate-doc">Widget::<B>generate-doc</B></A>
<I>dir</I>
<I>widgetlist</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="generate-widget-doc">Widget::<B>generate-widget-doc</B></A>
<I>class</I>
<I>iscmd</I>
<I>file</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="getoption">Widget::<B>getoption</B></A>
<I>path</I>
<I>option</I>
</DT><DD>
Returns the value of <I>option</I> of BWidget <I>path</I>. This command does not test
option existence, does not handle synonym and does not take care of synchronization with
subwidget.
</DD></DL>
<DL><DT><A NAME="getVariable">Widget::<B>getVariable</B></A>
<I>path</I>
<I>varName</I>
<I>?myVarName?</I>
</DT><DD>
<p>
Make the variable <i>varName</i> relational to <i>path</i> accessible in
the current procedure. The variable will be created in the widget namespace
for <i>path</i> and can be used for storing widget-specific information.
When <i>path</i> is destroyed, any variable accessed in this manner will be
destroyed with it.
</p>
<p>
If <i>myVarName</i> is specified, the variable will be accessible in the
current procedure as that name.
</p>
</DD></DL>
<DL><DT><A NAME="hasChanged">Widget::<B>hasChanged</B></A>
<I>path</I>
<I>option</I>
<I>pvalue</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="init">Widget::<B>init</B></A>
<I>class</I>
<I>path</I>
<I>options</I>
</DT><DD>
Description text
</DD></DL>
<DL><DT><A NAME="setoption">Widget::<B>setoption</B></A>
<I>path</I>
<I>option</I>
<I>value</I>
</DT><DD>
Set the value of <I>option</I> of BWidget <I>path</I> without option test, subwidget mapping,
synonym handling and does not set the modification flag.
</DD></DL>
<DL><DT><A NAME="subcget">Widget::<B>subcget</B></A>
<I>path</I>
<I>subwidget</I>
</DT><DD>
Returns the list of all option/value of BWidget <I>path</I> that are mapped to <I>subwidget</I>.
</DD></DL>
<DL><DT><A NAME="syncoptions">Widget::<B>syncoptions</B></A>
<I>class</I>
<I>subclass</I>
<I>subpath</I>
<I>options</I>
</DT><DD>
This command synchronize options value of a subwidget.
Used when an option of a subwidget is modified out of the BWidget <B>configure</B> command.
<UL>
<LI><I>class</I> is the class of the new BWidget
<LI><I>subclass</I> is the class the subwidget (BWidget class, e.g Entry, or empty for Tk widget)
<LI><I>subpath</I> is the path of the subwidget
<LI><I>options</I> is the list <I>{option realres ...}</I> of options to synchronize
with subwidget
</UL>
</DD></DL>
<DL><DT><A NAME="tkinclude">Widget::<B>tkinclude</B></A>
<I>class</I>
<I>tkwidget</I>
<I>subpath</I>
?<I>arg...</I>?
</DT><DD>
This command includes into a new BWidget the resources of a Tk widget.
Arguments are:
<UL>
<LI><I>class</I> class of the new widget
<LI><I>tkwidger</I> command name of the Tk widget to be included
<LI><I>subpath</I> path of the widget to configure when BWidget is configured
<LI><I>options</I> is:
<UL>
<LI><I><B>include</B> {option option ...}</I>
<BR>list of options to include (all if not defined)
<LI><I><B>remove</B> {option option ...}</I>
<BR>list of options to remove
<LI><I><B>rename</B> {option name option name ...}</I>
<BR>list of options to rename
<LI><I><B>prefix</B> {prefix option option ...}</I>
<BR>pefix all <I>option</I> by <I>prefix</I>
<LI><I><B>initialize</B> {option value option value ...}</I>
<BR>default value of options
<LI><I><B>readonly</B> {option value option value ...}</I>
<BR>new readonly flag
</UL></UL>
</DD></DL>
</BODY></HTML>

95
lib/bwidget/BWman/contents.html

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
<HTML><BODY BGCOLOR=white target=Manual>
<BR><BR><DT><B>Simple Widgets</B>
<DD><TABLE BORDER=0 CELLSPACING=0>
<TR><TD><A HREF="Label.html">Label</A></TD>
<TD>Label widget with <B>state</B> option, dynamic help and drag and drop facilities</TD></TR>
<TR><TD><A HREF="Entry.html">Entry</A></TD>
<TD>Entry widget with <B>state</B> option, dynamic help and drag and drop facilities</TD></TR>
<TR><TD><A HREF="Button.html">Button</A></TD>
<TD>Button widget with enhanced options</TD></TR>
<TR><TD><A HREF="ArrowButton.html">ArrowButton</A></TD>
<TD>Button widget with an arrow shape.</TD></TR>
<TR><TD><A HREF="ProgressBar.html">ProgressBar</A></TD>
<TD>Progress indicator widget</TD></TR>
<TR><TD><A HREF="ScrollView.html">ScrollView</A></TD>
<TD>Display the visible area of a scrolled window</TD></TR>
<TR><TD><A HREF="Separator.html">Separator</A></TD>
<TD>3D separator widget</TD></TR>
</TABLE>
<BR><BR><DT><B>Manager Widgets</B>
<DD><TABLE BORDER=0 CELLSPACING=0>
<TR><TD><A HREF="MainFrame.html">MainFrame</A></TD>
<TD>Manage toplevel with menu, toolbar and statusbar </TD></TR>
<TR><TD><A HREF="LabelFrame.html">LabelFrame</A></TD>
<TD>Frame with a Label</TD></TR>
<TR><TD><A HREF="TitleFrame.html">TitleFrame</A></TD>
<TD>Frame with a title (consider Tk 8.4+ labelframe instead)</TD></TR>
<TR><TD><A HREF="PanelFrame.html">PanelFrame</A></TD>
<TD>Frame with a boxed title area</TD></TR>
<TR><TD><A HREF="ScrolledWindow.html">ScrolledWindow</A></TD>
<TD>Generic scrolled widget</TD></TR>
<TR><TD><A HREF="ScrollableFrame.html">ScrollableFrame</A></TD>
<TD>Scrollable frame containing widget</TD></TR>
<TR><TD><A HREF="PanedWindow.html">PanedWindow</A></TD>
<TD>Tiled layout manager widget (consider Tk 8.4+ panedwindow instead)</TD></TR>
<TR><TD><A HREF="ButtonBox.html">ButtonBox</A></TD>
<TD>Set of buttons with horizontal or vertical layout</TD></TR>
<TR><TD><A HREF="PagesManager.html">PagesManager</A></TD>
<TD>Pages manager widget</TD></TR>
<TR><TD><A HREF="NoteBook.html">NoteBook</A></TD>
<TD>Notebook manager widget</TD></TR>
<TR><TD><A HREF="Dialog.html">Dialog</A></TD>
<TD>Dialog abstraction with custom buttons</TD></TR>
<TR><TD><A HREF="StatusBar.html">StatusBar</A></TD>
<TD>Status bar widget with resize control</TD></TR>
</TABLE>
<BR><BR><DT><B>Composite Widgets</B>
<DD><TABLE BORDER=0 CELLSPACING=0>
<TR><TD><A HREF="LabelEntry.html">LabelEntry</A></TD>
<TD>
LabelFrame containing an Entry widget.
</TD></TR>
<TR><TD><A HREF="ComboBox.html">ComboBox</A></TD>
<TD>ComboBox widget</TD></TR>
<TR><TD><A HREF="SpinBox.html">SpinBox</A></TD>
<TD>SpinBox widget (consider Tk 8.4+ spinbox instead)</TD></TR>
<TR><TD><A HREF="Tree.html">Tree</A></TD>
<TD>Tree widget</TD></TR>
<TR><TD><A HREF="ListBox.html">ListBox</A></TD>
<TD>ListBox widget</TD></TR>
<TR><TD><A HREF="MessageDlg.html">MessageDlg</A></TD>
<TD>Message dialog box</TD></TR>
<TR><TD><A HREF="ProgressDlg.html">ProgressDlg</A></TD>
<TD>Progress indicator dialog box</TD></TR>
<TR><TD><A HREF="PasswdDlg.html">PasswdDlg</A></TD>
<TD>Login/Password dialog box</TD></TR>
<TR><TD><A HREF="SelectFont.html">SelectFont</A></TD>
<TD>Font selection widget</TD></TR>
<TR><TD><A HREF="SelectColor.html">SelectColor</A></TD>
<TD>Color selection widget</TD></TR>
</TABLE>
<BR><BR><DT><B>Commands Classes</B>
<DD><TABLE BORDER=0 CELLSPACING=0>
<TR><TD><A HREF="Widget.html">Widget</A></TD>
<TD>The Widget base class</TD></TR>
<TR><TD><A HREF="DynamicHelp.html">DynamicHelp</A></TD>
<TD>Provide help to Tk widget or BWidget</TD></TR>
<TR><TD><A HREF="DragSite.html">DragSite</A></TD>
<TD>Commands set for Drag facilities</TD></TR>
<TR><TD><A HREF="DropSite.html">DropSite</A></TD>
<TD>Commands set for Drop facilities</TD></TR>
<TR><TD><A HREF="BWidget.html">BWidget</A></TD>
<TD>Description text</TD></TR>
</TABLE>
</DD>
<BR><HR><BR><B>Load BWidget</B><BR><BR>
Possible load sequence:
<pre>
# If package msgcat is available, its locale is used for BWidget
package require msgcat
# load BWidget
package require BWidget
</pre>
</BODY></HTML>

7
lib/bwidget/BWman/index.html

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
<HTML>
<HEAD><TITLE>BWidget Manual Pages</TITLE></HEAD>
<FRAMESET COLS="180,*" BORDER=0>
<FRAME SRC=navtree.html NAME="Menu" SCROLLING=AUTO>
<FRAME SRC=contents.html NAME="Manual" SCROLLING=AUTO>
</FRAMESET>
</HTML>

41
lib/bwidget/BWman/navtree.html

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
<HTML><BODY BGCOLOR=white>
<FONT SIZE=1><STRONG><A HREF="contents.html" TARGET=Manual>Brief description</A></STRONG></FONT><BR>
<FONT SIZE=1><STRONG>Simple Widgets</STRONG></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="Label.html" TARGET=Manual>Label</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="Entry.html" TARGET=Manual>Entry</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="Button.html" TARGET=Manual>Button</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ArrowButton.html" TARGET=Manual>ArrowButton</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ProgressBar.html" TARGET=Manual>ProgressBar</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ScrollView.html" TARGET=Manual>ScrollView</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="Separator.html" TARGET=Manual>Separator</A></FONT><BR>
<FONT SIZE=1><STRONG>Manager Widgets</STRONG></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="MainFrame.html" TARGET=Manual>MainFrame</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="LabelFrame.html" TARGET=Manual>LabelFrame</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="TitleFrame.html" TARGET=Manual>TitleFrame</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="PanelFrame.html" TARGET=Manual>PanelFrame</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ScrolledWindow.html" TARGET=Manual>ScrolledWindow</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ScrollableFrame.html" TARGET=Manual>ScrollableFrame</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="PanedWindow.html" TARGET=Manual>PanedWindow</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ButtonBox.html" TARGET=Manual>ButtonBox</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="PagesManager.html" TARGET=Manual>PagesManager</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="NoteBook.html" TARGET=Manual>NoteBook</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="Dialog.html" TARGET=Manual>Dialog</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="StatusBar.html" TARGET=Manual>StatusBar</A></FONT><BR>
<FONT SIZE=1><STRONG>Composite Widgets</STRONG></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="LabelEntry.html" TARGET=Manual>LabelEntry</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ComboBox.html" TARGET=Manual>ComboBox</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="SpinBox.html" TARGET=Manual>SpinBox</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="Tree.html" TARGET=Manual>Tree</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ListBox.html" TARGET=Manual>ListBox</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="MessageDlg.html" TARGET=Manual>MessageDlg</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="ProgressDlg.html" TARGET=Manual>ProgressDlg</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="PasswdDlg.html" TARGET=Manual>PasswdDlg</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="SelectFont.html" TARGET=Manual>SelectFont</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="SelectColor.html" TARGET=Manual>SelectColor</A></FONT><BR>
<FONT SIZE=1><STRONG>Commands Classes</STRONG></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="Widget.html" TARGET=Manual>Widget</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="DynamicHelp.html" TARGET=Manual>DynamicHelp</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="DragSite.html" TARGET=Manual>DragSite</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="DropSite.html" TARGET=Manual>DropSite</A></FONT><BR>
&nbsp;&nbsp;<FONT SIZE=1><A HREF="BWidget.html" TARGET=Manual>BWidget</A></FONT><BR>
</BODY></HTML>

458
lib/bwidget/BWman/options.htm

@ -0,0 +1,458 @@ @@ -0,0 +1,458 @@
<HTML><HEAD><TITLE>Tk Built-In Commands - options manual page</TITLE></HEAD>
<BODY BGCOLOR=white>
<DL>
<DD><A HREF="options.htm#M2" NAME="L2">NAME</A>
<DL><DD>options - Standard options supported by widgets</DL>
<DD><A HREF="options.htm#M3" NAME="L3">DESCRIPTION</A>
<DL>
<DD><A HREF="options.htm#M-activebackground" NAME="L4">-activebackground, activeBackground, Foreground</A>
<DD><A HREF="options.htm#M-activeborderwidth" NAME="L5">-activeborderwidth, activeBorderWidth, BorderWidth</A>
<DD><A HREF="options.htm#M-activeforeground" NAME="L6">-activeforeground, activeForeground, Background</A>
<DD><A HREF="options.htm#M-anchor" NAME="L7">-anchor, anchor, Anchor</A>
<DD><A HREF="options.htm#M-background" NAME="L8">-background or -bg, background, Background</A>
<DD><A HREF="options.htm#M-bitmap" NAME="L9">-bitmap, bitmap, Bitmap</A>
<DD><A HREF="options.htm#M-borderwidth" NAME="L10">-borderwidth or -bd, borderWidth, BorderWidth</A>
<DD><A HREF="options.htm#M-cursor" NAME="L11">-cursor, cursor, Cursor</A>
<DD><A HREF="options.htm#M-disabledbackground" NAME="L12">-disabledbackground, disabledBackground, DisabledBackground</A>
<DD><A HREF="options.htm#M-disabledforeground" NAME="L12">-disabledforeground, disabledForeground, DisabledForeground</A>
<DD><A HREF="options.htm#M-exportselection" NAME="L13">-exportselection, exportSelection, ExportSelection</A>
<DD><A HREF="options.htm#M-font" NAME="L14">-font, font, Font</A>
<DD><A HREF="options.htm#M-foreground" NAME="L15">-foreground or -fg, foreground, Foreground</A>
<DD><A HREF="options.htm#M-highlightbackground" NAME="L16">-highlightbackground, highlightBackground, HighlightBackground</A>
<DD><A HREF="options.htm#M-highlightcolor" NAME="L17">-highlightcolor, highlightColor, HighlightColor</A>
<DD><A HREF="options.htm#M-highlightthickness" NAME="L18">-highlightthickness, highlightThickness, HighlightThickness</A>
<DD><A HREF="options.htm#M-image" NAME="L19">-image, image, Image</A>
<DD><A HREF="options.htm#M-insertbackground" NAME="L20">-insertbackground, insertBackground, Foreground</A>
<DD><A HREF="options.htm#M-insertborderwidth" NAME="L21">-insertborderwidth, insertBorderWidth, BorderWidth</A>
<DD><A HREF="options.htm#M-insertofftime" NAME="L22">-insertofftime, insertOffTime, OffTime</A>
<DD><A HREF="options.htm#M-insertontime" NAME="L23">-insertontime, insertOnTime, OnTime</A>
<DD><A HREF="options.htm#M-insertwidth" NAME="L24">-insertwidth, insertWidth, InsertWidth</A>
<DD><A HREF="options.htm#M-jump" NAME="L25">-jump, jump, Jump</A>
<DD><A HREF="options.htm#M-justify" NAME="L26">-justify, justify, Justify</A>
<DD><A HREF="options.htm#M-orient" NAME="L27">-orient, orient, Orient</A>
<DD><A HREF="options.htm#M-padx" NAME="L28">-padx, padX, Pad</A>
<DD><A HREF="options.htm#M-pady" NAME="L29">-pady, padY, Pad</A>
<DD><A HREF="options.htm#M-relief" NAME="L30">-relief, relief, Relief</A>
<DD><A HREF="options.htm#M-repeatdelay" NAME="L31">-repeatdelay, repeatDelay, RepeatDelay</A>
<DD><A HREF="options.htm#M-repeatinterval" NAME="L32">-repeatinterval, repeatInterval, RepeatInterval</A>
<DD><A HREF="options.htm#M-selectbackground" NAME="L33">-selectbackground, selectBackground, Foreground</A>
<DD><A HREF="options.htm#M-selectborderwidth" NAME="L34">-selectborderwidth, selectBorderWidth, BorderWidth</A>
<DD><A HREF="options.htm#M-selectforeground" NAME="L35">-selectforeground, selectForeground, Background</A>
<DD><A HREF="options.htm#M-setgrid" NAME="L36">-setgrid, setGrid, SetGrid</A>
<DD><A HREF="options.htm#M-takefocus" NAME="L37">-takefocus, takeFocus, TakeFocus</A>
<DD><A HREF="options.htm#M-text" NAME="L38">-text, text, Text</A>
<DD><A HREF="options.htm#M-textvariable" NAME="L39">-textvariable, textVariable, Variable</A>
<DD><A HREF="options.htm#M-troughcolor" NAME="L40">-troughcolor, troughColor, Background</A>
<DD><A HREF="options.htm#M-underline" NAME="L41">-underline, underline, Underline</A>
<DD><A HREF="options.htm#M-wraplength" NAME="L42">-wraplength, wrapLength, WrapLength</A>
<DD><A HREF="options.htm#M-xscrollcommand" NAME="L43">-xscrollcommand, xScrollCommand, ScrollCommand</A>
<DD><A HREF="options.htm#M-yscrollcommand" NAME="L44">-yscrollcommand, yScrollCommand, ScrollCommand</A>
</DL>
<DD><A HREF="options.htm#M4" NAME="L45">KEYWORDS</A>
</DL><HR>
<H3><A NAME="M2">NAME</A></H3>
options - Standard options supported by widgets
<H3><A NAME="M3">DESCRIPTION</A></H3>
This manual entry describes the common configuration options supported
by widgets in the Tk toolkit. Every widget does not necessarily support
every option (see the manual entries for individual widgets for a list
of the standard options supported by that widget), but if a widget does
support an option with one of the names listed below, then the option
has exactly the effect described below.
<P>
In the descriptions below, ``Command-Line Name'' refers to the
switch used in class commands and <B>configure</B> widget commands to
set this value. For example, if an option's command-line switch is
<B>-foreground</B> and there exists a widget <B>.a.b.c</B>, then the
command
<PRE><B>.a.b.c configure -foreground black</B></PRE>
may be used to specify the value <B>black</B> for the option in the
the widget <B>.a.b.c</B>. Command-line switches may be abbreviated,
as long as the abbreviation is unambiguous.
``Database Name'' refers to the option's name in the option database (e.g.
in .Xdefaults files). ``Database Class'' refers to the option's class value
in the option database.
<DL>
<DT>Command-Line Name: <B><A NAME="M-activebackground">-activebackground</A></B>
<DT>Database Name: <B>activeBackground</B>
<DT>Database Class: <B>Foreground</B>
<DD>Specifies background color to use when drawing active elements.
An element (a widget or portion of a widget) is active if the
mouse cursor is positioned over the element and pressing a mouse button
will cause some action to occur.
If strict Motif compliance has been requested by setting the
<B>tk_strictMotif</B> variable, this option will normally be
ignored; the normal background color will be used instead.
For some elements on Windows and Macintosh systems, the active color
will only be used while mouse button 1 is pressed over the element.
<P><DT>Command-Line Name: <B><A NAME="M-activeborderwidth">-activeborderwidth</A></B>
<DT>Database Name: <B>activeBorderWidth</B>
<DT>Database Class: <B>BorderWidth</B>
<DD>Specifies a non-negative value indicating
the width of the 3-D border drawn around active elements. See above for
definition of active elements.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
This option is typically only available in widgets displaying more
than one element at a time (e.g. menus but not buttons).
<P><DT>Command-Line Name: <B><A NAME="M-activeforeground">-activeforeground</A></B>
<DT>Database Name: <B>activeForeground</B>
<DT>Database Class: <B>Background</B>
<DD>Specifies foreground color to use when drawing active elements.
See above for definition of active elements.
<P><DT>Command-Line Name: <B><A NAME="M-anchor">-anchor</A></B>
<DT>Database Name: <B>anchor</B>
<DT>Database Class: <B>Anchor</B>
<DD>Specifies how the information in a widget (e.g. text or a bitmap)
is to be displayed in the widget.
Must be one of the values <B>n</B>, <B>ne</B>, <B>e</B>, <B>se</B>,
<B>s</B>, <B>sw</B>, <B>w</B>, <B>nw</B>, or <B>center</B>.
For example, <B>nw</B> means display the information such that its
top-left corner is at the top-left corner of the widget.
<P><DT>Command-Line Name: <B><A NAME="M-background">-background or -bg</A></B>
<DT>Database Name: <B>background</B>
<DT>Database Class: <B>Background</B>
<DD>Specifies the normal background color to use when displaying the
widget.
<P><DT>Command-Line Name: <B><A NAME="M-bitmap">-bitmap</A></B>
<DT>Database Name: <B>bitmap</B>
<DT>Database Class: <B>Bitmap</B>
<DD>Specifies a bitmap to display in the widget, in any of the forms
acceptable to <B><A HREF="../TkLib/GetBitmap.htm">Tk_GetBitmap</A></B>.
The exact way in which the bitmap is displayed may be affected by
other options such as <B>anchor</B> or <B>justify</B>.
Typically, if this option is specified then it overrides other
options that specify a textual value to display in the widget;
the <B>bitmap</B> option may be reset to an empty string to re-enable
a text display.
In widgets that support both <B>bitmap</B> and <B>image</B> options,
<B>image</B> will usually override <B>bitmap</B>.
<P><DT>Command-Line Name: <B><A NAME="M-borderwidth">-borderwidth or -bd</A></B>
<DT>Database Name: <B>borderWidth</B>
<DT>Database Class: <B>BorderWidth</B>
<DD>Specifies a non-negative value indicating the width
of the 3-D border to draw around the outside of the widget (if such a
border is being drawn; the <B>relief</B> option typically determines
this). The value may also be used when drawing 3-D effects in the
interior of the widget.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
<P><DT>Command-Line Name: <B><A NAME="M-cursor">-cursor</A></B>
<DT>Database Name: <B>cursor</B>
<DT>Database Class: <B>Cursor</B>
<DD>Specifies the mouse cursor to be used for the widget.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetCursor.htm">Tk_GetCursor</A></B>.
<P><DT>Command-Line Name: <B><A NAME="M-disabledforeground">-disabledforeground</A></B>
<P><DT>Command-Line Name: <B><A NAME="M-disabledbackground">-disabledbackground</A></B>
<DT>Database Name: <B>disabledBackground</B>
<DT>Database Class: <B>DisabledBackground</B>
<DD>Specifies background color to use when drawing a disabled element.
If the option is specified as an empty string (which is typically the
case on monochrome displays), disabled elements are drawn with the
normal background color but they are dimmed by drawing them
with a stippled fill pattern.
<DT>Database Name: <B>disabledForeground</B>
<DT>Database Class: <B>DisabledForeground</B>
<DD>Specifies foreground color to use when drawing a disabled element.
If the option is specified as an empty string (which is typically the
case on monochrome displays), disabled elements are drawn with the
normal foreground color but they are dimmed by drawing them
with a stippled fill pattern.
<P><DT>Command-Line Name: <B><A NAME="M-exportselection">-exportselection</A></B>
<DT>Database Name: <B>exportSelection</B>
<DT>Database Class: <B>ExportSelection</B>
<DD>Specifies whether or not a selection in the widget should also be
the X selection.
The value may have any of the forms accepted by <B><A HREF="../TclLib/GetInt.htm">Tcl_GetBoolean</A></B>,
such as <B>true</B>, <B>false</B>, <B>0</B>, <B>1</B>, <B>yes</B>, or <B>no</B>.
If the selection is exported, then selecting in the widget deselects
the current X selection, selecting outside the widget deselects any
widget selection, and the widget will respond to selection retrieval
requests when it has a selection. The default is usually for widgets
to export selections.
<P><DT>Command-Line Name: <B><A NAME="M-font">-font</A></B>
<DT>Database Name: <B><A HREF="../TkCmd/font.htm">font</A></B>
<DT>Database Class: <B><A HREF="../TkCmd/font.htm">Font</A></B>
<DD>Specifies the font to use when drawing text inside the widget.
<P><DT>Command-Line Name: <B><A NAME="M-foreground">-foreground or -fg</A></B>
<DT>Database Name: <B>foreground</B>
<DT>Database Class: <B>Foreground</B>
<DD>Specifies the normal foreground color to use when displaying the widget.
<P><DT>Command-Line Name: <B><A NAME="M-highlightbackground">-highlightbackground</A></B>
<DT>Database Name: <B>highlightBackground</B>
<DT>Database Class: <B>HighlightBackground</B>
<DD>Specifies the color to display in the traversal highlight region when
the widget does not have the input focus.
<P><DT>Command-Line Name: <B><A NAME="M-highlightcolor">-highlightcolor</A></B>
<DT>Database Name: <B>highlightColor</B>
<DT>Database Class: <B>HighlightColor</B>
<DD>Specifies the color to use for the traversal highlight rectangle that is
drawn around the widget when it has the input focus.
<P><DT>Command-Line Name: <B><A NAME="M-highlightthickness">-highlightthickness</A></B>
<DT>Database Name: <B>highlightThickness</B>
<DT>Database Class: <B>HighlightThickness</B>
<DD>Specifies a non-negative value indicating the width of the highlight
rectangle to draw around the outside of the widget when it has the
input focus.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
If the value is zero, no focus highlight is drawn around the widget.
<P><DT>Command-Line Name: <B><A NAME="M-image">-image</A></B>
<DT>Database Name: <B>image</B>
<DT>Database Class: <B>Image</B>
<DD>Specifies an image to display in the widget, which must have been
created with the <B><A HREF="../TkCmd/image.htm">image create</A></B> command.
Typically, if the <B>image</B> option is specified then it overrides other
options that specify a bitmap or textual value to display in the widget;
the <B>image</B> option may be reset to an empty string to re-enable
a bitmap or text display.
<P><DT>Command-Line Name: <B><A NAME="M-insertbackground">-insertbackground</A></B>
<DT>Database Name: <B>insertBackground</B>
<DT>Database Class: <B>Foreground</B>
<DD>Specifies the color to use as background in the area covered by the
insertion cursor. This color will normally override either the normal
background for the widget (or the selection background if the insertion
cursor happens to fall in the selection).
<P><DT>Command-Line Name: <B><A NAME="M-insertborderwidth">-insertborderwidth</A></B>
<DT>Database Name: <B>insertBorderWidth</B>
<DT>Database Class: <B>BorderWidth</B>
<DD>Specifies a non-negative value indicating the width
of the 3-D border to draw around the insertion cursor.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
<P><DT>Command-Line Name: <B><A NAME="M-insertofftime">-insertofftime</A></B>
<DT>Database Name: <B>insertOffTime</B>
<DT>Database Class: <B>OffTime</B>
<DD>Specifies a non-negative integer value indicating the number of
milliseconds the insertion cursor should remain ``off'' in each blink cycle.
If this option is zero then the cursor doesn't blink: it is on
all the time.
<P><DT>Command-Line Name: <B><A NAME="M-insertontime">-insertontime</A></B>
<DT>Database Name: <B>insertOnTime</B>
<DT>Database Class: <B>OnTime</B>
<DD>Specifies a non-negative integer value indicating the number of
milliseconds the insertion cursor should remain ``on'' in each blink cycle.
<P><DT>Command-Line Name: <B><A NAME="M-insertwidth">-insertwidth</A></B>
<DT>Database Name: <B>insertWidth</B>
<DT>Database Class: <B>InsertWidth</B>
<DD>Specifies a value indicating the total width of the insertion cursor.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
If a border has been specified for the insertion
cursor (using the <B>insertBorderWidth</B> option), the border
will be drawn inside the width specified by the <B>insertWidth</B>
option.
<P><DT>Command-Line Name: <B><A NAME="M-jump">-jump</A></B>
<DT>Database Name: <B>jump</B>
<DT>Database Class: <B>Jump</B>
<DD>For widgets with a slider that can be dragged to adjust a value,
such as scrollbars, this option determines when
notifications are made about changes in the value.
The option's value must be a boolean of the form accepted by
<B><A HREF="../TclLib/GetInt.htm">Tcl_GetBoolean</A></B>.
If the value is false, updates are made continuously as the
slider is dragged.
If the value is true, updates are delayed until the mouse button
is released to end the drag; at that point a single notification
is made (the value ``jumps'' rather than changing smoothly).
<P><DT>Command-Line Name: <B><A NAME="M-justify">-justify</A></B>
<DT>Database Name: <B>justify</B>
<DT>Database Class: <B>Justify</B>
<DD>When there are multiple lines of text displayed in a widget, this
option determines how the lines line up with each other.
Must be one of <B>left</B>, <B>center</B>, or <B>right</B>.
<B>Left</B> means that the lines' left edges all line up, <B>center</B>
means that the lines' centers are aligned, and <B>right</B> means
that the lines' right edges line up.
<P><DT>Command-Line Name: <B><A NAME="M-orient">-orient</A></B>
<DT>Database Name: <B>orient</B>
<DT>Database Class: <B>Orient</B>
<DD>For widgets that can lay themselves out with either a horizontal
or vertical orientation, such as scrollbars, this option specifies
which orientation should be used. Must be either <B>horizontal</B>
or <B>vertical</B> or an abbreviation of one of these.
<P><DT>Command-Line Name: <B><A NAME="M-padx">-padx</A></B>
<DT>Database Name: <B>padX</B>
<DT>Database Class: <B>Pad</B>
<DD>Specifies a non-negative value indicating how much extra space
to request for the widget in the X-direction.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
When computing how large a window it needs, the widget will
add this amount to the width it would normally need (as determined
by the width of the things displayed in the widget); if the geometry
manager can satisfy this request, the widget will end up with extra
internal space to the left and/or right of what it displays inside.
Most widgets only use this option for padding text: if they are
displaying a bitmap or image, then they usually ignore padding
options.
<P><DT>Command-Line Name: <B><A NAME="M-pady">-pady</A></B>
<DT>Database Name: <B>padY</B>
<DT>Database Class: <B>Pad</B>
<DD>Specifies a non-negative value indicating how much extra space
to request for the widget in the Y-direction.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
When computing how large a window it needs, the widget will add
this amount to the height it would normally need (as determined by
the height of the things displayed in the widget); if the geometry
manager can satisfy this request, the widget will end up with extra
internal space above and/or below what it displays inside.
Most widgets only use this option for padding text: if they are
displaying a bitmap or image, then they usually ignore padding
options.
<P><DT>Command-Line Name: <B><A NAME="M-relief">-relief</A></B>
<DT>Database Name: <B>relief</B>
<DT>Database Class: <B>Relief</B>
<DD>Specifies the 3-D effect desired for the widget. Acceptable
values are <B>raised</B>, <B>sunken</B>, <B>flat</B>, <B>ridge</B>,
<B>solid</B>, and <B>groove</B>.
The value
indicates how the interior of the widget should appear relative
to its exterior; for example, <B>raised</B> means the interior of
the widget should appear to protrude from the screen, relative to
the exterior of the widget.
<P><DT>Command-Line Name: <B><A NAME="M-repeatdelay">-repeatdelay</A></B>
<DT>Database Name: <B>repeatDelay</B>
<DT>Database Class: <B>RepeatDelay</B>
<DD>Specifies the number of milliseconds a button or key must be held
down before it begins to auto-repeat. Used, for example, on the
up- and down-arrows in scrollbars.
<P><DT>Command-Line Name: <B><A NAME="M-repeatinterval">-repeatinterval</A></B>
<DT>Database Name: <B>repeatInterval</B>
<DT>Database Class: <B>RepeatInterval</B>
<DD>Used in conjunction with <B>repeatDelay</B>: once auto-repeat
begins, this option determines the number of milliseconds between
auto-repeats.
<P><DT>Command-Line Name: <B><A NAME="M-selectbackground">-selectbackground</A></B>
<DT>Database Name: <B>selectBackground</B>
<DT>Database Class: <B>Foreground</B>
<DD>Specifies the background color to use when displaying selected
items.
<P><DT>Command-Line Name: <B><A NAME="M-selectborderwidth">-selectborderwidth</A></B>
<DT>Database Name: <B>selectBorderWidth</B>
<DT>Database Class: <B>BorderWidth</B>
<DD>Specifies a non-negative value indicating the width
of the 3-D border to draw around selected items.
The value may have any of the forms acceptable to <B><A HREF="../TkLib/GetPixels.htm">Tk_GetPixels</A></B>.
<P><DT>Command-Line Name: <B><A NAME="M-selectforeground">-selectforeground</A></B>
<DT>Database Name: <B>selectForeground</B>
<DT>Database Class: <B>Background</B>
<DD>Specifies the foreground color to use when displaying selected
items.
<P><DT>Command-Line Name: <B><A NAME="M-setgrid">-setgrid</A></B>
<DT>Database Name: <B>setGrid</B>
<DT>Database Class: <B>SetGrid</B>
<DD>Specifies a boolean value that determines whether this widget controls the
resizing grid for its top-level window.
This option is typically used in text widgets, where the information
in the widget has a natural size (the size of a character) and it makes
sense for the window's dimensions to be integral numbers of these units.
These natural window sizes form a grid.
If the <B>setGrid</B> option is set to true then the widget will
communicate with the window manager so that when the user interactively
resizes the top-level window that contains the widget, the dimensions of
the window will be displayed to the user in grid units and the window
size will be constrained to integral numbers of grid units.
See the section GRIDDED GEOMETRY MANAGEMENT in the <B><A HREF="../TkCmd/wm.htm">wm</A></B> manual
entry for more details.
<P><DT>Command-Line Name: <B><A NAME="M-takefocus">-takefocus</A></B>
<DT>Database Name: <B>takeFocus</B>
<DT>Database Class: <B>TakeFocus</B>
<DD>Determines whether the window accepts the focus during keyboard
traversal (e.g., Tab and Shift-Tab).
Before setting the focus to a window, the traversal scripts
consult the value of the <B>takeFocus</B> option.
A value of <B>0</B> means that the window should be skipped entirely
during keyboard traversal.
<B>1</B> means that the window should receive the input
focus as long as it is viewable (it and all of its ancestors are mapped).
An empty value for the option means that the traversal scripts make
the decision about whether or not to focus on the window: the current
algorithm is to skip the window if it is
disabled, if it has no key bindings, or if it is not viewable.
If the value has any other form, then the traversal scripts take
the value, append the name of the window to it (with a separator space),
and evaluate the resulting string as a Tcl script.
The script must return <B>0</B>, <B>1</B>, or an empty string: a
<B>0</B> or <B>1</B> value specifies whether the window will receive
the input focus, and an empty string results in the default decision
described above.
Note: this interpretation of the option is defined entirely by
the Tcl scripts that implement traversal: the widget implementations
ignore the option entirely, so you can change its meaning if you
redefine the keyboard traversal scripts.
<P><DT>Command-Line Name: <B><A NAME="M-text">-text</A></B>
<DT>Database Name: <B><A HREF="../TkCmd/text.htm">text</A></B>
<DT>Database Class: <B><A HREF="../TkCmd/text.htm">Text</A></B>
<DD>Specifies a string to be displayed inside the widget. The way in which
the string is displayed depends on the particular widget and may be
determined by other options, such as <B>anchor</B> or <B>justify</B>.
<P><DT>Command-Line Name: <B><A NAME="M-textvariable">-textvariable</A></B>
<DT>Database Name: <B>textVariable</B>
<DT>Database Class: <B><A HREF="../TclCmd/variable.htm">Variable</A></B>
<DD>Specifies the name of a variable. The value of the variable is a text
string to be displayed inside the widget; if the variable value changes
then the widget will automatically update itself to reflect the new value.
The way in which the string is displayed in the widget depends on the
particular widget and may be determined by other options, such as
<B>anchor</B> or <B>justify</B>.
<P><DT>Command-Line Name: <B><A NAME="M-troughcolor">-troughcolor</A></B>
<DT>Database Name: <B>troughColor</B>
<DT>Database Class: <B>Background</B>
<DD>Specifies the color to use for the rectangular trough areas
in widgets such as scrollbars and scales.
<P><DT>Command-Line Name: <B><A NAME="M-underline">-underline</A></B>
<DT>Database Name: <B>underline</B>
<DT>Database Class: <B>Underline</B>
<DD>Specifies the integer index of a character to underline in the widget.
This option is used by the default bindings to implement keyboard
traversal for menu buttons and menu entries.
0 corresponds to the first character of the text displayed in the
widget, 1 to the next character, and so on.
<P><DT>Command-Line Name: <B><A NAME="M-wraplength">-wraplength</A></B>
<DT>Database Name: <B>wrapLength</B>
<DT>Database Class: <B>WrapLength</B>
<DD>For widgets that can perform word-wrapping, this option specifies
the maximum line length.
Lines that would exceed this length are wrapped onto the next line,
so that no line is longer than the specified length.
The value may be specified in any of the standard forms for
screen distances.
If this value is less than or equal to 0 then no wrapping is done: lines
will break only at newline characters in the text.
<P><DT>Command-Line Name: <B><A NAME="M-xscrollcommand">-xscrollcommand</A></B>
<DT>Database Name: <B>xScrollCommand</B>
<DT>Database Class: <B>ScrollCommand</B>
<DD>Specifies the prefix for a command used to communicate with horizontal
scrollbars.
When the view in the widget's window changes (or
whenever anything else occurs that could change the display in a
scrollbar, such as a change in the total size of the widget's
contents), the widget will
generate a Tcl command by concatenating the scroll command and
two numbers.
Each of the numbers is a fraction between 0 and 1, which indicates
a position in the document. 0 indicates the beginning of the document,
1 indicates the end, .333 indicates a position one third the way through
the document, and so on.
The first fraction indicates the first information in the document
that is visible in the window, and the second fraction indicates
the information just after the last portion that is visible.
The command is
then passed to the Tcl interpreter for execution. Typically the
<B>xScrollCommand</B> option consists of the path name of a scrollbar
widget followed by ``set'', e.g. ``.x.scrollbar set'': this will cause
the scrollbar to be updated whenever the view in the window changes.
If this option is not specified, then no command will be executed.
<P><DT>Command-Line Name: <B><A NAME="M-yscrollcommand">-yscrollcommand</A></B>
<DT>Database Name: <B>yScrollCommand</B>
<DT>Database Class: <B>ScrollCommand</B>
<DD>Specifies the prefix for a command used to communicate with vertical
scrollbars. This option is treated in the same way as the
<B>xScrollCommand</B> option, except that it is used for vertical
scrollbars and is provided by widgets that support vertical scrolling.
See the description of <B>xScrollCommand</B> for details
on how this option is used.
</DL>
<H3><A NAME="M4">KEYWORDS</A></H3>
<A href="../Keywords/C.htm#class">class</A>, <A href="../Keywords/N.htm#name">name</A>, <A href="../Keywords/S.htm#standard option">standard option</A>, <A href="../Keywords/S.htm#switch">switch</A>
<HR><PRE>
<A HREF="../copyright.htm">Copyright</A> &#169; 1990-1994 The Regents of the University of California.
<A HREF="../copyright.htm">Copyright</A> &#169; 1994-1996 Sun Microsystems, Inc.
<A HREF="../copyright.htm">Copyright</A> &#169; 1995-1997 Roger E. Critchlow Jr.</PRE>
</BODY></HTML>

266
lib/bwidget/CHANGES.txt

@ -0,0 +1,266 @@ @@ -0,0 +1,266 @@
____________________________________________________________
BWidget 1.2.1 (07/09/1999)
CHANGES FROM 1.2 TO 1.2.1
This version is the first patch of 1.2. It does not introduce
incompatibilites.
This patch include some new requested features, that I think
can't wait for 1.3:
- special menu handling (see MainFrame)
- tabs bindings in NoteBook
- label alignment of LabelFrame
- -repeatdelay and -repeatinterval options on SpinBox
* Entry
- <Destroy> event added to tag BwDisabledEntry
- fixed bug when -textvariable use a variable containing space
* MainFrame
- fixed bug when -textvariable use a variable containing space
- menubar entry creation modified to use the menuid as the
subpathname to permit special menu (help, system, apple)
* LabelFrame
- LabelFrame::align command added
* ScrollableFrame
- fixed typo bug
* PagesManager
- fixed bug of window size
- 'pages' modified to optionally include first and last indices.
('page' is still available but deprecated)
* NoteBook
- new command 'bindtabs'
- fixed bug in handling result of -leavecmd command
- 'pages' modified to optionally include first and last indices.
('page' is still available but deprecated)
* ComboBox
- little border added around the popdown list, which appeared
to have no border under windows when popped above a widget
with the same background color.
* SpinBox
- options -repeatdelay and -repeatinterval added.
* Tree
- fixed strange behaviour when editing: 'selection range'
replaced by 'selection from'/'selection to'
- widget is redrawn if needed in 'edit' and 'see'
- fixed bug in see
- nodes modified to optionally include first and last indices.
- _subdelete modified to iterative method
* ListBox
- fixed strange behaviour when editing: 'selection range'
replaced by 'selection from'/'selection to'
- ListBox is redrawn if needed in 'edit' and 'see'
- fixed bug in see
- 'items' modified to optionally include first and last indices.
('item' is still available but deprecated)
* SelectColor
- fixed bug in call to GlobalVar::trace renamed GlobalVar::tracevar
* DragSite and DropSite
- fixed bug introduced by new button event.
* DynamicHelp
- restored version of 1.1, due to the bug under windows
* BWidget::place
- fixed bug when x or y is 0.
* es.rc resource file included
____________________________________________________________
BWidget 1.2 (05/21/1999)
CHANGES FROM 1.1 TO 1.2
* 4 new widget:
- ScrollableFrame
- ScrollView
- PagesManager
- PasswdDlg (contributed by Stephane Lavirotte)
* Widget:
- Flag option type added
- option resource database read while widget creation,
not while widget class creation.
- better handling of BWidget definition using another BWidget as a top pathname.
* MainFrame
- more options included for ProgressBar
(INCOMPATIBILITY: option -variable renamed -progressvar)
- -menu option modified to have tags on entries and menu id on cascad menu
(INCOMPATIBILITY of option -menu)
- new command: getmenu
- new command: setmenustate
* DropSite
- operations completly reworked
- option -droptypes modified (INCOMPATIBILITY)
- return code of -dropovercmd modified
bit 'ok' and bit 'recall' reverted
(INCOMPATIBILITY in -dropovercmd command)
- new command: setoperation
* DragSite:
- Drag now initiates while <ButtonPress-x> followed by <Bx-Motion> of
4 pixels, so it is possible to have a <ButtonPress-x> event and
drag event on the same button.
- -dragevent option modified: must be the number of the button: 1, 2 or 3
Option is now defaulted to 1, but Entry widget keep it to 3.
(INCOMPATIBILITY)
- return result of -draginitcmd modified (INCOMPATIBILITY)
* ListBox:
- edit command improved.
new arguments: initial text, and command to verify the text before accept it.
(INCOMPATIBILITY in call to edit)
- Drag and Drop modified
(INCOMPATIBILITY in -dropovercmd command)
- new command: reorder
* Tree:
- edit command improved.
new arguments: initial text, and command to verify the text before accept it.
(INCOMPATIBILITY in call to edit)
- Drag and Drop modified
(INCOMPATIBILITY in -dropovercmd command)
- new command: reorder
- new command: visible
- less full-redraw
* NoteBook:
- relief reworked
- added option -leavecmd on pages
- option -image implemented
- new command: move
- delete command now accept an optionnal argument specifying
whether the frame of the page should be destroyed or not.
If not, this frame is reused by insert command for the same page.
* Entry and LabelEntry:
- direct access to entry command
- bind command added on the entry subwidget
* ComboBox:
- option -postcommand added
- bind command added on the entry subwidget
* SpinBox:
- bind command added on the entry subwidget
- floating point fixed - work needed
* ProgressBar:
- now can be incremental or not limited ('unknow-time' processing)
* Bitmap:
- xpm image type added with use of xpm-to-image by Roger E. Critchlow Jr.
* Lots of focus problem solved
* ...and bugs corrected.
INCOMPATIBILITIES
Incompatibilities are very localized, so we hope that it will
not be painfull to upgrade to 1.2.
* MainFrame related imcompatibilities
- Upgrade MainFrame -menu option and change -variable option
by -progressvar.
* Drag and drop related imcompatibilities
- Upgrade -dragevent option, and command associated to -draginitcmd
and -dropovercmd.
- Upgrade -dragendcmd/-dragovercmd command of Tree and ListBox widget
* Edition in Tree and ListBox
- Verify arguments passed in call to edit command of
Tree and ListBox
____________________________________________________________
BWidget 1.1 (03/12/1999)
CHANGES FROM 1.0 TO 1.1
WHAT'S NEW
The most important change in BWidget 1.1 is the support
of tk path command, but the old syntax is always available.
configure command now returns a valid configuration information list.
(I hope that) All submitted bugs have been corrected.
Following widget have been reworked:
* ListBox:
- ListBox items have now a -indent option.
- insert command modified to look more as a tk
listbox insert command (see INCOMPATIBILITIES)
- item command added to retreive one or more items
* Tree:
- insert command modified to look more as a
listbox insert command (see INCOMPATIBILITIES)
* LabelEntry:
- -value and -variable options renamed to -text and -textvariable
(see INCOMPATIBILITIES)
* SpinBox and ComboBox:
- -value and -variable options renamed to -text and -textvariable
(see INCOMPATIBILITIES)
- New command getvalue and setvalue added to manipulate
current value by index.
* NoteBook:
- Pages have now an identifier.
- insert command modififed (see INCOMPATIBILITIES)
- page command added to retreive one or more pages
- getframe command added
INCOMPATIBILITIES (sorry for this)
* LabelEntry, SpinBox and ComboBox:
- -value and -variable options renamed to -text and -textvariable
* Entry and LabelEntry:
- setfocus doesn't exist anymore. Directly use tk command focus.
* NoteBook:
- Pages have now an identifier, which modifies insert command:
NoteBook::insert $nb index ?option value ...?
is now
$nb insert index page ?option value ...?
* Tree:
- insert command modified:
Tree::insert $nb $parent $node $index ?option value ...?
becomes
$tree insert $index $parent $node ?option value ...?
* ListBox:
- insert command modified:
ListBox::insert $list $item $index ?option value ...?
becomes
$list insert $index $item ?option value ...?
____________________________________________________________
BWidget 1.0 (02/19/1999)
First release.

2148
lib/bwidget/ChangeLog

File diff suppressed because it is too large Load Diff

41
lib/bwidget/LICENSE.txt

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
BWidget ToolKit
Copyright (c) 1998-1999 UNIFIX.
Copyright (c) 2001-2002 ActiveState Corp.
The following terms apply to all files associated with the software
unless explicitly disclaimed in individual files.
The authors hereby grant permission to use, copy, modify, distribute,
and license this software and its documentation for any purpose, provided
that existing copyright notices are retained in all copies and that this
notice is included verbatim in any distributions. No written agreement,
license, or royalty fee is required for any of the authorized uses.
Modifications to this software may be copyrighted by their authors
and need not follow the licensing terms described here, provided that
the new terms are clearly indicated on the first page of each file where
they apply.
IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
MODIFICATIONS.
GOVERNMENT USE: If you are acquiring this software on behalf of the
U.S. government, the Government shall have only "Restricted Rights"
in the software and related documentation as defined in the Federal
Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
are acquiring the software on behalf of the Department of Defense, the
software shall be classified as "Commercial Computer Software" and the
Government shall have only "Restricted Rights" as defined in Clause
252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
authors grant the U.S. Government and others acting in its behalf
permission to use and distribute the software in accordance with the
terms specified in this license.

127
lib/bwidget/README.txt

@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
BWidget ToolKit 1.9.0 July 2009
Copyright (c) 1998-1999 UNIFIX.
Copyright (c) 2001-2002 ActiveState Corp.
See the file LICENSE.txt for license info (uses Tcl's BSD-style license).
--------------------------------------------------------------------------
WHAT IS BWIDGET ?
The BWidget Toolkit is a high-level Widget Set for Tcl/Tk built using
native Tcl/Tk 8.x namespaces.
The BWidgets have a professional look&feel as in other well known
Toolkits (Tix or Incr Widgets), but the concept is radically different
because everything is pure Tcl/Tk. No platform dependencies, and no
compiling required. The code is 100% Pure Tcl/Tk.
The BWidget library was originally developed by UNIFIX Online, and
released under both the GNU Public License and the Tcl license.
BWidget is now maintained as a community project, hosted by
Sourceforge. Scores of fixes and enhancements have been added by
community developers. See the ChangeLog file for details.
--------------------------------------------------------------------------
WIDGET LIST (1.9)
Simple Widgets
Label Extended Label widget
Entry Extended Entry widget
Button Extended Button widget
ArrowButton Button widget with an arrow shape.
ProgressBar Progress indicator widget
ScrollView Display the visible area of a scrolled window
Separator 3D separator widget
Manager Widgets
MainFrame Manage toplevel with menu, toolbar and statusbar
LabelFrame Frame with a Label
TitleFrame Frame with a title
ScrolledWindow Generic scrolled widget
ScrollableFrame Scrollable frame containing widget
PanedWindow Tiled layout manager widget
ButtonBox Set of buttons with horizontal or vertical layout
PagesManager Pages manager widget
NoteBook Notebook manager widget
Dialog Dialog abstraction with custom buttons
Composite Widgets
LabelEntry LabelFrame containing an Entry widget.
ComboBox ComboBox widget
SpinBox SpinBox widget
Tree Tree widget
ListBox ListBox widget
MessageDlg Message dialog box
ProgressDlg Progress indicator dialog box
PasswdDlg Login/Password dialog box (contributed by Stephane Lavirotte)
SelectFont Font selection widget
SelectColor Color selection widget
Commands Classes
Widget The Widget base class
DynamicHelp Provide help to Tk widget or BWidget
DragSite Commands set for Drag facilities
DropSite Commands set for Drop facilities
BWidget Utilities
--------------------------------------------------------------------------
INSTALLATION AND USE
- On Unix Platform:
Uncompress the file BWidget-<version>.tar.Z|gz
To use the BWidget:
- If you have uncompressed the archive file under the Tcl Library Path
directory, you only need to do:
% package require BWidget
- If not, you have to specify the BWidget installation path in auto_path
global variable:
% lappend auto_path <install_path>
% package require BWidget
To launch the demo, you need to cd into the demo subdirectory:
$ cd <install_path>/demo
$ wish demo.tcl
- On Windows and others Platforms:
Uncompress the file BWidget-<version>.zip
To use the BWidget:
- If you uncompressed the archive file under the Tcl Library Path
directory, you only need to do:
% package require BWidget
- If not, you have to specify the BWidget installation path in auto_path
global variable:
% lappend auto_path your_path
% package require BWidget
To launch the demo :
Double click on demo.tcl in the demo subdirectory
Distribution contains these directories:
BWidget-<version> Root directory and BWidget Tcl sources
BWman HTML manual pages
images images used by BWidget
lang Resources for language customization
demo Demo sources
tests BWidgets test suite
--------------------------------------------------------------------------
DOCUMENTATION
HTML manual pages are available in the BWman subdirectory. Point to
index.html for frame version with tree navigation, or to contents.html
for no frame version.
--------------------------------------------------------------------------
CONTACTS
The BWidget toolkit is maintained on Sourceforge, at
http://www.sourceforge.net/projects/tcllib/

551
lib/bwidget/arrow.tcl

@ -0,0 +1,551 @@ @@ -0,0 +1,551 @@
# ------------------------------------------------------------------------------
# arrow.tcl
# This file is part of Unifix BWidget Toolkit
# ------------------------------------------------------------------------------
# Index of commands:
# Public commands
# - ArrowButton::create
# - ArrowButton::configure
# - ArrowButton::cget
# - ArrowButton::invoke
# Private commands (redraw commands)
# - ArrowButton::_redraw
# - ArrowButton::_redraw_state
# - ArrowButton::_redraw_relief
# - ArrowButton::_redraw_whole
# Private commands (event bindings)
# - ArrowButton::_destroy
# - ArrowButton::_enter
# - ArrowButton::_leave
# - ArrowButton::_press
# - ArrowButton::_release
# - ArrowButton::_repeat
# ------------------------------------------------------------------------------
namespace eval ArrowButton {
Widget::define ArrowButton arrow DynamicHelp
Widget::tkinclude ArrowButton button .c \
include [list \
-borderwidth -bd \
-relief -highlightbackground \
-highlightcolor -highlightthickness -takefocus]
Widget::declare ArrowButton [list \
[list -type Enum button 0 [list arrow button]] \
[list -dir Enum top 0 [list top bottom left right]] \
[list -width Int 15 0 "%d >= 0"] \
[list -height Int 15 0 "%d >= 0"] \
[list -ipadx Int 0 0 "%d >= 0"] \
[list -ipady Int 0 0 "%d >= 0"] \
[list -clean Int 2 0 "%d >= 0 && %d <= 2"] \
[list -activeforeground TkResource "" 0 button] \
[list -activebackground TkResource "" 0 button] \
[list -disabledforeground TkResource "" 0 button] \
[list -foreground TkResource "" 0 button] \
[list -background TkResource "" 0 button] \
[list -state TkResource "" 0 button] \
[list -troughcolor TkResource "" 0 scrollbar] \
[list -arrowbd Int 1 0 "%d >= 0 && %d <= 2"] \
[list -arrowrelief Enum raised 0 [list raised sunken]] \
[list -command String "" 0] \
[list -armcommand String "" 0] \
[list -disarmcommand String "" 0] \
[list -repeatdelay Int 0 0 "%d >= 0"] \
[list -repeatinterval Int 0 0 "%d >= 0"] \
[list -fg Synonym -foreground] \
[list -bg Synonym -background] \
]
DynamicHelp::include ArrowButton balloon
bind BwArrowButtonC <Enter> {ArrowButton::_enter %W}
bind BwArrowButtonC <Leave> {ArrowButton::_leave %W}
bind BwArrowButtonC <ButtonPress-1> {ArrowButton::_press %W}
bind BwArrowButtonC <ButtonRelease-1> {ArrowButton::_release %W}
bind BwArrowButtonC <Key-space> {ArrowButton::invoke %W; break}
bind BwArrowButtonC <Return> {ArrowButton::invoke %W; break}
bind BwArrowButton <Configure> {ArrowButton::_redraw_whole %W %w %h}
bind BwArrowButton <Destroy> {ArrowButton::_destroy %W}
variable _grab
variable _moved
array set _grab {current "" pressed "" oldstate "normal" oldrelief ""}
}
# -----------------------------------------------------------------------------
# Command ArrowButton::create
# -----------------------------------------------------------------------------
proc ArrowButton::create { path args } {
# Initialize configuration mappings and parse arguments
array set submaps [list ArrowButton [list ] .c [list ]]
array set submaps [Widget::parseArgs ArrowButton $args]
# Create the class frame (so we can do the option db queries)
frame $path -class ArrowButton -borderwidth 0 -highlightthickness 0
Widget::initFromODB ArrowButton $path $submaps(ArrowButton)
# Create the canvas with the initial options
eval [list canvas $path.c] $submaps(.c)
# Compute the width and height of the canvas from the width/height
# of the ArrowButton and the borderwidth/hightlightthickness.
set w [Widget::getMegawidgetOption $path -width]
set h [Widget::getMegawidgetOption $path -height]
set bd [Widget::cget $path -borderwidth]
set ht [Widget::cget $path -highlightthickness]
set pad [expr {2*($bd+$ht)}]
$path.c configure -width [expr {$w-$pad}] -height [expr {$h-$pad}]
bindtags $path [list $path BwArrowButton [winfo toplevel $path] all]
bindtags $path.c [list $path.c BwArrowButtonC [winfo toplevel $path.c] all]
pack $path.c -expand yes -fill both
DynamicHelp::sethelp $path $path.c 1
set ::ArrowButton::_moved($path) 0
return [Widget::create ArrowButton $path]
}
# -----------------------------------------------------------------------------
# Command ArrowButton::configure
# -----------------------------------------------------------------------------
proc ArrowButton::configure { path args } {
set res [Widget::configure $path $args]
set ch1 [expr {[Widget::hasChanged $path -width w] |
[Widget::hasChanged $path -height h] |
[Widget::hasChanged $path -borderwidth bd] |
[Widget::hasChanged $path -highlightthickness ht]}]
set ch2 [expr {[Widget::hasChanged $path -type val] |
[Widget::hasChanged $path -ipadx val] |
[Widget::hasChanged $path -ipady val] |
[Widget::hasChanged $path -arrowbd val] |
[Widget::hasChanged $path -clean val] |
[Widget::hasChanged $path -dir val]}]
if { $ch1 } {
set pad [expr {2*($bd+$ht)}]
$path.c configure \
-width [expr {$w-$pad}] -height [expr {$h-$pad}] \
-borderwidth $bd -highlightthickness $ht
set ch2 1
}
if { $ch2 } {
_redraw_whole $path [winfo width $path] [winfo height $path]
} else {
_redraw_relief $path
_redraw_state $path
}
DynamicHelp::sethelp $path $path.c
return $res
}
# -----------------------------------------------------------------------------
# Command ArrowButton::cget
# -----------------------------------------------------------------------------
proc ArrowButton::cget { path option } {
return [Widget::cget $path $option]
}
# ------------------------------------------------------------------------------
# Command ArrowButton::invoke
# ------------------------------------------------------------------------------
proc ArrowButton::invoke { path } {
if { ![string equal [winfo class $path] "ArrowButton"] } {
set path [winfo parent $path]
}
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
set oldstate [Widget::getoption $path -state]
if { [string equal [Widget::getoption $path -type] "button"] } {
set oldrelief [Widget::getoption $path -relief]
configure $path -state active -relief sunken
} else {
set oldrelief [Widget::getoption $path -arrowrelief]
configure $path -state active -arrowrelief sunken
}
update idletasks
if {[llength [set cmd [Widget::getoption $path -armcommand]]]} {
uplevel \#0 $cmd
}
after 10
if { [string equal [Widget::getoption $path -type] "button"] } {
configure $path -state $oldstate -relief $oldrelief
} else {
configure $path -state $oldstate -arrowrelief $oldrelief
}
if {[llength [set cmd [Widget::getoption $path -disarmcommand]]]} {
uplevel \#0 $cmd
}
if {[llength [set cmd [Widget::getoption $path -command]]]} {
uplevel \#0 $cmd
}
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_redraw
# ------------------------------------------------------------------------------
proc ArrowButton::_redraw { path width height } {
variable _moved
set _moved($path) 0
set type [Widget::getoption $path -type]
set dir [Widget::getoption $path -dir]
set bd [expr {[$path.c cget -borderwidth] + [$path.c cget -highlightthickness] + 1}]
set clean [Widget::getoption $path -clean]
if { [string equal $type "arrow"] } {
if { [set id [$path.c find withtag rect]] == "" } {
$path.c create rectangle $bd $bd [expr {$width-$bd-1}] [expr {$height-$bd-1}] -tags rect
} else {
$path.c coords $id $bd $bd [expr {$width-$bd-1}] [expr {$height-$bd-1}]
}
$path.c lower rect
set arrbd [Widget::getoption $path -arrowbd]
set bd [expr {$bd+$arrbd-1}]
} else {
$path.c delete rect
}
# w and h are max width and max height of arrow
set w [expr {$width - 2*([Widget::getoption $path -ipadx]+$bd)}]
set h [expr {$height - 2*([Widget::getoption $path -ipady]+$bd)}]
if { $w < 2 } {set w 2}
if { $h < 2 } {set h 2}
if { $clean > 0 } {
# arrange for base to be odd
if { [string equal $dir "top"] || [string equal $dir "bottom"] } {
if { !($w % 2) } {
incr w -1
}
if { $clean == 2 } {
# arrange for h = (w+1)/2
set h2 [expr {($w+1)/2}]
if { $h2 > $h } {
set w [expr {2*$h-1}]
} else {
set h $h2
}
}
} else {
if { !($h % 2) } {
incr h -1
}
if { $clean == 2 } {
# arrange for w = (h+1)/2
set w2 [expr {($h+1)/2}]
if { $w2 > $w } {
set h [expr {2*$w-1}]
} else {
set w $w2
}
}
}
}
set x0 [expr {($width-$w)/2}]
set y0 [expr {($height-$h)/2}]
set x1 [expr {$x0+$w-1}]
set y1 [expr {$y0+$h-1}]
switch $dir {
top {
set xd [expr {($x0+$x1)/2}]
if { [set id [$path.c find withtag poly]] == "" } {
$path.c create polygon $x0 $y1 $x1 $y1 $xd $y0 -tags poly
} else {
$path.c coords $id $x0 $y1 $x1 $y1 $xd $y0
}
if { [string equal $type "arrow"] } {
if { [set id [$path.c find withtag bot]] == "" } {
$path.c create line $x0 $y1 $x1 $y1 $xd $y0 -tags bot
} else {
$path.c coords $id $x0 $y1 $x1 $y1 $xd $y0
}
if { [set id [$path.c find withtag top]] == "" } {
$path.c create line $x0 $y1 $xd $y0 -tags top
} else {
$path.c coords $id $x0 $y1 $xd $y0
}
$path.c itemconfigure top -width $arrbd
$path.c itemconfigure bot -width $arrbd
} else {
$path.c delete top
$path.c delete bot
}
}
bottom {
set xd [expr {($x0+$x1)/2}]
if { [set id [$path.c find withtag poly]] == "" } {
$path.c create polygon $x1 $y0 $x0 $y0 $xd $y1 -tags poly
} else {
$path.c coords $id $x1 $y0 $x0 $y0 $xd $y1
}
if { [string equal $type "arrow"] } {
if { [set id [$path.c find withtag top]] == "" } {
$path.c create line $x1 $y0 $x0 $y0 $xd $y1 -tags top
} else {
$path.c coords $id $x1 $y0 $x0 $y0 $xd $y1
}
if { [set id [$path.c find withtag bot]] == "" } {
$path.c create line $x1 $y0 $xd $y1 -tags bot
} else {
$path.c coords $id $x1 $y0 $xd $y1
}
$path.c itemconfigure top -width $arrbd
$path.c itemconfigure bot -width $arrbd
} else {
$path.c delete top
$path.c delete bot
}
}
left {
set yd [expr {($y0+$y1)/2}]
if { [set id [$path.c find withtag poly]] == "" } {
$path.c create polygon $x1 $y0 $x1 $y1 $x0 $yd -tags poly
} else {
$path.c coords $id $x1 $y0 $x1 $y1 $x0 $yd
}
if { [string equal $type "arrow"] } {
if { [set id [$path.c find withtag bot]] == "" } {
$path.c create line $x1 $y0 $x1 $y1 $x0 $yd -tags bot
} else {
$path.c coords $id $x1 $y0 $x1 $y1 $x0 $yd
}
if { [set id [$path.c find withtag top]] == "" } {
$path.c create line $x1 $y0 $x0 $yd -tags top
} else {
$path.c coords $id $x1 $y0 $x0 $yd
}
$path.c itemconfigure top -width $arrbd
$path.c itemconfigure bot -width $arrbd
} else {
$path.c delete top
$path.c delete bot
}
}
right {
set yd [expr {($y0+$y1)/2}]
if { [set id [$path.c find withtag poly]] == "" } {
$path.c create polygon $x0 $y1 $x0 $y0 $x1 $yd -tags poly
} else {
$path.c coords $id $x0 $y1 $x0 $y0 $x1 $yd
}
if { [string equal $type "arrow"] } {
if { [set id [$path.c find withtag top]] == "" } {
$path.c create line $x0 $y1 $x0 $y0 $x1 $yd -tags top
} else {
$path.c coords $id $x0 $y1 $x0 $y0 $x1 $yd
}
if { [set id [$path.c find withtag bot]] == "" } {
$path.c create line $x0 $y1 $x1 $yd -tags bot
} else {
$path.c coords $id $x0 $y1 $x1 $yd
}
$path.c itemconfigure top -width $arrbd
$path.c itemconfigure bot -width $arrbd
} else {
$path.c delete top
$path.c delete bot
}
}
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_redraw_state
# ------------------------------------------------------------------------------
proc ArrowButton::_redraw_state { path } {
set state [Widget::getoption $path -state]
if { [string equal [Widget::getoption $path -type] "button"] } {
switch $state {
normal {set bg -background; set fg -foreground}
active {set bg -activebackground; set fg -activeforeground}
disabled {set bg -background; set fg -disabledforeground}
}
set fg [Widget::getoption $path $fg]
$path.c configure -background [Widget::getoption $path $bg]
$path.c itemconfigure poly -fill $fg -outline $fg
} else {
switch $state {
normal {set stipple ""; set bg [Widget::getoption $path -background] }
active {set stipple ""; set bg [Widget::getoption $path -activebackground] }
disabled {set stipple gray50; set bg black }
}
set thrc [Widget::getoption $path -troughcolor]
$path.c configure -background [Widget::getoption $path -background]
$path.c itemconfigure rect -fill $thrc -outline $thrc
$path.c itemconfigure poly -fill $bg -outline $bg -stipple $stipple
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_redraw_relief
# ------------------------------------------------------------------------------
proc ArrowButton::_redraw_relief { path } {
variable _moved
if { [string equal [Widget::getoption $path -type] "button"] } {
if { [string equal [Widget::getoption $path -relief] "sunken"] } {
if { !$_moved($path) } {
$path.c move poly 1 1
set _moved($path) 1
}
} else {
if { $_moved($path) } {
$path.c move poly -1 -1
set _moved($path) 0
}
}
} else {
set col3d [BWidget::get3dcolor $path [Widget::getoption $path -background]]
switch [Widget::getoption $path -arrowrelief] {
raised {set top [lindex $col3d 1]; set bot [lindex $col3d 0]}
sunken {set top [lindex $col3d 0]; set bot [lindex $col3d 1]}
}
$path.c itemconfigure top -fill $top
$path.c itemconfigure bot -fill $bot
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_redraw_whole
# ------------------------------------------------------------------------------
proc ArrowButton::_redraw_whole { path width height } {
_redraw $path $width $height
_redraw_relief $path
_redraw_state $path
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_enter
# ------------------------------------------------------------------------------
proc ArrowButton::_enter { path } {
variable _grab
set path [winfo parent $path]
set _grab(current) $path
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
set _grab(oldstate) [Widget::getoption $path -state]
configure $path -state active
if { $_grab(pressed) == $path } {
if { [string equal [Widget::getoption $path -type] "button"] } {
set _grab(oldrelief) [Widget::getoption $path -relief]
configure $path -relief sunken
} else {
set _grab(oldrelief) [Widget::getoption $path -arrowrelief]
configure $path -arrowrelief sunken
}
}
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_leave
# ------------------------------------------------------------------------------
proc ArrowButton::_leave { path } {
variable _grab
set path [winfo parent $path]
set _grab(current) ""
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
configure $path -state $_grab(oldstate)
if { $_grab(pressed) == $path } {
if { [string equal [Widget::getoption $path -type] "button"] } {
configure $path -relief $_grab(oldrelief)
} else {
configure $path -arrowrelief $_grab(oldrelief)
}
}
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_press
# ------------------------------------------------------------------------------
proc ArrowButton::_press { path } {
variable _grab
set path [winfo parent $path]
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
set _grab(pressed) $path
if { [string equal [Widget::getoption $path -type] "button"] } {
set _grab(oldrelief) [Widget::getoption $path -relief]
configure $path -relief sunken
} else {
set _grab(oldrelief) [Widget::getoption $path -arrowrelief]
configure $path -arrowrelief sunken
}
if {[llength [set cmd [Widget::getoption $path -armcommand]]]} {
uplevel \#0 $cmd
if { [set delay [Widget::getoption $path -repeatdelay]] > 0 ||
[set delay [Widget::getoption $path -repeatinterval]] > 0 } {
after $delay [list ArrowButton::_repeat $path]
}
}
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_release
# ------------------------------------------------------------------------------
proc ArrowButton::_release { path } {
variable _grab
set path [winfo parent $path]
if { $_grab(pressed) == $path } {
set _grab(pressed) ""
if { [string equal [Widget::getoption $path -type] "button"] } {
configure $path -relief $_grab(oldrelief)
} else {
configure $path -arrowrelief $_grab(oldrelief)
}
if {[llength [set cmd [Widget::getoption $path -disarmcommand]]]} {
uplevel \#0 $cmd
}
if { $_grab(current) == $path &&
![string equal [Widget::getoption $path -state] "disabled"] &&
[llength [set cmd [Widget::getoption $path -command]]]} {
uplevel \#0 $cmd
}
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_repeat
# ------------------------------------------------------------------------------
proc ArrowButton::_repeat { path } {
variable _grab
if { $_grab(current) == $path && $_grab(pressed) == $path &&
![string equal [Widget::getoption $path -state] "disabled"] &&
[llength [set cmd [Widget::getoption $path -armcommand]]]} {
uplevel \#0 $cmd
}
if { $_grab(pressed) == $path &&
([set delay [Widget::getoption $path -repeatinterval]] > 0 ||
[set delay [Widget::getoption $path -repeatdelay]] > 0) } {
after $delay [list ArrowButton::_repeat $path]
}
}
# ------------------------------------------------------------------------------
# Command ArrowButton::_destroy
# ------------------------------------------------------------------------------
proc ArrowButton::_destroy { path } {
variable _moved
Widget::destroy $path
unset _moved($path)
}

94
lib/bwidget/bitmap.tcl

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
# ------------------------------------------------------------------------------
# bitmap.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: bitmap.tcl,v 1.4 2003/10/20 21:23:52 damonc Exp $
# ------------------------------------------------------------------------------
# Index of commands:
# - Bitmap::get
# - Bitmap::_init
# ----------------------------------------------------------------------------
namespace eval Bitmap {
Widget::define Bitmap bitmap -classonly
variable path
variable _bmp
variable _types {
photo .gif
photo .ppm
bitmap .xbm
photo .xpm
}
proc use {} {}
}
# ----------------------------------------------------------------------------
# Command Bitmap::get
# ----------------------------------------------------------------------------
proc Bitmap::get { name } {
variable path
variable _bmp
variable _types
if {[info exists _bmp($name)]} {
return $_bmp($name)
}
# --- Nom de fichier avec extension ---------------------------------
set ext [file extension $name]
if { $ext != "" } {
if { ![info exists _bmp($ext)] } {
error "$ext not supported"
}
if { [file exists $name] } {
if {[string equal $ext ".xpm"]} {
set _bmp($name) [xpm-to-image $name]
return $_bmp($name)
}
if {![catch {set _bmp($name) [image create $_bmp($ext) -file $name]}]} {
return $_bmp($name)
}
}
}
foreach dir $path {
foreach {type ext} $_types {
if { [file exists [file join $dir $name$ext]] } {
if {[string equal $ext ".xpm"]} {
set _bmp($name) [xpm-to-image [file join $dir $name$ext]]
return $_bmp($name)
} else {
if {![catch {set _bmp($name) [image create $type -file [file join $dir $name$ext]]}]} {
return $_bmp($name)
}
}
}
}
}
return -code error "$name not found"
}
# ----------------------------------------------------------------------------
# Command Bitmap::_init
# ----------------------------------------------------------------------------
proc Bitmap::_init { } {
global env
variable path
variable _bmp
variable _types
set path [list "." [file join $::BWIDGET::LIBRARY images]]
set supp [image types]
foreach {type ext} $_types {
if { [lsearch $supp $type] != -1} {
set _bmp($ext) $type
}
}
}
Bitmap::_init

393
lib/bwidget/button.tcl

@ -0,0 +1,393 @@ @@ -0,0 +1,393 @@
# ----------------------------------------------------------------------------
# button.tcl
# This file is part of Unifix BWidget Toolkit
# ----------------------------------------------------------------------------
# Index of commands:
# Public commands
# - Button::create
# - Button::configure
# - Button::cget
# - Button::invoke
# Private commands (event bindings)
# - Button::_destroy
# - Button::_enter
# - Button::_leave
# - Button::_press
# - Button::_release
# - Button::_repeat
# ----------------------------------------------------------------------------
namespace eval Button {
Widget::define Button button DynamicHelp
set remove [list -command -relief -text -textvariable -underline -state]
if {[info tclversion] > 8.3} {
lappend remove -repeatdelay -repeatinterval
}
Widget::tkinclude Button button :cmd remove $remove
Widget::declare Button {
{-name String "" 0}
{-text String "" 0}
{-textvariable String "" 0}
{-underline Int -1 0 "%d >= -1"}
{-armcommand String "" 0}
{-disarmcommand String "" 0}
{-command String "" 0}
{-state TkResource "" 0 button}
{-repeatdelay Int 0 0 "%d >= 0"}
{-repeatinterval Int 0 0 "%d >= 0"}
{-relief Enum raised 0 {raised sunken flat ridge solid groove link}}
}
DynamicHelp::include Button balloon
Widget::syncoptions Button "" :cmd {-text {} -underline {}}
variable _current ""
variable _pressed ""
bind BwButton <Enter> {Button::_enter %W}
bind BwButton <Leave> {Button::_leave %W}
bind BwButton <ButtonPress-1> {Button::_press %W}
bind BwButton <ButtonRelease-1> {Button::_release %W}
bind BwButton <Key-space> {Button::invoke %W; break}
bind BwButton <Return> {Button::invoke %W; break}
bind BwButton <<Invoke>> {Button::invoke %W; break}
bind BwButton <Destroy> {Widget::destroy %W}
}
# ----------------------------------------------------------------------------
# Command Button::create
# ----------------------------------------------------------------------------
proc Button::create { path args } {
array set maps [list Button {} :cmd {}]
array set maps [Widget::parseArgs Button $args]
if {$::Widget::_theme} {
eval [concat [list ttk::button $path] $maps(:cmd)]
} else {
eval [concat [list button $path] $maps(:cmd)]
}
Widget::initFromODB Button $path $maps(Button)
# Do some extra configuration on the button
set var [Widget::getMegawidgetOption $path -textvariable]
set st [Widget::getMegawidgetOption $path -state]
if { ![string length $var] } {
set desc [BWidget::getname [Widget::getMegawidgetOption $path -name]]
if { [llength $desc] } {
set text [lindex $desc 0]
set under [lindex $desc 1]
Widget::configure $path [list -text $text]
Widget::configure $path [list -underline $under]
} else {
set text [Widget::getMegawidgetOption $path -text]
set under [Widget::getMegawidgetOption $path -underline]
}
} else {
set under -1
set text ""
Widget::configure $path [list -underline $under]
}
$path configure -text $text -underline $under \
-textvariable $var -state $st
# Map relief flat on Toolbutton for ttk
set relief [Widget::getMegawidgetOption $path -relief]
if {$::Widget::_theme} {
if { [string equal $relief "link"] } {
$path configure -style Toolbutton
}
} else {
if { [string equal $relief "link"] } {
set relief "flat"
}
$path configure -relief $relief
}
bindtags $path [list $path BwButton [winfo toplevel $path] all]
set accel1 [string tolower [string index $text $under]]
set accel2 [string toupper $accel1]
if { $accel1 != "" } {
bind [winfo toplevel $path] <Alt-$accel1> [list Button::invoke $path]
bind [winfo toplevel $path] <Alt-$accel2> [list Button::invoke $path]
}
DynamicHelp::sethelp $path $path 1
return [Widget::create Button $path]
}
# ----------------------------------------------------------------------------
# Command Button::configure
# ----------------------------------------------------------------------------
proc Button::configure { path args } {
set oldunder [$path:cmd cget -underline]
if { $oldunder != -1 } {
set oldaccel1 [string tolower [string index [$path:cmd cget -text] $oldunder]]
set oldaccel2 [string toupper $oldaccel1]
} else {
set oldaccel1 ""
set oldaccel2 ""
}
set res [Widget::configure $path $args]
# Extract all the modified bits we're interested in
foreach {cr cs cv cn ct cu} [Widget::hasChangedX $path \
-relief -state -textvariable -name -text -underline] break
if { $cr || $cs } {
set relief [Widget::cget $path -relief]
set state [Widget::cget $path -state]
if { $::Widget::_theme} {
if { [string equal $relief "link"] } {
$path:cmd configure -style Toolbutton
} else {
$path:cmd configure -style ""
}
} else {
if { [string equal $relief "link"] } {
if { [string equal $state "active"] } {
set relief "raised"
} else {
set relief "flat"
}
}
$path:cmd configure -relief $relief
}
$path:cmd configure -state $state
}
if { $cv || $cn || $ct || $cu } {
set var [Widget::cget $path -textvariable]
set text [Widget::cget $path -text]
set under [Widget::cget $path -underline]
if { ![string length $var] } {
set desc [BWidget::getname [Widget::cget $path -name]]
if { [llength $desc] } {
set text [lindex $desc 0]
set under [lindex $desc 1]
}
} else {
set under -1
set text ""
}
set top [winfo toplevel $path]
if { $oldaccel1 != "" } {
bind $top <Alt-$oldaccel1> {}
bind $top <Alt-$oldaccel2> {}
}
set accel1 [string tolower [string index $text $under]]
set accel2 [string toupper $accel1]
if { $accel1 != "" } {
bind $top <Alt-$accel1> [list Button::invoke $path]
bind $top <Alt-$accel2> [list Button::invoke $path]
}
$path:cmd configure -text $text -underline $under -textvariable $var
}
DynamicHelp::sethelp $path $path
set res
}
# ----------------------------------------------------------------------------
# Command Button::cget
# ----------------------------------------------------------------------------
proc Button::cget { path option } {
Widget::cget $path $option
}
# ----------------------------------------------------------------------------
# Command Button::identify
# ----------------------------------------------------------------------------
proc Button::identify { path args } {
eval $path:cmd identify $args
}
# ----------------------------------------------------------------------------
# Command Button::instate
# ----------------------------------------------------------------------------
proc Button::instate { path args } {
eval $path:cmd instate $args
}
# ----------------------------------------------------------------------------
# Command Button::state
# ----------------------------------------------------------------------------
proc Button::state { path args } {
eval $path:cmd state $args
}
# ----------------------------------------------------------------------------
# Command Button::invoke
# ----------------------------------------------------------------------------
proc Button::invoke { path } {
if { ![string equal [$path:cmd cget -state] "disabled"] } {
if { $::Widget::_theme} {
$path:cmd configure -state active
$path:cmd state pressed
} else {
$path:cmd configure -state active -relief sunken
}
update idletasks
set cmd [Widget::getMegawidgetOption $path -armcommand]
if { $cmd != "" } {
uplevel \#0 $cmd
}
after 100
$path:cmd configure -state [Widget::getMegawidgetOption $path -state]
if { $::Widget::_theme} {
$path:cmd state !pressed
} else {
set relief [Widget::getMegawidgetOption $path -relief]
if { [string equal $relief "link"] } {
set relief flat
}
$path:cmd configure -relief $relief
}
set cmd [Widget::getMegawidgetOption $path -disarmcommand]
if { $cmd != "" } {
uplevel \#0 $cmd
}
set cmd [Widget::getMegawidgetOption $path -command]
if { $cmd != "" } {
uplevel \#0 $cmd
}
}
}
# ----------------------------------------------------------------------------
# Command Button::_enter
# ----------------------------------------------------------------------------
proc Button::_enter { path } {
variable _current
variable _pressed
set _current $path
if { ![string equal [$path:cmd cget -state] "disabled"] } {
$path:cmd configure -state active
if { $::Widget::_theme } {
# $path:cmd state active
} else {
if { $_pressed == $path } {
$path:cmd configure -relief sunken
} elseif { [string equal [Widget::cget $path -relief] "link"] } {
$path:cmd configure -relief raised
}
}
}
}
# ----------------------------------------------------------------------------
# Command Button::_leave
# ----------------------------------------------------------------------------
proc Button::_leave { path } {
variable _current
variable _pressed
set _current ""
if { ![string equal [$path:cmd cget -state] "disabled"] } {
$path:cmd configure -state [Widget::cget $path -state]
if { $::Widget::_theme } {
} else {
set relief [Widget::cget $path -relief]
if { $_pressed == $path } {
if { [string equal $relief "link"] } {
set relief raised
}
$path:cmd configure -relief $relief
} elseif { [string equal $relief "link"] } {
$path:cmd configure -relief flat
}
}
}
}
# ----------------------------------------------------------------------------
# Command Button::_press
# ----------------------------------------------------------------------------
proc Button::_press { path } {
variable _pressed
if { ![string equal [$path:cmd cget -state] "disabled"] } {
set _pressed $path
if { $::Widget::_theme} {
ttk::clickToFocus $path
$path state pressed
} else {
$path:cmd configure -relief sunken
}
set cmd [Widget::getMegawidgetOption $path -armcommand]
if { $cmd != "" } {
uplevel \#0 $cmd
set repeatdelay [Widget::getMegawidgetOption $path -repeatdelay]
set repeatint [Widget::getMegawidgetOption $path -repeatinterval]
if { $repeatdelay > 0 } {
after $repeatdelay "Button::_repeat $path"
} elseif { $repeatint > 0 } {
after $repeatint "Button::_repeat $path"
}
}
}
}
# ----------------------------------------------------------------------------
# Command Button::_release
# ----------------------------------------------------------------------------
proc Button::_release { path } {
variable _current
variable _pressed
if { $_pressed == $path } {
set _pressed ""
after cancel "Button::_repeat $path"
if { $::Widget::_theme} {
$path state !pressed
} else {
set relief [Widget::getMegawidgetOption $path -relief]
if { [string equal $relief "link"] } {
set relief raised
}
$path:cmd configure -relief $relief
}
set cmd [Widget::getMegawidgetOption $path -disarmcommand]
if { $cmd != "" } {
uplevel \#0 $cmd
}
if { $_current == $path &&
![string equal [$path:cmd cget -state] "disabled"] && \
[set cmd [Widget::getMegawidgetOption $path -command]] != "" } {
uplevel \#0 $cmd
}
}
}
# ----------------------------------------------------------------------------
# Command Button::_repeat
# ----------------------------------------------------------------------------
proc Button::_repeat { path } {
variable _current
variable _pressed
if { $_current == $path && $_pressed == $path &&
![string equal [$path:cmd cget -state] "disabled"] &&
[set cmd [Widget::getMegawidgetOption $path -armcommand]] != "" } {
uplevel \#0 $cmd
}
if { $_pressed == $path &&
([set delay [Widget::getMegawidgetOption $path -repeatinterval]] >0 ||
[set delay [Widget::getMegawidgetOption $path -repeatdelay]] > 0) } {
after $delay "Button::_repeat $path"
}
}

419
lib/bwidget/buttonbox.tcl

@ -0,0 +1,419 @@ @@ -0,0 +1,419 @@
# ----------------------------------------------------------------------------
# buttonbox.tcl
# This file is part of Unifix BWidget Toolkit
# ----------------------------------------------------------------------------
# Index of commands:
# - ButtonBox::create
# - ButtonBox::configure
# - ButtonBox::cget
# - ButtonBox::add
# - ButtonBox::itemconfigure
# - ButtonBox::itemcget
# - ButtonBox::setfocus
# - ButtonBox::invoke
# - ButtonBox::index
# - ButtonBox::_destroy
# ----------------------------------------------------------------------------
namespace eval ButtonBox {
Widget::define ButtonBox buttonbox Button
Widget::declare ButtonBox {
{-background TkResource "" 0 frame}
{-orient Enum horizontal 1 {horizontal vertical}}
{-state Enum "normal" 0 {normal disabled}}
{-homogeneous Boolean 1 1}
{-spacing Int 10 0 "%d >= 0"}
{-padx TkResource "" 0 button}
{-pady TkResource "" 0 button}
{-default Int -1 0 "%d >= -1"}
{-bg Synonym -background}
}
Widget::addmap ButtonBox "" :cmd {-background {}}
bind ButtonBox <Destroy> [list ButtonBox::_destroy %W]
}
# ----------------------------------------------------------------------------
# Command ButtonBox::create
# ----------------------------------------------------------------------------
proc ButtonBox::create { path args } {
Widget::init ButtonBox $path $args
variable $path
upvar 0 $path data
eval [list frame $path] [Widget::subcget $path :cmd] \
[list -class ButtonBox -takefocus 0 -highlightthickness 0]
# For 8.4+ we don't want to inherit the padding
catch {$path configure -padx 0 -pady 0}
set data(max) 0
set data(nbuttons) 0
set data(buttons) [list]
set data(default) [Widget::getoption $path -default]
return [Widget::create ButtonBox $path]
}
# ----------------------------------------------------------------------------
# Command ButtonBox::configure
# ----------------------------------------------------------------------------
proc ButtonBox::configure { path args } {
variable $path
upvar 0 $path data
set res [Widget::configure $path $args]
if { [Widget::hasChanged $path -default val] } {
if { $data(default) != -1 && $val != -1 } {
set but $path.b$data(default)
if { [winfo exists $but] } {
$but configure -default normal
}
set but $path.b$val
if { [winfo exists $but] } {
$but configure -default active
}
set data(default) $val
} else {
Widget::setoption $path -default $data(default)
}
}
if {[Widget::hasChanged $path -state val]} {
foreach i $data(buttons) {
$path.b$i configure -state $val
}
}
return $res
}
# ----------------------------------------------------------------------------
# Command ButtonBox::cget
# ----------------------------------------------------------------------------
proc ButtonBox::cget { path option } {
return [Widget::cget $path $option]
}
# ----------------------------------------------------------------------------
# Command ButtonBox::add
# ----------------------------------------------------------------------------
proc ButtonBox::add { path args } {
return [eval [linsert $args 0 insert $path end]]
}
proc ButtonBox::insert { path idx args } {
variable $path
upvar 0 $path data
set but $path.b$data(nbuttons)
set spacing [Widget::getoption $path -spacing]
## Save the current spacing setting for this button. Buttons
## appended to the end of the box have their spacing applied
## to their left while all other have their spacing applied
## to their right.
if {$idx == "end"} {
set data(spacing,$data(nbuttons)) [list left $spacing]
lappend data(buttons) $data(nbuttons)
} else {
set data(spacing,$data(nbuttons)) [list right $spacing]
set data(buttons) [linsert $data(buttons) $idx $data(nbuttons)]
}
if { $data(nbuttons) == $data(default) } {
set style active
} elseif { $data(default) == -1 } {
set style disabled
} else {
set style normal
}
array set flags $args
set tags ""
if { [info exists flags(-tags)] } {
set tags $flags(-tags)
unset flags(-tags)
set args [array get flags]
}
if { $::Widget::_theme} {
eval [list Button::create $but] \
$args [list -default $style]
} else {
eval [list Button::create $but \
-background [Widget::getoption $path -background]\
-padx [Widget::getoption $path -padx] \
-pady [Widget::getoption $path -pady]] \
$args [list -default $style]
}
# ericm@scriptics.com: set up tags, just like the menu items
foreach tag $tags {
lappend data(tags,$tag) $but
if { ![info exists data(tagstate,$tag)] } {
set data(tagstate,$tag) 0
}
}
set data(buttontags,$but) $tags
# ericm@scriptics.com
_redraw $path
incr data(nbuttons)
return $but
}
proc ButtonBox::delete { path idx } {
variable $path
upvar 0 $path data
set i [lindex $data(buttons) $idx]
set data(buttons) [lreplace $data(buttons) $idx $idx]
destroy $path.b$i
}
# ButtonBox::setbuttonstate --
#
# Set the state of a given button tag. If this makes any buttons
# enable-able (ie, all of their tags are TRUE), enable them.
#
# Arguments:
# path the button box widget name
# tag the tag to modify
# state the new state of $tag (0 or 1)
#
# Results:
# None.
proc ButtonBox::setbuttonstate {path tag state} {
variable $path
upvar 0 $path data
# First see if this is a real tag
if { [info exists data(tagstate,$tag)] } {
set data(tagstate,$tag) $state
foreach but $data(tags,$tag) {
set expression "1"
foreach buttontag $data(buttontags,$but) {
append expression " && $data(tagstate,$buttontag)"
}
if { [expr $expression] } {
set state normal
} else {
set state disabled
}
$but configure -state $state
}
}
return
}
# ButtonBox::getbuttonstate --
#
# Retrieve the state of a given button tag.
#
# Arguments:
# path the button box widget name
# tag the tag to modify
#
# Results:
# None.
proc ButtonBox::getbuttonstate {path tag} {
variable $path
upvar 0 $path data
# First see if this is a real tag
if { [info exists data(tagstate,$tag)] } {
return $data(tagstate,$tag)
} else {
error "unknown tag $tag"
}
}
# ----------------------------------------------------------------------------
# Command ButtonBox::itemconfigure
# ----------------------------------------------------------------------------
proc ButtonBox::itemconfigure { path index args } {
if { [set idx [lsearch $args -default]] != -1 } {
set args [lreplace $args $idx [expr {$idx+1}]]
}
return [eval [list Button::configure $path.b[index $path $index]] $args]
}
# ----------------------------------------------------------------------------
# Command ButtonBox::itemcget
# ----------------------------------------------------------------------------
proc ButtonBox::itemcget { path index option } {
return [Button::cget $path.b[index $path $index] $option]
}
# ----------------------------------------------------------------------------
# Command ButtonBox::setfocus
# ----------------------------------------------------------------------------
proc ButtonBox::setfocus { path index } {
set but $path.b[index $path $index]
if { [winfo exists $but] } {
focus $but
}
}
# ----------------------------------------------------------------------------
# Command ButtonBox::invoke
# ----------------------------------------------------------------------------
proc ButtonBox::invoke { path index } {
set but $path.b[index $path $index]
if { [winfo exists $but] } {
Button::invoke $but
}
}
# ----------------------------------------------------------------------------
# Command ButtonBox::index
# ----------------------------------------------------------------------------
proc ButtonBox::index { path index } {
variable $path
upvar 0 $path data
set n [expr {$data(nbuttons) - 1}]
if {[string equal $index "default"]} {
set res [Widget::getoption $path -default]
} elseif {$index == "end" || $index == "last"} {
set res $n
} elseif {![string is integer -strict $index]} {
## It's not an integer. Search the text of each button
## in the box and return the index that matches.
foreach i $data(buttons) {
set w $path.b$i
lappend text [$w cget -text]
lappend names [$w cget -name]
}
set res [lsearch -exact [concat $names $text] $index]
} else {
set res $index
if {$index > $n} { set res $n }
}
return $res
}
# ButtonBox::gettags --
#
# Return a list of all the tags on all the buttons in a buttonbox.
#
# Arguments:
# path the buttonbox to query.
#
# Results:
# taglist a list of tags on the buttons in the buttonbox
proc ButtonBox::gettags {path} {
upvar ::ButtonBox::$path data
set taglist {}
foreach tag [array names data "tags,*"] {
lappend taglist [string range $tag 5 end]
}
return $taglist
}
# ----------------------------------------------------------------------------
# Command ButtonBox::_redraw
# ----------------------------------------------------------------------------
proc ButtonBox::_redraw { path } {
variable $path
upvar 0 $path data
Widget::getVariable $path buttons
# For tk >= 8.4, -uniform gridding option is used.
# Otherwise, there is the constraint, that button size may not change after
# creation.
set uniformAvailable [expr {0 <= [package vcompare [info patchlevel] 8.4.0]}]
## We re-grid the buttons from left-to-right. As we go through
## each button, we check its spacing and which direction the
## spacing applies to. Once spacing has been applied to an index,
## it is not changed. This means spacing takes precedence from
## left-to-right.
set idx 0
set idxs [list]
foreach i $data(buttons) {
set dir [lindex $data(spacing,$i) 0]
set spacing [lindex $data(spacing,$i) 1]
set but $path.b$i
if {[string equal [Widget::getoption $path -orient] "horizontal"]} {
grid $but -column $idx -row 0 -sticky nsew
if { [Widget::getoption $path -homogeneous] } {
if {$uniformAvailable} {
grid columnconfigure $path $idx -uniform koen -weight 1
} else {
set req [winfo reqwidth $but]
if { $req > $data(max) } {
grid columnconfigure $path [expr {2*$i}] -minsize $req
set data(max) $req
}
grid columnconfigure $path $idx -weight 1
}
} else {
grid columnconfigure $path $idx -weight 0
}
set col [expr {$idx - 1}]
if {[string equal $dir "right"]} { set col [expr {$idx + 1}] }
if {$col > 0 && [lsearch $idxs $col] < 0} {
lappend idxs $col
grid columnconfigure $path $col -minsize $spacing
}
} else {
grid $but -column 0 -row $idx -sticky nsew
grid rowconfigure $path $idx -weight 0
set row [expr {$idx - 1}]
if {[string equal $dir "right"]} { set row [expr {$idx + 1}] }
if {$row > 0 && [lsearch $idxs $row] < 0} {
lappend idxs $row
grid rowconfigure $path $row -minsize $spacing
}
}
incr idx 2
}
if {!$uniformAvailable} {
# Now that the maximum size has been calculated, go back through
# and correctly set the size for homogeneous horizontal buttons.
if { [string equal [Widget::getoption $path -orient] "horizontal"] && [Widget::getoption $path -homogeneous] } {
set idx 0
foreach i $data(buttons) {
grid columnconfigure $path $idx -minsize $data(max)
incr idx 2
}
}
}
}
# ----------------------------------------------------------------------------
# Command ButtonBox::_destroy
# ----------------------------------------------------------------------------
proc ButtonBox::_destroy { path } {
variable $path
upvar 0 $path data
Widget::destroy $path
unset data
}

493
lib/bwidget/color.tcl

@ -0,0 +1,493 @@ @@ -0,0 +1,493 @@
namespace eval SelectColor {
Widget::define SelectColor color Dialog
Widget::declare SelectColor {
{-title String "Select a color" 0}
{-parent String "" 0}
{-color TkResource "" 0 {label -background}}
{-type Enum "dialog" 1 {dialog popup}}
{-placement String "center" 1}
}
variable _baseColors {
\#0000ff \#00ff00 \#00ffff \#ff0000 \#ff00ff \#ffff00
\#000099 \#009900 \#009999 \#990000 \#990099 \#999900
\#000000 \#333333 \#666666 \#999999 \#cccccc \#ffffff
}
variable _userColors {
\#ffffff \#ffffff \#ffffff \#ffffff \#ffffff \#ffffff
\#ffffff \#ffffff \#ffffff \#ffffff \#ffffff
}
if {[string equal $::tcl_platform(platform) "unix"]} {
set useTkDialogue 0
} else {
set useTkDialogue 1
}
variable _selectype
variable _selection
variable _wcolor
variable _image
variable _hsv
}
proc SelectColor::create { path args } {
Widget::init SelectColor $path $args
set type [Widget::cget $path -type]
switch -- [Widget::cget $path -type] {
"dialog" {
return [eval [list SelectColor::dialog $path] $args]
}
"popup" {
set list [list at center left right above below]
set placement [Widget::cget $path -placement]
set where [lindex $placement 0]
if {[lsearch $list $where] < 0} {
return -code error \
[BWidget::badOptionString placement $placement $list]
}
## If they specified a parent and didn't pass a second argument
## in the placement, set the placement relative to the parent.
set parent [Widget::cget $path -parent]
if {[string length $parent]} {
if {[llength $placement] == 1} { lappend placement $parent }
}
return [eval [list SelectColor::menu $path $placement] $args]
}
}
}
proc SelectColor::menu {path placement args} {
variable _baseColors
variable _userColors
variable _wcolor
variable _selectype
variable _selection
Widget::init SelectColor $path $args
set top [toplevel $path]
set parent [winfo toplevel [winfo parent $top]]
wm withdraw $top
wm transient $top $parent
wm overrideredirect $top 1
catch { wm attributes $top -topmost 1 }
set frame [frame $top.frame \
-highlightthickness 0 \
-relief raised -borderwidth 2]
set col 0
set row 0
set count 0
set colors [concat $_baseColors $_userColors]
foreach color $colors {
set f [frame $frame.c$count \
-highlightthickness 2 \
-highlightcolor white \
-relief solid -borderwidth 1 \
-width 16 -height 16 -background $color]
bind $f <1> "set SelectColor::_selection $count; break"
bind $f <Enter> {focus %W}
grid $f -column $col -row $row
incr count
if {[incr col] == 6 } {
set col 0
incr row
}
}
set f [label $frame.c$count \
-highlightthickness 2 \
-highlightcolor white \
-relief flat -borderwidth 0 \
-width 16 -height 16 -image [Bitmap::get palette]]
grid $f -column $col -row $row
bind $f <1> "set SelectColor::_selection $count; break"
bind $f <Enter> {focus %W}
pack $frame
bind $top <1> {set SelectColor::_selection -1}
bind $top <Escape> {set SelectColor::_selection -2}
bind $top <FocusOut> [subst {if {"%W" == "$top"} \
{set SelectColor::_selection -2}}]
eval [list BWidget::place $top 0 0] $placement
wm deiconify $top
raise $top
if {$::tcl_platform(platform) == "unix"} {
tkwait visibility $top
update
}
BWidget::SetFocusGrab $top $frame.c0
vwait SelectColor::_selection
BWidget::RestoreFocusGrab $top $frame.c0 destroy
Widget::destroy $top
if {$_selection == $count} {
array set opts {
-parent -parent
-title -title
-color -initialcolor
}
if {[Widget::theme]} {
set native 1
set nativecmd [list tk_chooseColor -parent $parent]
foreach {key val} $args {
if {![info exists opts($key)]} {
set native 0
break
}
lappend nativecmd $opts($key) $val
}
if {$native} {
return [eval $nativecmd]
}
}
return [eval [list dialog $path] $args]
} else {
return [lindex $colors $_selection]
}
}
proc SelectColor::dialog {path args} {
variable _baseColors
variable _userColors
variable _widget
variable _selection
variable _image
variable _hsv
Widget::init SelectColor $path:SelectColor $args
set top [Dialog::create $path \
-title [Widget::cget $path:SelectColor -title] \
-parent [Widget::cget $path:SelectColor -parent] \
-separator 1 -default 0 -cancel 1 -anchor e]
wm resizable $top 0 0
set dlgf [$top getframe]
set fg [frame $dlgf.fg]
set desc [list \
base _baseColors "Base colors" \
user _userColors "User colors"]
set count 0
foreach {type varcol defTitle} $desc {
set col 0
set lin 0
set title [lindex [BWidget::getname "${type}Colors"] 0]
if {![string length $title]} {
set title $defTitle
}
set titf [TitleFrame $fg.$type -text $title]
set subf [$titf getframe]
foreach color [set $varcol] {
set fround [frame $fg.round$count \
-highlightthickness 1 \
-relief sunken -borderwidth 2]
set fcolor [frame $fg.color$count -width 16 -height 12 \
-highlightthickness 0 \
-relief flat -borderwidth 0 \
-background $color]
pack $fcolor -in $fround
grid $fround -in $subf -row $lin -column $col -padx 1 -pady 1
bind $fround <ButtonPress-1> [list SelectColor::_select_rgb $count]
bind $fcolor <ButtonPress-1> [list SelectColor::_select_rgb $count]
bind $fround <Double-1> \
"SelectColor::_select_rgb [list $count]; [list $top] invoke 0"
bind $fcolor <Double-1> \
"SelectColor::_select_rgb [list $count]; [list $top] invoke 0"
incr count
if {[incr col] == 6} {
incr lin
set col 0
}
}
pack $titf -anchor w -pady 2
}
set fround [frame $fg.round \
-highlightthickness 0 \
-relief sunken -borderwidth 2]
set fcolor [frame $fg.color \
-width 50 \
-highlightthickness 0 \
-relief flat -borderwidth 0]
pack $fcolor -in $fround -fill y -expand yes
pack $fround -anchor e -pady 2 -fill y -expand yes
set fd [frame $dlgf.fd]
set f1 [frame $fd.f1 -relief sunken -borderwidth 2]
set f2 [frame $fd.f2 -relief sunken -borderwidth 2]
set c1 [canvas $f1.c -width 200 -height 200 -bd 0 -highlightthickness 0]
set c2 [canvas $f2.c -width 15 -height 200 -bd 0 -highlightthickness 0]
for {set val 0} {$val < 40} {incr val} {
$c2 create rectangle 0 [expr {5*$val}] 15 [expr {5*$val+5}] -tags val[expr {39-$val}]
}
$c2 create polygon 0 0 10 5 0 10 -fill black -outline white -tags target
pack $c1 $c2
pack $f1 $f2 -side left -padx 10 -anchor n
pack $fg $fd -side left -anchor n -fill y
bind $c1 <ButtonPress-1> [list SelectColor::_select_hue_sat %x %y]
bind $c1 <B1-Motion> [list SelectColor::_select_hue_sat %x %y]
bind $c2 <ButtonPress-1> [list SelectColor::_select_value %x %y]
bind $c2 <B1-Motion> [list SelectColor::_select_value %x %y]
if {![info exists _image] || [catch {image type $_image}]} {
set _image [image create photo -width 200 -height 200]
for {set x 0} {$x < 200} {incr x 4} {
for {set y 0} {$y < 200} {incr y 4} {
$_image put \
[eval [list format "\#%04x%04x%04x"] \
[hsvToRgb [expr {$x/196.0}] [expr {(196-$y)/196.0}] 0.85]] \
-to $x $y [expr {$x+4}] [expr {$y+4}]
}
}
}
$c1 create image 0 0 -anchor nw -image $_image
$c1 create bitmap 0 0 \
-bitmap @[file join $::BWIDGET::LIBRARY "images" "target.xbm"] \
-anchor nw -tags target
set _selection -1
set _widget(fcolor) $fg
set _widget(chs) $c1
set _widget(cv) $c2
set rgb [winfo rgb $path [Widget::cget $path:SelectColor -color]]
set _hsv [eval rgbToHsv $rgb]
_set_rgb [eval [list format "\#%04x%04x%04x"] $rgb]
_set_hue_sat [lindex $_hsv 0] [lindex $_hsv 1]
_set_value [lindex $_hsv 2]
$top add -name ok
$top add -name cancel
set res [$top draw]
if {$res == 0} {
set color [$fg.color cget -background]
} else {
set color ""
}
destroy $top
return $color
}
proc SelectColor::setcolor { idx color } {
variable _userColors
set _userColors [lreplace $_userColors $idx $idx $color]
}
proc SelectColor::_select_rgb {count} {
variable _baseColors
variable _userColors
variable _selection
variable _widget
variable _hsv
set frame $_widget(fcolor)
if {$_selection >= 0} {
$frame.round$_selection configure \
-relief sunken -highlightthickness 1 -borderwidth 2
}
$frame.round$count configure \
-relief flat -highlightthickness 2 -borderwidth 1
focus $frame.round$count
set _selection $count
set bg [$frame.color$count cget -background]
set user [expr {$_selection-[llength $_baseColors]}]
if {$user >= 0 &&
[string equal \
[winfo rgb $frame.color$_selection $bg] \
[winfo rgb $frame.color$_selection white]]} {
set bg [$frame.color cget -bg]
$frame.color$_selection configure -background $bg
set _userColors [lreplace $_userColors $user $user $bg]
} else {
set _hsv [eval rgbToHsv [winfo rgb $frame.color$count $bg]]
_set_hue_sat [lindex $_hsv 0] [lindex $_hsv 1]
_set_value [lindex $_hsv 2]
$frame.color configure -background $bg
}
}
proc SelectColor::_set_rgb {rgb} {
variable _selection
variable _baseColors
variable _userColors
variable _widget
set frame $_widget(fcolor)
$frame.color configure -background $rgb
set user [expr {$_selection-[llength $_baseColors]}]
if {$user >= 0} {
$frame.color$_selection configure -background $rgb
set _userColors [lreplace $_userColors $user $user $rgb]
}
}
proc SelectColor::_select_hue_sat {x y} {
variable _widget
variable _hsv
if {$x < 0} {
set x 0
} elseif {$x > 200} {
set x 200
}
if {$y < 0 } {
set y 0
} elseif {$y > 200} {
set y 200
}
set hue [expr {$x/200.0}]
set sat [expr {(200-$y)/200.0}]
set _hsv [lreplace $_hsv 0 1 $hue $sat]
$_widget(chs) coords target [expr {$x-9}] [expr {$y-9}]
_draw_values $hue $sat
_set_rgb [eval [list format "\#%04x%04x%04x"] [eval [list hsvToRgb] $_hsv]]
}
proc SelectColor::_set_hue_sat {hue sat} {
variable _widget
set x [expr {$hue*200-9}]
set y [expr {(1-$sat)*200-9}]
$_widget(chs) coords target $x $y
_draw_values $hue $sat
}
proc SelectColor::_select_value {x y} {
variable _widget
variable _hsv
if {$y < 0} {
set y 0
} elseif {$y > 200} {
set y 200
}
$_widget(cv) coords target 0 [expr {$y-5}] 10 $y 0 [expr {$y+5}]
set _hsv [lreplace $_hsv 2 2 [expr {(200-$y)/200.0}]]
_set_rgb [eval [list format "\#%04x%04x%04x"] [eval [list hsvToRgb] $_hsv]]
}
proc SelectColor::_draw_values {hue sat} {
variable _widget
for {set val 0} {$val < 40} {incr val} {
set l [hsvToRgb $hue $sat [expr {$val/39.0}]]
set col [eval [list format "\#%04x%04x%04x"] $l]
$_widget(cv) itemconfigure val$val -fill $col -outline $col
}
}
proc SelectColor::_set_value {value} {
variable _widget
set y [expr {int((1-$value)*200)}]
$_widget(cv) coords target 0 [expr {$y-5}] 10 $y 0 [expr {$y+5}]
}
# --
# Taken from tk8.0/demos/tcolor.tcl
# --
# The procedure below converts an HSB value to RGB. It takes hue, saturation,
# and value components (floating-point, 0-1.0) as arguments, and returns a
# list containing RGB components (integers, 0-65535) as result. The code
# here is a copy of the code on page 616 of "Fundamentals of Interactive
# Computer Graphics" by Foley and Van Dam.
proc SelectColor::hsvToRgb {hue sat val} {
set v [expr {round(65535.0*$val)}]
if {$sat == 0} {
return [list $v $v $v]
} else {
set hue [expr {$hue*6.0}]
if {$hue >= 6.0} {
set hue 0.0
}
set i [expr {int($hue)}]
set f [expr {$hue-$i}]
set p [expr {round(65535.0*$val*(1 - $sat))}]
set q [expr {round(65535.0*$val*(1 - ($sat*$f)))}]
set t [expr {round(65535.0*$val*(1 - ($sat*(1 - $f))))}]
switch $i {
0 {return [list $v $t $p]}
1 {return [list $q $v $p]}
2 {return [list $p $v $t]}
3 {return [list $p $q $v]}
4 {return [list $t $p $v]}
5 {return [list $v $p $q]}
}
}
}
# --
# Taken from tk8.0/demos/tcolor.tcl
# --
# The procedure below converts an RGB value to HSB. It takes red, green,
# and blue components (0-65535) as arguments, and returns a list containing
# HSB components (floating-point, 0-1) as result. The code here is a copy
# of the code on page 615 of "Fundamentals of Interactive Computer Graphics"
# by Foley and Van Dam.
proc SelectColor::rgbToHsv {red green blue} {
if {$red > $green} {
set max $red.0
set min $green.0
} else {
set max $green.0
set min $red.0
}
if {$blue > $max} {
set max $blue.0
} else {
if {$blue < $min} {
set min $blue.0
}
}
set range [expr {$max-$min}]
if {$max == 0} {
set sat 0
} else {
set sat [expr {($max-$min)/$max}]
}
if {$sat == 0} {
set hue 0
} else {
set rc [expr {($max - $red)/$range}]
set gc [expr {($max - $green)/$range}]
set bc [expr {($max - $blue)/$range}]
if {$red == $max} {
set hue [expr {.166667*($bc - $gc)}]
} else {
if {$green == $max} {
set hue [expr {.166667*(2 + $rc - $bc)}]
} else {
set hue [expr {.166667*(4 + $gc - $rc)}]
}
}
if {$hue < 0.0} {
set hue [expr {$hue + 1.0}]
}
}
return [list $hue $sat [expr {$max/65535}]]
}

913
lib/bwidget/combobox.tcl

@ -0,0 +1,913 @@ @@ -0,0 +1,913 @@
# ----------------------------------------------------------------------------
# combobox.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: combobox.tcl,v 1.42.2.2 2011/03/02 13:11:12 oehhar Exp $
# ----------------------------------------------------------------------------
# Index of commands:
# - ComboBox::create
# - ComboBox::configure
# - ComboBox::cget
# - ComboBox::setvalue
# - ComboBox::getvalue
# - ComboBox::clearvalue
# - ComboBox::_create_popup
# - ComboBox::_mapliste
# - ComboBox::_unmapliste
# - ComboBox::_select
# - ComboBox::_modify_value
# ----------------------------------------------------------------------------
# ComboBox uses the 8.3 -listvariable listbox option
package require Tk 8.3
namespace eval ComboBox {
Widget::define ComboBox combobox ArrowButton Entry ListBox
Widget::tkinclude ComboBox frame :cmd \
include {-relief -borderwidth -bd -background} \
initialize {-relief sunken -borderwidth 2}
Widget::bwinclude ComboBox Entry .e \
remove {-relief -bd -borderwidth -bg} \
rename {-background -entrybg}
Widget::declare ComboBox {
{-height TkResource 0 0 listbox}
{-values String "" 0}
{-images String "" 0}
{-indents String "" 0}
{-modifycmd String "" 0}
{-postcommand String "" 0}
{-expand Enum none 0 {none tab}}
{-autocomplete Boolean 0 0}
{-autopost Boolean 0 0}
{-bwlistbox Boolean 0 0}
{-listboxwidth Int 0 0}
{-hottrack Boolean 0 0}
}
Widget::addmap ComboBox ArrowButton .a {
-background {} -foreground {} -disabledforeground {} -state {}
}
Widget::syncoptions ComboBox Entry .e {-text {}}
::bind BwComboBox <FocusIn> [list after idle {BWidget::refocus %W %W.e}]
::bind BwComboBox <Destroy> [list ComboBox::_destroy %W]
::bind ListBoxHotTrack <Motion> {
%W selection clear 0 end
%W activate @%x,%y
%W selection set @%x,%y
}
variable _index
}
# ComboBox::create --
#
# Create a combobox widget with the given options.
#
# Arguments:
# path name of the new widget.
# args optional arguments to the widget.
#
# Results:
# path name of the new widget.
proc ComboBox::create { path args } {
array set maps [list ComboBox {} :cmd {} .e {} .a {}]
array set maps [Widget::parseArgs ComboBox $args]
eval [list frame $path] $maps(:cmd) \
[list -highlightthickness 0 -takefocus 0 -class ComboBox]
Widget::initFromODB ComboBox $path $maps(ComboBox)
bindtags $path [list $path BwComboBox [winfo toplevel $path] all]
if {[Widget::theme]} {
set entry [eval [list Entry::create $path.e] $maps(.e) \
[list -takefocus 1]]
} else {
set entry [eval [list Entry::create $path.e] $maps(.e) \
[list -relief flat -borderwidth 0 -takefocus 1]]
}
::bind $path.e <FocusOut> [list $path _focus_out]
::bind $path <<TraverseIn>> [list $path _traverse_in]
if {[Widget::cget $path -autocomplete]} {
::bind $path.e <KeyRelease> [list $path _auto_complete %K]
}
if {[Widget::cget $path -autopost]} {
::bind $path.e <KeyRelease> +[list $path _auto_post %K]
} else {
::bind $entry <Key-Up> [list ComboBox::_unmapliste $path]
::bind $entry <Key-Down> [list ComboBox::_mapliste $path]
}
if {[string equal [tk windowingsystem] "x11"]} {
set ipadx 0
set width 11
} else {
set ipadx 2
set width 15
}
set height [winfo reqheight $entry]
set arrow [eval [list ArrowButton::create $path.a] $maps(.a) \
[list -width $width -height $height \
-highlightthickness 0 -borderwidth 1 -takefocus 0 \
-dir bottom -type button -ipadx $ipadx \
-command [list ComboBox::_mapliste $path] \
]]
pack $arrow -side right -fill y
pack $entry -side left -fill both -expand yes
set editable [Widget::cget $path -editable]
Entry::configure $path.e -editable $editable
if {$editable} {
::bind $entry <ButtonPress-1> [list ComboBox::_unmapliste $path]
} else {
::bind $entry <ButtonPress-1> [list ArrowButton::invoke $path.a]
if { ![string equal [Widget::cget $path -state] "disabled"] } {
Entry::configure $path.e -takefocus 1
}
}
::bind $path <ButtonPress-1> [list ComboBox::_unmapliste $path]
::bind $entry <Control-Up> [list ComboBox::_modify_value $path previous]
::bind $entry <Control-Down> [list ComboBox::_modify_value $path next]
::bind $entry <Control-Prior> [list ComboBox::_modify_value $path first]
::bind $entry <Control-Next> [list ComboBox::_modify_value $path last]
if {$editable} {
set expand [Widget::cget $path -expand]
if {[string equal "tab" $expand]} {
# Expand entry value on Tab (from -values)
::bind $entry <Tab> "[list ComboBox::_expand $path]; break"
} elseif {[string equal "auto" $expand]} {
# Expand entry value anytime (from -values)
#::bind $entry <Key> "[list ComboBox::_expand $path]; break"
}
}
## If we have images, we have to use a BWidget ListBox.
set bw [Widget::cget $path -bwlistbox]
if {[llength [Widget::cget $path -images]]} {
Widget::configure $path [list -bwlistbox 1]
} else {
Widget::configure $path [list -bwlistbox $bw]
}
set ComboBox::_index($path) -1
return [Widget::create ComboBox $path]
}
# ComboBox::configure --
#
# Configure subcommand for ComboBox widgets. Works like regular
# widget configure command.
#
# Arguments:
# path Name of the ComboBox widget.
# args Additional optional arguments:
# ?-option?
# ?-option value ...?
#
# Results:
# Depends on arguments. If no arguments are given, returns a complete
# list of configuration information. If one argument is given, returns
# the configuration information for that option. If more than one
# argument is given, returns nothing.
proc ComboBox::configure { path args } {
set res [Widget::configure $path $args]
set entry $path.e
set list [list -images -values -bwlistbox -hottrack -autocomplete -autopost]
foreach {ci cv cb ch cac cap} [eval [linsert $list 0 Widget::hasChangedX $path]] { break }
if { $ci } {
set images [Widget::cget $path -images]
if {[llength $images]} {
Widget::configure $path [list -bwlistbox 1]
} else {
Widget::configure $path [list -bwlistbox 0]
}
}
## If autocomplete toggled, turn bindings on/off
if { $cac } {
if {[Widget::cget $path -autocomplete]} {
::bind $entry <KeyRelease> +[list $path _auto_complete %K]
} else {
set bindings [split [::bind $entry <KeyRelease>] \n]
if {[set idx [lsearch $bindings [list $path _auto_complete %K]]] != -1} {
::bind $entry <KeyRelease> [join [lreplace $bindings $idx $idx] \n]
}
}
}
## If autopost toggled, turn bindings on/off
if { $cap } {
if {[Widget::cget $path -autopost]} {
::bind $entry <KeyRelease> +[list $path _auto_post %K]
set bindings [split [::bind $entry <Key-Up>] \n]
if {[set idx [lsearch $bindings [list ComboBox::_unmapliste $path]]] != -1} {
::bind $entry <Key-Up> [join [lreplace $bindings $idx $idx] \n]
}
set bindings [split [::bind $entry <Key-Down>] \n]
if {[set idx [lsearch $bindings [list ComboBox::_mapliste $path]]] != -1} {
::bind $entry <Key-Down> [join [lreplace $bindings $idx $idx] \n]
}
} else {
set bindings [split [::bind $entry <KeyRelease>] \n]
if {[set idx [lsearch $bindings [list $path _auto_post %K]]] != -1} {
::bind $entry <KeyRelease> [join [lreplace $bindings $idx $idx] \n]
}
::bind $entry <Key-Up> +[list ComboBox::_unmapliste $path]
::bind $entry <Key-Down> +[list ComboBox::_mapliste $path]
}
}
set bw [Widget::cget $path -bwlistbox]
## If the images, bwlistbox, hottrack or values have changed,
## destroy the shell so that it will re-create itself the next
## time around.
if { $ci || $cb || $ch || ($bw && $cv) } {
destroy $path.shell
}
set chgedit [Widget::hasChangedX $path -editable]
if {$chgedit} {
if {[Widget::cget $path -editable]} {
::bind $entry <ButtonPress-1> [list ComboBox::_unmapliste $path]
Entry::configure $entry -editable true
} else {
::bind $entry <ButtonPress-1> [list ArrowButton::invoke $path.a]
Entry::configure $entry -editable false
# Make sure that non-editable comboboxes can still be tabbed to.
if { ![string equal [Widget::cget $path -state] "disabled"] } {
Entry::configure $entry -takefocus 1
}
}
}
if {$chgedit || [Widget::hasChangedX $path -expand]} {
# Unset what we may have created.
::bind $entry <Tab> {}
if {[Widget::cget $path -editable]} {
set expand [Widget::cget $path -expand]
if {[string equal "tab" $expand]} {
# Expand entry value on Tab (from -values)
::bind $entry <Tab> "[list ComboBox::_expand $path]; break"
} elseif {[string equal "auto" $expand]} {
# Expand entry value anytime (from -values)
#::bind $entry <Key> "[list ComboBox::_expand $path]; break"
}
}
}
# if state changed to normal and -editable false, the edit must take focus
if { [Widget::hasChangedX $path -state] \
&& ![string equal [Widget::cget $path -state] "disabled"] \
&& ![Widget::cget $path -editable] } {
Entry::configure $entry -takefocus 1
}
# if the dropdown listbox is shown, simply force the actual entry
# colors into it. If it is not shown, the next time the dropdown
# is shown it'll get the actual colors anyway
if {[winfo exists $path.shell.listb]} {
$path.shell.listb configure \
-bg [Widget::cget $path -entrybg] \
-fg [Widget::cget $path -foreground] \
-selectbackground [Widget::cget $path -selectbackground] \
-selectforeground [Widget::cget $path -selectforeground]
}
return $res
}
# ----------------------------------------------------------------------------
# Command ComboBox::cget
# ----------------------------------------------------------------------------
proc ComboBox::cget { path option } {
return [Widget::cget $path $option]
}
# ----------------------------------------------------------------------------
# Command ComboBox::setvalue
# ----------------------------------------------------------------------------
proc ComboBox::setvalue { path index } {
variable _index
set values [Widget::getMegawidgetOption $path -values]
set value [Entry::cget $path.e -text]
switch -- $index {
next {
if { [set idx [lsearch -exact $values $value]] != -1 } {
incr idx
} else {
set idx [lsearch -exact $values "$value*"]
}
}
previous {
if { [set idx [lsearch -exact $values $value]] != -1 } {
incr idx -1
} else {
set idx [lsearch -exact $values "$value*"]
}
}
first {
set idx 0
}
last {
set idx [expr {[llength $values]-1}]
}
default {
if { [string index $index 0] == "@" } {
set idx [string range $index 1 end]
if { ![string is integer -strict $idx] } {
return -code error "bad index \"$index\""
}
} else {
return -code error "bad index \"$index\""
}
}
}
if { $idx >= 0 && $idx < [llength $values] } {
set newval [lindex $values $idx]
set _index($path) $idx
Entry::configure $path.e -text $newval
return 1
}
return 0
}
proc ComboBox::icursor { path idx } {
return [$path.e icursor $idx]
}
proc ComboBox::get { path } {
return [$path.e get]
}
# ----------------------------------------------------------------------------
# Command ComboBox::getvalue
# ----------------------------------------------------------------------------
proc ComboBox::getvalue { path } {
variable _index
set values [Widget::getMegawidgetOption $path -values]
set value [Entry::cget $path.e -text]
# Check if an index was saved by the last setvalue operation
# If this index still matches it is returned
# This is necessary for the case when values is not unique
if { $_index($path) >= 0 \
&& $_index($path) < [llength $values] \
&& $value eq [lindex $values $_index($path)]} {
return $_index($path)
}
return [lsearch -exact $values $value]
}
proc ComboBox::getlistbox { path } {
_create_popup $path
return $path.shell.listb
}
# ----------------------------------------------------------------------------
# Command ComboBox::post
# ----------------------------------------------------------------------------
proc ComboBox::post { path } {
_mapliste $path
return
}
proc ComboBox::unpost { path } {
_unmapliste $path
return
}
# ----------------------------------------------------------------------------
# Command ComboBox::bind
# ----------------------------------------------------------------------------
proc ComboBox::bind { path args } {
return [eval [list ::bind $path.e] $args]
}
proc ComboBox::insert { path idx args } {
upvar #0 [Widget::varForOption $path -values] values
if {[Widget::cget $path -bwlistbox]} {
set l [$path getlistbox]
set i [eval [linsert $args 0 $l insert $idx #auto]]
set text [$l itemcget $i -text]
if {$idx == "end"} {
lappend values $text
} else {
set values [linsert $values $idx $text]
}
} else {
set values [eval [list linsert $values $idx] $args]
}
}
# ----------------------------------------------------------------------------
# Command ComboBox::clearvalue
# ----------------------------------------------------------------------------
proc ComboBox::clearvalue { path } {
Entry::configure $path.e -text ""
}
# ----------------------------------------------------------------------------
# Command ComboBox::_create_popup
# ----------------------------------------------------------------------------
proc ComboBox::_create_popup { path } {
set shell $path.shell
if {[winfo exists $shell]} { return }
set lval [Widget::cget $path -values]
set h [Widget::cget $path -height]
set bw [Widget::cget $path -bwlistbox]
if { $h <= 0 } {
set len [llength $lval]
if { $len < 3 } {
set h 3
} elseif { $len > 10 } {
set h 10
} else {
set h $len
}
}
if {[string equal [tk windowingsystem] "x11"]} {
set sbwidth 11
} else {
set sbwidth 15
}
toplevel $shell -relief solid -bd 1
wm withdraw $shell
wm overrideredirect $shell 1
# these commands cause the combobox to behave strangely on OS X
if {! $Widget::_aqua } {
update idle
wm transient $shell [winfo toplevel $path]
catch { wm attributes $shell -topmost 1 }
}
set sw [ScrolledWindow $shell.sw -managed 1 -size $sbwidth -ipad 0]
if {$bw} {
if {[Widget::theme]} {
set listb [ListBox $shell.listb \
-relief flat -borderwidth 0 -highlightthickness 0 \
-selectmode single -selectfill 1 -autofocus 0 -height $h \
-font [Widget::cget $path -font] \
-bg [Widget::cget $path -entrybg] \
-fg [Widget::cget $path -foreground]]
} else {
set listb [ListBox $shell.listb \
-relief flat -borderwidth 0 -highlightthickness 0 \
-selectmode single -selectfill 1 -autofocus 0 -height $h \
-font [Widget::cget $path -font] \
-bg [Widget::cget $path -entrybg] \
-fg [Widget::cget $path -foreground] \
-selectbackground [Widget::cget $path -selectbackground] \
-selectforeground [Widget::cget $path -selectforeground]]
}
set values [Widget::cget $path -values]
set images [Widget::cget $path -images]
foreach value $values image $images {
$listb insert end #auto -text $value -image $image
}
$listb bindText <1> [list ComboBox::_select $path]
$listb bindImage <1> [list ComboBox::_select $path]
if {[Widget::cget $path -hottrack]} {
$listb bindText <Enter> [list $listb selection set]
$listb bindImage <Enter> [list $listb selection set]
}
} else {
if {[Widget::theme]} {
set listb [listbox $shell.listb \
-relief flat -borderwidth 0 -highlightthickness 0 \
-exportselection false \
-font [Widget::cget $path -font] \
-height $h \
-bg [Widget::cget $path -entrybg] \
-fg [Widget::cget $path -foreground] \
-listvariable [Widget::varForOption $path -values]]
} else {
set listb [listbox $shell.listb \
-relief flat -borderwidth 0 -highlightthickness 0 \
-exportselection false \
-font [Widget::cget $path -font] \
-height $h \
-bg [Widget::cget $path -entrybg] \
-fg [Widget::cget $path -foreground] \
-selectbackground [Widget::cget $path -selectbackground] \
-selectforeground [Widget::cget $path -selectforeground] \
-listvariable [Widget::varForOption $path -values]]
}
::bind $listb <ButtonRelease-1> [list ComboBox::_select $path @%x,%y]
if {[Widget::cget $path -hottrack]} {
bindtags $listb [concat [bindtags $listb] ListBoxHotTrack]
}
}
pack $sw -fill both -expand yes
$sw setwidget $listb
::bind $listb <Return> "ComboBox::_select [list $path] \[$listb curselection\]"
::bind $listb <Escape> [list ComboBox::_unmapliste $path]
::bind $listb <FocusOut> [list ComboBox::_focus_out $path]
}
proc ComboBox::_recreate_popup { path } {
variable background
variable foreground
set shell $path.shell
set lval [Widget::cget $path -values]
set h [Widget::cget $path -height]
set bw [Widget::cget $path -bwlistbox]
if { $h <= 0 } {
set len [llength $lval]
if { $len < 3 } {
set h 3
} elseif { $len > 10 } {
set h 10
} else {
set h $len
}
}
if { [string equal [tk windowingsystem] "x11"] } {
set sbwidth 11
} else {
set sbwidth 15
}
_create_popup $path
if {![Widget::cget $path -editable]} {
if {[info exists background]} {
$path.e configure -bg $background
$path.e configure -fg $foreground
unset background
unset foreground
}
}
set listb $shell.listb
destroy $shell.sw
set sw [ScrolledWindow $shell.sw -managed 1 -size $sbwidth -ipad 0]
$listb configure \
-height $h \
-font [Widget::cget $path -font] \
-bg [Widget::cget $path -entrybg] \
-fg [Widget::cget $path -foreground]
if {![Widget::theme]} {
$listb configure \
-selectbackground [Widget::cget $path -selectbackground] \
-selectforeground [Widget::cget $path -selectforeground]
}
pack $sw -fill both -expand yes
$sw setwidget $listb
raise $listb
}
# ----------------------------------------------------------------------------
# Command ComboBox::_mapliste
# ----------------------------------------------------------------------------
proc ComboBox::_mapliste { path } {
set listb $path.shell.listb
if {[winfo exists $path.shell] &&
[string equal [wm state $path.shell] "normal"]} {
_unmapliste $path
return
}
if { [Widget::cget $path -state] == "disabled" } {
return
}
if {[llength [set cmd [Widget::getMegawidgetOption $path -postcommand]]]} {
uplevel \#0 $cmd
}
if { ![llength [Widget::getMegawidgetOption $path -values]] } {
return
}
_recreate_popup $path
ArrowButton::configure $path.a -relief sunken
update
set bw [Widget::cget $path -bwlistbox]
$listb selection clear 0 end
set values [Widget::getMegawidgetOption $path -values]
set curval [Entry::cget $path.e -text]
if { [set idx [lsearch -exact $values $curval]] != -1 ||
[set idx [lsearch -exact $values "$curval*"]] != -1 } {
if {$bw} {
set idx [$listb items $idx]
} else {
$listb activate $idx
}
$listb selection set $idx
$listb see $idx
} else {
set idx 0
if {$bw} {
set idx [$listb items 0]
} else {
$listb activate $idx
}
$listb selection set $idx
$listb see $idx
}
set width [Widget::cget $path -listboxwidth]
if {!$width} { set width [winfo width $path] }
BWidget::place $path.shell $width 0 below $path
wm deiconify $path.shell
raise $path.shell
BWidget::focus set $listb
if {! $Widget::_aqua } {
BWidget::grab global $path
}
}
# ----------------------------------------------------------------------------
# Command ComboBox::_unmapliste
# ----------------------------------------------------------------------------
proc ComboBox::_unmapliste { path {refocus 1} } {
# On aqua, state is zoomed, otherwise normal
if {[winfo exists $path.shell] && \
( [string equal [wm state $path.shell] "normal"] ||
[string equal [wm state $path.shell] "zoomed"] ) } {
if {! $Widget::_aqua } {
BWidget::grab release $path
BWidget::focus release $path.shell.listb $refocus
# Update now because otherwise [focus -force...] makes the app hang!
if {$refocus} {
update
focus -force $path.e
}
}
wm withdraw $path.shell
ArrowButton::configure $path.a -relief raised
}
}
# ----------------------------------------------------------------------------
# Command ComboBox::_select
# ----------------------------------------------------------------------------
proc ComboBox::_select { path index } {
set index [$path.shell.listb index $index]
_unmapliste $path
if { $index != -1 } {
if { [setvalue $path @$index] } {
set cmd [Widget::getMegawidgetOption $path -modifycmd]
if {[llength $cmd]} {
uplevel \#0 $cmd
}
}
}
$path.e selection clear
if {[$path.e cget -exportselection]} {
$path.e selection range 0 end
}
}
# ----------------------------------------------------------------------------
# Command ComboBox::_modify_value
# ----------------------------------------------------------------------------
proc ComboBox::_modify_value { path direction } {
if {[setvalue $path $direction]
&& [llength [set cmd [Widget::getMegawidgetOption $path -modifycmd]]]} {
uplevel \#0 $cmd
}
}
# ----------------------------------------------------------------------------
# Command ComboBox::_expand
# ----------------------------------------------------------------------------
proc ComboBox::_expand {path} {
set values [Widget::getMegawidgetOption $path -values]
if {![llength $values]} {
bell
return 0
}
set found {}
set curval [Entry::cget $path.e -text]
set curlen [$path.e index insert]
if {$curlen < [string length $curval]} {
# we are somewhere in the middle of a string.
# if the full value matches some string in the listbox,
# reorder values to start matching after that string.
set idx [lsearch -exact $values $curval]
if {$idx >= 0} {
set values [concat [lrange $values [expr {$idx+1}] end] \
[lrange $values 0 $idx]]
}
}
if {$curlen == 0} {
set found $values
} else {
foreach val $values {
if {[string equal -length $curlen $curval $val]} {
lappend found $val
}
}
}
if {[llength $found]} {
Entry::configure $path.e -text [lindex $found 0]
if {[llength $found] > 1} {
set best [_best_match $found [string range $curval 0 $curlen]]
set blen [string length $best]
$path.e icursor $blen
$path.e selection range $blen end
}
} else {
bell
}
return [llength $found]
}
# best_match --
# finds the best unique match in a list of names
# The extra $e in this argument allows us to limit the innermost loop a
# little further.
# Arguments:
# l list to find best unique match in
# e currently best known unique match
# Returns:
# longest unique match in the list
#
proc ComboBox::_best_match {l {e {}}} {
set ec [lindex $l 0]
if {[llength $l]>1} {
set e [string length $e]; incr e -1
set ei [string length $ec]; incr ei -1
foreach l $l {
while {$ei>=$e && [string first $ec $l]} {
set ec [string range $ec 0 [incr ei -1]]
}
}
}
return $ec
}
# possibly faster
#proc match {string1 string2} {
# set i 1
# while {[string equal -length $i $string1 $string2]} { incr i }
# return [string range $string1 0 [expr {$i-2}]]
#}
#proc matchlist {list} {
# set list [lsort $list]
# return [match [lindex $list 0] [lindex $list end]]
#}
# ----------------------------------------------------------------------------
# Command ComboBox::_traverse_in
# Called when widget receives keyboard focus due to keyboard traversal.
# ----------------------------------------------------------------------------
proc ComboBox::_traverse_in { path } {
if {[$path.e selection present] != 1} {
# Autohighlight the selection, but not if one existed
$path.e selection range 0 end
}
}
# ----------------------------------------------------------------------------
# Command ComboBox::_focus_out
# ----------------------------------------------------------------------------
proc ComboBox::_focus_out { path } {
if {[string first $path [focus]] != 0} {
# we lost focus to some other app or window, so remove the listbox
return [_unmapliste $path 0]
}
}
proc ComboBox::_auto_complete { path key } {
## Any key string with more than one character and is not entirely
## lower-case is considered a function key and is thus ignored.
if {[string length $key] > 1 && [string tolower $key] != $key} { return }
set text [string map [list {[} {\[} {]} {\]}] [$path.e get]]
if {[string equal $text ""]} { return }
set values [Widget::cget $path -values]
set x [lsearch $values $text*]
if {$x < 0} { return }
set idx [$path.e index insert]
$path.e configure -text [lindex $values $x]
$path.e icursor $idx
$path.e select range insert end
}
proc ComboBox::_auto_post { path key } {
if {[string equal $key "Escape"] || [string equal $key "Return"]} {
_unmapliste $path
return
}
if {[catch {$path.shell.listb curselection} x] || $x == ""} {
if {[string equal $key "Up"]} {
_unmapliste $path
return
}
set x -1
}
if {([string length $key] > 1 && [string tolower $key] != $key) && \
[string equal $key "BackSpace"] != 0 && \
[string equal $key "Up"] != 0 && \
[string equal $key "Down"] != 0} {
return
}
# post the listbox
_create_popup $path
set width [Widget::cget $path -listboxwidth]
if {!$width} { set width [winfo width $path] }
BWidget::place $path.shell $width 0 below $path
wm deiconify $path.shell
BWidget::grab release $path
BWidget::focus release $path.shell.listb 1
focus -force $path.e
set values [Widget::cget $path -values]
switch -- $key {
Up {
if {[incr x -1] < 0} {
set x 0
} else {
Entry::configure $path.e -text [lindex $values $x]
}
}
Down {
if {[incr x] >= [llength $values]} {
set x [expr {[llength $values] - 1}]
} else {
Entry::configure $path.e -text [lindex $values $x]
}
}
default {
# auto-select within the listbox the item closest to the entry's value
set text [string map [list {[} {\[} {]} {\]}] [$path.e get]]
if {[string equal $text ""]} {
set x 0
} else {
set x [lsearch $values $text*]
}
}
}
if {$x >= 0} {
$path.shell.listb selection clear 0 end
$path.shell.listb selection set $x
$path.shell.listb see $x
}
}
# ------------------------------------------------------------------------------
# Command ComboBox::_destroy
# ------------------------------------------------------------------------------
proc ComboBox::_destroy { path } {
variable _index
Widget::destroy $path
unset _index($path)
}

199
lib/bwidget/demo/basic.tcl

@ -0,0 +1,199 @@ @@ -0,0 +1,199 @@
namespace eval DemoBasic {
variable var
variable count 0
variable id ""
}
proc DemoBasic::create { nb } {
set frame [$nb insert end demoBasic -text "Basic"]
set topf [frame $frame.topf]
set titf1 [TitleFrame $topf.titf1 -text "Label"]
set titf2 [TitleFrame $topf.titf2 -text "Entry"]
set titf3 [TitleFrame $frame.titf3 -text "Button and ArrowButton"]
_label [$titf1 getframe]
_entry [$titf2 getframe]
_button [$titf3 getframe]
pack $titf1 $titf2 -side left -fill both -padx 4 -expand yes
pack $topf -pady 2 -fill x
pack $titf3 -pady 2 -padx 4 -fill x
return $frame
}
proc DemoBasic::_label { parent } {
variable var
set lab [Label $parent.label -text "This is a Label widget" \
-helptext "Label widget"]
set chk [checkbutton $parent.chk -text "Disabled" \
-variable DemoBasic::var($lab,-state) \
-onvalue disabled -offvalue normal \
-command "$lab configure -state \$DemoBasic::var($lab,-state)"]
pack $lab -anchor w -pady 4
pack $chk -anchor w
}
proc DemoBasic::_entry { parent } {
set ent [Entry $parent.entry -text "Press enter" \
-command {set DemoBasic::var(entcmd) "-command called" ; after 500 {set DemoBasic::var(entcmd) ""}} \
-helptext "Entry widget"]
set chk1 [checkbutton $parent.chk1 -text "Disabled" \
-variable DemoBasic::var($ent,state) \
-onvalue disabled -offvalue normal \
-command "$ent configure -state \$DemoBasic::var($ent,state)"]
set chk2 [checkbutton $parent.chk2 -text "Non editable" \
-variable DemoBasic::var($ent,editable) \
-onvalue false -offvalue true \
-command "$ent configure -editable \$DemoBasic::var($ent,editable)"]
set lab [label $parent.cmd -textvariable DemoBasic::var(entcmd) -foreground red]
pack $ent -pady 4 -anchor w
pack $chk1 $chk2 -anchor w
pack $lab -pady 4
}
proc DemoBasic::_button { parent } {
variable var
set frame [frame $parent.butfr]
set but [Button $frame.but -text "Press me!" \
-repeatdelay 300 \
-command "DemoBasic::_butcmd command" \
-helptext "This is a Button widget"]
set sep1 [Separator $frame.sep1 -orient vertical]
set arr1 [ArrowButton $frame.arr1 -type button \
-width 25 -height 25 \
-repeatdelay 300 \
-command "DemoBasic::_butcmd command" \
-helptext "This is an ArrowButton widget\nof type button"]
set sep2 [Separator $frame.sep2 -orient vertical]
set arr2 [ArrowButton $frame.arr2 -type arrow \
-width 25 -height 25 -relief sunken -ipadx 0 -ipady 0 \
-repeatdelay 300 \
-command "DemoBasic::_butcmd command" \
-helptext "This is an ArrowButton widget\nof type arrow"]
pack $but -side left -padx 4
pack $sep1 -side left -padx 4 -fill y
pack $arr1 -side left -padx 4
pack $sep2 -side left -padx 4 -fill y
pack $arr2 -side left -padx 4
pack $frame
set sep3 [Separator $parent.sep3 -orient horizontal]
pack $sep3 -fill x -pady 10
set labf1 [LabelFrame $parent.labf1 -text "Command" -side top \
-anchor w -relief sunken -borderwidth 1]
set subf [$labf1 getframe]
set chk1 [checkbutton $subf.chk1 -text "Disabled" \
-variable DemoBasic::var(bstate) -onvalue disabled -offvalue normal \
-command "DemoBasic::_bstate \$DemoBasic::var(bstate) $but $arr1 $arr2"]
set chk2 [checkbutton $subf.chk2 -text "Use -armcommand/\n-disarmcommand" \
-justify left \
-variable DemoBasic::var(barmcmd) \
-command "DemoBasic::_barmcmd \$DemoBasic::var(barmcmd) $but $arr1 $arr2"]
pack $chk1 $chk2 -anchor w
set label [label $parent.label -textvariable DemoBasic::var(butcmd) -foreground red]
pack $label -side bottom -pady 4
set labf2 [LabelFrame $parent.labf2 -text "Direction" -side top \
-anchor w -relief sunken -borderwidth 1]
set subf [$labf2 getframe]
set var(bside) top
foreach dir {top left bottom right} {
set rad [radiobutton $subf.$dir -text "$dir arrow" \
-variable DemoBasic::var(bside) -value $dir \
-command "DemoBasic::_bside \$DemoBasic::var(bside) $arr1 $arr2"]
pack $rad -anchor w
}
set labf3 [LabelFrame $parent.labf3 -text "Relief" -side top \
-anchor w -relief sunken -borderwidth 1]
set subf [$labf3 getframe]
set var(brelief) raised
foreach {f lrelief} {f1 {raised sunken ridge groove} f2 {flat solid link}} {
set f [frame $subf.$f]
foreach relief $lrelief {
set rad [radiobutton $f.$relief -text $relief \
-variable DemoBasic::var(brelief) -value $relief \
-command "DemoBasic::_brelief \$DemoBasic::var(brelief) $but $arr1 $arr2"]
pack $rad -anchor w
}
pack $f -side left -padx 2 -anchor n
}
pack $labf1 $labf2 $labf3 -side left -fill y -padx 4
}
proc DemoBasic::_bstate { state but arr1 arr2 } {
foreach but [list $but $arr1 $arr2] {
$but configure -state $state
}
}
proc DemoBasic::_brelief { relief but arr1 arr2 } {
$but configure -relief $relief
if { $relief != "link" } {
foreach arr [list $arr1 $arr2] {
$arr configure -relief $relief
}
}
}
proc DemoBasic::_bside { side args } {
foreach arr $args {
$arr configure -dir $side
}
}
proc DemoBasic::_barmcmd { value but arr1 arr2 } {
if { $value } {
$but configure \
-armcommand "DemoBasic::_butcmd arm" \
-disarmcommand "DemoBasic::_butcmd disarm" \
-command {}
foreach arr [list $arr1 $arr2] {
$arr configure \
-armcommand "DemoBasic::_butcmd arm" \
-disarmcommand "DemoBasic::_butcmd disarm" \
-command {}
}
} else {
$but configure -armcommand {} -disarmcommand {} \
-command "DemoBasic::_butcmd command"
foreach arr [list $arr1 $arr2] {
$arr configure -armcommand {} -disarmcommand {} \
-command "DemoBasic::_butcmd command"
}
}
}
proc DemoBasic::_butcmd { reason } {
variable count
variable id
catch {after cancel $id}
if { $reason == "arm" } {
incr count
set DemoBasic::var(butcmd) "$reason command called ($count)"
} else {
set count 0
set DemoBasic::var(butcmd) "$reason command called"
}
set id [after 500 {set DemoBasic::var(butcmd) ""}]
}

46
lib/bwidget/demo/bwidget.xbm

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
#define bwidget_width 76
#define bwidget_height 64
static char bwidget_bits[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xf0,0x00,0xb6,0x6d,0xdb,0x16,0x00,0x00,0x00,0x00,0xf0,
0x00,0xdb,0xb6,0x6d,0xab,0x00,0x00,0x00,0x00,0xf0,0x00,0x55,0x55,0x55,0x75,
0x01,0x00,0x00,0x00,0xf0,0x00,0x6d,0xdb,0xb6,0xad,0x02,0x00,0x00,0x00,0xf0,
0x00,0xb6,0x6d,0xdb,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0x55,0x55,0x55,0x55,
0x05,0x00,0x00,0x00,0xf0,0x00,0xda,0xb6,0xad,0x6d,0x0b,0x00,0x00,0x00,0xf0,
0x00,0x6b,0x03,0xc0,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0x56,0x05,0x00,0x55,
0x0d,0x00,0x00,0x00,0xf0,0x00,0xbb,0x05,0x80,0xdb,0x06,0x00,0x00,0x00,0xf0,
0x00,0xca,0x06,0x00,0x6c,0x0b,0x00,0x00,0x00,0xf0,0x00,0xb6,0x02,0x00,0xaa,
0x0a,0x00,0x00,0x00,0xf0,0x00,0xab,0x05,0x00,0x6c,0x0b,0x00,0x00,0x00,0xf0,
0x00,0xdd,0x06,0x00,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0xaa,0x02,0x00,0x55,
0x05,0x00,0x00,0x00,0xf0,0x00,0xb7,0x05,0xc0,0xda,0x02,0x00,0x00,0x00,0xf0,
0x00,0xd9,0x06,0x50,0x6b,0x01,0x00,0x00,0x00,0xf0,0x00,0x56,0xb5,0xad,0xad,
0x00,0x00,0x00,0x00,0xf0,0x00,0xdb,0xd6,0x76,0x15,0x00,0x00,0x00,0x00,0xf0,
0x00,0x6a,0xab,0xaa,0x2d,0x00,0x00,0x00,0x00,0xf0,0x00,0x56,0x75,0xad,0xb6,
0x02,0x00,0x00,0x00,0xf0,0x00,0xbb,0xad,0xd6,0xaa,0x05,0x00,0x00,0x00,0xf0,
0x00,0xca,0xb6,0x6b,0xdb,0x2a,0x00,0x00,0x00,0xf0,0x00,0x77,0xd5,0x5c,0x6d,
0x2d,0x00,0x00,0x00,0xf0,0x00,0x99,0x05,0x00,0xaa,0x56,0x00,0x00,0x00,0xf0,
0x00,0xee,0x06,0x00,0x6c,0xbb,0x00,0x00,0x00,0xf0,0x00,0xaa,0x02,0x00,0xb0,
0x55,0x00,0x00,0x00,0xf0,0x00,0x55,0x05,0x00,0xa8,0xd6,0x00,0x00,0x00,0xf0,
0x00,0xee,0x06,0x00,0xd0,0x6a,0x00,0x00,0x00,0xf0,0x00,0x55,0x03,0x00,0x68,
0xb7,0xfc,0x00,0x7e,0xf0,0x00,0x6d,0x05,0x00,0xa8,0xaa,0xfc,0x80,0x7e,0xf0,
0x00,0xb6,0x05,0x00,0x50,0xbb,0xfe,0x01,0x7e,0xf0,0x00,0x55,0x05,0x00,0x78,
0xad,0xfe,0x81,0x1f,0xf0,0x00,0xb6,0x05,0x00,0xa4,0xb5,0xfe,0x81,0x1f,0xf0,
0x00,0x5b,0x05,0x80,0xba,0x56,0xfe,0x83,0x1f,0xf0,0x00,0xaa,0x6b,0x5b,0xd5,
0x5a,0xff,0x85,0x1f,0xf0,0x00,0xdb,0x5a,0xad,0x57,0x2b,0xff,0xc7,0x0f,0xf0,
0x00,0x6d,0xad,0xd5,0x6a,0x0d,0xff,0xc7,0x0f,0xf0,0x00,0xaa,0xd6,0xb6,0xba,
0x05,0xdf,0xc7,0x0f,0xf0,0x00,0xb7,0xb5,0x5a,0xab,0x8a,0xdf,0xcf,0x0f,0xf0,
0x00,0xd9,0x5a,0xab,0x6d,0x8f,0xcf,0xef,0x07,0xf0,0x00,0x56,0xad,0x75,0xb5,
0xaf,0x8f,0xef,0x07,0xf0,0x00,0xb5,0xeb,0x5a,0x00,0x9f,0xcf,0xef,0x07,0xf0,
0x00,0x00,0x00,0x00,0x00,0xff,0x8f,0xff,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,
0xfe,0x87,0xff,0x03,0xf0,0x00,0x00,0x00,0x00,0x00,0xff,0x03,0xff,0x03,0xf0,
0x00,0x00,0x00,0x00,0x00,0xfe,0x03,0xff,0x03,0xf0,0x00,0x00,0x00,0x00,0x00,
0xfe,0x03,0xff,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,0xfc,0x01,0xff,0x03,0xf0,
0x00,0x00,0x00,0x00,0x00,0xfe,0x01,0xfe,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,
0xfc,0x01,0xfe,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0};

212
lib/bwidget/demo/demo.tcl

@ -0,0 +1,212 @@ @@ -0,0 +1,212 @@
#!/bin/sh
# The next line is executed by /bin/sh, but not tcl \
exec wish "$0" ${1+"$@"}
namespace eval Demo {
variable _wfont
variable notebook
variable mainframe
variable status
variable prgtext
variable prgindic
variable font
variable font_name
variable toolbar1 1
variable toolbar2 1
set pwd [pwd]
cd [file dirname [info script]]
variable DEMODIR [pwd]
cd $pwd
foreach script {
manager.tcl basic.tcl select.tcl dnd.tcl tree.tcl tmpldlg.tcl
} {
namespace inscope :: source $DEMODIR/$script
}
}
proc Demo::create { } {
global tk_patchLevel
variable _wfont
variable notebook
variable mainframe
variable font
variable prgtext
variable prgindic
set prgtext "Please wait while loading font..."
set prgindic -1
_create_intro
update
SelectFont::loadfont
bind all <F12> { catch {console show} }
# Menu description
set descmenu {
"&File" all file 0 {
{command "E&xit" {} "Exit BWidget demo" {} -command exit}
}
"&Options" all options 0 {
{checkbutton "Toolbar &1" {all option} "Show/hide toolbar 1" {}
-variable Demo::toolbar1
-command {$Demo::mainframe showtoolbar 0 $Demo::toolbar1}
}
{checkbutton "Toolbar &2" {all option} "Show/hide toolbar 2" {}
-variable Demo::toolbar2
-command {$Demo::mainframe showtoolbar 1 $Demo::toolbar2}
}
}
}
set prgtext "Creating MainFrame..."
set prgindic 0
set mainframe [MainFrame .mainframe \
-menu $descmenu \
-textvariable Demo::status \
-progressvar Demo::prgindic]
# toolbar 1 creation
incr prgindic
set tb1 [$mainframe addtoolbar]
set bbox [ButtonBox $tb1.bbox1 -spacing 0 -padx 1 -pady 1]
$bbox add -image [Bitmap::get new] \
-highlightthickness 0 -takefocus 0 -relief link -borderwidth 1 -padx 1 -pady 1 \
-helptext "Create a new file"
$bbox add -image [Bitmap::get open] \
-highlightthickness 0 -takefocus 0 -relief link -borderwidth 1 -padx 1 -pady 1 \
-helptext "Open an existing file"
$bbox add -image [Bitmap::get save] \
-highlightthickness 0 -takefocus 0 -relief link -borderwidth 1 -padx 1 -pady 1 \
-helptext "Save file"
pack $bbox -side left -anchor w
set sep [Separator $tb1.sep -orient vertical]
pack $sep -side left -fill y -padx 4 -anchor w
incr prgindic
set bbox [ButtonBox $tb1.bbox2 -spacing 0 -padx 1 -pady 1]
$bbox add -image [Bitmap::get cut] \
-highlightthickness 0 -takefocus 0 -relief link -borderwidth 1 -padx 1 -pady 1 \
-helptext "Cut selection"
$bbox add -image [Bitmap::get copy] \
-highlightthickness 0 -takefocus 0 -relief link -borderwidth 1 -padx 1 -pady 1 \
-helptext "Copy selection"
$bbox add -image [Bitmap::get paste] \
-highlightthickness 0 -takefocus 0 -relief link -borderwidth 1 -padx 1 -pady 1 \
-helptext "Paste selection"
pack $bbox -side left -anchor w
# toolbar 2 creation
incr prgindic
set tb2 [$mainframe addtoolbar]
set _wfont [SelectFont $tb2.font -type toolbar \
-command "Demo::update_font \[$tb2.font cget -font\]"]
set font [$_wfont cget -font]
pack $_wfont -side left -anchor w
$mainframe addindicator -text "BWidget [package version BWidget]"
$mainframe addindicator -textvariable tk_patchLevel
# NoteBook creation
set frame [$mainframe getframe]
set notebook [NoteBook $frame.nb]
set prgtext "Creating Manager..."
incr prgindic
set f0 [DemoManager::create $notebook]
set prgtext "Creating Basic..."
incr prgindic
set f1 [DemoBasic::create $notebook]
set prgtext "Creating Select..."
incr prgindic
set f2 [DemoSelect::create $notebook]
set prgtext "Creating Dialog..."
incr prgindic
set f3b [DemoDlg::create $notebook]
set prgtext "Creating Drag and Drop..."
incr prgindic
set f4 [DemoDnd::create $notebook]
set prgtext "Creating Tree..."
incr prgindic
set f5 [DemoTree::create $notebook]
set prgtext "Done"
incr prgindic
$notebook compute_size
pack $notebook -fill both -expand yes -padx 4 -pady 4
$notebook raise [$notebook page 0]
pack $mainframe -fill both -expand yes
update idletasks
destroy .intro
}
proc Demo::update_font { newfont } {
variable _wfont
variable notebook
variable font
variable font_name
. configure -cursor watch
if { $font != $newfont } {
$_wfont configure -font $newfont
$notebook configure -font $newfont
set font $newfont
}
. configure -cursor ""
}
proc Demo::_create_intro { } {
variable DEMODIR
set top [toplevel .intro -relief raised -borderwidth 2]
wm withdraw $top
wm overrideredirect $top 1
set ximg [label $top.x -bitmap @$DEMODIR/x1.xbm \
-foreground grey90 -background white]
set bwimg [label $ximg.bw -bitmap @$DEMODIR/bwidget.xbm \
-foreground grey90 -background white]
set frame [frame $ximg.f -background white]
set lab1 [label $frame.lab1 -text "Loading demo" \
-background white -font {times 8}]
set lab2 [label $frame.lab2 -textvariable Demo::prgtext \
-background white -font {times 8} -width 35]
set prg [ProgressBar $frame.prg -width 50 -height 10 -background white \
-variable Demo::prgindic -maximum 10]
pack $lab1 $lab2 $prg
place $frame -x 0 -y 0 -anchor nw
place $bwimg -relx 1 -rely 1 -anchor se
pack $ximg
BWidget::place $top 0 0 center
wm deiconify $top
}
proc Demo::main {} {
variable DEMODIR
lappend ::auto_path [file dirname $DEMODIR]
package require BWidget
option add *TitleFrame.l.font {helvetica 11 bold italic}
wm withdraw .
wm title . "BWidget demo"
Demo::create
BWidget::place . 0 0 center
wm deiconify .
raise .
focus -force .
}
Demo::main
wm geom . [wm geom .]

42
lib/bwidget/demo/dnd.tcl

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
namespace eval DemoDnd {
}
proc DemoDnd::create { nb } {
set frame [$nb insert end demoDnd -text "Drag and Drop"]
set titf1 [TitleFrame $frame.titf1 -text "Drag sources"]
set subf [$titf1 getframe]
set ent1 [LabelEntry $subf.e1 -label "Entry" -labelwidth 14 -dragenabled 1 -dragevent 3]
set labf1 [LabelFrame $subf.f1 -text "Label (text)" -width 14]
set f [$labf1 getframe]
set lab [Label $f.l -text "Drag this text" -dragenabled 1 -dragevent 3]
pack $lab
set labf2 [LabelFrame $subf.f2 -text "Label (bitmap)" -width 14]
set f [$labf2 getframe]
set lab [Label $f.l -bitmap info -dragenabled 1 -dragevent 3]
pack $lab
pack $ent1 $labf1 $labf2 -side top -fill x -pady 4
set titf2 [TitleFrame $frame.titf2 -text "Drop targets"]
set subf [$titf2 getframe]
set ent1 [LabelEntry $subf.e1 -label "Entry" -labelwidth 14 -dropenabled 1]
set labf1 [LabelFrame $subf.f1 -text "Label" -width 14]
set f [$labf1 getframe]
set lab [Label $f.l -dropenabled 1 -highlightthickness 1]
pack $lab -fill x
pack $ent1 $labf1 -side top -fill x -pady 4
pack $titf1 $titf2 -pady 4
return $frame
}

141
lib/bwidget/demo/manager.tcl

@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
namespace eval DemoManager {
variable _progress 0
variable _afterid ""
variable _status "Compute in progress..."
variable _homogeneous 0
}
proc DemoManager::create { nb } {
set frame [$nb insert end demoManager -text "Manager"]
set topf [frame $frame.topf]
set titf1 [TitleFrame $topf.titf1 -text "MainFrame"]
set titf2 [TitleFrame $topf.titf2 -text "NoteBook"]
set titf3 [TitleFrame $frame.titf3 -text "Paned & ScrolledWindow"]
_mainframe [$titf1 getframe]
_notebook [$titf2 getframe]
_paned [$titf3 getframe]
pack $titf1 $titf2 -padx 4 -side left -fill both -expand yes
pack $topf -fill x -pady 2
pack $titf3 -pady 2 -padx 4 -fill both -expand yes
return $frame
}
proc DemoManager::_mainframe { parent } {
set labf1 [LabelFrame $parent.labf1 -text "Toolbar" -side top -anchor w \
-relief sunken -borderwidth 2]
set subf [$labf1 getframe]
checkbutton $subf.chk1 -text "View toolbar 1" -variable Demo::toolbar1 \
-command {$Demo::mainframe showtoolbar 0 $Demo::toolbar1}
checkbutton $subf.chk2 -text "View toolbar 2" -variable Demo::toolbar2 \
-command {$Demo::mainframe showtoolbar 1 $Demo::toolbar2}
pack $subf.chk1 $subf.chk2 -anchor w -fill x
pack $labf1 -fill both
set labf2 [LabelFrame $parent.labf2 -text "Status bar" -side top -anchor w \
-relief sunken -borderwidth 2]
set subf [$labf2 getframe]
checkbutton $subf.chk1 -text "Show Progress\nindicator" -justify left \
-variable DemoManager::_progress \
-command {DemoManager::_show_progress}
pack $subf.chk1 -anchor w -fill x
pack $labf1 $labf2 -side left -padx 4 -fill both
}
proc DemoManager::_notebook { parent } {
checkbutton $parent.chk1 -text "Homogeneous label" \
-variable DemoManager::_homogeneous \
-command {$Demo::notebook configure -homogeneous $DemoManager::_homogeneous}
pack $parent.chk1 -side left -anchor n -fill x
}
proc DemoManager::_paned { parent } {
set pw1 [PanedWindow $parent.pw -side top]
set pane [$pw1 add -minsize 100]
set pw2 [PanedWindow $pane.pw -side left]
set pane1 [$pw2 add -minsize 100]
set pane2 [$pw2 add -minsize 100]
set pane3 [$pw1 add -minsize 100]
foreach pane [list $pane1 $pane2] {
set sw [ScrolledWindow $pane.sw]
set lb [listbox $sw.lb -height 8 -width 20 -highlightthickness 0]
for {set i 1} {$i <= 8} {incr i} {
$lb insert end "Value $i"
}
$sw setwidget $lb
pack $sw -fill both -expand yes
}
set sw [ScrolledWindow $pane3.sw -relief sunken -borderwidth 2]
set sf [ScrollableFrame $sw.f]
$sw setwidget $sf
set subf [$sf getframe]
set lab [label $subf.lab -text "This is a ScrollableFrame"]
set chk [checkbutton $subf.chk -text "Constrained width" \
-variable DemoManager::_constw \
-command "$sf configure -constrainedwidth \$DemoManager::_constw"]
pack $lab
pack $chk -anchor w
bind $chk <FocusIn> "$sf see $chk"
for {set i 0} {$i <= 20} {incr i} {
pack [entry $subf.ent$i -width 50] -fill x -pady 4
bind $subf.ent$i <FocusIn> "$sf see $subf.ent$i"
$subf.ent$i insert end "Text field $i"
}
pack $sw $pw2 $pw1 -fill both -expand yes
}
proc DemoManager::_show_progress { } {
variable _progress
variable _afterid
variable _status
if { $_progress } {
set Demo::status "Compute in progress..."
set Demo::prgindic 0
$Demo::mainframe showstatusbar progression
if { $_afterid == "" } {
set _afterid [after 30 DemoManager::_update_progress]
}
} else {
set Demo::status ""
$Demo::mainframe showstatusbar status
set _afterid ""
}
}
proc DemoManager::_update_progress { } {
variable _progress
variable _afterid
if { $_progress } {
if { $Demo::prgindic < 100 } {
incr Demo::prgindic 5
set _afterid [after 30 DemoManager::_update_progress]
} else {
set _progress 0
$Demo::mainframe showstatusbar status
set Demo::status "Done"
set _afterid ""
after 500 {set Demo::status ""}
}
} else {
set _afterid ""
}
}

59
lib/bwidget/demo/select.tcl

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
namespace eval DemoSelect {
variable var
}
proc DemoSelect::create { nb } {
set frame [$nb insert end demoSelect -text "Spin & Combo"]
set titf1 [TitleFrame $frame.titf1 -text SpinBox]
set subf [$titf1 getframe]
set spin [SpinBox $subf.spin \
-range {1 100 1} -textvariable DemoSelect::var(spin,var) \
-helptext "This is the SpinBox"]
set ent [LabelEntry $subf.ent -label "Linked var" -labelwidth 10 -labelanchor w \
-textvariable DemoSelect::var(spin,var) -editable 0 \
-helptext "This is an Entry reflecting\nthe linked var of SpinBox"]
set labf [LabelFrame $subf.options -text "Options" -side top -anchor w \
-relief sunken -borderwidth 1 \
-helptext "Modify some options of SpinBox"]
set subf [$labf getframe]
set chk1 [checkbutton $subf.chk1 -text "Non editable" \
-variable DemoSelect::var(spin,editable) -onvalue false -offvalue true \
-command "$spin configure -editable \$DemoSelect::var(spin,editable)"]
set chk2 [checkbutton $subf.chk2 -text "Disabled" \
-variable DemoSelect::var(spin,state) -onvalue disabled -offvalue normal \
-command "$spin configure -state \$DemoSelect::var(spin,state)"]
pack $chk1 $chk2 -side left -anchor w
pack $spin $ent $labf -pady 4 -fill x
pack $titf1
set titf2 [TitleFrame $frame.titf2 -text ComboBox]
set subf [$titf2 getframe]
set combo [ComboBox $subf.combo \
-textvariable DemoSelect::var(combo,var) \
-values {"first value" "second value" "third value" "fourth value" "fifth value"} \
-helptext "This is the ComboBox"]
set ent [LabelEntry $subf.ent -label "Linked var" -labelwidth 10 -labelanchor w \
-textvariable DemoSelect::var(combo,var) -editable 0 \
-helptext "This is an Entry reflecting\nthe linked var of ComboBox"]
set labf [LabelFrame $subf.options -text "Options" -side top -anchor w \
-relief sunken -borderwidth 1 \
-helptext "Modify some options of SpinBox"]
set subf [$labf getframe]
set chk1 [checkbutton $subf.chk1 -text "Non editable" \
-variable DemoSelect::var(combo,editable) -onvalue false -offvalue true \
-command "$combo configure -editable \$DemoSelect::var(combo,editable)"]
set chk2 [checkbutton $subf.chk2 -text "Disabled" \
-variable DemoSelect::var(combo,state) -onvalue disabled -offvalue normal \
-command "$combo configure -state \$DemoSelect::var(combo,state)"]
pack $chk1 $chk2 -side left -anchor w
pack $combo $ent $labf -pady 4 -fill x
pack $titf1 $titf2 -pady 4
return $frame
}

214
lib/bwidget/demo/tmpldlg.tcl

@ -0,0 +1,214 @@ @@ -0,0 +1,214 @@
namespace eval DemoDlg {
variable tmpl
variable msg
variable progmsg
variable progval
variable resources "en"
}
proc DemoDlg::create { nb } {
set frame [$nb insert end demoDlg -text "Dialog"]
set titf1 [TitleFrame $frame.titf1 -text "Resources"]
set titf2 [TitleFrame $frame.titf2 -text "Template Dialog"]
set titf3 [TitleFrame $frame.titf3 -text "Message Dialog"]
set titf4 [TitleFrame $frame.titf4 -text "Other dialog"]
set subf [$titf1 getframe]
set cmd {option read [file join $::BWIDGET::LIBRARY "lang" $DemoDlg::resources.rc]}
set rad1 [radiobutton $subf.rad1 -text "English" \
-variable DemoDlg::resources -value en \
-command $cmd]
set rad2 [radiobutton $subf.rad2 -text "French" \
-variable DemoDlg::resources -value fr \
-command $cmd]
set rad3 [radiobutton $subf.rad3 -text "German" \
-variable DemoDlg::resources -value de \
-command $cmd]
pack $rad1 $rad2 $rad3 -side left
_tmpldlg [$titf2 getframe]
_msgdlg [$titf3 getframe]
_stddlg [$titf4 getframe]
pack $titf1 -fill x -pady 2 -padx 2
pack $titf4 -side bottom -fill x -pady 2 -padx 2
pack $titf2 $titf3 -side left -padx 2 -fill both -expand yes
}
proc DemoDlg::_tmpldlg { parent } {
variable tmpl
set tmpl(side) bottom
set tmpl(anchor) c
set labf1 [LabelFrame $parent.labf1 -text "Button side" -side top \
-anchor w -relief sunken -borderwidth 1]
set subf [$labf1 getframe]
radiobutton $subf.rad1 -text "Bottom" \
-variable DemoDlg::tmpl(side) -value bottom -anchor w
radiobutton $subf.rad2 -text "Left" \
-variable DemoDlg::tmpl(side) -value left -anchor w
radiobutton $subf.rad3 -text "Right" \
-variable DemoDlg::tmpl(side) -value right -anchor w
radiobutton $subf.rad4 -text "Top" \
-variable DemoDlg::tmpl(side) -value top -anchor w
pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 -fill x -anchor w
set labf2 [LabelFrame $parent.labf2 -text "Button anchor" -side top \
-anchor w -relief sunken -borderwidth 1]
set subf [$labf2 getframe]
radiobutton $subf.rad1 -text "North" \
-variable DemoDlg::tmpl(anchor) -value n -anchor w
radiobutton $subf.rad2 -text "West" \
-variable DemoDlg::tmpl(anchor) -value w -anchor w
radiobutton $subf.rad3 -text "East" \
-variable DemoDlg::tmpl(anchor) -value e -anchor w
radiobutton $subf.rad4 -text "South" \
-variable DemoDlg::tmpl(anchor) -value s -anchor w
radiobutton $subf.rad5 -text "Center" \
-variable DemoDlg::tmpl(anchor) -value c -anchor w
pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 $subf.rad5 -fill x -anchor w
set sep [Separator $parent.sep -orient horizontal]
set button [button $parent.but -text "Show" -command DemoDlg::_show_tmpldlg]
pack $button -side bottom
pack $sep -side bottom -fill x -pady 10
pack $labf1 $labf2 -side left -padx 4 -anchor n
}
proc DemoDlg::_msgdlg { parent } {
variable msg
set msg(type) ok
set msg(icon) info
set labf1 [LabelFrame $parent.labf1 -text "Type" -side top \
-anchor w -relief sunken -borderwidth 1]
set subf [$labf1 getframe]
radiobutton $subf.rad1 -text "Ok" -variable DemoDlg::msg(type) -value ok -anchor w
radiobutton $subf.rad2 -text "Ok, Cancel" -variable DemoDlg::msg(type) -value okcancel -anchor w
radiobutton $subf.rad3 -text "Retry, Cancel" -variable DemoDlg::msg(type) -value retrycancel -anchor w
radiobutton $subf.rad4 -text "Yes, No" -variable DemoDlg::msg(type) -value yesno -anchor w
radiobutton $subf.rad5 -text "Yes, No, Cancel" -variable DemoDlg::msg(type) -value yesnocancel -anchor w
radiobutton $subf.rad6 -text "Abort, Retry, Ignore" -variable DemoDlg::msg(type) -value abortretryignore -anchor w
radiobutton $subf.rad7 -text "User" -variable DemoDlg::msg(type) -value user -anchor w
Entry $subf.user -textvariable DemoDlg::msg(buttons)
pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 $subf.rad5 $subf.rad6 -fill x -anchor w
pack $subf.rad7 $subf.user -side left
set labf2 [LabelFrame $parent.labf2 -text "Icon" -side top -anchor w -relief sunken -borderwidth 1]
set subf [$labf2 getframe]
radiobutton $subf.rad1 -text "Information" -variable DemoDlg::msg(icon) -value info -anchor w
radiobutton $subf.rad2 -text "Question" -variable DemoDlg::msg(icon) -value question -anchor w
radiobutton $subf.rad3 -text "Warning" -variable DemoDlg::msg(icon) -value warning -anchor w
radiobutton $subf.rad4 -text "Error" -variable DemoDlg::msg(icon) -value error -anchor w
pack $subf.rad1 $subf.rad2 $subf.rad3 $subf.rad4 -fill x -anchor w
set sep [Separator $parent.sep -orient horizontal]
set button [button $parent.but -text "Show" -command DemoDlg::_show_msgdlg]
pack $button -side bottom
pack $sep -side bottom -fill x -pady 10
pack $labf1 $labf2 -side left -padx 4 -anchor n
}
proc DemoDlg::_stddlg { parent } {
set but0 [button $parent.but0 \
-text "Select a color " \
-command "DemoDlg::_show_color $parent.but0"]
set but1 [button $parent.but1 \
-text "Font selector dialog" \
-command DemoDlg::_show_fontdlg]
set but2 [button $parent.but2 \
-text "Progression dialog" \
-command DemoDlg::_show_progdlg]
set but3 [button $parent.but3 \
-text "Password dialog" \
-command DemoDlg::_show_passdlg]
pack $but0 $but1 $but2 $but3 -side left -padx 5 -anchor w
}
proc DemoDlg::_show_color {w} {
set color [SelectColor::menu $w.color [list below $w] \
-color [$w cget -background]]
if {[string length $color]} {
$w configure -background $color
}
}
proc DemoDlg::_show_tmpldlg { } {
variable tmpl
set dlg [Dialog .tmpldlg -parent . -modal local \
-separator 1 \
-title "Template dialog" \
-side $tmpl(side) \
-anchor $tmpl(anchor) \
-default 0 -cancel 1]
$dlg add -name ok
$dlg add -name cancel
set msg [message [$dlg getframe].msg -text "Template\nDialog" -justify center -anchor c]
pack $msg -fill both -expand yes -padx 100 -pady 100
$dlg draw
destroy $dlg
}
proc DemoDlg::_show_msgdlg { } {
variable msg
destroy .msgdlg
MessageDlg .msgdlg -parent . \
-message "Message for MessageBox" \
-type $msg(type) \
-icon $msg(icon) \
-buttons $msg(buttons)
}
proc DemoDlg::_show_fontdlg { } {
set font [SelectFont .fontdlg -parent . -font $Demo::font]
if { $font != "" } {
Demo::update_font $font
}
}
proc DemoDlg::_show_progdlg { } {
set DemoDlg::progmsg "Compute in progress..."
set DemoDlg::progval 0
ProgressDlg .progress -parent . -title "Wait..." \
-type infinite \
-width 20 \
-textvariable DemoDlg::progmsg \
-variable DemoDlg::progval \
-stop "Stop" \
-command {destroy .progress}
_update_progdlg
}
proc DemoDlg::_update_progdlg { } {
if { [winfo exists .progress] } {
set DemoDlg::progval 2
after 20 DemoDlg::_update_progdlg
}
}
proc DemoDlg::_show_passdlg { } {
PasswdDlg .passwd -parent .
}

260
lib/bwidget/demo/tree.tcl

@ -0,0 +1,260 @@ @@ -0,0 +1,260 @@
namespace eval DemoTree {
variable count
variable dblclick
}
proc DemoTree::create { nb } {
set frame [$nb insert end demoTree -text "Tree"]
set pw [PanedWindow $frame.pw -side top]
set pane [$pw add -weight 1]
set title [TitleFrame $pane.lf -text "Directory tree"]
set sw [ScrolledWindow [$title getframe].sw \
-relief sunken -borderwidth 2]
set tree [Tree $sw.tree \
-relief flat -borderwidth 0 -width 15 -highlightthickness 0\
-redraw 0 -dropenabled 1 -dragenabled 1 \
-dragevent 3 \
-droptypes {
TREE_NODE {copy {} move {} link {}}
LISTBOX_ITEM {copy {} move {} link {}}
} \
-opencmd "DemoTree::moddir 1 $sw.tree" \
-closecmd "DemoTree::moddir 0 $sw.tree"]
$sw setwidget $tree
pack $sw -side top -expand yes -fill both
pack $title -fill both -expand yes
set pane [$pw add -weight 2]
set lf [TitleFrame $pane.lf -text "Content"]
set sw [ScrolledWindow [$lf getframe].sw \
-scrollbar horizontal -auto none -relief sunken -borderwidth 2]
set list [ListBox::create $sw.lb \
-relief flat -borderwidth 0 \
-dragevent 3 \
-dropenabled 1 -dragenabled 1 \
-width 20 -highlightthickness 0 -multicolumn true \
-redraw 0 -dragenabled 1 \
-droptypes {
TREE_NODE {copy {} move {} link {}}
LISTBOX_ITEM {copy {} move {} link {}}}]
$sw setwidget $list
pack $sw $lf -fill both -expand yes
pack $pw -fill both -expand yes
$tree bindText <ButtonPress-1> "DemoTree::select tree 1 $tree $list"
$tree bindText <Double-ButtonPress-1> "DemoTree::select tree 2 $tree $list"
$list bindText <ButtonPress-1> "DemoTree::select list 1 $tree $list"
$list bindText <Double-ButtonPress-1> "DemoTree::select list 2 $tree $list"
$list bindImage <Double-ButtonPress-1> "DemoTree::select list 2 $tree $list"
$nb itemconfigure demoTree \
-createcmd "DemoTree::init $tree $list" \
-raisecmd {
# on windows you can get 100x100+-200+200 [PT]
regexp {[0-9]+x[0-9]+([+-]{1,2}[0-9]+)([+-]{1,2}[0-9]+)} \
[wm geom .] global_foo global_w global_h
# {}'s left off on purpose. [PT]
BWidget::place .top 0 0 at [expr $global_w-[winfo screenwidth .]] $global_h
wm deiconify .top
bind . <Unmap> {wm withdraw .top}
bind . <Map> {wm deiconify .top}
bind . <Configure> {
if { ![string compare %W "."] } {
# see above re: windows geometry
regexp {[0-9]+x[0-9]+([+-]{1,2}[0-9]+)([+-]{1,2}[0-9]+)} \
[wm geom .] global_foo global_w global_h
BWidget::place .top 0 0 at [expr $global_w-[winfo screenwidth .]] $global_h
}
}
} \
-leavecmd {
wm withdraw .top
bind . <Unmap> {}
bind . <Map> {}
bind . <Configure> {}
return 1
}
}
proc DemoTree::init { tree list args } {
global tcl_platform
variable count
set count 0
if { $tcl_platform(platform) == "unix" } {
set rootdir [glob "~"]
} else {
set rootdir "c:\\"
}
$tree insert end root home -text $rootdir -data $rootdir -open 1 \
-image [Bitmap::get openfold]
getdir $tree home $rootdir
DemoTree::select tree 1 $tree $list home
$tree configure -redraw 1
$list configure -redraw 1
# ScrollView
set w .top
toplevel $w
wm withdraw $w
wm protocol $w WM_DELETE_WINDOW {
# don't kill me
}
wm resizable $w 0 0
wm title $w "Drag rectangle to scroll directory tree"
wm transient $w .
ScrollView $w.sv -window $tree -fill white -relief sunken -bd 1 \
-width 300 -height 300
pack $w.sv -fill both -expand yes
}
proc DemoTree::getdir { tree node path } {
variable count
set lentries [glob -nocomplain [file join $path "*"]]
set lfiles {}
foreach f $lentries {
set tail [file tail $f]
if { [file isdirectory $f] } {
$tree insert end $node n:$count \
-text $tail \
-image [Bitmap::get folder] \
-drawcross allways \
-data $f
incr count
} else {
lappend lfiles $tail
}
}
$tree itemconfigure $node -drawcross auto -data $lfiles
}
proc DemoTree::moddir { idx tree node } {
if { $idx && [$tree itemcget $node -drawcross] == "allways" } {
getdir $tree $node [$tree itemcget $node -data]
if { [llength [$tree nodes $node]] } {
$tree itemconfigure $node -image [Bitmap::get openfold]
} else {
$tree itemconfigure $node -image [Bitmap::get folder]
}
} else {
$tree itemconfigure $node -image [Bitmap::get [lindex {folder openfold} $idx]]
}
}
proc DemoTree::select { where num tree list node } {
variable dblclick
set dblclick 1
if { $num == 1 } {
if { $where == "tree" && [lsearch [$tree selection get] $node] != -1 } {
unset dblclick
after 500 "DemoTree::edit tree $tree $list $node"
return
}
if { $where == "list" && [lsearch [$list selection get] $node] != -1 } {
unset dblclick
after 500 "DemoTree::edit list $tree $list $node"
return
}
if { $where == "tree" } {
select_node $tree $list $node
} else {
$list selection set $node
}
} elseif { $where == "list" && [$tree exists $node] } {
set parent [$tree parent $node]
while { $parent != "root" } {
$tree itemconfigure $parent -open 1
set parent [$tree parent $parent]
}
select_node $tree $list $node
}
}
proc DemoTree::select_node { tree list node } {
$tree selection set $node
update
eval $list delete [$list item 0 end]
set dir [$tree itemcget $node -data]
if { [$tree itemcget $node -drawcross] == "allways" } {
getdir $tree $node $dir
set dir [$tree itemcget $node -data]
}
foreach subnode [$tree nodes $node] {
$list insert end $subnode \
-text [$tree itemcget $subnode -text] \
-image [Bitmap::get folder]
}
set num 0
foreach f $dir {
$list insert end f:$num \
-text $f \
-image [Bitmap::get file]
incr num
}
}
proc DemoTree::edit { where tree list node } {
variable dblclick
if { [info exists dblclick] } {
return
}
if { $where == "tree" && [lsearch [$tree selection get] $node] != -1 } {
set res [$tree edit $node [$tree itemcget $node -text]]
if { $res != "" } {
$tree itemconfigure $node -text $res
if { [$list exists $node] } {
$list itemconfigure $node -text $res
}
$tree selection set $node
}
return
}
if { $where == "list" } {
set res [$list edit $node [$list itemcget $node -text]]
if { $res != "" } {
$list itemconfigure $node -text $res
if { [$tree exists $node] } {
$tree itemconfigure $node -text $res
} else {
set cursel [$tree selection get]
set index [expr {[$list index $node]-[llength [$tree nodes $cursel]]}]
set data [$tree itemcget $cursel -data]
set data [lreplace $data $index $index $res]
$tree itemconfigure $cursel -data $data
}
$list selection set $node
}
}
}
proc DemoTree::expand { tree but } {
if { [set cur [$tree selection get]] != "" } {
if { $but == 0 } {
$tree opentree $cur
} else {
$tree closetree $cur
}
}
}

2258
lib/bwidget/demo/x1.xbm

File diff suppressed because it is too large Load Diff

357
lib/bwidget/dialog.tcl

@ -0,0 +1,357 @@ @@ -0,0 +1,357 @@
# ----------------------------------------------------------------------------
# dialog.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: dialog.tcl,v 1.15.2.1 2010/08/04 13:07:59 oehhar Exp $
# ----------------------------------------------------------------------------
# Index of commands:
# - Dialog::create
# - Dialog::configure
# - Dialog::cget
# - Dialog::getframe
# - Dialog::add
# - Dialog::itemconfigure
# - Dialog::itemcget
# - Dialog::invoke
# - Dialog::setfocus
# - Dialog::enddialog
# - Dialog::draw
# - Dialog::withdraw
# - Dialog::_destroy
# ----------------------------------------------------------------------------
# JDC: added -transient and -place flag
namespace eval Dialog {
Widget::define Dialog dialog ButtonBox
Widget::bwinclude Dialog ButtonBox .bbox \
remove {-orient} \
initialize {-spacing 10 -padx 10}
Widget::declare Dialog {
{-title String "" 0}
{-geometry String "" 0}
{-modal Enum local 0 {none local global}}
{-bitmap TkResource "" 1 label}
{-image TkResource "" 1 label}
{-separator Boolean 0 1}
{-cancel Int -1 0 "%d >= -1"}
{-parent String "" 0}
{-side Enum bottom 1 {bottom left top right}}
{-anchor Enum c 1 {n e w s c}}
{-class String Dialog 1}
{-transient Boolean 1 1}
{-place Enum center 0 {none center left right above below}}
}
Widget::addmap Dialog "" :cmd {-background {}}
Widget::addmap Dialog "" .frame {-background {}}
bind BwDialog <Destroy> [list Dialog::_destroy %W]
variable _widget
}
# ----------------------------------------------------------------------------
# Command Dialog::create
# ----------------------------------------------------------------------------
proc Dialog::create { path args } {
global tcl_platform
variable _widget
array set maps [list Dialog {} .bbox {}]
array set maps [Widget::parseArgs Dialog $args]
# Check to see if the -class flag was specified
set dialogClass "Dialog"
array set dialogArgs $maps(Dialog)
if { [info exists dialogArgs(-class)] } {
set dialogClass $dialogArgs(-class)
}
if { [string equal $tcl_platform(platform) "unix"] } {
set re raised
set bd 1
} else {
set re flat
set bd 0
}
toplevel $path -relief $re -borderwidth $bd -class $dialogClass
wm withdraw $path
Widget::initFromODB Dialog $path $maps(Dialog)
bindtags $path [list $path BwDialog all]
wm overrideredirect $path 1
wm title $path [Widget::cget $path -title]
set parent [Widget::cget $path -parent]
if { ![winfo exists $parent] } {
set parent [winfo parent $path]
}
# JDC: made transient optional
if { [Widget::getoption $path -transient] } {
wm transient $path [winfo toplevel $parent]
}
set side [Widget::cget $path -side]
if { [string equal $side "left"] || [string equal $side "right"] } {
set orient vertical
} else {
set orient horizontal
}
set bbox [eval [list ButtonBox::create $path.bbox] $maps(.bbox) \
-orient $orient]
set frame [frame $path.frame -relief flat -borderwidth 0]
set bg [Widget::cget $path -background]
$path configure -background $bg
$frame configure -background $bg
if { [set bitmap [Widget::getoption $path -image]] != "" } {
set label [label $path.label -image $bitmap -background $bg]
} elseif { [set bitmap [Widget::getoption $path -bitmap]] != "" } {
set label [label $path.label -bitmap $bitmap -background $bg]
}
if { [Widget::getoption $path -separator] } {
Separator::create $path.sep -orient $orient -background $bg
}
set _widget($path,realized) 0
set _widget($path,nbut) 0
set cancel [Widget::getoption $path -cancel]
bind $path <Escape> [list ButtonBox::invoke $path.bbox $cancel]
if {$cancel != -1} {
wm protocol $path WM_DELETE_WINDOW [list ButtonBox::invoke $path.bbox $cancel]
}
bind $path <Return> [list ButtonBox::invoke $path.bbox default]
return [Widget::create Dialog $path]
}
# ----------------------------------------------------------------------------
# Command Dialog::configure
# ----------------------------------------------------------------------------
proc Dialog::configure { path args } {
set res [Widget::configure $path $args]
if { [Widget::hasChanged $path -title title] } {
wm title $path $title
}
if { [Widget::hasChanged $path -background bg] } {
if { [winfo exists $path.label] } {
$path.label configure -background $bg
}
if { [winfo exists $path.sep] } {
Separator::configure $path.sep -background $bg
}
}
if { [Widget::hasChanged $path -cancel cancel] } {
bind $path <Escape> [list ButtonBox::invoke $path.bbox $cancel]
if {$cancel == -1} {
wm protocol $path WM_DELETE_WINDOW ""
} else {
wm protocol $path WM_DELETE_WINDOW [list ButtonBox::invoke $path.bbox $cancel]
}
}
return $res
}
# ----------------------------------------------------------------------------
# Command Dialog::cget
# ----------------------------------------------------------------------------
proc Dialog::cget { path option } {
return [Widget::cget $path $option]
}
# ----------------------------------------------------------------------------
# Command Dialog::getframe
# ----------------------------------------------------------------------------
proc Dialog::getframe { path } {
return $path.frame
}
# ----------------------------------------------------------------------------
# Command Dialog::add
# ----------------------------------------------------------------------------
proc Dialog::add { path args } {
variable _widget
if {[string equal $::tcl_platform(platform) "windows"]
&& $::tk_version >= 8.4} {
set width -11
} else {
set width 8
}
set cmd [list ButtonBox::add $path.bbox -width $width \
-command [list Dialog::enddialog $path $_widget($path,nbut)]]
set res [eval $cmd $args]
incr _widget($path,nbut)
return $res
}
# ----------------------------------------------------------------------------
# Command Dialog::itemconfigure
# ----------------------------------------------------------------------------
proc Dialog::itemconfigure { path index args } {
return [eval [list ButtonBox::itemconfigure $path.bbox $index] $args]
}
# ----------------------------------------------------------------------------
# Command Dialog::itemcget
# ----------------------------------------------------------------------------
proc Dialog::itemcget { path index option } {
return [ButtonBox::itemcget $path.bbox $index $option]
}
# ----------------------------------------------------------------------------
# Command Dialog::invoke
# ----------------------------------------------------------------------------
proc Dialog::invoke { path index } {
ButtonBox::invoke $path.bbox $index
}
# ----------------------------------------------------------------------------
# Command Dialog::setfocus
# ----------------------------------------------------------------------------
proc Dialog::setfocus { path index } {
ButtonBox::setfocus $path.bbox $index
}
# ----------------------------------------------------------------------------
# Command Dialog::enddialog
# ----------------------------------------------------------------------------
proc Dialog::enddialog { path result } {
variable _widget
set _widget($path,result) $result
}
# ----------------------------------------------------------------------------
# Command Dialog::draw
# ----------------------------------------------------------------------------
proc Dialog::draw { path {focus ""} {overrideredirect 0} {geometry ""}} {
variable _widget
set parent [Widget::getoption $path -parent]
if { !$_widget($path,realized) } {
set _widget($path,realized) 1
if { [llength [winfo children $path.bbox]] } {
set side [Widget::getoption $path -side]
if {[string equal $side "left"] || [string equal $side "right"]} {
set pad -padx
set fill y
} else {
set pad -pady
set fill x
}
pack $path.bbox -side $side -padx 1m -pady 1m \
-anchor [Widget::getoption $path -anchor]
if { [winfo exists $path.sep] } {
pack $path.sep -side $side -fill $fill $pad 2m
}
}
if { [winfo exists $path.label] } {
pack $path.label -side left -anchor n -padx 3m -pady 3m
}
pack $path.frame -padx 1m -pady 1m -fill both -expand yes
}
set geom [Widget::getMegawidgetOption $path -geometry]
if { $geom != "" } {
wm geometry $path $geom
}
if { [string equal $geometry ""] && ($geom == "") } {
set place [Widget::getoption $path -place]
if { ![string equal $place none] } {
if { [winfo exists $parent] } {
BWidget::place $path 0 0 $place $parent
} else {
BWidget::place $path 0 0 $place
}
}
} else {
if { $geom != "" } {
wm geometry $path $geom
} else {
wm geometry $path $geometry
}
}
update idletasks
wm overrideredirect $path $overrideredirect
wm deiconify $path
# patch by Bastien Chevreux (bach@mwgdna.com)
# As seen on Windows systems *sigh*
# When the toplevel is withdrawn, the tkwait command will wait forever.
# So, check that we are not withdrawn
if {![winfo exists $parent] || \
([wm state [winfo toplevel $parent]] != "withdrawn")} {
tkwait visibility $path
}
BWidget::focus set $path
if { [winfo exists $focus] } {
focus -force $focus
} else {
ButtonBox::setfocus $path.bbox default
}
if { [set grab [Widget::cget $path -modal]] != "none" } {
BWidget::grab $grab $path
if {[info exists _widget($path,result)]} {
unset _widget($path,result)
}
tkwait variable Dialog::_widget($path,result)
if { [info exists _widget($path,result)] } {
set res $_widget($path,result)
unset _widget($path,result)
} else {
set res -1
}
withdraw $path
return $res
}
return ""
}
# ----------------------------------------------------------------------------
# Command Dialog::withdraw
# ----------------------------------------------------------------------------
proc Dialog::withdraw { path } {
BWidget::grab release $path
BWidget::focus release $path
if { [winfo exists $path] } {
wm withdraw $path
}
}
# ----------------------------------------------------------------------------
# Command Dialog::_destroy
# ----------------------------------------------------------------------------
proc Dialog::_destroy { path } {
variable _widget
Dialog::enddialog $path -1
BWidget::grab release $path
BWidget::focus release $path
if {[info exists _widget($path,result)]} {
unset _widget($path,result)
}
unset _widget($path,realized)
unset _widget($path,nbut)
Widget::destroy $path
}

197
lib/bwidget/dragsite.tcl

@ -0,0 +1,197 @@ @@ -0,0 +1,197 @@
# ------------------------------------------------------------------------------
# dragsite.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: dragsite.tcl,v 1.8 2003/10/20 21:23:52 damonc Exp $
# ------------------------------------------------------------------------------
# Index of commands:
# - DragSite::include
# - DragSite::setdrag
# - DragSite::register
# - DragSite::_begin_drag
# - DragSite::_init_drag
# - DragSite::_end_drag
# - DragSite::_update_operation
# ----------------------------------------------------------------------------
namespace eval DragSite {
Widget::define DragSite dragsite -classonly
Widget::declare DragSite [list \
[list -dragevent Enum 1 0 [list 1 2 3]] \
[list -draginitcmd String "" 0] \
[list -dragendcmd String "" 0] \
]
variable _topw ".drag"
variable _tabops
variable _state
variable _x0
variable _y0
bind BwDrag1 <ButtonPress-1> {DragSite::_begin_drag press %W %s %X %Y}
bind BwDrag1 <B1-Motion> {DragSite::_begin_drag motion %W %s %X %Y}
bind BwDrag2 <ButtonPress-2> {DragSite::_begin_drag press %W %s %X %Y}
bind BwDrag2 <B2-Motion> {DragSite::_begin_drag motion %W %s %X %Y}
bind BwDrag3 <ButtonPress-3> {DragSite::_begin_drag press %W %s %X %Y}
bind BwDrag3 <B3-Motion> {DragSite::_begin_drag motion %W %s %X %Y}
proc use {} {}
}
# ----------------------------------------------------------------------------
# Command DragSite::include
# ----------------------------------------------------------------------------
proc DragSite::include { class type event } {
set dragoptions [list \
[list -dragenabled Boolean 0 0] \
[list -draginitcmd String "" 0] \
[list -dragendcmd String "" 0] \
[list -dragtype String $type 0] \
[list -dragevent Enum $event 0 [list 1 2 3]] \
]
Widget::declare $class $dragoptions
}
# ----------------------------------------------------------------------------
# Command DragSite::setdrag
# Widget interface to register
# ----------------------------------------------------------------------------
proc DragSite::setdrag { path subpath initcmd endcmd {force 0}} {
set cen [Widget::hasChanged $path -dragenabled en]
set cdragevt [Widget::hasChanged $path -dragevent dragevt]
if { $en } {
if { $force || $cen || $cdragevt } {
register $subpath \
-draginitcmd $initcmd \
-dragendcmd $endcmd \
-dragevent $dragevt
}
} else {
register $subpath
}
}
# ----------------------------------------------------------------------------
# Command DragSite::register
# ----------------------------------------------------------------------------
proc DragSite::register { path args } {
upvar \#0 DragSite::$path drag
if { [info exists drag] } {
bind $path $drag(evt) {}
unset drag
}
Widget::init DragSite .drag$path $args
set event [Widget::getMegawidgetOption .drag$path -dragevent]
set initcmd [Widget::getMegawidgetOption .drag$path -draginitcmd]
set endcmd [Widget::getMegawidgetOption .drag$path -dragendcmd]
set tags [bindtags $path]
set idx [lsearch $tags "BwDrag*"]
Widget::destroy .drag$path
if { $initcmd != "" } {
if { $idx != -1 } {
bindtags $path [lreplace $tags $idx $idx BwDrag$event]
} else {
bindtags $path [concat $tags BwDrag$event]
}
set drag(initcmd) $initcmd
set drag(endcmd) $endcmd
set drag(evt) $event
} elseif { $idx != -1 } {
bindtags $path [lreplace $tags $idx $idx]
}
}
# ----------------------------------------------------------------------------
# Command DragSite::_begin_drag
# ----------------------------------------------------------------------------
proc DragSite::_begin_drag { event source state X Y } {
variable _x0
variable _y0
variable _state
switch -- $event {
press {
set _x0 $X
set _y0 $Y
set _state "press"
}
motion {
if { ![info exists _state] } {
# This is just extra protection. There seem to be
# rare cases where the motion comes before the press.
return
}
if { [string equal $_state "press"] } {
if { abs($_x0-$X) > 3 || abs($_y0-$Y) > 3 } {
set _state "done"
_init_drag $source $state $X $Y
}
}
}
}
}
# ----------------------------------------------------------------------------
# Command DragSite::_init_drag
# ----------------------------------------------------------------------------
proc DragSite::_init_drag { source state X Y } {
variable _topw
upvar \#0 DragSite::$source drag
destroy $_topw
toplevel $_topw
wm withdraw $_topw
wm overrideredirect $_topw 1
set info [uplevel \#0 $drag(initcmd) [list $source $X $Y .drag]]
if { $info != "" } {
set type [lindex $info 0]
set ops [lindex $info 1]
set data [lindex $info 2]
if { [winfo children $_topw] == "" } {
if { [string equal $type "BITMAP"] || [string equal $type "IMAGE"] } {
label $_topw.l -image [Bitmap::get dragicon] -relief flat -bd 0
} else {
label $_topw.l -image [Bitmap::get dragfile] -relief flat -bd 0
}
pack $_topw.l
}
wm geometry $_topw +[expr {$X+1}]+[expr {$Y+1}]
wm deiconify $_topw
if {[catch {tkwait visibility $_topw}]} {
return
}
BWidget::grab set $_topw
BWidget::focus set $_topw
bindtags $_topw [list $_topw DragTop]
DropSite::_init_drag $_topw $drag(evt) $source $state $X $Y $type $ops $data
} else {
destroy $_topw
}
}
# ----------------------------------------------------------------------------
# Command DragSite::_end_drag
# ----------------------------------------------------------------------------
proc DragSite::_end_drag { source target op type data result } {
variable _topw
upvar \#0 DragSite::$source drag
BWidget::grab release $_topw
BWidget::focus release $_topw
destroy $_topw
if { $drag(endcmd) != "" } {
uplevel \#0 $drag(endcmd) [list $source $target $op $type $data $result]
}
}

456
lib/bwidget/dropsite.tcl

@ -0,0 +1,456 @@ @@ -0,0 +1,456 @@
# ------------------------------------------------------------------------------
# dropsite.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: dropsite.tcl,v 1.8 2009/06/30 16:17:37 oehhar Exp $
# ------------------------------------------------------------------------------
# Index of commands:
# - DropSite::include
# - DropSite::setdrop
# - DropSite::register
# - DropSite::setcursor
# - DropSite::setoperation
# - DropSite::_update_operation
# - DropSite::_compute_operation
# - DropSite::_draw_operation
# - DropSite::_init_drag
# - DropSite::_motion
# - DropSite::_release
# ----------------------------------------------------------------------------
namespace eval DropSite {
Widget::define DropSite dropsite -classonly
Widget::declare DropSite [list \
[list -dropovercmd String "" 0] \
[list -dropcmd String "" 0] \
[list -droptypes String "" 0] \
]
proc use {} {}
variable _top ".drag"
variable _opw ".drag.\#op"
variable _target ""
variable _status 0
variable _tabops
variable _defops
variable _source
variable _type
variable _data
variable _evt
# key win unix
# shift 1 | 1 -> 1
# control 4 | 4 -> 4
# alt 8 | 16 -> 24
# meta | 64 -> 88
array set _tabops {
mod,none 0
mod,shift 1
mod,control 4
mod,alt 24
ops,copy 1
ops,move 1
ops,link 1
}
if { $tcl_platform(platform) == "unix" } {
set _tabops(mod,alt) 8
} else {
set _tabops(mod,alt) 16
}
array set _defops \
[list \
copy,mod shift \
move,mod control \
link,mod alt \
copy,img @[file join $::BWIDGET::LIBRARY "images" "opcopy.xbm"] \
move,img @[file join $::BWIDGET::LIBRARY "images" "opmove.xbm"] \
link,img @[file join $::BWIDGET::LIBRARY "images" "oplink.xbm"]]
bind DragTop <KeyPress-Shift_L> {DropSite::_update_operation [expr %s | 1]}
bind DragTop <KeyPress-Shift_R> {DropSite::_update_operation [expr %s | 1]}
bind DragTop <KeyPress-Control_L> {DropSite::_update_operation [expr %s | 4]}
bind DragTop <KeyPress-Control_R> {DropSite::_update_operation [expr %s | 4]}
if { $tcl_platform(platform) == "unix" } {
bind DragTop <KeyPress-Alt_L> {DropSite::_update_operation [expr %s | 8]}
bind DragTop <KeyPress-Alt_R> {DropSite::_update_operation [expr %s | 8]}
} else {
bind DragTop <KeyPress-Alt_L> {DropSite::_update_operation [expr %s | 16]}
bind DragTop <KeyPress-Alt_R> {DropSite::_update_operation [expr %s | 16]}
}
bind DragTop <KeyRelease-Shift_L> {DropSite::_update_operation [expr %s & ~1]}
bind DragTop <KeyRelease-Shift_R> {DropSite::_update_operation [expr %s & ~1]}
bind DragTop <KeyRelease-Control_L> {DropSite::_update_operation [expr %s & ~4]}
bind DragTop <KeyRelease-Control_R> {DropSite::_update_operation [expr %s & ~4]}
if { $tcl_platform(platform) == "unix" } {
bind DragTop <KeyRelease-Alt_L> {DropSite::_update_operation [expr %s & ~8]}
bind DragTop <KeyRelease-Alt_R> {DropSite::_update_operation [expr %s & ~8]}
} else {
bind DragTop <KeyRelease-Alt_L> {DropSite::_update_operation [expr %s & ~16]}
bind DragTop <KeyRelease-Alt_R> {DropSite::_update_operation [expr %s & ~16]}
}
}
# ----------------------------------------------------------------------------
# Command DropSite::include
# ----------------------------------------------------------------------------
proc DropSite::include { class types } {
set dropoptions [list \
[list -dropenabled Boolean 0 0] \
[list -dropovercmd String "" 0] \
[list -dropcmd String "" 0] \
[list -droptypes String $types 0] \
]
Widget::declare $class $dropoptions
}
# ----------------------------------------------------------------------------
# Command DropSite::setdrop
# Widget interface to register
# ----------------------------------------------------------------------------
proc DropSite::setdrop { path subpath dropover drop {force 0}} {
set cen [Widget::hasChanged $path -dropenabled en]
set ctypes [Widget::hasChanged $path -droptypes types]
if { $en } {
if { $force || $cen || $ctypes } {
register $subpath \
-droptypes $types \
-dropcmd $drop \
-dropovercmd $dropover
}
} else {
register $subpath
}
}
# ----------------------------------------------------------------------------
# Command DropSite::register
# ----------------------------------------------------------------------------
proc DropSite::register { path args } {
variable _tabops
variable _defops
upvar \#0 DropSite::$path drop
Widget::init DropSite .drop$path $args
if { [info exists drop] } {
unset drop
}
set dropcmd [Widget::getMegawidgetOption .drop$path -dropcmd]
set types [Widget::getMegawidgetOption .drop$path -droptypes]
set overcmd [Widget::getMegawidgetOption .drop$path -dropovercmd]
Widget::destroy .drop$path
if { $dropcmd != "" && $types != "" } {
set drop(dropcmd) $dropcmd
set drop(overcmd) $overcmd
foreach {type ops} $types {
set drop($type,ops) {}
set masklist {}
foreach {descop lmod} $ops {
if { ![llength $descop] || [llength $descop] > 3 } {
return -code error "invalid operation description \"$descop\""
}
foreach {subop baseop imgop} $descop {
set subop [string trim $subop]
if { ![string length $subop] } {
return -code error "sub operation is empty"
}
if { ![string length $baseop] } {
set baseop $subop
}
if { [info exists drop($type,ops,$subop)] } {
return -code error "operation \"$subop\" already defined"
}
if { ![info exists _tabops(ops,$baseop)] } {
return -code error "invalid base operation \"$baseop\""
}
if { ![string equal $subop $baseop] &&
[info exists _tabops(ops,$subop)] } {
return -code error "sub operation \"$subop\" is a base operation"
}
if { ![string length $imgop] } {
set imgop $_defops($baseop,img)
}
}
if { [string equal $lmod "program"] } {
set drop($type,ops,$subop) $baseop
set drop($type,img,$subop) $imgop
} else {
if { ![string length $lmod] } {
set lmod $_defops($baseop,mod)
}
set mask 0
foreach mod $lmod {
if { ![info exists _tabops(mod,$mod)] } {
return -code error "invalid modifier \"$mod\""
}
set mask [expr {$mask | $_tabops(mod,$mod)}]
}
if { ($mask == 0) != ([string equal $subop "default"]) } {
return -code error "sub operation default can only be used with modifier \"none\""
}
set drop($type,mod,$mask) $subop
set drop($type,ops,$subop) $baseop
set drop($type,img,$subop) $imgop
lappend masklist $mask
}
}
if { ![info exists drop($type,mod,0)] } {
set drop($type,mod,0) default
set drop($type,ops,default) copy
set drop($type,img,default) $_defops(copy,img)
lappend masklist 0
}
set drop($type,ops,force) copy
set drop($type,img,force) $_defops(copy,img)
foreach mask [lsort -integer -decreasing $masklist] {
lappend drop($type,ops) $mask $drop($type,mod,$mask)
}
}
}
}
# ----------------------------------------------------------------------------
# Command DropSite::setcursor
# ----------------------------------------------------------------------------
proc DropSite::setcursor { cursor } {
catch {.drag configure -cursor $cursor}
}
# ----------------------------------------------------------------------------
# Command DropSite::setoperation
# ----------------------------------------------------------------------------
proc DropSite::setoperation { op } {
variable _curop
variable _dragops
variable _target
variable _type
upvar \#0 DropSite::$_target drop
if { [info exist drop($_type,ops,$op)] &&
$_dragops($drop($_type,ops,$op)) } {
set _curop $op
} else {
# force to a copy operation
set _curop force
}
}
# ----------------------------------------------------------------------------
# Command DropSite::_init_drag
# ----------------------------------------------------------------------------
proc DropSite::_init_drag { top evt source state X Y type ops data } {
variable _top
variable _source
variable _type
variable _data
variable _target
variable _status
variable _state
variable _dragops
variable _opw
variable _evt
if {[info exists _dragops]} {
unset _dragops
}
array set _dragops {copy 1 move 0 link 0}
foreach op $ops {
set _dragops($op) 1
}
set _target ""
set _status 0
set _top $top
set _source $source
set _type $type
set _data $data
label $_opw -relief flat -bd 0 -highlightthickness 0 \
-foreground black -background white
bind $top <ButtonRelease-$evt> {DropSite::_release %X %Y}
bind $top <B$evt-Motion> {DropSite::_motion %X %Y}
bind $top <Motion> {DropSite::_release %X %Y}
set _state $state
set _evt $evt
_motion $X $Y
}
# ----------------------------------------------------------------------------
# Command DropSite::_update_operation
# ----------------------------------------------------------------------------
proc DropSite::_update_operation { state } {
variable _top
variable _status
variable _state
if { $_status & 3 } {
set _state $state
_motion [winfo pointerx $_top] [winfo pointery $_top]
}
}
# ----------------------------------------------------------------------------
# Command DropSite::_compute_operation
# ----------------------------------------------------------------------------
proc DropSite::_compute_operation { target state type } {
variable _curop
variable _dragops
upvar \#0 DropSite::$target drop
foreach {mask op} $drop($type,ops) {
if { ($state & $mask) == $mask } {
if { $_dragops($drop($type,ops,$op)) } {
set _curop $op
return
}
}
}
set _curop force
}
# ----------------------------------------------------------------------------
# Command DropSite::_draw_operation
# ----------------------------------------------------------------------------
proc DropSite::_draw_operation { target type } {
variable _opw
variable _curop
variable _dragops
variable _tabops
variable _status
upvar \#0 DropSite::$target drop
if { !($_status & 1) } {
catch {place forget $_opw}
return
}
if { 0 } {
if { ![info exist drop($type,ops,$_curop)] ||
!$_dragops($drop($type,ops,$_curop)) } {
# force to a copy operation
set _curop copy
catch {
$_opw configure -bitmap $_tabops(img,copy)
place $_opw -relx 1 -rely 1 -anchor se
}
}
} elseif { [string equal $_curop "default"] } {
catch {place forget $_opw}
} else {
catch {
$_opw configure -bitmap $drop($type,img,$_curop)
place $_opw -relx 1 -rely 1 -anchor se
}
}
}
# ----------------------------------------------------------------------------
# Command DropSite::_motion
# ----------------------------------------------------------------------------
proc DropSite::_motion { X Y } {
variable _top
variable _target
variable _status
variable _state
variable _curop
variable _type
variable _data
variable _source
variable _evt
set script [bind $_top <B$_evt-Motion>]
bind $_top <B$_evt-Motion> {}
bind $_top <Motion> {}
wm geometry $_top "+[expr {$X+1}]+[expr {$Y+1}]"
update
if { ![winfo exists $_top] } {
return
}
set path [winfo containing $X $Y]
if { ![string equal $path $_target] } {
# path != current target
if { $_status & 2 } {
# current target is valid and has recall status
# generate leave event
upvar \#0 DropSite::$_target drop
uplevel \#0 $drop(overcmd) [list $_target $_source leave $X $Y $_curop $_type $_data]
}
set _target $path
upvar \#0 DropSite::$_target drop
if { [info exists drop($_type,ops)] } {
# path is a valid target
_compute_operation $_target $_state $_type
if { $drop(overcmd) != "" } {
set arg [list $_target $_source enter $X $Y $_curop $_type $_data]
set _status [uplevel \#0 $drop(overcmd) $arg]
} else {
set _status 1
catch {$_top configure -cursor based_arrow_down}
}
_draw_operation $_target $_type
update
catch {
bind $_top <B$_evt-Motion> {DropSite::_motion %X %Y}
bind $_top <Motion> {DropSite::_release %X %Y}
}
return
} else {
set _status 0
catch {$_top configure -cursor dot}
_draw_operation "" ""
}
} elseif { $_status & 2 } {
upvar \#0 DropSite::$_target drop
_compute_operation $_target $_state $_type
set arg [list $_target $_source motion $X $Y $_curop $_type $_data]
set _status [uplevel \#0 $drop(overcmd) $arg]
_draw_operation $_target $_type
}
update
catch {
bind $_top <B$_evt-Motion> {DropSite::_motion %X %Y}
bind $_top <Motion> {DropSite::_release %X %Y}
}
}
# ----------------------------------------------------------------------------
# Command DropSite::_release
# ----------------------------------------------------------------------------
proc DropSite::_release { X Y } {
variable _target
variable _status
variable _curop
variable _source
variable _type
variable _data
if { $_status & 1 } {
upvar \#0 DropSite::$_target drop
set res [uplevel \#0 $drop(dropcmd) [list $_target $_source $X $Y $_curop $_type $_data]]
DragSite::_end_drag $_source $_target $drop($_type,ops,$_curop) $_type $_data $res
} else {
if { $_status & 2 } {
# notify leave event
upvar \#0 DropSite::$_target drop
uplevel \#0 $drop(overcmd) [list $_target $_source leave $X $Y $_curop $_type $_data]
}
DragSite::_end_drag $_source "" "" $_type $_data 0
}
}

793
lib/bwidget/dynhelp.tcl

@ -0,0 +1,793 @@ @@ -0,0 +1,793 @@
# ----------------------------------------------------------------------------
# dynhelp.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: dynhelp.tcl,v 1.20.2.1 2009/08/12 07:20:21 oehhar Exp $
# ----------------------------------------------------------------------------
# Index of commands:
# - DynamicHelp::configure
# - DynamicHelp::include
# - DynamicHelp::sethelp
# - DynamicHelp::register
# - DynamicHelp::_motion_balloon
# - DynamicHelp::_motion_info
# - DynamicHelp::_leave_info
# - DynamicHelp::_menu_info
# - DynamicHelp::_show_help
# - DynamicHelp::_init
# ----------------------------------------------------------------------------
namespace eval DynamicHelp {
Widget::define DynamicHelp dynhelp -classonly
if {$::tcl_version >= 8.5} {
set fontdefault TkTooltipFont
} elseif {$Widget::_aqua} {
set fontdefault {helvetica 11}
} else {
set fontdefault {helvetica 8}
}
Widget::declare DynamicHelp [list\
{-foreground TkResource black 0 label}\
{-topbackground TkResource black 0 {label -foreground}}\
{-background TkResource "#FFFFC0" 0 label}\
{-borderwidth TkResource 1 0 label}\
{-justify TkResource left 0 label}\
[list -font TkResource $fontdefault 0 label]\
{-delay Int 600 0 "%d >= 100 & %d <= 2000"}\
{-state Enum "normal" 0 {normal disabled}}\
{-padx TkResource 1 0 label}\
{-pady TkResource 1 0 label}\
{-bd Synonym -borderwidth}\
{-bg Synonym -background}\
{-fg Synonym -foreground}\
{-topbg Synonym -topbackground}\
]
proc use {} {}
variable _registered
variable _canvases
variable _texts
variable _top ".help_shell"
variable _id ""
variable _delay 600
variable _current_balloon ""
variable _current_variable ""
variable _saved
Widget::init DynamicHelp $_top {}
bind BwHelpBalloon <Enter> {DynamicHelp::_motion_balloon enter %W %X %Y}
bind BwHelpBalloon <Motion> {DynamicHelp::_motion_balloon motion %W %X %Y}
bind BwHelpBalloon <Leave> {DynamicHelp::_motion_balloon leave %W %X %Y}
bind BwHelpBalloon <Button> {DynamicHelp::_motion_balloon button %W %X %Y}
bind BwHelpBalloon <Destroy> {DynamicHelp::_unset_help %W}
bind BwHelpVariable <Enter> {DynamicHelp::_motion_info %W}
bind BwHelpVariable <Leave> {DynamicHelp::_leave_info %W}
bind BwHelpVariable <Destroy> {DynamicHelp::_unset_help %W}
bind BwHelpMenu <<MenuSelect>> {DynamicHelp::_menu_info select %W}
bind BwHelpMenu <Unmap> {DynamicHelp::_menu_info unmap %W}
bind BwHelpMenu <Destroy> {DynamicHelp::_unset_help %W}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::configure
# ----------------------------------------------------------------------------
proc DynamicHelp::configure { args } {
variable _top
variable _delay
set res [Widget::configure $_top $args]
if { [Widget::hasChanged $_top -delay val] } {
set _delay $val
}
return $res
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::include
# ----------------------------------------------------------------------------
proc DynamicHelp::include { class type } {
set helpoptions [list \
[list -helptext String "" 0] \
[list -helpvar String "" 0] \
[list -helpcmd String "" 0] \
[list -helptype Enum $type 0 [list balloon variable]] \
]
Widget::declare $class $helpoptions
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::sethelp
# ----------------------------------------------------------------------------
proc DynamicHelp::sethelp { path subpath {force 0}} {
foreach {ctype ctext cvar} [Widget::hasChangedX $path \
-helptype -helptext -helpvar] break
if { $force || $ctype || $ctext || $cvar } {
set htype [Widget::cget $path -helptype]
switch $htype {
balloon {
return [register $subpath balloon \
[Widget::cget $path -helptext]]
}
variable {
return [register $subpath variable \
[Widget::cget $path -helpvar] \
[Widget::cget $path -helptext]]
}
}
return [register $subpath $htype]
}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::register
#
# DynamicHelp::register path balloon ?itemOrTag? text
# DynamicHelp::register path variable ?itemOrTag? text varName
# DynamicHelp::register path menu varName
# DynamicHelp::register path menuentry index text
# ----------------------------------------------------------------------------
proc DynamicHelp::register { path type args } {
variable _registered
set len [llength $args]
if {$type == "balloon" && $len > 1} {
switch -exact -- [winfo class $path] {
"Canvas" { set type canvasBalloon }
"Text" -
"Ctext" { set type textBalloon }
}
}
if {$type == "variable" && $len > 2} {
switch -exact -- [winfo class $path] {
"Canvas" { set type canvasVariable }
"Text" -
"Ctext" { set type textVariable }
}
}
if { ![winfo exists $path] } {
_unset_help $path
return 0
}
switch $type {
balloon {
set text [lindex $args 0]
if {$text == ""} {
if {[info exists _registered($path,balloon)]} {
unset _registered($path,balloon)
}
return 0
}
_add_balloon $path $text
}
canvasBalloon {
set tagOrItem [lindex $args 0]
set text [lindex $args 1]
if {$text == ""} {
if {[info exists _registered($path,$tagOrItem,balloon)]} {
unset _registered($path,$tagOrItem,balloon)
}
return 0
}
_add_canvas_balloon $path $text $tagOrItem
}
textBalloon {
set tagOrItem [lindex $args 0]
set text [lindex $args 1]
if {$text == ""} {
if {[info exists _registered($path,$tagOrItem,balloon)]} {
unset _registered($path,$tagOrItem,balloon)
}
return 0
}
_add_text_balloon $path $text $tagOrItem
}
variable {
set var [lindex $args 0]
set text [lindex $args 1]
if {$text == "" || $var == ""} {
if {[info exists _registered($path,variable)]} {
unset _registered($path,variable)
}
return 0
}
_add_variable $path $text $var
}
canvasVariable {
set tagOrItem [lindex $args 0]
set var [lindex $args 1]
set text [lindex $args 2]
if {$text == "" || $var == ""} {
if {[info exists _registered($path,$tagOrItem,variable)]} {
unset _registered($path,$tagOrItem,variable)
}
return 0
}
_add_canvas_variable $path $text $var $tagOrItem
}
textVariable {
set tagOrItem [lindex $args 0]
set var [lindex $args 1]
set text [lindex $args 2]
if {$text == "" || $var == ""} {
if {[info exists _registered($path,$tagOrItem,variable)]} {
unset _registered($path,$tagOrItem,variable)
}
return 0
}
_add_text_variable $path $text $var $tagOrItem
}
menu {
set var [lindex $args 0]
if {$var == ""} {
set cpath [BWidget::clonename $path]
if {[winfo exists $cpath]} { set path $cpath }
if {[info exists _registered($path)]} {
unset _registered($path)
}
return 0
}
_add_menu $path $var
}
menuentry {
set cpath [BWidget::clonename $path]
if { [winfo exists $cpath] } { set path $cpath }
if {![info exists _registered($path)]} { return 0 }
set text [lindex $args 1]
set index [lindex $args 0]
if {$text == "" || $index == ""} {
set idx [lsearch $_registered($path) [list $index *]]
set _registered($path) [lreplace $_registered($path) $idx $idx]
return 0
}
_add_menuentry $path $text $index
}
default {
_unset_help $path
return 0
}
}
return 1
}
proc DynamicHelp::add { path args } {
variable _registered
array set data {
-type balloon
-text ""
-item ""
-index -1
-command ""
-variable ""
}
if {[winfo exists $path] && [winfo class $path] == "Menu"} {
set data(-type) menu
}
array set data $args
set item $path
switch -- $data(-type) {
"balloon" {
if {$data(-item) != ""} {
switch -exact -- [winfo class $path] {
"Canvas" {
_add_canvas_balloon $path $data(-text) $data(-item)
set item $path,$data(-item)
}
"Text" -
"Ctext" {
_add_text_balloon $path $data(-text) $data(-item)
set item $path,$data(-item)
}
default {
_add_balloon $path $data(-text)
}
}
} else {
_add_balloon $path $data(-text)
}
if {$data(-variable) != ""} {
set _registered($item,balloonVar) $data(-variable)
}
}
"variable" {
set var $data(-variable)
if {$data(-item) != ""} {
switch -exact -- [winfo class $path] {
"Canvas" {
_add_canvas_variable $path $data(-text) $var $data(-item)
set item $path,$data(-item)
}
"Text" -
"Ctext" {
_add_text_variable $path $data(-text) $var $data(-item)
set item $path,$data(-item)
}
default {
_add_variable $path $data(-text) $var
}
}
} else {
_add_variable $path $data(-text) $var
}
}
"menu" {
if {$data(-index) != -1} {
set cpath [BWidget::clonename $path]
if { [winfo exists $cpath] } { set path $cpath }
if {![info exists _registered($path)]} { return 0 }
_add_menuentry $path $data(-text) $data(-index)
set item $path,$data(-index)
} else {
_add_menu $path $data(-variable)
}
}
default {
return 0
}
}
if {$data(-command) != ""} {set _registered($item,command) $data(-command)}
return 1
}
proc DynamicHelp::delete { path } {
_unset_help $path
}
proc DynamicHelp::_add_bind_tag { path tag } {
set evt [bindtags $path]
set idx [lsearch $evt $tag]
set evt [lreplace $evt $idx $idx]
lappend evt $tag
bindtags $path $evt
}
proc DynamicHelp::_add_balloon { path text } {
variable _registered
set _registered($path,balloon) $text
_add_bind_tag $path BwHelpBalloon
}
proc DynamicHelp::_add_canvas_balloon { path text tagOrItem } {
variable _canvases
variable _registered
set _registered($path,$tagOrItem,balloon) $text
if {![info exists _canvases($path,balloon)]} {
## This canvas doesn't have the bindings yet.
_add_bind_tag $path BwHelpBalloon
$path bind BwHelpBalloon <Enter> \
{DynamicHelp::_motion_balloon enter %W %X %Y 1}
$path bind BwHelpBalloon <Motion> \
{DynamicHelp::_motion_balloon motion %W %X %Y 1}
$path bind BwHelpBalloon <Leave> \
{DynamicHelp::_motion_balloon leave %W %X %Y 1}
$path bind BwHelpBalloon <Button> \
{DynamicHelp::_motion_balloon button %W %X %Y 1}
set _canvases($path,balloon) 1
}
$path addtag BwHelpBalloon withtag $tagOrItem
}
proc DynamicHelp::_add_text_balloon { path text tagOrItem } {
variable _texts
variable _registered
set _registered($path,$tagOrItem,balloon) $text
if { ![info exists _texts($path,$tagOrItem,balloon)] } {
$path tag bind $tagOrItem <Enter> \
[list DynamicHelp::_motion_balloon enter $path %X %Y 0 1]
$path tag bind $tagOrItem <Motion> \
[list DynamicHelp::_motion_balloon motion $path %X %Y 0 1]
$path tag bind $tagOrItem <Leave> \
[list DynamicHelp::_motion_balloon leave $path %X %Y 0 1]
$path tag bind $tagOrItem <Button> \
[list DynamicHelp::_motion_balloon button $path %X %Y 0 1]
set _texts($path,$tagOrItem,balloon) 1
}
}
proc DynamicHelp::_add_variable { path text varName } {
variable _registered
set _registered($path,variable) [list $varName $text]
_add_bind_tag $path BwHelpVariable
}
proc DynamicHelp::_add_canvas_variable { path text varName tagOrItem } {
variable _canvases
variable _registered
set _registered($path,$tagOrItem,variable) [list $varName $text]
if {![info exists _canvases($path,variable)]} {
## This canvas doesn't have the bindings yet.
_add_bind_tag $path BwHelpVariable
$path bind BwHelpVariable <Enter> \
{DynamicHelp::_motion_info %W 1}
$path bind BwHelpVariable <Motion> \
{DynamicHelp::_motion_info %W 1}
$path bind BwHelpVariable <Leave> \
{DynamicHelp::_leave_info %W 1}
set _canvases($path,variable) 1
}
$path addtag BwHelpVariable withtag $tagOrItem
}
proc DynamicHelp::_add_text_variable { path text varName tagOrItem } {
variable _texts
variable _registered
set _registered($path,$tagOrItem,variable) [list $varName $text]
if {![info exists _texts($path,$tagOrItem,variable)]} {
$path tag bind $tagOrItem <Enter> \
[list DynamicHelp::_motion_info $path 0 1]
$path tag bind $tagOrItem <Motion> \
[list DynamicHelp::_motion_info $path 0 1]
$path tag bind $tagOrItem <Leave> \
[list DynamicHelp::_leave_info $path 0 1]
set _texts($path,$tagOrItem,variable) 1
}
}
proc DynamicHelp::_add_menu { path varName } {
variable _registered
set cpath [BWidget::clonename $path]
if { [winfo exists $cpath] } { set path $cpath }
set _registered($path) [list $varName]
_add_bind_tag $path BwHelpMenu
}
proc DynamicHelp::_add_menuentry { path text index } {
variable _registered
set idx [lsearch $_registered($path) [list $index *]]
set list [list $index $text]
if { $idx == -1 } {
lappend _registered($path) $list
} else {
set _registered($path) \
[lreplace $_registered($path) $idx $idx $list]
}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_motion_balloon
# ----------------------------------------------------------------------------
proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} {isTextItem 0} } {
variable _top
variable _id
variable _delay
variable _current_balloon
set w $path
if {$isCanvasItem} {
set path [_get_canvas_path $path balloon]
} elseif {$isTextItem} {
set path [_get_text_path $path balloon]
}
if { $_current_balloon != $path && $type == "enter" } {
set _current_balloon $path
set type "motion"
destroy $_top
}
if { $_current_balloon == $path } {
if { $_id != "" } {
after cancel $_id
set _id ""
}
if { $type == "motion" } {
if { ![winfo exists $_top] } {
set cmd [list DynamicHelp::_show_help $path $w $x $y]
set _id [after $_delay $cmd]
}
# Bug 923942 proposes to destroy on motion to remove dynhelp on motion.
# this might be an optional behaviour in future versions
} else {
destroy $_top
set _current_balloon ""
}
}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_motion_info
# ----------------------------------------------------------------------------
proc DynamicHelp::_motion_info { path {isCanvasItem 0} {isTextItem 0} } {
variable _saved
variable _registered
variable _current_variable
if {$isCanvasItem} {
set path [_get_canvas_path $path variable]
} elseif {$isTextItem} {
set path [_get_text_path $path variable]
}
if { $_current_variable != $path
&& [info exists _registered($path,variable)] } {
set varName [lindex $_registered($path,variable) 0]
if {![info exists _saved]} { set _saved [GlobalVar::getvar $varName] }
set string [lindex $_registered($path,variable) 1]
if {[info exists _registered($path,command)]} {
set string [uplevel #0 $_registered($path,command)]
}
GlobalVar::setvar $varName $string
set _current_variable $path
}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_leave_info
# Leave event may be called twice (in case of pointer grab)
# ----------------------------------------------------------------------------
proc DynamicHelp::_leave_info { path {isCanvasItem 0} {isTextItem 0} } {
variable _saved
variable _registered
variable _current_variable
if {$isCanvasItem} {
set path [_get_canvas_path $path variable]
} elseif {$isTextItem} {
set path [_get_text_path $path variable]
}
if { [string equal $_current_variable $path] \
&& [info exists _registered($path,variable)] } {
set varName [lindex $_registered($path,variable) 0]
GlobalVar::setvar $varName $_saved
unset _saved
set _current_variable ""
}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_menu_info
# ----------------------------------------------------------------------------
# We have to check for unmap event on Unix. On Windows, unmap
# is not delivered, but <<MenuSelect>> is triggered appropriately when menu
# is unmapped.
proc DynamicHelp::_menu_info { event path } {
variable _registered
if { [info exists _registered($path)] } {
set index [$path index active]
set varName [lindex $_registered($path) 0]
if { ![string equal $event "unmap"] &&
![string equal $index "none"] &&
[set idx [lsearch $_registered($path) [list $index *]]] != -1 } {
set string [lindex [lindex $_registered($path) $idx] 1]
if {[info exists _registered($path,$index,command)]} {
set string [uplevel #0 $_registered($path,$index,command)]
}
GlobalVar::setvar $varName $string
} else {
GlobalVar::setvar $varName ""
}
}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_show_help
# ----------------------------------------------------------------------------
proc DynamicHelp::_show_help { path w x y } {
variable _top
variable _registered
variable _id
variable _delay
if { [Widget::getoption $_top -state] == "disabled" } { return }
if { [info exists _registered($path,balloon)] } {
destroy $_top
set string $_registered($path,balloon)
if {[info exists _registered($path,balloonVar)]} {
upvar #0 $_registered($path,balloonVar) var
if {[info exists var]} { set string $var }
}
if {[info exists _registered($path,command)]} {
set string [uplevel #0 $_registered($path,command)]
}
if {$string == ""} { return }
toplevel $_top -relief flat \
-bg [Widget::getoption $_top -topbackground] \
-bd [Widget::getoption $_top -borderwidth] \
-screen [winfo screen $w]
wm withdraw $_top
if { $Widget::_aqua } {
::tk::unsupported::MacWindowStyle style $_top help none
} else {
wm overrideredirect $_top 1
}
catch { wm attributes $_top -topmost 1 }
label $_top.label -text $string \
-relief flat -bd 0 -highlightthickness 0 \
-padx [Widget::getoption $_top -padx] \
-pady [Widget::getoption $_top -pady] \
-foreground [Widget::getoption $_top -foreground] \
-background [Widget::getoption $_top -background] \
-font [Widget::getoption $_top -font] \
-justify [Widget::getoption $_top -justify]
pack $_top.label -side left
update idletasks
if {![winfo exists $_top]} {return}
set scrwidth [winfo vrootwidth .]
set scrheight [winfo vrootheight .]
set width [winfo reqwidth $_top]
set height [winfo reqheight $_top]
# On windows multi screen configurations, coordinates may get outside
# the main screen. We suppose that all screens have the same size
# because it is not possible to query the size of the other screens.
set screenx [expr {$x % $scrwidth} ]
set screeny [expr {$y % $scrheight} ]
# Increment the required size by the deplacement from the passed point
incr width 8
incr height 12
if { $screenx+$width > $scrwidth } {
set x [expr {$x + ($scrwidth - $screenx) - ($width - 8)}]
} else {
incr x 8
}
if { $screeny+$height > $scrheight } {
set y [expr {$y - $height}]
} else {
incr y 12
}
wm geometry $_top "+$x+$y"
update idletasks
if {![winfo exists $_top]} { return }
wm deiconify $_top
raise $_top
}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_unset_help
# ----------------------------------------------------------------------------
proc DynamicHelp::_unset_help { path } {
variable _canvases
variable _texts
variable _registered
variable _top
variable _current_balloon
if {[info exists _registered($path)]} { unset _registered($path) }
if {[winfo exists $path]} {
set cpath [BWidget::clonename $path]
if {[info exists _registered($cpath)]} { unset _registered($cpath) }
}
array unset _canvases $path,*
array unset _texts $path,*
array unset _registered $path,*
if {[string equal $path $_current_balloon]} {destroy $_top}
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_get_canvas_path
# ----------------------------------------------------------------------------
proc DynamicHelp::_get_canvas_path { path type {item ""} } {
variable _registered
if {$item == ""} { set item [$path find withtag current] }
## Check the tags related to this item for the one that
## represents our text. If we have text specific to this
## item or for 'all' items, they override any other tags.
eval [list lappend tags $item all] [$path itemcget $item -tags]
foreach tag $tags {
set check $path,$tag
if {![info exists _registered($check,$type)]} { continue }
return $check
}
return $path
}
# ----------------------------------------------------------------------------
# Command DynamicHelp::_get_text_path
# ----------------------------------------------------------------------------
proc DynamicHelp::_get_text_path { path type {item ""} } {
variable _registered
if {$item == ""} { set item [$path tag names current] }
## Check the tags related to this item for the one that
## represents our text. If we have text specific to this
## item or for 'all' items, they override any other tags.
eval [list lappend tags $item all] $item
foreach tag $tags {
set check $path,$tag
if {![info exists _registered($check,$type)]} { continue }
return $check
}
return $path
}

498
lib/bwidget/entry.tcl

@ -0,0 +1,498 @@ @@ -0,0 +1,498 @@
# ------------------------------------------------------------------------------
# entry.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: entry.tcl,v 1.22.2.1 2011/02/14 16:56:09 oehhar Exp $
# ------------------------------------------------------------------------------
# Index of commands:
# - Entry::create
# - Entry::configure
# - Entry::cget
# - Entry::_destroy
# - Entry::_init_drag_cmd
# - Entry::_end_drag_cmd
# - Entry::_drop_cmd
# - Entry::_over_cmd
# - Entry::_auto_scroll
# - Entry::_scroll
# ------------------------------------------------------------------------------
namespace eval Entry {
Widget::define Entry entry DragSite DropSite DynamicHelp
# Note: -textvariable is pulled off of the tk entry and put onto the
# BW Entry so that we avoid the TkResource test for it, which screws up
# the existance/non-existance bits of the -textvariable.
Widget::tkinclude Entry entry :cmd \
remove { -state -background -foreground -textvariable
-disabledforeground -disabledbackground }
set declare [list \
[list -background TkResource "" 0 entry] \
[list -foreground TkResource "" 0 entry] \
[list -state Enum normal 0 [list normal disabled]] \
[list -text String "" 0] \
[list -textvariable String "" 0] \
[list -editable Boolean 1 0] \
[list -command String "" 0] \
[list -relief TkResource "" 0 entry] \
[list -borderwidth TkResource "" 0 entry] \
[list -fg Synonym -foreground] \
[list -bg Synonym -background] \
[list -bd Synonym -borderwidth] \
]
if {![package vsatisfies [package provide Tk] 8.4]} {
## If we're not running version 8.4 or higher, get our
## disabled resources from the button widget.
lappend declare [list -disabledforeground TkResource "" 0 button]
lappend declare [list -disabledbackground TkResource "" 0 \
{button -background}]
} else {
lappend declare [list -disabledforeground TkResource "" 0 entry]
lappend declare [list -disabledbackground TkResource "" 0 entry]
}
Widget::declare Entry $declare
Widget::addmap Entry "" :cmd { -textvariable {} }
DynamicHelp::include Entry balloon
DragSite::include Entry "" 3
DropSite::include Entry {
TEXT {move {}}
FGCOLOR {move {}}
BGCOLOR {move {}}
COLOR {move {}}
}
if {[Widget::theme]} {
foreach event [bind TEntry] {
bind BwEntry $event [bind TEntry $event]
}
} else {
foreach event [bind Entry] {
bind BwEntry $event [bind Entry $event]
}
}
# Copy is kind of a special event. It should be enabled when the
# widget is editable but not disabled, and not when the widget is disabled.
# To make this a bit easier to manage, we will handle it separately.
bind BwEntry <<Copy>> {}
bind BwEditableEntry <<Copy>> [bind Entry <<Copy>>]
bind BwEntry <Return> [list Entry::invoke %W]
bind BwEntry <Destroy> [list Entry::_destroy %W]
bind BwDisabledEntry <Destroy> [list Entry::_destroy %W]
}
# ------------------------------------------------------------------------------
# Command Entry::create
# ------------------------------------------------------------------------------
proc Entry::create { path args } {
variable $path
upvar 0 $path data
array set maps [list Entry {} :cmd {}]
array set maps [Widget::parseArgs Entry $args]
set data(afterid) ""
if {[Widget::theme]} {
eval [list ttk::entry $path] $maps(:cmd)
} else {
eval [list entry $path] $maps(:cmd)
}
Widget::initFromODB Entry $path $maps(Entry)
set state [Widget::getMegawidgetOption $path -state]
set editable [Widget::getMegawidgetOption $path -editable]
set text [Widget::getMegawidgetOption $path -text]
if { $editable && [string equal $state "normal"] } {
bindtags $path [list $path BwEntry [winfo toplevel $path] all]
if {[Widget::theme]} {
$path configure -takefocus 1
} else {
$path configure -takefocus 1 -insertontime 600
}
} else {
bindtags $path [list $path BwDisabledEntry [winfo toplevel $path] all]
if {[Widget::theme]} {
$path configure -takefocus 0
} else {
$path configure -takefocus 0 -insertontime 0
}
}
if { $editable == 0 } {
$path configure -cursor left_ptr
}
if { [string equal $state "disabled"] } {
$path configure \
-foreground [Widget::getMegawidgetOption $path -disabledforeground] \
-background [Widget::getMegawidgetOption $path -disabledbackground]
} else {
$path configure \
-foreground [Widget::getMegawidgetOption $path -foreground] \
-background [Widget::getMegawidgetOption $path -background]
bindtags $path [linsert [bindtags $path] 2 BwEditableEntry]
}
if { [string length $text] } {
set varName [$path cget -textvariable]
if { ![string equal $varName ""] } {
uplevel \#0 [list set $varName [Widget::cget $path -text]]
} else {
set validateState [$path cget -validate]
$path configure -validate none
$path delete 0 end
$path configure -validate $validateState
$path insert 0 [Widget::getMegawidgetOption $path -text]
}
}
DragSite::setdrag $path $path Entry::_init_drag_cmd Entry::_end_drag_cmd 1
DropSite::setdrop $path $path Entry::_over_cmd Entry::_drop_cmd 1
DynamicHelp::sethelp $path $path 1
Widget::create Entry $path
proc ::$path { cmd args } \
"return \[Entry::_path_command [list $path] \$cmd \$args\]"
return $path
}
# ------------------------------------------------------------------------------
# Command Entry::configure
# ------------------------------------------------------------------------------
proc Entry::configure { path args } {
# Cheat by setting the -text value to the current contents of the entry
# This might be better hidden behind a function in ::Widget.
set Widget::Entry::${path}:opt(-text) [$path:cmd get]
set res [Widget::configure $path $args]
# Extract the modified bits that we are interested in.
set vars [list chstate cheditable chfg chdfg chbg chdbg chtext]
set opts [list -state -editable -foreground -disabledforeground \
-background -disabledbackground -text]
foreach $vars [eval [linsert $opts 0 Widget::hasChangedX $path]] { break }
if { $chstate || $cheditable } {
set state [Widget::getMegawidgetOption $path -state]
set editable [Widget::getMegawidgetOption $path -editable]
set btags [bindtags $path]
if { $editable && [string equal $state "normal"] } {
set idx [lsearch $btags BwDisabledEntry]
if { $idx != -1 } {
bindtags $path [lreplace $btags $idx $idx BwEntry]
}
if {[Widget::theme]} {
$path:cmd configure -takefocus 1
} else {
$path:cmd configure -takefocus 1 -insertontime 600
}
} else {
set idx [lsearch $btags BwEntry]
if { $idx != -1 } {
bindtags $path [lreplace $btags $idx $idx BwDisabledEntry]
}
if {[Widget::theme]} {
$path:cmd configure -takefocus 0
} else {
$path:cmd configure -takefocus 0 -insertontime 0
}
if { [string equal [focus] $path] } {
focus .
}
}
}
if { ![Widget::theme] && ($chstate || $chfg || $chdfg || $chbg || $chdbg) } {
set state [Widget::getMegawidgetOption $path -state]
if { [string equal $state "disabled"] } {
$path:cmd configure \
-fg [Widget::cget $path -disabledforeground] \
-bg [Widget::cget $path -disabledbackground]
} else {
$path:cmd configure \
-fg [Widget::cget $path -foreground] \
-bg [Widget::cget $path -background]
}
}
if { $chstate } {
if { [string equal $state "disabled"] } {
set idx [lsearch -exact [bindtags $path] BwEditableEntry]
if { $idx != -1 } {
bindtags $path [lreplace [bindtags $path] $idx $idx]
}
} else {
set idx [expr {[lsearch [bindtags $path] Bw*Entry] + 1}]
bindtags $path [linsert [bindtags $path] $idx BwEditableEntry]
}
}
if { $cheditable } {
if { $editable } {
$path:cmd configure -cursor xterm
} else {
$path:cmd configure -cursor left_ptr
}
}
if { $chtext } {
# Oh my lordee-ba-goordee
# Do some magic to prevent multiple validation command firings.
# If there is a textvariable, set that to the right value; if not,
# disable validation, delete the old text, enable, then set the text.
set varName [$path:cmd cget -textvariable]
if { ![string equal $varName ""] } {
uplevel \#0 [list set $varName \
[Widget::getMegawidgetOption $path -text]]
} else {
set validateState [$path:cmd cget -validate]
$path:cmd configure -validate none
$path:cmd delete 0 end
$path:cmd configure -validate $validateState
$path:cmd insert 0 [Widget::getMegawidgetOption $path -text]
}
}
DragSite::setdrag $path $path Entry::_init_drag_cmd Entry::_end_drag_cmd
DropSite::setdrop $path $path Entry::_over_cmd Entry::_drop_cmd
DynamicHelp::sethelp $path $path
return $res
}
# ------------------------------------------------------------------------------
# Command Entry::cget
# ------------------------------------------------------------------------------
proc Entry::cget { path option } {
if { [string equal "-text" $option] } {
return [$path:cmd get]
}
Widget::cget $path $option
}
# ------------------------------------------------------------------------------
# Command Entry::invoke
# ------------------------------------------------------------------------------
proc Entry::invoke { path } {
if {[llength [set cmd [Widget::getMegawidgetOption $path -command]]]} {
uplevel \#0 $cmd
}
}
# ------------------------------------------------------------------------------
# Command Entry::_path_command
# ------------------------------------------------------------------------------
proc Entry::_path_command { path cmd larg } {
switch -exact -- $cmd {
configure - cget - invoke {
return [eval [linsert $larg 0 Entry::$cmd $path]]
}
default {
return [uplevel 2 [linsert $larg 0 $path:cmd $cmd]]
}
}
}
# ------------------------------------------------------------------------------
# Command Entry::_init_drag_cmd
# ------------------------------------------------------------------------------
proc Entry::_init_drag_cmd { path X Y top } {
variable $path
upvar 0 $path data
if {[llength [set cmd [Widget::getoption $path -draginitcmd]]]} {
return [uplevel \#0 $cmd [list $path $X $Y $top]]
}
set type [Widget::getoption $path -dragtype]
if { $type == "" } {
set type "TEXT"
}
if { [set drag [$path get]] != "" } {
if { [$path:cmd selection present] } {
set idx [$path:cmd index @[expr {$X-[winfo rootx $path]}]]
set sel0 [$path:cmd index sel.first]
set sel1 [expr {[$path:cmd index sel.last]-1}]
if { $idx >= $sel0 && $idx <= $sel1 } {
set drag [string range $drag $sel0 $sel1]
set data(dragstart) $sel0
set data(dragend) [expr {$sel1+1}]
if { ![Widget::getoption $path -editable] ||
[Widget::getoption $path -state] == "disabled" } {
return [list $type {copy} $drag]
} else {
return [list $type {copy move} $drag]
}
}
} else {
set data(dragstart) 0
set data(dragend) end
if { ![Widget::getoption $path -editable] ||
[Widget::getoption $path -state] == "disabled" } {
return [list $type {copy} $drag]
} else {
return [list $type {copy move} $drag]
}
}
}
}
# ------------------------------------------------------------------------------
# Command Entry::_end_drag_cmd
# ------------------------------------------------------------------------------
proc Entry::_end_drag_cmd { path target op type dnddata result } {
variable $path
upvar 0 $path data
if {[llength [set cmd [Widget::getoption $path -dragendcmd]]]} {
return [uplevel \#0 $cmd [list $path $target $op $type $dnddata $result]]
}
if { $result && $op == "move" && $path != $target } {
$path:cmd delete $data(dragstart) $data(dragend)
}
}
# ------------------------------------------------------------------------------
# Command Entry::_drop_cmd
# ------------------------------------------------------------------------------
proc Entry::_drop_cmd { path source X Y op type dnddata } {
variable $path
upvar 0 $path data
if { $data(afterid) != "" } {
after cancel $data(afterid)
set data(afterid) ""
}
if {[llength [set cmd [Widget::getoption $path -dropcmd]]]} {
set idx [$path:cmd index @[expr {$X-[winfo rootx $path]}]]
return [uplevel \#0 $cmd [list $path $source $idx $op $type $dnddata]]
}
if { $type == "COLOR" || $type == "FGCOLOR" } {
configure $path -foreground $dnddata
} elseif { $type == "BGCOLOR" } {
configure $path -background $dnddata
} else {
$path:cmd icursor @[expr {$X-[winfo rootx $path]}]
if { $op == "move" && $path == $source } {
$path:cmd delete $data(dragstart) $data(dragend)
}
set sel0 [$path index insert]
$path:cmd insert insert $dnddata
set sel1 [$path index insert]
$path:cmd selection range $sel0 $sel1
}
return 1
}
# ------------------------------------------------------------------------------
# Command Entry::_over_cmd
# ------------------------------------------------------------------------------
proc Entry::_over_cmd { path source event X Y op type dnddata } {
variable $path
upvar 0 $path data
set x [expr {$X-[winfo rootx $path]}]
if { [string equal $event "leave"] } {
if { [string length $data(afterid)] } {
after cancel $data(afterid)
set data(afterid) ""
}
} elseif { [_auto_scroll $path $x] } {
return 2
}
if {[llength [set cmd [Widget::getoption $path -dropovercmd]]]} {
set x [expr {$X-[winfo rootx $path]}]
set idx [$path:cmd index @$x]
set res [uplevel \#0 $cmd [list $path $source $event $idx $op $type $dnddata]]
return $res
}
if { [string equal $type "COLOR"] ||
[string equal $type "FGCOLOR"] ||
[string equal $type "BGCOLOR"] } {
DropSite::setcursor based_arrow_down
return 1
}
if { [Widget::getoption $path -editable]
&& [string equal [Widget::getoption $path -state] "normal"] } {
if { ![string equal $event "leave"] } {
$path:cmd selection clear
$path:cmd icursor @$x
DropSite::setcursor based_arrow_down
return 3
}
}
DropSite::setcursor dot
return 0
}
# ------------------------------------------------------------------------------
# Command Entry::_auto_scroll
# ------------------------------------------------------------------------------
proc Entry::_auto_scroll { path x } {
variable $path
upvar 0 $path data
set xmax [winfo width $path]
if { $x <= 10 && [$path:cmd index @0] > 0 } {
if { $data(afterid) == "" } {
set data(afterid) [after 100 [list Entry::_scroll $path -1 $x $xmax]]
DropSite::setcursor sb_left_arrow
}
return 1
} else {
if { $x >= $xmax-10 && [$path:cmd index @$xmax] < [$path:cmd index end] } {
if { $data(afterid) == "" } {
set data(afterid) [after 100 [list Entry::_scroll $path 1 $x $xmax]]
DropSite::setcursor sb_right_arrow
}
return 1
} else {
if { $data(afterid) != "" } {
after cancel $data(afterid)
set data(afterid) ""
}
}
}
return 0
}
# ------------------------------------------------------------------------------
# Command Entry::_scroll
# ------------------------------------------------------------------------------
proc Entry::_scroll { path dir x xmax } {
variable $path
upvar 0 $path data
$path:cmd xview scroll $dir units
$path:cmd icursor @$x
if { ($dir == -1 && [$path:cmd index @0] > 0) ||
($dir == 1 && [$path:cmd index @$xmax] < [$path:cmd index end]) } {
set data(afterid) [after 100 [list Entry::_scroll $path $dir $x $xmax]]
} else {
set data(afterid) ""
DropSite::setcursor dot
}
}
# ------------------------------------------------------------------------------
# Command Entry::_destroy
# ------------------------------------------------------------------------------
proc Entry::_destroy { path } {
variable $path
upvar 0 $path data
Widget::destroy $path
unset data
}

570
lib/bwidget/font.tcl

@ -0,0 +1,570 @@ @@ -0,0 +1,570 @@
# ----------------------------------------------------------------------------
# font.tcl
# This file is part of Unifix BWidget Toolkit
# ----------------------------------------------------------------------------
# Index of commands:
# - SelectFont::create
# - SelectFont::configure
# - SelectFont::cget
# - SelectFont::_draw
# - SelectFont::_destroy
# - SelectFont::_modstyle
# - SelectFont::_update
# - SelectFont::_getfont
# - SelectFont::_init
# ----------------------------------------------------------------------------
namespace eval SelectFont {
Widget::define SelectFont font Dialog LabelFrame ScrolledWindow
Widget::declare SelectFont {
{-title String "Font selection" 0}
{-parent String "" 0}
{-background TkResource "" 0 frame}
{-type Enum dialog 0 {dialog toolbar}}
{-font TkResource "" 0 label}
{-initialcolor String "" 0}
{-families String "all" 1}
{-querysystem Boolean 1 0}
{-nosizes Boolean 0 1}
{-styles String "bold italic underline overstrike" 1}
{-command String "" 0}
{-sampletext String "Sample Text" 0}
{-bg Synonym -background}
}
variable _families
variable _styleOff
array set _styleOff [list bold normal italic roman]
variable _sizes {4 5 6 7 8 9 10 11 12 13 14 15 16 \
17 18 19 20 21 22 23 24}
# Set up preset lists of fonts, so the user can avoid the painfully slow
# loadfont process if desired.
if { [string equal $::tcl_platform(platform) "windows"] } {
set presetVariable [list \
7x14 \
Arial \
{Arial Narrow} \
{Lucida Sans} \
{MS Sans Serif} \
{MS Serif} \
{Times New Roman} \
]
set presetFixed [list \
6x13 \
{Courier New} \
FixedSys \
Terminal \
]
set presetAll [list \
6x13 \
7x14 \
Arial \
{Arial Narrow} \
{Courier New} \
FixedSys \
{Lucida Sans} \
{MS Sans Serif} \
{MS Serif} \
Terminal \
{Times New Roman} \
]
} else {
set presetVariable [list \
helvetica \
lucida \
lucidabright \
{times new roman} \
]
set presetFixed [list \
courier \
fixed \
{lucida typewriter} \
screen \
serif \
terminal \
]
set presetAll [list \
courier \
fixed \
helvetica \
lucida \
lucidabright \
{lucida typewriter} \
screen \
serif \
terminal \
{times new roman} \
]
}
array set _families [list \
presetvariable $presetVariable \
presetfixed $presetFixed \
presetall $presetAll \
]
variable _widget
}
# ----------------------------------------------------------------------------
# Command SelectFont::create
# ----------------------------------------------------------------------------
proc SelectFont::create { path args } {
variable _families
variable _sizes
variable $path
upvar 0 $path data
# Initialize the internal rep of the widget options
Widget::init SelectFont "$path#SelectFont" $args
if { [Widget::getoption "$path#SelectFont" -querysystem] } {
loadfont [Widget::getoption "$path#SelectFont" -families]
}
set bg [Widget::getoption "$path#SelectFont" -background]
set _styles [Widget::getoption "$path#SelectFont" -styles]
if { [Widget::getoption "$path#SelectFont" -type] == "dialog" } {
Dialog::create $path -modal local -anchor e -default 0 -cancel 1 \
-background $bg \
-title [Widget::getoption "$path#SelectFont" -title] \
-parent [Widget::getoption "$path#SelectFont" -parent]
set frame [Dialog::getframe $path]
set topf [frame $frame.topf -relief flat -borderwidth 0 -background $bg]
set labf1 [LabelFrame::create $topf.labf1 -text "Font" -name font \
-side top -anchor w -relief flat -background $bg]
set sw [ScrolledWindow::create [LabelFrame::getframe $labf1].sw \
-background $bg]
set lbf [listbox $sw.lb \
-height 5 -width 25 -exportselection false -selectmode browse]
ScrolledWindow::setwidget $sw $lbf
LabelFrame::configure $labf1 -focus $lbf
if { [Widget::getoption "$path#SelectFont" -querysystem] } {
set fam [Widget::getoption "$path#SelectFont" -families]
} else {
set fam "preset"
append fam [Widget::getoption "$path#SelectFont" -families]
}
eval [list $lbf insert end] $_families($fam)
set script "set [list SelectFont::${path}(family)] \[%W curselection\];\
SelectFont::_update [list $path]"
bind $lbf <ButtonRelease-1> $script
bind $lbf <space> $script
bind $lbf <1> [list focus %W]
bind $lbf <Up> $script
bind $lbf <Down> $script
pack $sw -fill both -expand yes
set labf2 [LabelFrame::create $topf.labf2 -text "Size" -name size \
-side top -anchor w -relief flat -background $bg]
set sw [ScrolledWindow::create [LabelFrame::getframe $labf2].sw \
-scrollbar vertical -background $bg]
set lbs [listbox $sw.lb \
-height 5 -width 6 -exportselection false -selectmode browse]
ScrolledWindow::setwidget $sw $lbs
LabelFrame::configure $labf2 -focus $lbs
eval [list $lbs insert end] $_sizes
set script "set [list SelectFont::${path}(size)] \[%W curselection\];\
SelectFont::_update [list $path]"
bind $lbs <ButtonRelease-1> $script
bind $lbs <space> $script
bind $lbs <1> [list focus %W]
bind $lbs <Up> $script
bind $lbs <Down> $script
pack $sw -fill both -expand yes
set labf3 [LabelFrame::create $topf.labf3 -text "Style" -name style \
-side top -anchor w -relief sunken -bd 1 -background $bg]
set subf [LabelFrame::getframe $labf3]
foreach st $_styles {
set name [lindex [BWidget::getname $st] 0]
if { $name == "" } {
set name [string toupper $name 0]
}
checkbutton $subf.$st -text $name \
-variable SelectFont::$path\($st\) \
-background $bg \
-command [list SelectFont::_update $path]
bind $subf.$st <Return> break
pack $subf.$st -anchor w
}
LabelFrame::configure $labf3 -focus $subf.[lindex $_styles 0]
pack $labf1 -side left -anchor n -fill both -expand yes
if { ![Widget::getoption "$path#SelectFont" -nosizes] } {
pack $labf2 -side left -anchor n -fill both -expand yes -padx 8
}
pack $labf3 -side left -anchor n -fill both -expand yes
set botf [frame $frame.botf -width 100 -height 50 \
-bg white -bd 0 -relief flat \
-highlightthickness 1 -takefocus 0 \
-highlightbackground black \
-highlightcolor black]
set lab [label $botf.label \
-background white -foreground black \
-borderwidth 0 -takefocus 0 -highlightthickness 0 \
-text [Widget::getoption "$path#SelectFont" -sampletext]]
place $lab -relx 0.5 -rely 0.5 -anchor c
pack $topf -pady 4 -fill both -expand yes
if { [Widget::getoption "$path#SelectFont" -initialcolor] != ""} {
set thecolor [Widget::getoption "$path#SelectFont" -initialcolor]
set colf [frame $frame.colf]
set frc [frame $colf.frame -width 50 -height 20 -bg $thecolor -bd 0 -relief flat\
-highlightthickness 1 -takefocus 0 \
-highlightbackground black \
-highlightcolor black]
set script "set [list SelectFont::${path}(fontcolor)] \[tk_chooseColor -parent $colf.button -initialcolor \[set [list SelectFont::${path}(fontcolor)]\]\];\
SelectFont::_update [list $path]"
set name [lindex [BWidget::getname colorPicker] 0]
if { $name == "" } {
set name "Color..."
}
set but [button $colf.button -command $script \
-text $name]
$lab configure -foreground $thecolor
$frc configure -bg $thecolor
pack $but -side left
pack $frc -side left -padx 5
set data(frc) $frc
set data(fontcolor) $thecolor
pack $colf -pady 4 -fill x -expand true
} else {
set data(fontcolor) -1
}
pack $botf -pady 4 -fill x
Dialog::add $path -name ok
Dialog::add $path -name cancel
set data(label) $lab
set data(lbf) $lbf
set data(lbs) $lbs
_getfont $path
Widget::create SelectFont $path 0
return [_draw $path]
} else {
if { [Widget::getoption "$path#SelectFont" -querysystem] } {
set fams [Widget::getoption "$path#SelectFont" -families]
} else {
set fams "preset"
append fams [Widget::getoption "$path#SelectFont" -families]
}
if {[Widget::theme]} {
ttk::frame $path
set lbf [ttk::combobox $path.font \
-takefocus 0 -exportselection 0 \
-values $_families($fams) \
-textvariable SelectFont::${path}(family) \
-state readonly]
set lbs [ttk::combobox $path.size \
-takefocus 0 -exportselection 0 \
-width 4 \
-values $_sizes \
-textvariable SelectFont::${path}(size) \
-state readonly]
bind $lbf <<ComboboxSelected>> [list SelectFont::_update $path]
bind $lbs <<ComboboxSelected>> [list SelectFont::_update $path]
} else {
frame $path -background $bg
set lbf [ComboBox::create $path.font \
-highlightthickness 0 -takefocus 0 -background $bg \
-values $_families($fams) \
-textvariable SelectFont::$path\(family\) \
-editable 0 \
-modifycmd [list SelectFont::_update $path]]
set lbs [ComboBox::create $path.size \
-highlightthickness 0 -takefocus 0 -background $bg \
-width 4 \
-values $_sizes \
-textvariable SelectFont::$path\(size\) \
-editable 0 \
-modifycmd [list SelectFont::_update $path]]
}
bind $path <Destroy> [list SelectFont::_destroy $path]
pack $lbf -side left -anchor w
pack $lbs -side left -anchor w -padx 4
foreach st $_styles {
if {$::Widget::_theme} {
ttk::checkbutton $path.$st -takefocus 0 \
-style BWSlim.Toolbutton \
-image [Bitmap::get $st] \
-variable SelectFont::${path}($st) \
-command [list SelectFont::_update $path]
} else {
button $path.$st \
-highlightthickness 0 -takefocus 0 -padx 0 -pady 0 \
-background $bg \
-image [Bitmap::get $st] \
-command [list SelectFont::_modstyle $path $st]
}
pack $path.$st -side left -anchor w
}
set data(label) ""
set data(lbf) $lbf
set data(lbs) $lbs
_getfont $path
return [Widget::create SelectFont $path]
}
return $path
}
# ----------------------------------------------------------------------------
# Command SelectFont::configure
# ----------------------------------------------------------------------------
proc SelectFont::configure { path args } {
set _styles [Widget::getoption "$path#SelectFont" -styles]
set res [Widget::configure "$path#SelectFont" $args]
if { [Widget::hasChanged "$path#SelectFont" -font font] } {
_getfont $path
}
if { [Widget::hasChanged "$path#SelectFont" -background bg] } {
switch -- [Widget::getoption "$path#SelectFont" -type] {
dialog {
Dialog::configure $path -background $bg
set topf [Dialog::getframe $path].topf
$topf configure -background $bg
foreach labf {labf1 labf2} {
LabelFrame::configure $topf.$labf -background $bg
set subf [LabelFrame::getframe $topf.$labf]
ScrolledWindow::configure $subf.sw -background $bg
$subf.sw.lb configure -background $bg
}
LabelFrame::configure $topf.labf3 -background $bg
set subf [LabelFrame::getframe $topf.labf3]
foreach w [winfo children $subf] {
$w configure -background $bg
}
}
toolbar {
$path configure -background $bg
ComboBox::configure $path.font -background $bg
ComboBox::configure $path.size -background $bg
foreach st $_styles {
$path.$st configure -background $bg
}
}
}
}
return $res
}
# ----------------------------------------------------------------------------
# Command SelectFont::cget
# ----------------------------------------------------------------------------
proc SelectFont::cget { path option } {
return [Widget::cget "$path#SelectFont" $option]
}
# ----------------------------------------------------------------------------
# Command SelectFont::loadfont
# ----------------------------------------------------------------------------
proc SelectFont::loadfont {{which all}} {
variable _families
# initialize families
if {![info exists _families(all)]} {
set _families(all) [lsort -dictionary [font families]]
}
if {[regexp {fixed|variable} $which] \
&& ![info exists _families($which)]} {
# initialize families
set _families(fixed) {}
set _families(variable) {}
foreach family $_families(all) {
if { [font metrics [list $family] -fixed] } {
lappend _families(fixed) $family
} else {
lappend _families(variable) $family
}
}
}
return
}
# ----------------------------------------------------------------------------
# Command SelectFont::_draw
# ----------------------------------------------------------------------------
proc SelectFont::_draw { path } {
variable $path
upvar 0 $path data
$data(lbf) selection clear 0 end
$data(lbf) selection set $data(family)
$data(lbf) activate $data(family)
$data(lbf) see $data(family)
$data(lbs) selection clear 0 end
$data(lbs) selection set $data(size)
$data(lbs) activate $data(size)
$data(lbs) see $data(size)
_update $path
if { [Dialog::draw $path] == 0 } {
set result [Widget::getoption "$path#SelectFont" -font]
set color $data(fontcolor)
if { $color == "" } {
set color #000000
}
} else {
set result ""
if {$data(fontcolor) == -1} {
set color -1
} else {
set color ""
}
}
unset data
Widget::destroy "$path#SelectFont"
destroy $path
if { $color != -1 } {
return [list $result $color]
} else {
return $result
}
}
# ----------------------------------------------------------------------------
# Command SelectFont::_modstyle
# ----------------------------------------------------------------------------
proc SelectFont::_modstyle { path style } {
variable $path
upvar 0 $path data
$path.$style configure -relief [expr {$data($style) ? "raised" : "sunken"}]
set data($style) [expr {!$data($style)}]
_update $path
}
# ----------------------------------------------------------------------------
# Command SelectFont::_update
# ----------------------------------------------------------------------------
proc SelectFont::_update { path } {
variable _families
variable _sizes
variable _styleOff
variable $path
upvar 0 $path data
set type [Widget::getoption "$path#SelectFont" -type]
set _styles [Widget::getoption "$path#SelectFont" -styles]
if { [Widget::getoption "$path#SelectFont" -querysystem] } {
set fams [Widget::getoption "$path#SelectFont" -families]
} else {
set fams "preset"
append fams [Widget::getoption "$path#SelectFont" -families]
}
if { $type == "dialog" } {
set curs [$path:cmd cget -cursor]
$path:cmd configure -cursor watch
}
if { [Widget::getoption "$path#SelectFont" -type] == "dialog" } {
set font [list [lindex $_families($fams) $data(family)] \
[lindex $_sizes $data(size)]]
} else {
set font [list $data(family) $data(size)]
}
foreach st $_styles {
if { $data($st) } {
lappend font $st
} elseif {[info exists _styleOff($st)]} {
# This adds the default bold/italic value to a font
#lappend font $_styleOff($st)
}
}
Widget::setoption "$path#SelectFont" -font $font
if { $type == "dialog" } {
$data(label) configure -font $font
$path:cmd configure -cursor $curs
if { ($data(fontcolor) != "") && ($data(fontcolor) != -1) } {
$data(label) configure -foreground $data(fontcolor)
$data(frc) configure -bg $data(fontcolor)
} elseif { $data(fontcolor) == "" } {
#If no color is selected, restore previous one
set data(fontcolor) [$data(label) cget -foreground]
}
} elseif { [set cmd [Widget::getoption "$path#SelectFont" -command]] != "" } {
uplevel \#0 $cmd
}
}
# ----------------------------------------------------------------------------
# Command SelectFont::_getfont
# ----------------------------------------------------------------------------
proc SelectFont::_getfont { path } {
variable _families
variable _sizes
variable $path
upvar 0 $path data
array set font [font actual [Widget::getoption "$path#SelectFont" -font]]
set data(bold) [expr {![string equal $font(-weight) "normal"]}]
set data(italic) [expr {![string equal $font(-slant) "roman"]}]
set data(underline) $font(-underline)
set data(overstrike) $font(-overstrike)
set _styles [Widget::getoption "$path#SelectFont" -styles]
if { [Widget::getoption "$path#SelectFont" -querysystem] } {
set fams [Widget::getoption "$path#SelectFont" -families]
} else {
set fams "preset"
append fams [Widget::getoption "$path#SelectFont" -families]
}
if { [Widget::getoption "$path#SelectFont" -type] == "dialog" } {
set idxf [lsearch $_families($fams) $font(-family)]
set idxs [lsearch $_sizes $font(-size)]
set data(family) [expr {$idxf >= 0 ? $idxf : 0}]
set data(size) [expr {$idxs >= 0 ? $idxs : 0}]
} else {
set data(family) $font(-family)
set data(size) $font(-size)
if {![Widget::theme]} {
foreach st $_styles {
$path.$st configure \
-relief [expr {$data($st) ? "sunken":"raised"}]
}
}
}
}
# ----------------------------------------------------------------------------
# Command SelectFont::_destroy
# ----------------------------------------------------------------------------
proc SelectFont::_destroy { path } {
variable $path
upvar 0 $path data
unset data
Widget::destroy "$path#SelectFont"
}

BIN
lib/bwidget/images/bold.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

BIN
lib/bwidget/images/copy.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

BIN
lib/bwidget/images/cut.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

BIN
lib/bwidget/images/dragfile.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 949 B

BIN
lib/bwidget/images/dragicon.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1012 B

BIN
lib/bwidget/images/error.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

BIN
lib/bwidget/images/file.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 B

BIN
lib/bwidget/images/folder.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

BIN
lib/bwidget/images/hourglass.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

BIN
lib/bwidget/images/info.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

BIN
lib/bwidget/images/italic.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

5
lib/bwidget/images/minus.xbm

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
#define minus_width 9
#define minus_height 9
static char minus_bits[] = {
0xff,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x7d,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0xff,0x01};

BIN
lib/bwidget/images/new.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 B

5
lib/bwidget/images/opcopy.xbm

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
#define opcopy_width 11
#define opcopy_height 11
static char opcopy_bits[] = {
0xff,0xff,0x01,0xfc,0x21,0xfc,0x21,0xfc,0x21,0xfc,0xfd,0xfd,0x21,0xfc,0x21,
0xfc,0x21,0xfc,0x01,0xfc,0xff,0xff};

BIN
lib/bwidget/images/open.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

BIN
lib/bwidget/images/openfold.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

5
lib/bwidget/images/oplink.xbm

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
#define oplink_width 11
#define oplink_height 11
static char oplink_bits[] = {
0xff,0xff,0x01,0xfc,0xf1,0xfc,0xe1,0xfc,0xf1,0xfc,0xb9,0xfc,0x19,0xfc,0x09,
0xfc,0x11,0xfc,0x01,0xfc,0xff,0xff};

5
lib/bwidget/images/opmove.xbm

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
#define opmove_width 11
#define opmove_height 11
static char opmove_bits[] = {
0xff,0xff,0x01,0xfc,0x01,0xfc,0x51,0xfc,0x89,0xfc,0xfd,0xfd,0x89,0xfc,0x51,
0xfc,0x01,0xfc,0x01,0xfc,0xff,0xff};

BIN
lib/bwidget/images/overstrike.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

BIN
lib/bwidget/images/palette.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

BIN
lib/bwidget/images/passwd.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

BIN
lib/bwidget/images/paste.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

5
lib/bwidget/images/plus.xbm

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
#define plus_width 9
#define plus_height 9
static char plus_bits[] = {
0xff,0x01,0x01,0x01,0x11,0x01,0x11,0x01,0x7d,0x01,0x11,0x01,0x11,0x01,0x01,
0x01,0xff,0x01};

BIN
lib/bwidget/images/print.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

BIN
lib/bwidget/images/question.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

BIN
lib/bwidget/images/redo.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

BIN
lib/bwidget/images/save.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

9
lib/bwidget/images/target.xbm

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
#define target_width 24
#define target_height 24
static unsigned char target_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00,
0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3e, 0xe0, 0x03, 0x3e, 0xe0, 0x03, 0x3e, 0xe0, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00,
0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

BIN
lib/bwidget/images/underline.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

BIN
lib/bwidget/images/undo.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 B

BIN
lib/bwidget/images/warning.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

54
lib/bwidget/init.tcl

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
namespace eval Widget {}
proc Widget::_opt_defaults {{prio widgetDefault}} {
if {$::tcl_version >= 8.4} {
set plat [tk windowingsystem]
} else {
set plat $::tcl_platform(platform)
}
switch -exact $plat {
"aqua" {
}
"win32" -
"windows" {
#option add *Listbox.background SystemWindow $prio
option add *ListBox.background SystemWindow $prio
#option add *Button.padY 0 $prio
option add *ButtonBox.padY 0 $prio
option add *Dialog.padY 0 $prio
option add *Dialog.anchor e $prio
}
"x11" -
default {
option add *Scrollbar.width 12 $prio
option add *Scrollbar.borderWidth 1 $prio
option add *Dialog.separator 1 $prio
option add *MainFrame.relief raised $prio
option add *MainFrame.separator none $prio
}
}
}
Widget::_opt_defaults
# Try to load lang file corresponding to current msgcat locale
proc Widget::_opt_lang {} {
set langfile [file join $::BWIDGET::LIBRARY "lang" "en.rc"]
if {0 != [llength [info commands ::msgcat::mcpreferences]]} {
foreach lang [::msgcat::mcpreferences] {
set l [file join $::BWIDGET::LIBRARY "lang" "$lang.rc"]
if {[file readable $l]} {
set langfile $l
break
}
}
}
option read $langfile
}
Widget::_opt_lang
## Add a TraverseIn binding to standard Tk widgets to handle some of
## the BWidget-specific things we do.
bind Entry <<TraverseIn>> { %W selection range 0 end; %W icursor end }
bind Spinbox <<TraverseIn>> { %W selection range 0 end; %W icursor end }
bind all <Key-Tab> { Widget::traverseTo [Widget::focusNext %W] }
bind all <<PrevWindow>> { Widget::traverseTo [Widget::focusPrev %W] }

329
lib/bwidget/label.tcl

@ -0,0 +1,329 @@ @@ -0,0 +1,329 @@
# ------------------------------------------------------------------------------
# label.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: label.tcl,v 1.10.2.3 2011/04/26 08:24:28 oehhar Exp $
# ------------------------------------------------------------------------------
# Index of commands:
# - Label::create
# - Label::configure
# - Label::cget
# - Label::setfocus
# - Label::_drag_cmd
# - Label::_drop_cmd
# - Label::_over_cmd
# ------------------------------------------------------------------------------
namespace eval Label {
Widget::define Label label DragSite DropSite DynamicHelp
if {$::Widget::_theme} {
Widget::tkinclude Label label .l \
remove { -foreground -text -textvariable -underline -state}
} else {
Widget::tkinclude Label label .l \
remove { -foreground -text -textvariable -underline }
}
Widget::declare Label {
{-name String "" 0}
{-text String "" 0}
{-textvariable String "" 0}
{-underline Int -1 0 "%d >= -1"}
{-focus String "" 0}
{-foreground TkResource "" 0 label}
{-disabledforeground TkResource "" 0 button}
{-state Enum normal 0 {normal disabled}}
{-fg Synonym -foreground}
}
DynamicHelp::include Label balloon
DragSite::include Label "" 1
DropSite::include Label {
TEXT {move {}}
IMAGE {move {}}
BITMAP {move {}}
FGCOLOR {move {}}
BGCOLOR {move {}}
COLOR {move {}}
}
Widget::syncoptions Label "" .l {-text {} -underline {}}
bind BwLabel <FocusIn> [list Label::setfocus %W]
bind BwLabel <Destroy> [list Label::_destroy %W]
}
# ------------------------------------------------------------------------------
# Command Label::create
# ------------------------------------------------------------------------------
proc Label::create { path args } {
array set maps [list Label {} .l {}]
array set maps [Widget::parseArgs Label $args]
frame $path -class Label -borderwidth 0 -highlightthickness 0 -relief flat -padx 0 -pady 0
Widget::initFromODB Label $path $maps(Label)
if {$::Widget::_theme} {
eval [list ttk::label $path.l] $maps(.l)
} else {
eval [list label $path.l] $maps(.l)
}
if {$::Widget::_theme} {
if { [Widget::cget $path -state] != "normal" } {
$path.l state disabled
}
} else {
if { [Widget::cget $path -state] == "normal" } {
set fg [Widget::cget $path -foreground]
} else {
set fg [Widget::cget $path -disabledforeground]
}
$path.l configure -foreground $fg
}
set var [Widget::cget $path -textvariable]
if { $var == "" &&
[Widget::cget $path -image] == "" &&
($::Widget::_theme || [Widget::cget $path -bitmap] == "")} {
set desc [BWidget::getname [Widget::cget $path -name]]
if { $desc != "" } {
set text [lindex $desc 0]
set under [lindex $desc 1]
} else {
set text [Widget::cget $path -text]
set under [Widget::cget $path -underline]
}
} else {
set under -1
set text ""
}
$path.l configure -text $text -textvariable $var \
-underline $under
set accel [string tolower [string index $text $under]]
if { $accel != "" } {
bind [winfo toplevel $path] <Alt-$accel> "Label::setfocus $path"
}
bindtags $path [list BwLabel [winfo toplevel $path] all]
bindtags $path.l [list $path.l $path Label [winfo toplevel $path] all]
pack $path.l -expand yes -fill both
set dragendcmd [Widget::cget $path -dragendcmd]
DragSite::setdrag $path $path.l Label::_init_drag_cmd $dragendcmd 1
DropSite::setdrop $path $path.l Label::_over_cmd Label::_drop_cmd 1
DynamicHelp::sethelp $path $path.l 1
return [Widget::create Label $path]
}
# ------------------------------------------------------------------------------
# Command Label::configure
# ------------------------------------------------------------------------------
proc Label::configure { path args } {
set oldunder [$path.l cget -underline]
if { $oldunder != -1 } {
set oldaccel [string tolower [string index [$path.l cget -text] $oldunder]]
} else {
set oldaccel ""
}
set res [Widget::configure $path $args]
set cfg [Widget::hasChanged $path -foreground fg]
set cst [Widget::hasChanged $path -state state]
if {$::Widget::_theme} {
if { $cfg } {
$path.l configure -foreground $fg
}
if { $cst } {
if { $state == "normal" } {
$path.l state !disabled
} else {
$path.l state disabled
}
}
} else {
set cdfg [Widget::hasChanged $path -disabledforeground dfg]
if { $cst || $cfg || $cdfg } {
if { $state == "normal" } {
$path.l configure -fg $fg
} else {
$path.l configure -fg $dfg
}
}
}
set cv [Widget::hasChanged $path -textvariable var]
set cb [Widget::hasChanged $path -image img]
if {$::Widget::_theme} {
set ci 0
set bmp ""
} else {
set ci [Widget::hasChanged $path -bitmap bmp]
}
set cn [Widget::hasChanged $path -name name]
set ct [Widget::hasChanged $path -text text]
set cu [Widget::hasChanged $path -underline under]
if { $cv || $cb || $ci || $cn || $ct || $cu } {
if { $var == "" && $img == "" && $bmp == "" } {
set desc [BWidget::getname $name]
if { $desc != "" } {
set text [lindex $desc 0]
set under [lindex $desc 1]
}
} else {
set under -1
set text ""
}
set top [winfo toplevel $path]
if { $oldaccel != "" } {
bind $top <Alt-$oldaccel> {}
}
set accel [string tolower [string index $text $under]]
if { $accel != "" } {
bind $top <Alt-$accel> [list Label::setfocus $path]
}
$path.l configure -text $text -underline $under -textvariable $var
}
set force [Widget::hasChanged $path -dragendcmd dragend]
DragSite::setdrag $path $path.l Label::_init_drag_cmd $dragend $force
DropSite::setdrop $path $path.l Label::_over_cmd Label::_drop_cmd
DynamicHelp::sethelp $path $path.l
return $res
}
# ------------------------------------------------------------------------------
# Command Label::cget
# ------------------------------------------------------------------------------
proc Label::cget { path option } {
return [Widget::cget $path $option]
}
# ----------------------------------------------------------------------------
# Command Label::identify
# ----------------------------------------------------------------------------
proc Label::identify { path args } {
eval $path.l identify $args
}
# ----------------------------------------------------------------------------
# Command Label::instate
# ----------------------------------------------------------------------------
proc Label::instate { path args } {
eval $path.l instate $args
}
# ----------------------------------------------------------------------------
# Command Label::state
# ----------------------------------------------------------------------------
proc Label::state { path args } {
eval $path.l state $args
}
# ------------------------------------------------------------------------------
# Command Label::setfocus
# ------------------------------------------------------------------------------
proc Label::setfocus { path } {
if { [string equal [Widget::cget $path -state] "normal"] } {
set w [Widget::cget $path -focus]
if { [winfo exists $w] && [Widget::focusOK $w] } {
focus $w
}
}
}
# ------------------------------------------------------------------------------
# Command Label::_init_drag_cmd
# ------------------------------------------------------------------------------
proc Label::_init_drag_cmd { path X Y top } {
set path [winfo parent $path]
if { [set cmd [Widget::cget $path -draginitcmd]] != "" } {
return [uplevel \#0 $cmd [list $path $X $Y $top]]
}
if { [set data [$path.l cget -image]] != "" } {
set type "IMAGE"
pack [label $top.l -image $data]
} elseif { [set data [$path.l cget -bitmap]] != "" } {
set type "BITMAP"
pack [label $top.l -bitmap $data]
} else {
set data [$path.l cget -text]
set type "TEXT"
}
set usertype [Widget::getoption $path -dragtype]
if { $usertype != "" } {
set type $usertype
}
return [list $type {copy} $data]
}
# ------------------------------------------------------------------------------
# Command Label::_drop_cmd
# ------------------------------------------------------------------------------
proc Label::_drop_cmd { path source X Y op type data } {
set path [winfo parent $path]
if { [set cmd [Widget::cget $path -dropcmd]] != "" } {
return [uplevel \#0 $cmd [list $path $source $X $Y $op $type $data]]
}
if { $type == "COLOR" || $type == "FGCOLOR" } {
configure $path -foreground $data
} elseif { $type == "BGCOLOR" } {
configure $path -background $data
} else {
set text ""
set image ""
set bitmap ""
switch -- $type {
IMAGE {set image $data}
BITMAP {set bitmap $data}
default {
set text $data
if { [set var [$path.l cget -textvariable]] != "" } {
configure $path -image "" -bitmap ""
GlobalVar::setvar $var $data
return
}
}
}
configure $path -text $text -image $image -bitmap $bitmap
}
return 1
}
# ------------------------------------------------------------------------------
# Command Label::_over_cmd
# ------------------------------------------------------------------------------
proc Label::_over_cmd { path source event X Y op type data } {
set path [winfo parent $path]
if { [set cmd [Widget::cget $path -dropovercmd]] != "" } {
return [uplevel \#0 $cmd [list $path $source $event $X $Y $op $type $data]]
}
if { [Widget::getoption $path -state] == "normal" ||
$type == "COLOR" || $type == "FGCOLOR" || $type == "BGCOLOR" } {
DropSite::setcursor based_arrow_down
return 1
}
DropSite::setcursor dot
return 0
}
proc Label::_destroy { path } {
Widget::destroy $path
}

105
lib/bwidget/labelentry.tcl

@ -0,0 +1,105 @@ @@ -0,0 +1,105 @@
# ------------------------------------------------------------------------------
# labelentry.tcl
# This file is part of Unifix BWidget Toolkit
# $Id: labelentry.tcl,v 1.6.2.1 2011/02/14 16:56:09 oehhar Exp $
# ------------------------------------------------------------------------------
# Index of commands:
# - LabelEntry::create
# - LabelEntry::configure
# - LabelEntry::cget
# - LabelEntry::bind
# ------------------------------------------------------------------------------
namespace eval LabelEntry {
Widget::define LabelEntry labelentry Entry LabelFrame
Widget::bwinclude LabelEntry LabelFrame .labf \
remove {-relief -borderwidth -focus} \
rename {-text -label} \
prefix {label -justify -width -anchor -height -font -textvariable}
Widget::bwinclude LabelEntry Entry .e \
remove {-fg -bg} \
rename {-foreground -entryfg -background -entrybg}
Widget::addmap LabelEntry "" :cmd {-background {}}
Widget::syncoptions LabelEntry Entry .e {-text {}}
Widget::syncoptions LabelEntry LabelFrame .labf {-label -text -underline {}}
::bind BwLabelEntry <FocusIn> [list focus %W.labf]
::bind BwLabelEntry <Destroy> [list LabelEntry::_destroy %W]
}
# ------------------------------------------------------------------------------
# Command LabelEntry::create
# ------------------------------------------------------------------------------
proc LabelEntry::create { path args } {
array set maps [list LabelEntry {} :cmd {} .labf {} .e {}]
array set maps [Widget::parseArgs LabelEntry $args]
if {[Widget::theme]} {
eval [list ttk::frame $path] $maps(:cmd) -class LabelEntry \
-takefocus 0
} else {
eval [list frame $path] $maps(:cmd) -class LabelEntry \
-relief flat -bd 0 -highlightthickness 0 -takefocus 0
}
Widget::initFromODB LabelEntry $path $maps(LabelEntry)
set labf [eval [list LabelFrame::create $path.labf] $maps(.labf) \
[list -relief flat -borderwidth 0 -focus $path.e]]
set subf [LabelFrame::getframe $labf]
set entry [eval [list Entry::create $path.e] $maps(.e)]
pack $entry -in $subf -fill both -expand yes
pack $labf -fill both -expand yes
bindtags $path [list $path BwLabelEntry [winfo toplevel $path] all]
return [Widget::create LabelEntry $path]
}
# ------------------------------------------------------------------------------
# Command LabelEntry::configure
# ------------------------------------------------------------------------------
proc LabelEntry::configure { path args } {
return [Widget::configure $path $args]
}
# ------------------------------------------------------------------------------
# Command LabelEntry::cget
# ------------------------------------------------------------------------------
proc LabelEntry::cget { path option } {
return [Widget::cget $path $option]
}
# ------------------------------------------------------------------------------
# Command LabelEntry::bind
# ------------------------------------------------------------------------------
proc LabelEntry::bind { path args } {
return [eval [list ::bind $path.e] $args]
}
#------------------------------------------------------------------------------
# Command LabelEntry::_path_command
#------------------------------------------------------------------------------
proc LabelEntry::_path_command { path cmd larg } {
if { [string equal $cmd "configure"] ||
[string equal $cmd "cget"] ||
[string equal $cmd "bind"] } {
return [eval [list LabelEntry::$cmd $path] $larg]
} else {
return [eval [list $path.e:cmd $cmd] $larg]
}
}
proc LabelEntry::_destroy { path } {
Widget::destroy $path
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save