glimmer-dsl-swt 4.18.4.5 → 4.18.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE.txt +20 -20
  4. data/README.md +4 -4
  5. data/RUBY_VERSION +1 -1
  6. data/VERSION +1 -1
  7. data/bin/girb +31 -31
  8. data/bin/girb_runner.rb +34 -34
  9. data/bin/glimmer +26 -26
  10. data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +1 -1
  11. data/docs/reference/GLIMMER_PACKAGING_AND_DISTRIBUTION.md +1 -1
  12. data/glimmer-dsl-swt.gemspec +6 -5
  13. data/lib/ext/glimmer.rb +41 -41
  14. data/lib/ext/glimmer/config.rb +167 -167
  15. data/lib/ext/rouge/themes/glimmer.rb +29 -29
  16. data/lib/glimmer-dsl-swt.rb +44 -44
  17. data/lib/glimmer/Rakefile +26 -26
  18. data/lib/glimmer/data_binding/list_selection_binding.rb +72 -72
  19. data/lib/glimmer/data_binding/observable_widget.rb +38 -38
  20. data/lib/glimmer/data_binding/shine.rb +44 -44
  21. data/lib/glimmer/data_binding/table_items_binding.rb +89 -89
  22. data/lib/glimmer/data_binding/tree_items_binding.rb +108 -108
  23. data/lib/glimmer/data_binding/widget_binding.rb +73 -73
  24. data/lib/glimmer/dsl/swt/animation_expression.rb +43 -43
  25. data/lib/glimmer/dsl/swt/async_exec_expression.rb +35 -35
  26. data/lib/glimmer/dsl/swt/bind_expression.rb +58 -58
  27. data/lib/glimmer/dsl/swt/block_property_expression.rb +41 -41
  28. data/lib/glimmer/dsl/swt/checkbox_group_selection_data_binding_expression.rb +61 -61
  29. data/lib/glimmer/dsl/swt/color_expression.rb +40 -40
  30. data/lib/glimmer/dsl/swt/column_properties_expression.rb +45 -45
  31. data/lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb +67 -67
  32. data/lib/glimmer/dsl/swt/cursor_expression.rb +44 -44
  33. data/lib/glimmer/dsl/swt/data_binding_expression.rb +55 -55
  34. data/lib/glimmer/dsl/swt/dialog_expression.rb +48 -48
  35. data/lib/glimmer/dsl/swt/directory_dialog_expression.rb +48 -48
  36. data/lib/glimmer/dsl/swt/display_expression.rb +40 -40
  37. data/lib/glimmer/dsl/swt/dnd_expression.rb +46 -46
  38. data/lib/glimmer/dsl/swt/dsl.rb +63 -63
  39. data/lib/glimmer/dsl/swt/expand_item_expression.rb +60 -60
  40. data/lib/glimmer/dsl/swt/file_dialog_expression.rb +48 -48
  41. data/lib/glimmer/dsl/swt/font_expression.rb +49 -49
  42. data/lib/glimmer/dsl/swt/image_expression.rb +50 -50
  43. data/lib/glimmer/dsl/swt/layout_data_expression.rb +46 -46
  44. data/lib/glimmer/dsl/swt/layout_expression.rb +50 -50
  45. data/lib/glimmer/dsl/swt/list_selection_data_binding_expression.rb +65 -65
  46. data/lib/glimmer/dsl/swt/menu_bar_expression.rb +54 -54
  47. data/lib/glimmer/dsl/swt/menu_expression.rb +53 -53
  48. data/lib/glimmer/dsl/swt/message_box_expression.rb +54 -54
  49. data/lib/glimmer/dsl/swt/multiply_expression.rb +53 -53
  50. data/lib/glimmer/dsl/swt/pixel_expression.rb +38 -0
  51. data/lib/glimmer/dsl/swt/property_expression.rb +46 -46
  52. data/lib/glimmer/dsl/swt/radio_group_selection_data_binding_expression.rb +61 -61
  53. data/lib/glimmer/dsl/swt/rgb_expression.rb +33 -33
  54. data/lib/glimmer/dsl/swt/rgba_expression.rb +33 -33
  55. data/lib/glimmer/dsl/swt/shape_expression.rb +54 -54
  56. data/lib/glimmer/dsl/swt/shell_expression.rb +46 -46
  57. data/lib/glimmer/dsl/swt/swt_expression.rb +46 -46
  58. data/lib/glimmer/dsl/swt/sync_exec_expression.rb +36 -36
  59. data/lib/glimmer/dsl/swt/tab_item_expression.rb +54 -54
  60. data/lib/glimmer/dsl/swt/table_items_data_binding_expression.rb +52 -52
  61. data/lib/glimmer/dsl/swt/transform_expression.rb +55 -55
  62. data/lib/glimmer/dsl/swt/tree_items_data_binding_expression.rb +52 -52
  63. data/lib/glimmer/dsl/swt/tree_properties_expression.rb +47 -47
  64. data/lib/glimmer/dsl/swt/widget_expression.rb +67 -66
  65. data/lib/glimmer/dsl/swt/widget_listener_expression.rb +53 -53
  66. data/lib/glimmer/rake_task.rb +220 -220
  67. data/lib/glimmer/rake_task/list.rb +97 -97
  68. data/lib/glimmer/rake_task/package.rb +139 -139
  69. data/lib/glimmer/rake_task/scaffold.rb +765 -765
  70. data/lib/glimmer/swt/color_proxy.rb +107 -107
  71. data/lib/glimmer/swt/cursor_proxy.rb +66 -66
  72. data/lib/glimmer/swt/custom/animation.rb +2 -5
  73. data/lib/glimmer/swt/custom/checkbox_group.rb +181 -181
  74. data/lib/glimmer/swt/custom/code_text.rb +1 -0
  75. data/lib/glimmer/swt/custom/drawable.rb +65 -49
  76. data/lib/glimmer/swt/custom/radio_group.rb +176 -176
  77. data/lib/glimmer/swt/custom/shape.rb +38 -35
  78. data/lib/glimmer/swt/date_time_proxy.rb +85 -85
  79. data/lib/glimmer/swt/directory_dialog_proxy.rb +65 -65
  80. data/lib/glimmer/swt/dnd_proxy.rb +51 -51
  81. data/lib/glimmer/swt/expand_item_proxy.rb +97 -97
  82. data/lib/glimmer/swt/file_dialog_proxy.rb +66 -66
  83. data/lib/glimmer/swt/font_proxy.rb +94 -94
  84. data/lib/glimmer/swt/image_proxy.rb +184 -184
  85. data/lib/glimmer/swt/layout_data_proxy.rb +105 -105
  86. data/lib/glimmer/swt/layout_proxy.rb +112 -112
  87. data/lib/glimmer/swt/menu_proxy.rb +126 -126
  88. data/lib/glimmer/swt/message_box_proxy.rb +89 -89
  89. data/lib/glimmer/swt/packages.rb +37 -37
  90. data/lib/glimmer/swt/properties.rb +74 -49
  91. data/lib/glimmer/swt/sash_form_proxy.rb +53 -53
  92. data/lib/glimmer/swt/scrolled_composite_proxy.rb +37 -37
  93. data/lib/glimmer/swt/style_constantizable.rb +157 -157
  94. data/lib/glimmer/swt/styled_text_proxy.rb +38 -38
  95. data/lib/glimmer/swt/swt_proxy.rb +59 -59
  96. data/lib/glimmer/swt/tab_item_proxy.rb +91 -91
  97. data/lib/glimmer/swt/table_column_proxy.rb +57 -57
  98. data/lib/glimmer/swt/transform_proxy.rb +109 -109
  99. data/lib/glimmer/swt/tree_proxy.rb +145 -145
  100. data/lib/glimmer/swt/widget_listener_proxy.rb +64 -64
  101. data/lib/glimmer/swt/widget_proxy.rb +9 -3
  102. data/lib/glimmer/ui/custom_shell.rb +82 -82
  103. data/lib/glimmer/util/proc_tracker.rb +39 -39
  104. data/samples/elaborate/contact_manager.rb +142 -142
  105. data/samples/elaborate/contact_manager/contact.rb +32 -32
  106. data/samples/elaborate/contact_manager/contact_manager_presenter.rb +47 -47
  107. data/samples/elaborate/contact_manager/contact_repository.rb +169 -169
  108. data/samples/elaborate/login.rb +123 -123
  109. data/samples/elaborate/mandelbrot_fractal.rb +103 -0
  110. data/samples/elaborate/tetris/model/block.rb +48 -48
  111. data/samples/elaborate/tetris/model/past_game.rb +39 -39
  112. data/samples/elaborate/tetris/view/playfield.rb +1 -1
  113. data/samples/elaborate/tic_tac_toe.rb +76 -76
  114. data/samples/elaborate/tic_tac_toe/board.rb +145 -145
  115. data/samples/elaborate/tic_tac_toe/cell.rb +48 -48
  116. data/samples/elaborate/user_profile.rb +76 -76
  117. data/samples/hello/hello_browser.rb +31 -31
  118. data/samples/hello/hello_button.rb +46 -46
  119. data/samples/hello/hello_canvas.rb +64 -64
  120. data/samples/hello/hello_checkbox.rb +85 -85
  121. data/samples/hello/hello_checkbox_group.rb +71 -71
  122. data/samples/hello/hello_code_text.rb +104 -104
  123. data/samples/hello/hello_combo.rb +63 -63
  124. data/samples/hello/hello_computed.rb +96 -96
  125. data/samples/hello/hello_computed/contact.rb +42 -42
  126. data/samples/hello/hello_custom_shell.rb +155 -155
  127. data/samples/hello/hello_custom_widget.rb +86 -86
  128. data/samples/hello/hello_date_time.rb +63 -63
  129. data/samples/hello/hello_dialog.rb +78 -78
  130. data/samples/hello/hello_directory_dialog.rb +60 -60
  131. data/samples/hello/hello_drag_and_drop.rb +50 -50
  132. data/samples/hello/hello_expand_bar.rb +110 -110
  133. data/samples/hello/hello_file_dialog.rb +60 -60
  134. data/samples/hello/hello_group.rb +104 -104
  135. data/samples/hello/hello_link.rb +80 -80
  136. data/samples/hello/hello_list_multi_selection.rb +74 -74
  137. data/samples/hello/hello_list_single_selection.rb +59 -59
  138. data/samples/hello/hello_menu_bar.rb +241 -241
  139. data/samples/hello/hello_message_box.rb +37 -37
  140. data/samples/hello/hello_pop_up_context_menu.rb +84 -84
  141. data/samples/hello/hello_radio.rb +108 -108
  142. data/samples/hello/hello_radio_group.rb +87 -87
  143. data/samples/hello/hello_sash_form.rb +137 -137
  144. data/samples/hello/hello_spinner.rb +69 -69
  145. data/samples/hello/hello_styled_text.rb +138 -138
  146. data/samples/hello/hello_tab.rb +50 -50
  147. data/samples/hello/hello_world.rb +29 -29
  148. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6020ad7ab6d04be9cf54f17205fd2f5fe69e2de43ba539e7022b921fb8ab8932
