glimmer-dsl-swt 4.25.0.2 → 4.26.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +9 -6
  4. data/VERSION +1 -1
  5. data/bin/girb +1 -1
  6. data/bin/girb_runner.rb +1 -1
  7. data/bin/glimmer +1 -1
  8. data/bin/glimmer-setup +1 -1
  9. data/docs/reference/GLIMMER_COMMAND.md +2 -2
  10. data/docs/reference/GLIMMER_CONFIGURATION.md +1 -1
  11. data/docs/reference/GLIMMER_GIRB.md +1 -1
  12. data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +309 -3
  13. data/docs/reference/GLIMMER_PACKAGING_AND_DISTRIBUTION.md +2 -2
  14. data/docs/reference/GLIMMER_SAMPLES.md +1 -1
  15. data/docs/reference/GLIMMER_STYLE_GUIDE.md +1 -1
  16. data/glimmer-dsl-swt.gemspec +0 -0
  17. data/lib/ext/glimmer/config.rb +1 -1
  18. data/lib/ext/glimmer.rb +1 -1
  19. data/lib/ext/rouge/themes/glimmer.rb +1 -1
  20. data/lib/ext/rouge/themes/glimmer_dark.rb +1 -1
  21. data/lib/glimmer/data_binding/list_selection_binding.rb +1 -1
  22. data/lib/glimmer/data_binding/observable_widget.rb +1 -1
  23. data/lib/glimmer/data_binding/table_items_binding.rb +1 -1
  24. data/lib/glimmer/data_binding/tree_items_binding.rb +1 -1
  25. data/lib/glimmer/data_binding/widget_binding.rb +1 -1
  26. data/lib/glimmer/dsl/swt/animation_expression.rb +1 -1
  27. data/lib/glimmer/dsl/swt/async_exec_expression.rb +1 -1
  28. data/lib/glimmer/dsl/swt/auto_exec_expression.rb +1 -1
  29. data/lib/glimmer/dsl/swt/bind_expression.rb +1 -1
  30. data/lib/glimmer/dsl/swt/block_property_expression.rb +1 -1
  31. data/lib/glimmer/dsl/swt/c_tab_item_expression.rb +1 -1
  32. data/lib/glimmer/dsl/swt/checkbox_group_selection_data_binding_expression.rb +1 -1
  33. data/lib/glimmer/dsl/swt/color_expression.rb +1 -1
  34. data/lib/glimmer/dsl/swt/column_properties_expression.rb +1 -1
  35. data/lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb +1 -1
  36. data/lib/glimmer/dsl/swt/cursor_expression.rb +1 -1
  37. data/lib/glimmer/dsl/swt/custom_shape_expression.rb +1 -1
  38. data/lib/glimmer/dsl/swt/custom_widget_expression.rb +1 -1
  39. data/lib/glimmer/dsl/swt/data_binding_expression.rb +1 -1
  40. data/lib/glimmer/dsl/swt/dialog_expression.rb +1 -1
  41. data/lib/glimmer/dsl/swt/display_expression.rb +1 -1
  42. data/lib/glimmer/dsl/swt/dnd_expression.rb +1 -1
  43. data/lib/glimmer/dsl/swt/dsl.rb +1 -1
  44. data/lib/glimmer/dsl/swt/exec_expression.rb +1 -1
  45. data/lib/glimmer/dsl/swt/expand_item_expression.rb +1 -1
  46. data/lib/glimmer/dsl/swt/font_expression.rb +1 -1
  47. data/lib/glimmer/dsl/swt/image_expression.rb +2 -1
  48. data/lib/glimmer/dsl/swt/layout_data_expression.rb +1 -1
  49. data/lib/glimmer/dsl/swt/layout_expression.rb +1 -1
  50. data/lib/glimmer/dsl/swt/list_selection_data_binding_expression.rb +1 -1
  51. data/lib/glimmer/dsl/swt/listener_expression.rb +1 -1
  52. data/lib/glimmer/dsl/swt/menu_bar_expression.rb +1 -1
  53. data/lib/glimmer/dsl/swt/menu_expression.rb +1 -1
  54. data/lib/glimmer/dsl/swt/message_box_expression.rb +1 -1
  55. data/lib/glimmer/dsl/swt/multiply_expression.rb +1 -1
  56. data/lib/glimmer/dsl/swt/observe_expression.rb +1 -1
  57. data/lib/glimmer/dsl/swt/pixel_expression.rb +1 -1
  58. data/lib/glimmer/dsl/swt/property_expression.rb +1 -1
  59. data/lib/glimmer/dsl/swt/radio_group_selection_data_binding_expression.rb +1 -1
  60. data/lib/glimmer/dsl/swt/rgb_expression.rb +1 -1
  61. data/lib/glimmer/dsl/swt/rgba_expression.rb +1 -1
  62. data/lib/glimmer/dsl/swt/shape_expression.rb +1 -1
  63. data/lib/glimmer/dsl/swt/shell_expression.rb +1 -1
  64. data/lib/glimmer/dsl/swt/shine_data_binding_expression.rb +1 -1
  65. data/lib/glimmer/dsl/swt/swt_expression.rb +1 -1
  66. data/lib/glimmer/dsl/swt/sync_call_expression.rb +1 -1
  67. data/lib/glimmer/dsl/swt/sync_exec_expression.rb +1 -1
  68. data/lib/glimmer/dsl/swt/tab_item_expression.rb +1 -1
  69. data/lib/glimmer/dsl/swt/table_items_data_binding_expression.rb +1 -1
  70. data/lib/glimmer/dsl/swt/timer_exec_expression.rb +1 -1
  71. data/lib/glimmer/dsl/swt/transform_expression.rb +1 -1
  72. data/lib/glimmer/dsl/swt/tray_expression.rb +1 -1
  73. data/lib/glimmer/dsl/swt/tray_item_expression.rb +1 -1
  74. data/lib/glimmer/dsl/swt/tree_items_data_binding_expression.rb +1 -1
  75. data/lib/glimmer/dsl/swt/tree_properties_expression.rb +1 -1
  76. data/lib/glimmer/dsl/swt/widget_expression.rb +1 -1
  77. data/lib/glimmer/launcher.rb +1 -1
  78. data/lib/glimmer/rake_task/list.rb +1 -1
  79. data/lib/glimmer/rake_task/package.rb +1 -1
  80. data/lib/glimmer/rake_task/scaffold.rb +2 -2
  81. data/lib/glimmer/rake_task.rb +1 -1
  82. data/lib/glimmer/swt/c_tab_item_proxy.rb +1 -1
  83. data/lib/glimmer/swt/color_proxy.rb +1 -1
  84. data/lib/glimmer/swt/combo_proxy.rb +1 -1
  85. data/lib/glimmer/swt/cursor_proxy.rb +1 -1
  86. data/lib/glimmer/swt/custom/animation.rb +1 -1
  87. data/lib/glimmer/swt/custom/checkbox_group.rb +1 -1
  88. data/lib/glimmer/swt/custom/code_text.rb +1 -1
  89. data/lib/glimmer/swt/custom/drawable.rb +1 -1
  90. data/lib/glimmer/swt/custom/radio_group.rb +1 -1
  91. data/lib/glimmer/swt/custom/refined_table.rb +1 -1
  92. data/lib/glimmer/swt/custom/shape/arc.rb +1 -1
  93. data/lib/glimmer/swt/custom/shape/cubic.rb +1 -1
  94. data/lib/glimmer/swt/custom/shape/focus.rb +1 -1
  95. data/lib/glimmer/swt/custom/shape/image.rb +1 -1
  96. data/lib/glimmer/swt/custom/shape/line.rb +1 -1
  97. data/lib/glimmer/swt/custom/shape/oval.rb +1 -1
  98. data/lib/glimmer/swt/custom/shape/path.rb +1 -1
  99. data/lib/glimmer/swt/custom/shape/path_segment.rb +1 -1
  100. data/lib/glimmer/swt/custom/shape/point.rb +1 -1
  101. data/lib/glimmer/swt/custom/shape/polygon.rb +1 -1
  102. data/lib/glimmer/swt/custom/shape/polyline.rb +1 -1
  103. data/lib/glimmer/swt/custom/shape/quad.rb +1 -1
  104. data/lib/glimmer/swt/custom/shape/rectangle.rb +1 -1
  105. data/lib/glimmer/swt/custom/shape/text.rb +1 -1
  106. data/lib/glimmer/swt/custom/shape.rb +1 -1
  107. data/lib/glimmer/swt/date_time_proxy.rb +1 -1
  108. data/lib/glimmer/swt/dialog_proxy.rb +1 -1
  109. data/lib/glimmer/swt/display_proxy.rb +1 -1
  110. data/lib/glimmer/swt/dnd_proxy.rb +1 -1
  111. data/lib/glimmer/swt/expand_item_proxy.rb +1 -1
  112. data/lib/glimmer/swt/font_proxy.rb +1 -1
  113. data/lib/glimmer/swt/image_proxy.rb +1 -1
  114. data/lib/glimmer/swt/layout_data_proxy.rb +1 -1
  115. data/lib/glimmer/swt/layout_proxy.rb +1 -1
  116. data/lib/glimmer/swt/menu_proxy.rb +1 -1
  117. data/lib/glimmer/swt/message_box_proxy.rb +1 -1
  118. data/lib/glimmer/swt/packages.rb +1 -1
  119. data/lib/glimmer/swt/properties.rb +1 -1
  120. data/lib/glimmer/swt/proxy_properties.rb +1 -1
  121. data/lib/glimmer/swt/sash_form_proxy.rb +1 -1
  122. data/lib/glimmer/swt/scrolled_composite_proxy.rb +1 -1
  123. data/lib/glimmer/swt/shape_listener_proxy.rb +1 -1
  124. data/lib/glimmer/swt/shell_proxy.rb +1 -1
  125. data/lib/glimmer/swt/style_constantizable.rb +1 -1
  126. data/lib/glimmer/swt/styled_text_proxy.rb +1 -1
  127. data/lib/glimmer/swt/swt_proxy.rb +1 -1
  128. data/lib/glimmer/swt/tab_folder_proxy.rb +1 -1
  129. data/lib/glimmer/swt/tab_item_proxy.rb +1 -1
  130. data/lib/glimmer/swt/table_column_proxy.rb +1 -1
  131. data/lib/glimmer/swt/table_proxy.rb +1 -1
  132. data/lib/glimmer/swt/tool_bar_proxy.rb +1 -1
  133. data/lib/glimmer/swt/transform_proxy.rb +1 -1
  134. data/lib/glimmer/swt/tray_item_proxy.rb +1 -1
  135. data/lib/glimmer/swt/tray_proxy.rb +1 -1
  136. data/lib/glimmer/swt/tree_proxy.rb +1 -1
  137. data/lib/glimmer/swt/widget_listener_proxy.rb +1 -1
  138. data/lib/glimmer/swt/widget_proxy.rb +1 -1
  139. data/lib/glimmer/ui/custom_shape.rb +1 -1
  140. data/lib/glimmer/ui/custom_shell.rb +1 -1
  141. data/lib/glimmer/ui/custom_widget.rb +1 -1
  142. data/lib/glimmer/ui.rb +1 -1
  143. data/lib/glimmer/util/proc_tracker.rb +1 -1
  144. data/lib/glimmer-dsl-swt.rb +1 -1
  145. data/samples/elaborate/battleship/model/cell.rb +1 -1
  146. data/samples/elaborate/battleship/model/game.rb +1 -1
  147. data/samples/elaborate/battleship/model/grid.rb +1 -1
  148. data/samples/elaborate/battleship/model/ship.rb +1 -1
  149. data/samples/elaborate/battleship/model/ship_collection.rb +1 -1
  150. data/samples/elaborate/battleship/view/action_panel.rb +1 -1
  151. data/samples/elaborate/battleship/view/cell.rb +1 -1
  152. data/samples/elaborate/battleship/view/grid.rb +1 -1
  153. data/samples/elaborate/battleship/view/ship.rb +1 -1
  154. data/samples/elaborate/battleship/view/ship_collection.rb +1 -1
  155. data/samples/elaborate/battleship.rb +1 -1
  156. data/samples/elaborate/calculator.rb +1 -1
  157. data/samples/elaborate/clock.rb +1 -1
  158. data/samples/elaborate/connect4/model/grid.rb +1 -1
  159. data/samples/elaborate/connect4/model/slot.rb +1 -1
  160. data/samples/elaborate/connect4.rb +1 -1
  161. data/samples/elaborate/contact_manager/contact.rb +1 -1
  162. data/samples/elaborate/contact_manager/contact_manager_presenter.rb +1 -1
  163. data/samples/elaborate/contact_manager/contact_repository.rb +1 -1
  164. data/samples/elaborate/contact_manager.rb +1 -1
  165. data/samples/elaborate/game_of_life/model/cell.rb +1 -1
  166. data/samples/elaborate/game_of_life/model/grid.rb +1 -1
  167. data/samples/elaborate/game_of_life.rb +1 -1
  168. data/samples/elaborate/klondike_solitaire.rb +1 -1
  169. data/samples/elaborate/login.rb +1 -1
  170. data/samples/elaborate/mandelbrot_fractal.rb +1 -1
  171. data/samples/elaborate/meta_sample.rb +2 -2
  172. data/samples/elaborate/metronome.rb +1 -1
  173. data/samples/elaborate/parking/model/parking_floor.rb +1 -1
  174. data/samples/elaborate/parking/model/parking_presenter.rb +1 -1
  175. data/samples/elaborate/parking/model/parking_spot.rb +1 -1
  176. data/samples/elaborate/parking.rb +1 -1
  177. data/samples/elaborate/quarto/model/game.rb +1 -1
  178. data/samples/elaborate/quarto/model/piece/cube.rb +1 -1
  179. data/samples/elaborate/quarto/model/piece/cylinder.rb +1 -1
  180. data/samples/elaborate/quarto/model/piece.rb +1 -1
  181. data/samples/elaborate/quarto/view/available_pieces_area.rb +1 -1
  182. data/samples/elaborate/quarto/view/board.rb +1 -1
  183. data/samples/elaborate/quarto/view/cell.rb +1 -1
  184. data/samples/elaborate/quarto/view/cube.rb +1 -1
  185. data/samples/elaborate/quarto/view/cylinder.rb +1 -1
  186. data/samples/elaborate/quarto/view/message_box_panel.rb +1 -1
  187. data/samples/elaborate/quarto/view/piece.rb +1 -1
  188. data/samples/elaborate/quarto/view/selected_piece_area.rb +1 -1
  189. data/samples/elaborate/quarto.rb +1 -1
  190. data/samples/elaborate/stock_ticker.rb +1 -1
  191. data/samples/elaborate/tetris/model/block.rb +1 -1
  192. data/samples/elaborate/tetris/model/game.rb +1 -1
  193. data/samples/elaborate/tetris/model/past_game.rb +1 -1
  194. data/samples/elaborate/tetris/model/tetromino.rb +1 -1
  195. data/samples/elaborate/tetris/view/bevel.rb +1 -1
  196. data/samples/elaborate/tetris/view/block.rb +1 -1
  197. data/samples/elaborate/tetris/view/high_score_dialog.rb +1 -1
  198. data/samples/elaborate/tetris/view/playfield.rb +1 -1
  199. data/samples/elaborate/tetris/view/score_lane.rb +1 -1
  200. data/samples/elaborate/tetris/view/tetris_menu_bar.rb +1 -1
  201. data/samples/elaborate/tetris.rb +2 -2
  202. data/samples/elaborate/tic_tac_toe/board.rb +1 -1
  203. data/samples/elaborate/tic_tac_toe/cell.rb +1 -1
  204. data/samples/elaborate/tic_tac_toe.rb +1 -1
  205. data/samples/elaborate/timer.rb +1 -1
  206. data/samples/elaborate/user_profile.rb +1 -1
  207. data/samples/elaborate/weather.rb +1 -1
  208. data/samples/hello/hello_arrow.rb +1 -1
  209. data/samples/hello/hello_browser.rb +1 -1
  210. data/samples/hello/hello_button.rb +1 -1
  211. data/samples/hello/hello_c_combo.rb +1 -1
  212. data/samples/hello/hello_c_tab.rb +1 -1
  213. data/samples/hello/hello_canvas.rb +1 -1
  214. data/samples/hello/hello_canvas_animation.rb +1 -1
  215. data/samples/hello/hello_canvas_animation_multi.rb +1 -1
  216. data/samples/hello/hello_canvas_data_binding.rb +1 -1
  217. data/samples/hello/hello_canvas_drag_and_drop.rb +1 -1
  218. data/samples/hello/hello_canvas_path.rb +1 -1
  219. data/samples/hello/hello_canvas_shape_listeners.rb +1 -1
  220. data/samples/hello/hello_checkbox.rb +1 -1
  221. data/samples/hello/hello_checkbox_group.rb +1 -1
  222. data/samples/hello/hello_code_text.rb +1 -1
  223. data/samples/hello/hello_color_dialog.rb +1 -1
  224. data/samples/hello/hello_combo.rb +1 -1
  225. data/samples/hello/hello_composite.rb +1 -1
  226. data/samples/hello/hello_computed.rb +1 -1
  227. data/samples/hello/hello_cool_bar.rb +1 -1
  228. data/samples/hello/hello_cursor.rb +1 -1
  229. data/samples/hello/hello_custom_shape.rb +1 -1
  230. data/samples/hello/hello_custom_shell.rb +1 -1
  231. data/samples/hello/hello_custom_widget.rb +1 -1
  232. data/samples/hello/hello_date_time.rb +1 -1
  233. data/samples/hello/hello_dialog.rb +1 -1
  234. data/samples/hello/hello_directory_dialog.rb +1 -1
  235. data/samples/hello/hello_drag_and_drop.rb +1 -1
  236. data/samples/hello/hello_expand_bar.rb +1 -1
  237. data/samples/hello/hello_file_dialog.rb +1 -1
  238. data/samples/hello/hello_font_dialog.rb +1 -1
  239. data/samples/hello/hello_group.rb +1 -1
  240. data/samples/hello/hello_label.rb +1 -1
  241. data/samples/hello/hello_layout.rb +1 -1
  242. data/samples/hello/hello_link.rb +1 -1
  243. data/samples/hello/hello_list_multi_selection.rb +2 -2
  244. data/samples/hello/hello_list_single_selection.rb +1 -1
  245. data/samples/hello/hello_menu_bar.rb +1 -1
  246. data/samples/hello/hello_message_box.rb +1 -1
  247. data/samples/hello/hello_pop_up_context_menu.rb +1 -1
  248. data/samples/hello/hello_print.rb +1 -1
  249. data/samples/hello/hello_print_dialog.rb +1 -1
  250. data/samples/hello/hello_progress_bar.rb +1 -1
  251. data/samples/hello/hello_radio.rb +1 -1
  252. data/samples/hello/hello_radio_group.rb +1 -1
  253. data/samples/hello/hello_refined_table.rb +1 -1
  254. data/samples/hello/hello_sash_form.rb +1 -1
  255. data/samples/hello/hello_scale.rb +1 -1
  256. data/samples/hello/hello_scrolled_composite.rb +1 -1
  257. data/samples/hello/hello_shape.rb +1 -1
  258. data/samples/hello/hello_shell.rb +1 -1
  259. data/samples/hello/hello_slider.rb +1 -1
  260. data/samples/hello/hello_spinner.rb +1 -1
  261. data/samples/hello/hello_styled_text.rb +1 -1
  262. data/samples/hello/hello_tab.rb +1 -1
  263. data/samples/hello/hello_table.rb +1 -1
  264. data/samples/hello/hello_text.rb +1 -1
  265. data/samples/hello/hello_toggle.rb +1 -1
  266. data/samples/hello/hello_tool_bar.rb +1 -1
  267. data/samples/hello/hello_tray_item.rb +1 -1
  268. data/samples/hello/hello_tree.rb +1 -1
  269. data/samples/hello/hello_world.rb +1 -1
  270. data/vendor/swt/linux/swt.jar +0 -0
  271. data/vendor/swt/linux_aarch64/swt.jar +0 -0
  272. data/vendor/swt/mac/swt.jar +0 -0
  273. data/vendor/swt/mac_aarch64/swt.jar +0 -0
  274. data/vendor/swt/windows/swt.jar +0 -0
  275. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33dcda40fcdf220f308eacd22b6fa2071fd80f9bd8cd5cbc7d56c53f9e74fbb5
