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,711 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------
|
|
2
|
+
# mainframe.tcl
|
|
3
|
+
# This file is part of Unifix BWidget Toolkit
|
|
4
|
+
# $Id: mainframe.tcl,v 1.23 2006/03/24 22:19:57 dev_null42a Exp $
|
|
5
|
+
# ------------------------------------------------------------------------------
|
|
6
|
+
# Index of commands:
|
|
7
|
+
# - MainFrame::create
|
|
8
|
+
# - MainFrame::configure
|
|
9
|
+
# - MainFrame::cget
|
|
10
|
+
# - MainFrame::getframe
|
|
11
|
+
# - MainFrame::addtoolbar
|
|
12
|
+
# - MainFrame::gettoolbar
|
|
13
|
+
# - MainFrame::addindicator
|
|
14
|
+
# - MainFrame::getindicator
|
|
15
|
+
# - MainFrame::getmenu
|
|
16
|
+
# - MainFrame::menuonly
|
|
17
|
+
# - MainFrame::showtoolbar
|
|
18
|
+
# - MainFrame::showstatusbar
|
|
19
|
+
# - MainFrame::_create_menubar
|
|
20
|
+
# - MainFrame::_create_entries
|
|
21
|
+
# - MainFrame::_parse_name
|
|
22
|
+
# - MainFrame::_parse_accelerator
|
|
23
|
+
# ----------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
namespace eval MainFrame {
|
|
26
|
+
Widget::define MainFrame mainframe ProgressBar
|
|
27
|
+
|
|
28
|
+
Widget::bwinclude MainFrame ProgressBar .status.prg \
|
|
29
|
+
remove {
|
|
30
|
+
-fg -bg -bd -troughcolor -background -borderwidth
|
|
31
|
+
-relief -orient -width -height
|
|
32
|
+
} \
|
|
33
|
+
rename {
|
|
34
|
+
-maximum -progressmax
|
|
35
|
+
-variable -progressvar
|
|
36
|
+
-type -progresstype
|
|
37
|
+
-foreground -progressfg
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Widget::declare MainFrame {
|
|
41
|
+
{-width TkResource 0 0 frame}
|
|
42
|
+
{-height TkResource 0 0 frame}
|
|
43
|
+
{-background TkResource "" 0 frame}
|
|
44
|
+
{-textvariable String "" 0}
|
|
45
|
+
{-menu String {} 1}
|
|
46
|
+
{-separator Enum both 1 {none top bottom both}}
|
|
47
|
+
{-bg Synonym -background}
|
|
48
|
+
|
|
49
|
+
{-menubarfont String "" 0}
|
|
50
|
+
{-menuentryfont String "" 0}
|
|
51
|
+
{-statusbarfont String "" 0}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
Widget::addmap MainFrame "" .frame {-width {} -height {} -background {}}
|
|
55
|
+
Widget::addmap MainFrame "" .topf {-background {}}
|
|
56
|
+
Widget::addmap MainFrame "" .botf {-background {}}
|
|
57
|
+
Widget::addmap MainFrame "" .status {-background {}}
|
|
58
|
+
Widget::addmap MainFrame "" .status.label {-background {}}
|
|
59
|
+
Widget::addmap MainFrame "" .status.indf {-background {}}
|
|
60
|
+
Widget::addmap MainFrame "" .status.prgf {-background {}}
|
|
61
|
+
Widget::addmap MainFrame ProgressBar .status.prg {-background {} -background -troughcolor}
|
|
62
|
+
|
|
63
|
+
variable _widget
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# ----------------------------------------------------------------------------
|
|
68
|
+
# Command MainFrame::create
|
|
69
|
+
# ----------------------------------------------------------------------------
|
|
70
|
+
proc MainFrame::create { path args } {
|
|
71
|
+
global tcl_platform
|
|
72
|
+
variable _widget
|
|
73
|
+
|
|
74
|
+
if {[Widget::theme]} {
|
|
75
|
+
set path [ttk::frame $path]
|
|
76
|
+
} else {
|
|
77
|
+
set path [frame $path -takefocus 0 -highlightthickness 0]
|
|
78
|
+
}
|
|
79
|
+
set top [winfo parent $path]
|
|
80
|
+
if { ![string equal [winfo toplevel $path] $top] } {
|
|
81
|
+
destroy $path
|
|
82
|
+
return -code error "parent must be a toplevel"
|
|
83
|
+
}
|
|
84
|
+
Widget::init MainFrame $path $args
|
|
85
|
+
|
|
86
|
+
if { $tcl_platform(platform) == "unix" } {
|
|
87
|
+
set relief raised
|
|
88
|
+
set bd 1
|
|
89
|
+
} else {
|
|
90
|
+
set relief flat
|
|
91
|
+
set bd 0
|
|
92
|
+
}
|
|
93
|
+
if {[Widget::theme]} {
|
|
94
|
+
set userframe [eval [list ttk::frame $path.frame] \
|
|
95
|
+
[Widget::subcget $path .frame]]
|
|
96
|
+
set topframe [ttk::frame $path.topf]
|
|
97
|
+
set botframe [ttk::frame $path.botf]
|
|
98
|
+
} else {
|
|
99
|
+
set userframe [eval [list frame $path.frame] \
|
|
100
|
+
[Widget::subcget $path .frame] \
|
|
101
|
+
-relief $relief -borderwidth $bd]
|
|
102
|
+
set topframe [eval [list frame $path.topf] \
|
|
103
|
+
[Widget::subcget $path .topf]]
|
|
104
|
+
set botframe [eval [list frame $path.botf] \
|
|
105
|
+
-relief $relief -borderwidth $bd \
|
|
106
|
+
[Widget::subcget $path .botf]]
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
pack $topframe -fill x
|
|
110
|
+
grid columnconfigure $topframe 0 -weight 1
|
|
111
|
+
|
|
112
|
+
if {![Widget::theme]} {
|
|
113
|
+
set bg [Widget::cget $path -background]
|
|
114
|
+
$path configure -background $bg
|
|
115
|
+
}
|
|
116
|
+
if { $tcl_platform(platform) != "unix" } {
|
|
117
|
+
set sepopt [Widget::getoption $path -separator]
|
|
118
|
+
if { $sepopt == "both" || $sepopt == "top" } {
|
|
119
|
+
if {[Widget::theme]} {
|
|
120
|
+
set sep [ttk::separator $path.sep -orient horizontal]
|
|
121
|
+
} else {
|
|
122
|
+
set sep [Separator::create $path.sep -orient horizontal -background $bg]
|
|
123
|
+
}
|
|
124
|
+
pack $sep -fill x
|
|
125
|
+
}
|
|
126
|
+
if { $sepopt == "both" || $sepopt == "bottom" } {
|
|
127
|
+
if {[Widget::theme]} {
|
|
128
|
+
set sep [ttk::separator $botframe.sep -orient horizontal]
|
|
129
|
+
} else {
|
|
130
|
+
set sep [Separator::create $botframe.sep -orient horizontal -background $bg]
|
|
131
|
+
}
|
|
132
|
+
pack $sep -fill x
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
# --- status bar ---------------------------------------------------------
|
|
137
|
+
if {[string length [Widget::getoption $path -statusbarfont]]} {
|
|
138
|
+
set sbfnt [list -font [Widget::getoption $path -statusbarfont]]
|
|
139
|
+
} else {
|
|
140
|
+
set sbfnt ""
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if {[Widget::theme]} {
|
|
144
|
+
set status [ttk::frame $path.status]
|
|
145
|
+
set label [eval [list ttk::label $status.label \
|
|
146
|
+
-textvariable [Widget::getoption $path -textvariable]] $sbfnt]
|
|
147
|
+
set indframe [ttk::frame $status.indf]
|
|
148
|
+
set prgframe [ttk::frame $status.prgf]
|
|
149
|
+
} else {
|
|
150
|
+
set status [frame $path.status -background $bg]
|
|
151
|
+
set label [eval [list label $status.label \
|
|
152
|
+
-textvariable [Widget::getoption $path -textvariable] \
|
|
153
|
+
-background $bg] $sbfnt]
|
|
154
|
+
set indframe [frame $status.indf -background $bg]
|
|
155
|
+
set prgframe [frame $status.prgf -background $bg]
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
place $label -anchor w -x 0 -rely 0.5
|
|
159
|
+
place $indframe -anchor ne -relx 1 -y 0 -relheight 1
|
|
160
|
+
pack $prgframe -in $indframe -side left -padx 2
|
|
161
|
+
$status configure -height [winfo reqheight $label]
|
|
162
|
+
|
|
163
|
+
set progress [eval [list ProgressBar::create $status.prg] \
|
|
164
|
+
[Widget::subcget $path .status.prg] \
|
|
165
|
+
-width 50 \
|
|
166
|
+
-height [expr {[winfo reqheight $label]-2}] \
|
|
167
|
+
-borderwidth 1 \
|
|
168
|
+
-relief sunken]
|
|
169
|
+
pack $status -in $botframe -fill x -pady 2
|
|
170
|
+
pack $botframe -side bottom -fill x
|
|
171
|
+
pack $userframe -fill both -expand yes
|
|
172
|
+
|
|
173
|
+
set _widget($path,top) $top
|
|
174
|
+
set _widget($path,ntoolbar) 0
|
|
175
|
+
set _widget($path,nindic) 0
|
|
176
|
+
|
|
177
|
+
set menu [Widget::getoption $path -menu]
|
|
178
|
+
if { [llength $menu] } {
|
|
179
|
+
_create_menubar $path $menu
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
bind $path <Destroy> [list MainFrame::_destroy %W]
|
|
183
|
+
|
|
184
|
+
return [Widget::create MainFrame $path]
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
# ----------------------------------------------------------------------------
|
|
189
|
+
# Command MainFrame::configure
|
|
190
|
+
# ----------------------------------------------------------------------------
|
|
191
|
+
proc MainFrame::configure { path args } {
|
|
192
|
+
variable _widget
|
|
193
|
+
|
|
194
|
+
set res [Widget::configure $path $args]
|
|
195
|
+
|
|
196
|
+
if { [Widget::hasChanged $path -textvariable newv] } {
|
|
197
|
+
uplevel \#0 $path.status.label configure -textvariable [list $newv]
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
# The ttk frame has no -background
|
|
201
|
+
if {![Widget::theme] && [Widget::hasChanged $path -background bg] } {
|
|
202
|
+
if {$::tcl_platform(platform) == "unix"} {
|
|
203
|
+
set listmenu [$_widget($path,top) cget -menu]
|
|
204
|
+
while { [llength $listmenu] } {
|
|
205
|
+
set newlist {}
|
|
206
|
+
foreach menu $listmenu {
|
|
207
|
+
$menu configure -background $bg
|
|
208
|
+
set newlist [concat $newlist [winfo children $menu]]
|
|
209
|
+
}
|
|
210
|
+
set listmenu $newlist
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
foreach sep {.sep .botf.sep} {
|
|
214
|
+
if {[winfo exists $path.$sep]} {
|
|
215
|
+
Separator::configure $path.$sep -background $bg
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
foreach w [winfo children $path.topf] {
|
|
219
|
+
$w configure -background $bg
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if { [Widget::hasChanged $path -menubarfont newmbfnt] } {
|
|
224
|
+
if {[string length $newmbfnt]} {
|
|
225
|
+
set mbfnt [list -font $newmbfnt]
|
|
226
|
+
} else {
|
|
227
|
+
set mbfnt ""
|
|
228
|
+
}
|
|
229
|
+
set top $_widget($path,top)
|
|
230
|
+
if {[string equal $top .]} {
|
|
231
|
+
eval [list .menubar configure] $mbfnt
|
|
232
|
+
} else {
|
|
233
|
+
eval [list $top.menubar configure] $mbfnt
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if { [Widget::hasChanged $path -menuentryfont newmefnt] } {
|
|
237
|
+
if {[string length $newmefnt]} {
|
|
238
|
+
set mefnt [list -font $newmefnt]
|
|
239
|
+
} else {
|
|
240
|
+
set mefnt ""
|
|
241
|
+
}
|
|
242
|
+
set top $_widget($path,top)
|
|
243
|
+
if {[string equal $top .]} {
|
|
244
|
+
set mb .menubar
|
|
245
|
+
} else {
|
|
246
|
+
set mb $top.menubar
|
|
247
|
+
}
|
|
248
|
+
set l [winfo children $mb]
|
|
249
|
+
while {[llength $l]} {
|
|
250
|
+
set e [lindex $l 0]
|
|
251
|
+
set l [lrange $l 1 end]
|
|
252
|
+
if {[string length $e] == 0} {continue}
|
|
253
|
+
lappend l [winfo children $e]
|
|
254
|
+
eval [list $e configure] $mefnt
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
if { [Widget::hasChanged $path -statusbarfont newsbfnt] } {
|
|
260
|
+
if {[string length $newsbfnt]} {
|
|
261
|
+
set sbfnt [list -font $newsbfnt]
|
|
262
|
+
} else {
|
|
263
|
+
set sbfnt ""
|
|
264
|
+
}
|
|
265
|
+
for {set index 0} {$index<$_widget($path,nindic)} {incr index} {
|
|
266
|
+
set indic $path.status.indf.f$index
|
|
267
|
+
eval [list $indic configure] $sbfnt
|
|
268
|
+
}
|
|
269
|
+
eval [list $path.status.label configure] $sbfnt
|
|
270
|
+
$path.status configure -height [winfo reqheight $path.status.label]
|
|
271
|
+
|
|
272
|
+
$path.status.prg configure \
|
|
273
|
+
-height [expr {[winfo reqheight $path.status.label]-2}]
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return $res
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
# ----------------------------------------------------------------------------
|
|
281
|
+
# Command MainFrame::cget
|
|
282
|
+
# ----------------------------------------------------------------------------
|
|
283
|
+
proc MainFrame::cget { path option } {
|
|
284
|
+
return [Widget::cget $path $option]
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
# ----------------------------------------------------------------------------
|
|
289
|
+
# Command MainFrame::getframe
|
|
290
|
+
# ----------------------------------------------------------------------------
|
|
291
|
+
proc MainFrame::getframe { path } {
|
|
292
|
+
return $path.frame
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
# ----------------------------------------------------------------------------
|
|
297
|
+
# Command MainFrame::addtoolbar
|
|
298
|
+
# ----------------------------------------------------------------------------
|
|
299
|
+
proc MainFrame::addtoolbar { path } {
|
|
300
|
+
global tcl_platform
|
|
301
|
+
variable _widget
|
|
302
|
+
|
|
303
|
+
set index $_widget($path,ntoolbar)
|
|
304
|
+
set toolframe $path.topf.f$index
|
|
305
|
+
set toolbar $path.topf.tb$index
|
|
306
|
+
set bg [Widget::getoption $path -background]
|
|
307
|
+
if { $tcl_platform(platform) == "unix" } {
|
|
308
|
+
if {[Widget::theme]} {
|
|
309
|
+
ttk::frame $toolframe -padding 1
|
|
310
|
+
} else {
|
|
311
|
+
frame $toolframe -relief raised -borderwidth 1 \
|
|
312
|
+
-takefocus 0 -highlightthickness 0 -background $bg
|
|
313
|
+
}
|
|
314
|
+
} else {
|
|
315
|
+
if {[Widget::theme]} {
|
|
316
|
+
ttk::frame $toolframe
|
|
317
|
+
set sep [ttk::separator $toolframe.sep -orient horizontal]
|
|
318
|
+
} else {
|
|
319
|
+
frame $toolframe -relief flat -borderwidth 0 -takefocus 0 \
|
|
320
|
+
-highlightthickness 0 -background $bg
|
|
321
|
+
set sep [Separator::create $toolframe.sep -orient horizontal -background $bg]
|
|
322
|
+
}
|
|
323
|
+
pack $sep -fill x
|
|
324
|
+
}
|
|
325
|
+
if {[Widget::theme]} {
|
|
326
|
+
set toolbar [ttk::frame $toolbar -padding 2]
|
|
327
|
+
} else {
|
|
328
|
+
set toolbar [frame $toolbar -relief flat -borderwidth 2 \
|
|
329
|
+
-takefocus 0 -highlightthickness 0 -background $bg]
|
|
330
|
+
}
|
|
331
|
+
pack $toolbar -in $toolframe -anchor w -expand yes -fill x
|
|
332
|
+
incr _widget($path,ntoolbar)
|
|
333
|
+
grid $toolframe -column 0 -row $index -sticky ew
|
|
334
|
+
return $toolbar
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
# ----------------------------------------------------------------------------
|
|
339
|
+
# Command MainFrame::gettoolbar
|
|
340
|
+
# ----------------------------------------------------------------------------
|
|
341
|
+
proc MainFrame::gettoolbar { path index } {
|
|
342
|
+
return $path.topf.tb$index
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
# ----------------------------------------------------------------------------
|
|
347
|
+
# Command MainFrame::addindicator
|
|
348
|
+
# ----------------------------------------------------------------------------
|
|
349
|
+
proc MainFrame::addindicator { path args } {
|
|
350
|
+
variable _widget
|
|
351
|
+
|
|
352
|
+
if {[string length [Widget::getoption $path -statusbarfont]]} {
|
|
353
|
+
set sbfnt [list -font [Widget::getoption $path -statusbarfont]]
|
|
354
|
+
} else {
|
|
355
|
+
set sbfnt ""
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
set index $_widget($path,nindic)
|
|
359
|
+
set indic $path.status.indf.f$index
|
|
360
|
+
eval [list label $indic] $args -relief sunken -borderwidth 1 \
|
|
361
|
+
-takefocus 0 -highlightthickness 0 $sbfnt
|
|
362
|
+
|
|
363
|
+
pack $indic -side left -anchor w -padx 2 -fill y -expand 1
|
|
364
|
+
|
|
365
|
+
incr _widget($path,nindic)
|
|
366
|
+
|
|
367
|
+
return $indic
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
# ----------------------------------------------------------------------------
|
|
372
|
+
# Command MainFrame::getindicator
|
|
373
|
+
# ----------------------------------------------------------------------------
|
|
374
|
+
proc MainFrame::getindicator { path index } {
|
|
375
|
+
return $path.status.indf.f$index
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
# ----------------------------------------------------------------------------
|
|
380
|
+
# Command MainFrame::getmenu
|
|
381
|
+
# ----------------------------------------------------------------------------
|
|
382
|
+
proc MainFrame::getmenu { path menuid } {
|
|
383
|
+
variable _widget
|
|
384
|
+
|
|
385
|
+
if { [info exists _widget($path,menuid,$menuid)] } {
|
|
386
|
+
return $_widget($path,menuid,$menuid)
|
|
387
|
+
}
|
|
388
|
+
return ""
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
# -----------------------------------------------------------------------------
|
|
393
|
+
# Command MainFrame::setmenustate
|
|
394
|
+
# -----------------------------------------------------------------------------
|
|
395
|
+
proc MainFrame::setmenustate { path tag state } {
|
|
396
|
+
variable _widget
|
|
397
|
+
|
|
398
|
+
# if { [info exists _widget($path,tags,$tag)] } {
|
|
399
|
+
# foreach {menu entry} $_widget($path,tags,$tag) {
|
|
400
|
+
# $menu entryconfigure $entry -state $state
|
|
401
|
+
# }
|
|
402
|
+
# }
|
|
403
|
+
|
|
404
|
+
# We need a more sophisticated state system.
|
|
405
|
+
# The original model was this: each menu item has a list of tags;
|
|
406
|
+
# whenever any one of those tags changed state, the menu item did too.
|
|
407
|
+
# This makes it hard to have items that are enabled only when both tagA and
|
|
408
|
+
# tagB are. The new model therefore only sets the menustate to enabled
|
|
409
|
+
# when ALL of its tags are enabled.
|
|
410
|
+
|
|
411
|
+
# First see if this is a real tag
|
|
412
|
+
if { [info exists _widget($path,tagstate,$tag)] } {
|
|
413
|
+
if { ![string equal $state "disabled"] } {
|
|
414
|
+
set _widget($path,tagstate,$tag) 1
|
|
415
|
+
} else {
|
|
416
|
+
set _widget($path,tagstate,$tag) 0
|
|
417
|
+
}
|
|
418
|
+
foreach {menu entry} $_widget($path,tags,$tag) {
|
|
419
|
+
set expression "1"
|
|
420
|
+
foreach menutag $_widget($path,menutags,[list $menu $entry]) {
|
|
421
|
+
append expression " && $_widget($path,tagstate,$menutag)"
|
|
422
|
+
}
|
|
423
|
+
if { [expr $expression] } {
|
|
424
|
+
set state normal
|
|
425
|
+
} else {
|
|
426
|
+
set state disabled
|
|
427
|
+
}
|
|
428
|
+
$menu entryconfigure $entry -state $state
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
# -----------------------------------------------------------------------------
|
|
436
|
+
# Command MainFrame::menuonly
|
|
437
|
+
# ----------------------d------------------------------------------------------
|
|
438
|
+
proc MainFrame::menuonly { path } {
|
|
439
|
+
variable _widget
|
|
440
|
+
|
|
441
|
+
catch {pack forget $path.sep}
|
|
442
|
+
catch {pack forget $path.botf.sep}
|
|
443
|
+
catch {pack forget $path.frame}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
# ----------------------------------------------------------------------------
|
|
447
|
+
# Command MainFrame::showtoolbar
|
|
448
|
+
# ----------------------------------------------------------------------------
|
|
449
|
+
proc MainFrame::showtoolbar { path index bool } {
|
|
450
|
+
variable _widget
|
|
451
|
+
|
|
452
|
+
set toolframe $path.topf.f$index
|
|
453
|
+
if { [winfo exists $toolframe] } {
|
|
454
|
+
if { !$bool && [llength [grid info $toolframe]] } {
|
|
455
|
+
grid forget $toolframe
|
|
456
|
+
$path.topf configure -height 1
|
|
457
|
+
} elseif { $bool && ![llength [grid info $toolframe]] } {
|
|
458
|
+
grid $toolframe -column 0 -row $index -sticky ew
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
# ----------------------------------------------------------------------------
|
|
465
|
+
# Command MainFrame::showstatusbar
|
|
466
|
+
# ----------------------------------------------------------------------------
|
|
467
|
+
proc MainFrame::showstatusbar { path name } {
|
|
468
|
+
set status $path.status
|
|
469
|
+
set botframe $path.botf
|
|
470
|
+
if { [string equal $name "none"] } {
|
|
471
|
+
pack forget $status
|
|
472
|
+
} else {
|
|
473
|
+
pack $status -fill x -in $botframe -fill x -pady 2
|
|
474
|
+
switch -- $name {
|
|
475
|
+
status {
|
|
476
|
+
catch {pack forget $status.prg}
|
|
477
|
+
}
|
|
478
|
+
progression {
|
|
479
|
+
pack $status.prg -in $status.prgf
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
# ----------------------------------------------------------------------------
|
|
487
|
+
# Command MainFrame::_destroy
|
|
488
|
+
# ----------------------------------------------------------------------------
|
|
489
|
+
proc MainFrame::_destroy { path } {
|
|
490
|
+
variable _widget
|
|
491
|
+
|
|
492
|
+
Widget::destroy $path
|
|
493
|
+
catch {destroy [$_widget($path,top) cget -menu]}
|
|
494
|
+
$_widget($path,top) configure -menu {}
|
|
495
|
+
|
|
496
|
+
# Unset all of the state vars associated with this main frame.
|
|
497
|
+
foreach index [array names _widget $path,*] {
|
|
498
|
+
unset _widget($index)
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
# ----------------------------------------------------------------------------
|
|
504
|
+
# Command MainFrame::_create_menubar
|
|
505
|
+
# ----------------------------------------------------------------------------
|
|
506
|
+
proc MainFrame::_create_menubar { path descmenu } {
|
|
507
|
+
variable _widget
|
|
508
|
+
global tcl_platform
|
|
509
|
+
|
|
510
|
+
set top $_widget($path,top)
|
|
511
|
+
|
|
512
|
+
foreach {v x} {mbfnt -menubarfont mefnt -menuentryfont} {
|
|
513
|
+
if {[string length [Widget::getoption $path $x]]} {
|
|
514
|
+
set $v [list -font [Widget::getoption $path $x]]
|
|
515
|
+
} else {
|
|
516
|
+
set $v ""
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
if {![Widget::theme] && $tcl_platform(platform) == "unix"} {
|
|
521
|
+
set menuopts [list -background [Widget::getoption $path -background] \
|
|
522
|
+
-borderwidth 1]
|
|
523
|
+
} else {
|
|
524
|
+
set menuopts [list]
|
|
525
|
+
}
|
|
526
|
+
set menubar [eval [list menu $top.menubar -tearoff 0] $menuopts $mbfnt]
|
|
527
|
+
$top configure -menu $menubar
|
|
528
|
+
|
|
529
|
+
set count 0
|
|
530
|
+
foreach {name tags menuid tearoff entries} $descmenu {
|
|
531
|
+
set opt [_parse_name $name]
|
|
532
|
+
if {[string length $menuid]
|
|
533
|
+
&& ![info exists _widget($path,menuid,$menuid)] } {
|
|
534
|
+
# menu has identifier
|
|
535
|
+
# we use it for its pathname, to enable special menu entries
|
|
536
|
+
# (help, system, ...)
|
|
537
|
+
set menu $menubar.$menuid
|
|
538
|
+
} else {
|
|
539
|
+
set menu $menubar.menu$count
|
|
540
|
+
}
|
|
541
|
+
eval [list $menubar add cascade] $opt [list -menu $menu]
|
|
542
|
+
eval [list menu $menu -tearoff $tearoff] $menuopts $mefnt
|
|
543
|
+
foreach tag $tags {
|
|
544
|
+
lappend _widget($path,tags,$tag) $menubar $count
|
|
545
|
+
# ericm@scriptics: Add a tagstate tracker
|
|
546
|
+
if { ![info exists _widget($path,tagstate,$tag)] } {
|
|
547
|
+
set _widget($path,tagstate,$tag) 1
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
# ericm@scriptics: Add mapping from menu items to tags
|
|
551
|
+
set _widget($path,menutags,[list $menubar $count]) $tags
|
|
552
|
+
|
|
553
|
+
if { [string length $menuid] } {
|
|
554
|
+
# menu has identifier
|
|
555
|
+
set _widget($path,menuid,$menuid) $menu
|
|
556
|
+
}
|
|
557
|
+
_create_entries $path $menu $menuopts $entries
|
|
558
|
+
incr count
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
# ----------------------------------------------------------------------------
|
|
564
|
+
# Command MainFrame::_create_entries
|
|
565
|
+
# ----------------------------------------------------------------------------
|
|
566
|
+
proc MainFrame::_create_entries { path menu menuopts entries } {
|
|
567
|
+
variable _widget
|
|
568
|
+
|
|
569
|
+
set count [$menu cget -tearoff]
|
|
570
|
+
set registered 0
|
|
571
|
+
foreach entry $entries {
|
|
572
|
+
set len [llength $entry]
|
|
573
|
+
set type [lindex $entry 0]
|
|
574
|
+
|
|
575
|
+
if { [string equal $type "separator"] } {
|
|
576
|
+
$menu add separator
|
|
577
|
+
incr count
|
|
578
|
+
continue
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
# entry name and tags
|
|
582
|
+
set opt [_parse_name [lindex $entry 1]]
|
|
583
|
+
set tags [lindex $entry 2]
|
|
584
|
+
foreach tag $tags {
|
|
585
|
+
lappend _widget($path,tags,$tag) $menu $count
|
|
586
|
+
# ericm@scriptics: Add a tagstate tracker
|
|
587
|
+
if { ![info exists _widget($path,tagstate,$tag)] } {
|
|
588
|
+
set _widget($path,tagstate,$tag) 1
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
# ericm@scriptics: Add mapping from menu items to tags
|
|
592
|
+
set _widget($path,menutags,[list $menu $count]) $tags
|
|
593
|
+
|
|
594
|
+
if {[string equal $type "cascade"] || [string equal $type "cascad"]} {
|
|
595
|
+
set menuid [lindex $entry 3]
|
|
596
|
+
set tearoff [lindex $entry 4]
|
|
597
|
+
set submenu $menu.menu$count
|
|
598
|
+
eval [list $menu add cascade] $opt [list -menu $submenu]
|
|
599
|
+
eval [list menu $submenu -tearoff $tearoff] $menuopts
|
|
600
|
+
if { [string length $menuid] } {
|
|
601
|
+
# menu has identifier
|
|
602
|
+
set _widget($path,menuid,$menuid) $submenu
|
|
603
|
+
}
|
|
604
|
+
_create_entries $path $submenu $menuopts [lindex $entry 5]
|
|
605
|
+
incr count
|
|
606
|
+
continue
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
# entry help description
|
|
610
|
+
set desc [lindex $entry 3]
|
|
611
|
+
if { [string length $desc] } {
|
|
612
|
+
if { !$registered } {
|
|
613
|
+
DynamicHelp::register $menu menu [Widget::getoption $path -textvariable]
|
|
614
|
+
set registered 1
|
|
615
|
+
}
|
|
616
|
+
DynamicHelp::register $menu menuentry $count $desc
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
# entry accelerator
|
|
620
|
+
set accel [_parse_accelerator [lindex $entry 4]]
|
|
621
|
+
if { [llength $accel] } {
|
|
622
|
+
lappend opt -accelerator [lindex $accel 0]
|
|
623
|
+
bind $_widget($path,top) [lindex $accel 1] [list $menu invoke $count]
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
# user options
|
|
627
|
+
set useropt [lrange $entry 5 end]
|
|
628
|
+
if { [string equal $type "command"] ||
|
|
629
|
+
[string equal $type "radiobutton"] ||
|
|
630
|
+
[string equal $type "checkbutton"] } {
|
|
631
|
+
eval [list $menu add $type] $opt $useropt
|
|
632
|
+
} else {
|
|
633
|
+
return -code error "invalid menu type \"$type\""
|
|
634
|
+
}
|
|
635
|
+
incr count
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
# ----------------------------------------------------------------------------
|
|
641
|
+
# Command MainFrame::_parse_name
|
|
642
|
+
# ----------------------------------------------------------------------------
|
|
643
|
+
proc MainFrame::_parse_name { menuname } {
|
|
644
|
+
set idx [string first "&" $menuname]
|
|
645
|
+
if { $idx == -1 } {
|
|
646
|
+
return [list -label $menuname]
|
|
647
|
+
} else {
|
|
648
|
+
set beg [string range $menuname 0 [expr {$idx-1}]]
|
|
649
|
+
set end [string range $menuname [expr {$idx+1}] end]
|
|
650
|
+
append beg $end
|
|
651
|
+
return [list -label $beg -underline $idx]
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
# MainFrame::_parse_accelerator --
|
|
657
|
+
#
|
|
658
|
+
# Given a key combo description, construct an appropriate human readable
|
|
659
|
+
# string (for display on as a menu accelerator) and the corresponding
|
|
660
|
+
# bind event.
|
|
661
|
+
#
|
|
662
|
+
# Arguments:
|
|
663
|
+
# desc a list with the following format:
|
|
664
|
+
# ?sequence? key
|
|
665
|
+
# sequence may be None, Ctrl, Alt, or CtrlAlt
|
|
666
|
+
# key may be any key
|
|
667
|
+
#
|
|
668
|
+
# Results:
|
|
669
|
+
# {accel event} a list containing the accelerator string and the event
|
|
670
|
+
|
|
671
|
+
proc MainFrame::_parse_accelerator { desc } {
|
|
672
|
+
if { [llength $desc] == 1 } {
|
|
673
|
+
set seq None
|
|
674
|
+
set key [string tolower [lindex $desc 0]]
|
|
675
|
+
# If the key is an F key (ie, F1, F2, etc), it has to be capitalized
|
|
676
|
+
if {[regexp {^f([1-9]|([12][0-9]|3[0-5]))$} $key]} {
|
|
677
|
+
set key [string toupper $key]
|
|
678
|
+
}
|
|
679
|
+
} elseif { [llength $desc] == 2 } {
|
|
680
|
+
set seq [lindex $desc 0]
|
|
681
|
+
set key [string tolower [lindex $desc 1]]
|
|
682
|
+
# If the key is an F key (ie, F1, F2, etc), it has to be capitalized
|
|
683
|
+
if {[regexp {^f([1-9]|([12][0-9]|3[0-5]))$} $key]} {
|
|
684
|
+
set key [string toupper $key]
|
|
685
|
+
}
|
|
686
|
+
} else {
|
|
687
|
+
return {}
|
|
688
|
+
}
|
|
689
|
+
switch -- $seq {
|
|
690
|
+
None {
|
|
691
|
+
set accel "[string toupper $key]"
|
|
692
|
+
set event "<Key-$key>"
|
|
693
|
+
}
|
|
694
|
+
Ctrl {
|
|
695
|
+
set accel "Ctrl+[string toupper $key]"
|
|
696
|
+
set event "<Control-Key-$key>"
|
|
697
|
+
}
|
|
698
|
+
Alt {
|
|
699
|
+
set accel "Alt+[string toupper $key]"
|
|
700
|
+
set event "<Alt-Key-$key>"
|
|
701
|
+
}
|
|
702
|
+
CtrlAlt {
|
|
703
|
+
set accel "Ctrl+Alt+[string toupper $key]"
|
|
704
|
+
set event "<Control-Alt-Key-$key>"
|
|
705
|
+
}
|
|
706
|
+
default {
|
|
707
|
+
return -code error "invalid accelerator code $seq"
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
return [list $accel $event]
|
|
711
|
+
}
|