4
- data.tar.gz: ba2f6e855a218cfdfbea367389c99b6a4c062f48a28138c64113b1c053da64ee
3
+ metadata.gz: a0074aec37350a556b6078426d3fbeb0e03799f0593158814c6a91439973b07a
4
+ data.tar.gz: bf615d4a2aed63e654bebbad0055fd62218ad5747f2fc6edfe7a298e2f30d074
5
5
  SHA512:
6
- metadata.gz: c4107a7d2aa568fc1c2e57958deb4c95558b7ed4607e8dc2afbae78f4ad03b6eda40f790ef31516a0ec09aa0b871e3b6e7373bb584663a0399b757361e18c0df
7
- data.tar.gz: 809c773933f4989405299583a1977a582e5cff370827c1601f17038245b5096ccb4cbf4a6fb3655462833f0b4a6accd87b17b17c8951a4c5f2d3e816a0b43d68
6
+ metadata.gz: 9499a1e9ca375bcf89f1cfaba1573a27e80a32995a53c351872f82c69661305bd4fde1bb6dbe3b5d5354aaf24e74245c353079de59906693a05828b86943ba31
7
+ data.tar.gz: 471ca571d01081e9c461bb003ebcd3b64cb11193d3cdc2be7ecdc91b94997bcd8591cec6ef49b23d8790cc721bcb827549b1e406b97fa36a9eba0752a81870fd
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Change Log
2
2
 
