arcadia 0.13.0 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +7 -0
  2. data/README +19 -15
  3. data/bin/arc +0 -0
  4. data/conf/LC/en-UK.LANG +1 -1
  5. data/conf/LC/ru-RU.LANG +272 -0
  6. data/conf/theme-dark.conf +3 -3
  7. data/ext/ae-dir-projects/ae-dir-projects.rb +5 -5
  8. data/ext/ae-editor/ae-editor.rb +302 -178
  9. data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +2 -2
  10. data/ext/ae-term/ae-term.rb +11 -2
  11. data/lib/a-commons.rb +49 -19
  12. data/lib/a-contracts.rb +13 -0
  13. data/lib/a-core.rb +139 -36
  14. data/lib/a-tkcommons.rb +23 -8
  15. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ArrowButton.html +0 -0
  16. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/BWidget.html +0 -0
  17. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Button.html +0 -0
  18. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ButtonBox.html +0 -0
  19. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ComboBox.html +8 -0
  20. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Dialog.html +0 -0
  21. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/DragSite.html +0 -0
  22. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/DropSite.html +0 -0
  23. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/DynamicHelp.html +0 -0
  24. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Entry.html +0 -0
  25. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Label.html +0 -0
  26. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/LabelEntry.html +0 -0
  27. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/LabelFrame.html +0 -0
  28. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ListBox.html +0 -0
  29. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/MainFrame.html +28 -23
  30. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/MessageDlg.html +0 -0
  31. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/NoteBook.html +0 -0
  32. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PagesManager.html +0 -0
  33. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PanedWindow.html +0 -0
  34. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PanelFrame.html +0 -0
  35. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/PasswdDlg.html +0 -0
  36. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ProgressBar.html +0 -0
  37. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ProgressDlg.html +0 -0
  38. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ScrollView.html +0 -0
  39. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ScrollableFrame.html +0 -0
  40. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/ScrolledWindow.html +0 -0
  41. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/SelectColor.html +0 -0
  42. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/SelectFont.html +0 -0
  43. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Separator.html +0 -0
  44. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/SpinBox.html +0 -0
  45. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/StatusBar.html +0 -0
  46. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/TitleFrame.html +0 -0
  47. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Tree.html +0 -0
  48. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/Widget.html +0 -0
  49. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/contents.html +0 -0
  50. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/index.html +0 -0
  51. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/navtree.html +0 -0
  52. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/BWman/options.htm +0 -0
  53. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/CHANGES.txt +0 -0
  54. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/ChangeLog +59 -0
  55. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/LICENSE.txt +0 -0
  56. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/README.txt +0 -0
  57. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/arrow.tcl +0 -0
  58. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/bitmap.tcl +0 -0
  59. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/button.tcl +0 -0
  60. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/buttonbox.tcl +0 -0
  61. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/color.tcl +0 -0
  62. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/combobox.tcl +8 -0
  63. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/basic.tcl +0 -0
  64. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/bwidget.xbm +0 -0
  65. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/demo.tcl +0 -0
  66. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/dnd.tcl +0 -0
  67. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/manager.tcl +0 -0
  68. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/select.tcl +0 -0
  69. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/tmpldlg.tcl +0 -0
  70. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/tree.tcl +0 -0
  71. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/demo/x1.xbm +0 -0
  72. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dialog.tcl +0 -0
  73. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dragsite.tcl +0 -0
  74. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dropsite.tcl +0 -0
  75. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/dynhelp.tcl +0 -0
  76. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/entry.tcl +0 -0
  77. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/font.tcl +0 -0
  78. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/bold.gif +0 -0
  79. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/copy.gif +0 -0
  80. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/cut.gif +0 -0
  81. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/dragfile.gif +0 -0
  82. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/dragicon.gif +0 -0
  83. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/error.gif +0 -0
  84. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/file.gif +0 -0
  85. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/folder.gif +0 -0
  86. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/hourglass.gif +0 -0
  87. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/info.gif +0 -0
  88. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/italic.gif +0 -0
  89. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/minus.xbm +0 -0
  90. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/new.gif +0 -0
  91. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/opcopy.xbm +0 -0
  92. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/open.gif +0 -0
  93. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/openfold.gif +0 -0
  94. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/oplink.xbm +0 -0
  95. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/opmove.xbm +0 -0
  96. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/overstrike.gif +0 -0
  97. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/palette.gif +0 -0
  98. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/passwd.gif +0 -0
  99. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/paste.gif +0 -0
  100. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/plus.xbm +0 -0
  101. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/print.gif +0 -0
  102. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/question.gif +0 -0
  103. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/redo.gif +0 -0
  104. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/save.gif +0 -0
  105. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/target.xbm +0 -0
  106. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/underline.gif +0 -0
  107. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/undo.gif +0 -0
  108. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/images/warning.gif +0 -0
  109. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/init.tcl +9 -8
  110. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/label.tcl +0 -0
  111. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/labelentry.tcl +4 -1
  112. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/labelframe.tcl +0 -0
  113. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/da.rc +0 -0
  114. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/de.rc +0 -0
  115. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/en.rc +0 -0
  116. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/es.rc +0 -0
  117. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/fr.rc +0 -0
  118. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/hu.rc +0 -0
  119. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/nl.rc +0 -0
  120. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/no.rc +0 -0
  121. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/lang/pl.rc +0 -0
  122. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/listbox.tcl +0 -0
  123. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/mainframe.tcl +110 -22
  124. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/messagedlg.tcl +0 -0
  125. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/notebook.tcl +13 -3
  126. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/pagesmgr.tcl +0 -0
  127. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/panedw.tcl +0 -0
  128. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/panelframe.tcl +0 -0
  129. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/passwddlg.tcl +0 -0
  130. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/pkgIndex.tcl +2 -3
  131. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/progressbar.tcl +0 -0
  132. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/progressdlg.tcl +0 -0
  133. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/scrollframe.tcl +0 -0
  134. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/scrollview.tcl +0 -0
  135. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/scrollw.tcl +0 -0
  136. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/separator.tcl +0 -0
  137. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/spinbox.tcl +0 -0
  138. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/statusbar.tcl +0 -0
  139. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/tests/entry.test +0 -0
  140. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/titleframe.tcl +0 -0
  141. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/tree.tcl +0 -0
  142. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/utils.tcl +0 -0
  143. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/widget.tcl +15 -2
  144. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/wizard.tcl +0 -0
  145. data/tcl/{bwidget-1.9.6 → bwidget-1.9.7}/xpm2image.tcl +90 -28
  146. metadata +146 -196
  147. data/tcl/fsdialog/de.msg +0 -30
  148. data/tcl/fsdialog/en.msg +0 -31
  149. data/tcl/fsdialog/fsdialog.tcl +0 -1783
  150. data/tcl/fsdialog/fsdlg-gif.tcl +0 -259
  151. data/tcl/fsdialog/fsdlg-png.tcl +0 -265
  152. data/tcl/fsdialog/sv.msg +0 -32
  153. data/tcl/fsdialog/tclIndex +0 -6
  154. data/tcl/ptwidgets-1.1.0/COPYRIGHT +0 -10
  155. data/tcl/ptwidgets-1.1.0/ChangeLog +0 -194
  156. data/tcl/ptwidgets-1.1.0/README +0 -50
  157. data/tcl/ptwidgets-1.1.0/common/stacktrace.tcl +0 -29
  158. data/tcl/ptwidgets-1.1.0/common/tokenframe.tcl +0 -200
  159. data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_off.png +0 -0
  160. data/tcl/ptwidgets-1.1.0/doc/img/toggleswitch_on.png +0 -0
  161. data/tcl/ptwidgets-1.1.0/doc/img/tokenentry.png +0 -0
  162. data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example.png +0 -0
  163. data/tcl/ptwidgets-1.1.0/doc/img/tokensearch_popup_example2.png +0 -0
  164. data/tcl/ptwidgets-1.1.0/doc/img/wmarkentry.png +0 -0
  165. data/tcl/ptwidgets-1.1.0/doc/toggleswitch.html +0 -402
  166. data/tcl/ptwidgets-1.1.0/doc/tokenentry.html +0 -1366
  167. data/tcl/ptwidgets-1.1.0/doc/tokensearch.html +0 -1549
  168. data/tcl/ptwidgets-1.1.0/doc/wmarkentry.html +0 -634
  169. data/tcl/ptwidgets-1.1.0/library/toggleswitch.tcl +0 -432
  170. data/tcl/ptwidgets-1.1.0/library/tokenentry.tcl +0 -2208
  171. data/tcl/ptwidgets-1.1.0/library/tokensearch.tcl +0 -2488
  172. data/tcl/ptwidgets-1.1.0/library/wmarkentry.tcl +0 -630
  173. data/tcl/ptwidgets-1.1.0/pkgIndex.tcl +0 -10
  174. data/tcl/ptwidgets-1.1.0/test/Makefile +0 -3
  175. data/tcl/ptwidgets-1.1.0/test/run.tcl +0 -3
  176. data/tcl/ptwidgets-1.1.0/test/test.tcl +0 -89
  177. data/tcl/ptwidgets-1.1.0/test/toggleswitch.test +0 -562
  178. data/tcl/ptwidgets-1.1.0/test/tokenentry.test +0 -1023
  179. data/tcl/ptwidgets-1.1.0/test/tokensearch.test +0 -1023
  180. data/tcl/ptwidgets-1.1.0/test/wmarkentry.test +0 -1325
  181. data/tcl/themes/altTheme.tcl +0 -101
  182. data/tcl/themes/aquaTheme.tcl +0 -59
  183. data/tcl/themes/clamTheme.tcl +0 -140
  184. data/tcl/themes/classicTheme.tcl +0 -108
  185. data/tcl/themes/pkgIndex.tcl +0 -3
  186. data/tcl/themes/ttk.tcl +0 -176
  187. data/tcl/themes/vistaTheme.tcl +0 -224
  188. data/tcl/themes/winTheme.tcl +0 -80
  189. data/tcl/themes/xpTheme.tcl +0 -65
  190. data/tcl/tkfbox/folder.gif +0 -0
  191. data/tcl/tkfbox/textfile.gif +0 -0
  192. data/tcl/tkfbox/tkfbox.tcl +0 -1
  193. data/tcl/tkfbox/tkfbox.tcl~ +0 -1
  194. data/tcl/tkfbox/updir.xbm +0 -1
