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.
Files changed (167) hide show
  1. data/README +126 -123
  2. data/arcadia.rb +770 -756
  3. data/base/a-contracts.rb +130 -93
  4. data/base/a-ext.rb +280 -280
  5. data/base/a-libs.rb +5 -11
  6. data/base/a-utils.rb +235 -44
  7. data/conf/arcadia.conf +20 -16
  8. data/conf/arcadia.init.rb +0 -0
  9. data/conf/arcadia.res.rb +74 -0
  10. data/ext/ae-complete-code/ae-complete-code.conf +0 -0
  11. data/ext/ae-complete-code/ae-complete-code.rb +80 -79
  12. data/ext/ae-debug/ae-debug.conf +0 -0
  13. data/ext/ae-debug/ae-debug.rb +2 -6
  14. data/ext/ae-debug/debug1.57.rb +0 -0
  15. data/ext/ae-doc-code/ae-doc-code.conf +15 -0
  16. data/ext/ae-doc-code/ae-doc-code.rb +289 -0
  17. data/ext/ae-editor/ae-editor.conf +17 -8
  18. data/ext/ae-editor/ae-editor.rb +738 -396
  19. data/ext/ae-event-log/ae-event-log.conf +0 -0
  20. data/ext/ae-event-log/ae-event-log.rb +0 -0
  21. data/ext/ae-file-history/ae-file-history.conf +2 -2
  22. data/ext/ae-file-history/ae-file-history.rb +286 -290
  23. data/ext/ae-inspector/ae-inspector.conf +0 -0
  24. data/ext/ae-inspector/ae-inspector.rb +0 -0
  25. data/ext/ae-output-event/ae-output-event.conf +2 -2
  26. data/ext/ae-output/ae-output.conf +2 -2
  27. data/ext/ae-output/ae-output.rb +173 -178
  28. data/ext/ae-palette/ae-palette.conf +0 -0
  29. data/ext/ae-palette/ae-palette.rb +0 -0
  30. data/ext/ae-shell/ae-shell.conf +0 -0
  31. data/ext/ae-shell/ae-shell.rb +54 -54
  32. data/lib/tk/al-tk.rb +3076 -3082
  33. data/lib/tk/al-tk.res.rb +0 -0
  34. data/lib/tk/al-tkarcadia.rb +0 -0
  35. data/lib/tk/al-tkcustom.rb +0 -0
  36. data/lib/tkext/al-bwidget.rb +0 -0
  37. data/lib/tkext/al-iwidgets.rb +0 -0
  38. data/lib/tkext/al-tile.rb +0 -0
  39. data/lib/tkext/al-tktable.rb +0 -0
  40. data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +276 -0
  41. data/tcl/BWidget-1.8.0/BWman/BWidget.html +228 -0
  42. data/tcl/BWidget-1.8.0/BWman/Button.html +273 -0
  43. data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +264 -0
  44. data/tcl/BWidget-1.8.0/BWman/ComboBox.html +402 -0
  45. data/tcl/BWidget-1.8.0/BWman/Dialog.html +314 -0
  46. data/tcl/BWidget-1.8.0/BWman/DragSite.html +139 -0
  47. data/tcl/BWidget-1.8.0/BWman/DropSite.html +254 -0
  48. data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +248 -0
  49. data/tcl/BWidget-1.8.0/BWman/Entry.html +341 -0
  50. data/tcl/BWidget-1.8.0/BWman/Label.html +331 -0
  51. data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +194 -0
  52. data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +144 -0
  53. data/tcl/BWidget-1.8.0/BWman/ListBox.html +678 -0
  54. data/tcl/BWidget-1.8.0/BWman/MainFrame.html +283 -0
  55. data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +218 -0
  56. data/tcl/BWidget-1.8.0/BWman/NoteBook.html +374 -0
  57. data/tcl/BWidget-1.8.0/BWman/PagesManager.html +180 -0
  58. data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +142 -0
  59. data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +153 -0
  60. data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +214 -0
  61. data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +152 -0
  62. data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +145 -0
  63. data/tcl/BWidget-1.8.0/BWman/ScrollView.html +130 -0
  64. data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +191 -0
  65. data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +116 -0
  66. data/tcl/BWidget-1.8.0/BWman/SelectColor.html +164 -0
  67. data/tcl/BWidget-1.8.0/BWman/SelectFont.html +152 -0
  68. data/tcl/BWidget-1.8.0/BWman/Separator.html +77 -0
  69. data/tcl/BWidget-1.8.0/BWman/SpinBox.html +250 -0
  70. data/tcl/BWidget-1.8.0/BWman/StatusBar.html +147 -0
  71. data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +107 -0
  72. data/tcl/BWidget-1.8.0/BWman/Tree.html +947 -0
  73. data/tcl/BWidget-1.8.0/BWman/Widget.html +502 -0
  74. data/tcl/BWidget-1.8.0/BWman/contents.html +84 -0
  75. data/tcl/BWidget-1.8.0/BWman/index.html +7 -0
  76. data/tcl/BWidget-1.8.0/BWman/navtree.html +41 -0
  77. data/tcl/BWidget-1.8.0/BWman/options.htm +458 -0
  78. data/tcl/BWidget-1.8.0/CHANGES.txt +266 -0
  79. data/tcl/BWidget-1.8.0/ChangeLog +1641 -0
  80. data/tcl/BWidget-1.8.0/LICENSE.txt +41 -0
  81. data/tcl/BWidget-1.8.0/README.txt +127 -0
  82. data/tcl/BWidget-1.8.0/arrow.tcl +551 -0
  83. data/tcl/BWidget-1.8.0/bitmap.tcl +94 -0
  84. data/tcl/BWidget-1.8.0/button.tcl +324 -0
  85. data/tcl/BWidget-1.8.0/buttonbox.tcl +403 -0
  86. data/tcl/BWidget-1.8.0/color.tcl +493 -0
  87. data/tcl/BWidget-1.8.0/combobox.tcl +809 -0
  88. data/tcl/BWidget-1.8.0/demo/basic.tcl +199 -0
  89. data/tcl/BWidget-1.8.0/demo/bwidget.xbm +46 -0
  90. data/tcl/BWidget-1.8.0/demo/demo.tcl +212 -0
  91. data/tcl/BWidget-1.8.0/demo/dnd.tcl +42 -0
  92. data/tcl/BWidget-1.8.0/demo/manager.tcl +141 -0
  93. data/tcl/BWidget-1.8.0/demo/select.tcl +59 -0
  94. data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +214 -0
  95. data/tcl/BWidget-1.8.0/demo/tree.tcl +260 -0
  96. data/tcl/BWidget-1.8.0/demo/x1.xbm +2258 -0
  97. data/tcl/BWidget-1.8.0/dialog.tcl +345 -0
  98. data/tcl/BWidget-1.8.0/dragsite.tcl +197 -0
  99. data/tcl/BWidget-1.8.0/dropsite.tcl +455 -0
  100. data/tcl/BWidget-1.8.0/dynhelp.tcl +625 -0
  101. data/tcl/BWidget-1.8.0/entry.tcl +469 -0
  102. data/tcl/BWidget-1.8.0/font.tcl +566 -0
  103. data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
  104. data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
  105. data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
  106. data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
  107. data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
  108. data/tcl/BWidget-1.8.0/images/error.gif +0 -0
  109. data/tcl/BWidget-1.8.0/images/file.gif +0 -0
  110. data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
  111. data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
  112. data/tcl/BWidget-1.8.0/images/info.gif +0 -0
  113. data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
  114. data/tcl/BWidget-1.8.0/images/minus.xbm +5 -0
  115. data/tcl/BWidget-1.8.0/images/new.gif +0 -0
  116. data/tcl/BWidget-1.8.0/images/opcopy.xbm +5 -0
  117. data/tcl/BWidget-1.8.0/images/open.gif +0 -0
  118. data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
  119. data/tcl/BWidget-1.8.0/images/oplink.xbm +5 -0
  120. data/tcl/BWidget-1.8.0/images/opmove.xbm +5 -0
  121. data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
  122. data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
  123. data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
  124. data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
  125. data/tcl/BWidget-1.8.0/images/plus.xbm +5 -0
  126. data/tcl/BWidget-1.8.0/images/print.gif +0 -0
  127. data/tcl/BWidget-1.8.0/images/question.gif +0 -0
  128. data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
  129. data/tcl/BWidget-1.8.0/images/save.gif +0 -0
  130. data/tcl/BWidget-1.8.0/images/target.xbm +9 -0
  131. data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
  132. data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
  133. data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
  134. data/tcl/BWidget-1.8.0/init.tcl +40 -0
  135. data/tcl/BWidget-1.8.0/label.tcl +271 -0
  136. data/tcl/BWidget-1.8.0/labelentry.tcl +100 -0
  137. data/tcl/BWidget-1.8.0/labelframe.tcl +160 -0
  138. data/tcl/BWidget-1.8.0/lang/da.rc +52 -0
  139. data/tcl/BWidget-1.8.0/lang/de.rc +52 -0
  140. data/tcl/BWidget-1.8.0/lang/en.rc +52 -0
  141. data/tcl/BWidget-1.8.0/lang/es.rc +53 -0
  142. data/tcl/BWidget-1.8.0/lang/fr.rc +52 -0
  143. data/tcl/BWidget-1.8.0/listbox.tcl +1638 -0
  144. data/tcl/BWidget-1.8.0/mainframe.tcl +711 -0
  145. data/tcl/BWidget-1.8.0/messagedlg.tcl +128 -0
  146. data/tcl/BWidget-1.8.0/notebook.tcl +1164 -0
  147. data/tcl/BWidget-1.8.0/pagesmgr.tcl +294 -0
  148. data/tcl/BWidget-1.8.0/panedw.tcl +381 -0
  149. data/tcl/BWidget-1.8.0/panelframe.tcl +246 -0
  150. data/tcl/BWidget-1.8.0/passwddlg.tcl +178 -0
  151. data/tcl/BWidget-1.8.0/pkgIndex.tcl +47 -0
  152. data/tcl/BWidget-1.8.0/progressbar.tcl +208 -0
  153. data/tcl/BWidget-1.8.0/progressdlg.tcl +87 -0
  154. data/tcl/BWidget-1.8.0/scrollframe.tcl +226 -0
  155. data/tcl/BWidget-1.8.0/scrollview.tcl +254 -0
  156. data/tcl/BWidget-1.8.0/scrollw.tcl +280 -0
  157. data/tcl/BWidget-1.8.0/separator.tcl +75 -0
  158. data/tcl/BWidget-1.8.0/spinbox.tcl +331 -0
  159. data/tcl/BWidget-1.8.0/statusbar.tcl +422 -0
  160. data/tcl/BWidget-1.8.0/tests/entry.test +173 -0
  161. data/tcl/BWidget-1.8.0/titleframe.tcl +170 -0
  162. data/tcl/BWidget-1.8.0/tree.tcl +2228 -0
  163. data/tcl/BWidget-1.8.0/utils.tcl +645 -0
  164. data/tcl/BWidget-1.8.0/widget.tcl +1576 -0
  165. data/tcl/BWidget-1.8.0/wizard.tcl +1028 -0
  166. data/tcl/BWidget-1.8.0/xpm2image.tcl +115 -0
  167. metadata +141 -5
