glimmer-dsl-opal 0.16.1 → 0.19.0

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -2
  3. data/README.md +158 -4
  4. data/VERSION +1 -1
  5. data/lib/cgi.rb +14 -0
  6. data/lib/glimmer-dsl-opal.rb +1 -0
  7. data/lib/glimmer-dsl-opal/samples/hello/hello_arrow.rb +65 -0
  8. data/lib/glimmer-dsl-opal/samples/hello/hello_c_combo.rb +67 -0
  9. data/lib/glimmer-dsl-opal/samples/hello/hello_c_tab.rb +172 -0
  10. data/lib/glimmer-dsl-opal/samples/hello/hello_layout.rb +241 -0
  11. data/lib/glimmer-dsl-opal/samples/hello/hello_tab.rb +10 -8
  12. data/lib/glimmer-dsl-opal/samples/hello/images/denmark.png +0 -0
  13. data/lib/glimmer-dsl-opal/samples/hello/images/finland.png +0 -0
  14. data/lib/glimmer-dsl-opal/samples/hello/images/france.png +0 -0
  15. data/lib/glimmer-dsl-opal/samples/hello/images/germany.png +0 -0
  16. data/lib/glimmer-dsl-opal/samples/hello/images/italy.png +0 -0
  17. data/lib/glimmer-dsl-opal/samples/hello/images/mexico.png +0 -0
  18. data/lib/glimmer-dsl-opal/samples/hello/images/netherlands.png +0 -0
  19. data/lib/glimmer-dsl-opal/samples/hello/images/norway.png +0 -0
  20. data/lib/glimmer-dsl-opal/samples/hello/images/usa.png +0 -0
  21. data/lib/glimmer/dsl/opal/menu_expression.rb +3 -0
  22. data/lib/glimmer/swt/arrow_proxy.rb +42 -0
  23. data/lib/glimmer/swt/button_proxy.rb +36 -1
  24. data/lib/glimmer/swt/c_combo_proxy.rb +51 -0
  25. data/lib/glimmer/swt/c_tab_folder_proxy.rb +43 -0
  26. data/lib/glimmer/swt/c_tab_item_proxy.rb +96 -0
  27. data/lib/glimmer/swt/combo_proxy.rb +3 -0
  28. data/lib/glimmer/swt/fill_layout_proxy.rb +9 -3
  29. data/lib/glimmer/swt/grid_layout_proxy.rb +33 -1
  30. data/lib/glimmer/swt/label_proxy.rb +2 -2
  31. data/lib/glimmer/swt/menu_proxy.rb +17 -1
  32. data/lib/glimmer/swt/row_layout_proxy.rb +33 -2
  33. data/lib/glimmer/swt/shell_proxy.rb +4 -0
  34. data/lib/glimmer/swt/tab_folder_proxy.rb +12 -10
  35. data/lib/glimmer/swt/tab_item_proxy.rb +52 -4
  36. data/lib/glimmer/swt/widget_proxy.rb +53 -12
  37. metadata +20 -2
@@ -24,6 +24,14 @@ module Glimmer
24
24
  margin-left: auto;
25
25
  margin-right: auto;
26
26
  }
27
+
28
+ .row-layout-wrap {
29
+ flex-wrap: wrap;
30
+ }
31
+
32
+ .row-layout-justify {
33
+ justify-content: space-around;
34
+ }
27
35
 
28
36
  .row-layout-horizontal {
29
37
  flex-direction: row;
@@ -42,13 +50,14 @@ module Glimmer
42
50
  }
43
51
  CSS
44
52
 
45
- attr_reader :type, :fill, :margin_width, :margin_height, :margin_top, :margin_right, :margin_bottom, :margin_left, :spacing, :pack, :center
53
+ attr_reader :type, :margin_width, :margin_height, :margin_top, :margin_right, :margin_bottom, :margin_left, :spacing, :pack, :center, :wrap, :justify
46
54
 
47
55
  def initialize(parent, args)
48
56
  super(parent, args)
49
57
  @parent.dom_element.add_class('row-layout')
50
58
  self.type = args.first || :horizontal
51
59
  self.pack = true
60
+ self.wrap = true
52
61
  end
53
62
 
54
63
  def type=(value)
@@ -79,9 +88,13 @@ module Glimmer
79
88
  end
80
89
  end
81
90
 
91
+ def fill
92
+ !pack
93
+ end
94
+
82
95
  def fill=(value)
83
96
  # TODO verify this is a correct implementation and interpretation of RowLayout in SWT
84
- self.pack(!value)
97
+ self.pack = !value
85
98
  end
86
99
 
87
100
  def center=(center_value)
@@ -94,6 +107,24 @@ module Glimmer
94
107
  end
95
108
  end
96
109
 
110
+ def wrap=(wrap_value)
111
+ @wrap = wrap_value
112
+ if @wrap
113
+ parent.dom_element.add_class("row-layout-wrap")
114
+ else
115
+ parent.dom_element.remove_class("row-layout-wrap")
116
+ end
117
+ end
118
+
119
+ def justify=(justify_value)
120
+ @justify = justify_value
121
+ if @justify
122
+ parent.dom_element.add_class("row-layout-justify")
123
+ else
124
+ parent.dom_element.remove_class("row-layout-justify")
125
+ end
126
+ end
127
+
97
128
  def margin_width=(pixels)
98
129
  @margin_width = pixels
99
130
  # Using padding for width since margin-right isn't getting respected with width 100%
@@ -76,6 +76,10 @@ module Glimmer
76
76
  DisplayProxy.instance.shells << self
77
77
  end
78
78
 
79
+ def post_add_content
80
+ `$( document ).tooltip()`
81
+ end
82
+
79
83
  def element
80
84
  'div'
81
85
  end
@@ -26,8 +26,8 @@ module Glimmer
26
26
  class TabFolderProxy < WidgetProxy
27
27
  STYLE = <<~CSS
28
28
  .tabs .tab.selected {
29
- background: rgb(80, 116, 211);
30
- color: white;
29
+ background: white;
30
+ color: black;
31
31
  }
32
32
  .tabs .tab {
33
33
  background-color: inherit;
@@ -38,6 +38,14 @@ module Glimmer
38
38
  padding: 14px 16px;
39
39
  transition: 0.3s;
40
40
  font-size: 17px;
41
+ text-decoration: none;
42
+ }
43
+ .tabs .tab:hover {
44
+ color: black
45
+ }
46
+ .tabs .tab > * {
47
+ display: inline-block;
48
+ vertical-align: middle;
41
49
  }
42
50
  .tabs {
43
51
  overflow: hidden;
@@ -46,16 +54,10 @@ module Glimmer
46
54
  }
47
55
  CSS
48
56
 
49
- attr_reader :tabs
50
-
51
- def initialize(parent, args, block)
52
- super(parent, args, block)
53
- @tabs = []
54
- end
55
-
56
57
  def post_initialize_child(child)
57
58
  unless @children.include?(child)
58
59
  @children << child
60
+ child.closeable = true if @closeable_children
59
61
  tabs_dom_element.append(child.tab_dom)
60
62
  child.render
61
63
  end
@@ -85,7 +87,7 @@ module Glimmer
85
87
  tab_folder_id = id
86
88
  tab_folder_id_style = css
87
89
  @dom ||= html {
88
- div(id: tab_folder_id, style: tab_folder_id_style, class: 'tab-folder') {
90
+ div(id: tab_folder_id, style: tab_folder_id_style, class: name) {
89
91
  div(id: tabs_id, class: 'tabs')
90
92
  }
91
93
  }.to_s
@@ -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
 
@@ -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.1
4
+ version: 0.19.0
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-12 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
@@ -267,6 +267,7 @@ files:
267
267
  - app/controllers/glimmer/image_paths_controller.rb
268
268
  - app/views/glimmer/image_paths/index.html.erb
269
269
  - config/routes.rb
270
+ - lib/cgi.rb
270
271
  - lib/display.rb
271
272
  - lib/glimmer-dsl-opal.rb
272
273
  - lib/glimmer-dsl-opal/ext/class.rb
@@ -283,8 +284,11 @@ files:
283
284
  - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/board.rb
284
285
  - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/cell.rb
285
286
  - lib/glimmer-dsl-opal/samples/elaborate/weather.rb
287
+ - lib/glimmer-dsl-opal/samples/hello/hello_arrow.rb
286
288
  - lib/glimmer-dsl-opal/samples/hello/hello_browser.rb
287
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
288
292
  - lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb
289
293
  - lib/glimmer-dsl-opal/samples/hello/hello_checkbox_group.rb
290
294
  - lib/glimmer-dsl-opal/samples/hello/hello_combo.rb
@@ -295,6 +299,7 @@ files:
295
299
  - lib/glimmer-dsl-opal/samples/hello/hello_date_time.rb
296
300
  - lib/glimmer-dsl-opal/samples/hello/hello_dialog.rb
297
301
  - lib/glimmer-dsl-opal/samples/hello/hello_group.rb
302
+ - lib/glimmer-dsl-opal/samples/hello/hello_layout.rb
298
303
  - lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb
299
304
  - lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb
300
305
  - lib/glimmer-dsl-opal/samples/hello/hello_menu_bar.rb
@@ -306,6 +311,15 @@ files:
306
311
  - lib/glimmer-dsl-opal/samples/hello/hello_table.rb
307
312
  - lib/glimmer-dsl-opal/samples/hello/hello_table/baseball_park.png
308
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
309
323
  - lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/GPL-LICENSE.txt
310
324
  - lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/MIT-LICENSE.txt
311
325
  - lib/glimmer-dsl-opal/vendor/jquery-ui-timepicker/jquery.ui.timepicker.css
@@ -368,8 +382,12 @@ files:
368
382
  - lib/glimmer/dsl/opal/widget_listener_expression.rb
369
383
  - lib/glimmer/engine.rb
370
384
  - lib/glimmer/swt.rb
385
+ - lib/glimmer/swt/arrow_proxy.rb
371
386
  - lib/glimmer/swt/browser_proxy.rb
372
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
373
391
  - lib/glimmer/swt/checkbox_proxy.rb
374
392
  - lib/glimmer/swt/color_proxy.rb
375
393
  - lib/glimmer/swt/combo_proxy.rb