glimmer 0.7.5 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []