glimmer-dsl-swt 4.17.10.5 → 4.18.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +421 -95
  5. data/RUBY_VERSION +1 -1
  6. data/VERSION +1 -1
  7. data/bin/girb +1 -1
  8. data/bin/girb_runner.rb +1 -1
  9. data/bin/glimmer +1 -1
  10. data/glimmer-dsl-swt.gemspec +53 -32
  11. data/lib/ext/glimmer.rb +1 -1
  12. data/lib/ext/glimmer/config.rb +1 -1
  13. data/lib/glimmer-dsl-swt.rb +2 -1
  14. data/lib/glimmer/Rakefile +1 -1
  15. data/lib/glimmer/data_binding/list_selection_binding.rb +1 -1
  16. data/lib/glimmer/data_binding/observable_widget.rb +1 -1
  17. data/lib/glimmer/data_binding/shine.rb +1 -1
  18. data/lib/glimmer/data_binding/table_items_binding.rb +1 -1
  19. data/lib/glimmer/data_binding/tree_items_binding.rb +1 -1
  20. data/lib/glimmer/data_binding/widget_binding.rb +1 -1
  21. data/lib/glimmer/dsl/swt/async_exec_expression.rb +1 -1
  22. data/lib/glimmer/dsl/swt/bind_expression.rb +1 -1
  23. data/lib/glimmer/dsl/swt/block_property_expression.rb +1 -1
  24. data/lib/glimmer/dsl/swt/checkbox_group_selection_data_binding_expression.rb +1 -1
  25. data/lib/glimmer/dsl/swt/color_expression.rb +1 -1
  26. data/lib/glimmer/dsl/swt/column_properties_expression.rb +1 -1
  27. data/lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb +1 -1
  28. data/lib/glimmer/dsl/swt/cursor_expression.rb +1 -1
  29. data/lib/glimmer/dsl/swt/custom_widget_expression.rb +1 -1
  30. data/lib/glimmer/dsl/swt/data_binding_expression.rb +1 -1
  31. data/lib/glimmer/dsl/swt/dialog_expression.rb +1 -1
  32. data/lib/glimmer/dsl/swt/directory_dialog_expression.rb +1 -1
  33. data/lib/glimmer/dsl/swt/display_expression.rb +1 -1
  34. data/lib/glimmer/dsl/swt/dnd_expression.rb +1 -1
  35. data/lib/glimmer/dsl/swt/dsl.rb +1 -1
  36. data/lib/glimmer/dsl/swt/exec_expression.rb +5 -5
  37. data/lib/glimmer/dsl/swt/expand_item_expression.rb +1 -1
  38. data/lib/glimmer/dsl/swt/file_dialog_expression.rb +1 -1
  39. data/lib/glimmer/dsl/swt/font_expression.rb +1 -1
  40. data/lib/glimmer/dsl/swt/image_expression.rb +1 -1
  41. data/lib/glimmer/dsl/swt/layout_data_expression.rb +1 -1
  42. data/lib/glimmer/dsl/swt/layout_expression.rb +1 -1
  43. data/lib/glimmer/dsl/swt/list_selection_data_binding_expression.rb +1 -1
  44. data/lib/glimmer/dsl/swt/menu_bar_expression.rb +1 -1
  45. data/lib/glimmer/dsl/swt/menu_expression.rb +1 -1
  46. data/lib/glimmer/dsl/swt/message_box_expression.rb +1 -1
  47. data/lib/glimmer/dsl/swt/observe_expression.rb +1 -1
  48. data/lib/glimmer/dsl/swt/property_expression.rb +1 -1
  49. data/lib/glimmer/dsl/swt/radio_group_selection_data_binding_expression.rb +1 -1
  50. data/lib/glimmer/dsl/swt/rgb_expression.rb +1 -1
  51. data/lib/glimmer/dsl/swt/rgba_expression.rb +1 -1
  52. data/lib/glimmer/dsl/swt/shell_expression.rb +1 -1
  53. data/lib/glimmer/dsl/swt/swt_expression.rb +1 -1
  54. data/lib/glimmer/dsl/swt/sync_exec_expression.rb +1 -1
  55. data/lib/glimmer/dsl/swt/tab_item_expression.rb +1 -1
  56. data/lib/glimmer/dsl/swt/table_items_data_binding_expression.rb +1 -1
  57. data/lib/glimmer/dsl/swt/tree_items_data_binding_expression.rb +1 -1
  58. data/lib/glimmer/dsl/swt/tree_properties_expression.rb +1 -1
  59. data/lib/glimmer/dsl/swt/widget_expression.rb +1 -1
  60. data/lib/glimmer/dsl/swt/widget_listener_expression.rb +1 -1
  61. data/lib/glimmer/launcher.rb +1 -1
  62. data/lib/glimmer/rake_task.rb +1 -1
  63. data/lib/glimmer/rake_task/list.rb +1 -1
  64. data/lib/glimmer/rake_task/package.rb +1 -1
  65. data/lib/glimmer/rake_task/scaffold.rb +1 -1
  66. data/lib/glimmer/swt/color_proxy.rb +1 -1
  67. data/lib/glimmer/swt/cursor_proxy.rb +1 -1
  68. data/lib/glimmer/swt/custom/checkbox_group.rb +1 -1
  69. data/lib/glimmer/swt/custom/radio_group.rb +1 -1
  70. data/lib/glimmer/swt/date_time_proxy.rb +1 -1
  71. data/lib/glimmer/swt/directory_dialog_proxy.rb +1 -1
  72. data/lib/glimmer/swt/display_proxy.rb +1 -1
  73. data/lib/glimmer/swt/dnd_proxy.rb +1 -1
  74. data/lib/glimmer/swt/expand_item_proxy.rb +1 -1
  75. data/lib/glimmer/swt/file_dialog_proxy.rb +1 -1
  76. data/lib/glimmer/swt/font_proxy.rb +1 -1
  77. data/lib/glimmer/swt/image_proxy.rb +12 -11
  78. data/lib/glimmer/swt/layout_data_proxy.rb +1 -1
  79. data/lib/glimmer/swt/layout_proxy.rb +8 -4
  80. data/lib/glimmer/swt/menu_proxy.rb +10 -6
  81. data/lib/glimmer/swt/message_box_proxy.rb +1 -1
  82. data/lib/glimmer/swt/packages.rb +1 -1
  83. data/lib/glimmer/swt/sash_form_proxy.rb +2 -2
  84. data/lib/glimmer/swt/scrolled_composite_proxy.rb +1 -1
  85. data/lib/glimmer/swt/shell_proxy.rb +1 -1
  86. data/lib/glimmer/swt/style_constantizable.rb +9 -5
  87. data/lib/glimmer/swt/styled_text_proxy.rb +1 -1
  88. data/lib/glimmer/swt/swt_proxy.rb +1 -1
  89. data/lib/glimmer/swt/tab_item_proxy.rb +1 -1
  90. data/lib/glimmer/swt/table_column_proxy.rb +1 -1
  91. data/lib/glimmer/swt/table_proxy.rb +1 -1
  92. data/lib/glimmer/swt/tree_proxy.rb +26 -22
  93. data/lib/glimmer/swt/widget_listener_proxy.rb +1 -1
  94. data/lib/glimmer/swt/widget_proxy.rb +70 -24
  95. data/lib/glimmer/ui/custom_shell.rb +1 -1
  96. data/lib/glimmer/ui/custom_widget.rb +1 -1
  97. data/lib/glimmer/util/proc_tracker.rb +1 -1
  98. data/samples/elaborate/contact_manager.rb +1 -1
  99. data/samples/elaborate/contact_manager/contact.rb +1 -1
  100. data/samples/elaborate/contact_manager/contact_manager_presenter.rb +1 -1
  101. data/samples/elaborate/contact_manager/contact_repository.rb +1 -1
  102. data/samples/elaborate/login.rb +11 -14
  103. data/samples/elaborate/meta_sample.rb +80 -20
  104. data/samples/elaborate/tic_tac_toe.rb +2 -2
  105. data/samples/elaborate/tic_tac_toe/board.rb +1 -1
  106. data/samples/elaborate/tic_tac_toe/cell.rb +1 -1
  107. data/samples/elaborate/user_profile.rb +1 -1
  108. data/samples/hello/hello_browser.rb +3 -1
  109. data/samples/hello/hello_button.rb +1 -1
  110. data/samples/hello/hello_checkbox.rb +1 -1
  111. data/samples/hello/hello_checkbox_group.rb +1 -1
  112. data/samples/hello/hello_combo.rb +1 -1
  113. data/samples/hello/hello_computed.rb +10 -4
  114. data/samples/hello/hello_computed/contact.rb +1 -1
  115. data/samples/hello/hello_custom_shell.rb +1 -1
  116. data/samples/hello/hello_custom_widget.rb +1 -1
  117. data/samples/hello/hello_date_time.rb +1 -1
  118. data/samples/hello/hello_dialog.rb +78 -0
  119. data/samples/hello/hello_directory_dialog.rb +1 -1
  120. data/samples/hello/hello_drag_and_drop.rb +1 -1
  121. data/samples/hello/hello_expand_bar.rb +1 -1
  122. data/samples/hello/hello_file_dialog.rb +1 -1
  123. data/samples/hello/hello_group.rb +1 -1
  124. data/samples/hello/hello_link.rb +80 -0
  125. data/samples/hello/hello_list_multi_selection.rb +23 -18
  126. data/samples/hello/hello_list_single_selection.rb +6 -6
  127. data/samples/hello/hello_menu_bar.rb +185 -29
  128. data/samples/hello/hello_message_box.rb +10 -9
  129. data/samples/hello/hello_pop_up_context_menu.rb +34 -7
  130. data/samples/hello/hello_radio.rb +1 -1
  131. data/samples/hello/hello_radio_group.rb +1 -1
  132. data/samples/hello/hello_sash_form.rb +1 -1
  133. data/samples/hello/hello_spinner.rb +1 -1
  134. data/samples/hello/hello_styled_text.rb +1 -1
  135. data/samples/hello/hello_tab.rb +1 -1
  136. data/samples/hello/hello_table.rb +1 -1
  137. data/samples/hello/hello_world.rb +1 -1
  138. data/vendor/swt/linux/swt.jar +0 -0
  139. data/vendor/swt/mac/swt.jar +0 -0
  140. data/vendor/swt/windows/swt.jar +0 -0
  141. metadata +60 -40
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
2
- #
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -59,7 +59,7 @@ module Glimmer
59
59
  observer.call(@swt_widget.getSelection)
