glimmer 0.7.8 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a3d10cd74668598ac83511994d117f3b99f7332d798d671ddc412dcac3c92fa
4
- data.tar.gz: 1daf7b7330d0e73790ec98c5ef3afdf3f991f0f447f5b72ce47bc70901bb8baa
3
+ metadata.gz: 84d87ba92b94f38539aa2dad56f18f8ec09a358d8ac327008b08ef9be3977e9a
4
+ data.tar.gz: 74bc0959b428802c4a4e1ef28b3f1365b2f4444a1d0446b6cc85420743a9aa7f
5
5
  SHA512:
6
- metadata.gz: 81136d0e73a2e26f01bc16b8986f8569910a63509730766d6cb70a533e1fbe38fdce3bfc7e0488d5bbe2a76e10413a46b0765811960698f70a343d45ab3c78a2
7
- data.tar.gz: e20bab1be17773690ac997385921e47520e324afe3b4efcf0f0b6ae4dcf00cd6bcaea9b36c048c9c1eec54023af4c853e8c9aaa55138b40fa58f4262cbd09872
6
+ metadata.gz: b80eeec01d04286de10967801413c72cba05dd06b21f9be75a044cf433827d4598f1bed83576222d71f7455dc868cf4af31ae6db9445a536772f1f6f0f446100
7
+ data.tar.gz: 0d2ac02fb3c55b4bcf79e150b320b5a0d23749ded30a9324c954b0d79d35543e50c9b786c5a7a258342f72f9144bcffd58b733dd2b4c3bcc66b61e4bfcbf85f8
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Glimmer 0.7.8 Beta (Desktop Development Library for Ruby)
1
+ # Glimmer 0.8.0 Beta (Ruby Desktop Development GUI Library)
2
2
  [![Gem Version](https://badge.fury.io/rb/glimmer.svg)](http://badge.fury.io/rb/glimmer)
3
3
  [![Travis CI](https://travis-ci.com/AndyObtiva/glimmer.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer)
4
4
  [![Test Coverage](https://api.codeclimate.com/v1/badges/38fbc278022862794414/test_coverage)](https://codeclimate.com/github/AndyObtiva/glimmer/test_coverage)
@@ -75,7 +75,7 @@ NOTE: Glimmer is in beta mode. Please help make better by adopting for small or
75
75
 
76
76
  ## Table of Contents
77
77
 
78
- - [Glimmer 0.7.8 Beta (Desktop Development Library for Ruby)](#glimmer-078-beta-desktop-development-library-for-ruby)
78
+ - [Glimmer 0.8.0 Beta (Ruby Desktop Development GUI Library)](#glimmer-080-beta-desktop-development-library-for-ruby)
79
79
  - [Examples](#examples)
80
80
  - [Hello, World!](#hello-world)
81
81
  - [Tic Tac Toe](#tic-tac-toe)
@@ -174,7 +174,7 @@ Please follow these instructions to make the `glimmer` command available on your
174
174
 
175
175
  Run this command to install directly:
176
176
  ```
177
- jgem install glimmer -v 0.7.8
177
+ jgem install glimmer -v 0.8.0
178
178
  ```
179
179
 
180
180
  `jgem` is JRuby's version of `gem` command.
@@ -185,7 +185,7 @@ Otherwise, you may also run `jruby -S gem install ...`
185
185
 
186
186
  Add the following to `Gemfile`:
187
187
  ```
188
- gem 'glimmer', '~> 0.7.8'
188
+ gem 'glimmer', '~> 0.8.0'
189
189
  ```
190
190
 
191
191
  And, then run:
@@ -247,7 +247,7 @@ automatically preloading the glimmer Ruby gem and SWT jar dependency.
247
247
  Optionally, extra Glimmer options, JRuby options and environment variables may be passed in.
248
248
 
249
249
  Glimmer options:
250
- - "--quiet" : Does not announce file path of Glimmer application being launched nor enable logging
250
+ - "--quiet" : Does not announce file path of Glimmer application being launched
251
251
  - "--debug" : Displays extra debugging information, passes "--debug" to JRuby, and enables debug logging
252
252
  - "--log-level=VALUE" : Sets Glimmer's Ruby logger level ("ERROR" / "WARN" / "INFO" / "DEBUG"; default is none)
253
253
 
@@ -632,7 +632,7 @@ Shell widget proxy has extra methods specific to SWT Shell:
632
632
 
633
633
  Dialog is a variation on Shell. It is basically a shell that is modal (blocks what's behind it) and belongs to another shell. It only has a close button.
634
634
 
635
- Glimmer facilitates building dialogs by using the `dialog` keyword, which automatically adds the SWT::DIALOG_TRIM and SWT::APPLICATION_MODAL [widget styles](#widget-styles) needed for a dialog.
635
+ Glimmer facilitates building dialogs by using the `dialog` keyword, which automatically adds the SWT.DIALOG_TRIM and SWT.APPLICATION_MODAL [widget styles](#widget-styles) needed for a dialog.
636
636
 
637
637
  #### Menus
638
638
 
@@ -1324,7 +1324,7 @@ Glimmer supports observing widgets with two main types of events:
1324
1324
 
1325
1325
  Additionally, there are two more types of events:
1326
1326
  - SWT `display` supports global listeners called filters that run on any widget. They are hooked via `on_event_{swt-event-constant}`
1327
- - the `shell` widget supports Mac application menu item observers (`on_about` and `on_preferences`), which you can read about under [Miscellaneous](#miscellaneous).
1327
+ - SWT `display` supports Mac application menu item observers (`on_about` and `on_preferences`), which you can read about under [Miscellaneous](#miscellaneous).
1328
1328
 
1329
1329
  Number 1 is more commonly used in SWT applications, so make it your starting point. Number 2 covers events not found in number 1, so look into it if you don't find an SWT listener you need in number 1.
1330
1330
 
@@ -1559,8 +1559,8 @@ Custom Widgets have the following attributes available to call from inside the `
1559
1559
  - `#swt_widget`: actual SWT widget for `body_root`
1560
1560
 
1561
1561
  Additionally, custom widgets can call the following class methods:
1562
- - `.options`: declares a list of options by taking an option name array (symbols/strings). This generates option attribute accessors (e.g. `options :orientation, :bg_color` generates `#orientation`, `#orientation=(v)`, `#bg_color`, and `#bg_color=(v)` attribute accessors)
1563
- - `.option`: declares a single option taking option name and default value as arguments (also generates attribute accessors just like `.options`)
1562
+ - `::options(*option_names)`: declares a list of options by taking an option name array (symbols/strings). This generates option attribute accessors (e.g. `options :orientation, :bg_color` generates `#orientation`, `#orientation=(v)`, `#bg_color`, and `#bg_color=(v)` attribute accessors)
1563
+ - `::option(option_name, default: nil)`: declares a single option taking option name and default value as arguments (also generates attribute accessors just like `::options`)
1564
1564
 
1565
1565
  #### Content/Options Example (you may copy/paste in [`girb`](#girb-glimmer-irb-command)):
1566
1566
 
@@ -1570,7 +1570,7 @@ class Sandwich
1570
1570
  include Glimmer::UI::CustomWidget
1571
1571
 
1572
1572
  options :orientation, :bg_color
1573
- option :fg_color, :black
1573
+ option :fg_color, default: :black
1574
1574
 
1575
1575
  body {
1576
1576
  composite(swt_style) { # gets custom widget style
@@ -1705,52 +1705,61 @@ shell { |app_shell|
1705
1705
 
1706
1706
  #### Application Menu Items (About/Preferences)
1707
1707
 
1708
- Mac applications always have About and Preferences menu items. Glimmer provides widget observer hooks for them on the `shell` widget:
1708
+ Mac applications always have About and Preferences menu items. Glimmer provides widget observer hooks for them on the `display`:
1709
1709
  - `on_about`: executes code when user selects App Name -> About
1710
1710
  - `on_preferences`: executes code when user selects App Name -> Preferences or hits 'CMD+,' on the Mac
1711
1711
 
1712
1712
  Example (you may copy/paste in [`girb`](#girb-glimmer-irb-command)):
1713
1713
 
1714
1714
  ```ruby
1715
- shell { |shell_proxy|
1716
- text 'Application Menu Items'
1717
- fill_layout {
1718
- margin_width 15
1719
- margin_height 15
1720
- }
1721
- label {
1722
- text 'Application Menu Items'
1723
- font height: 30
1724
- }
1725
- on_about {
1726
- message_box = MessageBox.new(shell_proxy.swt_widget)
1727
- message_box.setText("About")
1728
- message_box.setMessage("About Application")
1729
- message_box.open
1730
- }
1731
- on_preferences {
1732
- preferences_dialog = shell(:dialog_trim, :application_modal) {
1733
- text 'Preferences'
1734
- row_layout {
1735
- type :vertical
1736
- margin_left 15
1737
- margin_top 15
1738
- margin_right 15
1739
- margin_bottom 15
1715
+ class Example
1716
+ def initialize
1717
+ display {
1718
+ on_about {
1719
+ message_box = MessageBox.new(@shell_proxy.swt_widget)
1720
+ message_box.setText("About")
1721
+ message_box.setMessage("About Application")
1722
+ message_box.open
1740
1723
  }
1741
- label {
1742
- text 'Check one of these options:'
1724
+ on_preferences {
1725
+ preferences_dialog = dialog {
1726
+ text 'Preferences'
1727
+ row_layout {
1728
+ type :vertical
1729
+ margin_left 15
1730
+ margin_top 15
1731
+ margin_right 15
1732
+ margin_bottom 15
1733
+ }
1734
+ label {
1735
+ text 'Check one of these options:'
1736
+ }
1737
+ button(:radio) {
1738
+ text 'Option 1'
1739
+ }
1740
+ button(:radio) {
1741
+ text 'Option 2'
1742
+ }
1743
+ }
1744
+ preferences_dialog.open
1743
1745
  }
1744
- button(:radio) {
1745
- text 'Option 1'
1746
+ }
1747
+ @shell_proxy = shell {
1748
+ text 'Application Menu Items'
1749
+ fill_layout {
1750
+ margin_width 15
1751
+ margin_height 15
1746
1752
  }
1747
- button(:radio) {
1748
- text 'Option 2'
1753
+ label {
1754
+ text 'Application Menu Items'
1755
+ font height: 30
1749
1756
  }
1750
1757
  }
1751
- preferences_dialog.open
1752
- }
1753
- }.open
1758
+ @shell_proxy.open
1759
+ end
1760
+ end
1761
+
1762
+ Example.new
1754
1763
  ```
1755
1764
 
1756
1765
  #### App Name and Version
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.8
1
+ 0.8.0
@@ -27,7 +27,7 @@ module Glimmer
27
27
  Optionally, extra Glimmer options, JRuby options and environment variables may be passed in.
28
28
 
29
29
  Glimmer options:
30
- - "--quiet" : Does not announce file path of Glimmer application being launched nor enable logging
30
+ - "--quiet" : Does not announce file path of Glimmer application being launched
31
31
  - "--debug" : Displays extra debugging information, passes "--debug" to JRuby, and enables debug logging
32
32
  - "--log-level=VALUE" : Sets Glimmer's Ruby logger level ("ERROR" / "WARN" / "INFO" / "DEBUG"; default is none)
33
33
 
@@ -424,9 +424,9 @@ class Scaffold
424
424
  ## Add options like the following to configure CustomShell by outside consumers
425
425
  #
426
426
  # options :title, :background_color
427
- # option :width, 320
428
- # option :height, 240
429
- option :greeting, 'Hello, World!'
427
+ # option :width, default: 320
428
+ # option :height, default: 240
429
+ option :greeting, default: 'Hello, World!'
430
430
 
431
431
  ## Use before_body block to pre-initialize variables to use in body
432
432
  #
@@ -438,6 +438,14 @@ class Scaffold
438
438
  before_body {
439
439
  Display.setAppName('#{shell_type == :gem ? human_name(custom_shell_name) : human_name(namespace)}')
440
440
  Display.setAppVersion(VERSION)
441
+ @display = display {
442
+ on_about {
443
+ display_about_dialog
444
+ }
445
+ on_preferences {
446
+ display_preferences_dialog
447
+ }
448
+ }
441
449
  }
442
450
  MULTI_LINE_STRING
443
451
  else
@@ -465,20 +473,6 @@ class Scaffold
465
473
  minimum_size 320, 240
466
474
  text "#{human_name(namespace)} - #{human_name(custom_shell_name)}"
467
475
  grid_layout
468
- MULTI_LINE_STRING
469
-
470
- if %i[gem app].include?(shell_type)
471
- custom_shell_file_content += <<-MULTI_LINE_STRING
472
- on_about {
473
- display_about_dialog
474
- }
475
- on_preferences {
476
- display_preferences_dialog
477
- }
478
- MULTI_LINE_STRING
479
- end
480
-
481
- custom_shell_file_content += <<-MULTI_LINE_STRING
482
476
  label(:center) {
483
477
  text bind(self, :greeting)
484
478
  font height: 40
@@ -552,7 +546,7 @@ end
552
546
  ## Add options like the following to configure CustomWidget by outside consumers
553
547
  #
554
548
  # options :custom_text, :background_color
555
- # option :foreground_color, :red
549
+ # option :foreground_color, default: :red
556
550
 
557
551
  ## Use before_body block to pre-initialize variables to use in body
558
552
  #
@@ -16,6 +16,8 @@ module Glimmer
16
16
  class DisplayProxy
17
17
  include_package 'org.eclipse.swt.widgets'
18
18
 
19
+ OBSERVED_MENU_ITEMS = ['about', 'preferences']
20
+
19
21
  class << self
20
22
  # Returns singleton instance
21
23
  def instance(*args)
@@ -52,6 +54,9 @@ module Glimmer
52
54
  if observation_request.start_with?('on_event_')
53
55
  constant_name = observation_request.sub(/^on_event_/, '')
54
56
  SWTProxy.has_constant?(constant_name)
57
+ elsif observation_request.start_with?('on_')
58
+ event_name = observation_request.sub(/^on_/, '')
59
+ OBSERVED_MENU_ITEMS.include?(event_name)
55
60
  else
56
61
  false
57
62
  end
@@ -61,6 +66,15 @@ module Glimmer
61
66
  if observation_request.start_with?('on_event_')
62
67
  constant_name = observation_request.sub(/^on_event_/, '')
63
68
  add_swt_event_listener(constant_name, &block)
69
+ elsif observation_request.start_with?('on_')
70
+ event_name = observation_request.sub(/^on_/, '')
71
+ if OBSERVED_MENU_ITEMS.include?(event_name)
72
+ if OS.mac?
73
+ system_menu = swt_display.getSystemMenu
74
+ menu_item = system_menu.getItems.find {|menu_item| menu_item.getID == SWTProxy["ID_#{event_name.upcase}"]}
75
+ menu_item.addListener(SWTProxy[:Selection], &block)
76
+ end
77
+ end
64
78
  end
65
79
  end
66
80
 
@@ -79,6 +79,23 @@ module Glimmer
79
79
  super(attribute_name)
80
80
  end
81
81
  end
82
+
83
+ def can_handle_observation_request?(observation_request, super_only: false)
84
+ super_result = super(observation_request)
85
+ if observation_request.start_with?('on_') && !super_result && !super_only
86
+ return menu_item_proxy.can_handle_observation_request?(observation_request)
87
+ else
88
+ super_result
89
+ end
90
+ end
91
+
92
+ def handle_observation_request(observation_request, &block)
93
+ if can_handle_observation_request?(observation_request, super_only: true)
94
+ super
95
+ else
96
+ menu_item_proxy.handle_observation_request(observation_request, &block)
97
+ end
98
+ end
82
99
  end
83
100
  end
84
101
  end
@@ -14,7 +14,6 @@ module Glimmer
14
14
 
15
15
  WIDTH_MIN = 130
16
16
  HEIGHT_MIN = 0
17
- OBSERVED_MENU_ITEMS = ['about', 'preferences']
18
17
 
19
18
  attr_reader :opened_before
20
19
  alias opened_before? opened_before
@@ -128,30 +127,6 @@ module Glimmer
128
127
  end
129
128
  end
130
129
 
131
- def can_handle_observation_request?(observation_request)
132
- result = false
133
- if observation_request.start_with?('on_')
134
- event_name = observation_request.sub(/^on_/, '')
135
- result = OBSERVED_MENU_ITEMS.include?(event_name)
136
- end
137
- result || super
138
- end
139
-
140
- def handle_observation_request(observation_request, &block)
141
- if observation_request.start_with?('on_')
142
- event_name = observation_request.sub(/^on_/, '')
143
- if OBSERVED_MENU_ITEMS.include?(event_name)
144
- if OS.mac?
145
- system_menu = DisplayProxy.instance.swt_display.getSystemMenu
146
- menu_item = system_menu.getItems.find {|menu_item| menu_item.getID == SWTProxy["ID_#{event_name.upcase}"]}
147
- menu_item.addListener(SWTProxy[:Selection], &block)
148
- end
149
- else
150
- super
151
- end
152
- end
153
- end
154
-
155
130
  def add_observer(observer, property_name)
156
131
  case property_name.to_s
157
132
  when 'visible?' #TODO see if you must handle non-? version and/or move elsewhere
@@ -70,7 +70,7 @@ module Glimmer
70
70
  @custom_widget_namespaces = Set[Object, Glimmer::UI]
71
71
  end
72
72
 
73
- # Allows defining convenience option readers for an array of option names
73
+ # Allows defining convenience option accessors for an array of option names
74
74
  # Example: `options :color1, :color2` defines `#color1` and `#color2`
75
75
  # where they return the instance values `options[:color1]` and `options[:color2]`
76
76
  # respectively.
@@ -87,9 +87,9 @@ module Glimmer
87
87
  end
88
88
  end
89
89
 
90
- def option(new_option, new_option_default = nil)
90
+ def option(new_option, default: nil)
91
91
  new_option = new_option.to_s.to_sym
92
- new_options = {new_option => new_option_default}
92
+ new_options = {new_option => default}
93
93
  @options = options.merge(new_options)
94
94
  def_option_attr_accessors(new_options)
95
95
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-31 00:00:00.000000000 Z
11
+ date: 2020-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -164,7 +164,7 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: 0.8.1
167
- description: Desktop Development Library for Ruby
167
+ description: Ruby Desktop Development GUI Library
168
168
  email: andy.am@gmail.com
169
169
  executables:
170
170
  - glimmer
@@ -299,5 +299,5 @@ requirements: []
299
299
  rubygems_version: 3.0.6
300
300
  signing_key:
301
301
  specification_version: 4
302
- summary: Desktop Development Library for Ruby
302
+ summary: Ruby Desktop Development GUI Library
303
303
  test_files: []