glimmer-dsl-opal 0.16.2 → 0.19.1

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