60
60
  }
61
61
  end
62
- },
62
+ },
63
63
  })
64
64
  end
65
65
 
@@ -85,24 +85,28 @@ module Glimmer
85
85
  @edit_in_progress = false
86
86
  }
87
87
  action = lambda { |event|
88
- if !action_taken && !@edit_in_progress
89
- action_taken = true
90
- @edit_in_progress = true
91
- new_text = @tree_editor_text_proxy.swt_widget.getText
92
- if new_text == tree_item.getText
93
- cancel.call
94
- else
95
- before_write&.call
96
- tree_item.setText(new_text)
97
- model = tree_item.getData
98
- model.send("#{tree_properties[:text]}=", new_text) # makes tree update itself, so must search for selected tree item again
99
- edited_tree_item = depth_first_search { |ti| ti.getData == model }.first
100
- swt_widget.showItem(edited_tree_item)
101
- @tree_editor_text_proxy.swt_widget.dispose
102
- @tree_editor_text_proxy = nil
103
- after_write&.call(edited_tree_item)
104
- @edit_in_progress = false
88
+ begin
89
+ if !action_taken && !@edit_in_progress
90
+ action_taken = true
91
+ @edit_in_progress = true
92
+ new_text = @tree_editor_text_proxy.swt_widget.getText
93
+ if new_text == tree_item.getText
94
+ cancel.call
95
+ else
96
+ before_write&.call
97
+ tree_item.setText(new_text)
98
+ model = tree_item.getData
99
+ model.send("#{tree_properties[:text]}=", new_text) # makes tree update itself, so must search for selected tree item again
100
+ edited_tree_item = depth_first_search { |ti| ti.getData == model }.first
101
+ swt_widget.showItem(edited_tree_item)
102
+ @tree_editor_text_proxy.swt_widget.dispose
103
+ @tree_editor_text_proxy = nil
104
+ after_write&.call(edited_tree_item)
105
+ @edit_in_progress = false
106
+ end
105
107
  end
108
+ rescue => e
109
+ Glimmer::Config.logger.error {"Error encountered while editing tree item!\n#{e.full_message}"}
106
110
  end
107
111
  }