@@ -0,0 +1,160 @@
1
+ # ------------------------------------------------------------------------------
2
+ # labelframe.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: labelframe.tcl,v 1.6 2003/10/20 21:23:52 damonc Exp $
5
+ # ------------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - LabelFrame::create
8
+ # - LabelFrame::getframe
9
+ # - LabelFrame::configure
10
+ # - LabelFrame::cget
11
+ # - LabelFrame::align
12
+ # ------------------------------------------------------------------------------
13
+
14
+ namespace eval LabelFrame {
15
+ Widget::define LabelFrame labelframe Label
16
+
17
+ Widget::bwinclude LabelFrame Label .l \
18
+ remove {
19
+ -highlightthickness -highlightcolor -highlightbackground
20
+ -takefocus -relief -borderwidth
21
+ -cursor
22
+ -dragenabled -draginitcmd -dragendcmd -dragevent -dragtype
23
+ -dropenabled -droptypes -dropovercmd -dropcmd} \
24
+ initialize {-anchor w}
25
+
26
+ Widget::declare LabelFrame {
27
+ {-relief TkResource flat 0 frame}
28
+ {-borderwidth TkResource 0 0 frame}
29
+ {-side Enum left 1 {left right top bottom}}
30
+ {-bd Synonym -borderwidth}
31
+ }
32
+
33
+ Widget::addmap LabelFrame "" :cmd {-background {}}
34
+ Widget::addmap LabelFrame "" .f {-background {} -relief {} -borderwidth {}}
35
+
36
+ Widget::syncoptions LabelFrame Label .l {-text {} -underline {}}
37
+
38
+ bind BwLabelFrame <FocusIn> [list Label::setfocus %W.l]
39
+ bind BwLabelFrame <Destroy> [list LabelFrame::_destroy %W]
40
+ }
41
+
42
+
43
+ # ----------------------------------------------------------------------------
44
+ # Command LabelFrame::create
45
+ # ----------------------------------------------------------------------------
46
+ proc LabelFrame::create { path args } {
47
+ Widget::init LabelFrame $path $args
48
+
49
+ set path [eval [list frame $path] [Widget::subcget $path :cmd] \
50
+ -relief flat -bd 0 -takefocus 0 -highlightthickness 0 \
51
+ -class LabelFrame]
52
+
53
+ set label [eval [list Label::create $path.l] [Widget::subcget $path .l] \
54
+ -takefocus 0 -highlightthickness 0 -relief flat \
55
+ -borderwidth 0 -dropenabled 0 -dragenabled 0]
56
+ set frame [eval [list frame $path.f] [Widget::subcget $path .f] \
57
+ -highlightthickness 0 -takefocus 0]
58
+
59
+ switch [Widget::getoption $path -side] {
60
+ left {set packopt "-side left"}
61
+ right {set packopt "-side right"}
62
+ top {set packopt "-side top -fill x"}
63
+ bottom {set packopt "-side bottom -fill x"}
64
+ }
65
+
66
+ eval [list pack $label] $packopt
67
+ pack $frame -fill both -expand yes
68
+
69
+ bindtags $path [list $path BwLabelFrame [winfo toplevel $path] all]
70
+
71
+ return [Widget::create LabelFrame $path]
72
+ }
73
+
74
+
75
+ # ----------------------------------------------------------------------------
76
+ # Command LabelFrame::getframe
77
+ # ----------------------------------------------------------------------------
78
+ proc LabelFrame::getframe { path } {
79
+ return $path.f
80
+ }
81
+
82
+
83
+ # ----------------------------------------------------------------------------
84
+ # Command LabelFrame::configure
85
+ # ----------------------------------------------------------------------------
86
+ proc LabelFrame::configure { path args } {
87
+ return [Widget::configure $path $args]
88
+ }
89
+
90
+
91
+ # ----------------------------------------------------------------------------
92
+ # Command LabelFrame::cget
93
+ # ----------------------------------------------------------------------------
94
+ proc LabelFrame::cget { path option } {
95
+ return [Widget::cget $path $option]
96
+ }
97
+
98
+
99
+ # ----------------------------------------------------------------------------
100
+ # Command LabelFrame::align
101
+ # This command align label of all widget given by args of class LabelFrame
102
+ # (or "derived") by setting their width to the max one +1
103
+ # ----------------------------------------------------------------------------
104
+ proc LabelFrame::align { args } {
105
+ set maxlen 0
106
+ set wlist {}
107
+ foreach wl $args {
108
+ foreach w $wl {
109
+ if { ![info exists Widget::_class($w)] } {
110
+ continue
111
+ }
112
+ set class $Widget::_class($w)
113
+ if { [string equal $class "LabelFrame"] } {
114
+ set textopt -text
115
+ set widthopt -width
116
+ } else {
117
+ upvar 0 Widget::${class}::map classmap
118
+ set textopt ""
119
+ set widthopt ""
120
+ set notdone 2
121
+ foreach {option lmap} [array get classmap] {
122
+ foreach {subpath subclass realopt} $lmap {
123
+ if { [string equal $subclass "LabelFrame"] } {
124
+ if { [string equal $realopt "-text"] } {
125
+ set textopt $option
126
+ incr notdone -1
127
+ break
128
+ }
129
+ if { [string equal $realopt "-width"] } {
130
+ set widthopt $option
131
+ incr notdone -1
132
+ break
133
+ }
134
+ }
135
+ }
136
+ if { !$notdone } {
137
+ break
138
+ }
139
+ }
140
+ if { $notdone } {
141
+ continue
142
+ }
143
+ }
144
+ set len [string length [$w cget $textopt]]
145
+ if { $len > $maxlen } {
146
+ set maxlen $len
147
+ }
148
+ lappend wlist $w $widthopt
149
+ }
150
+ }
151
+ incr maxlen
152
+ foreach {w widthopt} $wlist {
153
+ $w configure $widthopt $maxlen
154
+ }
155
+ }
156
+
157
+
158
+ proc LabelFrame::_destroy { path } {
159
+ Widget::destroy $path
160
+ }
@@ -0,0 +1,52 @@
1
+ ! -----------------------------------------------------------------------------
2
+ ! da.rc
3
+ ! This file is part of Unifix BWidget Toolkit
4
+ ! Definition of Danish resources
5
+ ! -----------------------------------------------------------------------------
6
+
7
+
8
+ ! --- symbolic names of buttons -----------------------------------------------
9
+
10
+ *abortName: &Annull�r
11
+ *retryName: P&r�v igen
12
+ *ignoreName: &Ignorer
13
+ *okName: &OK
14
+ *cancelName: &Cancel
15
+ *yesName: &Ja
16
+ *noName: &Nej
17
+
18
+
19
+ ! --- symbolic names of label of SelectFont dialog ----------------------------
20
+
21
+ *boldName: Fed
22
+ *italicName: Kursiv
23
+ *underlineName: Understreg
24
+ *overstrikeName: Overstreg
25
+ *fontName: &Font
26
+ *sizeName: &St�rrelse
27
+ *styleName: St&il
28
+
29
+ ! --- symbolic names of label of PasswdDlg dialog -----------------------------
30
+
31
+ *loginName: &Brugernavn
32
+ *passwordName: &Password
33
+
34
+
35
+ ! --- resource for SelectFont dialog ------------------------------------------
36
+
37
+ *SelectFont.title: Font-valg
38
+ *SelectFont.sampletext: Eksempeltekst ���
39
+
40
+
41
+ ! --- resource for MessageDlg dialog ------------------------------------------
42
+
43
+ *MessageDlg.noneTitle: Besked
44
+ *MessageDlg.infoTitle: Information
45
+ *MessageDlg.questionTitle: Sp�rgsm�l
46
+ *MessageDlg.warningTitle: Advarsel
47
+ *MessageDlg.errorTitle: Fejl
48
+
49
+
50
+ ! --- resource for PasswdDlg dialog -------------------------------------------
51
+
52
+ *PasswdDlg.title: Indtast brugernavn og password
@@ -0,0 +1,52 @@
1
+ ! ------------------------------------------------------------------------------
2
+ ! de.rc
3
+ ! This file is part of Unifix BWidget Toolkit
4
+ ! Definition of german resources
5
+ ! ------------------------------------------------------------------------------
6
+
7
+
8
+ ! --- symbolic names of buttons ------------------------------------------------
9
+
10
+ *abortName: &Abbrechen
11
+ *retryName: &Wiederholen
12
+ *ignoreName: &Ignorieren
13
+ *okName: &OK
14
+ *cancelName: &Abbrechen
15
+ *yesName: &Ja
16
+ *noName: &Nein
17
+
18
+
19
+ ! --- symbolic names of label of SelectFont dialog ----------------------------
20
+
21
+ *boldName: Fett
22
+ *italicName: Kursiv
23
+ *underlineName: Unterstrichen
24
+ *overstrikeName: Durchgestrichen
25
+ *fontName: &Schriftart
26
+ *sizeName: S&chriftgrad
27
+ *styleName: Sc&hriftschnitt
28
+
29
+ ! --- symbolic names of label of PasswdDlg dialog -----------------------------
30
+
31
+ *loginName: &Login
32
+ *passwordName: &Password
33
+
34
+
35
+ ! --- resource for SelectFont dialog ------------------------------------------
36
+
37
+ *SelectFont.title: Schrift Auswahl
38
+ *SelectFont.sampletext: Beispieltext
39
+
40
+
41
+ ! --- resource for MessageDlg dialog ------------------------------------------
42
+
43
+ *MessageDlg.noneTitle: Meldung
44
+ *MessageDlg.infoTitle: Hinweis
45
+ *MessageDlg.questionTitle: Frage
46
+ *MessageDlg.warningTitle: Warnung
47
+ *MessageDlg.errorTitle: Fehler
48
+
49
+
50
+ ! --- resource for PasswdDlg dialog -------------------------------------------
51
+
52
+ *PasswdDlg.title: Enter login and password
@@ -0,0 +1,52 @@
1
+ ! ------------------------------------------------------------------------------
2
+ ! en.rc
3
+ ! This file is part of Unifix BWidget Toolkit
4
+ ! Definition of english resources
5
+ ! ------------------------------------------------------------------------------
6
+
7
+
8
+ ! --- symbolic names of buttons ------------------------------------------------
9
+
10
+ *abortName: &Abort
11
+ *retryName: &Retry
12
+ *ignoreName: &Ignore
13
+ *okName: &OK
14
+ *cancelName: &Cancel
15
+ *yesName: &Yes
16
+ *noName: &No
17
+
18
+
19
+ ! --- symbolic names of label of SelectFont dialog ----------------------------
20
+
21
+ *boldName: Bold
22
+ *italicName: Italic
23
+ *underlineName: Underline
24
+ *overstrikeName: Overstrike
25
+ *fontName: &Font
26
+ *sizeName: &Size
27
+ *styleName: St&yle
28
+
29
+
30
+ ! --- symbolic names of label of PasswdDlg dialog -----------------------------
31
+
32
+ *loginName: &Login
33
+ *passwordName: &Password
34
+
35
+
36
+ ! --- resource for SelectFont dialog ------------------------------------------
37
+
38
+ *SelectFont.title: Font selection
39
+ *SelectFont.sampletext: Sample text
40
+
41
+
42
+ ! --- resource for MessageDlg dialog ------------------------------------------
43
+
44
+ *MessageDlg.noneTitle: Message
45
+ *MessageDlg.infoTitle: Information
46
+ *MessageDlg.questionTitle: Question
47
+ *MessageDlg.warningTitle: Warning
48
+ *MessageDlg.errorTitle: Error
49
+
50
+ ! --- resource for PasswdDlg dialog -------------------------------------------
51
+
52
+ *PasswdDlg.title: Enter login and password
@@ -0,0 +1,53 @@
1
+ ! ------------------------------------------------------------------------------
2
+ ! es.rc
3
+ ! This file is part of Unifix BWidget Toolkit
4
+ ! Definition of spanish resources
5
+ ! daniel@rawbyte.com
6
+ ! ------------------------------------------------------------------------------
7
+
8
+
9
+ ! --- symbolic names of buttons ------------------------------------------------
10
+
11
+ *abortName: A&bortar
12
+ *retryName: &Reintentar
13
+ *ignoreName: &Ignorar
14
+ *okName: &OK
15
+ *cancelName: &Anular
16
+ *yesName: &S�
17
+ *noName: &No
18
+
19
+ ! --- symbolic names of label of SelectFont dialog ----------------------------
20
+
21
+ *boldName: &Negrita
22
+ *italicName: &Cursiva
23
+ *underlineName: &Subrayado
24
+ *overstrikeName: &Tachado
25
+ *fontName: &Fuente
26
+ *sizeName: &Tama�o
27
+ *styleName: &Estilo
28
+
29
+
30
+ ! --- symbolic names of label of PasswdDlg dialog -----------------------------
31
+
32
+ *loginName: Nombre de &usuario
33
+ *passwordName: &Contrase�a
34
+
35
+ ! --- resource for SelectFont dialog ------------------------------------------
36
+
37
+ *SelectFont.title: Selecci�n de fuente
38
+ *SelectFont.sampletext: Texto de Ejemplo
39
+
40
+
41
+ ! --- resource for MessageDlg dialog ------------------------------------------
42
+
43
+ *MessageDlg.noneTitle: Indicaci�n
44
+ *MessageDlg.infoTitle: Informaci�n
45
+ *MessageDlg.questionTitle: Pregunta
46
+ *MessageDlg.warningTitle: Atenci�n
47
+ *MessageDlg.errorTitle: Error
48
+
49
+
50
+ ! --- resource for PasswdDlg dialog -------------------------------------------
51
+
52
+ *PasswdDlg.title: Introduzca su nombre de usuario y contrase�a
53
+
@@ -0,0 +1,52 @@
1
+ ! ------------------------------------------------------------------------------
2
+ ! fr.rc
3
+ ! This file is part of Unifix BWidget Toolkit
4
+ ! Definition of french resources
5
+ ! ------------------------------------------------------------------------------
6
+
7
+
8
+ ! --- symbolic names of buttons ------------------------------------------------
9
+
10
+ *abortName: A&bandonner
11
+ *retryName: &R�essayer
12
+ *ignoreName: &Ignorer
13
+ *okName: &OK
14
+ *cancelName: &Annuler
15
+ *yesName: &Oui
16
+ *noName: &Non
17
+
18
+ ! --- symbolic names of label of SelectFont dialog ----------------------------
19
+
20
+ *boldName: &Gras
21
+ *italicName: &Italique
22
+ *underlineName: &Soulign�
23
+ *overstrikeName: &Barr�
24
+ *fontName: &Police
25
+ *sizeName: &Taille
26
+ *styleName: St&yle
27
+
28
+
29
+ ! --- symbolic names of label of PasswdDlg dialog -----------------------------
30
+
31
+ *loginName: Nom de l'&utilisateur
32
+ *passwordName: Mot de &passe
33
+
34
+
35
+ ! --- resource for SelectFont dialog ------------------------------------------
36
+
37
+ *SelectFont.title: S�lection d'une police
38
+ *SelectFont.sampletext: Texte d'exemple
39
+
40
+
41
+ ! --- resource for MessageDlg dialog ------------------------------------------
42
+
43
+ *MessageDlg.noneTitle: Message
44
+ *MessageDlg.infoTitle: Information
45
+ *MessageDlg.questionTitle: Question
46
+ *MessageDlg.warningTitle: Attention
47
+ *MessageDlg.errorTitle: Erreur
48
+
49
+
50
+ ! --- resource for PasswdDlg dialog -------------------------------------------
51
+
52
+ *PasswdDlg.title: Entrez le login et le mot de passe
@@ -0,0 +1,1638 @@
1
+ # ----------------------------------------------------------------------------
2
+ # listbox.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: listbox.tcl,v 1.23 2006/03/23 23:32:12 dev_null42a Exp $
5
+ # ----------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - ListBox::create
8
+ # - ListBox::configure
9
+ # - ListBox::cget
10
+ # - ListBox::insert
11
+ # - ListBox::itemconfigure
12
+ # - ListBox::itemcget
13
+ # - ListBox::bindText
14
+ # - ListBox::bindImage
15
+ # - ListBox::delete
16
+ # - ListBox::move
17
+ # - ListBox::reorder
18
+ # - ListBox::selection
19
+ # - ListBox::exists
20
+ # - ListBox::index
21
+ # - ListBox::item - deprecated
22
+ # - ListBox::items
23
+ # - ListBox::see
24
+ # - ListBox::edit
25
+ # - ListBox::xview
26
+ # - ListBox::yview
27
+ # - ListBox::_update_edit_size
28
+ # - ListBox::_destroy
29
+ # - ListBox::_see
30
+ # - ListBox::_update_scrollregion
31
+ # - ListBox::_draw_item
32
+ # - ListBox::_redraw_items
33
+ # - ListBox::_redraw_selection
34
+ # - ListBox::_redraw_listbox
35
+ # - ListBox::_redraw_idle
36
+ # - ListBox::_resize
37
+ # - ListBox::_init_drag_cmd
38
+ # - ListBox::_drop_cmd
39
+ # - ListBox::_over_cmd
40
+ # - ListBox::_auto_scroll
41
+ # - ListBox::_scroll
42
+ # ----------------------------------------------------------------------------
43
+
44
+ namespace eval ListBox {
45
+ Widget::define ListBox listbox DragSite DropSite DynamicHelp
46
+
47
+ namespace eval Item {
48
+ Widget::declare ListBox::Item {
49
+ {-indent Int 0 0 "%d >= 0"}
50
+ {-text String "" 0}
51
+ {-font String "" 0}
52
+ {-foreground String "" 0}
53
+ {-image TkResource "" 0 label}
54
+ {-window String "" 0}
55
+ {-data String "" 0}
56
+
57
+ {-fill Synonym -foreground}
58
+ {-fg Synonym -foreground}
59
+ }
60
+ }
61
+
62
+ DynamicHelp::include ListBox::Item balloon
63
+
64
+ Widget::tkinclude ListBox canvas .c \
65
+ remove {
66
+ -insertwidth -insertbackground -insertborderwidth -insertofftime
67
+ -insertontime -selectborderwidth -closeenough -confine -scrollregion
68
+ -xscrollincrement -yscrollincrement -width -height
69
+ } \
70
+ initialize {
71
+ -relief sunken -borderwidth 2 -takefocus 1
72
+ -highlightthickness 1 -width 200
73
+ }
74
+
75
+ DragSite::include ListBox "LISTBOX_ITEM" 1
76
+ DropSite::include ListBox {
77
+ LISTBOX_ITEM {copy {} move {}}
78
+ }
79
+
80
+ Widget::declare ListBox {
81
+ {-deltax Int 10 0 "%d >= 0"}
82
+ {-deltay Int 15 0 "%d >= 0"}
83
+ {-padx Int 20 0 "%d >= 0"}
84
+ {-foreground TkResource "" 0 listbox}
85
+ {-background TkResource "" 0 listbox}
86
+ {-selectbackground TkResource "" 0 listbox}
87
+ {-selectforeground TkResource "" 0 listbox}
88
+ {-font TkResource "" 0 listbox}
89
+ {-width TkResource "" 0 listbox}
90
+ {-height TkResource "" 0 listbox}
91
+ {-redraw Boolean 1 0}
92
+ {-multicolumn Boolean 0 0}
93
+ {-dropovermode Flag "wpi" 0 "wpi"}
94
+ {-selectmode Enum none 1 {none single multiple}}
95
+ {-fg Synonym -foreground}
96
+ {-bg Synonym -background}
97
+ {-dropcmd String "ListBox::_drag_and_drop" 0}
98
+ {-autofocus Boolean 1 1}
99
+ {-selectfill Boolean 0 1}
100
+ }
101
+
102
+ Widget::addmap ListBox "" .c {-deltay -yscrollincrement}
103
+
104
+ bind ListBox <FocusIn> [list after idle {BWidget::refocus %W %W.c}]
105
+ bind ListBox <Destroy> [list ListBox::_destroy %W]
106
+ bind ListBox <Configure> [list ListBox::_resize %W]
107
+ bind ListBoxFocus <1> [list focus %W]
108
+ bind ListBox <Key-Up> [list ListBox::_keyboard_navigation %W -1]
109
+ bind ListBox <Key-Down> [list ListBox::_keyboard_navigation %W 1]
110
+
111
+ variable _edit
112
+ }
113
+
114
+
115
+ # ----------------------------------------------------------------------------
116
+ # Command ListBox::create
117
+ # ----------------------------------------------------------------------------
118
+ proc ListBox::create { path args } {
119
+ Widget::init ListBox $path $args
120
+
121
+ variable $path
122
+ upvar 0 $path data
123
+
124
+ frame $path -class ListBox -bd 0 -highlightthickness 0 -relief flat \
125
+ -takefocus 0
126
+ # For 8.4+ we don't want to inherit the padding
127
+ catch {$path configure -padx 0 -pady 0}
128
+ # widget informations
129
+ set data(nrows) -1
130
+
131
+ # items informations
132
+ set data(items) {}
133
+ set data(selitems) {}
134
+
135
+ # update informations
136
+ set data(upd,level) 0
137
+ set data(upd,afterid) ""
138
+ set data(upd,level) 0
139
+ set data(upd,delete) {}
140
+
141
+ # drag and drop informations
142
+ set data(dnd,scroll) ""
143
+ set data(dnd,afterid) ""
144
+ set data(dnd,item) ""
145
+
146
+ eval [list canvas $path.c] [Widget::subcget $path .c] \
147
+ [list -xscrollincrement 8]
148
+ pack $path.c -expand yes -fill both
149
+
150
+ DragSite::setdrag $path $path.c ListBox::_init_drag_cmd \
151
+ [Widget::cget $path -dragendcmd] 1
152
+ DropSite::setdrop $path $path.c ListBox::_over_cmd ListBox::_drop_cmd 1
153
+
154
+ Widget::create ListBox $path
155
+
156
+ set w [Widget::cget $path -width]
157
+ set h [Widget::cget $path -height]
158
+ set dy [Widget::cget $path -deltay]
159
+ $path.c configure -width [expr {$w*8}] -height [expr {$h*$dy}]
160
+
161
+ # Insert $path into the canvas bindings, so that anyone binding
162
+ # directly onto the widget will see their bindings activated when
163
+ # the canvas has focus.
164
+ set bindtags [bindtags $path.c]
165
+ set bindtags [linsert $bindtags 1 $path]
166
+ # Let any click within the canvas focus on the canvas so that
167
+ # MouseWheel scroll events will be properly handled by the canvas.
168
+ if {[Widget::cget $path -autofocus]} {
169
+ lappend bindtags ListBoxFocus
170
+ BWidget::bindMouseWheel $path.c
171
+ }
172
+ bindtags $path.c $bindtags
173
+
174
+ # Add slightly modified up/down bindings to the canvas, in case
175
+ # it gets the focus (like with -autofocus).
176
+ bind $path.c <Key-Up> {ListBox::_keyboard_navigation [winfo parent %W] -1}
177
+ bind $path.c <Key-Down> {ListBox::_keyboard_navigation [winfo parent %W] 1}
178
+
179
+ switch -exact -- [Widget::getoption $path -selectmode] {
180
+ single {
181
+ $path bindText <Button-1> [list ListBox::_mouse_select $path set]
182
+ $path bindImage <Button-1> [list ListBox::_mouse_select $path set]
183
+ }
184
+ multiple {
185
+ set cmd ListBox::_multiple_select
186
+ $path bindText <Button-1> [list $cmd $path n %x %y]
187
+ $path bindText <Shift-Button-1> [list $cmd $path s %x %y]
188
+ $path bindText <Control-Button-1> [list $cmd $path c %x %y]
189
+
190
+ $path bindImage <Button-1> [list $cmd $path n %x %y]
191
+ $path bindImage <Shift-Button-1> [list $cmd $path s %x %y]
192
+ $path bindImage <Control-Button-1> [list $cmd $path c %x %y]
193
+ }
194
+ }
195
+
196
+ return $path
197
+ }
198
+
199
+
200
+ # ----------------------------------------------------------------------------
201
+ # Command ListBox::configure
202
+ # ----------------------------------------------------------------------------
203
+ proc ListBox::configure { path args } {
204
+ set res [Widget::configure $path $args]
205
+
206
+ set ch1 [expr {[Widget::hasChanged $path -deltay dy] |
207
+ [Widget::hasChanged $path -padx val] |
208
+ [Widget::hasChanged $path -multicolumn val]}]
209
+
210
+ set ch2 [expr {[Widget::hasChanged $path -selectbackground val] |
211
+ [Widget::hasChanged $path -selectforeground val]}]
212
+
213
+ set redraw 0
214
+ if { [Widget::hasChanged $path -height h] } {
215
+ $path.c configure -height [expr {$h*$dy}]
216
+ set redraw 1
217
+ }
218
+ if { [Widget::hasChanged $path -width w] } {
219
+ $path.c configure -width [expr {$w*8}]
220
+ set redraw 1
221
+ }
222
+
223
+ if { [Widget::hasChanged $path -background bg] } {
224
+ $path.c itemconfigure box -fill $bg
225
+ }
226
+
227
+ if { !$redraw } {
228
+ if { $ch1 } {
229
+ _redraw_idle $path 2
230
+ } elseif { $ch2 } {
231
+ _redraw_idle $path 1
232
+ }
233
+ }
234
+
235
+ if { [Widget::hasChanged $path -redraw bool] && $bool } {
236
+ variable $path
237
+ upvar 0 $path data
238
+ set lvl $data(upd,level)
239
+ set data(upd,level) 0
240
+ _redraw_idle $path $lvl
241
+ }
242
+ set force [Widget::hasChanged $path -dragendcmd dragend]
243
+ DragSite::setdrag $path $path.c ListBox::_init_drag_cmd $dragend $force
244
+ DropSite::setdrop $path $path.c ListBox::_over_cmd ListBox::_drop_cmd
245
+
246
+ return $res
247
+ }
248
+
249
+
250
+ # ----------------------------------------------------------------------------
251
+ # Command ListBox::cget
252
+ # ----------------------------------------------------------------------------
253
+ proc ListBox::cget { path option } {
254
+ return [Widget::cget $path $option]
255
+ }
256
+
257
+
258
+ # ----------------------------------------------------------------------------
259
+ # Command ListBox::insert
260
+ # ----------------------------------------------------------------------------
261
+ proc ListBox::insert { path index item args } {
262
+ variable $path
263
+ upvar 0 $path data
264
+
265
+ set item [Widget::nextIndex $path $item]
266
+
267
+ if { [lsearch -exact $data(items) $item] != -1 } {
268
+ return -code error "item \"$item\" already exists"
269
+ }
270
+
271
+ Widget::init ListBox::Item $path.$item $args
272
+
273
+ set data(items) [linsert $data(items) $index $item]
274
+ set data(upd,create,$item) $item
275
+
276
+ _redraw_idle $path 2
277
+ return $item
278
+ }
279
+
280
+ # Bastien Chevreux (bach@mwgdna.com)
281
+ # The multipleinsert command performs inserts several items at once into
282
+ # the list. It is faster than calling insert multiple times as it uses the
283
+ # Widget::copyinit command for initializing all items after the 1st. The
284
+ # speedup factor is between 2 and 3 for typical usage, but could be higher
285
+ # for inserts with many options.
286
+ #
287
+ # Syntax: path and index are as in the insert command
288
+ # args is a list of even numbered elements where the 1st of each pair
289
+ # corresponds to the item of 'insert' and the second to args of 'insert'.
290
+ # ----------------------------------------------------------------------------
291
+ # Command ListBox::multipleinsert
292
+ # ----------------------------------------------------------------------------
293
+ proc ListBox::multipleinsert { path index args } {
294
+ variable $path
295
+ upvar 0 $path data
296
+
297
+ # If we got only one list as arg, take the first element as args
298
+ # This enables callers to use
299
+ # $list multipleinsert index $thelist
300
+ # instead of
301
+ # eval $list multipleinsert index $thelist
302
+
303
+ if {[llength $args] == 1} {
304
+ set args [lindex $args 0]
305
+ }
306
+
307
+ set count 0
308
+ foreach {item iargs} $args {
309
+ if { [lsearch -exact $data(items) $item] != -1 } {
310
+ return -code error "item \"$item\" already exists"
311
+ }
312
+
313
+ if {$count==0} {
314
+ Widget::init ListBox::Item $path.$item $iargs
315
+ set firstpath $path.$item
316
+ } else {
317
+ Widget::copyinit ListBox::Item $firstpath $path.$item $iargs
318
+ }
319
+
320
+ set data(items) [linsert $data(items) $index $item]
321
+ set data(upd,create,$item) $item
322
+
323
+ incr count
324
+ }
325
+
326
+ _redraw_idle $path 2
327
+ return $item
328
+ }
329
+
330
+ # ----------------------------------------------------------------------------
331
+ # Command ListBox::itemconfigure
332
+ # ----------------------------------------------------------------------------
333
+ proc ListBox::itemconfigure { path item args } {
334
+ variable $path
335
+ upvar 0 $path data
336
+
337
+ if { [lsearch -exact $data(items) $item] == -1 } {
338
+ return -code error "item \"$item\" does not exist"
339
+ }
340
+
341
+ set oldind [Widget::getoption $path.$item -indent]
342
+
343
+ set res [Widget::configure $path.$item $args]
344
+ set chind [Widget::hasChanged $path.$item -indent indent]
345
+ set chw [Widget::hasChanged $path.$item -window win]
346
+ set chi [Widget::hasChanged $path.$item -image img]
347
+ set cht [Widget::hasChanged $path.$item -text txt]
348
+ set chf [Widget::hasChanged $path.$item -font fnt]
349
+ set chfg [Widget::hasChanged $path.$item -foreground fg]
350
+ set idn [$path.c find withtag n:$item]
351
+
352
+ _set_help $path $item
353
+
354
+ if { $idn == "" } {
355
+ # item is not drawn yet
356
+ _redraw_idle $path 2
357
+ return $res
358
+ }
359
+
360
+ set oldb [$path.c bbox $idn]
361
+ set coords [$path.c coords $idn]
362
+ set padx [Widget::getoption $path -padx]
363
+ set x0 [expr {[lindex $coords 0]-$padx-$oldind+$indent}]
364
+ set y0 [lindex $coords 1]
365
+ if { $chw || $chi } {
366
+ # -window or -image modified
367
+ set idi [$path.c find withtag i:$item]
368
+ set type [lindex [$path.c gettags $idi] 0]
369
+ if { [string length $win] } {
370
+ if { [string equal $type "win"] } {
371
+ $path.c itemconfigure $idi -window $win
372
+ } else {
373
+ $path.c delete $idi
374
+ $path.c create window $x0 $y0 -window $win -anchor w \
375
+ -tags [list win i:$item]
376
+ }
377
+ } elseif { [string length $img] } {
378
+ if { [string equal $type "img"] } {
379
+ $path.c itemconfigure $idi -image $img
380
+ } else {
381
+ $path.c delete $idi
382
+ $path.c create image $x0 $y0 -image $img -anchor w \
383
+ -tags [list img i:$item]
384
+ }
385
+ } else {
386
+ $path.c delete $idi
387
+ }
388
+ }
389
+
390
+ if { $cht || $chf || $chfg } {
391
+ # -text or -font modified, or -foreground modified
392
+ set fnt [_getoption $path $item -font]
393
+ set fg [_getoption $path $item -foreground]
394
+ $path.c itemconfigure $idn -text $txt -font $fnt -fill $fg
395
+ _redraw_idle $path 1
396
+ }
397
+
398
+ if { $chind } {
399
+ # -indent modified
400
+ $path.c coords $idn [expr {$x0+$padx}] $y0
401
+ $path.c coords i:$item $x0 $y0
402
+ _redraw_idle $path 1
403
+ }
404
+
405
+ if { [Widget::getoption $path -multicolumn] && ($cht || $chf || $chind) } {
406
+ set bbox [$path.c bbox $idn]
407
+ if { [lindex $bbox 2] > [lindex $oldb 2] } {
408
+ _redraw_idle $path 2
409
+ }
410
+ }
411
+
412
+ return $res
413
+ }
414
+
415
+
416
+ # ----------------------------------------------------------------------------
417
+ # Command ListBox::itemcget
418
+ # ----------------------------------------------------------------------------
419
+ proc ListBox::itemcget { path item option } {
420
+ return [Widget::cget $path.$item $option]
421
+ }
422
+
423
+
424
+ # ----------------------------------------------------------------------------
425
+ # Command ListBox::bindText
426
+ # ----------------------------------------------------------------------------
427
+ proc ListBox::bindText { path event script } {
428
+ if { $script != "" } {
429
+ set map [list %W $path]
430
+ set script [string map $map $script]
431
+ append script " \[ListBox::_get_current [list $path]\]"
432
+ }
433
+ $path.c bind "click" $event $script
434
+ }
435
+
436
+
437
+ # ----------------------------------------------------------------------------
438
+ # Command ListBox::bindImage
439
+ # ----------------------------------------------------------------------------
440
+ proc ListBox::bindImage { path event script } {
441
+ if { $script != "" } {
442
+ set map [list %W $path]
443
+ set script [string map $map $script]
444
+ append script " \[ListBox::_get_current [list $path]\]"
445
+ }
446
+ $path.c bind "img" $event $script
447
+ }
448
+
449
+
450
+ # ----------------------------------------------------------------------------
451
+ # Command ListBox::delete
452
+ # ----------------------------------------------------------------------------
453
+ proc ListBox::delete { path args } {
454
+ variable $path
455
+ upvar 0 $path data
456
+ Widget::getVariable $path help
457
+
458
+ foreach litems $args {
459
+ foreach item $litems {
460
+ set idx [lsearch -exact $data(items) $item]
461
+ if { $idx != -1 } {
462
+ set data(items) [lreplace $data(items) $idx $idx]
463
+ array unset help $item
464
+ Widget::destroy $path.$item
465
+ if { [info exists data(upd,create,$item)] } {
466
+ unset data(upd,create,$item)
467
+ } else {
468
+ lappend data(upd,delete) $item
469
+ }
470
+ }
471
+ }
472
+ }
473
+
474
+ set sel $data(selitems)
475
+ set data(selitems) {}
476
+ eval [list selection $path set] $sel
477
+ _redraw_idle $path 2
478
+ }
479
+
480
+
481
+ # ----------------------------------------------------------------------------
482
+ # Command ListBox::move
483
+ # ----------------------------------------------------------------------------
484
+ proc ListBox::move { path item index } {
485
+ variable $path
486
+ upvar 0 $path data
487
+
488
+ if { [set idx [lsearch -exact $data(items) $item]] == -1 } {
489
+ return -code error "item \"$item\" does not exist"
490
+ }
491
+
492
+ set data(items) [linsert [lreplace $data(items) $idx $idx] $index $item]
493
+
494
+ _redraw_idle $path 2
495
+ }
496
+
497
+
498
+ # ----------------------------------------------------------------------------
499
+ # Command ListBox::reorder
500
+ # ----------------------------------------------------------------------------
501
+ proc ListBox::reorder { path neworder } {
502
+ variable $path
503
+ upvar 0 $path data
504
+
505
+ set data(items) [BWidget::lreorder $data(items) $neworder]
506
+ _redraw_idle $path 2
507
+ }
508
+
509
+
510
+ # ----------------------------------------------------------------------------
511
+ # Command ListBox::selection
512
+ # ----------------------------------------------------------------------------
513
+ proc ListBox::selection { path cmd args } {
514
+ variable $path
515
+ upvar 0 $path data
516
+
517
+ switch -- $cmd {
518
+ set {
519
+ set data(selitems) {}
520
+ foreach item $args {
521
+ if { [lsearch -exact $data(selitems) $item] == -1 } {
522
+ if { [lsearch -exact $data(items) $item] != -1 } {
523
+ lappend data(selitems) $item
524
+ }
525
+ }
526
+ }
527
+ }
528
+ add {
529
+ foreach item $args {
530
+ if { [lsearch -exact $data(selitems) $item] == -1 } {
531
+ if { [lsearch -exact $data(items) $item] != -1 } {
532
+ lappend data(selitems) $item
533
+ }
534
+ }
535
+ }
536
+ }
537
+ remove {
538
+ foreach item $args {
539
+ if { [set idx [lsearch -exact $data(selitems) $item]] != -1 } {
540
+ set data(selitems) [lreplace $data(selitems) $idx $idx]
541
+ }
542
+ }
543
+ }
544
+ clear {
545
+ set data(selitems) {}
546
+ }
547
+ get {
548
+ return $data(selitems)
549
+ }
550
+ includes {
551
+ return [expr {[lsearch -exact $data(selitems) $args] != -1}]
552
+ }
553
+ default {
554
+ return
555
+ }
556
+ }
557
+
558
+ _redraw_idle $path 1
559
+ }
560
+
561
+
562
+ # ----------------------------------------------------------------------------
563
+ # Command ListBox::exists
564
+ # ----------------------------------------------------------------------------
565
+ proc ListBox::exists { path item } {
566
+ variable $path
567
+ upvar 0 $path data
568
+
569
+ return [expr {[lsearch -exact $data(items) $item] != -1}]
570
+ }
571
+
572
+
573
+ # ----------------------------------------------------------------------------
574
+ # Command ListBox::index
575
+ # ----------------------------------------------------------------------------
576
+ proc ListBox::index { path item } {
577
+ variable $path
578
+ upvar 0 $path data
579
+ if {[string equal $item "active"]} { return [$path selection get] }
580
+ return [lsearch -exact $data(items) $item]
581
+ }
582
+
583
+
584
+ # ----------------------------------------------------------------------------
585
+ # ListBox::find
586
+ # Returns the item given a position.
587
+ # findInfo @x,y ?confine?
588
+ # lineNumber
589
+ # ----------------------------------------------------------------------------
590
+ proc ListBox::find {path findInfo {confine ""}} {
591
+ variable $path
592
+ upvar 0 $path widgetData
593
+
594
+ if {[regexp -- {^@([0-9]+),([0-9]+)$} $findInfo match x y]} {
595
+ set x [$path.c canvasx $x]
596
+ set y [$path.c canvasy $y]
597
+ } elseif {[regexp -- {^[0-9]+$} $findInfo lineNumber]} {
598
+ set dy [Widget::getoption $path -deltay]
599
+ set y [expr {$dy*($lineNumber+0.5)}]
600
+ set confine ""
601
+ } else {
602
+ return -code error "invalid find spec \"$findInfo\""
603
+ }
604
+
605
+ set found 0
606
+ set xi 0
607
+ foreach xs $widgetData(xlist) {
608
+ if {$x <= $xs} {
609
+ foreach id [$path.c find overlapping $xi $y $xs $y] {
610
+ set ltags [$path.c gettags $id]
611
+ set item [lindex $ltags 0]
612
+ if { [string equal $item "item"] ||
613
+ [string equal $item "img"] ||
614
+ [string equal $item "win"] } {
615
+ # item is the label or image/window of the node
616
+ set item [string range [lindex $ltags 1] 2 end]
617
+ set found 1
618
+ break
619
+ }
620
+ }
621
+ break
622
+ }
623
+ set xi $xs
624
+ }
625
+
626
+ if {$found} {
627
+ if {[string equal $confine "confine"]} {
628
+ # test if x stand inside node bbox
629
+ set xi [expr {[lindex [$path.c coords n:$item] 0]-[Widget::getoption $path -padx]}]
630
+ set xs [lindex [$path.c bbox n:$item] 2]
631
+ if {$x >= $xi && $x <= $xs} {
632
+ return $item
633
+ }
634
+ } else {
635
+ return $item
636
+ }
637
+ }
638
+ return ""
639
+ }
640
+
641
+
642
+ # ----------------------------------------------------------------------------
643
+ # Command ListBox::item - deprecated
644
+ # ----------------------------------------------------------------------------
645
+ proc ListBox::item { path first {last ""} } {
646
+ variable $path
647
+ upvar 0 $path data
648
+
649
+ if { ![string length $last] } {
650
+ return [lindex $data(items) $first]
651
+ } else {
652
+ return [lrange $data(items) $first $last]
653
+ }
654
+ }
655
+
656
+
657
+ # ----------------------------------------------------------------------------
658
+ # Command ListBox::items
659
+ # ----------------------------------------------------------------------------
660
+ proc ListBox::items { path {first ""} {last ""}} {
661
+ variable $path
662
+ upvar 0 $path data
663
+
664
+ if { ![string length $first] } {
665
+ return $data(items)
666
+ }
667
+
668
+ if { ![string length $last] } {
669
+ return [lindex $data(items) $first]
670
+ } else {
671
+ return [lrange $data(items) $first $last]
672
+ }
673
+ }
674
+
675
+
676
+ # ----------------------------------------------------------------------------
677
+ # Command ListBox::see
678
+ # ----------------------------------------------------------------------------
679
+ proc ListBox::see { path item } {
680
+ variable $path
681
+ upvar 0 $path data
682
+
683
+ if { [Widget::getoption $path -redraw] && $data(upd,afterid) != "" } {
684
+ after cancel $data(upd,afterid)
685
+ _redraw_listbox $path
686
+ }
687
+ set idn [$path.c find withtag n:$item]
688
+ if { $idn != "" } {
689
+ ListBox::_see $path $idn right
690
+ ListBox::_see $path $idn left
691
+ }
692
+ }
693
+
694
+
695
+ # ----------------------------------------------------------------------------
696
+ # Command ListBox::edit
697
+ # ----------------------------------------------------------------------------
698
+ proc ListBox::edit { path item text {verifycmd ""} {clickres 0} {select 1}} {
699
+ variable _edit
700
+ variable $path
701
+ upvar 0 $path data
702
+
703
+ if { [Widget::getoption $path -redraw] && $data(upd,afterid) != "" } {
704
+ after cancel $data(upd,afterid)
705
+ _redraw_listbox $path
706
+ }
707
+ set idn [$path.c find withtag n:$item]
708
+ if { $idn != "" } {
709
+ ListBox::_see $path $idn right
710
+ ListBox::_see $path $idn left
711
+
712
+ set oldfg [$path.c itemcget $idn -fill]
713
+ set sbg [Widget::getoption $path -selectbackground]
714
+ set coords [$path.c coords $idn]
715
+ set x [lindex $coords 0]
716
+ set y [lindex $coords 1]
717
+ set bd [expr {[$path.c cget -borderwidth]+[$path.c cget -highlightthickness]}]
718
+ set w [expr {[winfo width $path] - 2*$bd}]
719
+ set wmax [expr {[$path.c canvasx $w]-$x}]
720
+
721
+ $path.c itemconfigure $idn -fill [Widget::getoption $path -background]
722
+ $path.c itemconfigure s:$item -fill {} -outline {}
723
+
724
+ set _edit(text) $text
725
+ set _edit(wait) 0
726
+
727
+ set frame [frame $path.edit \
728
+ -relief flat -borderwidth 0 -highlightthickness 0 \
729
+ -background [Widget::getoption $path -background]]
730
+ set ent [entry $frame.edit \
731
+ -width 0 \
732
+ -relief solid \
733
+ -borderwidth 1 \
734
+ -highlightthickness 0 \
735
+ -foreground [_getoption $path $item -foreground] \
736
+ -background [Widget::getoption $path -background] \
737
+ -selectforeground [Widget::getoption $path -selectforeground] \
738
+ -selectbackground $sbg \
739
+ -font [_getoption $path $item -font] \
740
+ -textvariable ListBox::_edit(text)]
741
+ pack $ent -ipadx 8 -anchor w
742
+
743
+ set idw [$path.c create window $x $y -window $frame -anchor w]
744
+ trace variable ListBox::_edit(text) w [list ListBox::_update_edit_size $path $ent $idw $wmax]
745
+ tkwait visibility $ent
746
+ grab $frame
747
+ BWidget::focus set $ent
748
+ _update_edit_size $path $ent $idw $wmax
749
+ update
750
+ if { $select } {
751
+ $ent selection range 0 end
752
+ $ent icursor end
753
+ $ent xview end
754
+ }
755
+
756
+ bindtags $ent [list $ent Entry]
757
+ bind $ent <Escape> {set ListBox::_edit(wait) 0}
758
+ bind $ent <Return> {set ListBox::_edit(wait) 1}
759
+ if { $clickres == 0 || $clickres == 1 } {
760
+ bind $frame <Button> [list set ListBox::_edit(wait) $clickres]
761
+ }
762
+
763
+ set ok 0
764
+ while { !$ok } {
765
+ tkwait variable ListBox::_edit(wait)
766
+ if { !$_edit(wait) || [llength $verifycmd]==0 ||
767
+ [uplevel \#0 $verifycmd [list $_edit(text)]] } {
768
+ set ok 1
769
+ }
770
+ }
771
+ trace vdelete ListBox::_edit(text) w [list ListBox::_update_edit_size $path $ent $idw $wmax]
772
+ grab release $frame
773
+ BWidget::focus release $ent
774
+ destroy $frame
775
+ $path.c delete $idw
776
+ $path.c itemconfigure $idn -fill $oldfg
777
+ $path.c itemconfigure s:$item -fill $sbg -outline $sbg
778
+
779
+ if { $_edit(wait) } {
780
+ return $_edit(text)
781
+ }
782
+ }
783
+ return ""
784
+ }
785
+
786
+
787
+ # ----------------------------------------------------------------------------
788
+ # Command ListBox::xview
789
+ # ----------------------------------------------------------------------------
790
+ proc ListBox::xview { path args } {
791
+ return [eval [linsert $args 0 $path.c xview]]
792
+ }
793
+
794
+
795
+ # ----------------------------------------------------------------------------
796
+ # Command ListBox::yview
797
+ # ----------------------------------------------------------------------------
798
+ proc ListBox::yview { path args } {
799
+ return [eval [linsert $args 0 $path.c yview]]
800
+ }
801
+
802
+
803
+ proc ListBox::getcanvas { path } {
804
+ return $path.c
805
+ }
806
+
807
+
808
+ proc ListBox::curselection { path } {
809
+ return [$path selection get]
810
+ }
811
+
812
+
813
+ # ----------------------------------------------------------------------------
814
+ # Command ListBox::_update_edit_size
815
+ # ----------------------------------------------------------------------------
816
+ proc ListBox::_update_edit_size { path entry idw wmax args } {
817
+ set entw [winfo reqwidth $entry]
818
+ if { $entw >= $wmax } {
819
+ $path.c itemconfigure $idw -width $wmax
820
+ } else {
821
+ $path.c itemconfigure $idw -width 0
822
+ }
823
+ }
824
+
825
+
826
+ # ----------------------------------------------------------------------------
827
+ # Command ListBox::_getoption
828
+ # Returns the value of option for node. If empty, returned value is those
829
+ # of the ListBox.
830
+ # ----------------------------------------------------------------------------
831
+ proc ListBox::_getoption { path item option } {
832
+ set value [Widget::getoption $path.$item $option]
833
+ if {![string length $value]} {
834
+ set value [Widget::getoption $path $option]
835
+ }
836
+ return $value
837
+ }
838
+
839
+
840
+ # ----------------------------------------------------------------------------
841
+ # Command ListBox::_destroy
842
+ # ----------------------------------------------------------------------------
843
+ proc ListBox::_destroy { path } {
844
+ variable $path
845
+ upvar 0 $path data
846
+
847
+ if { $data(upd,afterid) != "" } {
848
+ after cancel $data(upd,afterid)
849
+ }
850
+ if { $data(dnd,afterid) != "" } {
851
+ after cancel $data(dnd,afterid)
852
+ }
853
+ foreach item $data(items) {
854
+ Widget::destroy $path.$item
855
+ }
856
+
857
+ Widget::destroy $path
858
+ unset data
859
+ }
860
+
861
+
862
+ # ----------------------------------------------------------------------------
863
+ # Command ListBox::_see
864
+ # ----------------------------------------------------------------------------
865
+ proc ListBox::_see { path idn side } {
866
+ set bbox [$path.c bbox $idn]
867
+ set scrl [$path.c cget -scrollregion]
868
+
869
+ set ymax [lindex $scrl 3]
870
+ set dy [$path.c cget -yscrollincrement]
871
+ set yv [$path.c yview]
872
+ set yv0 [expr {round([lindex $yv 0]*$ymax/$dy)}]
873
+ set yv1 [expr {round([lindex $yv 1]*$ymax/$dy)}]
874
+ set y [expr {int([lindex [$path.c coords $idn] 1]/$dy)}]
875
+ if { $y < $yv0 } {
876
+ $path.c yview scroll [expr {$y-$yv0}] units
877
+ } elseif { $y >= $yv1 } {
878
+ $path.c yview scroll [expr {$y-$yv1+1}] units
879
+ }
880
+
881
+ set xmax [lindex $scrl 2]
882
+ set dx [$path.c cget -xscrollincrement]
883
+ set xv [$path.c xview]
884
+ if { [string equal $side "right"] } {
885
+ set xv1 [expr {round([lindex $xv 1]*$xmax/$dx)}]
886
+ set x1 [expr {int([lindex $bbox 2]/$dx)}]
887
+ if { $x1 >= $xv1 } {
888
+ $path.c xview scroll [expr {$x1-$xv1+1}] units
889
+ }
890
+ } else {
891
+ set xv0 [expr {round([lindex $xv 0]*$xmax/$dx)}]
892
+ set x0 [expr {int([lindex $bbox 0]/$dx)}]
893
+ if { $x0 < $xv0 } {
894
+ $path.c xview scroll [expr {$x0-$xv0}] units
895
+ }
896
+ }
897
+ }
898
+
899
+
900
+ # ----------------------------------------------------------------------------
901
+ # Command ListBox::_update_scrollregion
902
+ # ----------------------------------------------------------------------------
903
+ proc ListBox::_update_scrollregion { path } {
904
+ set bd [$path.c cget -borderwidth]
905
+ set ht [$path.c cget -highlightthickness]
906
+ set bd [expr {2*($bd + $ht)}]
907
+ set w [expr {[winfo width $path] - $bd}]
908
+ set h [expr {[winfo height $path] - $bd}]
909
+ set xinc [$path.c cget -xscrollincrement]
910
+ set yinc [$path.c cget -yscrollincrement]
911
+ set bbox [$path.c bbox item win img]
912
+ if { [llength $bbox] } {
913
+ set xs [lindex $bbox 2]
914
+ set ys [lindex $bbox 3]
915
+
916
+ if { $w < $xs } {
917
+ set w [expr {int($xs)}]
918
+ if { [set r [expr {$w % $xinc}]] } {
919
+ set w [expr {$w+$xinc-$r}]
920
+ }
921
+ }
922
+ if { $h < $ys } {
923
+ set h [expr {int($ys)}]
924
+ if { [set r [expr {$h % $yinc}]] } {
925
+ set h [expr {$h+$yinc-$r}]
926
+ }
927
+ }
928
+ }
929
+
930
+ $path.c configure -scrollregion [list 0 0 $w $h]
931
+ }
932
+
933
+
934
+ proc ListBox::_update_select_fill { path } {
935
+ variable $path
936
+ upvar 0 $path data
937
+
938
+ set width [winfo width $path]
939
+
940
+ foreach item $data(items) {
941
+ set bbox [$path.c bbox n:$item]
942
+ set bbox [list 0 [lindex $bbox 1] $width [lindex $bbox 3]]
943
+ $path.c coords b:$item $bbox
944
+ }
945
+
946
+ _redraw_selection $path
947
+ }
948
+
949
+
950
+ # ----------------------------------------------------------------------------
951
+ # Command ListBox::_draw_item
952
+ # ----------------------------------------------------------------------------
953
+ proc ListBox::_draw_item {path item x0 x1 y bg selfill multi ww} {
954
+ set indent [Widget::getoption $path.$item -indent]
955
+ set i [$path.c create text [expr {$x1+$indent}] $y \
956
+ -text [Widget::getoption $path.$item -text] \
957
+ -fill [_getoption $path $item -foreground] \
958
+ -font [_getoption $path $item -font] \
959
+ -anchor w \
960
+ -tags [list item n:$item click]]
961
+
962
+ if { $selfill && !$multi } {
963
+ set bbox [$path.c bbox n:$item]
964
+ set bbox [list 0 [lindex $bbox 1] $ww [lindex $bbox 3]]
965
+ set tags [list box b:$item click]
966
+ $path.c create rect $bbox -fill $bg -width 0 -tags $tags
967
+ $path.c raise $i
968
+ }
969
+
970
+ if { [set win [Widget::getoption $path.$item -window]] != "" } {
971
+ $path.c create window [expr {$x0+$indent}] $y \
972
+ -window $win -anchor w -tags [list win i:$item]
973
+ } elseif { [set img [Widget::getoption $path.$item -image]] != "" } {
974
+ $path.c create image [expr {$x0+$indent}] $y \
975
+ -image $img -anchor w -tags [list img i:$item]
976
+ }
977
+
978
+ _set_help $path $item
979
+ }
980
+
981
+
982
+ # ----------------------------------------------------------------------------
983
+ # Command ListBox::_redraw_items
984
+ # ----------------------------------------------------------------------------
985
+ proc ListBox::_redraw_items { path } {
986
+ variable $path
987
+ upvar 0 $path data
988
+
989
+ set cursor [$path.c cget -cursor]
990
+ $path.c configure -cursor watch
991
+ update idletasks ; # make sure watch cursor is reflected
992
+ set dx [Widget::getoption $path -deltax]
993
+ set dy [Widget::getoption $path -deltay]
994
+ set padx [Widget::getoption $path -padx]
995
+ set y0 [expr {$dy/2}]
996
+ set x0 4
997
+ set x1 [expr {$x0+$padx}]
998
+ set nitem 0
999
+ set drawn {}
1000
+ set data(xlist) {}
1001
+ if { [Widget::cget $path -multicolumn] } {
1002
+ set nrows $data(nrows)
1003
+ } else {
1004
+ set nrows [llength $data(items)]
1005
+ }
1006
+ foreach item $data(upd,delete) {
1007
+ $path.c delete i:$item n:$item s:$item b:$item
1008
+ }
1009
+ # Pass these to _draw_item so it doesn't have to request them
1010
+ # for each item.
1011
+ set bg [Widget::cget $path -background]
1012
+ set selfill [Widget::cget $path -selectfill]
1013
+ set multi [Widget::cget $path -multicolumn]
1014
+ set ww [winfo width $path]
1015
+ foreach item $data(items) {
1016
+ if { [info exists data(upd,create,$item)] } {
1017
+ _draw_item $path $item $x0 $x1 $y0 $bg $selfill $multi $ww
1018
+ unset data(upd,create,$item)
1019
+ } else {
1020
+ set indent [Widget::getoption $path.$item -indent]
1021
+ $path.c coords n:$item [expr {$x1+$indent}] $y0
1022
+ $path.c coords i:$item [expr {$x0+$indent}] $y0
1023
+ }
1024
+ incr y0 $dy
1025
+ incr nitem
1026
+ lappend drawn n:$item
1027
+ if { $nitem == $nrows } {
1028
+ set y0 [expr {$dy/2}]
1029
+ set bbox [eval [linsert $drawn 0 $path.c bbox]]
1030
+ set drawn {}
1031
+ set x0 [expr {[lindex $bbox 2]+$dx}]
1032
+ set x1 [expr {$x0+$padx}]
1033
+ set nitem 0
1034
+ lappend data(xlist) [lindex $bbox 2]
1035
+ }
1036
+ }
1037
+ if { $nitem && $nitem < $nrows } {
1038
+ set bbox [eval [linsert $drawn 0 $path.c bbox]]
1039
+ lappend data(xlist) [lindex $bbox 2]
1040
+ }
1041
+ set data(upd,delete) {}
1042
+ $path.c configure -cursor $cursor
1043
+ }
1044
+
1045
+
1046
+ # ----------------------------------------------------------------------------
1047
+ # Command ListBox::_redraw_selection
1048
+ # ----------------------------------------------------------------------------
1049
+ proc ListBox::_redraw_selection { path } {
1050
+ variable $path
1051
+ upvar 0 $path data
1052
+
1053
+ set selbg [Widget::getoption $path -selectbackground]
1054
+ set selfg [Widget::getoption $path -selectforeground]
1055
+ set selfill [Widget::getoption $path -selectfill]
1056
+ set multi [Widget::getoption $path -multicolumn]
1057
+ foreach id [$path.c find withtag sel] {
1058
+ set item [string range [lindex [$path.c gettags $id] 1] 2 end]
1059
+ $path.c itemconfigure "n:$item" \
1060
+ -fill [_getoption $path $item -foreground]
1061
+ }
1062
+ $path.c delete sel
1063
+ if {$selfill && !$multi} {
1064
+ # cache window width for use below
1065
+ set width [winfo width $path]
1066
+ }
1067
+ foreach item $data(selitems) {
1068
+ set bbox [$path.c bbox "n:$item"]
1069
+ if { [llength $bbox] } {
1070
+ if { $selfill && !$multi } {
1071
+ # With -selectfill, make box occupy full width of widget
1072
+ set bbox [list 0 [lindex $bbox 1] $width [lindex $bbox 3]]
1073
+ }
1074
+ set tags [list sel s:$item click]
1075
+ set id [$path.c create rectangle $bbox \
1076
+ -fill $selbg -outline $selbg -tags $tags]
1077
+ $path.c itemconfigure "n:$item" -fill $selfg
1078
+ $path.c lower $id
1079
+ $path.c lower b:$item
1080
+ }
1081
+ }
1082
+ }
1083
+
1084
+
1085
+ # ----------------------------------------------------------------------------
1086
+ # Command ListBox::_redraw_listbox
1087
+ # ----------------------------------------------------------------------------
1088
+ proc ListBox::_redraw_listbox { path } {
1089
+ variable $path
1090
+ upvar 0 $path data
1091
+
1092
+ if { [Widget::getoption $path -redraw] } {
1093
+ if { $data(upd,level) == 2 } {
1094
+ _redraw_items $path
1095
+ }
1096
+ _redraw_selection $path
1097
+ _update_scrollregion $path
1098
+ if {[Widget::cget $path -selectfill]} {
1099
+ _update_select_fill $path
1100
+ }
1101
+ set data(upd,level) 0
1102
+ set data(upd,afterid) ""
1103
+ }
1104
+ }
1105
+
1106
+
1107
+ # ----------------------------------------------------------------------------
1108
+ # Command ListBox::_redraw_idle
1109
+ # ----------------------------------------------------------------------------
1110
+ proc ListBox::_redraw_idle { path level } {
1111
+ variable $path
1112
+ upvar 0 $path data
1113
+
1114
+ if { $data(nrows) != -1 } {
1115
+ # widget is realized
1116
+ if { [Widget::getoption $path -redraw] && $data(upd,afterid) == "" } {
1117
+ set data(upd,afterid) \
1118
+ [after idle [list ListBox::_redraw_listbox $path]]
1119
+ }
1120
+ }
1121
+ if { $level > $data(upd,level) } {
1122
+ set data(upd,level) $level
1123
+ }
1124
+ return ""
1125
+ }
1126
+
1127
+
1128
+ # ----------------------------------------------------------------------------
1129
+ # Command ListBox::_resize
1130
+ # ----------------------------------------------------------------------------
1131
+ proc ListBox::_resize { path } {
1132
+ variable $path
1133
+ upvar 0 $path data
1134
+
1135
+ if { [Widget::getoption $path -multicolumn] } {
1136
+ set bd [expr {[$path.c cget -borderwidth]+[$path.c cget -highlightthickness]}]
1137
+ set h [expr {[winfo height $path] - 2*$bd}]
1138
+ set nrows [expr {$h/[$path.c cget -yscrollincrement]}]
1139
+ if { $nrows == 0 } {
1140
+ set nrows 1
1141
+ }
1142
+ if { $nrows != $data(nrows) } {
1143
+ set data(nrows) $nrows
1144
+ _redraw_idle $path 2
1145
+ } else {
1146
+ _update_scrollregion $path
1147
+ }
1148
+ } elseif { $data(nrows) == -1 } {
1149
+ # first Configure event
1150
+ set data(nrows) 0
1151
+ ListBox::_redraw_listbox $path
1152
+ if {[Widget::cget $path -selectfill]} {
1153
+ _update_select_fill $path
1154
+ }
1155
+ } else {
1156
+ if {[Widget::cget $path -selectfill]} {
1157
+ _update_select_fill $path
1158
+ }
1159
+
1160
+ _update_scrollregion $path
1161
+ }
1162
+ }
1163
+
1164
+
1165
+ # ----------------------------------------------------------------------------
1166
+ # Command ListBox::_init_drag_cmd
1167
+ # ----------------------------------------------------------------------------
1168
+ proc ListBox::_init_drag_cmd { path X Y top } {
1169
+ set path [winfo parent $path]
1170
+ set ltags [$path.c gettags current]
1171
+ set item [lindex $ltags 0]
1172
+ if { [string equal $item "item"] ||
1173
+ [string equal $item "img"] ||
1174
+ [string equal $item "win"] } {
1175
+ set item [string range [lindex $ltags 1] 2 end]
1176
+ if {[llength [set cmd [Widget::getoption $path -draginitcmd]]]} {
1177
+ return [uplevel \#0 $cmd [list $path $item $top]]
1178
+ }
1179
+ if { [set type [Widget::getoption $path -dragtype]] == "" } {
1180
+ set type "LISTBOX_ITEM"
1181
+ }
1182
+ if { [set img [Widget::getoption $path.$item -image]] != "" } {
1183
+ pack [label $top.l -image $img -padx 0 -pady 0]
1184
+ }
1185
+ return [list $type {copy move link} $item]
1186
+ }
1187
+ return {}
1188
+ }
1189
+
1190
+
1191
+ # ----------------------------------------------------------------------------
1192
+ # Command ListBox::_drop_cmd
1193
+ # ----------------------------------------------------------------------------
1194
+ proc ListBox::_drop_cmd { path source X Y op type dnddata } {
1195
+ set path [winfo parent $path]
1196
+ variable $path
1197
+ upvar 0 $path data
1198
+
1199
+ if { [string length $data(dnd,afterid)] } {
1200
+ after cancel $data(dnd,afterid)
1201
+ set data(dnd,afterid) ""
1202
+ }
1203
+ $path.c delete drop
1204
+ set data(dnd,scroll) ""
1205
+ if { [llength $data(dnd,item)] || ![llength $data(items)] } {
1206
+ if {[llength [set cmd [Widget::getoption $path -dropcmd]]]} {
1207
+ return [uplevel \#0 $cmd [list $path $source $data(dnd,item) $op $type $dnddata]]
1208
+ }
1209
+ }
1210
+ return 0
1211
+ }
1212
+
1213
+
1214
+ # ----------------------------------------------------------------------------
1215
+ # Command ListBox::_over_cmd
1216
+ # ----------------------------------------------------------------------------
1217
+ proc ListBox::_over_cmd { path source event X Y op type dnddata } {
1218
+ set path [winfo parent $path]
1219
+ variable $path
1220
+ upvar 0 $path data
1221
+
1222
+ if { [string equal $event "leave"] } {
1223
+ # we leave the window listbox
1224
+ $path.c delete drop
1225
+ if { [string length $data(dnd,afterid)] } {
1226
+ after cancel $data(dnd,afterid)
1227
+ set data(dnd,afterid) ""
1228
+ }
1229
+ set data(dnd,scroll) ""
1230
+ return 0
1231
+ }
1232
+
1233
+ if { [string equal $event "enter"] } {
1234
+ # we enter the window listbox - dnd data initialization
1235
+ set mode [Widget::getoption $path -dropovermode]
1236
+ set data(dnd,mode) 0
1237
+ foreach c {w p i} {
1238
+ set data(dnd,mode) [expr {($data(dnd,mode) << 1) | ([string first $c $mode] != -1)}]
1239
+ }
1240
+ }
1241
+
1242
+ set x [expr {$X-[winfo rootx $path]}]
1243
+ set y [expr {$Y-[winfo rooty $path]}]
1244
+ $path.c delete drop
1245
+ set data(dnd,item) ""
1246
+
1247
+ # test for auto-scroll unless mode is widget only
1248
+ if { $data(dnd,mode) != 4 && [_auto_scroll $path $x $y] != "" } {
1249
+ return 2
1250
+ }
1251
+
1252
+ if { $data(dnd,mode) & 4 } {
1253
+ # dropovermode includes widget
1254
+ set target [list widget]
1255
+ set vmode 4
1256
+ } else {
1257
+ set target [list ""]
1258
+ set vmode 0
1259
+ }
1260
+ if { ($data(dnd,mode) & 2) && ![llength $data(items)] } {
1261
+ # dropovermode includes position and listbox is empty
1262
+ lappend target "" 0
1263
+ set vmode [expr {$vmode | 2}]
1264
+ }
1265
+
1266
+ if { ($data(dnd,mode) & 3) && [llength $data(items)]} {
1267
+ # dropovermode includes item or position
1268
+ # we extract the box (xi,yi,xs,ys) where we can find item around x,y
1269
+ set len [llength $data(items)]
1270
+ set xc [$path.c canvasx $x]
1271
+ set yc [$path.c canvasy $y]
1272
+ set dy [$path.c cget -yscrollincrement]
1273
+ set line [expr {int($yc/$dy)}]
1274
+ set yi [expr {$line*$dy}]
1275
+ set ys [expr {$yi+$dy}]
1276
+ set xi 0
1277
+ set pos $line
1278
+ if { [Widget::getoption $path -multicolumn] } {
1279
+ set nrows $data(nrows)
1280
+ } else {
1281
+ set nrows $len
1282
+ }
1283
+ if { $line < $nrows } {
1284
+ foreach xs $data(xlist) {
1285
+ if { $xc <= $xs } {
1286
+ break
1287
+ }
1288
+ set xi $xs
1289
+ incr pos $nrows
1290
+ }
1291
+ if { $pos < $len } {
1292
+ set item [lindex $data(items) $pos]
1293
+ set xi [expr {[lindex [$path.c coords n:$item] 0]-[Widget::getoption $path -padx]-1}]
1294
+ if { $data(dnd,mode) & 1 } {
1295
+ # dropovermode includes item
1296
+ lappend target $item
1297
+ set vmode [expr {$vmode | 1}]
1298
+ } else {
1299
+ lappend target ""
1300
+ }
1301
+
1302
+ if { $data(dnd,mode) & 2 } {
1303
+ # dropovermode includes position
1304
+ if { $yc >= $yi+$dy/2 } {
1305
+ # position is after $item
1306
+ incr pos
1307
+ set yl $ys
1308
+ } else {
1309
+ # position is before $item
1310
+ set yl $yi
1311
+ }
1312
+ lappend target $pos
1313
+ set vmode [expr {$vmode | 2}]
1314
+ } else {
1315
+ lappend target ""
1316
+ }
1317
+ } else {
1318
+ lappend target "" ""
1319
+ }
1320
+ } else {
1321
+ lappend target "" ""
1322
+ }
1323
+
1324
+ if { ($vmode & 3) == 3 } {
1325
+ # result have both item and position
1326
+ # we compute what is the preferred method
1327
+ if { $yc-$yi <= 3 || $ys-$yc <= 3 } {
1328
+ lappend target "position"
1329
+ } else {
1330
+ lappend target "item"
1331
+ }
1332
+ }
1333
+ }
1334
+
1335
+ if {$vmode && [llength [set cmd [Widget::getoption $path -dropovercmd]]]} {
1336
+ # user-defined dropover command
1337
+ set res [uplevel \#0 $cmd [list $source $target $op $type $dnddata]]
1338
+ set code [lindex $res 0]
1339
+ set vmode 0
1340
+ if {$code & 1} {
1341
+ # update vmode
1342
+ switch -exact -- [lindex $res 1] {
1343
+ item {set vmode 1}
1344
+ position {set vmode 2}
1345
+ widget {set vmode 4}
1346
+ }
1347
+ }
1348
+ } else {
1349
+ if { ($vmode & 3) == 3 } {
1350
+ # result have both item and position
1351
+ # we choose the preferred method
1352
+ if { [string equal [lindex $target 3] "position"] } {
1353
+ set vmode [expr {$vmode & ~1}]
1354
+ } else {
1355
+ set vmode [expr {$vmode & ~2}]
1356
+ }
1357
+ }
1358
+
1359
+ if { $data(dnd,mode) == 4 || $data(dnd,mode) == 0 } {
1360
+ # dropovermode is widget or empty - recall is not necessary
1361
+ set code 1
1362
+ } else {
1363
+ set code 3
1364
+ }
1365
+ }
1366
+
1367
+ # draw dnd visual following vmode
1368
+ if {[llength $data(items)]} {
1369
+ if { $vmode & 1 } {
1370
+ set data(dnd,item) [list "item" [lindex $target 1]]
1371
+ $path.c create rectangle $xi $yi $xs $ys -tags drop
1372
+ } elseif { $vmode & 2 } {
1373
+ set data(dnd,item) [concat "position" [lindex $target 2]]
1374
+ $path.c create line $xi $yl $xs $yl -tags drop
1375
+ } elseif { $vmode & 4 } {
1376
+ set data(dnd,item) [list "widget"]
1377
+ } else {
1378
+ set code [expr {$code & 2}]
1379
+ }
1380
+ }
1381
+
1382
+ if { $code & 1 } {
1383
+ DropSite::setcursor based_arrow_down
1384
+ } else {
1385
+ DropSite::setcursor dot
1386
+ }
1387
+ return $code
1388
+ }
1389
+
1390
+
1391
+ # ----------------------------------------------------------------------------
1392
+ # Command ListBox::_auto_scroll
1393
+ # ----------------------------------------------------------------------------
1394
+ proc ListBox::_auto_scroll { path x y } {
1395
+ variable $path
1396
+ upvar 0 $path data
1397
+
1398
+ set xmax [winfo width $path]
1399
+ set ymax [winfo height $path]
1400
+ set scroll {}
1401
+ if { $y <= 6 } {
1402
+ if { [lindex [$path.c yview] 0] > 0 } {
1403
+ set scroll [list yview -1]
1404
+ DropSite::setcursor sb_up_arrow
1405
+ }
1406
+ } elseif { $y >= $ymax-6 } {
1407
+ if { [lindex [$path.c yview] 1] < 1 } {
1408
+ set scroll [list yview 1]
1409
+ DropSite::setcursor sb_down_arrow
1410
+ }
1411
+ } elseif { $x <= 6 } {
1412
+ if { [lindex [$path.c xview] 0] > 0 } {
1413
+ set scroll [list xview -1]
1414
+ DropSite::setcursor sb_left_arrow
1415
+ }
1416
+ } elseif { $x >= $xmax-6 } {
1417
+ if { [lindex [$path.c xview] 1] < 1 } {
1418
+ set scroll [list xview 1]
1419
+ DropSite::setcursor sb_right_arrow
1420
+ }
1421
+ }
1422
+
1423
+ if { [string length $data(dnd,afterid)] && ![string equal $data(dnd,scroll) $scroll] } {
1424
+ after cancel $data(dnd,afterid)
1425
+ set data(dnd,afterid) ""
1426
+ }
1427
+
1428
+ set data(dnd,scroll) $scroll
1429
+ if { [llength $scroll] && ![string length $data(dnd,afterid)] } {
1430
+ set data(dnd,afterid) [after 200 [list ListBox::_scroll $path $scroll]]
1431
+ }
1432
+ return $data(dnd,afterid)
1433
+
1434
+ }
1435
+
1436
+ # -----------------------------------------------------------------------------
1437
+ # Command ListBox::_multiple_select
1438
+ # -----------------------------------------------------------------------------
1439
+ proc ListBox::_multiple_select { path mode x y idx } {
1440
+
1441
+ variable $path
1442
+ upvar 0 $path data
1443
+
1444
+
1445
+ if { ![info exists data(anchor)] || ![info exists data(sel_anchor)] } {
1446
+ set data(anchor) $idx
1447
+ set data(sel_anchor) {}
1448
+ }
1449
+
1450
+ switch -exact -- $mode {
1451
+ n {
1452
+ _mouse_select $path set $idx
1453
+ set data(anchor) $idx
1454
+ set data(sel_anchor) {}
1455
+ }
1456
+ c {
1457
+ set l [_mouse_select $path get]
1458
+ if { [lsearch -exact $l $idx] >= 0 } {
1459
+ _mouse_select $path remove $idx
1460
+ } else {
1461
+ _mouse_select $path add $idx
1462
+ }
1463
+ set data(anchor) $idx
1464
+ set data(sel_anchor) {}
1465
+ }
1466
+ s {
1467
+ eval [list $path _mouse_select remove] $data(sel_anchor)
1468
+
1469
+ set ix [$path index $idx]
1470
+ set ia [$path index $data(anchor)]
1471
+ if { $ix > $ia } {
1472
+ set istart $ia
1473
+ set iend $ix
1474
+ } else {
1475
+ set istart $ix
1476
+ set iend $ia
1477
+ }
1478
+
1479
+ for { set i $istart } { $i <= $iend } { incr i } {
1480
+ set l [$path selection get]
1481
+ set t [$path items $i]
1482
+ set li [lsearch -exact $l $t]
1483
+ if { $li < 0 } {
1484
+ _mouse_select $path add $t
1485
+ lappend data(sel_anchor) $t
1486
+ }
1487
+ }
1488
+ }
1489
+ }
1490
+ }
1491
+
1492
+
1493
+ # ----------------------------------------------------------------------------
1494
+ # Command ListBox::_scroll
1495
+ # ----------------------------------------------------------------------------
1496
+ proc ListBox::_scroll { path cmd dir } {
1497
+ variable $path
1498
+ upvar 0 $path data
1499
+
1500
+ if { ($dir == -1 && [lindex [$path.c $cmd] 0] > 0) ||
1501
+ ($dir == 1 && [lindex [$path.c $cmd] 1] < 1) } {
1502
+ $path $cmd scroll $dir units
1503
+ set data(dnd,afterid) \
1504
+ [after 100 [list ListBox::_scroll $path $cmd $dir]]
1505
+ } else {
1506
+ set data(dnd,afterid) ""
1507
+ DropSite::setcursor dot
1508
+ }
1509
+ }
1510
+
1511
+ # ListBox::_set_help --
1512
+ #
1513
+ # Register dynamic help for an item in the listbox.
1514
+ #
1515
+ # Arguments:
1516
+ # path ListBox to query
1517
+ # item Item in the listbox
1518
+ # force Optional argument to force a reset of the help
1519
+ #
1520
+ # Results:
1521
+ # none
1522
+ proc ListBox::_set_help { path node } {
1523
+ Widget::getVariable $path help
1524
+
1525
+ set item $path.$node
1526
+ set opts [list -helptype -helptext -helpvar]
1527
+ foreach {cty ctx cv} [eval [linsert $opts 0 Widget::hasChangedX $item]] break
1528
+ set text [Widget::getoption $item -helptext]
1529
+
1530
+ ## If we've never set help for this item before, and text is not blank,
1531
+ ## we need to setup help. We also need to reset help if any of the
1532
+ ## options have changed.
1533
+ if { (![info exists help($node)] && $text != "") || $cty || $ctx || $cv } {
1534
+ set help($node) 1
1535
+ set type [Widget::getoption $item -helptype]
1536
+ switch $type {
1537
+ balloon {
1538
+ DynamicHelp::register $path.c balloon n:$node $text
1539
+ DynamicHelp::register $path.c balloon i:$node $text
1540
+ DynamicHelp::register $path.c balloon b:$node $text
1541
+ }
1542
+ variable {
1543
+ set var [Widget::getoption $item -helpvar]
1544
+ DynamicHelp::register $path.c variable n:$node $var $text
1545
+ DynamicHelp::register $path.c variable i:$node $var $text
1546
+ DynamicHelp::register $path.c variable b:$node $var $text
1547
+ }
1548
+ }
1549
+ }
1550
+ }
1551
+
1552
+ # ListBox::_mouse_select --
1553
+ #
1554
+ # Handle selection commands that are done by the mouse. If the
1555
+ # selection command returns true, we generate a <<ListboxSelect>>
1556
+ # event for the listbox.
1557
+ #
1558
+ # Arguments:
1559
+ # Standard arguments passed to a selection command.
1560
+ #
1561
+ # Results:
1562
+ # none
1563
+ proc ListBox::_mouse_select { path cmd args } {
1564
+ eval [linsert $args 0 selection $path $cmd]
1565
+ switch -- $cmd {
1566
+ "add" - "clear" - "remove" - "set" {
1567
+ event generate $path <<ListboxSelect>>
1568
+ }
1569
+ }
1570
+ }
1571
+
1572
+
1573
+ proc ListBox::_get_current { path } {
1574
+ set t [$path.c gettags current]
1575
+ return [string range [lindex $t 1] 2 end]
1576
+ }
1577
+
1578
+
1579
+ # ListBox::_drag_and_drop --
1580
+ #
1581
+ # A default command to handle drag-and-drop functions local to this
1582
+ # listbox. With this as the default -dropcmd, the user can simply
1583
+ # enable drag-and-drop and be able to move items within this list
1584
+ # with no further code.
1585
+ #
1586
+ # Arguments:
1587
+ # Standard arguments passed to a dropcmd.
1588
+ #
1589
+ # Results:
1590
+ # none
1591
+ proc ListBox::_drag_and_drop { path from endItem operation type startItem } {
1592
+ set items [$path items]
1593
+
1594
+ ## This proc only handles drag-and-drop commands within itself.
1595
+ ## If the widget this came from is not our widget (minus the canvas),
1596
+ ## we don't want to do anything. They need to handle this themselves.
1597
+ if {[winfo parent $from] != $path} { return }
1598
+
1599
+ set place [lindex $endItem 0]
1600
+ set i [lindex $endItem 1]
1601
+
1602
+ switch -- $place {
1603
+ "position" {
1604
+ set idx $i
1605
+ }
1606
+
1607
+ "item" {
1608
+ set idx [$path index $i]
1609
+ }
1610
+ }
1611
+
1612
+ if {$idx > [$path index $startItem]} { incr idx -1 }
1613
+
1614
+ if {[string equal $operation "copy"]} {
1615
+ set options [Widget::options $path.$startItem]
1616
+ eval [linsert $options 0 $path insert $idx $startItem\#auto]
1617
+ } else {
1618
+ $path move $startItem $idx
1619
+ }
1620
+ }
1621
+
1622
+
1623
+ proc ListBox::_keyboard_navigation { path dir } {
1624
+ variable $path
1625
+ upvar 0 $path data
1626
+
1627
+ set sel [$path index [lindex [$path selection get] end]]
1628
+ if {$dir > 0} {
1629
+ incr sel
1630
+ if {$sel >= [llength $data(items)]} { return }
1631
+ } else {
1632
+ incr sel -1
1633
+ if {$sel < 0} { return }
1634
+ }
1635
+ set item [lindex $data(items) $sel]
1636
+ $path see $item
1637
+ _mouse_select $path set $item
1638
+ }