@@ -31,17 +31,18 @@ Widget::_opt_defaults
31
31
 
32
32
  # Try to load lang file corresponding to current msgcat locale
33
33
  proc Widget::_opt_lang {} {
34
- set langfile [file join $::BWIDGET::LIBRARY "lang" "en.rc"]
35
34
  if {0 != [llength [info commands ::msgcat::mcpreferences]]} {
36
- foreach lang [::msgcat::mcpreferences] {
37
- set l [file join $::BWIDGET::LIBRARY "lang" "$lang.rc"]
38
- if {[file readable $l]} {
39
- set langfile $l
40
- break
41
- }
35
+ set langs [::msgcat::mcpreferences]
36
+ }
37
+ lappend langs en
38
+
39
+ foreach lang $langs {
40
+ set l [file join $::BWIDGET::LIBRARY "lang" "$lang.rc"]
41
+ if {(![catch {file readable $l} result]) && ($result)} {
42
+ option read $l
43
+ break
42
44
  }
43
45
  }
44
- option read $langfile
45
46
  }
46
47
  Widget::_opt_lang
47
48
 
@@ -58,7 +58,10 @@ proc LabelEntry::create { path args } {
58
58
 
59
59
  bindtags $path [list $path BwLabelEntry [winfo toplevel $path] all]
60
60
 
61
- return [Widget::create LabelEntry $path]
61
+ Widget::create LabelEntry $path
62
+ proc ::$path { cmd args } \
63
+ "return \[LabelEntry::_path_command [list $path] \$cmd \$args\]"
64
+ return $path
62
65
  }
63
66
 
64
67
 
@@ -38,13 +38,13 @@ namespace eval MainFrame {
38
38
  }
39
39
 
40
40
  Widget::declare MainFrame {
41
- {-width TkResource 0 0 frame}
42
- {-height TkResource 0 0 frame}
43
- {-background TkResource "" 0 frame}
44
- {-textvariable String "" 0}
45
- {-menu String {} 1}
46
- {-separator Enum both 1 {none top bottom both}}
47
- {-bg Synonym -background}
41
+ {-width TkResource 0 0 frame}
42
+ {-height TkResource 0 0 frame}
43
+ {-background TkResource "" 0 frame}
44
+ {-textvariable String "" 0}
45
+ {-menu String {} 1}
46
+ {-separator Enum both 1 {none top bottom both}}
47
+ {-bg Synonym -background}
48
48
 
49
49
  {-menubarfont String "" 0}
50
50
  {-menuentryfont String "" 0}
@@ -203,7 +203,8 @@ proc MainFrame::configure { path args } {
203
203
 
204
204
  # The ttk frame has no -background
205
205
  if {![Widget::theme] && [Widget::hasChanged $path -background bg] } {
206
- if {$::tcl_platform(platform) == "unix"} {
206
+ if {($::tcl_platform(platform) == "unix")
207
+ && (0 != [string compare [tk windowingsystem] "aqua"])} {
207
208
  set listmenu [$_widget($path,top) cget -menu]
208
209
  while { [llength $listmenu] } {
209
210
  set newlist {}
@@ -627,7 +628,16 @@ proc MainFrame::_create_entries { path menu menuopts entries } {
627
628
  set accel [_parse_accelerator [lindex $entry 4]]
628
629
  if { [llength $accel] } {
629
630
  lappend opt -accelerator [lindex $accel 0]
630
- bind $_widget($path,top) [lindex $accel 1] [list $menu invoke $count]
631
+ foreach event [lindex $accel 1] {
632
+ bind $_widget($path,top) $event [list $menu invoke $count]
633
+ }
634
+ foreach event [lindex $accel 2] {
635
+ if {[bind $_widget($path,top) $event] == {}} {
636
+ bind $_widget($path,top) $event { # do nothing }
637
+ } else {
638
+ # The existing binding will intercept these events.
639
+ }
640
+ }
631
641
  }
632
642
 
633
643
  # user options
@@ -663,25 +673,39 @@ proc MainFrame::_parse_name { menuname } {
663
673
  # MainFrame::_parse_accelerator --
664
674
  #
665
675
  # Given a key combo description, construct an appropriate human readable
666
- # string (for display on as a menu accelerator) and the corresponding
667
- # bind event.
676
+ # string (for display on as a menu accelerator), a list of the
677
+ # corresponding bind events, and a separate list of bind events that need
678
+ # to be blocked.
679
+ #
680
+ # When argument $desc does not include "Shift", the bindings to $events
681
+ # will in some cases also intercept events that have the modifier "Shift",
682
+ # unless more specific bindings $blockEvents exist to the latter. This
683
+ # situation occurs, for example, when a Cmd binding exists without a
684
+ # corresponding ShiftCmd binding. The list of events that need to be
685
+ # blocked is returned as the third element of the result.
668
686
  #
669
687
  # Arguments:
670
688
  # desc a list with the following format:
671
689
  # ?sequence? key
672
- # sequence may be None, Ctrl, Alt, or CtrlAlt
690
+ # sequence may be None, Ctrl, Alt, CtrlAlt, Shift, Cmd or
691
+ # ShiftCmd
673
692
  # key may be any key
674
693
  #
675
694
  # Results:
676
- # {accel event} a list containing the accelerator string and the event
695
+ # {accel events blockEvents} a list containing the accelerator string and
696
+ # two lists of events
677
697
 
678
698
  proc MainFrame::_parse_accelerator { desc } {
699
+ variable _widget
700
+
701
+ set fKey 0
679
702
  if { [llength $desc] == 1 } {
680
703
  set seq None
681
704
  set key [string tolower [lindex $desc 0]]
682
705
  # If the key is an F key (ie, F1, F2, etc), it has to be capitalized
683
706
  if {[regexp {^f([1-9]|([12][0-9]|3[0-5]))$} $key]} {
684
707
  set key [string toupper $key]
708
+ set fKey 1
685
709
  }
686
710
  } elseif { [llength $desc] == 2 } {
687
711
  set seq [lindex $desc 0]
@@ -689,30 +713,94 @@ proc MainFrame::_parse_accelerator { desc } {
689
713
  # If the key is an F key (ie, F1, F2, etc), it has to be capitalized
690
714
  if {[regexp {^f([1-9]|([12][0-9]|3[0-5]))$} $key]} {
691
715
  set key [string toupper $key]
716
+ set fKey 1
692
717
  }
693
718
  } else {
694
719
  return {}
695
720
  }
721
+
722
+ # Plain "Shift" can be used only with F keys, but "ShiftCmd" is allowed.
723
+ if {[string equal $seq "Shift"] && (!$fKey)} {
724
+ return -code error {Shift accelerator can be used only with F keys}
725
+ }
726
+
727
+ set blockEvents {}
728
+ set upc [string toupper $key]
729
+
696
730
  switch -- $seq {
697
731
  None {
698
- set accel "[string toupper $key]"
699
- set event "<Key-$key>"
732
+ set accel "$upc"
733
+ set events [list "<Key-$key>"]
734
+ if {$fKey} {
735
+ set blockEvents [list "<Shift-Key-$key>"]
736
+ }
737
+ }
738
+ Shift {
739
+ # Used only with Function keys.
740
+ set accel "Shift+$upc"
741
+ set events [list "<Shift-Key-$key>"]
742
+ }
743
+ Cmd {
744
+ set accel "Cmd+$upc"
745
+
746
+ if { [string equal [tk windowingsystem] "aqua"] &&
747
+ ([string first AppKit [winfo server .]] == -1)
748
+ } {
749
+ # Carbon
750
+ set events [list "<Command-Key-$key>" \
751
+ "<Lock-Command-Key-$upc>" ]
752
+ set blockEvents [list "<Lock-Shift-Command-Key-$upc>"]
753
+ # Both bindings must be included in $events - the first binding
754
+ # does not fire if "Lock" is set, and this is as bind(n) states
755
+ # because the second binding is NOT a more specialized form of
756
+ # the first.
757
+ } else {
758
+ # Cocoa and anything else that uses Cmd
759
+ set events [list "<Command-Key-$key>"]
760
+ # A binding to "<Lock-Command-Key-$upc>" must not be included
761
+ # here - both events fire if "Lock" is set.
762
+ set blockEvents [list "<Shift-Command-Key-$key>"]
763
+ }
764
+ }
765
+ ShiftCmd {
766
+ if { [string equal [tk windowingsystem] "aqua"] &&
767
+ ([string first AppKit [winfo server .]] == -1)
768
+ } {
769
+ # Carbon
770
+ set accel "Shift+Cmd+$upc"
771
+ set events [list "<Shift-Command-Key-$upc>" \
772
+ "<Lock-Shift-Command-Key-$upc>"]
773
+ # Both bindings must be included here - the first binding does
774
+ # not fire if "Lock" is set, even though the second binding
775
+ # should be recognized as a more specialized form of the first.
776
+ } else {
777
+ # Cocoa and anything else that uses Cmd
778
+ set accel "Shift+Cmd+$upc"
779
+ set events [list "<Shift-Command-Key-$key>"]
780
+ # A binding to "<Lock-Shift-Command-Key-$key>" must not be
781
+ # included here - both events fire if "Lock" is set.
782
+ # Tk/Cocoa fails to recognize
783
+ # <Lock-Shift-Command-Key-$key> as a "more specialized" binding
784
+ # than <Shift-Command-Key-$key>.
785
+ # Perversely, Tk/Carbon (above) makes the opposite error.
786
+ }
700
787
  }
701
788
  Ctrl {
702
- set accel "Ctrl+[string toupper $key]"
703
- set event "<Control-Key-$key>"
789
+ set accel "Ctrl+$upc"
790
+ set events [list "<Control-Key-$key>"]
704
791
  }
705
792
  Alt {
706
- set accel "Alt+[string toupper $key]"
707
- set event "<Alt-Key-$key>"
793
+ set accel "Alt+$upc"
794
+ set events [list "<Alt-Key-$key>"]
708
795
  }
709
796
  CtrlAlt {
710
- set accel "Ctrl+Alt+[string toupper $key]"
711
- set event "<Control-Alt-Key-$key>"
797
+ set accel "Ctrl+Alt+$upc"
798
+ set events [list "<Control-Alt-Key-$key>"]
712
799
  }
713
800
  default {
714
801
  return -code error "invalid accelerator code $seq"
715
802
  }
716
803
  }
717
- return [list $accel $event]
804
+
805
+ return [list $accel $events $blockEvents]
718
806
  }
@@ -1107,12 +1107,22 @@ proc NoteBook::_resize { path } {
1107
1107
  variable $path
1108
1108
  upvar 0 $path data
1109
1109
 
1110
+ # Check if pages are fully initialized or if we are still initializing
1111
+ if { 0 < [llength $data(pages)] &&
1112
+ ![info exists data([lindex $data(pages) end],width)] } {
1113
+ return
1114
+ }
1115
+
1110
1116
  if {!$data(realized)} {
1111
- if { [set width [Widget::cget $path -width]] == 0 ||
1112
- [set height [Widget::cget $path -height]] == 0 } {
1117
+ set data(realized) 1
1118
+ if { [Widget::cget $path -width] == 0 ||
1119
+ [Widget::cget $path -height] == 0 } {
1120
+ # This does an update allowing other events (resize) to enter
1121
+ # In addition, it does a redraw, so first set the realized and
1122
+ # then exit
1113
1123
  compute_size $path
1124
+ return
1114
1125
  }
1115
- set data(realized) 1
1116
1126
  }
1117
1127
 
1118
1128
  NoteBook::_redraw $path
@@ -1,7 +1,7 @@
1
1
  if {[catch {package require Tcl}]} return
2
- package ifneeded BWidget 1.9.6 "\
2
+ package ifneeded BWidget 1.9.7 "\
3
3
  package require Tk 8.1.1;\
4
- [list tclPkgSetup $dir BWidget 1.9.6 {
4
+ [list tclPkgSetup $dir BWidget 1.9.7 {
5
5
  {arrow.tcl source {ArrowButton ArrowButton::create ArrowButton::use}}
6
6
  {labelframe.tcl source {LabelFrame LabelFrame::create LabelFrame::use}}
7
7
  {labelentry.tcl source {LabelEntry LabelEntry::create LabelEntry::use}}
@@ -35,7 +35,6 @@ package ifneeded BWidget 1.9.6 "\
35
35
  {dialog.tcl source {Dialog Dialog::create Dialog::use}}
36
36
  {messagedlg.tcl source {MessageDlg MessageDlg::create MessageDlg::use}}
37
37
  {font.tcl source {SelectFont SelectFont::create SelectFont::use SelectFont::loadfont}}
38
- {widgetdoc.tcl source {Widget::generate-doc Widget::generate-widget-doc}}
39
38
  {wizard.tcl source {Wizard Wizard::create Wizard::use SimpleWizard ClassicWizard}}
40
39
  {xpm2image.tcl source {xpm-to-image}}
41
40
  }]; \
@@ -1100,6 +1100,19 @@ proc Widget::_configure_option { option altopt } {
1100
1100
  return [list $optdb $optclass]
1101
1101
  }
1102
1102
 
1103
+ # ----------------------------------------------------------------------------
1104
+ # Command Widget::_make_tk_widget_name
1105
+ # ----------------------------------------------------------------------------
1106
+ # Before, the widget meta name was build as: ".#BWidget.#$tkwidget"
1107
+ # This does not work for ttk widgets, as they have an "::" in their name.
1108
+ # Thus replace any "::" by "__" will do the job.
1109
+ proc Widget::_make_tk_widget_name { tkwidget } {
1110
+ set pos 0
1111
+ for {set pos 0} {0 <= [set pos [string first "::" $tkwidget $pos]]} {incr pos} {
1112
+ set tkwidget [string range $tkwidget 0 [expr {$pos-1}]]__[string range $tkwidget [expr {$pos+2}] end]
1113
+ }
1114
+ return ".#BWidget.#$tkwidget"
1115
+ }
1103
1116
 
1104
1117
  # ----------------------------------------------------------------------------
1105
1118
  # Command Widget::_get_tkwidget_options
@@ -1109,7 +1122,7 @@ proc Widget::_get_tkwidget_options { tkwidget } {
1109
1122
  variable _optiondb
1110
1123
  variable _optionclass
1111
1124
 
1112
- set widget ".#BWidget.#$tkwidget"
1125
+ set widget [_make_tk_widget_name $tkwidget]
1113
1126
  # encapsulation frame to not pollute '.' childspace
1114
1127
  if {![winfo exists ".#BWidget"]} { frame ".#BWidget" }
1115
1128
  if { ![winfo exists $widget] || ![info exists _tk_widget($tkwidget)] } {
@@ -1162,7 +1175,7 @@ proc Widget::_test_tkresource { option value arg } {
1162
1175
  # set tkwidget [lindex $arg 0]
1163
1176
  # set realopt [lindex $arg 1]
1164
1177
  foreach {tkwidget realopt} $arg break
1165
- set path ".#BWidget.#$tkwidget"
1178
+ set path [_make_tk_widget_name $tkwidget]
1166
1179
  set old [$path cget $realopt]
1167
1180
  $path configure $realopt $value
1168
1181
  set res [$path cget $realopt]
@@ -10,16 +10,87 @@
10
10
  #
11
11
  # ----------------------------------------------------------------------------
12
12
 
13
+ proc _xpm-to-image_process_line { line } {
14
+ upvar 1 data data
15
+ set line [string map {"\t" " "} $line]
16
+
17
+ set idx $data(chars_per_pixel)
18
+ incr idx -1
19
+ set cname [string range $line 0 $idx]
20
+
21
+
22
+ set lend [string trim [string range $line $data(chars_per_pixel) end]]
23
+
24
+ ## now replace multiple spaces with just one..
25
+ while {-1 != [string first " " $lend]} {
26
+ set lend [string map {" " " "} $lend]
27
+ }
28
+ set cl [split $lend " "]
29
+
30
+ set idx 0
31
+ set clen [llength $cl]
32
+
33
+ ## scan through the line, looking for records of type c, g or m
34
+ while { $idx < $clen } {
35
+ set key [lindex $cl $idx]
36
+ if { [string equal $key {}] } {
37
+ incr idx
38
+ continue
39
+ }
40
+
41
+ while { ![string equal $key "c"]
42
+ && ![string equal $key "m"]
43
+ && ![string equal $key "g"]
44
+ && ![string equal $key "g4"]
45
+ && ![string equal $key ""]
46
+ } {
47
+ incr idx
48
+ set key [lindex $cl $idx]
49
+ }
50
+
51
+ incr idx
52
+ set color [string tolower [lindex $cl $idx]]
53
+
54
+ ## one file used opaque to mean black
55
+ if { [string equal -nocase $color "opaque"] } {
56
+ set color "black"
57
+ }
58
+ set data(color-$key-$cname) $color
59
+ if { [string equal -nocase $color "none"] } {
60
+ set data(transparent) $cname
61
+ }
62
+ incr idx
63
+ }
64
+
65
+
66
+ foreach key {c g g4 m} {
67
+ if {[info exists data(color-$key-$cname)]} {
68
+ set color $data(color-$key-$cname)
69
+ set data(color-$cname) $color
70
+ set data(cname-$color) $cname
71
+ lappend data(colors) $color
72
+ break
73
+ }
74
+ }
75
+ if { ![info exists data(color-$cname)] } {
76
+ error "color definition {$line} failed to define a color"
77
+ }
78
+ }
79
+
13
80
  proc xpm-to-image { file } {
14
81
  set f [open $file]
15
82
  set string [read $f]
16
83
  close $f
17
84
 
18
- #
19
85
  # parse the strings in the xpm data
20
86
  #
21
87
  set xpm {}
22
88
  foreach line [split $string "\n"] {
89
+ ## some files have blank lines in them, skip those
90
+ ## also, some files indent each line with spaces - remove those
91
+ set line [string trim $line]
92
+ if { $line eq "" } { continue }
93
+
23
94
  if {[regexp {^"([^\"]*)"} $line all meat]} {
24
95
  if {[string first XPMEXT $meat] == 0} {
25
96
  break
@@ -51,32 +122,7 @@ proc xpm-to-image { file } {
51
122
  # extract the color definitions in the xpm data
52
123
  #
53
124
  foreach line [lrange $xpm 1 $data(ncolors)] {
54
- set colors [split $line \t]
55
- set cname [lindex $colors 0]
56
- lappend data(cnames) $cname
57
- if { [string length $cname] != $data(chars_per_pixel) } {
58
- error "color definition {$line} in file $file has a bad size color name"
59
- }
60
- foreach record [lrange $colors 1 end] {
61
- set key [lindex $record 0]
62
- set color [string tolower [join [lrange $record 1 end] { }]]
63
- set data(color-$key-$cname) $color
64
- if { [string equal -nocase $color "none"] } {
65
- set data(transparent) $cname
66
- }
67
- }
68
- foreach key {c g g4 m} {
69
- if {[info exists data(color-$key-$cname)]} {
70
- set color $data(color-$key-$cname)
71
- set data(color-$cname) $color
72
- set data(cname-$color) $cname
73
- lappend data(colors) $color
74
- break
75
- }
76
- }
77
- if { ![info exists data(color-$cname)] } {
78
- error "color definition {$line} in $file failed to define a color"
79
- }
125
+ _xpm-to-image_process_line $line
80
126
  }
81
127
 
82
128
  #
@@ -84,11 +130,25 @@ proc xpm-to-image { file } {
84
130
  #
85
131
  set image [image create photo -width $data(width) -height $data(height)]
86
132
  set y 0
133
+ set idx 0
87
134
  foreach line [lrange $xpm [expr {1+$data(ncolors)}] [expr {1+$data(ncolors)+$data(height)}]] {
88
135
  set x 0
89
136
  set pixels {}
90
137
  while { [string length $line] > 0 } {
91
138
  set pixel [string range $line 0 [expr {$data(chars_per_pixel)-1}]]
139
+ ## see if they lied about the number of colors by not counting
140
+ ## "none" in the color count entry
141
+ set none 0
142
+ if { ($idx == 0) && ([info exists data(cname-none)]) && \
143
+ ![info exists data(color-$pixel)] } {
144
+ ## it appears that way - process this line as another
145
+ ## color entry
146
+ _xpm-to-image_process_line $line
147
+ incr idx
148
+ set none 1
149
+ break;
150
+ }
151
+ incr idx
92
152
  set c $data(color-$pixel)
93
153
  if { [string equal $c none] } {
94
154
  if { [string length $pixels] } {
@@ -101,6 +161,9 @@ proc xpm-to-image { file } {
101
161
  set line [string range $line $data(chars_per_pixel) end]
102
162
  incr x
103
163
  }
164
+ if { $none == 1 } {
165
+ continue
166
+ }
104
167
  if { [llength $pixels] } {
105
168
  $image put [list $pixels] -to [expr {$x-[llength $pixels]}] $y
106
169
  }
@@ -112,4 +175,3 @@ proc xpm-to-image { file } {
112
175
  #
113
176
  return $image
114
177
  }
115
-