glimmer-dsl-opal 0.16.2 → 0.19.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.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -1
  3. data/README.md +106 -4
  4. data/VERSION +1 -1
  5. data/lib/glimmer-dsl-opal/samples/hello/hello_arrow.rb +65 -0
  6. data/lib/glimmer-dsl-opal/samples/hello/hello_c_combo.rb +67 -0
  7. data/lib/glimmer-dsl-opal/samples/hello/hello_c_tab.rb +172 -0
  8. data/lib/glimmer-dsl-opal/samples/hello/hello_tab.rb +10 -8
  9. data/lib/glimmer-dsl-opal/samples/hello/images/denmark.png +0 -0
  10. data/lib/glimmer-dsl-opal/samples/hello/images/finland.png +0 -0
  11. data/lib/glimmer-dsl-opal/samples/hello/images/france.png +0 -0
  12. data/lib/glimmer-dsl-opal/samples/hello/images/germany.png +0 -0
  13. data/lib/glimmer-dsl-opal/samples/hello/images/italy.png +0 -0
  14. data/lib/glimmer-dsl-opal/samples/hello/images/mexico.png +0 -0
  15. data/lib/glimmer-dsl-opal/samples/hello/images/netherlands.png +0 -0
  16. data/lib/glimmer-dsl-opal/samples/hello/images/norway.png +0 -0
  17. data/lib/glimmer-dsl-opal/samples/hello/images/usa.png +0 -0
  18. data/lib/glimmer/dsl/opal/menu_expression.rb +3 -0
  19. data/lib/glimmer/swt/arrow_proxy.rb +42 -0
  20. data/lib/glimmer/swt/button_proxy.rb +36 -1
  21. data/lib/glimmer/swt/c_combo_proxy.rb +51 -0
  22. data/lib/glimmer/swt/c_tab_folder_proxy.rb +43 -0
  23. data/lib/glimmer/swt/c_tab_item_proxy.rb +96 -0
  24. data/lib/glimmer/swt/combo_proxy.rb +3 -0
  25. data/lib/glimmer/swt/menu_proxy.rb +17 -1
  26. data/lib/glimmer/swt/shell_proxy.rb +4 -0
  27. data/lib/glimmer/swt/tab_folder_proxy.rb +12 -10
  28. data/lib/glimmer/swt/tab_item_proxy.rb +52 -4
  29. data/lib/glimmer/swt/widget_proxy.rb +55 -14
  30. metadata +18 -2
@@ -1,10 +1,31 @@
1
+ # Copyright (c) 2020-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
+
1
22
  require 'glimmer/swt/composite_proxy'
2
23
 
3
24
  module Glimmer
4
25
  module SWT
5
26
  class TabItemProxy < CompositeProxy
6
27
  include Glimmer
7
- attr_reader :text, :content_visible
28
+ attr_reader :text, :content_visible, :tool_tip_text, :image
8
29
 
9
30
  def initialize(parent, args, block)
10
31
  super(parent, args, block)
@@ -30,7 +51,33 @@ module Glimmer
30
51
 
31
52
  def text=(value)
32
53
  @text = value
33
- tab_dom_element.html(@text)
54
+ tab_dom_element.find('span').html(@text)
55
+ end
56
+
57
+ def image=(value)
58
+ @image = value
59
+ if @image.is_a?(String)
60
+ tab_dom_element.find('img').attr('src', @image)
61
+ tab_dom_element.find('img').css('padding-right', '5px')
62
+ end
63
+ end
64
+
65
+ def tool_tip_text=(value)
66
+ @tool_tip_text = value
67
+ tab_dom_element.attr('title', @tool_tip_text) if !@tool_tip_text.to_s.empty?
68
+ end
69
+
70
+ def dispose
71
+ tab_index = parent.children.to_a.index(self)
72
+ tab_dom_element.remove
73
+ super
74
+ if @content_visible
75
+ @content_visible = false
76
+ parent.hide_all_tab_content
77
+ tab_to_show = parent.children.to_a[tab_index]
78
+ tab_to_show ||= parent.children.to_a[tab_index - 1]
79
+ tab_to_show&.show
80
+ end
34
81
  end
35
82
 
36
83
  def selector
@@ -64,8 +111,9 @@ module Glimmer
64
111
  # This contains the clickable tab area with tab names
