glimmer 0.7.5 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
@@ -47,7 +46,7 @@ module Glimmer
47
46
  Thread.new do
48
47
  sleep(0.25)
49
48
  async_exec do
50
- @swt_widget.setActive
49
+ @swt_widget.setActive unless @swt_widget.isDisposed
51
50
  end
52
51
  end
53
52
  end
@@ -107,9 +106,21 @@ module Glimmer
107
106
  height = @swt_widget.getBounds.height
108
107
  x = @swt_widget.getBounds.x
109
108
  y = @swt_widget.getBounds.y
110
- @swt_widget.pack
111
- @swt_widget.setSize(width, height)
112
- @swt_widget.setLocation(x, y)
109
+ if OS.windows?
110
+ minimum_size = @swt_widget.getMinimumSize
111
+ @swt_widget.setMinimumSize(bounds.width, bounds.height)
112
+ listener = on_control_resized {
113
+ @swt_widget.setSize(bounds.width, bounds.height)
114
+ @swt_widget.setLocation(bounds.x, bounds.y)
115
+ }
116
+ @swt_widget.pack
117
+ @swt_widget.removeControlListener(listener.swt_listener)
118
+ @swt_widget.setMinimumSize(minimum_size)
119
+ else
120
+ @swt_widget.pack
121
+ @swt_widget.setSize(width, height)
122
+ @swt_widget.setLocation(x, y)
123
+ end
113
124
  end
114
125
 
115
126
  def content(&block)
@@ -128,30 +139,6 @@ module Glimmer
128
139
  end
129
140
  end
130
141
 
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
142
  def add_observer(observer, property_name)
156
143
  case property_name.to_s
157
144
  when 'visible?' #TODO see if you must handle non-? version and/or move elsewhere
@@ -151,6 +151,20 @@ module Glimmer
151
151
  observer.call(@swt_widget.getCaretPosition)
152
152
  }
153
153
  end,
154
+ :selection => lambda do |observer|
155
+ on_event_keydown { |event|
156
+ observer.call(@swt_widget.getSelection)
157
+ }
158
+ on_event_keyup { |event|
159
+ observer.call(@swt_widget.getSelection)
160
+ }
161
+ on_event_mousedown { |event|
162
+ observer.call(@swt_widget.getSelection)
163
+ }
164
+ on_event_mouseup { |event|
165
+ observer.call(@swt_widget.getSelection)
166
+ }
167
+ end,
154
168
  :selection_count => lambda do |observer|
155
169
  on_event_keydown { |event|
156
170
  observer.call(@swt_widget.getSelectionCount)
@@ -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.
@@ -83,23 +83,26 @@ module Glimmer
83
83
  else
84
84
  new_options = new_options.reduce({}) {|new_options_hash, new_option| new_options_hash.merge(new_option => nil)}
85
85
  @options = options.merge(new_options)
86
- def_option_attr_readers(new_options)
86
+ def_option_attr_accessors(new_options)
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
- def_option_attr_readers(new_options)
94
+ def_option_attr_accessors(new_options)
95
95
  end
96
96
 
97
- def def_option_attr_readers(new_options)
97
+ def def_option_attr_accessors(new_options)
98
98
  new_options.each do |option, default|
99
99
  class_eval <<-end_eval, __FILE__, __LINE__
100
100
  def #{option}
101
101
  options[:#{option}]
102
102
  end
103
+ def #{option}=(option_value)
104
+ self.options[:#{option}] = option_value
105
+ end
103
106
  end_eval
104
107
  end
105
108
  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.5
4
+ version: 0.8.1
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-22 00:00:00.000000000 Z
11
+ date: 2020-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -150,34 +150,6 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 3.5.0
153
- - !ruby/object:Gem::Dependency
154
- requirement: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - '='
157
- - !ruby/object:Gem::Version
158
- version: 0.8.5
159
- name: coveralls
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - '='
165
- - !ruby/object:Gem::Version
166
- version: 0.8.5
167
- - !ruby/object:Gem::Dependency
168
- requirement: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: 0.10.0
173
- name: simplecov
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: 0.10.0
181
153
  - !ruby/object:Gem::Dependency
182
154
  requirement: !ruby/object:Gem::Requirement
183
155
  requirements:
@@ -192,9 +164,7 @@ dependencies:
192
164
  - - "~>"
193
165
  - !ruby/object:Gem::Version
194
166
  version: 0.8.1
195
- description: JRuby Desktop UI DSL + Data-Binding native-UI cross-platform library
196
- that enables productive and efficient authoring of desktop user-interfaces using
197
- the robust Eclipse SWT library
167
+ description: Ruby Desktop Development GUI Library
198
168
  email: andy.am@gmail.com
199
169
  executables:
200
170
  - glimmer
@@ -202,10 +172,10 @@ executables:
202
172
  extensions: []
203
173
  extra_rdoc_files:
204
174
  - LICENSE.txt
205
- - README.markdown
175
+ - README.md
206
176
  files:
207
177
  - LICENSE.txt
208
- - README.markdown
178
+ - README.md
209
179
  - RUBY_VERSION
210
180
  - VERSION
211
181
  - bin/girb
@@ -246,6 +216,7 @@ files:
246
216
  - lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb
247
217
  - lib/glimmer/dsl/swt/custom_widget_expression.rb
248
218
  - lib/glimmer/dsl/swt/data_binding_expression.rb
219
+ - lib/glimmer/dsl/swt/dialog_expression.rb
249
220
  - lib/glimmer/dsl/swt/display_expression.rb
250
221
  - lib/glimmer/dsl/swt/dsl.rb
251
222
  - lib/glimmer/dsl/swt/exec_expression.rb
@@ -328,5 +299,5 @@ requirements: []
328
299
  rubygems_version: 3.0.6
329
300
  signing_key:
330
301
  specification_version: 4
331
- summary: Desktop development library for Ruby
302
+ summary: Ruby Desktop Development GUI Library
332
303
  test_files: []