108
112
  on_focus_lost(&action)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -69,7 +69,7 @@ module Glimmer
69
69
  }
70
70
 
71
71
  DEFAULT_INITIALIZERS = {
72
- 'composite' => lambda do |composite|
72
+ composite: lambda do |composite|
73
73
  if composite.get_layout.nil?
74
74
  layout = GridLayout.new
75
75
  layout.marginWidth = 15
@@ -77,18 +77,18 @@ module Glimmer
77
77
  composite.layout = layout
78
78
  end
79
79
  end,
80
- 'scrolled_composite' => lambda do |scrolled_composite|
80
+ scrolled_composite: lambda do |scrolled_composite|
81
81
  scrolled_composite.expand_horizontal = true
82
82
  scrolled_composite.expand_vertical = true
83
83
  end,
84
- 'table' => lambda do |table|
84
+ table: lambda do |table|
85
85
  table.setHeaderVisible(true)
86
86
  table.setLinesVisible(true)
87
87
  end,
88
- 'table_column' => lambda do |table_column|
88
+ table_column: lambda do |table_column|
89
89
  table_column.setWidth(80)
90
90
  end,
91
- 'group' => lambda do |group|
91
+ group: lambda do |group|
92
92
  group.layout = GridLayout.new if group.get_layout.nil?
93
93
  end,
94
94
  }