65
112
  def tab_dom
66
113
  @tab_dom ||= html {
67
- button(id: tab_id, class: "tab") {
68
- @text
114
+ a(href: '#', id: tab_id, class: "tab") {
115
+ img {}
116
+ span { @text }
69
117
  }
70
118
  }.to_s
71
119
  end
@@ -31,8 +31,8 @@ module Glimmer
31
31
  include Glimmer
32
32
  include PropertyOwner
33
33
 
34
- attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font, :focus, :disposed?, :rendered, :menu_requested
35
- attr_accessor :menu
34
+ attr_reader :parent, :args, :path, :children, :enabled, :foreground, :background, :font, :focus, :disposed?, :rendered
35
+ attr_accessor :menu, :menu_requested, :menu_x, :menu_y
36
36
  alias isDisposed disposed?
37
37
  alias is_disposed disposed?
38
38
  alias rendered? rendered
@@ -112,6 +112,7 @@ module Glimmer
112
112
  @parent = parent
113
113
  @args = args
114
114
  @block = block
115
+ # TODO consider changing children to an array (why is it a Set if order matters?)
115
116
  @children = Set.new # TODO consider moving to composite
116
117
  @enabled = true
117
118
  @data = {}
@@ -133,17 +134,16 @@ module Glimmer
133
134
  # Executes at the closing of a parent widget curly braces after all children/properties have been added/set
134
135
  def post_add_content
135
136
  if !menu.nil? && !is_a?(MenuProxy) && !is_a?(MenuItemProxy)
136
- on_mouse_down { |mouse_event|
137
+ # TODO consider in the future retaining listener registrations to deregister on unsetting of the menu
138
+ on_mouse_move do |mouse_event|
139
+ self.menu_x = mouse_event.x
140
+ self.menu_y = mouse_event.y
141
+ end
142
+ on_mouse_down do |mouse_event|
137
143
  if mouse_event.button == 3 # right-click
138
- @menu_requested = true
139
- dom_element.css('position', 'relative')
140
- menu&.render
141
- menu.dom_element.css('position', 'absolute')
142
- menu.dom_element.css('left', mouse_event.x - parent.get_layout&.margin_width.to_i) # TODO - parent.get_layout&.margin_left.to_i)
143
- menu.dom_element.css('top', mouse_event.y - parent.get_layout&.margin_height.to_i - 5) # TODO - parent.get_layout&.margin_top.to_i)
144
- @menu_requested = false
144
+ menu.visible = true
145
145
  end
146
- }
146
+ end
147
147
  end
148
148
  end
149
149
 
@@ -237,8 +237,8 @@ module Glimmer
237
237
  def font=(value)
238
238
  @font = value.is_a?(FontProxy) ? value : FontProxy.new(self, value)
239
239
  dom_element.css('font-family', @font.name) unless @font.nil?
240
- dom_element.css('font-style', 'italic') if @font&.style == :italic
241
- dom_element.css('font-weight', 'bold') if @font&.style == :bold
240
+ dom_element.css('font-style', 'italic') if @font&.style == :italic || @font&.style&.to_a&.include?(:italic)
241
+ dom_element.css('font-weight', 'bold') if @font&.style == :bold || @font&.style&.to_a&.include?(:bold)
242
242
  dom_element.css('font-size', "#{@font.height}px") unless @font.nil?
243
243
  end
244
244
 
@@ -321,10 +321,12 @@ module Glimmer
321
321
  end
322
322
 
323
323
  def default_observation_request_to_event_mapping
324
+ myself = self
324
325
  mouse_event_handler = -> (event_listener) {
325
326
  -> (event) {
326
327
  # TODO generalize this solution to all widgets that support key presses
327
328
  # TODO support event.location once DOM3 is supported by opal-jquery
329
+ event.define_singleton_method(:widget) {myself}
328
330
  event.define_singleton_method(:button, &event.method(:which))
329
331
  event.define_singleton_method(:count) {1} # TODO support double-click count of 2 in the future by using ondblclick
330
332
  event.define_singleton_method(:x, &event.method(:page_x))
@@ -345,6 +347,31 @@ module Glimmer
345
347
  # event.prevent
346
348
  # event.stop
347
349
  # event.stop_immediate
350
+ # end
351
+ }
352
+ }
353
+ mouse_move_event_handler = -> (event_listener) {
354
+ -> (event) {
355
+ # TODO generalize this solution to all widgets that support key presses
356
+ # TODO support event.location once DOM3 is supported by opal-jquery
357
+ event.define_singleton_method(:widget) {myself}
358
+ event.define_singleton_method(:button, &event.method(:which))
359
+ event.define_singleton_method(:count) {1} # TODO support double-click count of 2 in the future by using ondblclick
360
+ event.define_singleton_method(:x, &event.method(:page_x))
361
+ event.define_singleton_method(:y, &event.method(:page_y))
362
+ doit = true
363
+ event.define_singleton_method(:doit=) do |value|
364
+ doit = value
365
+ end
366
+ event.define_singleton_method(:doit) { doit }
367
+
368
+ event_listener.call(event)
369
+
370
+ # TODO Imlement doit properly for all different kinds of events
371
+ # unless doit
372
+ # event.prevent
373
+ # event.stop
374
+ # event.stop_immediate
348
375
  # end
349
376
  }
350
377
  }
@@ -352,6 +379,7 @@ module Glimmer
352
379
  -> (event) {
353
380
  # TODO generalize this solution to all widgets that support key presses
354
381
  # TODO support event.location once DOM3 is supported by opal-jquery
382
+ event.define_singleton_method(:widget) {myself}
355
383
  event.define_singleton_method(:button, &event.method(:which))
356
384
  event.define_singleton_method(:count) {1} # TODO support double-click count of 2 in the future by using ondblclick
357
385
  event.define_singleton_method(:x, &event.method(:page_x))
@@ -366,7 +394,6 @@ module Glimmer
366
394
  event.prevent
367
395
  event_listener.call(event)
368
396
  end
369
-
370
397
  # TODO Imlement doit properly for all different kinds of events
371
398
  # unless doit
372
399
  # event.prevent
@@ -382,6 +409,12 @@ module Glimmer
382
409
  'on_focus_lost' => {
383
410
  event: 'blur',
384
411
  },
412
+ 'on_mouse_move' => [
413
+ {
414
+ event: 'mousemove',
415
+ event_handler: mouse_move_event_handler,
416
+ },
417
+ ],
385
418
  'on_mouse_up' => [
386
419
  {
387
420
  event: 'mouseup',
@@ -428,6 +461,7 @@ module Glimmer
428
461
  -> (event) {
429
462
  # TODO generalize this solution to all widgets that support key presses
430
463
  # TODO support event.location once DOM3 is supported by opal-jquery
464
+ event.define_singleton_method(:widget) {myself}
431
465
  event.define_singleton_method(:keyCode) {event.which}
432
466
  event.define_singleton_method(:key_code, &event.method(:keyCode))
433
467
  event.define_singleton_method(:character) {event.which.chr}
@@ -464,6 +498,7 @@ module Glimmer
464
498
  -> (event) {
465
499
  # TODO generalize this solution to all widgets that support key presses
466
500
  # TODO support event.location once DOM3 is supported by opal-jquery
501
+ event.define_singleton_method(:widget) {myself}
467
502
  event.define_singleton_method(:keyCode) {event.which}
468
503
  event.define_singleton_method(:key_code, &event.method(:keyCode))
469
504
  event.define_singleton_method(:character) {event.which.chr}
@@ -500,6 +535,7 @@ module Glimmer
500
535
  -> (event) {
501
536
  # TODO generalize this solution to all widgets that support key presses
502
537
  # TODO support event.location once DOM3 is supported by opal-jquery
538
+ event.define_singleton_method(:widget) {myself}
503
539
  event.define_singleton_method(:keyCode) {event.which}
504
540
  event.define_singleton_method(:key_code, &event.method(:keyCode))
505
541
  event.define_singleton_method(:character) {event.which.chr}
@@ -536,6 +572,7 @@ module Glimmer
536
572
  -> (event) {
537
573
  # TODO generalize this solution to all widgets that support key presses
538
574
  # TODO support event.location once DOM3 is supported by opal-jquery
575
+ event.define_singleton_method(:widget) {myself}
539
576
  event.define_singleton_method(:keyCode) {event.which}
540
577
  event.define_singleton_method(:key_code, &event.method(:keyCode))
541
578
  event.define_singleton_method(:character) {event.which.chr}
@@ -924,7 +961,9 @@ end
924
961
  require 'glimmer/swt/display_proxy'
925
962
  require 'glimmer/swt/browser_proxy'
926
963
  require 'glimmer/swt/button_proxy'
964
+ require 'glimmer/swt/arrow_proxy'
927
965
  require 'glimmer/swt/combo_proxy'
966
+ require 'glimmer/swt/c_combo_proxy'
928
967
  require 'glimmer/swt/checkbox_proxy'
929
968
  require 'glimmer/swt/composite_proxy'
930
969
  require 'glimmer/swt/dialog_proxy'
@@ -937,6 +976,8 @@ require 'glimmer/swt/menu_proxy'
937
976
  require 'glimmer/swt/radio_proxy'
938
977
  require 'glimmer/swt/tab_folder_proxy'
939
978
  require 'glimmer/swt/tab_item_proxy'
979
+ require 'glimmer/swt/c_tab_folder_proxy'
980
+ require 'glimmer/swt/c_tab_item_proxy'
940
981
  require 'glimmer/swt/table_column_proxy'
941
982
  require 'glimmer/swt/table_item_proxy'
942
983
  require 'glimmer/swt/table_proxy'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.2
4
+ version: 0.19.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-13 00:00:00.000000000 Z
11
+ date: 2021-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -284,8 +284,11 @@ files:
284
284
  - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/board.rb
285
285
  - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/cell.rb
286
286
  - lib/glimmer-dsl-opal/samples/elaborate/weather.rb
287
+ - lib/glimmer-dsl-opal/samples/hello/hello_arrow.rb
287
288
  - lib/glimmer-dsl-opal/samples/hello/hello_browser.rb
288
289
  - lib/glimmer-dsl-opal/samples/hello/hello_button.rb
290
+ - lib/glimmer-dsl-opal/samples/hello/hello_c_combo.rb
291
+ - lib/glimmer-dsl-opal/samples/hello/hello_c_tab.rb
289
292
  - lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb
290
293
  - lib/glimmer-dsl-opal/samples/hello/hello_checkbox_group.rb
291
294
  - lib/glimmer-dsl-opal/samples/hello/hello_combo.rb
@@ -308,6 +311,15 @@ files:
308
311
  - lib/glimmer-dsl-opal/samples/hello/hello_table.rb
309
312
  - lib/glimmer-dsl-opal/samples/hello/hello_table/baseball_park.png
310
313
  - lib/glimmer-dsl-opal/samples/hello/hello_world.rb
314
+ - lib/glimmer-dsl-opal/samples/hello/images/denmark.png
315
+ - lib/glimmer-dsl-opal/samples/hello/images/finland.png
316
+ - lib/glimmer-dsl-opal/samples/hello/images/france.png
317
+ - lib/glimmer-dsl-opal/samples/hello/images/germany.png
318
+ - lib/glimmer-dsl-opal/samples/hello/images/italy.png
319
+ - lib/glimmer-dsl-opal/samples/hello/images/mexico.png
320
+ - lib/glimmer-dsl-opal/samples/hello/images/netherlands.png
321
+ - lib/glimmer-dsl-opal/samples/hello/images/norway.png
322
+ - lib/glimmer-dsl-opal/samples/hello/images/usa.png
311
323
  - lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/GPL-LICENSE.txt
312
324
  - lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/MIT-LICENSE.txt
313
325
  - lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/jquery.ui.timepicker.css
@@ -370,8 +382,12 @@ files:
370
382
  - lib/glimmer/dsl/opal/widget_listener_expression.rb
371
383
  - lib/glimmer/engine.rb
372
384
  - lib/glimmer/swt.rb
385
+ - lib/glimmer/swt/arrow_proxy.rb
373
386
  - lib/glimmer/swt/browser_proxy.rb
374
387
  - lib/glimmer/swt/button_proxy.rb
388
+ - lib/glimmer/swt/c_combo_proxy.rb
389
+ - lib/glimmer/swt/c_tab_folder_proxy.rb
390
+ - lib/glimmer/swt/c_tab_item_proxy.rb
375
391
  - lib/glimmer/swt/checkbox_proxy.rb
376
392
  - lib/glimmer/swt/color_proxy.rb
377
393
  - lib/glimmer/swt/combo_proxy.rb