4
- data.tar.gz: 94874ac017afdbf04fe7d9c56f95ca5a6c9fd3c242db6414c55b23ddc9016c75
3
+ metadata.gz: 1c5d7904078384e423ce05f76160b9b3587723426e587e60d8dbca973a858e74
4
+ data.tar.gz: 0575cb08435dbf1daf891bed0d2467f4d933035ba4b6459cf7e530abc553a2d1
5
5
  SHA512:
6
- metadata.gz: 60ad5e3647148971dd5dd11d6689d49d43dbad002d8a63df882f072c3bc2ac77cc01cabb0442483b33910c71f5a6c7c0aad418ef7fce73e8833097b0148ac669
7
- data.tar.gz: 27cadffe2d34a89dfbbad5159441adca861e91f57c76c4e7bf257624abbcb1b63f5d84fc87bc4aba4dbc42425298975e79089ac48eecf46bdedf1a47ce448e41
6
+ metadata.gz: 9488213d9f215566df751407d215f38eabef96f6af4f41cb54bd05d2a7bb382af86bdd9878ead14e691d14ac13b322b0e582efbb1c6d9257181285b881763b18
7
+ data.tar.gz: c8057cdc83b98a948c0f0544caf5b2f91900ca7a61985812d1dd3d13323210629d90b72f68a3a2ee28c43878c49f61a68f62a9b3ac9130e63eeecb0efea5e45f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.26.0.1
4
+
5
+ - Fix an issue that prevented data-binding the `image` widget property using Shine syntax (e.g. `image <= [model, :attr]` inside `tool_item`)
6
+
7
+ ## 4.26.0.0
8
+
9
+ - Upgrade to SWT 4.26
10
+ - Ensure that scaffolded custom widget (red label) uses SWT constants passed to custom widget
11
+ - Update sash form weights in Meta Sample for bigger monitors (give more space to code)
12
+ - Pass border to multi-line lists since it will not be included by default anymore given they are overridden with :multi SWT style
13
+
3
14
  ## 4.25.0.2
4
15
 
5
16
  - Fix issue with Hello, Label! crashing because image width is getting passed as 0 and the new SWT 4.25 ImageData API rejecting it as not a valid argument
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
- # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.25.0.2
1
+ # [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.26.0.1
2
2
  ## JRuby Desktop Development GUI Framework
3
+ ### The Quickest Way From Zero To GUI
3
4
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
4
5
  [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
5
6
  [![Coverage Status](https://coveralls.io/repos/github/AndyObtiva/glimmer-dsl-swt/badge.svg?branch=master)](https://coveralls.io/github/AndyObtiva/glimmer-dsl-swt?branch=master)
@@ -8,6 +9,8 @@
8
9
 
9
10
  **(The Original Glimmer Library Handling the World’s Ruby GUI Needs Since 2007. Beware of Imitators!)**
10
11
 
12
+ (**[Presenting ***"Building Native GUI Apps in Ruby"*** at RubyConf 2022](https://andymaleh.blogspot.com/2022/09/rubyconf-2022-building-native-gui-apps.html)**)
13
+
11
14
  [GLIMMER VIDEO TUTORIAL CHANNEL](https://www.youtube.com/channel/UC5hzDE23HZXsZLAxYk2UJEw)
12
15
 
13
16
  ![Glimmer DSL for SWT Demo of Hello, World!](/images/glimmer-dsl-swt-demo-hello-world.gif)
@@ -21,7 +24,7 @@ Featured in JRuby Cookbook](http://shop.oreilly.com/product/9780596519650.do) an
21
24
 
22
25
  ![Eclipse SWT RCP NASA Mars Rover](/images/glimmer-eclipse-swt-rcp-nasa-mars-rover.png)
23
26
 
24
- [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) 4.25.0.2 includes [SWT 4.25](https://download.eclipse.org/eclipse/downloads/drops4/R-4.25-202208311800/), which was released on 31 Aug 2022. Gem version numbers are in sync with the SWT library versions. The first two digits represent the SWT version number. The last two digits represent the minor and patch versions of Glimmer DSL for SWT.
27
+ [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) 4.26.0.1 includes [SWT 4.26](https://download.eclipse.org/eclipse/downloads/drops4/R-4.26-202211231800/), which was released on 23 Nov 2022. Gem version numbers are in sync with the SWT library versions. The first two digits represent the SWT version number. The last two digits represent the minor and patch versions of Glimmer DSL for SWT.
25
28
 
26
29
  **Starting in version 4.20.0.0, [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) comes with the new [***Shine***](/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#shine) syntax** for highly intuitive and visually expressive View/Model Attribute Mapping, relying on `<=>` for bidirectional (two-way) data-binding and `<=` for unidirectional (one-way) data-binding, providing an alternative to the `bind` keyword. That was [originally conceived back in 2007](https://andymaleh.blogspot.com/2007/12/data-shining-in-glimmer.html).
27
30
 
@@ -338,7 +341,7 @@ jgem install glimmer-dsl-swt
338
341
 
339
342
  Or this command if you want a specific version:
340
343
  ```
341
- jgem install glimmer-dsl-swt -v 4.25.0.2
344
+ jgem install glimmer-dsl-swt -v 4.26.0.1
342
345
  ```
343
346
 
344
347
  `jgem` is JRuby's version of `gem` command.
@@ -366,7 +369,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
366
369
 
367
370
  Add the following to `Gemfile`:
368
371
  ```
369
- gem 'glimmer-dsl-swt', '~> 4.25.0.2'
372
+ gem 'glimmer-dsl-swt', '~> 4.26.0.1'
370
373
  ```
371
374
 
372
375
  And, then run:
@@ -389,7 +392,7 @@ glimmer
389
392
  ```
390
393
 
391
394
  ```
392
- Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.25.0.2
395
+ Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.26.0.1
393
396
 
394
397
  Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
395
398
 
@@ -793,7 +796,7 @@ You may apply for contributing to any of these Glimmer DSL gems whether you pref
793
796
 
794
797
  [MIT](LICENSE.txt)
795
798
 
796
- Copyright (c) 2007-2022 - Andy Maleh.
799
+ Copyright (c) 2007-2023 - Andy Maleh.
797
800
 
798
801
  --
799
802
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.25.0.2
1
+ 4.26.0.1
data/bin/girb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env jruby
2
2
 
3
- # Copyright (c) 2007-2022 Andy Maleh
3
+ # Copyright (c) 2007-2023 Andy Maleh
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining
6
6
  # a copy of this software and associated documentation files (the
data/bin/girb_runner.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
data/bin/glimmer CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env jruby
2
2
 
3
- # Copyright (c) 2007-2022 Andy Maleh
3
+ # Copyright (c) 2007-2023 Andy Maleh
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining
6
6
  # a copy of this software and associated documentation files (the
data/bin/glimmer-setup CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env jruby
2
2
 
3
- # Copyright (c) 2007-2022 Andy Maleh
3
+ # Copyright (c) 2007-2023 Andy Maleh
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining
6
6
  # a copy of this software and associated documentation files (the
@@ -146,7 +146,7 @@ You need to have your Git `user.name` and `github.user` configured before scaffo
146
146
 
147
147
  #### App
148
148
 
149
- Before you start, make sure you are in a JRuby environment with Glimmer gem installed as per "Direct Install" pre-requisites.
149
+ Before you start, make sure you are in a JRuby environment with [glimmer-dsl-swt](https://rubygems.org/gems/glimmer-dsl-swt) gem installed as per "Direct Install" pre-requisites.
150
150
 
151
151
  To scaffold a Glimmer app from scratch, run the following command:
152
152
 
@@ -670,4 +670,4 @@ jruby -J-XstartOnFirstThread -J-classpath "path_to/swt.jar" -r glimmer-dsl-swt -
670
670
 
671
671
  [MIT](LICENSE.txt)
672
672
 
673
- Copyright (c) 2007-2022 - Andy Maleh.
673
+ Copyright (c) 2007-2023 - Andy Maleh.
@@ -195,4 +195,4 @@ large scale updates in the rare cases where optimization is needed.
195
195
 
196
196
  [MIT](LICENSE.txt)
197
197
 
198
- Copyright (c) 2007-2022 - Andy Maleh.
198
+ Copyright (c) 2007-2023 - Andy Maleh.
@@ -27,4 +27,4 @@ If you need a more GUI interactive option to experiment with Glimmer GUI DSL Syn
27
27
 
28
28
  [MIT](LICENSE.txt)
29
29
 
30
- Copyright (c) 2007-2022 - Andy Maleh.
30
+ Copyright (c) 2007-2023 - Andy Maleh.
@@ -65,6 +65,15 @@ This guide should help you get started with Glimmer DSL for SWT. For more advanc
65
65
  - [Observing Widgets](#observing-widgets)
66
66
  - [Alternative Syntax](#alternative-syntax)
67
67
  - [Observing Models](#observing-models)
68
+ - [Software Architecture](#software-architecture)
69
+ - [MVC](#mvc)
70
+ - [MVP](#mvp)
71
+ - [Software Architecture Examples](#software-architecture-examples)
72
+ - [MVC Example - Explicit Controller](#mvc-example---explicit-controller)
73
+ - [MVC Example - Implicit Controller](#mvc-example---implicit-controller)
74
+ - [MVP Example - Explicit Presenter](#mvp-example---explicit-presenter)
75
+ - [MVP Example - Implicit Presenter](#mvp-example---implicit-presenter)
76
+ - [MVP Example - Implicit Presenter with Bidirectional Data-Binding](#mvp-example---implicit-presenter-with-bidirectional-data-binding)
68
77
  - [Custom Widgets](#custom-widgets)
69
78
  - [Simple Example](#simple-example)
70
79
  - [Method-Based Custom Widget Example](#method-based-custom-widget-example)
@@ -1136,7 +1145,7 @@ Example:
1136
1145
 
1137
1146
  ```ruby
1138
1147
  # ...
1139
- list(:multi) { # SWT styles go inside ()
1148
+ list(:multi, :border) { # SWT styles go inside ()
1140
1149
  # ...
1141
1150
  }
1142
1151
  # ...
@@ -3971,7 +3980,7 @@ class HelloListMultiSelection
3971
3980
  person = Person.new
3972
3981
  shell {
3973
3982
  composite {
3974
- list(:multi) {
3983
+ list(:multi, :border) {
3975
3984
  selection bind(person, :provinces)
3976
3985
  }
3977
3986
  button {
@@ -4607,6 +4616,303 @@ class TicTacToe
4607
4616
  end
4608
4617
  ```
4609
4618
 
4619
+ ### Software Architecture
4620
+
4621
+ Glimmer DSL for SWT supports both MVC (Model View Controller) and MVP (Model View Presenter) architectural patterns.
4622
+
4623
+ #### MVC
4624
+
4625
+ Model View Controller architectural pattern is embodied by this diagram.
4626
+
4627
+ ![model view controller](/images/glimmer-software-architecture-model-view-controller.png)
4628
+
4629
+ #### MVP
4630
+
4631
+ Model View Presenter architectural pattern is embodied by this diagram.
4632
+
4633
+ ![model view presenter](/images/glimmer-software-architecture-model-view-presenter.png)
4634
+
4635
+ #### Software Architecture Examples
4636
+
4637
+ Here are 4 different ways of implementing the [Hello, Button!](/docs/reference/GLIMMER_SAMPLES.md#hello-button) sample (other than the included default implementation).
4638
+
4639
+ ![Hello Button](/images/glimmer-hello-button.png)
4640
+
4641
+ ##### MVC Example - Explicit Controller
4642
+
4643
+ (you may copy/paste in [`girb`](GLIMMER_GIRB.md))
4644
+
4645
+ ```ruby
4646
+ require 'glimmer-dsl-swt'
4647
+
4648
+ class Counter
4649
+ attr_accessor :count
4650
+
4651
+ def initialize
4652
+ self.count = 0
4653
+ end
4654
+
4655
+ def increment
4656
+ self.count += 1
4657
+ end
4658
+ end
4659
+
4660
+ class CounterController
4661
+ def initialize(counter)
4662
+ @counter = counter
4663
+ end
4664
+
4665
+ def increment_count
4666
+ @counter.increment
4667
+ end
4668
+ end
4669
+
4670
+ class HelloButton
4671
+ include Glimmer::UI::Application
4672
+
4673
+ before_body do
4674
+ @counter = Counter.new
4675
+ @counter_controller = CounterController.new(@counter)
4676
+ end
4677
+
4678
+ after_body do
4679
+ observe(@counter, :count) do |changed_count|
4680
+ @button.text = "Click To Increment: #{changed_count} "
4681
+ end
4682
+ end
4683
+
4684
+ body {
4685
+ shell {
4686
+ text 'Hello, Button!'
4687
+
4688
+ @button = button {
4689
+ text "Click To Increment: 0 "
4690
+
4691
+ on_widget_selected do
4692
+ @counter_controller.increment_count
4693
+ end
4694
+ }
4695
+ }
4696
+ }
4697
+ end
4698
+
4699
+ HelloButton.launch
4700
+ ```
4701
+
4702
+ ##### MVC Example - Implicit Controller
4703
+
4704
+ (you may copy/paste in [`girb`](GLIMMER_GIRB.md))
4705
+
4706
+ ```ruby
4707
+ require 'glimmer-dsl-swt'
4708
+
4709
+ class Counter
4710
+ attr_accessor :count
4711
+
4712
+ def initialize
4713
+ self.count = 0
4714
+ end
4715
+
4716
+ def increment
4717
+ self.count += 1
4718
+ end
4719
+ end
4720
+
4721
+ class HelloButton
4722
+ include Glimmer::UI::Application
4723
+
4724
+ before_body do
4725
+ @counter = Counter.new
4726
+ end
4727
+
4728
+ after_body do
4729
+ observe(@counter, :count) do |changed_count|
4730
+ @button.text = "Click To Increment: #{changed_count} "
4731
+ end
4732
+ end
4733
+
4734
+ body {
4735
+ shell {
4736
+ text 'Hello, Button!'
4737
+
4738
+ @button = button {
4739
+ text "Click To Increment: 0 "
4740
+
4741
+ on_widget_selected do
4742
+ @counter.increment
4743
+ end
4744
+ }
4745
+ }
4746
+ }
4747
+ end
4748
+
4749
+ HelloButton.launch
4750
+ ```
4751
+
4752
+ ##### MVP Example - Explicit Presenter
4753
+
4754
+ (you may copy/paste in [`girb`](GLIMMER_GIRB.md))
4755
+
4756
+ ```ruby
4757
+ require 'glimmer-dsl-swt'
4758
+
4759
+ class Counter
4760
+ attr_accessor :count
4761
+
4762
+ def initialize
4763
+ self.count = 0
4764
+ end
4765
+
4766
+ def increment
4767
+ self.count += 1
4768
+ end
4769
+ end
4770
+
4771
+ class CounterPresenter
4772
+ include Glimmer::DataBinding::Observer
4773
+
4774
+ def initialize
4775
+ @counter = Counter.new
4776
+
4777
+ Glimmer::DataBinding::Observer.proc do |changed_count|
4778
+ notify_observers(:count)
4779
+ end.observe(@counter, :count)
4780
+ end
4781
+
4782
+ def count
4783
+ @counter.count
4784
+ end
4785
+
4786
+ def increment_count
4787
+ @counter.increment
4788
+ end
4789
+ end
4790
+
4791
+ class HelloButton
4792
+ include Glimmer::UI::Application
4793
+
4794
+ before_body do
4795
+ @counter_presenter = CounterPresenter.new
4796
+ end
4797
+
4798
+ body {
4799
+ shell {
4800
+ text 'Hello, Button!'
4801
+
4802
+ button {
4803
+ text <= [@counter_presenter, :count, on_read: ->(value) { "Click To Increment: #{value} " }]
4804
+
4805
+ on_widget_selected do
4806
+ @counter_presenter.increment_count
4807
+ end
4808
+ }
4809
+
4810
+
4811
+ }
4812
+ }
4813
+ end
4814
+
4815
+ HelloButton.launch
4816
+ ```
4817
+
4818
+ ##### MVP Example - Implicit Presenter
4819
+
4820
+ (you may copy/paste in [`girb`](GLIMMER_GIRB.md))
4821
+
4822
+ ```ruby
4823
+ require 'glimmer-dsl-swt'
4824
+
4825
+ class Counter
4826
+ attr_accessor :count
4827
+
4828
+ def initialize
4829
+ self.count = 0
4830
+ end
4831
+
4832
+ def increment
4833
+ self.count += 1
4834
+ end
4835
+ end
4836
+
4837
+ class HelloButton
4838
+ include Glimmer::UI::Application
4839
+
4840
+ before_body do
4841
+ @counter = Counter.new
4842
+ end
4843
+
4844
+ body {
4845
+ shell {
4846
+ text 'Hello, Button!'
4847
+
4848
+ button {
4849
+ text <= [@counter, :count, on_read: ->(value) { "Click To Increment: #{value} " }]
4850
+
4851
+ on_widget_selected do
4852
+ @counter.count += 1
4853
+ end
4854
+ }
4855
+
4856
+
4857
+
4858
+ }
4859
+ }
4860
+ end
4861
+
4862
+ HelloButton.launch
4863
+ ```
4864
+
4865
+ ##### MVP Example - Implicit Presenter with Bidirectional Data-Binding
4866
+
4867
+ ![Hello Button](/images/glimmer-hello-button-with-text-bidirectional-data-binding.png)
4868
+
4869
+ This version diverges in behavior to demonstrate bidirectional data-binding through a text field that is data-bound bidirectionally to the same attribute that the button is data-bound to for the click count.
4870
+
4871
+ ```ruby
4872
+ require 'glimmer-dsl-swt'
4873
+
4874
+ class Counter
4875
+ attr_accessor :count
4876
+
4877
+ def initialize
4878
+ self.count = 0
4879
+ end
4880
+
4881
+ def increment
4882
+ self.count += 1
4883
+ end
4884
+ end
4885
+
4886
+ class HelloButton
4887
+ include Glimmer::UI::Application
4888
+
4889
+ before_body do
4890
+ @counter = Counter.new
4891
+ end
4892
+
4893
+ body {
4894
+ shell {
4895
+ fill_layout(:vertical)
4896
+ text 'Hello, Button!'
4897
+
4898
+ text {
4899
+ text <=> [@counter, :count, on_read: :to_s, on_write: :to_i]
4900
+ }
4901
+
4902
+ button {
4903
+ text <= [@counter, :count, on_read: ->(value) { "Click To Increment: #{value} " }]
4904
+
4905
+ on_widget_selected do
4906
+ @counter.count += 1
4907
+ end
4908
+ }
4909
+ }
4910
+ }
4911
+ end
4912
+
4913
+ HelloButton.launch
4914
+ ```
4915
+
4610
4916
  ### Custom Widgets
4611
4917
 
4612
4918
  Custom widgets are brand new Glimmer DSL keywords that represent aggregates of existing widgets (e.g. `address_form`), customized existing widgets (e.g. `greeting_label`), or brand new widgets (e.g. `oscilloscope`)
@@ -5724,4 +6030,4 @@ Learn more at the [JRuby Performance Profile WIKI page](https://github.com/jruby
5724
6030
 
5725
6031
  [MIT](LICENSE.txt)
5726
6032
 
5727
- Copyright (c) 2007-2022 - Andy Maleh.
6033
+ Copyright (c) 2007-2023 - Andy Maleh.
@@ -223,7 +223,7 @@ The `image` keyword in Glimmer automatically does that work when passing an imag
223
223
 
224
224
  5- NAME.app is damaged and can't be opened. You should move it to the trash
225
225
 
226
- If you package an app for the Mac and an end-user gets the error message above upon installing, note that you probably have a system incompatibility issue between your OS/CPU Architecture and the end-user's OS/CPU Architecture. To resolve the issue, make sure to repackage the app for the Mac on a system perfectly matching the end-user's OS/CPU Architecture (sometimes, packaging on a newer MacOS with the same CPU Architecture also works, but you would have to test that to confirm and ensure full compatibility).
226
+ If you package an app for the Mac and an end-user gets the error message above upon installing, note that you either have a security-blocked-app or a system incompatibility issue between your OS/CPU Architecture and the end-user's OS/CPU Architecture. To resolve the issue, first try to go to "System Preferences -> Privacy & Security" and open the security-blocked-app anyways. If that does not work, then make sure to repackage the app for the Mac on a system perfectly matching the end-user's OS/CPU Architecture (sometimes, packaging on a newer MacOS with the same CPU Architecture also works, but you would have to test that to confirm and ensure full compatibility).
227
227
 
228
228
  6- Message about a Mac app for which the developer cannot be verified (Move To Trash or Cancel)
229
229
 
@@ -235,4 +235,4 @@ This would not be an issue if the app was [signed by Apple as per Mac Applicatio
235
235
 
236
236
  [MIT](LICENSE.txt)
237
237
 
238
- Copyright (c) 2007-2022 - Andy Maleh.
238
+ Copyright (c) 2007-2023 - Andy Maleh.
@@ -1457,4 +1457,4 @@ Snake
1457
1457
 
1458
1458
  [MIT](LICENSE.txt)
1459
1459
 
1460
- Copyright (c) 2007-2022 - Andy Maleh.
1460
+ Copyright (c) 2007-2023 - Andy Maleh.
@@ -18,4 +18,4 @@
18
18
 
19
19
  [MIT](LICENSE.txt)
20
20
 
21
- Copyright (c) 2007-2022 - Andy Maleh.
21
+ Copyright (c) 2007-2023 - Andy Maleh.
Binary file
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
data/lib/ext/glimmer.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2022 Andy Maleh
1
+ # Copyright (c) 2007-2023 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the