@@ -160,7 +160,7 @@ module Glimmer
160
160
  end
161
161
  if @swt_widget&.get_data('proxy').nil?
162
162
  @swt_widget.set_data('proxy', self)
163
- DEFAULT_INITIALIZERS[underscored_widget_name]&.call(@swt_widget)
163
+ DEFAULT_INITIALIZERS[underscored_widget_name.to_s.to_sym]&.call(@swt_widget)
164
164
  @parent_proxy.post_initialize_child(self)
165
165
  end
166
166
  end
@@ -202,7 +202,22 @@ module Glimmer
202
202
  end
203
203
  end
204
204
 
205
+ def has_attribute_getter?(attribute_getter_name, *args)
206
+ attribute_getter_name = attribute_getter_name.to_s.underscore
207
+ return false unless !attribute_getter_name.end_with?('=') && !attribute_getter_name.start_with?('set_')
208
+ args.empty? && swt_widget.respond_to?(attribute_getter_name)
209
+ end
210
+
211
+ def has_attribute_setter?(attribute_setter_name, *args)
212
+ attribute_setter_name = attribute_setter_name.to_s
213
+ underscored_attribute_setter_name = attribute_setter_name.underscore
214
+ return false unless attribute_setter_name.end_with?('=') || (attribute_setter_name.start_with?('set_') && !args.empty?)
215
+ attribute_name = underscored_attribute_setter_name.sub(/^set_/, '').sub(/=$/, '')
216
+ has_attribute?(attribute_name, *args)
217
+ end
218
+
205
219
  def has_attribute?(attribute_name, *args)
220
+ # TODO test that attribute getter responds too
206
221
  widget_custom_attribute = widget_custom_attribute_mapping[attribute_name.to_s]
207
222
  if widget_custom_attribute
208
223
  @swt_widget.respond_to?(widget_custom_attribute[:setter][:name])
@@ -212,12 +227,15 @@ module Glimmer
212
227
  end
213
228
 
214
229
  def set_attribute(attribute_name, *args)
230
+ # TODO Think about widget subclasses overriding set_attribute to add more attributes vs adding as Ruby attributes directly
215
231
  widget_custom_attribute = widget_custom_attribute_mapping[attribute_name.to_s]
232
+ apply_property_type_converters(normalized_attribute(attribute_name), args)
216
233
  if widget_custom_attribute
217
234
  widget_custom_attribute[:setter][:invoker].call(@swt_widget, args)
218
235
  elsif @swt_widget.respond_to?(attribute_setter(attribute_name))
219
- apply_property_type_converters(attribute_name, args)
220
236
  @swt_widget.send(attribute_setter(attribute_name), *args) unless @swt_widget.send(attribute_getter(attribute_name)) == args.first
237
+ elsif @swt_widget.respond_to?(ruby_attribute_setter(attribute_name))
238
+ @swt_widget.send(ruby_attribute_setter(attribute_name), args)
221
239
  else
222
240
  send(ruby_attribute_setter(attribute_name), args)
223
241
  end
@@ -233,6 +251,12 @@ module Glimmer
233
251
  end
234
252
  elsif @swt_widget.respond_to?(attribute_getter(attribute_name))
235
253
  @swt_widget.send(attribute_getter(attribute_name))
254
+ elsif @swt_widget.respond_to?(ruby_attribute_getter(attribute_name))
255
+ @swt_widget.send(ruby_attribute_getter(attribute_name))
256
+ elsif @swt_widget.respond_to?(attribute_name)
257
+ @swt_widget.send(attribute_name)
258
+ elsif respond_to?(ruby_attribute_getter(attribute_name))
259
+ send(ruby_attribute_getter(attribute_name))
236
260
  else