3
+ ### 4.18.4.6
4
+
5
+ - Mandlebrot Fractal Elaborate Sample
6
+ - Optimize Canvas Shape/Animation DSL performance by combining multiple shapes in a single paint listener
7
+ - Memoized attribute-to-SWT-property-method-name translation
8
+ - Support a `pixel` static expression that is an optimized `point`, which takes a foreground hash property to bypass the dynamic DSL chain of responsibility
9
+
3
10
  ### 4.18.4.5
4
11
 
5
12
  - Added double_buffered SWT style as default for `canvas` widget to ensure smooth animations
data/LICENSE.txt CHANGED
@@ -1,20 +1,20 @@
1
- Copyright (c) 2007-2021 Andy Maleh
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2007-2021 Andy Maleh
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,4 +1,4 @@
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.18.4.5
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.18.4.6
2
2
  ## JRuby Desktop Development GUI Framework
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
4
4
  [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
@@ -342,7 +342,7 @@ jgem install glimmer-dsl-swt
342
342
 
343
343
  Or this command if you want a specific version:
344
344
  ```
345
- jgem install glimmer-dsl-swt -v 4.18.4.5
345
+ jgem install glimmer-dsl-swt -v 4.18.4.6
346
346
  ```
347
347
 
348
348
  `jgem` is JRuby's version of `gem` command.
@@ -360,7 +360,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
360
360
 
361
361
  Add the following to `Gemfile`:
362
362
  ```
363
- gem 'glimmer-dsl-swt', '~> 4.18.4.5'
363
+ gem 'glimmer-dsl-swt', '~> 4.18.4.6'
364
364
  ```
365
365
 
366
366
  And, then run:
@@ -433,7 +433,7 @@ Glimmer simplifies the process of native-executable packaging and distribution o
433
433
 
434
434
  ## App Updates
435
435
 
436
- Glimmer already supports automatic (and manual) app updates via the Mac App Store for Mac apps. Simply run the `glimmer package` command with the Mac App Store keys configured as per [Mac Application Distribution](mac-application-distribution) instructions and you get automatic (and manual) app update support courtesy of the Mac App Store.
436
+ Glimmer should already support automatic (and manual) app updates via the Mac App Store for Mac apps (though I haven't personally tried. Be my guest if you want to call shotgun on this, and share your experience with us). Simply run the `glimmer package` command with the Mac App Store keys configured as per [Mac Application Distribution](mac-application-distribution) instructions and you get automatic (and manual) app update support courtesy of the Mac App Store.
437
437
 
438
438
  ## Glimmer Supporting Libraries
439
439
 
data/RUBY_VERSION CHANGED
@@ -1 +1 @@
1
- jruby-9.2.14.0
1
+ jruby-9.2.14.0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.18.4.5
1
+ 4.18.4.6
data/bin/girb CHANGED
@@ -1,31 +1,31 @@
1
- #!/usr/bin/env jruby
2
-
3
- # Copyright (c) 2007-2021 Andy Maleh
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
-
24
- trap "SIGINT" do
25
- # No Op for irb
26
- end
27
-
28
- require_relative '../lib/glimmer/launcher'
29
-
30
- girb_runner = File.expand_path('../girb_runner.rb', __FILE__)
31
- Glimmer::Launcher.new(["irb -r #{girb_runner}"] + ARGV).launch
1
+ #!/usr/bin/env jruby
2
+
3
+ # Copyright (c) 2007-2021 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ trap "SIGINT" do
25
+ # No Op for irb
26
+ end
27
+
28
+ require_relative '../lib/glimmer/launcher'
29
+
30
+ girb_runner = File.expand_path('../girb_runner.rb', __FILE__)
31
+ Glimmer::Launcher.new(["irb -r #{girb_runner}"] + ARGV).launch
data/bin/girb_runner.rb CHANGED
@@ -1,34 +1,34 @@
1
- # Copyright (c) 2007-2021 Andy Maleh
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining
4
- # a copy of this software and associated documentation files (the
5
- # "Software"), to deal in the Software without restriction, including
6
- # without limitation the rights to use, copy, modify, merge, publish,
7
- # distribute, sublicense, and/or sell copies of the Software, and to
8
- # permit persons to whom the Software is furnished to do so, subject to
9
- # the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be
12
- # included in all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- require 'puts_debuggerer'
23
-
24
- include Glimmer
25
-
26
- # Hijack Shell#start_event_loop default behavior to ensure disposing a display upon closing a shell inside girb
27
-
28
- Glimmer::SWT::ShellProxy.class_eval do
29
- alias start_event_loop_original start_event_loop
30
- def start_event_loop
31
- start_event_loop_original
32
- Glimmer::SWT::DisplayProxy.instance.dispose
33
- end
34
- end
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'puts_debuggerer'
23
+
24
+ include Glimmer
25
+
26
+ # Hijack Shell#start_event_loop default behavior to ensure disposing a display upon closing a shell inside girb
27
+
28
+ Glimmer::SWT::ShellProxy.class_eval do
29
+ alias start_event_loop_original start_event_loop
30
+ def start_event_loop
31
+ start_event_loop_original
32
+ Glimmer::SWT::DisplayProxy.instance.dispose
33
+ end
34
+ end
data/bin/glimmer CHANGED
@@ -1,26 +1,26 @@
1
- #!/usr/bin/env jruby
2
-
3
- # Copyright (c) 2007-2021 Andy Maleh
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
-
24
- require_relative '../lib/glimmer/launcher'
25
-
26
- Glimmer::Launcher.new(ARGV).launch
1
+ #!/usr/bin/env jruby
2
+
3
+ # Copyright (c) 2007-2021 Andy Maleh
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ require_relative '../lib/glimmer/launcher'
25
+
26
+ Glimmer::Launcher.new(ARGV).launch
@@ -1,6 +1,6 @@
1
1
  ## Glimmer GUI DSL Syntax
2
2
 
3
- This guide should help you get started with Glimmer DSL for SWT. For more advanced SWT details, please refer to the [SWT Reference](README.md#swt-reference).
3
+ This guide should help you get started with Glimmer DSL for SWT. For more advanced SWT details, please refer to the [SWT Reference](/README.md#swt-reference).
4
4
 
5
5
  Glimmer's core is a GUI DSL with a lightweight visual syntax that makes it easy to visualize the nesting of widgets in the GUI hierarchy tree.
6
6
 
@@ -18,7 +18,7 @@ You may choose to generate a specific type of packaging instead by addionally pa
18
18
  glimmer package[msi]
19
19
  ```
20
20
 
21
- - Available Mac packaging types are `dmg`, `pkg`, and `image` (image means a pure Mac `app` without a setup program)
21
+ - Available Mac packaging types are `dmg`, `pkg`, and `image` (image means a pure Mac `app` without a setup program). Keep in mind that the packages you produce are compatible with the same MacOS you are on or older.
22
22
  - Available Windows packaging types are `msi`, `exe`, and `image` (image means a Windows application directory without a setup program). Learn more about Windows packaging are [over here](#windows-application-packaging).
23
23
 
24
24
  Note: if you are using Glimmer manually, to make the `glimmer package` command available, you must add the following line to your application `Rakefile` (automatically done for you if you scaffold an app or gem with `glimmer scaffold[AppName]` or `glimmer scaffold:gem:customshell[GemName]`):
@@ -1,22 +1,21 @@
1
1
  # Generated by juwelier
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Juwelier::Tasks in rakefile, and run 'rake gemspec'
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: glimmer-dsl-swt 4.18.4.5 ruby lib
5
+ # stub: glimmer-dsl-swt 4.18.4.6 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "glimmer-dsl-swt".freeze
9
- s.version = "4.18.4.5"
9
+ s.version = "4.18.4.6"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["AndyMaleh".freeze]
14
- s.date = "2021-02-09"
14
+ s.date = "2021-02-11"
15
15
  s.description = "Glimmer DSL for SWT (JRuby Desktop Development GUI Framework) is a native-GUI cross-platform desktop development library written in JRuby, an OS-threaded faster JVM version of Ruby. Glimmer's main innovation is a declarative Ruby DSL that enables productive and efficient authoring of desktop application user-interfaces by relying on the robust Eclipse SWT library. Glimmer additionally innovates by having built-in data-binding support, which greatly facilitates synchronizing the GUI with domain models, thus achieving true decoupling of object oriented components and enabling developers to solve business problems (test-first) without worrying about GUI concerns, or alternatively drive development GUI-first, and then write clean business models (test-first) afterwards. Not only does Glimmer provide a large set of GUI widgets, but it also supports drawing Canvas Graphics like Shapes and Animations. To get started quickly, Glimmer offers scaffolding options for Apps, Gems, and Custom Widgets. Glimmer also includes native-executable packaging support, sorely lacking in other libraries, thus enabling the delivery of desktop apps written in Ruby as truly native DMG/PKG/APP files on the Mac + App Store, MSI/EXE files on Windows, and Gem Packaged Shell Scripts on Linux.".freeze
16
16
  s.email = "andy.am@gmail.com".freeze
17
17
  s.executables = ["glimmer".freeze, "girb".freeze]
18
18
  s.extra_rdoc_files = [
19
- "CHANGELOG.md",
20
19
  "LICENSE.txt",
21
20
  "README.md"
22
21
  ]
@@ -80,6 +79,7 @@ Gem::Specification.new do |s|
80
79
  "lib/glimmer/dsl/swt/message_box_expression.rb",
81
80
  "lib/glimmer/dsl/swt/multiply_expression.rb",
82
81
  "lib/glimmer/dsl/swt/observe_expression.rb",
82
+ "lib/glimmer/dsl/swt/pixel_expression.rb",
83
83
  "lib/glimmer/dsl/swt/property_expression.rb",
84
84
  "lib/glimmer/dsl/swt/radio_group_selection_data_binding_expression.rb",
85
85
  "lib/glimmer/dsl/swt/rgb_expression.rb",
@@ -144,6 +144,7 @@ Gem::Specification.new do |s|
144
144
  "samples/elaborate/contact_manager/contact_manager_presenter.rb",
145
145
  "samples/elaborate/contact_manager/contact_repository.rb",
146
146
  "samples/elaborate/login.rb",
147
+ "samples/elaborate/mandelbrot_fractal.rb",
147
148
  "samples/elaborate/meta_sample.rb",
148
149
  "samples/elaborate/tetris.rb",
149
150
  "samples/elaborate/tetris/model/block.rb",
data/lib/ext/glimmer.rb CHANGED
@@ -1,41 +1,41 @@
1
- # Copyright (c) 2007-2021 Andy Maleh
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining
4
- # a copy of this software and associated documentation files (the
5
- # "Software"), to deal in the Software without restriction, including
6
- # without limitation the rights to use, copy, modify, merge, publish,
7
- # distribute, sublicense, and/or sell copies of the Software, and to
8
- # permit persons to whom the Software is furnished to do so, subject to
9
- # the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be
12
- # included in all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- require 'glimmer/swt/packages'
23
-
24
- module Glimmer
25
- class << self
26
- def included(klass)
27
- if Object.const_defined?(:ActiveSupport) && ActiveSupport.const_defined?(:Dependencies)
28
- begin
29
- ActiveSupport::Dependencies.unhook!
30
- rescue => e
31
- # noop TODO support logging unimportant details below debug level
32
- end
33
- end
34
- if Config.import_swt_packages
35
- klass.include(SWT::Packages)
36
- klass.extend(SWT::Packages)
37
- end
38
- klass.extend(Glimmer)
39
- end
40
- end
41
- end
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer/swt/packages'
23
+
24
+ module Glimmer
25
+ class << self
26
+ def included(klass)
27
+ if Object.const_defined?(:ActiveSupport) && ActiveSupport.const_defined?(:Dependencies)
28
+ begin
29
+ ActiveSupport::Dependencies.unhook!
30
+ rescue => e
31
+ # noop TODO support logging unimportant details below debug level
32
+ end
33
+ end
34
+ if Config.import_swt_packages
35
+ klass.include(SWT::Packages)
36
+ klass.extend(SWT::Packages)
37
+ end
38
+ klass.extend(Glimmer)
39
+ end
40
+ end
41
+ end
@@ -1,167 +1,167 @@
1
- # Copyright (c) 2007-2021 Andy Maleh
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining
4
- # a copy of this software and associated documentation files (the
5
- # "Software"), to deal in the Software without restriction, including
6
- # without limitation the rights to use, copy, modify, merge, publish,
7
- # distribute, sublicense, and/or sell copies of the Software, and to
8
- # permit persons to whom the Software is furnished to do so, subject to
9
- # the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be
12
- # included in all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- require 'glimmer/config'
23
-
24
- module Glimmer
25
- module Config
26
- DEFAULT_IMPORT_SWT_PACKAGES = [
27
- 'org.eclipse.swt',
28
- 'org.eclipse.swt.widgets',
29
- 'org.eclipse.swt.layout',
30
- 'org.eclipse.swt.graphics',
31
- 'org.eclipse.swt.browser',
32
- 'org.eclipse.swt.custom',
33
- 'org.eclipse.swt.dnd',
34
- ]
35
- DEFAULT_AUTO_SYNC_EXEC = false
36
- GUI_THREAD = Thread.current
37
-
38
- class << self
39
- # Tells Glimmer to import SWT packages into including class (default: true)
40
- def import_swt_packages=(value)
41
- @@import_swt_packages = value
42
- end
43
-
44
- # Returns whether Glimmer will import SWT packages into including class
45
- def import_swt_packages
46
- @@import_swt_packages = DEFAULT_IMPORT_SWT_PACKAGES if !defined?(@@import_swt_packages) || (defined?(@@import_swt_packages) && @@import_swt_packages == true)
47
- @@import_swt_packages
48
- end
49
-
50
- # Tells Glimmer to avoid automatic use of sync_exec when invoking GUI calls from another thread (default: true)
51
- def auto_sync_exec=(value)
52
- @@auto_sync_exec = value
53
- end
54
-
55
- # Returns whether Glimmer will import SWT packages into including class
56
- def auto_sync_exec
57
- @@auto_sync_exec = DEFAULT_AUTO_SYNC_EXEC if !defined?(@@auto_sync_exec)
58
- @@auto_sync_exec
59
- end
60
- alias auto_sync_exec? auto_sync_exec
61
-
62
- def require_sync_exec?
63
- Thread.current != GUI_THREAD
64
- end
65
-
66
- # Returns Logging Devices. Default is [:stdout, :syslog]
67
- def logging_devices
68
- unless defined? @@logging_devices
69
- @@logging_devices = [:stdout, :syslog]
70
- end
71
- @@logging_devices
72
- end
73
-
74
- # Logging Devices is an array of these possible values: :stdout (default), :stderr, :file, :syslog (default), :stringio
75
- def logging_devices=(devices)
76
- @@logging_devices = devices
77
- reset_logger!
78
- end
79
-
80
- def logging_device_file_options
81
- @@logging_device_file_options = {size: 1_000_000, age: 'daily', roll_by: 'number'} unless defined? @@logging_device_file_options
82
- @@logging_device_file_options
83
- end
84
-
85
- def logging_device_file_options=(custom_options)
86
- @@logging_device_file_options = custom_options
87
- reset_logger!
88
- end
89
-
90
- def logging_appender_options
91
- @@logging_appender_options = {async: true, auto_flushing: 500, write_size: 500, flush_period: 60, immediate_at: [:error, :fatal], layout: logging_layout} unless defined? @@logging_appender_options
92
- # TODO make this a glimmer command option
93
- if ENV['GLIMMER_LOGGER_ASYNC'].to_s.downcase == 'false'
94
- @@logging_appender_options.merge!(async: false, auto_flushing: 1, immediate_at: [:debug, :info, :warn, :error, :fatal])
95
- end
96
- @@logging_appender_options
97
- end
98
-
99
- def logging_appender_options=(custom_options)
100
- @@logging_appender_options = custom_options
101
- reset_logger!
102
- end
103
-
104
- def logging_layout
105
- unless defined? @@logging_layout
106
- @@logging_layout = Logging.layouts.pattern(
107
- pattern: '[%d] %-5l %c: %m\n',
108
- date_pattern: '%Y-%m-%d %H:%M:%S'
109
- )
110
- end
111
- @@logging_layout
112
- end
113
-
114
- def logging_layout=(custom_layout)
115
- @@logging_layout = custom_layout
116
- reset_logger!
117
- end
118
-
119
- def reset_logger!
120
- @first_time = !defined?(@@logger)
121
- old_level = logger.level unless @first_time
122
- self.logger = Logging.logger['glimmer'].tap do |logger|
123
- logger.level = old_level || :error
124
- appenders = []
125
- appenders << Logging.appenders.stdout(logging_appender_options) if logging_devices.include?(:stdout)
126
- appenders << Logging.appenders.stderr(logging_appender_options) if logging_devices.include?(:stderr)
127
- if logging_devices.include?(:file)
128
- require 'fileutils'
129
- FileUtils.mkdir_p('log')
130
- appenders << Logging.appenders.rolling_file('log/glimmer.log', logging_appender_options.merge(logging_device_file_options)) if logging_devices.include?(:file)
131
- end
132
- if Object.const_defined?(:Syslog) && logging_devices.include?(:syslog)
133
- Syslog.close if Syslog.opened?
134
- appenders << Logging.appenders.syslog('glimmer', logging_appender_options)
135
- end
136
- logger.appenders = appenders
137
- end
138
-
139
- end
140
-
141
- end
142
-
143
- end
144
-
145
- end
146
-
147
- Glimmer::Config.reset_logger! unless ENV['GLIMMER_LOGGER_ENABLED'].to_s.downcase == 'false'
148
- if ENV['GLIMMER_LOGGER_LEVEL']
149
- # if glimmer log level is being overridden for debugging purposes, then disable async logging making logging immediate
150
- Glimmer::Config.logging_appender_options = Glimmer::Config.logging_appender_options.merge(async: false, auto_flushing: 1)
151
- Glimmer::Config.logging_devices = [:stdout]
152
- begin
153
- Glimmer::Config.logger.level = ENV['GLIMMER_LOGGER_LEVEL'].strip
154
- rescue => e
155
- puts e.message
156
- end
157
- end
158
-
159
- Glimmer::Config.excluded_keyword_checkers << lambda do |method_symbol, *args|
160
- method = method_symbol.to_s
161
- return true if method == 'post_initialize_child'
162
- return true if method == 'handle'
163
- return true if method.end_with?('=')
164
- return true if ['drag_source_proxy', 'drop_target_proxy'].include?(method) && is_a?(Glimmer::UI::CustomWidget)
165
- return true if method == 'dispose' && is_a?(Glimmer::UI::CustomWidget) && respond_to?(method)
166
- return true if ['finish_edit!', 'search', 'all_tree_items', 'depth_first_search'].include?(method) && is_a?(Glimmer::UI::CustomWidget) && body_root.respond_to?(method)
167
- end
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer/config'
23
+
24
+ module Glimmer
25
+ module Config
26
+ DEFAULT_IMPORT_SWT_PACKAGES = [
27
+ 'org.eclipse.swt',
28
+ 'org.eclipse.swt.widgets',
29
+ 'org.eclipse.swt.layout',
30
+ 'org.eclipse.swt.graphics',
31
+ 'org.eclipse.swt.browser',
32
+ 'org.eclipse.swt.custom',
33
+ 'org.eclipse.swt.dnd',
34
+ ]
35
+ DEFAULT_AUTO_SYNC_EXEC = false
36
+ GUI_THREAD = Thread.current
37
+
38
+ class << self
39
+ # Tells Glimmer to import SWT packages into including class (default: true)
40
+ def import_swt_packages=(value)
41
+ @@import_swt_packages = value
42
+ end
43
+
44
+ # Returns whether Glimmer will import SWT packages into including class
45
+ def import_swt_packages
46
+ @@import_swt_packages = DEFAULT_IMPORT_SWT_PACKAGES if !defined?(@@import_swt_packages) || (defined?(@@import_swt_packages) && @@import_swt_packages == true)
47
+ @@import_swt_packages
48
+ end
49
+
50
+ # Tells Glimmer to avoid automatic use of sync_exec when invoking GUI calls from another thread (default: true)
51
+ def auto_sync_exec=(value)
52
+ @@auto_sync_exec = value
53
+ end
54
+
55
+ # Returns whether Glimmer will import SWT packages into including class
56
+ def auto_sync_exec
57
+ @@auto_sync_exec = DEFAULT_AUTO_SYNC_EXEC if !defined?(@@auto_sync_exec)
58
+ @@auto_sync_exec
59
+ end
60
+ alias auto_sync_exec? auto_sync_exec
61
+
62
+ def require_sync_exec?
63
+ Thread.current != GUI_THREAD
64
+ end
65
+
66
+ # Returns Logging Devices. Default is [:stdout, :syslog]
67
+ def logging_devices
68
+ unless defined? @@logging_devices
69
+ @@logging_devices = [:stdout, :syslog]
70
+ end
71
+ @@logging_devices
72
+ end
73
+
74
+ # Logging Devices is an array of these possible values: :stdout (default), :stderr, :file, :syslog (default), :stringio
75
+ def logging_devices=(devices)
76
+ @@logging_devices = devices
77
+ reset_logger!
78
+ end
79
+
80
+ def logging_device_file_options
81
+ @@logging_device_file_options = {size: 1_000_000, age: 'daily', roll_by: 'number'} unless defined? @@logging_device_file_options
82
+ @@logging_device_file_options
83
+ end
84
+
85
+ def logging_device_file_options=(custom_options)
86
+ @@logging_device_file_options = custom_options
87
+ reset_logger!
88
+ end
89
+
90
+ def logging_appender_options
91
+ @@logging_appender_options = {async: true, auto_flushing: 500, write_size: 500, flush_period: 60, immediate_at: [:error, :fatal], layout: logging_layout} unless defined? @@logging_appender_options
92
+ # TODO make this a glimmer command option
93
+ if ENV['GLIMMER_LOGGER_ASYNC'].to_s.downcase == 'false'
94
+ @@logging_appender_options.merge!(async: false, auto_flushing: 1, immediate_at: [:debug, :info, :warn, :error, :fatal])
95
+ end
96
+ @@logging_appender_options
97
+ end
98
+
99
+ def logging_appender_options=(custom_options)
100
+ @@logging_appender_options = custom_options
101
+ reset_logger!
102
+ end
103
+
104
+ def logging_layout
105
+ unless defined? @@logging_layout
106
+ @@logging_layout = Logging.layouts.pattern(
107
+ pattern: '[%d] %-5l %c: %m\n',
108
+ date_pattern: '%Y-%m-%d %H:%M:%S'
109
+ )
110
+ end
111
+ @@logging_layout
112
+ end
113
+
114
+ def logging_layout=(custom_layout)
115
+ @@logging_layout = custom_layout
116
+ reset_logger!
117
+ end
118
+
119
+ def reset_logger!
120
+ @first_time = !defined?(@@logger)
121
+ old_level = logger.level unless @first_time
122
+ self.logger = Logging.logger['glimmer'].tap do |logger|
123
+ logger.level = old_level || :error
124
+ appenders = []
125
+ appenders << Logging.appenders.stdout(logging_appender_options) if logging_devices.include?(:stdout)
126
+ appenders << Logging.appenders.stderr(logging_appender_options) if logging_devices.include?(:stderr)
127
+ if logging_devices.include?(:file)
128
+ require 'fileutils'
129
+ FileUtils.mkdir_p('log')
130
+ appenders << Logging.appenders.rolling_file('log/glimmer.log', logging_appender_options.merge(logging_device_file_options)) if logging_devices.include?(:file)
131
+ end
132
+ if Object.const_defined?(:Syslog) && logging_devices.include?(:syslog)
133
+ Syslog.close if Syslog.opened?
134
+ appenders << Logging.appenders.syslog('glimmer', logging_appender_options)
135
+ end
136
+ logger.appenders = appenders
137
+ end
138
+
139
+ end
140
+
141
+ end
142
+
143
+ end
144
+
145
+ end
146
+
147
+ Glimmer::Config.reset_logger! unless ENV['GLIMMER_LOGGER_ENABLED'].to_s.downcase == 'false'
148
+ if ENV['GLIMMER_LOGGER_LEVEL']
149
+ # if glimmer log level is being overridden for debugging purposes, then disable async logging making logging immediate
150
+ Glimmer::Config.logging_appender_options = Glimmer::Config.logging_appender_options.merge(async: false, auto_flushing: 1)
151
+ Glimmer::Config.logging_devices = [:stdout]
152
+ begin
153
+ Glimmer::Config.logger.level = ENV['GLIMMER_LOGGER_LEVEL'].strip
154
+ rescue => e
155
+ puts e.message
156
+ end
157
+ end
158
+
159
+ Glimmer::Config.excluded_keyword_checkers << lambda do |method_symbol, *args|
160
+ method = method_symbol.to_s
161
+ return true if method == 'post_initialize_child'
162
+ return true if method == 'handle'
163
+ return true if method.end_with?('=')
164
+ return true if ['drag_source_proxy', 'drop_target_proxy'].include?(method) && is_a?(Glimmer::UI::CustomWidget)
165
+ return true if method == 'dispose' && is_a?(Glimmer::UI::CustomWidget) && respond_to?(method)
166
+ return true if ['finish_edit!', 'search', 'all_tree_items', 'depth_first_search'].include?(method) && is_a?(Glimmer::UI::CustomWidget) && body_root.respond_to?(method)
167
+ end