arcadia 0.7.0 → 0.8.0

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 (168) hide show
  1. data/README +39 -38
  2. data/bin/arc +3 -0
  3. data/bin/arcadia +0 -1
  4. data/conf/arcadia.conf +54 -35
  5. data/conf/arcadia.init.rb +26 -3
  6. data/conf/arcadia.res.rb +56 -4
  7. data/ext/ae-breakpoints/ae-breakpoints.rb +1 -1
  8. data/ext/ae-dir-projects/ae-dir-projects.rb +113 -45
  9. data/ext/ae-editor/ae-editor.conf +6 -2
  10. data/ext/ae-editor/ae-editor.rb +1009 -616
  11. data/ext/ae-editor/langs/coderay.tokens +40 -0
  12. data/ext/ae-editor/langs/conf.lang +12 -10
  13. data/ext/ae-editor/langs/erb.lang.bind +1 -0
  14. data/ext/ae-editor/langs/java.lang +4 -0
  15. data/ext/ae-editor/langs/rb.lang +25 -55
  16. data/ext/ae-editor/langs/rhtml.lang +4 -0
  17. data/ext/ae-editor/langs/tokens.lang.bind +1 -0
  18. data/ext/ae-editor/langs/xml.lang +4 -0
  19. data/ext/ae-file-history/ae-file-history.rb +140 -32
  20. data/ext/ae-output/ae-output.rb +267 -262
  21. data/ext/ae-rad/ae-rad-inspector.rb +1 -1
  22. data/ext/ae-rad/ae-rad-libs.rb +15 -7
  23. data/ext/ae-rad/ae-rad.conf +4 -4
  24. data/ext/ae-rad/lib/tk/al-tk.rb +4 -3
  25. data/ext/ae-ruby-debug/ae-ruby-debug.conf +4 -2
  26. data/ext/ae-ruby-debug/ae-ruby-debug.rb +40 -15
  27. data/ext/ae-search-in-files/ae-search-in-files.rb +70 -14
  28. data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +15 -0
  29. data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +80 -0
  30. data/ext/ae-shell/ae-shell.conf +4 -1
  31. data/ext/ae-shell/ae-shell.rb +78 -43
  32. data/ext/test-shutdown-after-startup/test-shutdown-after-startup.conf +4 -0
  33. data/ext/test-shutdown-after-startup/test-shutdown-after-startup.rb +20 -0
  34. data/lib/a-commons.rb +118 -22
  35. data/lib/a-contracts.rb +46 -2
  36. data/lib/a-core.rb +970 -284
  37. data/lib/a-tkcommons.rb +16 -8
  38. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ArrowButton.html +0 -0
  39. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/BWidget.html +0 -0
  40. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Button.html +0 -0
  41. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ButtonBox.html +0 -0
  42. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ComboBox.html +0 -0
  43. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Dialog.html +20 -0
  44. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DragSite.html +6 -4
  45. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DropSite.html +15 -3
  46. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/DynamicHelp.html +8 -5
  47. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Entry.html +0 -0
  48. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Label.html +0 -0
  49. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/LabelEntry.html +0 -0
  50. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/LabelFrame.html +0 -0
  51. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ListBox.html +1 -1
  52. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/MainFrame.html +8 -0
  53. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/MessageDlg.html +0 -0
  54. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/NoteBook.html +0 -0
  55. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PagesManager.html +0 -0
  56. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PanedWindow.html +21 -5
  57. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PanelFrame.html +0 -0
  58. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/PasswdDlg.html +0 -0
  59. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ProgressBar.html +0 -0
  60. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ProgressDlg.html +0 -0
  61. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrollView.html +0 -0
  62. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrollableFrame.html +5 -2
  63. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/ScrolledWindow.html +36 -4
  64. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SelectColor.html +0 -0
  65. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SelectFont.html +0 -0
  66. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Separator.html +0 -0
  67. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/SpinBox.html +0 -0
  68. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/StatusBar.html +0 -0
  69. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/TitleFrame.html +0 -0
  70. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Tree.html +21 -31
  71. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/Widget.html +0 -0
  72. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/contents.html +0 -0
  73. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/index.html +0 -0
  74. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/navtree.html +0 -0
  75. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/BWman/options.htm +0 -0
  76. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/CHANGES.txt +0 -0
  77. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/ChangeLog +289 -0
  78. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/LICENSE.txt +0 -0
  79. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/README.txt +2 -2
  80. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/arrow.tcl +1 -1
  81. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/bitmap.tcl +0 -0
  82. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/button.tcl +0 -0
  83. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/buttonbox.tcl +23 -12
  84. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/color.tcl +0 -0
  85. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/combobox.tcl +101 -25
  86. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/basic.tcl +0 -0
  87. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/bwidget.xbm +0 -0
  88. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/demo.tcl +1 -1
  89. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/dnd.tcl +0 -0
  90. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/manager.tcl +0 -0
  91. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/select.tcl +0 -0
  92. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/tmpldlg.tcl +0 -0
  93. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/tree.tcl +0 -0
  94. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/demo/x1.xbm +0 -0
  95. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dialog.tcl +0 -0
  96. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dragsite.tcl +0 -0
  97. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dropsite.tcl +2 -1
  98. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/dynhelp.tcl +194 -33
  99. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/entry.tcl +8 -5
  100. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/font.tcl +0 -0
  101. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/bold.gif +0 -0
  102. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/copy.gif +0 -0
  103. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/cut.gif +0 -0
  104. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/dragfile.gif +0 -0
  105. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/dragicon.gif +0 -0
  106. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/error.gif +0 -0
  107. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/file.gif +0 -0
  108. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/folder.gif +0 -0
  109. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/hourglass.gif +0 -0
  110. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/info.gif +0 -0
  111. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/italic.gif +0 -0
  112. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/minus.xbm +0 -0
  113. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/new.gif +0 -0
  114. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/opcopy.xbm +0 -0
  115. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/open.gif +0 -0
  116. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/openfold.gif +0 -0
  117. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/oplink.xbm +0 -0
  118. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/opmove.xbm +0 -0
  119. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/overstrike.gif +0 -0
  120. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/palette.gif +0 -0
  121. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/passwd.gif +0 -0
  122. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/paste.gif +0 -0
  123. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/plus.xbm +0 -0
  124. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/print.gif +0 -0
  125. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/question.gif +0 -0
  126. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/redo.gif +0 -0
  127. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/save.gif +0 -0
  128. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/target.xbm +0 -0
  129. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/underline.gif +0 -0
  130. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/undo.gif +0 -0
  131. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/images/warning.gif +0 -0
  132. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/init.tcl +0 -0
  133. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/label.tcl +0 -0
  134. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/labelentry.tcl +0 -0
  135. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/labelframe.tcl +0 -0
  136. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/da.rc +0 -0
  137. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/de.rc +0 -0
  138. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/en.rc +0 -0
  139. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/es.rc +0 -0
  140. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/lang/fr.rc +0 -0
  141. data/tcl/BWidget-1.9.0/lang/hu.rc +52 -0
  142. data/tcl/BWidget-1.9.0/lang/nl.rc +52 -0
  143. data/tcl/BWidget-1.9.0/lang/no.rc +52 -0
  144. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/listbox.tcl +89 -34
  145. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/mainframe.tcl +14 -13
  146. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/messagedlg.tcl +0 -0
  147. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/notebook.tcl +3 -1
  148. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/pagesmgr.tcl +0 -0
  149. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/panedw.tcl +22 -18
  150. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/panelframe.tcl +0 -0
  151. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/passwddlg.tcl +7 -3
  152. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/pkgIndex.tcl +2 -2
  153. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/progressbar.tcl +0 -0
  154. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/progressdlg.tcl +0 -0
  155. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollframe.tcl +60 -24
  156. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollview.tcl +0 -0
  157. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/scrollw.tcl +13 -11
  158. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/separator.tcl +0 -0
  159. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/spinbox.tcl +0 -0
  160. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/statusbar.tcl +0 -0
  161. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/tests/entry.test +0 -0
  162. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/titleframe.tcl +0 -0
  163. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/tree.tcl +51 -41
  164. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/utils.tcl +26 -11
  165. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/widget.tcl +53 -19
  166. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/wizard.tcl +0 -0
  167. data/tcl/{BWidget-1.8.0 → BWidget-1.9.0}/xpm2image.tcl +0 -0
  168. metadata +170 -145