237
261
  send(attribute_name)
238
262
  end
@@ -607,11 +631,16 @@ module Glimmer
607
631
  def method_missing(method, *args, &block)
608
632
  if can_handle_observation_request?(method)
609
633
  handle_observation_request(method, &block)
634
+ elsif has_attribute_setter?(method, *args)
635
+ set_attribute(method, *args)
636
+ elsif has_attribute_getter?(method, *args)
637
+ get_attribute(method, *args)
610
638
  else
611
639
  swt_widget.send(method, *args, &block)
612
640
  end
613
641
  rescue => e
614
- Glimmer::Config.logger.debug {"Neither WidgetProxy nor #{swt_widget.class.name} can handle the method ##{method}"}
642
+ Glimmer::Config.logger.debug { "Neither WidgetProxy nor #{swt_widget.class.name} can handle the method ##{method}" }
643
+ Glimmer::Config.logger.debug { e.full_message }
615
644
  super
616
645
  # TODO consider get_attribute too
617
646
  end
@@ -639,16 +668,26 @@ module Glimmer
639
668
  end
640
669
 
641
670
  def ruby_attribute_setter(attribute_name)
642
- "#{attribute_name}="
671
+ "#{normalized_attribute(attribute_name)}="
643
672
  end
644
673
 
645
674
  def attribute_setter(attribute_name)
646
- "set#{attribute_name.to_s.camelcase(:upper)}"
675
+ "set#{normalized_attribute(attribute_name).camelcase(:upper)}"
647
676
  end
648
677
 
649
678
  def attribute_getter(attribute_name)
650
- "get#{attribute_name.to_s.camelcase(:upper)}"
679
+ "get#{normalized_attribute(attribute_name).camelcase(:upper)}"
651
680
  end
681
+
682
+ def normalized_attribute(attribute_name)
683
+ attribute_name = attribute_name.to_s if attribute_name.is_a?(Symbol)
684
+ attribute_name = attribute_name.underscore unless attribute_name.downcase?
685
+ attribute_name = attribute_name.sub(/^get_/, '') if attribute_name.start_with?('get_')
686
+ attribute_name = attribute_name.sub(/^set_/, '') if attribute_name.start_with?('set_')
687
+ attribute_name = attribute_name.sub(/=$/, '') if attribute_name.end_with?('=')
688
+ attribute_name
689
+ end
690
+ alias ruby_attribute_getter normalized_attribute
652
691
 
653
692
  # TODO refactor following methods to eliminate duplication
654
693
  # perhaps consider relying on raising an exception to avoid checking first
@@ -799,11 +838,14 @@ module Glimmer
799
838
  end
800
839
  # TODO consider detecting type on widget method and automatically invoking right converter (e.g. :to_s for String, :to_i for Integer)
