arcadia 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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,128 @@
1
+ # ------------------------------------------------------------------------------
2
+ # messagedlg.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # ------------------------------------------------------------------------------
5
+ # Index of commands:
6
+ # - MessageDlg::create
7
+ # ------------------------------------------------------------------------------
8
+
9
+ namespace eval MessageDlg {
10
+ Widget::define MessageDlg messagedlg Dialog
11
+
12
+ Widget::tkinclude MessageDlg message .frame.msg \
13
+ remove [list -cursor -highlightthickness \
14
+ -highlightbackground -highlightcolor \
15
+ -relief -borderwidth -takefocus -textvariable \
16
+ ] \
17
+ rename [list -text -message] \
18
+ initialize [list -aspect 800 -anchor c -justify center]
19
+
20
+ Widget::bwinclude MessageDlg Dialog :cmd \
21
+ remove [list -modal -image -bitmap -side -anchor -separator \
22
+ -homogeneous -padx -pady -spacing]
23
+
24
+ Widget::declare MessageDlg {
25
+ {-icon Enum info 0 {none error info question warning}}
26
+ {-type Enum user 0 {abortretryignore ok okcancel \
27
+ retrycancel yesno yesnocancel user}}
28
+ {-buttons String "" 0}
29
+ {-buttonwidth String 0 0}
30
+ }
31
+
32
+ Widget::addmap MessageDlg "" tkMBox {
33
+ -parent {} -message {} -default {} -title {}
34
+ }
35
+ }
36
+
37
+
38
+ # ------------------------------------------------------------------------------
39
+ # Command MessageDlg::create
40
+ # ------------------------------------------------------------------------------
41
+ proc MessageDlg::create { path args } {
42
+ global tcl_platform
43
+
44
+ array set maps [list MessageDlg {} :cmd {} .frame.msg {} tkMBox {}]
45
+ array set maps [Widget::parseArgs MessageDlg $args]
46
+ Widget::initFromODB MessageDlg "$path#Message" $maps(MessageDlg)
47
+
48
+ array set dialogArgs $maps(:cmd)
49
+
50
+ set type [Widget::cget "$path#Message" -type]
51
+ set icon [Widget::cget "$path#Message" -icon]
52
+ set width [Widget::cget "$path#Message" -buttonwidth]
53
+
54
+ set defb -1
55
+ set canb -1
56
+ switch -- $type {
57
+ abortretryignore {set lbut {abort retry ignore}; set defb 0}
58
+ ok {set lbut {ok}; set defb 0 }
59
+ okcancel {set lbut {ok cancel}; set defb 0; set canb 1}
60
+ retrycancel {set lbut {retry cancel}; set defb 0; set canb 1}
61
+ yesno {set lbut {yes no}; set defb 0; set canb 1}
62
+ yesnocancel {set lbut {yes no cancel}; set defb 0; set canb 2}
63
+ user {set lbut [Widget::cget "$path#Message" -buttons]}
64
+ }
65
+
66
+ # If the user didn't specify a default button, use our type-specific
67
+ # default, adding its flag/value to the "user" settings and to the tkMBox
68
+ # settings
69
+ if { ![info exists dialogArgs(-default)] } {
70
+ lappend maps(:cmd) -default $defb
71
+ lappend maps(tkMBox) -default $defb
72
+ }
73
+ if { ![info exists dialogArgs(-cancel)] } {
74
+ lappend maps(:cmd) -cancel $canb
75
+ }
76
+
77
+ # Same with title as with default
78
+ if { ![info exists dialogArgs(-title)] } {
79
+ set frame [frame $path -class MessageDlg]
80
+ set title [option get $frame "${icon}Title" MessageDlg]
81
+ destroy $frame
82
+ if { $title == "" } {
83
+ set title "Message"
84
+ }
85
+ lappend maps(:cmd) -title $title
86
+ lappend maps(tkMBox) -title $title
87
+ }
88
+
89
+ # Create the "user" type dialog
90
+ if { $type == "user" } {
91
+ if { $icon != "none" } {
92
+ set image [Bitmap::get $icon]
93
+ } else {
94
+ set image ""
95
+ }
96
+ eval [list Dialog::create $path] $maps(:cmd) \
97
+ [list -image $image -modal local -side bottom -anchor e]
98
+ foreach but $lbut {
99
+ Dialog::add $path -text $but -name $but -width $width
100
+ }
101
+ set frame [Dialog::getframe $path]
102
+
103
+ eval [list message $frame.msg] $maps(.frame.msg) \
104
+ [list -relief flat -borderwidth 0 -highlightthickness 0 \
105
+ -textvariable ""]
106
+ pack $frame.msg -side left -padx 3m -pady 1m -fill x -expand yes
107
+
108
+ set res [Dialog::draw $path]
109
+ destroy $path
110
+ } else {
111
+ # Do some translation of args into tk_messageBox syntax, then create
112
+ # the tk_messageBox
113
+ array set tkMBoxArgs $maps(tkMBox)
114
+ set tkMBoxArgs(-default) [lindex $lbut $tkMBoxArgs(-default)]
115
+ if { ![string equal $icon "none"] } {
116
+ set tkMBoxArgs(-icon) $icon
117
+ }
118
+ if {[info exists tkMBoxArgs(-parent)]
119
+ && ![winfo exists $tkMBoxArgs(-parent)]} {
120
+ unset tkMBoxArgs(-parent)
121
+ }
122
+ set tkMBoxArgs(-type) $type
123
+ set res [eval [list tk_messageBox] [array get tkMBoxArgs]]
124
+ set res [lsearch $lbut $res]
125
+ }
126
+ Widget::destroy "$path#Message"
127
+ return $res
128
+ }
@@ -0,0 +1,1164 @@
1
+ # ---------------------------------------------------------------------------
2
+ # notebook.tcl
3
+ # This file is part of Unifix BWidget Toolkit
4
+ # $Id: notebook.tcl,v 1.23 2005/01/26 01:01:26 hobbs Exp $
5
+ # ---------------------------------------------------------------------------
6
+ # Index of commands:
7
+ # - NoteBook::create
8
+ # - NoteBook::configure
9
+ # - NoteBook::cget
10
+ # - NoteBook::compute_size
11
+ # - NoteBook::insert
12
+ # - NoteBook::delete
13
+ # - NoteBook::itemconfigure
14
+ # - NoteBook::itemcget
15
+ # - NoteBook::bindtabs
16
+ # - NoteBook::raise
17
+ # - NoteBook::see
18
+ # - NoteBook::page
19
+ # - NoteBook::pages
20
+ # - NoteBook::index
21
+ # - NoteBook::getframe
22
+ # - NoteBook::_test_page
23
+ # - NoteBook::_itemconfigure
24
+ # - NoteBook::_compute_width
25
+ # - NoteBook::_get_x_page
26
+ # - NoteBook::_xview
27
+ # - NoteBook::_highlight
28
+ # - NoteBook::_select
29
+ # - NoteBook::_redraw
30
+ # - NoteBook::_draw_page
31
+ # - NoteBook::_draw_arrows
32
+ # - NoteBook::_draw_area
33
+ # - NoteBook::_resize
34
+ # ---------------------------------------------------------------------------
35
+
36
+ namespace eval NoteBook {
37
+ Widget::define NoteBook notebook ArrowButton DynamicHelp
38
+
39
+ namespace eval Page {
40
+ Widget::declare NoteBook::Page {
41
+ {-state Enum normal 0 {normal disabled}}
42
+ {-createcmd String "" 0}
43
+ {-raisecmd String "" 0}
44
+ {-leavecmd String "" 0}
45
+ {-image TkResource "" 0 label}
46
+ {-text String "" 0}
47
+ {-foreground String "" 0}
48
+ {-background String "" 0}
49
+ {-activeforeground String "" 0}
50
+ {-activebackground String "" 0}
51
+ {-disabledforeground String "" 0}
52
+ }
53
+ }
54
+
55
+ DynamicHelp::include NoteBook::Page balloon
56
+
57
+ Widget::bwinclude NoteBook ArrowButton .c.fg \
58
+ include {-foreground -background -activeforeground \
59
+ -activebackground -disabledforeground -repeatinterval \
60
+ -repeatdelay -borderwidth} \
61
+ initialize {-borderwidth 1}
62
+ Widget::bwinclude NoteBook ArrowButton .c.fd \
63
+ include {-foreground -background -activeforeground \
64
+ -activebackground -disabledforeground -repeatinterval \
65
+ -repeatdelay -borderwidth} \
66
+ initialize {-borderwidth 1}
67
+
68
+ Widget::declare NoteBook {
69
+ {-foreground TkResource "" 0 button}
70
+ {-background TkResource "" 0 button}
71
+ {-activebackground TkResource "" 0 button}
72
+ {-activeforeground TkResource "" 0 button}
73
+ {-disabledforeground TkResource "" 0 button}
74
+ {-font TkResource "" 0 button}
75
+ {-side Enum top 0 {top bottom}}
76
+ {-homogeneous Boolean 0 0}
77
+ {-borderwidth Int 1 0 "%d >= 1 && %d <= 2"}
78
+ {-internalborderwidth Int 10 0 "%d >= 0"}
79
+ {-width Int 0 0 "%d >= 0"}
80
+ {-height Int 0 0 "%d >= 0"}
81
+
82
+ {-repeatdelay BwResource "" 0 ArrowButton}
83
+ {-repeatinterval BwResource "" 0 ArrowButton}
84
+
85
+ {-fg Synonym -foreground}
86
+ {-bg Synonym -background}
87
+ {-bd Synonym -borderwidth}
88
+ {-ibd Synonym -internalborderwidth}
89
+
90
+ {-arcradius Int 2 0 "%d >= 0 && %d <= 8"}
91
+ {-tabbevelsize Int 0 0 "%d >= 0 && %d <= 8"}
92
+ {-tabpady Padding {0 6} 0 "%d >= 0"}
93
+ }
94
+
95
+ Widget::addmap NoteBook "" .c {-background {}}
96
+
97
+ variable _warrow 12
98
+
99
+ bind NoteBook <Configure> [list NoteBook::_resize %W]
100
+ bind NoteBook <Destroy> [list NoteBook::_destroy %W]
101
+ }
102
+
103
+
104
+ # ---------------------------------------------------------------------------
105
+ # Command NoteBook::create
106
+ # ---------------------------------------------------------------------------
107
+ proc NoteBook::create { path args } {
108
+ variable $path
109
+ upvar 0 $path data
110
+
111
+ Widget::init NoteBook $path $args
112
+
113
+ set data(base) 0
114
+ set data(select) ""
115
+ set data(pages) {}
116
+ set data(pages) {}
117
+ set data(cpt) 0
118
+ set data(realized) 0
119
+ set data(wpage) 0
120
+
121
+ _compute_height $path
122
+
123
+ # Create the canvas
124
+ set w [expr {[Widget::cget $path -width]+4}]
125
+ set h [expr {[Widget::cget $path -height]+$data(hpage)+4}]
126
+
127
+ frame $path -class NoteBook -borderwidth 0 -highlightthickness 0 \
128
+ -relief flat
129
+ eval [list canvas $path.c] [Widget::subcget $path .c] \
130
+ [list -relief flat -borderwidth 0 -highlightthickness 0 \
131
+ -width $w -height $h]
132
+ pack $path.c -expand yes -fill both
133
+
134
+ # Removing the Canvas global bindings from our canvas as
135
+ # application specific bindings on that tag may interfere with its
136
+ # operation here. [SF item #459033]
137
+
138
+ set bindings [bindtags $path.c]
139
+ set pos [lsearch -exact $bindings Canvas]
140
+ if {$pos >= 0} {
141
+ set bindings [lreplace $bindings $pos $pos]
142
+ }
143
+ bindtags $path.c $bindings
144
+
145
+ # Create the arrow button
146
+ eval [list ArrowButton::create $path.c.fg] [Widget::subcget $path .c.fg] \
147
+ [list -highlightthickness 0 -type button -dir left \
148
+ -armcommand [list NoteBook::_xview $path -1]]
149
+
150
+ eval [list ArrowButton::create $path.c.fd] [Widget::subcget $path .c.fd] \
151
+ [list -highlightthickness 0 -type button -dir right \
152
+ -armcommand [list NoteBook::_xview $path 1]]
153
+
154
+ Widget::create NoteBook $path
155
+
156
+ set bg [Widget::cget $path -background]
157
+ foreach {data(dbg) data(lbg)} [BWidget::get3dcolor $path $bg] {break}
158
+
159
+ return $path
160
+ }
161
+
162
+
163
+ # ---------------------------------------------------------------------------
164
+ # Command NoteBook::configure
165
+ # ---------------------------------------------------------------------------
166
+ proc NoteBook::configure { path args } {
167
+ variable $path
168
+ upvar 0 $path data
169
+
170
+ set res [Widget::configure $path $args]
171
+ set redraw 0
172
+ set opts [list -font -homogeneous -tabpady]
173
+ foreach {cf ch cp} [eval Widget::hasChangedX $path $opts] {break}
174
+ if {$cf || $ch || $cp} {
175
+ if { $cf || $cp } {
176
+ _compute_height $path
177
+ }
178
+ _compute_width $path
179
+ set redraw 1
180
+ }
181
+ set chibd [Widget::hasChanged $path -internalborderwidth ibd]
182
+ set chbg [Widget::hasChanged $path -background bg]
183
+ if {$chibd || $chbg} {
184
+ foreach page $data(pages) {
185
+ $path.f$page configure \
186
+ -borderwidth $ibd -background $bg
187
+ }
188
+ }
189
+
190
+ if {$chbg} {
191
+ set col [BWidget::get3dcolor $path $bg]
192
+ set data(dbg) [lindex $col 0]
193
+ set data(lbg) [lindex $col 1]
194
+ set redraw 1
195
+ }
196
+ if { [Widget::hasChanged $path -foreground fg] ||
197
+ [Widget::hasChanged $path -borderwidth bd] ||
198
+ [Widget::hasChanged $path -arcradius radius] ||
199
+ [Widget::hasChanged $path -tabbevelsize bevel] ||
200
+ [Widget::hasChanged $path -side side] } {
201
+ set redraw 1
202
+ }
203
+ set wc [Widget::hasChanged $path -width w]
204
+ set hc [Widget::hasChanged $path -height h]
205
+ if { $wc || $hc } {
206
+ $path.c configure \
207
+ -width [expr {$w + 4}] \
208
+ -height [expr {$h + $data(hpage) + 4}]
209
+ }
210
+ if { $redraw } {
211
+ _redraw $path
212
+ }
213
+
214
+ return $res
215
+ }
216
+
217
+
218
+ # ---------------------------------------------------------------------------
219
+ # Command NoteBook::cget
220
+ # ---------------------------------------------------------------------------
221
+ proc NoteBook::cget { path option } {
222
+ return [Widget::cget $path $option]
223
+ }
224
+
225
+
226
+ # ---------------------------------------------------------------------------
227
+ # Command NoteBook::compute_size
228
+ # ---------------------------------------------------------------------------
229
+ proc NoteBook::compute_size { path } {
230
+ variable $path
231
+ upvar 0 $path data
232
+
233
+ set wmax 0
234
+ set hmax 0
235
+ update idletasks
236
+ foreach page $data(pages) {
237
+ set w [winfo reqwidth $path.f$page]
238
+ set h [winfo reqheight $path.f$page]
239
+ set wmax [expr {$w>$wmax ? $w : $wmax}]
240
+ set hmax [expr {$h>$hmax ? $h : $hmax}]
241
+ }
242
+ configure $path -width $wmax -height $hmax
243
+ # Sven... well ok so this is called twice in some cases...
244
+ NoteBook::_redraw $path
245
+ # Sven end
246
+ }
247
+
248
+
249
+ # ---------------------------------------------------------------------------
250
+ # Command NoteBook::insert
251
+ # ---------------------------------------------------------------------------
252
+ proc NoteBook::insert { path index page args } {
253
+ variable $path
254
+ upvar 0 $path data
255
+
256
+ if { [lsearch -exact $data(pages) $page] != -1 } {
257
+ return -code error "page \"$page\" already exists"
258
+ }
259
+
260
+ set f $path.f$page
261
+ Widget::init NoteBook::Page $f $args
262
+
263
+ set data(pages) [linsert $data(pages) $index $page]
264
+ # If the page doesn't exist, create it; if it does reset its bg and ibd
265
+ if { ![winfo exists $f] } {
266
+ frame $f \
267
+ -relief flat \
268
+ -background [Widget::cget $path -background] \
269
+ -borderwidth [Widget::cget $path -internalborderwidth]
270
+ set data($page,realized) 0
271
+ } else {
272
+ $f configure \
273
+ -background [Widget::cget $path -background] \
274
+ -borderwidth [Widget::cget $path -internalborderwidth]
275
+ }
276
+ _compute_height $path
277
+ _compute_width $path
278
+ _draw_page $path $page 1
279
+ _set_help $path $page
280
+ _redraw $path
281
+
282
+ return $f
283
+ }
284
+
285
+
286
+ # ---------------------------------------------------------------------------
287
+ # Command NoteBook::delete
288
+ # ---------------------------------------------------------------------------
289
+ proc NoteBook::delete { path page {destroyframe 1} } {
290
+ variable $path
291
+ upvar 0 $path data
292
+
293
+ set pos [_test_page $path $page]
294
+ set data(pages) [lreplace $data(pages) $pos $pos]
295
+ _compute_width $path
296
+ $path.c delete p:$page
297
+ if { $data(select) == $page } {
298
+ set data(select) ""
299
+ }
300
+ if { $pos < $data(base) } {
301
+ incr data(base) -1
302
+ }
303
+ if { $destroyframe } {
304
+ destroy $path.f$page
305
+ }
306
+ _redraw $path
307
+ }
308
+
309
+
310
+ # ---------------------------------------------------------------------------
311
+ # Command NoteBook::itemconfigure
312
+ # ---------------------------------------------------------------------------
313
+ proc NoteBook::itemconfigure { path page args } {
314
+ _test_page $path $page
315
+ set res [_itemconfigure $path $page $args]
316
+ _redraw $path
317
+
318
+ return $res
319
+ }
320
+
321
+
322
+ # ---------------------------------------------------------------------------
323
+ # Command NoteBook::itemcget
324
+ # ---------------------------------------------------------------------------
325
+ proc NoteBook::itemcget { path page option } {
326
+ _test_page $path $page
327
+ return [Widget::cget $path.f$page $option]
328
+ }
329
+
330
+
331
+ # ---------------------------------------------------------------------------
332
+ # Command NoteBook::bindtabs
333
+ # ---------------------------------------------------------------------------
334
+ proc NoteBook::bindtabs { path event script } {
335
+ if { $script != "" } {
336
+ append script " \[NoteBook::_get_page_name [list $path] current 1\]"
337
+ $path.c bind "page" $event $script
338
+ } else {
339
+ $path.c bind "page" $event {}
340
+ }
341
+ }
342
+
343
+
344
+ # ---------------------------------------------------------------------------
345
+ # Command NoteBook::move
346
+ # ---------------------------------------------------------------------------
347
+ proc NoteBook::move { path page index } {
348
+ variable $path
349
+ upvar 0 $path data
350
+
351
+ set pos [_test_page $path $page]
352
+ set data(pages) [linsert [lreplace $data(pages) $pos $pos] $index $page]
353
+ _redraw $path
354
+ }
355
+
356
+
357
+ # ---------------------------------------------------------------------------
358
+ # Command NoteBook::raise
359
+ # ---------------------------------------------------------------------------
360
+ proc NoteBook::raise { path {page ""} } {
361
+ variable $path
362
+ upvar 0 $path data
363
+
364
+ if { $page != "" } {
365
+ _test_page $path $page
366
+ _select $path $page
367
+ }
368
+ return $data(select)
369
+ }
370
+
371
+
372
+ # ---------------------------------------------------------------------------
373
+ # Command NoteBook::see
374
+ # ---------------------------------------------------------------------------
375
+ proc NoteBook::see { path page } {
376
+ variable $path
377
+ upvar 0 $path data
378
+
379
+ set pos [_test_page $path $page]
380
+ if { $pos < $data(base) } {
381
+ set data(base) $pos
382
+ _redraw $path
383
+ } else {
384
+ set w [expr {[winfo width $path]-1}]
385
+ set fpage [expr {[_get_x_page $path $pos] + $data($page,width) + 6}]
386
+ set idx $data(base)
387
+ while { $idx < $pos && $fpage > $w } {
388
+ set fpage [expr {$fpage - $data([lindex $data(pages) $idx],width)}]
389
+ incr idx
390
+ }
391
+ if { $idx != $data(base) } {
392
+ set data(base) $idx
393
+ _redraw $path
394
+ }
395
+ }
396
+ }
397
+
398
+
399
+ # ---------------------------------------------------------------------------
400
+ # Command NoteBook::page
401
+ # ---------------------------------------------------------------------------
402
+ proc NoteBook::page { path first {last ""} } {
403
+ variable $path
404
+ upvar 0 $path data
405
+
406
+ if { $last == "" } {
407
+ return [lindex $data(pages) $first]
408
+ } else {
409
+ return [lrange $data(pages) $first $last]
410
+ }
411
+ }
412
+
413
+
414
+ # ---------------------------------------------------------------------------
415
+ # Command NoteBook::pages
416
+ # ---------------------------------------------------------------------------
417
+ proc NoteBook::pages { path {first ""} {last ""}} {
418
+ variable $path
419
+ upvar 0 $path data
420
+
421
+ if { ![string length $first] } {
422
+ return $data(pages)
423
+ }
424
+
425
+ if { ![string length $last] } {
426
+ return [lindex $data(pages) $first]
427
+ } else {
428
+ return [lrange $data(pages) $first $last]
429
+ }
430
+ }
431
+
432
+
433
+ # ---------------------------------------------------------------------------
434
+ # Command NoteBook::index
435
+ # ---------------------------------------------------------------------------
436
+ proc NoteBook::index { path page } {
437
+ variable $path
438
+ upvar 0 $path data
439
+
440
+ return [lsearch -exact $data(pages) $page]
441
+ }
442
+
443
+
444
+ # ---------------------------------------------------------------------------
445
+ # Command NoteBook::_destroy
446
+ # ---------------------------------------------------------------------------
447
+ proc NoteBook::_destroy { path } {
448
+ variable $path
449
+ upvar 0 $path data
450
+
451
+ foreach page $data(pages) {
452
+ Widget::destroy $path.f$page
453
+ }
454
+ Widget::destroy $path
455
+ unset data
456
+ }
457
+
458
+
459
+ # ---------------------------------------------------------------------------
460
+ # Command NoteBook::getframe
461
+ # ---------------------------------------------------------------------------
462
+ proc NoteBook::getframe { path page } {
463
+ return $path.f$page
464
+ }
465
+
466
+
467
+ # ---------------------------------------------------------------------------
468
+ # Command NoteBook::_test_page
469
+ # ---------------------------------------------------------------------------
470
+ proc NoteBook::_test_page { path page } {
471
+ variable $path
472
+ upvar 0 $path data
473
+
474
+ if { [set pos [lsearch -exact $data(pages) $page]] == -1 } {
475
+ return -code error "page \"$page\" does not exists"
476
+ }
477
+ return $pos
478
+ }
479
+
480
+ proc NoteBook::_getoption { path page option } {
481
+ set value [Widget::cget $path.f$page $option]
482
+ if {![string length $value]} {
483
+ set value [Widget::cget $path $option]
484
+ }
485
+ return $value
486
+ }
487
+
488
+ # ---------------------------------------------------------------------------
489
+ # Command NoteBook::_itemconfigure
490
+ # ---------------------------------------------------------------------------
491
+ proc NoteBook::_itemconfigure { path page lres } {
492
+ variable $path
493
+ upvar 0 $path data
494
+
495
+ set res [Widget::configure $path.f$page $lres]
496
+ if { [Widget::hasChanged $path.f$page -text foo] } {
497
+ _compute_width $path
498
+ } elseif { [Widget::hasChanged $path.f$page -image foo] } {
499
+ _compute_height $path
500
+ _compute_width $path
501
+ }
502
+ if { [Widget::hasChanged $path.f$page -state state] &&
503
+ $state == "disabled" && $data(select) == $page } {
504
+ set data(select) ""
505
+ }
506
+ return $res
507
+ }
508
+
509
+
510
+ # ---------------------------------------------------------------------------
511
+ # Command NoteBook::_compute_width
512
+ # ---------------------------------------------------------------------------
513
+ proc NoteBook::_compute_width { path } {
514
+ variable $path
515
+ upvar 0 $path data
516
+
517
+ set wmax 0
518
+ set wtot 0
519
+ set hmax $data(hpage)
520
+ set font [Widget::cget $path -font]
521
+ if { ![info exists data(textid)] } {
522
+ set data(textid) [$path.c create text 0 -100 -font $font -anchor nw]
523
+ }
524
+ set id $data(textid)
525
+ $path.c itemconfigure $id -font $font
526
+ foreach page $data(pages) {
527
+ $path.c itemconfigure $id -text [Widget::cget $path.f$page -text]
528
+ # Get the bbox for this text to determine its width, then substract
529
+ # 6 from the width to account for canvas bbox oddness w.r.t. widths of
530
+ # simple text.
531
+ foreach {x1 y1 x2 y2} [$path.c bbox $id] break
532
+ set x2 [expr {$x2 - 6}]
533
+ set wtext [expr {$x2 - $x1 + 20}]
534
+ if { [set img [Widget::cget $path.f$page -image]] != "" } {
535
+ set wtext [expr {$wtext + [image width $img] + 4}]
536
+ set himg [expr {[image height $img] + 6}]
537
+ if { $himg > $hmax } {
538
+ set hmax $himg
539
+ }
540
+ }
541
+ set wmax [expr {$wtext > $wmax ? $wtext : $wmax}]
542
+ incr wtot $wtext
543
+ set data($page,width) $wtext
544
+ }
545
+ if { [Widget::cget $path -homogeneous] } {
546
+ foreach page $data(pages) {
547
+ set data($page,width) $wmax
548
+ }
549
+ set wtot [expr {$wmax * [llength $data(pages)]}]
550
+ }
551
+ set data(hpage) $hmax
552
+ set data(wpage) $wtot
553
+ }
554
+
555
+
556
+ # ---------------------------------------------------------------------------
557
+ # Command NoteBook::_compute_height
558
+ # ---------------------------------------------------------------------------
559
+ proc NoteBook::_compute_height { path } {
560
+ variable $path
561
+ upvar 0 $path data
562
+
563
+ set font [Widget::cget $path -font]
564
+ set pady0 [Widget::_get_padding $path -tabpady 0]
565
+ set pady1 [Widget::_get_padding $path -tabpady 1]
566
+ set metrics [font metrics $font -linespace]
567
+ set imgh 0
568
+ set lines 1
569
+ foreach page $data(pages) {
570
+ set img [Widget::cget $path.f$page -image]
571
+ set text [Widget::cget $path.f$page -text]
572
+ set len [llength [split $text \n]]
573
+ if {$len > $lines} { set lines $len}
574
+ if {$img != ""} {
575
+ set h [image height $img]
576
+ if {$h > $imgh} { set imgh $h }
577
+ }
578
+ }
579
+ set height [expr {$metrics * $lines}]
580
+ if {$imgh > $height} { set height $imgh }
581
+ set data(hpage) [expr {$height + $pady0 + $pady1}]
582
+ }
583
+
584
+
585
+ # ---------------------------------------------------------------------------
586
+ # Command NoteBook::_get_x_page
587
+ # ---------------------------------------------------------------------------
588
+ proc NoteBook::_get_x_page { path pos } {
589
+ variable _warrow
590
+ variable $path
591
+ upvar 0 $path data
592
+
593
+ set base $data(base)
594
+ # notebook tabs start flush with the left side of the notebook
595
+ set x 0
596
+ if { $pos < $base } {
597
+ foreach page [lrange $data(pages) $pos [expr {$base-1}]] {
598
+ incr x [expr {-$data($page,width)}]
599
+ }
600
+ } elseif { $pos > $base } {
601
+ foreach page [lrange $data(pages) $base [expr {$pos-1}]] {
602
+ incr x $data($page,width)
603
+ }
604
+ }
605
+ return $x
606
+ }
607
+
608
+
609
+ # ---------------------------------------------------------------------------
610
+ # Command NoteBook::_xview
611
+ # ---------------------------------------------------------------------------
612
+ proc NoteBook::_xview { path inc } {
613
+ variable $path
614
+ upvar 0 $path data
615
+
616
+ if { $inc == -1 } {
617
+ set base [expr {$data(base)-1}]
618
+ set dx $data([lindex $data(pages) $base],width)
619
+ } else {
620
+ set dx [expr {-$data([lindex $data(pages) $data(base)],width)}]
621
+ set base [expr {$data(base)+1}]
622
+ }
623
+
624
+ if { $base >= 0 && $base < [llength $data(pages)] } {
625
+ set data(base) $base
626
+ $path.c move page $dx 0
627
+ _draw_area $path
628
+ _draw_arrows $path
629
+ }
630
+ }
631
+
632
+
633
+ # ---------------------------------------------------------------------------
634
+ # Command NoteBook::_highlight
635
+ # ---------------------------------------------------------------------------
636
+ proc NoteBook::_highlight { type path page } {
637
+ variable $path
638
+ upvar 0 $path data
639
+
640
+ if { [string equal [Widget::cget $path.f$page -state] "disabled"] } {
641
+ return
642
+ }
643
+
644
+ switch -- $type {
645
+ on {
646
+ $path.c itemconfigure "$page:poly" \
647
+ -fill [_getoption $path $page -activebackground]
648
+ $path.c itemconfigure "$page:text" \
649
+ -fill [_getoption $path $page -activeforeground]
650
+ }
651
+ off {
652
+ $path.c itemconfigure "$page:poly" \
653
+ -fill [_getoption $path $page -background]
654
+ $path.c itemconfigure "$page:text" \
655
+ -fill [_getoption $path $page -foreground]
656
+ }
657
+ }
658
+ }
659
+
660
+
661
+ # ---------------------------------------------------------------------------
662
+ # Command NoteBook::_select
663
+ # ---------------------------------------------------------------------------
664
+ proc NoteBook::_select { path page } {
665
+ variable $path
666
+ upvar 0 $path data
667
+
668
+ if {![string equal [Widget::cget $path.f$page -state] "normal"]} { return }
669
+
670
+ set oldsel $data(select)
671
+
672
+ if {[string equal $page $oldsel]} { return }
673
+
674
+ if { ![string equal $oldsel ""] } {
675
+ set cmd [Widget::cget $path.f$oldsel -leavecmd]
676
+ if { ![string equal $cmd ""] } {
677
+ set code [catch {uplevel \#0 $cmd} res]
678
+ if { $code == 1 || $res == 0 } {
679
+ return -code $code $res
680
+ }
681
+ }
682
+ set data(select) ""
683
+ _draw_page $path $oldsel 0
684
+ }
685
+
686
+ set data(select) $page
687
+ if { ![string equal $page ""] } {
688
+ if { !$data($page,realized) } {
689
+ set data($page,realized) 1
690
+ set cmd [Widget::cget $path.f$page -createcmd]
691
+ if { ![string equal $cmd ""] } {
692
+ uplevel \#0 $cmd
693
+ }
694
+ }
695
+ set cmd [Widget::cget $path.f$page -raisecmd]
696
+ if { ![string equal $cmd ""] } {
697
+ uplevel \#0 $cmd
698
+ }
699
+ _draw_page $path $page 0
700
+ }
701
+
702
+ _draw_area $path
703
+ }
704
+
705
+
706
+ # -----------------------------------------------------------------------------
707
+ # Command NoteBook::_redraw
708
+ # -----------------------------------------------------------------------------
709
+ proc NoteBook::_redraw { path } {
710
+ variable $path
711
+ upvar 0 $path data
712
+
713
+ if { !$data(realized) } { return }
714
+
715
+ _compute_height $path
716
+
717
+ foreach page $data(pages) {
718
+ _draw_page $path $page 0
719
+ }
720
+ _draw_area $path
721
+ _draw_arrows $path
722
+ }
723
+
724
+
725
+ # ----------------------------------------------------------------------------
726
+ # Command NoteBook::_draw_page
727
+ # ----------------------------------------------------------------------------
728
+ proc NoteBook::_draw_page { path page create } {
729
+ variable $path
730
+ upvar 0 $path data
731
+
732
+ # --- calcul des coordonnees et des couleurs de l'onglet ------------------
733
+ set pos [lsearch -exact $data(pages) $page]
734
+ set bg [_getoption $path $page -background]
735
+
736
+ # lookup the tab colors
737
+ set fgt $data(lbg)
738
+ set fgb $data(dbg)
739
+
740
+ set h $data(hpage)
741
+ set xd [_get_x_page $path $pos]
742
+ set xf [expr {$xd + $data($page,width)}]
743
+
744
+ # Set the initial text offsets -- a few pixels down, centered left-to-right
745
+ set textOffsetY [expr [Widget::_get_padding $path -tabpady 0] + 3]
746
+ set textOffsetX 9
747
+
748
+ # Coordinates of the tab corners are:
749
+ # c3 c4
750
+ #
751
+ # c2 c5
752
+ #
753
+ # c1 c6
754
+ #
755
+ # where
756
+ # c1 = $xd, $h
757
+ # c2 = $xd+$xBevel, $arcRadius+2
758
+ # c3 = $xd+$xBevel+$arcRadius, $arcRadius
759
+ # c4 = $xf+1-$xBevel, $arcRadius
760
+ # c5 = $xf+$arcRadius-$xBevel, $arcRadius+2
761
+ # c6 = $xf+$arcRadius, $h
762
+
763
+ set top 2
764
+ set arcRadius [Widget::cget $path -arcradius]
765
+ set xBevel [Widget::cget $path -tabbevelsize]
766
+
767
+ if { $data(select) != $page } {
768
+ if { $pos == 0 } {
769
+ # The leftmost page is a special case -- it is drawn with its
770
+ # tab a little indented. To achieve this, we incr xd. We also
771
+ # decr textOffsetX, so that the text doesn't move left/right.
772
+ incr xd 2
773
+ incr textOffsetX -2
774
+ }
775
+ } else {
776
+ # The selected page's text is raised higher than the others
777
+ incr top -2
778
+ }
779
+
780
+ # Precompute some coord values that we use a lot
781
+ set topPlusRadius [expr {$top + $arcRadius}]
782
+ set rightPlusRadius [expr {$xf + $arcRadius}]
783
+ set leftPlusRadius [expr {$xd + $arcRadius}]
784
+
785
+ # Sven
786
+ set side [Widget::cget $path -side]
787
+ set tabsOnBottom [string equal $side "bottom"]
788
+
789
+ set h1 [expr {[winfo height $path]}]
790
+ set bd [Widget::cget $path -borderwidth]
791
+ if {$bd < 1} { set bd 1 }
792
+
793
+ if { $tabsOnBottom } {
794
+ # adjust to keep bottom edge in view
795
+ incr h1 -1
796
+ set top [expr {$top * -1}]
797
+ set topPlusRadius [expr {$topPlusRadius * -1}]
798
+ # Hrm... the canvas has an issue with drawing diagonal segments
799
+ # of lines from the bottom to the top, so we have to draw this line
800
+ # backwards (ie, lt is actually the bottom, drawn from right to left)
801
+ set lt [list \
802
+ $rightPlusRadius [expr {$h1-$h-1}] \
803
+ [expr {$rightPlusRadius - $xBevel}] [expr {$h1 + $topPlusRadius}] \
804
+ [expr {$xf - $xBevel}] [expr {$h1 + $top}] \
805
+ [expr {$leftPlusRadius + $xBevel}] [expr {$h1 + $top}] \
806
+ ]
807
+ set lb [list \
808
+ [expr {$leftPlusRadius + $xBevel}] [expr {$h1 + $top}] \
809
+ [expr {$xd + $xBevel}] [expr {$h1 + $topPlusRadius}] \
810
+ $xd [expr {$h1-$h-1}] \
811
+ ]
812
+ # Because we have to do this funky reverse order thing, we have to
813
+ # swap the top/bottom colors too.
814
+ set tmp $fgt
815
+ set fgt $fgb
816
+ set fgb $tmp
817
+ } else {
818
+ set lt [list \
819
+ $xd $h \
820
+ [expr {$xd + $xBevel}] $topPlusRadius \
821
+ [expr {$leftPlusRadius + $xBevel}] $top \
822
+ [expr {$xf + 1 - $xBevel}] $top \
823
+ ]
824
+ set lb [list \
825
+ [expr {$xf + 1 - $xBevel}] [expr {$top + 1}] \
826
+ [expr {$rightPlusRadius - $xBevel}] $topPlusRadius \
827
+ $rightPlusRadius $h \
828
+ ]
829
+ }
830
+
831
+ set img [Widget::cget $path.f$page -image]
832
+
833
+ set ytext $top
834
+ if { $tabsOnBottom } {
835
+ # The "+ 2" below moves the text closer to the bottom of the tab,
836
+ # so it doesn't look so cramped. I should be able to achieve the
837
+ # same goal by changing the anchor of the text and using this formula:
838
+ # ytext = $top + $h1 - $textOffsetY
839
+ # but that doesn't quite work (I think the linespace from the text
840
+ # gets in the way)
841
+ incr ytext [expr {$h1 - $h + 2}]
842
+ }
843
+ incr ytext $textOffsetY
844
+
845
+ set xtext [expr {$xd + $textOffsetX}]
846
+ if { $img != "" } {
847
+ # if there's an image, put it on the left and move the text right
848
+ set ximg $xtext
849
+ incr xtext [expr {[image width $img] + 2}]
850
+ }
851
+
852
+ if { $data(select) == $page } {
853
+ set bd [Widget::cget $path -borderwidth]
854
+ if {$bd < 1} { set bd 1 }
855
+ set fg [_getoption $path $page -foreground]
856
+ } else {
857
+ set bd 1
858
+ if { [Widget::cget $path.f$page -state] == "normal" } {
859
+ set fg [_getoption $path $page -foreground]
860
+ } else {
861
+ set fg [_getoption $path $page -disabledforeground]
862
+ }
863
+ }
864
+
865
+ # --- creation ou modification de l'onglet --------------------------------
866
+ # Sven
867
+ if { $create } {
868
+ # Create the tab region
869
+ eval [list $path.c create polygon] [concat $lt $lb] [list \
870
+ -tags [list page p:$page $page:poly] \
871
+ -outline $bg \
872
+ -fill $bg \
873
+ ]
874
+ eval [list $path.c create line] $lt [list \
875
+ -tags [list page p:$page $page:top top] -fill $fgt -width $bd]
876
+ eval [list $path.c create line] $lb [list \
877
+ -tags [list page p:$page $page:bot bot] -fill $fgb -width $bd]
878
+ $path.c create text $xtext $ytext \
879
+ -text [Widget::cget $path.f$page -text] \
880
+ -font [Widget::cget $path -font] \
881
+ -fill $fg \
882
+ -anchor nw \
883
+ -tags [list page p:$page $page:text]
884
+
885
+ $path.c bind p:$page <ButtonPress-1> \
886
+ [list NoteBook::_select $path $page]
887
+ $path.c bind p:$page <Enter> \
888
+ [list NoteBook::_highlight on $path $page]
889
+ $path.c bind p:$page <Leave> \
890
+ [list NoteBook::_highlight off $path $page]
891
+ } else {
892
+ $path.c coords "$page:text" $xtext $ytext
893
+
894
+ $path.c itemconfigure "$page:text" \
895
+ -text [Widget::cget $path.f$page -text] \
896
+ -font [Widget::cget $path -font] \
897
+ -fill $fg
898
+ }
899
+ eval [list $path.c coords "$page:poly"] [concat $lt $lb]
900
+ eval [list $path.c coords "$page:top"] $lt
901
+ eval [list $path.c coords "$page:bot"] $lb
902
+ $path.c itemconfigure "$page:poly" -fill $bg -outline $bg
903
+ $path.c itemconfigure "$page:top" -fill $fgt -width $bd
904
+ $path.c itemconfigure "$page:bot" -fill $fgb -width $bd
905
+
906
+ # Sven end
907
+
908
+ if { $img != "" } {
909
+ # Sven
910
+ set id [$path.c find withtag $page:img]
911
+ if { [string equal $id ""] } {
912
+ set id [$path.c create image $ximg $ytext \
913
+ -anchor nw \
914
+ -tags [list page p:$page $page:img]]
915
+ }
916
+ $path.c coords $id $ximg $ytext
917
+ $path.c itemconfigure $id -image $img
918
+ # Sven end
919
+ } else {
920
+ $path.c delete $page:img
921
+ }
922
+
923
+ if { $data(select) == $page } {
924
+ $path.c raise p:$page
925
+ } elseif { $pos == 0 } {
926
+ if { $data(select) == "" } {
927
+ $path.c raise p:$page
928
+ } else {
929
+ $path.c lower p:$page p:$data(select)
930
+ }
931
+ } else {
932
+ set pred [lindex $data(pages) [expr {$pos-1}]]
933
+ if { $data(select) != $pred || $pos == 1 } {
934
+ $path.c lower p:$page p:$pred
935
+ } else {
936
+ $path.c lower p:$page p:[lindex $data(pages) [expr {$pos-2}]]
937
+ }
938
+ }
939
+ }
940
+
941
+
942
+ # -----------------------------------------------------------------------------
943
+ # Command NoteBook::_draw_arrows
944
+ # -----------------------------------------------------------------------------
945
+ proc NoteBook::_draw_arrows { path } {
946
+ variable _warrow
947
+ variable $path
948
+ upvar 0 $path data
949
+
950
+ set w [expr {[winfo width $path]-1}]
951
+ set h [expr {$data(hpage)-1}]
952
+ set nbpages [llength $data(pages)]
953
+ set xl 0
954
+ set xr [expr {$w-$_warrow+1}]
955
+ # Sven
956
+ set side [Widget::cget $path -side]
957
+ if { [string equal $side "bottom"] } {
958
+ set h1 [expr {[winfo height $path]-1}]
959
+ set bd [Widget::cget $path -borderwidth]
960
+ if {$bd < 1} { set bd 1 }
961
+ set y0 [expr {$h1 - $data(hpage) + $bd}]
962
+ } else {
963
+ set y0 1
964
+ }
965
+ # Sven end (all y positions where replaced with $y0 later)
966
+
967
+ if { $data(base) > 0 } {
968
+ # Sven
969
+ if { ![llength [$path.c find withtag "leftarrow"]] } {
970
+ $path.c create window $xl $y0 \
971
+ -width $_warrow \
972
+ -height $h \
973
+ -anchor nw \
974
+ -window $path.c.fg \
975
+ -tags "leftarrow"
976
+ } else {
977
+ $path.c coords "leftarrow" $xl $y0
978
+ $path.c itemconfigure "leftarrow" -width $_warrow -height $h
979
+ }
980
+ # Sven end
981
+ } else {
982
+ $path.c delete "leftarrow"
983
+ }
984
+
985
+ if { $data(base) < $nbpages-1 &&
986
+ $data(wpage) + [_get_x_page $path 0] + 6 > $w } {
987
+ # Sven
988
+ if { ![llength [$path.c find withtag "rightarrow"]] } {
989
+ $path.c create window $xr $y0 \
990
+ -width $_warrow \
991
+ -height $h \
992
+ -window $path.c.fd \
993
+ -anchor nw \
994
+ -tags "rightarrow"
995
+ } else {
996
+ $path.c coords "rightarrow" $xr $y0
997
+ $path.c itemconfigure "rightarrow" -width $_warrow -height $h
998
+ }
999
+ # Sven end
1000
+ } else {
1001
+ $path.c delete "rightarrow"
1002
+ }
1003
+ }
1004
+
1005
+
1006
+ # -----------------------------------------------------------------------------
1007
+ # Command NoteBook::_draw_area
1008
+ # -----------------------------------------------------------------------------
1009
+ proc NoteBook::_draw_area { path } {
1010
+ variable $path
1011
+ upvar 0 $path data
1012
+
1013
+ set w [expr {[winfo width $path] - 1}]
1014
+ set h [expr {[winfo height $path] - 1}]
1015
+ set bd [Widget::cget $path -borderwidth]
1016
+ if {$bd < 1} { set bd 1 }
1017
+ set x0 [expr {$bd - 1}]
1018
+
1019
+ set arcRadius [Widget::cget $path -arcradius]
1020
+
1021
+ # Sven
1022
+ set side [Widget::cget $path -side]
1023
+ if {"$side" == "bottom"} {
1024
+ set y0 0
1025
+ set y1 [expr {$h - $data(hpage)}]
1026
+ set yo $y1
1027
+ } else {
1028
+ set y0 $data(hpage)
1029
+ set y1 $h
1030
+ set yo [expr {$h-$y0}]
1031
+ }
1032
+ # Sven end
1033
+ set dbg $data(dbg)
1034
+ set sel $data(select)
1035
+ if { $sel == "" } {
1036
+ set xd [expr {$w/2}]
1037
+ set xf $xd
1038
+ set lbg $data(dbg)
1039
+ } else {
1040
+ set xd [_get_x_page $path [lsearch -exact $data(pages) $data(select)]]
1041
+ set xf [expr {$xd + $data($sel,width) + $arcRadius + 1}]
1042
+ set lbg $data(lbg)
1043
+ }
1044
+
1045
+ # Sven
1046
+ if { [llength [$path.c find withtag rect]] == 0} {
1047
+ $path.c create line $xd $y0 $x0 $y0 $x0 $y1 \
1048
+ -tags "rect toprect1"
1049
+ $path.c create line $w $y0 $xf $y0 \
1050
+ -tags "rect toprect2"
1051
+ $path.c create line 1 $h $w $h $w $y0 \
1052
+ -tags "rect botrect"
1053
+ }
1054
+ if {"$side" == "bottom"} {
1055
+ $path.c coords "toprect1" $w $y0 $x0 $y0 $x0 $y1
1056
+ $path.c coords "toprect2" $x0 $y1 $xd $y1
1057
+ $path.c coords "botrect" $xf $y1 $w $y1 $w $y0
1058
+ $path.c itemconfigure "toprect1" -fill $lbg -width $bd
1059
+ $path.c itemconfigure "toprect2" -fill $dbg -width $bd
1060
+ $path.c itemconfigure "botrect" -fill $dbg -width $bd
1061
+ } else {
1062
+ $path.c coords "toprect1" $xd $y0 $x0 $y0 $x0 $y1
1063
+ $path.c coords "toprect2" $w $y0 $xf $y0
1064
+ $path.c coords "botrect" $x0 $h $w $h $w $y0
1065
+ $path.c itemconfigure "toprect1" -fill $lbg -width $bd
1066
+ $path.c itemconfigure "toprect2" -fill $lbg -width $bd
1067
+ $path.c itemconfigure "botrect" -fill $dbg -width $bd
1068
+ }
1069
+ $path.c raise "rect"
1070
+ # Sven end
1071
+
1072
+ if { $sel != "" } {
1073
+ # Sven
1074
+ if { [llength [$path.c find withtag "window"]] == 0 } {
1075
+ $path.c create window 2 [expr {$y0+1}] \
1076
+ -width [expr {$w-3}] \
1077
+ -height [expr {$yo-3}] \
1078
+ -anchor nw \
1079
+ -tags "window" \
1080
+ -window $path.f$sel
1081
+ }
1082
+ $path.c coords "window" 2 [expr {$y0+1}]
1083
+ $path.c itemconfigure "window" \
1084
+ -width [expr {$w-3}] \
1085
+ -height [expr {$yo-3}] \
1086
+ -window $path.f$sel
1087
+ # Sven end
1088
+ } else {
1089
+ $path.c delete "window"
1090
+ }
1091
+ }
1092
+
1093
+
1094
+ # -----------------------------------------------------------------------------
1095
+ # Command NoteBook::_resize
1096
+ # -----------------------------------------------------------------------------
1097
+ proc NoteBook::_resize { path } {
1098
+ variable $path
1099
+ upvar 0 $path data
1100
+
1101
+ if {!$data(realized)} {
1102
+ if { [set width [Widget::cget $path -width]] == 0 ||
1103
+ [set height [Widget::cget $path -height]] == 0 } {
1104
+ compute_size $path
1105
+ }
1106
+ set data(realized) 1
1107
+ }
1108
+
1109
+ NoteBook::_redraw $path
1110
+ }
1111
+
1112
+
1113
+ # Tree::_set_help --
1114
+ #
1115
+ # Register dynamic help for a node in the tree.
1116
+ #
1117
+ # Arguments:
1118
+ # path Tree to query
1119
+ # node Node in the tree
1120
+ # force Optional argument to force a reset of the help
1121
+ #
1122
+ # Results:
1123
+ # none
1124
+ # Tree::_set_help --
1125
+ #
1126
+ # Register dynamic help for a node in the tree.
1127
+ #
1128
+ # Arguments:
1129
+ # path Tree to query
1130
+ # node Node in the tree
1131
+ # force Optional argument to force a reset of the help
1132
+ #
1133
+ # Results:
1134
+ # none
1135
+ proc NoteBook::_set_help { path page } {
1136
+ Widget::getVariable $path help
1137
+
1138
+ set item $path.f$page
1139
+ set opts [list -helptype -helptext -helpvar]
1140
+ foreach {cty ctx cv} [eval [list Widget::hasChangedX $item] $opts] break
1141
+ set text [Widget::getoption $item -helptext]
1142
+
1143
+ ## If we've never set help for this item before, and text is not blank,
1144
+ ## we need to setup help. We also need to reset help if any of the
1145
+ ## options have changed.
1146
+ if { (![info exists help($page)] && $text != "") || $cty || $ctx || $cv } {
1147
+ set help($page) 1
1148
+ set type [Widget::getoption $item -helptype]
1149
+ switch $type {
1150
+ balloon {
1151
+ DynamicHelp::register $path.c balloon p:$page $text
1152
+ }
1153
+ variable {
1154
+ set var [Widget::getoption $item -helpvar]
1155
+ DynamicHelp::register $path.c variable p:$page $var $text
1156
+ }
1157
+ }
1158
+ }
1159
+ }
1160
+
1161
+
1162
+ proc NoteBook::_get_page_name { path {item current} {tagindex end-1} } {
1163
+ return [string range [lindex [$path.c gettags $item] $tagindex] 2 end]
1164
+ }