@@ -1,3 +1,292 @@
1
+ 2009-07-24 Harald Oehlmann <oehhar@users.sourceforge.net>
2
+
3
+ **** BWidget 1.9.0 tagged ****
4
+
5
+ * pkgIndex.tcl, README.txt: updated to BWidget 1.9
6
+
7
+ 2009-07-23 Harald Oehlmann <oehhar@users.sourceforge.net>
8
+
9
+ * tree.tcl (Tree::_set_help), Tree.html DynamicHelp -helpcmd added to
10
+ tree node help
11
+ * tree.tcl (Tree::_draw_subnodes) a vertical line to a virtual root node
12
+ above the widget is only drawn when there are multiple child nodes.
13
+ This reverts the modification dated 2004-04-21 for this case.
14
+ [Patch 2825354] by Koen Danckaert
15
+
16
+ 2009-07-17 Harald Oehlmann <oehhar@users.sourceforge.net>
17
+
18
+ * scrollframe.tcl (ScrollableFrame::create et al) ScrollableFrame.html
19
+ Background color of canvas takes the color of the scrolled frame.
20
+ If themed, canvas takes the themed color of the scrolled themed frame.
21
+ If themed, parameters -background and -bg are not available(doc + code).
22
+ [Patch 2822970] by Koen Danckaert
23
+
24
+ 2009-07-15 Harald Oehlmann <oehhar@users.sourceforge.net>
25
+
26
+ * dynhelp.tcl (DynamicHelp) Typo from yesterday corrected
27
+ [Patch 2820851] by Koen Danckaert
28
+
29
+ 2009-07-14 Harald Oehlmann <oehhar@users.sourceforge.net>
30
+
31
+ * dynhelp.tcl (DynamicHelp::_leave_info et al) issues:
32
+ - menu help sometimes not cleared when clicking off-window (unix)
33
+ - "-helpcmd" available also when dynamichelp is included in another
34
+ widget.
35
+ - given "-helpcmd" always called at global scope.
36
+ - Protect against multiple calls of <Leave> event.
37
+ [Patch 2820851] by Koen Danckaert
38
+
39
+ 2009-07-07 Harald Oehlmann <oehhar@users.sourceforge.net>
40
+
41
+ * combobox.tcl (ComboBox::_select) Do not export selection if
42
+ -exportselection 0 [Patch 981545] by Jeffrey Hobbs
43
+
44
+ 2009-07-02 Harald Oehlmann <oehhar@users.sourceforge.net>
45
+
46
+ * widget.tcl (Widget::configure) Bug: ProgressDlg option -geometry
47
+ not setable. The former patch was improved.
48
+ Koen Danckaert and myself argued, that we modify symptoms without
49
+ basic understandings. Anyway, better now than before.
50
+
51
+ 2009-07-01 Harald Oehlmann <oehhar@users.sourceforge.net>
52
+
53
+ * mainframe.tcl, MainFrame.html (MainFrame::getmenustate)
54
+ Added method getmenustate to return menu tag state
55
+ [Bug 948063] reported by Rolf Ade
56
+
57
+ * combobox.tcl (ComboBox::configure) Bug fixed: Widget did not take
58
+ focus, when -editable false and "configure -state normal" called.
59
+ [Bug 756334] reported by Rolf Ade
60
+
61
+ * widget.tcl (Widget::configure) Bug: ProgressDlg option -bg not
62
+ setable. The special handling of subwidgets with special class or
63
+ path ":cmd" was improved. [Bug 611477]
64
+
65
+ * notebook.tcl (NoteBook::_itemconfigure) Not honored option:
66
+ itemconfigure ... -helptext [Patch 2814050] by Koen Danckaert
67
+
68
+ 2009-06-30 Harald Oehlmann <oehhar@users.sourceforge.net>
69
+
70
+ * buttonbox.tcl (ButtonBox::_redraw) Bug corrected:
71
+ -uniform gridding option is used if tcl version >= 8.4 (not 8.3).
72
+ [Patch 2807147] by Koen Danckaert
73
+
74
+ * tree.tcl (Tree::_drop_cmd) If there is no node, drop didn't work.
75
+ [Bug 1042613] reported by Rolf Ade
76
+
77
+ * Tree.html Bind commands: removed promise that %W would work in future.
78
+ The underlying widgets should only be manipulated using the node id.
79
+ [Bug 1224203] by Jasper Taylor, remarks by J. Tang
80
+
81
+ * Tree.html Bind commands: with -selectfill, the given command is
82
+ overwritten for the background box. [Bug 1003962] by Torsten Berg
83
+
84
+ * dropsite.tcl (DropSite::register) Bug fixed: fails on multiple drop
85
+ targets [Bug 1213123] by T.Neil
86
+
87
+ * combobox.tcl (ComboBox::_create_popup) Bug fixed: Return key in drop
88
+ down list when -bwlistbox true [Bug 1205536] patch by Steve Landers
89
+
90
+ * combobox.tcl (ComboBox::_create_popup, ComboBox::_unmapliste)
91
+ Mac aqua and x11 fixes, multi screen issue still open.
92
+ [Bug 1451784] report by Jasper Taylor, fix by Kevin Walzer
93
+
94
+ * listbox.tcl (ListBox::_multiple_select) Selected item not deselected
95
+ on control-click [Bug 1029144] reported by Konrad Rosenbaum
96
+
97
+
98
+ 2009-06-29 Harald Oehlmann <oehhar@users.sourceforge.net>
99
+
100
+ * ScrolledWindow.html ScrolledWindow documentation changed:
101
+ Documented options: -ipad, -sides, -size, -managed
102
+ [Patch 2807160] Text by Koen Danckaert
103
+ Removed (read only) remark of option -scrollbar.
104
+
105
+ * scrollframe.tcl (ScrollableFrame::create) changed bindings
106
+ [Patch 2807227] by Koen Danckaert (comment)
107
+
108
+ * scrollw.tcl (ScrolledWindow::_set_hscroll, ScrolledWindow::_set_vscroll)
109
+ Bug corrected: enless loop when both scrollbars where automatically
110
+ mapped and the window size was changed by this action (on linux).
111
+ Scrollbar unmapping and mapping secured by a locked update [Bug 2783019]
112
+
113
+ * widget.tcl (Widget::tkinclude) : option data base entry name keeps the
114
+ original name and not the renamed name.
115
+ The only resulting modification is to rename the option key for
116
+ "MessageDlg -text" from "*MessageDlg.frame.msg.message" to
117
+ "*MessageDlg.frame.msg.text". [Bug 1266792]
118
+
119
+ * widget.tcl (Widget::init) : fixed a memory leak on wrong option value.
120
+ [Bug 1230737]
121
+
122
+ 2009-06-26 Harald Oehlmann <oehhar@users.sourceforge.net>
123
+
124
+ * listbox.tcl (ListBox::create et al) new feature: listbox option
125
+ -listbox now read/write [Bug 1501874] reported by Stephen Huntley
126
+
127
+ * dynhelp.tcl (DynamicHelp::_show_help) fixed issue (as far as possible):
128
+ Dynamic help baloon was on the main screen, if it touched the border on
129
+ a windows multi screen configuration.
130
+ The fix assumes, that all screens have same dimensions and no gaps in-
131
+ between. This is necessary, because multi-screen configuration paramters
132
+ may not be interrogated by tk (despite of coordinates out of the screen)
133
+ [Bug 1499135] reported by Gregor
134
+
135
+ * notebook.tcl (NoteBook::delete) Deleted also state variables
136
+ [Bug 1445219] reported by Eric Kemp-Benedict
137
+
138
+ 2009-06-25 Harald Oehlmann <oehhar@users.sourceforge.net>
139
+
140
+ * combobox.tcl (ComboBox::getvalue et al) fixed bug: getvalue returned
141
+ first apearence of current data instead of clicked index, which may not
142
+ be the same if values is not unique. Additional variable _index(path)
143
+ added to hold click index [Bug 1610965] reported by Martin Lemburg
144
+
145
+ 2009-06-24 Harald Oehlmann <oehhar@users.sourceforge.net>
146
+
147
+ * scrollframe.tcl (ScrollableFrame::create, ScrollableFrame::_resize,
148
+ ScrollableFrame::_frameConfigure) fixed two issues:
149
+ - Scrollbar activated even if not necessary
150
+ Fix: update scrolling reagion on configure event of the frame
151
+ - Disfunction if the frame got to small to be on the current view
152
+ Fix: update scrolling reagion on map or unmap events
153
+ [Patch 2807227] by Koen Danckaert
154
+
155
+ * buttonbox.tcl (ButtonBox::_redraw) Bug: homogeneous button width
156
+ not honored if button size changes after creation.
157
+ -uniform gridding option is used if tcl version >= 8.3.
158
+ [Patch 2807147] by Koen Danckaert
159
+
160
+ 2009-06-16 Harald Oehlmann <oehhar@users.sourceforge.net>
161
+
162
+ * combobox.tcl (ComboBox::_create_popup) In dropdown list,
163
+ a vertical scrollbar was always shown if horizantal is used.
164
+ ScrolledWindow is now called with "-managed 1".
165
+ [Patch 2807160] by Koen Danckaert
166
+
167
+ 2009-06-11 Harald Oehlmann <oehhar@users.sourceforge.net>
168
+
169
+ * combobox.tcl removed \ before empty line (potential
170
+ trap) [Bug 2804961] Andreas Kupries
171
+
172
+ * dialog.html Documented -geometry option.
173
+ [Bug 1634416] Erik Leunissen
174
+
175
+ 2009-06-10 Harald Oehlmann <oehhar@users.sourceforge.net>
176
+
177
+ * no.rc added norwegian translation file
178
+ [Feature Request 2797153] provided by Lars Martin Hambro
179
+
180
+ * passwddlg.tcl (PasswdDlg::_verifonpasswd) check for
181
+ disabled password field and confirm directly.
182
+ [Bug 1642050] (Calvin Bascom) Enter key did not confirm
183
+ dialog when -passwdstate disabled.
184
+
185
+ * combobox.tcl (ComboBox::_select) included [Patch 981545],
186
+ but commented out - it works for me without it.
187
+
188
+ 2009-06-10 Harald Oehlmann <oehhar@users.sourceforge.net>
189
+
190
+ * dialog.html Added documentation for option -buttonwidth
191
+ of Dialog
192
+ [Bug 1668587] (Eric Leunissen)
193
+
194
+ 2009-06-10 Harald Oehlmann <oehhar@users.sourceforge.net>
195
+
196
+ * arrow.tcl initialised set _grab(oldstate) to "normal" to avoid
197
+ error when there is a ArrowButton::_leave without corresponding
198
+ ArrowButton::_enter [Bug 2762361]
199
+
200
+ * entry.tcl (Entry::_path_command) Add "invoke" to the list of
201
+ internally handled commands
202
+ [Bug 2340320] (patch by relaxmike@users.sourceforge.net)
203
+
204
+ * uitils.tcl (BWidget::place) BWidget::place used screen width
205
+ instead window width.
206
+ [Bug 1842346] (patch by Niels Gollesch ngoelles@users.sourceforge.net)
207
+
208
+ * listbox.tcl (ListBox::_redraw_selection) Added check if redrawn
209
+ item is on the to-delete list and thus does not exist any more as
210
+ BWidget. [Bug 1752755] (legolas_a20@users.sourceforge.net]
211
+
212
+ 2008-10-30 Jeff Hobbs <jeffh@ActiveState.com>
213
+
214
+ * tree.tcl (Tree::_node_name_rev): Return node names as they are
215
+ input, and properly handle :: in node names. This changes
216
+ internal node name reps, but should be transparent to the user,
217
+ except for the result of [insert].
218
+
219
+ 2008-05-26 Jeff Hobbs <jeffh@ActiveState.com>
220
+
221
+ * tree.tcl (Tree::_redraw_selection): do not allow empty
222
+ * listbox.tcl (ListBox::_redraw_selection): fill color as that
223
+ creates a transparent item that doesn't return a bbox. This
224
+ showed up on OS X/Aqua, where the listbox selectforeground
225
+ defaults to empty. [AS Bug 77186 74923]
226
+
227
+ 2007-10-31 Jeff Hobbs <jeffh@ActiveState.com>
228
+
229
+ * lang/nl.rc (new): Dutch translation [Bug 1804469]
230
+
231
+ * lang/hu.rc (new): Hungarian translation [Bug 1821842]
232
+
233
+ * tree.tcl (Tree::insert): do node_name on parent arg [Bug 1046955]
234
+
235
+ * listbox.tcl: speed up ListBox insertion significantly. [Bug 1472443]
236
+
237
+ 2007-05-11 Jeff Hobbs <jeffh@ActiveState.com>
238
+
239
+ * widget.tcl (Widget::theme): make sure Tk 8.5a6 is recognized as
240
+ having the themed widgets
241
+
242
+ 2006-12-20 J. Tang <tang@jtang.org>
243
+
244
+ * util.tcl: fixed BWidget::write for widgets that require
245
+ DynamicHelp. [bug 1518803]
246
+
247
+ 2006-12-05 Andreas Kupries <andreask@activestate.com>
248
+
249
+ * demo/demo.tcl (Demo::main): Removed the 'inscope' qualifier from
250
+ the 'package require Bwidget'. The package system already forces
251
+ loading and sourcing of package code in the global namespace, so
252
+ this is bogus.
253
+
254
+ 2006-11-13 J. Tang <tang@jtang.org>
255
+
256
+ * panedw.tcl: if activator is set to line then its width is set to
257
+ 3. --activator was an undocumented option; updated man page to
258
+ make it documented. Thanks to Jos Decoster for pointing this out.
259
+
260
+ 2006-11-10 J. Tang <tang@jtang.org>
261
+
262
+ * widget.tcl: remove relative namespace resolution of variables,
263
+ in anticipation of TIP 278. Widget should have been doing this
264
+ anyways. [bug 1579744]
265
+
266
+ * DragSite.html: noted that -draginitcmd can return an empty
267
+ string to prevent a drag [bug 740499]
268
+
269
+ * DropSite.html: fixed documentation with DropSite::register
270
+ command [bug 740474]
271
+
272
+ * combobox.tcl: allow autocomplete and autopost be
273
+ enabled/disabled after the widget was created [bug 1588808]; fixed
274
+ keysym in autopost binding [bug 1589111]
275
+
276
+ * tree.tcl: fixed error with drag & drop's autoscroll [bug
277
+ 1408494]
278
+
279
+ * listbox.tcl: fixed error with drag & drop's autoscroll; fixed
280
+ error when dropping at the end of the list
281
+
282
+ * Added dynamic help to text tags (man page updated); fixed resize
283
+ bug with scrollframes. Thanks to Jos Decoster for these patches.
284
+
285
+ 2006-10-20 Jeff Hobbs <jeffh@ActiveState.com>
286
+
287
+ * utils.tcl (BWidget::bindMouseWheel): do not make special
288
+ mousewheel bindings if global ones exist (like from style::as)
289
+
1
290
  2006-09-28 J. Tang <tang@jtang.org>