801
840
  @property_type_converters ||= {
802
- alignment: -> (*value) {
841
+ accelerator: lambda { |*value|
842
+ SWTProxy[*value]
843
+ },
844
+ alignment: lambda { |*value|
803
845
  SWTProxy[*value]
804
846
  },
805
- :background => color_converter,
806
- :background_image => lambda do |*value|
847
+ background: color_converter,
848
+ background_image: lambda do |*value|
807
849
  image_proxy = ImageProxy.create(*value)
808
850
 
809
851
  if image_proxy&.file_path&.end_with?('.gif')
@@ -844,7 +886,7 @@ module Glimmer
844
886
 
845
887
  image_proxy&.swt_image
846
888
  end,
847
- :cursor => lambda do |value|
889
+ cursor: lambda do |value|
848
890
  cursor_proxy = nil
849
891
  if value.is_a?(CursorProxy)
850
892
  cursor_proxy = value
@@ -856,8 +898,9 @@ module Glimmer
856
898
  :enabled => lambda do |value|
857
899
  !!value
858
900
  end,
859
- :foreground => color_converter,
860
- :font => lambda do |value|
901
+ foreground: color_converter,
902
+ link_foreground: color_converter,
903
+ font: lambda do |value|
861
904
  if value.is_a?(Hash)
862
905
  font_properties = value
863
906
  FontProxy.new(self, font_properties).swt_font
@@ -865,21 +908,21 @@ module Glimmer
865
908
  value
866
909
  end
867
910
  end,
868
- :image => lambda do |*value|
911
+ image: lambda do |*value|
869
912
  ImageProxy.create(*value).swt_image
870
913
  end,
871
- :images => lambda do |array|
914
+ images: lambda do |array|
872
915
  array.to_a.map do |value|
873
916
  ImageProxy.create(value).swt_image
874
917
  end.to_java(Image)
875
918
  end,
876
- :items => lambda do |value|
919
+ items: lambda do |value|
877
920
  value.to_java :string
878
921
  end,
879
- :text => lambda do |value|
922
+ text: lambda do |value|
880
923
  value.to_s
881
924
  end,
882
- :transfer => lambda do |value|
925
+ transfer: lambda do |value|
883
926
  value = value.first if value.is_a?(Array) && value.size == 1 && value.first.is_a?(Array)
884
927
  transfer_object_extrapolator = lambda do |transfer_name|
885
928
  transfer_type = "#{transfer_name.to_s.camelcase(:upper)}Transfer".to_sym
@@ -898,9 +941,12 @@ module Glimmer
898
941
  result = result.to_java(Transfer) unless result.is_a?(ArrayJavaProxy)
899
942
  result
900
943
  end,
901
- :visible => lambda do |value|
944
+ visible: lambda do |value|
902
945
  !!value
903
946
  end,
947
+ weights: lambda do |value|
948
+ value.to_java(:int)
949
+ end,
904
950
  }
905
951
  end
906
952
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
- # Copyright (c) 2007-2020 Andy Maleh
2
- #
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining
4
4
  # a copy of this software and associated documentation files (the
5
5
  # "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@
7
7
  # distribute, sublicense, and/or sell copies of the Software, and to
8
8
  # permit persons to whom the Software is furnished to do so, subject to
9
9
  # the following conditions:
10
- #
10
+ #
11
11
  # The above copyright notice and this permission notice shall be
12
12
  # included in all copies or substantial portions of the Software.
13
- #
13
+ #
14
14
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -19,7 +19,6 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
- #Presents login screen data
23
22
  class LoginPresenter
24
23
 
25
24
  attr_accessor :user_name
@@ -35,7 +34,6 @@ class LoginPresenter
35
34
  def status=(status)
36
35
  @status = status
37
36
 
38
- #TODO add feature to bind dependent properties to master property (2017-07-25 nested data binding)
39
37
  notify_observers("logged_in")
40
38
  notify_observers("logged_out")
41
39
  end
@@ -65,7 +63,6 @@ class LoginPresenter
65
63
 
66
64
  end
67
65
 
68
- #Login screen
69
66
  class Login
70
67
  include Glimmer
71
68
 
@@ -77,10 +74,10 @@ class Login
77
74
  grid_layout 2, false #two columns with differing widths
78
75
 
79
76
  label { text "Username:" } # goes in column 1
80
- @user_name_text = text { # goes in column 2
77
+ @user_name_text = text { # goes in column 2
81
78
  text bind(presenter, :user_name)
82
79
  enabled bind(presenter, :logged_out)
83
- on_key_pressed { |event|
80
+ on_key_pressed { |event|
84
81
  @password_text.set_focus if event.keyCode == swt(:cr)
85
82
  }
86
83
  }
@@ -89,7 +86,7 @@ class Login
89
86
  @password_text = text(:password, :border) {
90
87
  text bind(presenter, :password)
91
88
  enabled bind(presenter, :logged_out)
92
- on_key_pressed { |event|
89
+ on_key_pressed { |event|
93
90
  presenter.login if event.keyCode == swt(:cr)
94
91
  }
95
92
  }
@@ -101,21 +98,21 @@ class Login
101
98
  text "Login"
102
99
  enabled bind(presenter, :logged_out)
103
100
  on_widget_selected { presenter.login }
104
- on_key_pressed { |event|
101
+ on_key_pressed { |event|
105
102
  presenter.login if event.keyCode == swt(:cr)
106
- }
103
+ }
107
104
  }
108
105
 
109
106
  button {
110
107
  text "Logout"
111
108
  enabled bind(presenter, :logged_in)
112
109
  on_widget_selected { presenter.logout }
113
- on_key_pressed { |event|
110
+ on_key_pressed { |event|
114
111
  if event.keyCode == swt(:cr)
115
112
  presenter.logout
116
113
  @user_name_text.set_focus
117
114
  end
118
- }
115
+ }
119
116
  }
120
117
  }
121
118
  }