arcadia 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +126 -123
- data/arcadia.rb +770 -756
- data/base/a-contracts.rb +130 -93
- data/base/a-ext.rb +280 -280
- data/base/a-libs.rb +5 -11
- data/base/a-utils.rb +235 -44
- data/conf/arcadia.conf +20 -16
- data/conf/arcadia.init.rb +0 -0
- data/conf/arcadia.res.rb +74 -0
- data/ext/ae-complete-code/ae-complete-code.conf +0 -0
- data/ext/ae-complete-code/ae-complete-code.rb +80 -79
- data/ext/ae-debug/ae-debug.conf +0 -0
- data/ext/ae-debug/ae-debug.rb +2 -6
- data/ext/ae-debug/debug1.57.rb +0 -0
- data/ext/ae-doc-code/ae-doc-code.conf +15 -0
- data/ext/ae-doc-code/ae-doc-code.rb +289 -0
- data/ext/ae-editor/ae-editor.conf +17 -8
- data/ext/ae-editor/ae-editor.rb +738 -396
- data/ext/ae-event-log/ae-event-log.conf +0 -0
- data/ext/ae-event-log/ae-event-log.rb +0 -0
- data/ext/ae-file-history/ae-file-history.conf +2 -2
- data/ext/ae-file-history/ae-file-history.rb +286 -290
- data/ext/ae-inspector/ae-inspector.conf +0 -0
- data/ext/ae-inspector/ae-inspector.rb +0 -0
- data/ext/ae-output-event/ae-output-event.conf +2 -2
- data/ext/ae-output/ae-output.conf +2 -2
- data/ext/ae-output/ae-output.rb +173 -178
- data/ext/ae-palette/ae-palette.conf +0 -0
- data/ext/ae-palette/ae-palette.rb +0 -0
- data/ext/ae-shell/ae-shell.conf +0 -0
- data/ext/ae-shell/ae-shell.rb +54 -54
- data/lib/tk/al-tk.rb +3076 -3082
- data/lib/tk/al-tk.res.rb +0 -0
- data/lib/tk/al-tkarcadia.rb +0 -0
- data/lib/tk/al-tkcustom.rb +0 -0
- data/lib/tkext/al-bwidget.rb +0 -0
- data/lib/tkext/al-iwidgets.rb +0 -0
- data/lib/tkext/al-tile.rb +0 -0
- data/lib/tkext/al-tktable.rb +0 -0
- data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +276 -0
- data/tcl/BWidget-1.8.0/BWman/BWidget.html +228 -0
- data/tcl/BWidget-1.8.0/BWman/Button.html +273 -0
- data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +264 -0
- data/tcl/BWidget-1.8.0/BWman/ComboBox.html +402 -0
- data/tcl/BWidget-1.8.0/BWman/Dialog.html +314 -0
- data/tcl/BWidget-1.8.0/BWman/DragSite.html +139 -0
- data/tcl/BWidget-1.8.0/BWman/DropSite.html +254 -0
- data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +248 -0
- data/tcl/BWidget-1.8.0/BWman/Entry.html +341 -0
- data/tcl/BWidget-1.8.0/BWman/Label.html +331 -0
- data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +194 -0
- data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +144 -0
- data/tcl/BWidget-1.8.0/BWman/ListBox.html +678 -0
- data/tcl/BWidget-1.8.0/BWman/MainFrame.html +283 -0
- data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +218 -0
- data/tcl/BWidget-1.8.0/BWman/NoteBook.html +374 -0
- data/tcl/BWidget-1.8.0/BWman/PagesManager.html +180 -0
- data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +142 -0
- data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +153 -0
- data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +214 -0
- data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +152 -0
- data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +145 -0
- data/tcl/BWidget-1.8.0/BWman/ScrollView.html +130 -0
- data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +191 -0
- data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +116 -0
- data/tcl/BWidget-1.8.0/BWman/SelectColor.html +164 -0
- data/tcl/BWidget-1.8.0/BWman/SelectFont.html +152 -0
- data/tcl/BWidget-1.8.0/BWman/Separator.html +77 -0
- data/tcl/BWidget-1.8.0/BWman/SpinBox.html +250 -0
- data/tcl/BWidget-1.8.0/BWman/StatusBar.html +147 -0
- data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +107 -0
- data/tcl/BWidget-1.8.0/BWman/Tree.html +947 -0
- data/tcl/BWidget-1.8.0/BWman/Widget.html +502 -0
- data/tcl/BWidget-1.8.0/BWman/contents.html +84 -0
- data/tcl/BWidget-1.8.0/BWman/index.html +7 -0
- data/tcl/BWidget-1.8.0/BWman/navtree.html +41 -0
- data/tcl/BWidget-1.8.0/BWman/options.htm +458 -0
- data/tcl/BWidget-1.8.0/CHANGES.txt +266 -0
- data/tcl/BWidget-1.8.0/ChangeLog +1641 -0
- data/tcl/BWidget-1.8.0/LICENSE.txt +41 -0
- data/tcl/BWidget-1.8.0/README.txt +127 -0
- data/tcl/BWidget-1.8.0/arrow.tcl +551 -0
- data/tcl/BWidget-1.8.0/bitmap.tcl +94 -0
- data/tcl/BWidget-1.8.0/button.tcl +324 -0
- data/tcl/BWidget-1.8.0/buttonbox.tcl +403 -0
- data/tcl/BWidget-1.8.0/color.tcl +493 -0
- data/tcl/BWidget-1.8.0/combobox.tcl +809 -0
- data/tcl/BWidget-1.8.0/demo/basic.tcl +199 -0
- data/tcl/BWidget-1.8.0/demo/bwidget.xbm +46 -0
- data/tcl/BWidget-1.8.0/demo/demo.tcl +212 -0
- data/tcl/BWidget-1.8.0/demo/dnd.tcl +42 -0
- data/tcl/BWidget-1.8.0/demo/manager.tcl +141 -0
- data/tcl/BWidget-1.8.0/demo/select.tcl +59 -0
- data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +214 -0
- data/tcl/BWidget-1.8.0/demo/tree.tcl +260 -0
- data/tcl/BWidget-1.8.0/demo/x1.xbm +2258 -0
- data/tcl/BWidget-1.8.0/dialog.tcl +345 -0
- data/tcl/BWidget-1.8.0/dragsite.tcl +197 -0
- data/tcl/BWidget-1.8.0/dropsite.tcl +455 -0
- data/tcl/BWidget-1.8.0/dynhelp.tcl +625 -0
- data/tcl/BWidget-1.8.0/entry.tcl +469 -0
- data/tcl/BWidget-1.8.0/font.tcl +566 -0
- data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
- data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
- data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
- data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
- data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
- data/tcl/BWidget-1.8.0/images/error.gif +0 -0
- data/tcl/BWidget-1.8.0/images/file.gif +0 -0
- data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
- data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
- data/tcl/BWidget-1.8.0/images/info.gif +0 -0
- data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
- data/tcl/BWidget-1.8.0/images/minus.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/new.gif +0 -0
- data/tcl/BWidget-1.8.0/images/opcopy.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/open.gif +0 -0
- data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
- data/tcl/BWidget-1.8.0/images/oplink.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/opmove.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
- data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
- data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
- data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
- data/tcl/BWidget-1.8.0/images/plus.xbm +5 -0
- data/tcl/BWidget-1.8.0/images/print.gif +0 -0
- data/tcl/BWidget-1.8.0/images/question.gif +0 -0
- data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
- data/tcl/BWidget-1.8.0/images/save.gif +0 -0
- data/tcl/BWidget-1.8.0/images/target.xbm +9 -0
- data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
- data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
- data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
- data/tcl/BWidget-1.8.0/init.tcl +40 -0
- data/tcl/BWidget-1.8.0/label.tcl +271 -0
- data/tcl/BWidget-1.8.0/labelentry.tcl +100 -0
- data/tcl/BWidget-1.8.0/labelframe.tcl +160 -0
- data/tcl/BWidget-1.8.0/lang/da.rc +52 -0
- data/tcl/BWidget-1.8.0/lang/de.rc +52 -0
- data/tcl/BWidget-1.8.0/lang/en.rc +52 -0
- data/tcl/BWidget-1.8.0/lang/es.rc +53 -0
- data/tcl/BWidget-1.8.0/lang/fr.rc +52 -0
- data/tcl/BWidget-1.8.0/listbox.tcl +1638 -0
- data/tcl/BWidget-1.8.0/mainframe.tcl +711 -0
- data/tcl/BWidget-1.8.0/messagedlg.tcl +128 -0
- data/tcl/BWidget-1.8.0/notebook.tcl +1164 -0
- data/tcl/BWidget-1.8.0/pagesmgr.tcl +294 -0
- data/tcl/BWidget-1.8.0/panedw.tcl +381 -0
- data/tcl/BWidget-1.8.0/panelframe.tcl +246 -0
- data/tcl/BWidget-1.8.0/passwddlg.tcl +178 -0
- data/tcl/BWidget-1.8.0/pkgIndex.tcl +47 -0
- data/tcl/BWidget-1.8.0/progressbar.tcl +208 -0
- data/tcl/BWidget-1.8.0/progressdlg.tcl +87 -0
- data/tcl/BWidget-1.8.0/scrollframe.tcl +226 -0
- data/tcl/BWidget-1.8.0/scrollview.tcl +254 -0
- data/tcl/BWidget-1.8.0/scrollw.tcl +280 -0
- data/tcl/BWidget-1.8.0/separator.tcl +75 -0
- data/tcl/BWidget-1.8.0/spinbox.tcl +331 -0
- data/tcl/BWidget-1.8.0/statusbar.tcl +422 -0
- data/tcl/BWidget-1.8.0/tests/entry.test +173 -0
- data/tcl/BWidget-1.8.0/titleframe.tcl +170 -0
- data/tcl/BWidget-1.8.0/tree.tcl +2228 -0
- data/tcl/BWidget-1.8.0/utils.tcl +645 -0
- data/tcl/BWidget-1.8.0/widget.tcl +1576 -0
- data/tcl/BWidget-1.8.0/wizard.tcl +1028 -0
- data/tcl/BWidget-1.8.0/xpm2image.tcl +115 -0
- metadata +141 -5
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
BWidget ToolKit
|
|
2
|
+
Copyright (c) 1998-1999 UNIFIX.
|
|
3
|
+
Copyright (c) 2001-2002 ActiveState Corp.
|
|
4
|
+
|
|
5
|
+
The following terms apply to all files associated with the software
|
|
6
|
+
unless explicitly disclaimed in individual files.
|
|
7
|
+
|
|
8
|
+
The authors hereby grant permission to use, copy, modify, distribute,
|
|
9
|
+
and license this software and its documentation for any purpose, provided
|
|
10
|
+
that existing copyright notices are retained in all copies and that this
|
|
11
|
+
notice is included verbatim in any distributions. No written agreement,
|
|
12
|
+
license, or royalty fee is required for any of the authorized uses.
|
|
13
|
+
Modifications to this software may be copyrighted by their authors
|
|
14
|
+
and need not follow the licensing terms described here, provided that
|
|
15
|
+
the new terms are clearly indicated on the first page of each file where
|
|
16
|
+
they apply.
|
|
17
|
+
|
|
18
|
+
IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
|
|
19
|
+
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
|
20
|
+
ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
|
|
21
|
+
DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
|
|
22
|
+
POSSIBILITY OF SUCH DAMAGE.
|
|
23
|
+
|
|
24
|
+
THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
|
|
25
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
26
|
+
FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
|
|
27
|
+
IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
|
|
28
|
+
NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
|
|
29
|
+
MODIFICATIONS.
|
|
30
|
+
|
|
31
|
+
GOVERNMENT USE: If you are acquiring this software on behalf of the
|
|
32
|
+
U.S. government, the Government shall have only "Restricted Rights"
|
|
33
|
+
in the software and related documentation as defined in the Federal
|
|
34
|
+
Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
|
|
35
|
+
are acquiring the software on behalf of the Department of Defense, the
|
|
36
|
+
software shall be classified as "Commercial Computer Software" and the
|
|
37
|
+
Government shall have only "Restricted Rights" as defined in Clause
|
|
38
|
+
252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
|
|
39
|
+
authors grant the U.S. Government and others acting in its behalf
|
|
40
|
+
permission to use and distribute the software in accordance with the
|
|
41
|
+
terms specified in this license.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
BWidget ToolKit 1.8.0 October 2006
|
|
2
|
+
Copyright (c) 1998-1999 UNIFIX.
|
|
3
|
+
Copyright (c) 2001-2002 ActiveState Corp.
|
|
4
|
+
|
|
5
|
+
See the file LICENSE.txt for license info (uses Tcl's BSD-style license).
|
|
6
|
+
|
|
7
|
+
--------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
WHAT IS BWIDGET ?
|
|
10
|
+
|
|
11
|
+
The BWidget Toolkit is a high-level Widget Set for Tcl/Tk built using
|
|
12
|
+
native Tcl/Tk 8.x namespaces.
|
|
13
|
+
|
|
14
|
+
The BWidgets have a professional look&feel as in other well known
|
|
15
|
+
Toolkits (Tix or Incr Widgets), but the concept is radically different
|
|
16
|
+
because everything is pure Tcl/Tk. No platform dependencies, and no
|
|
17
|
+
compiling required. The code is 100% Pure Tcl/Tk.
|
|
18
|
+
|
|
19
|
+
The BWidget library was originally developed by UNIFIX Online, and
|
|
20
|
+
released under both the GNU Public License and the Tcl license.
|
|
21
|
+
BWidget is now maintained as a community project, hosted by
|
|
22
|
+
Sourceforge. Scores of fixes and enhancements have been added by
|
|
23
|
+
community developers. See the ChangeLog file for details.
|
|
24
|
+
|
|
25
|
+
--------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
WIDGET LIST (1.8)
|
|
28
|
+
|
|
29
|
+
Simple Widgets
|
|
30
|
+
Label Extended Label widget
|
|
31
|
+
Entry Extended Entry widget
|
|
32
|
+
Button Extended Button widget
|
|
33
|
+
ArrowButton Button widget with an arrow shape.
|
|
34
|
+
ProgressBar Progress indicator widget
|
|
35
|
+
ScrollView Display the visible area of a scrolled window
|
|
36
|
+
Separator 3D separator widget
|
|
37
|
+
|
|
38
|
+
Manager Widgets
|
|
39
|
+
MainFrame Manage toplevel with menu, toolbar and statusbar
|
|
40
|
+
LabelFrame Frame with a Label
|
|
41
|
+
TitleFrame Frame with a title
|
|
42
|
+
ScrolledWindow Generic scrolled widget
|
|
43
|
+
ScrollableFrame Scrollable frame containing widget
|
|
44
|
+
PanedWindow Tiled layout manager widget
|
|
45
|
+
ButtonBox Set of buttons with horizontal or vertical layout
|
|
46
|
+
PagesManager Pages manager widget
|
|
47
|
+
NoteBook Notebook manager widget
|
|
48
|
+
Dialog Dialog abstraction with custom buttons
|
|
49
|
+
|
|
50
|
+
Composite Widgets
|
|
51
|
+
LabelEntry LabelFrame containing an Entry widget.
|
|
52
|
+
ComboBox ComboBox widget
|
|
53
|
+
SpinBox SpinBox widget
|
|
54
|
+
Tree Tree widget
|
|
55
|
+
ListBox ListBox widget
|
|
56
|
+
MessageDlg Message dialog box
|
|
57
|
+
ProgressDlg Progress indicator dialog box
|
|
58
|
+
PasswdDlg Login/Password dialog box (contributed by Stephane Lavirotte)
|
|
59
|
+
SelectFont Font selection widget
|
|
60
|
+
SelectColor Color selection widget
|
|
61
|
+
|
|
62
|
+
Commands Classes
|
|
63
|
+
Widget The Widget base class
|
|
64
|
+
DynamicHelp Provide help to Tk widget or BWidget
|
|
65
|
+
DragSite Commands set for Drag facilities
|
|
66
|
+
DropSite Commands set for Drop facilities
|
|
67
|
+
BWidget Utilities
|
|
68
|
+
|
|
69
|
+
--------------------------------------------------------------------------
|
|
70
|
+
INSTALLATION AND USE
|
|
71
|
+
|
|
72
|
+
- On Unix Platform:
|
|
73
|
+
Uncompress the file BWidget-<version>.tar.Z|gz
|
|
74
|
+
|
|
75
|
+
To use the BWidget:
|
|
76
|
+
- If you have uncompressed the archive file under the Tcl Library Path
|
|
77
|
+
directory, you only need to do:
|
|
78
|
+
% package require BWidget
|
|
79
|
+
- If not, you have to specify the BWidget installation path in auto_path
|
|
80
|
+
global variable:
|
|
81
|
+
% lappend auto_path <install_path>
|
|
82
|
+
% package require BWidget
|
|
83
|
+
|
|
84
|
+
To launch the demo, you need to cd into the demo subdirectory:
|
|
85
|
+
$ cd <install_path>/demo
|
|
86
|
+
$ wish demo.tcl
|
|
87
|
+
|
|
88
|
+
- On Windows and others Platforms:
|
|
89
|
+
Uncompress the file BWidget-<version>.zip
|
|
90
|
+
|
|
91
|
+
To use the BWidget:
|
|
92
|
+
- If you uncompressed the archive file under the Tcl Library Path
|
|
93
|
+
directory, you only need to do:
|
|
94
|
+
% package require BWidget
|
|
95
|
+
- If not, you have to specify the BWidget installation path in auto_path
|
|
96
|
+
global variable:
|
|
97
|
+
% lappend auto_path your_path
|
|
98
|
+
% package require BWidget
|
|
99
|
+
|
|
100
|
+
To launch the demo :
|
|
101
|
+
Double click on demo.tcl in the demo subdirectory
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
Distribution contains these directories:
|
|
105
|
+
|
|
106
|
+
BWidget-<version> Root directory and BWidget Tcl sources
|
|
107
|
+
BWman HTML manual pages
|
|
108
|
+
images images used by BWidget
|
|
109
|
+
lang Resources for language customization
|
|
110
|
+
demo Demo sources
|
|
111
|
+
tests BWidgets test suite
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
--------------------------------------------------------------------------
|
|
115
|
+
|
|
116
|
+
DOCUMENTATION
|
|
117
|
+
|
|
118
|
+
HTML manual pages are available in the BWman subdirectory. Point to
|
|
119
|
+
index.html for frame version with tree navigation, or to contents.html
|
|
120
|
+
for no frame version.
|
|
121
|
+
|
|
122
|
+
--------------------------------------------------------------------------
|
|
123
|
+
|
|
124
|
+
CONTACTS
|
|
125
|
+
|
|
126
|
+
The BWidget toolkit is maintained on Sourceforge, at
|
|
127
|
+
http://www.sourceforge.net/projects/tcllib/
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
# ------------------------------------------------------------------------------
|
|
2
|
+
# arrow.tcl
|
|
3
|
+
# This file is part of Unifix BWidget Toolkit
|
|
4
|
+
# ------------------------------------------------------------------------------
|
|
5
|
+
# Index of commands:
|
|
6
|
+
# Public commands
|
|
7
|
+
# - ArrowButton::create
|
|
8
|
+
# - ArrowButton::configure
|
|
9
|
+
# - ArrowButton::cget
|
|
10
|
+
# - ArrowButton::invoke
|
|
11
|
+
# Private commands (redraw commands)
|
|
12
|
+
# - ArrowButton::_redraw
|
|
13
|
+
# - ArrowButton::_redraw_state
|
|
14
|
+
# - ArrowButton::_redraw_relief
|
|
15
|
+
# - ArrowButton::_redraw_whole
|
|
16
|
+
# Private commands (event bindings)
|
|
17
|
+
# - ArrowButton::_destroy
|
|
18
|
+
# - ArrowButton::_enter
|
|
19
|
+
# - ArrowButton::_leave
|
|
20
|
+
# - ArrowButton::_press
|
|
21
|
+
# - ArrowButton::_release
|
|
22
|
+
# - ArrowButton::_repeat
|
|
23
|
+
# ------------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
namespace eval ArrowButton {
|
|
26
|
+
Widget::define ArrowButton arrow DynamicHelp
|
|
27
|
+
|
|
28
|
+
Widget::tkinclude ArrowButton button .c \
|
|
29
|
+
include [list \
|
|
30
|
+
-borderwidth -bd \
|
|
31
|
+
-relief -highlightbackground \
|
|
32
|
+
-highlightcolor -highlightthickness -takefocus]
|
|
33
|
+
|
|
34
|
+
Widget::declare ArrowButton [list \
|
|
35
|
+
[list -type Enum button 0 [list arrow button]] \
|
|
36
|
+
[list -dir Enum top 0 [list top bottom left right]] \
|
|
37
|
+
[list -width Int 15 0 "%d >= 0"] \
|
|
38
|
+
[list -height Int 15 0 "%d >= 0"] \
|
|
39
|
+
[list -ipadx Int 0 0 "%d >= 0"] \
|
|
40
|
+
[list -ipady Int 0 0 "%d >= 0"] \
|
|
41
|
+
[list -clean Int 2 0 "%d >= 0 && %d <= 2"] \
|
|
42
|
+
[list -activeforeground TkResource "" 0 button] \
|
|
43
|
+
[list -activebackground TkResource "" 0 button] \
|
|
44
|
+
[list -disabledforeground TkResource "" 0 button] \
|
|
45
|
+
[list -foreground TkResource "" 0 button] \
|
|
46
|
+
[list -background TkResource "" 0 button] \
|
|
47
|
+
[list -state TkResource "" 0 button] \
|
|
48
|
+
[list -troughcolor TkResource "" 0 scrollbar] \
|
|
49
|
+
[list -arrowbd Int 1 0 "%d >= 0 && %d <= 2"] \
|
|
50
|
+
[list -arrowrelief Enum raised 0 [list raised sunken]] \
|
|
51
|
+
[list -command String "" 0] \
|
|
52
|
+
[list -armcommand String "" 0] \
|
|
53
|
+
[list -disarmcommand String "" 0] \
|
|
54
|
+
[list -repeatdelay Int 0 0 "%d >= 0"] \
|
|
55
|
+
[list -repeatinterval Int 0 0 "%d >= 0"] \
|
|
56
|
+
[list -fg Synonym -foreground] \
|
|
57
|
+
[list -bg Synonym -background] \
|
|
58
|
+
]
|
|
59
|
+
DynamicHelp::include ArrowButton balloon
|
|
60
|
+
|
|
61
|
+
bind BwArrowButtonC <Enter> {ArrowButton::_enter %W}
|
|
62
|
+
bind BwArrowButtonC <Leave> {ArrowButton::_leave %W}
|
|
63
|
+
bind BwArrowButtonC <ButtonPress-1> {ArrowButton::_press %W}
|
|
64
|
+
bind BwArrowButtonC <ButtonRelease-1> {ArrowButton::_release %W}
|
|
65
|
+
bind BwArrowButtonC <Key-space> {ArrowButton::invoke %W; break}
|
|
66
|
+
bind BwArrowButtonC <Return> {ArrowButton::invoke %W; break}
|
|
67
|
+
bind BwArrowButton <Configure> {ArrowButton::_redraw_whole %W %w %h}
|
|
68
|
+
bind BwArrowButton <Destroy> {ArrowButton::_destroy %W}
|
|
69
|
+
|
|
70
|
+
variable _grab
|
|
71
|
+
variable _moved
|
|
72
|
+
|
|
73
|
+
array set _grab {current "" pressed "" oldstate "" oldrelief ""}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
# -----------------------------------------------------------------------------
|
|
78
|
+
# Command ArrowButton::create
|
|
79
|
+
# -----------------------------------------------------------------------------
|
|
80
|
+
proc ArrowButton::create { path args } {
|
|
81
|
+
# Initialize configuration mappings and parse arguments
|
|
82
|
+
array set submaps [list ArrowButton [list ] .c [list ]]
|
|
83
|
+
array set submaps [Widget::parseArgs ArrowButton $args]
|
|
84
|
+
|
|
85
|
+
# Create the class frame (so we can do the option db queries)
|
|
86
|
+
frame $path -class ArrowButton -borderwidth 0 -highlightthickness 0
|
|
87
|
+
Widget::initFromODB ArrowButton $path $submaps(ArrowButton)
|
|
88
|
+
|
|
89
|
+
# Create the canvas with the initial options
|
|
90
|
+
eval [list canvas $path.c] $submaps(.c)
|
|
91
|
+
|
|
92
|
+
# Compute the width and height of the canvas from the width/height
|
|
93
|
+
# of the ArrowButton and the borderwidth/hightlightthickness.
|
|
94
|
+
set w [Widget::getMegawidgetOption $path -width]
|
|
95
|
+
set h [Widget::getMegawidgetOption $path -height]
|
|
96
|
+
set bd [Widget::cget $path -borderwidth]
|
|
97
|
+
set ht [Widget::cget $path -highlightthickness]
|
|
98
|
+
set pad [expr {2*($bd+$ht)}]
|
|
99
|
+
|
|
100
|
+
$path.c configure -width [expr {$w-$pad}] -height [expr {$h-$pad}]
|
|
101
|
+
bindtags $path [list $path BwArrowButton [winfo toplevel $path] all]
|
|
102
|
+
bindtags $path.c [list $path.c BwArrowButtonC [winfo toplevel $path.c] all]
|
|
103
|
+
pack $path.c -expand yes -fill both
|
|
104
|
+
|
|
105
|
+
DynamicHelp::sethelp $path $path.c 1
|
|
106
|
+
|
|
107
|
+
set ::ArrowButton::_moved($path) 0
|
|
108
|
+
|
|
109
|
+
return [Widget::create ArrowButton $path]
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# -----------------------------------------------------------------------------
|
|
114
|
+
# Command ArrowButton::configure
|
|
115
|
+
# -----------------------------------------------------------------------------
|
|
116
|
+
proc ArrowButton::configure { path args } {
|
|
117
|
+
set res [Widget::configure $path $args]
|
|
118
|
+
|
|
119
|
+
set ch1 [expr {[Widget::hasChanged $path -width w] |
|
|
120
|
+
[Widget::hasChanged $path -height h] |
|
|
121
|
+
[Widget::hasChanged $path -borderwidth bd] |
|
|
122
|
+
[Widget::hasChanged $path -highlightthickness ht]}]
|
|
123
|
+
set ch2 [expr {[Widget::hasChanged $path -type val] |
|
|
124
|
+
[Widget::hasChanged $path -ipadx val] |
|
|
125
|
+
[Widget::hasChanged $path -ipady val] |
|
|
126
|
+
[Widget::hasChanged $path -arrowbd val] |
|
|
127
|
+
[Widget::hasChanged $path -clean val] |
|
|
128
|
+
[Widget::hasChanged $path -dir val]}]
|
|
129
|
+
|
|
130
|
+
if { $ch1 } {
|
|
131
|
+
set pad [expr {2*($bd+$ht)}]
|
|
132
|
+
$path.c configure \
|
|
133
|
+
-width [expr {$w-$pad}] -height [expr {$h-$pad}] \
|
|
134
|
+
-borderwidth $bd -highlightthickness $ht
|
|
135
|
+
set ch2 1
|
|
136
|
+
}
|
|
137
|
+
if { $ch2 } {
|
|
138
|
+
_redraw_whole $path [winfo width $path] [winfo height $path]
|
|
139
|
+
} else {
|
|
140
|
+
_redraw_relief $path
|
|
141
|
+
_redraw_state $path
|
|
142
|
+
}
|
|
143
|
+
DynamicHelp::sethelp $path $path.c
|
|
144
|
+
|
|
145
|
+
return $res
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
# -----------------------------------------------------------------------------
|
|
150
|
+
# Command ArrowButton::cget
|
|
151
|
+
# -----------------------------------------------------------------------------
|
|
152
|
+
proc ArrowButton::cget { path option } {
|
|
153
|
+
return [Widget::cget $path $option]
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
# ------------------------------------------------------------------------------
|
|
158
|
+
# Command ArrowButton::invoke
|
|
159
|
+
# ------------------------------------------------------------------------------
|
|
160
|
+
proc ArrowButton::invoke { path } {
|
|
161
|
+
if { ![string equal [winfo class $path] "ArrowButton"] } {
|
|
162
|
+
set path [winfo parent $path]
|
|
163
|
+
}
|
|
164
|
+
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
|
|
165
|
+
set oldstate [Widget::getoption $path -state]
|
|
166
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
167
|
+
set oldrelief [Widget::getoption $path -relief]
|
|
168
|
+
configure $path -state active -relief sunken
|
|
169
|
+
} else {
|
|
170
|
+
set oldrelief [Widget::getoption $path -arrowrelief]
|
|
171
|
+
configure $path -state active -arrowrelief sunken
|
|
172
|
+
}
|
|
173
|
+
update idletasks
|
|
174
|
+
if {[llength [set cmd [Widget::getoption $path -armcommand]]]} {
|
|
175
|
+
uplevel \#0 $cmd
|
|
176
|
+
}
|
|
177
|
+
after 10
|
|
178
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
179
|
+
configure $path -state $oldstate -relief $oldrelief
|
|
180
|
+
} else {
|
|
181
|
+
configure $path -state $oldstate -arrowrelief $oldrelief
|
|
182
|
+
}
|
|
183
|
+
if {[llength [set cmd [Widget::getoption $path -disarmcommand]]]} {
|
|
184
|
+
uplevel \#0 $cmd
|
|
185
|
+
}
|
|
186
|
+
if {[llength [set cmd [Widget::getoption $path -command]]]} {
|
|
187
|
+
uplevel \#0 $cmd
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
# ------------------------------------------------------------------------------
|
|
194
|
+
# Command ArrowButton::_redraw
|
|
195
|
+
# ------------------------------------------------------------------------------
|
|
196
|
+
proc ArrowButton::_redraw { path width height } {
|
|
197
|
+
variable _moved
|
|
198
|
+
|
|
199
|
+
set _moved($path) 0
|
|
200
|
+
set type [Widget::getoption $path -type]
|
|
201
|
+
set dir [Widget::getoption $path -dir]
|
|
202
|
+
set bd [expr {[$path.c cget -borderwidth] + [$path.c cget -highlightthickness] + 1}]
|
|
203
|
+
set clean [Widget::getoption $path -clean]
|
|
204
|
+
if { [string equal $type "arrow"] } {
|
|
205
|
+
if { [set id [$path.c find withtag rect]] == "" } {
|
|
206
|
+
$path.c create rectangle $bd $bd [expr {$width-$bd-1}] [expr {$height-$bd-1}] -tags rect
|
|
207
|
+
} else {
|
|
208
|
+
$path.c coords $id $bd $bd [expr {$width-$bd-1}] [expr {$height-$bd-1}]
|
|
209
|
+
}
|
|
210
|
+
$path.c lower rect
|
|
211
|
+
set arrbd [Widget::getoption $path -arrowbd]
|
|
212
|
+
set bd [expr {$bd+$arrbd-1}]
|
|
213
|
+
} else {
|
|
214
|
+
$path.c delete rect
|
|
215
|
+
}
|
|
216
|
+
# w and h are max width and max height of arrow
|
|
217
|
+
set w [expr {$width - 2*([Widget::getoption $path -ipadx]+$bd)}]
|
|
218
|
+
set h [expr {$height - 2*([Widget::getoption $path -ipady]+$bd)}]
|
|
219
|
+
|
|
220
|
+
if { $w < 2 } {set w 2}
|
|
221
|
+
if { $h < 2 } {set h 2}
|
|
222
|
+
|
|
223
|
+
if { $clean > 0 } {
|
|
224
|
+
# arrange for base to be odd
|
|
225
|
+
if { [string equal $dir "top"] || [string equal $dir "bottom"] } {
|
|
226
|
+
if { !($w % 2) } {
|
|
227
|
+
incr w -1
|
|
228
|
+
}
|
|
229
|
+
if { $clean == 2 } {
|
|
230
|
+
# arrange for h = (w+1)/2
|
|
231
|
+
set h2 [expr {($w+1)/2}]
|
|
232
|
+
if { $h2 > $h } {
|
|
233
|
+
set w [expr {2*$h-1}]
|
|
234
|
+
} else {
|
|
235
|
+
set h $h2
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
} else {
|
|
239
|
+
if { !($h % 2) } {
|
|
240
|
+
incr h -1
|
|
241
|
+
}
|
|
242
|
+
if { $clean == 2 } {
|
|
243
|
+
# arrange for w = (h+1)/2
|
|
244
|
+
set w2 [expr {($h+1)/2}]
|
|
245
|
+
if { $w2 > $w } {
|
|
246
|
+
set h [expr {2*$w-1}]
|
|
247
|
+
} else {
|
|
248
|
+
set w $w2
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
set x0 [expr {($width-$w)/2}]
|
|
255
|
+
set y0 [expr {($height-$h)/2}]
|
|
256
|
+
set x1 [expr {$x0+$w-1}]
|
|
257
|
+
set y1 [expr {$y0+$h-1}]
|
|
258
|
+
|
|
259
|
+
switch $dir {
|
|
260
|
+
top {
|
|
261
|
+
set xd [expr {($x0+$x1)/2}]
|
|
262
|
+
if { [set id [$path.c find withtag poly]] == "" } {
|
|
263
|
+
$path.c create polygon $x0 $y1 $x1 $y1 $xd $y0 -tags poly
|
|
264
|
+
} else {
|
|
265
|
+
$path.c coords $id $x0 $y1 $x1 $y1 $xd $y0
|
|
266
|
+
}
|
|
267
|
+
if { [string equal $type "arrow"] } {
|
|
268
|
+
if { [set id [$path.c find withtag bot]] == "" } {
|
|
269
|
+
$path.c create line $x0 $y1 $x1 $y1 $xd $y0 -tags bot
|
|
270
|
+
} else {
|
|
271
|
+
$path.c coords $id $x0 $y1 $x1 $y1 $xd $y0
|
|
272
|
+
}
|
|
273
|
+
if { [set id [$path.c find withtag top]] == "" } {
|
|
274
|
+
$path.c create line $x0 $y1 $xd $y0 -tags top
|
|
275
|
+
} else {
|
|
276
|
+
$path.c coords $id $x0 $y1 $xd $y0
|
|
277
|
+
}
|
|
278
|
+
$path.c itemconfigure top -width $arrbd
|
|
279
|
+
$path.c itemconfigure bot -width $arrbd
|
|
280
|
+
} else {
|
|
281
|
+
$path.c delete top
|
|
282
|
+
$path.c delete bot
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
bottom {
|
|
286
|
+
set xd [expr {($x0+$x1)/2}]
|
|
287
|
+
if { [set id [$path.c find withtag poly]] == "" } {
|
|
288
|
+
$path.c create polygon $x1 $y0 $x0 $y0 $xd $y1 -tags poly
|
|
289
|
+
} else {
|
|
290
|
+
$path.c coords $id $x1 $y0 $x0 $y0 $xd $y1
|
|
291
|
+
}
|
|
292
|
+
if { [string equal $type "arrow"] } {
|
|
293
|
+
if { [set id [$path.c find withtag top]] == "" } {
|
|
294
|
+
$path.c create line $x1 $y0 $x0 $y0 $xd $y1 -tags top
|
|
295
|
+
} else {
|
|
296
|
+
$path.c coords $id $x1 $y0 $x0 $y0 $xd $y1
|
|
297
|
+
}
|
|
298
|
+
if { [set id [$path.c find withtag bot]] == "" } {
|
|
299
|
+
$path.c create line $x1 $y0 $xd $y1 -tags bot
|
|
300
|
+
} else {
|
|
301
|
+
$path.c coords $id $x1 $y0 $xd $y1
|
|
302
|
+
}
|
|
303
|
+
$path.c itemconfigure top -width $arrbd
|
|
304
|
+
$path.c itemconfigure bot -width $arrbd
|
|
305
|
+
} else {
|
|
306
|
+
$path.c delete top
|
|
307
|
+
$path.c delete bot
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
left {
|
|
311
|
+
set yd [expr {($y0+$y1)/2}]
|
|
312
|
+
if { [set id [$path.c find withtag poly]] == "" } {
|
|
313
|
+
$path.c create polygon $x1 $y0 $x1 $y1 $x0 $yd -tags poly
|
|
314
|
+
} else {
|
|
315
|
+
$path.c coords $id $x1 $y0 $x1 $y1 $x0 $yd
|
|
316
|
+
}
|
|
317
|
+
if { [string equal $type "arrow"] } {
|
|
318
|
+
if { [set id [$path.c find withtag bot]] == "" } {
|
|
319
|
+
$path.c create line $x1 $y0 $x1 $y1 $x0 $yd -tags bot
|
|
320
|
+
} else {
|
|
321
|
+
$path.c coords $id $x1 $y0 $x1 $y1 $x0 $yd
|
|
322
|
+
}
|
|
323
|
+
if { [set id [$path.c find withtag top]] == "" } {
|
|
324
|
+
$path.c create line $x1 $y0 $x0 $yd -tags top
|
|
325
|
+
} else {
|
|
326
|
+
$path.c coords $id $x1 $y0 $x0 $yd
|
|
327
|
+
}
|
|
328
|
+
$path.c itemconfigure top -width $arrbd
|
|
329
|
+
$path.c itemconfigure bot -width $arrbd
|
|
330
|
+
} else {
|
|
331
|
+
$path.c delete top
|
|
332
|
+
$path.c delete bot
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
right {
|
|
336
|
+
set yd [expr {($y0+$y1)/2}]
|
|
337
|
+
if { [set id [$path.c find withtag poly]] == "" } {
|
|
338
|
+
$path.c create polygon $x0 $y1 $x0 $y0 $x1 $yd -tags poly
|
|
339
|
+
} else {
|
|
340
|
+
$path.c coords $id $x0 $y1 $x0 $y0 $x1 $yd
|
|
341
|
+
}
|
|
342
|
+
if { [string equal $type "arrow"] } {
|
|
343
|
+
if { [set id [$path.c find withtag top]] == "" } {
|
|
344
|
+
$path.c create line $x0 $y1 $x0 $y0 $x1 $yd -tags top
|
|
345
|
+
} else {
|
|
346
|
+
$path.c coords $id $x0 $y1 $x0 $y0 $x1 $yd
|
|
347
|
+
}
|
|
348
|
+
if { [set id [$path.c find withtag bot]] == "" } {
|
|
349
|
+
$path.c create line $x0 $y1 $x1 $yd -tags bot
|
|
350
|
+
} else {
|
|
351
|
+
$path.c coords $id $x0 $y1 $x1 $yd
|
|
352
|
+
}
|
|
353
|
+
$path.c itemconfigure top -width $arrbd
|
|
354
|
+
$path.c itemconfigure bot -width $arrbd
|
|
355
|
+
} else {
|
|
356
|
+
$path.c delete top
|
|
357
|
+
$path.c delete bot
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
# ------------------------------------------------------------------------------
|
|
365
|
+
# Command ArrowButton::_redraw_state
|
|
366
|
+
# ------------------------------------------------------------------------------
|
|
367
|
+
proc ArrowButton::_redraw_state { path } {
|
|
368
|
+
set state [Widget::getoption $path -state]
|
|
369
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
370
|
+
switch $state {
|
|
371
|
+
normal {set bg -background; set fg -foreground}
|
|
372
|
+
active {set bg -activebackground; set fg -activeforeground}
|
|
373
|
+
disabled {set bg -background; set fg -disabledforeground}
|
|
374
|
+
}
|
|
375
|
+
set fg [Widget::getoption $path $fg]
|
|
376
|
+
$path.c configure -background [Widget::getoption $path $bg]
|
|
377
|
+
$path.c itemconfigure poly -fill $fg -outline $fg
|
|
378
|
+
} else {
|
|
379
|
+
switch $state {
|
|
380
|
+
normal {set stipple ""; set bg [Widget::getoption $path -background] }
|
|
381
|
+
active {set stipple ""; set bg [Widget::getoption $path -activebackground] }
|
|
382
|
+
disabled {set stipple gray50; set bg black }
|
|
383
|
+
}
|
|
384
|
+
set thrc [Widget::getoption $path -troughcolor]
|
|
385
|
+
$path.c configure -background [Widget::getoption $path -background]
|
|
386
|
+
$path.c itemconfigure rect -fill $thrc -outline $thrc
|
|
387
|
+
$path.c itemconfigure poly -fill $bg -outline $bg -stipple $stipple
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
# ------------------------------------------------------------------------------
|
|
393
|
+
# Command ArrowButton::_redraw_relief
|
|
394
|
+
# ------------------------------------------------------------------------------
|
|
395
|
+
proc ArrowButton::_redraw_relief { path } {
|
|
396
|
+
variable _moved
|
|
397
|
+
|
|
398
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
399
|
+
if { [string equal [Widget::getoption $path -relief] "sunken"] } {
|
|
400
|
+
if { !$_moved($path) } {
|
|
401
|
+
$path.c move poly 1 1
|
|
402
|
+
set _moved($path) 1
|
|
403
|
+
}
|
|
404
|
+
} else {
|
|
405
|
+
if { $_moved($path) } {
|
|
406
|
+
$path.c move poly -1 -1
|
|
407
|
+
set _moved($path) 0
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
} else {
|
|
411
|
+
set col3d [BWidget::get3dcolor $path [Widget::getoption $path -background]]
|
|
412
|
+
switch [Widget::getoption $path -arrowrelief] {
|
|
413
|
+
raised {set top [lindex $col3d 1]; set bot [lindex $col3d 0]}
|
|
414
|
+
sunken {set top [lindex $col3d 0]; set bot [lindex $col3d 1]}
|
|
415
|
+
}
|
|
416
|
+
$path.c itemconfigure top -fill $top
|
|
417
|
+
$path.c itemconfigure bot -fill $bot
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
# ------------------------------------------------------------------------------
|
|
423
|
+
# Command ArrowButton::_redraw_whole
|
|
424
|
+
# ------------------------------------------------------------------------------
|
|
425
|
+
proc ArrowButton::_redraw_whole { path width height } {
|
|
426
|
+
_redraw $path $width $height
|
|
427
|
+
_redraw_relief $path
|
|
428
|
+
_redraw_state $path
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
# ------------------------------------------------------------------------------
|
|
433
|
+
# Command ArrowButton::_enter
|
|
434
|
+
# ------------------------------------------------------------------------------
|
|
435
|
+
proc ArrowButton::_enter { path } {
|
|
436
|
+
variable _grab
|
|
437
|
+
set path [winfo parent $path]
|
|
438
|
+
set _grab(current) $path
|
|
439
|
+
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
|
|
440
|
+
set _grab(oldstate) [Widget::getoption $path -state]
|
|
441
|
+
configure $path -state active
|
|
442
|
+
if { $_grab(pressed) == $path } {
|
|
443
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
444
|
+
set _grab(oldrelief) [Widget::getoption $path -relief]
|
|
445
|
+
configure $path -relief sunken
|
|
446
|
+
} else {
|
|
447
|
+
set _grab(oldrelief) [Widget::getoption $path -arrowrelief]
|
|
448
|
+
configure $path -arrowrelief sunken
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
# ------------------------------------------------------------------------------
|
|
456
|
+
# Command ArrowButton::_leave
|
|
457
|
+
# ------------------------------------------------------------------------------
|
|
458
|
+
proc ArrowButton::_leave { path } {
|
|
459
|
+
variable _grab
|
|
460
|
+
set path [winfo parent $path]
|
|
461
|
+
set _grab(current) ""
|
|
462
|
+
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
|
|
463
|
+
configure $path -state $_grab(oldstate)
|
|
464
|
+
if { $_grab(pressed) == $path } {
|
|
465
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
466
|
+
configure $path -relief $_grab(oldrelief)
|
|
467
|
+
} else {
|
|
468
|
+
configure $path -arrowrelief $_grab(oldrelief)
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
# ------------------------------------------------------------------------------
|
|
476
|
+
# Command ArrowButton::_press
|
|
477
|
+
# ------------------------------------------------------------------------------
|
|
478
|
+
proc ArrowButton::_press { path } {
|
|
479
|
+
variable _grab
|
|
480
|
+
set path [winfo parent $path]
|
|
481
|
+
if { ![string equal [Widget::getoption $path -state] "disabled"] } {
|
|
482
|
+
set _grab(pressed) $path
|
|
483
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
484
|
+
set _grab(oldrelief) [Widget::getoption $path -relief]
|
|
485
|
+
configure $path -relief sunken
|
|
486
|
+
} else {
|
|
487
|
+
set _grab(oldrelief) [Widget::getoption $path -arrowrelief]
|
|
488
|
+
configure $path -arrowrelief sunken
|
|
489
|
+
}
|
|
490
|
+
if {[llength [set cmd [Widget::getoption $path -armcommand]]]} {
|
|
491
|
+
uplevel \#0 $cmd
|
|
492
|
+
if { [set delay [Widget::getoption $path -repeatdelay]] > 0 ||
|
|
493
|
+
[set delay [Widget::getoption $path -repeatinterval]] > 0 } {
|
|
494
|
+
after $delay [list ArrowButton::_repeat $path]
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
# ------------------------------------------------------------------------------
|
|
502
|
+
# Command ArrowButton::_release
|
|
503
|
+
# ------------------------------------------------------------------------------
|
|
504
|
+
proc ArrowButton::_release { path } {
|
|
505
|
+
variable _grab
|
|
506
|
+
set path [winfo parent $path]
|
|
507
|
+
if { $_grab(pressed) == $path } {
|
|
508
|
+
set _grab(pressed) ""
|
|
509
|
+
if { [string equal [Widget::getoption $path -type] "button"] } {
|
|
510
|
+
configure $path -relief $_grab(oldrelief)
|
|
511
|
+
} else {
|
|
512
|
+
configure $path -arrowrelief $_grab(oldrelief)
|
|
513
|
+
}
|
|
514
|
+
if {[llength [set cmd [Widget::getoption $path -disarmcommand]]]} {
|
|
515
|
+
uplevel \#0 $cmd
|
|
516
|
+
}
|
|
517
|
+
if { $_grab(current) == $path &&
|
|
518
|
+
![string equal [Widget::getoption $path -state] "disabled"] &&
|
|
519
|
+
[llength [set cmd [Widget::getoption $path -command]]]} {
|
|
520
|
+
uplevel \#0 $cmd
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
# ------------------------------------------------------------------------------
|
|
527
|
+
# Command ArrowButton::_repeat
|
|
528
|
+
# ------------------------------------------------------------------------------
|
|
529
|
+
proc ArrowButton::_repeat { path } {
|
|
530
|
+
variable _grab
|
|
531
|
+
if { $_grab(current) == $path && $_grab(pressed) == $path &&
|
|
532
|
+
![string equal [Widget::getoption $path -state] "disabled"] &&
|
|
533
|
+
[llength [set cmd [Widget::getoption $path -armcommand]]]} {
|
|
534
|
+
uplevel \#0 $cmd
|
|
535
|
+
}
|
|
536
|
+
if { $_grab(pressed) == $path &&
|
|
537
|
+
([set delay [Widget::getoption $path -repeatinterval]] > 0 ||
|
|
538
|
+
[set delay [Widget::getoption $path -repeatdelay]] > 0) } {
|
|
539
|
+
after $delay [list ArrowButton::_repeat $path]
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
# ------------------------------------------------------------------------------
|
|
545
|
+
# Command ArrowButton::_destroy
|
|
546
|
+
# ------------------------------------------------------------------------------
|
|
547
|
+
proc ArrowButton::_destroy { path } {
|
|
548
|
+
variable _moved
|
|
549
|
+
Widget::destroy $path
|
|
550
|
+
unset _moved($path)
|
|
551
|
+
}
|