2
291
 
3
292
  **** BWIDGET 1.8.0 TAGGED ****
@@ -1,4 +1,4 @@
1
- BWidget ToolKit 1.8.0 October 2006
1
+ BWidget ToolKit 1.9.0 July 2009
2
2
  Copyright (c) 1998-1999 UNIFIX.
3
3
  Copyright (c) 2001-2002 ActiveState Corp.
4
4
 
@@ -24,7 +24,7 @@ community developers. See the ChangeLog file for details.
24
24
 
25
25
  --------------------------------------------------------------------------
26
26
 
27
- WIDGET LIST (1.8)
27
+ WIDGET LIST (1.9)
28
28
 
29
29
  Simple Widgets
30
30
  Label Extended Label widget
@@ -70,7 +70,7 @@ namespace eval ArrowButton {
70
70
  variable _grab
71
71
  variable _moved
72
72
 
73
- array set _grab {current "" pressed "" oldstate "" oldrelief ""}
73
+ array set _grab {current "" pressed "" oldstate "normal" oldrelief ""}
74
74
  }
75
75
 
76
76
 
@@ -335,6 +335,11 @@ proc ButtonBox::_redraw { path } {
335
335
  upvar 0 $path data
336
336
  Widget::getVariable $path buttons
337
337
 
338
+ # For tk >= 8.4, -uniform gridding option is used.
339
+ # Otherwise, there is the constraint, that button size may not change after
340
+ # creation.
341
+ set uniformAvailable [expr {0 <= [package vcompare [info patchlevel] 8.4.0]}]
342
+
338
343
  ## We re-grid the buttons from left-to-right. As we go through
339
344
  ## each button, we check its spacing and which direction the
340
345
  ## spacing applies to. Once spacing has been applied to an index,
@@ -350,12 +355,16 @@ proc ButtonBox::_redraw { path } {
350
355
  if {[string equal [Widget::getoption $path -orient] "horizontal"]} {
351
356
  grid $but -column $idx -row 0 -sticky nsew
352
357
  if { [Widget::getoption $path -homogeneous] } {
353
- set req [winfo reqwidth $but]
354
- if { $req > $data(max) } {
355
- grid columnconfigure $path [expr {2*$i}] -minsize $req
356
- set data(max) $req
358
+ if {$uniformAvailable} {
359
+ grid columnconfigure $path $idx -uniform koen -weight 1
360
+ } else {
361
+ set req [winfo reqwidth $but]
362
+ if { $req > $data(max) } {
363
+ grid columnconfigure $path [expr {2*$i}] -minsize $req
364
+ set data(max) $req
365
+ }
366
+ grid columnconfigure $path $idx -weight 1
357
367
  }
358
- grid columnconfigure $path $idx -weight 1
359
368
  } else {
360
369
  grid columnconfigure $path $idx -weight 0
361
370
  }
@@ -380,13 +389,15 @@ proc ButtonBox::_redraw { path } {
380
389
  incr idx 2
381
390
  }
382
391
 
383
- # Now that the maximum size has been calculated, go back through
384
- # and correctly set the size for homogeneous horizontal buttons.
385
- if { [string equal [Widget::getoption $path -orient] "horizontal"] && [Widget::getoption $path -homogeneous] } {
386
- set idx 0
387
- foreach i $data(buttons) {
388
- grid columnconfigure $path $idx -minsize $data(max)
389
- incr idx 2
392
+ if {!$uniformAvailable} {
393
+ # Now that the maximum size has been calculated, go back through
394
+ # and correctly set the size for homogeneous horizontal buttons.
395
+ if { [string equal [Widget::getoption $path -orient] "horizontal"] && [Widget::getoption $path -homogeneous] } {
396
+ set idx 0
397
+ foreach i $data(buttons) {
398
+ grid columnconfigure $path $idx -minsize $data(max)
399
+ incr idx 2
400
+ }
390
401
  }
391
402
  }
392
403
  }
@@ -1,7 +1,7 @@
1
1
  # ----------------------------------------------------------------------------
2
2
  # combobox.tcl
3
3
  # This file is part of Unifix BWidget Toolkit
4
- # $Id: combobox.tcl,v 1.34 2006/09/28 15:46:06 dev_null42a Exp $
4
+ # $Id: combobox.tcl,v 1.42 2009/07/07 17:28:14 oehhar Exp $
5
5
  # ----------------------------------------------------------------------------
6
6
  # Index of commands:
7
7
  # - ComboBox::create
@@ -25,7 +25,7 @@ namespace eval ComboBox {
25
25
 
26
26
  Widget::tkinclude ComboBox frame :cmd \
27
27
  include {-relief -borderwidth -bd -background} \
28
- initialize {-relief sunken -borderwidth 2} \
28
+ initialize {-relief sunken -borderwidth 2}
29
29
 
30
30
  Widget::bwinclude ComboBox Entry .e \
31
31
  remove {-relief -bd -borderwidth -bg} \
@@ -53,13 +53,15 @@ namespace eval ComboBox {
53
53
  Widget::syncoptions ComboBox Entry .e {-text {}}
54
54
 
55
55
  ::bind BwComboBox <FocusIn> [list after idle {BWidget::refocus %W %W.e}]
56
- ::bind BwComboBox <Destroy> [list Widget::destroy %W]
56
+ ::bind BwComboBox <Destroy> [list ComboBox::_destroy %W]
57
57
 
58
58
  ::bind ListBoxHotTrack <Motion> {
59
59
  %W selection clear 0 end
60
60
  %W activate @%x,%y
61
61
  %W selection set @%x,%y
62
62
  }
63
+
64
+ variable _index
63
65
  }
64
66
 
65
67
 
@@ -101,7 +103,7 @@ proc ComboBox::create { path args } {
101
103
  ::bind $entry <Key-Down> [list ComboBox::_mapliste $path]
102
104
  }
103
105
 
104
- if {[string equal $::tcl_platform(platform) "unix"]} {
106
+ if {[string equal [tk windowingsystem] "x11"]} {
105
107
  set ipadx 0
106
108
  set width 11
107
109
  } else {
@@ -155,6 +157,8 @@ proc ComboBox::create { path args } {
155
157
  Widget::configure $path [list -bwlistbox $bw]
156
158
  }
157
159
 
160
+ set ComboBox::_index($path) -1
161
+
158
162
  return [Widget::create ComboBox $path]
159
163
  }
160
164
 
@@ -181,8 +185,8 @@ proc ComboBox::configure { path args } {
181
185
  set entry $path.e
182
186
 
183
187
 
184
- set list [list -images -values -bwlistbox -hottrack]
185
- foreach {ci cv cb ch} [eval [linsert $list 0 Widget::hasChangedX $path]] { break }
188
+ set list [list -images -values -bwlistbox -hottrack -autocomplete -autopost]
189
+ foreach {ci cv cb ch cac cap} [eval [linsert $list 0 Widget::hasChangedX $path]] { break }
186
190
 
187
191
  if { $ci } {
188
192
  set images [Widget::cget $path -images]
@@ -193,6 +197,40 @@ proc ComboBox::configure { path args } {
193
197
  }
194
198
  }
195
199
 
200
+ ## If autocomplete toggled, turn bindings on/off
201
+ if { $cac } {
202
+ if {[Widget::cget $path -autocomplete]} {
203
+ ::bind $entry <KeyRelease> +[list $path _auto_complete %K]
204
+ } else {
205
+ set bindings [split [::bind $entry <KeyRelease>] \n]
206
+ if {[set idx [lsearch $bindings [list $path _auto_complete %K]]] != -1} {
207
+ ::bind $entry <KeyRelease> [join [lreplace $bindings $idx $idx] \n]
208
+ }
209
+ }
210
+ }
211
+
212
+ ## If autopost toggled, turn bindings on/off
213
+ if { $cap } {
214
+ if {[Widget::cget $path -autopost]} {
215
+ ::bind $entry <KeyRelease> +[list $path _auto_post %K]
216
+ set bindings [split [::bind $entry <Key-Up>] \n]
217
+ if {[set idx [lsearch $bindings [list ComboBox::_unmapliste $path]]] != -1} {
218
+ ::bind $entry <Key-Up> [join [lreplace $bindings $idx $idx] \n]
219
+ }
220
+ set bindings [split [::bind $entry <Key-Down>] \n]
221
+ if {[set idx [lsearch $bindings [list ComboBox::_mapliste $path]]] != -1} {
222
+ ::bind $entry <Key-Down> [join [lreplace $bindings $idx $idx] \n]
223
+ }
224
+ } else {
225
+ set bindings [split [::bind $entry <KeyRelease>] \n]
226
+ if {[set idx [lsearch $bindings [list $path _auto_post %K]]] != -1} {
227
+ ::bind $entry <KeyRelease> [join [lreplace $bindings $idx $idx] \n]
228
+ }
229
+ ::bind $entry <Key-Up> +[list ComboBox::_unmapliste $path]
230
+ ::bind $entry <Key-Down> +[list ComboBox::_mapliste $path]
231
+ }
232
+ }
233
+
196
234
  set bw [Widget::cget $path -bwlistbox]
197
235
 
198
236
  ## If the images, bwlistbox, hottrack or values have changed,
@@ -234,6 +272,13 @@ proc ComboBox::configure { path args } {
234
272
  }
235
273
  }
236
274
 
275
+ # if state changed to normal and -editable false, the edit must take focus
276
+ if { [Widget::hasChangedX $path -state] \
277
+ && ![string equal [Widget::cget $path -state] "disabled"] \
278
+ && ![Widget::cget $path -editable] } {
279
+ Entry::configure $entry -takefocus 1
280
+ }
281
+
237
282
  # if the dropdown listbox is shown, simply force the actual entry
238
283
  # colors into it. If it is not shown, the next time the dropdown
239
284
  # is shown it'll get the actual colors anyway
@@ -261,6 +306,8 @@ proc ComboBox::cget { path option } {
261
306
  # Command ComboBox::setvalue
262
307
  # ----------------------------------------------------------------------------
263
308
  proc ComboBox::setvalue { path index } {
309
+ variable _index
310
+
264
311
  set values [Widget::getMegawidgetOption $path -values]
265
312
  set value [Entry::cget $path.e -text]
266
313
  switch -- $index {
@@ -297,6 +344,7 @@ proc ComboBox::setvalue { path index } {
297
344
  }
298
345
  if { $idx >= 0 && $idx < [llength $values] } {
299
346
  set newval [lindex $values $idx]
347
+ set _index($path) $idx
300
348
  Entry::configure $path.e -text $newval
301
349
  return 1
302
350
  }
@@ -318,8 +366,17 @@ proc ComboBox::get { path } {
318
366
  # Command ComboBox::getvalue
319
367
  # ----------------------------------------------------------------------------
320
368
  proc ComboBox::getvalue { path } {
369
+ variable _index
321
370
  set values [Widget::getMegawidgetOption $path -values]
322
371
  set value [Entry::cget $path.e -text]
372
+ # Check if an index was saved by the last setvalue operation
373
+ # If this index still matches it is returned
374
+ # This is necessary for the case when values is not unique
375
+ if { $_index($path) >= 0 \
376
+ && $_index($path) < [llength $values] \
377
+ && $value eq [lindex $values $_index($path)]} {
378
+ return $_index($path)
379
+ }
323
380
 
324
381
  return [lsearch -exact $values $value]
325
382
  }
@@ -401,7 +458,7 @@ proc ComboBox::_create_popup { path } {
401
458
  }
402
459
  }
403
460
 
404
- if { $::tcl_platform(platform) == "unix" } {
461
+ if {[string equal [tk windowingsystem] "x11"]} {
405
462
  set sbwidth 11
406
463
  } else {
407
464
  set sbwidth 15
@@ -409,12 +466,15 @@ proc ComboBox::_create_popup { path } {
409
466
 
410
467
  toplevel $shell -relief solid -bd 1
411
468
  wm withdraw $shell
412
- update idle
413
469
  wm overrideredirect $shell 1
414
- wm transient $shell [winfo toplevel $path]
415
- catch { wm attributes $shell -topmost 1 }
470
+ # these commands cause the combobox to behave strangely on OS X
471
+ if {![string equal [tk windowingsystem] "aqua"]} {
472
+ update idle
473
+ wm transient $shell [winfo toplevel $path]
474
+ catch { wm attributes $shell -topmost 1 }
475
+ }
416
476
 
417
- set sw [ScrolledWindow $shell.sw -managed 0 -size $sbwidth -ipad 0]
477
+ set sw [ScrolledWindow $shell.sw -managed 1 -size $sbwidth -ipad 0]
418
478
 
419
479
  if {$bw} {
420
480
  set listb [ListBox $shell.listb \
@@ -457,7 +517,7 @@ proc ComboBox::_create_popup { path } {
457
517
  pack $sw -fill both -expand yes
458
518
  $sw setwidget $listb
459
519
 
460
- ::bind $listb <Return> "ComboBox::_select [list $path] \[%W curselection\]"
520
+ ::bind $listb <Return> "ComboBox::_select [list $path] \[$listb curselection\]"
461
521
  ::bind $listb <Escape> [list ComboBox::_unmapliste $path]
462
522
  ::bind $listb <FocusOut> [list ComboBox::_focus_out $path]
463
523
  }
@@ -483,7 +543,7 @@ proc ComboBox::_recreate_popup { path } {
483
543
  }
484
544
  }
485
545
 
486
- if { $::tcl_platform(platform) == "unix" } {
546
+ if { [string equal [tk windowingsystem] "x11"] } {
487
547
  set sbwidth 11
488
548
  } else {
489
549
  set sbwidth 15
@@ -502,7 +562,7 @@ proc ComboBox::_recreate_popup { path } {
502
562
 
503
563
  set listb $shell.listb
504
564
  destroy $shell.sw
505
- set sw [ScrolledWindow $shell.sw -managed 0 -size $sbwidth -ipad 0]
565
+ set sw [ScrolledWindow $shell.sw -managed 1 -size $sbwidth -ipad 0]
506
566
  $listb configure \
507
567
  -height $h \
508
568
  -font [Widget::cget $path -font] \
@@ -573,7 +633,9 @@ proc ComboBox::_mapliste { path } {
573
633
  wm deiconify $path.shell
574
634
  raise $path.shell
575
635
  BWidget::focus set $listb
576
- BWidget::grab global $path
636
+ if { ! [string equal [tk windowingsystem] "aqua"] } {
637
+ BWidget::grab global $path
638
+ }
577
639
  }
578
640
 
579
641
 
@@ -581,15 +643,19 @@ proc ComboBox::_mapliste { path } {
581
643
  # Command ComboBox::_unmapliste
582
644
  # ----------------------------------------------------------------------------
583
645
  proc ComboBox::_unmapliste { path {refocus 1} } {
646
+ # On aqua, state is zoomed, otherwise normal
584
647
  if {[winfo exists $path.shell] && \
585
- [string equal [wm state $path.shell] "normal"]} {
586
- BWidget::grab release $path
587
- BWidget::focus release $path.shell.listb $refocus
588
- # Update now because otherwise [focus -force...] makes the app hang!
589
- if {$refocus} {
590
- update
591
- focus -force $path.e
592
- }
648
+ ( [string equal [wm state $path.shell] "normal"] ||
649
+ [string equal [wm state $path.shell] "zoomed"] ) } {
650
+ if {![string equal [tk windowingsystem] "aqua"]} {
651
+ BWidget::grab release $path
652
+ BWidget::focus release $path.shell.listb $refocus
653
+ # Update now because otherwise [focus -force...] makes the app hang!
654
+ if {$refocus} {
655
+ update
656
+ focus -force $path.e
657
+ }
658
+ }
593
659
  wm withdraw $path.shell
594
660
  ArrowButton::configure $path.a -relief raised
595
661
  }
@@ -611,7 +677,9 @@ proc ComboBox::_select { path index } {
611
677
  }
612
678
  }
613
679
  $path.e selection clear
614
- $path.e selection range 0 end
680
+ if {[$path.e cget -exportselection]} {
681
+ $path.e selection range 0 end
682
+ }
615
683
  }
616
684
 
617
685
 
@@ -758,7 +826,7 @@ proc ComboBox::_auto_post { path key } {
758
826
  set x -1
759
827
  }
760
828
  if {([string length $key] > 1 && [string tolower $key] != $key) && \
761
- [string equal $key "Backspace"] != 0 && \
829
+ [string equal $key "BackSpace"] != 0 && \
762
830
  [string equal $key "Up"] != 0 && \
763
831
  [string equal $key "Down"] != 0} {
764
832
  return
@@ -807,3 +875,11 @@ proc ComboBox::_auto_post { path key } {
807
875
  $path.shell.listb see $x
808
876
  }
809
877
  }
878
+ # ------------------------------------------------------------------------------
879
+ # Command ComboBox::_destroy
880
+ # ------------------------------------------------------------------------------
881
+ proc ComboBox::_destroy { path } {
882
+ variable _index
883
+ Widget::destroy $path
884
+ unset _index($path)
885
+ }