glimmer-dsl-swt 4.20.13.8 → 4.20.13.12

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/README.md +5 -5
  4. data/VERSION +1 -1
  5. data/docs/reference/GLIMMER_SAMPLES.md +24 -0
  6. data/docs/reference/GLIMMER_STYLE_GUIDE.md +2 -1
  7. data/glimmer-dsl-swt.gemspec +0 -0
  8. data/lib/glimmer/rake_task/scaffold.rb +14 -14
  9. data/lib/glimmer/swt/custom/code_text.rb +4 -4
  10. data/lib/glimmer/swt/custom/shape.rb +1 -1
  11. data/samples/elaborate/calculator.rb +2 -2
  12. data/samples/elaborate/contact_manager.rb +2 -2
  13. data/samples/elaborate/game_of_life.rb +111 -0
  14. data/samples/elaborate/game_of_life/model/cell.rb +72 -0
  15. data/samples/elaborate/game_of_life/model/grid.rb +97 -0
  16. data/samples/elaborate/klondike_solitaire.rb +30 -23
  17. data/samples/elaborate/klondike_solitaire/model/playing_card.rb +36 -0
  18. data/samples/elaborate/klondike_solitaire/view/empty_playing_card.rb +12 -4
  19. data/samples/elaborate/klondike_solitaire/view/foundation_pile.rb +4 -4
  20. data/samples/elaborate/klondike_solitaire/view/hidden_playing_card.rb +8 -1
  21. data/samples/elaborate/klondike_solitaire/view/playing_card.rb +3 -3
  22. data/samples/elaborate/klondike_solitaire/view/tableau.rb +4 -4
  23. data/samples/elaborate/login.rb +2 -2
  24. data/samples/elaborate/mandelbrot_fractal.rb +12 -12
  25. data/samples/elaborate/meta_sample.rb +2 -2
  26. data/samples/elaborate/metronome.rb +2 -2
  27. data/samples/elaborate/stock_ticker.rb +8 -8
  28. data/samples/elaborate/tetris.rb +4 -4
  29. data/samples/elaborate/tetris/view/bevel.rb +2 -2
  30. data/samples/elaborate/tetris/view/score_lane.rb +2 -2
  31. data/samples/elaborate/tic_tac_toe.rb +6 -6
  32. data/samples/elaborate/timer.rb +4 -4
  33. data/samples/elaborate/weather.rb +4 -4
  34. data/samples/hello/hello_button.rb +2 -2
  35. data/samples/hello/hello_c_combo.rb +2 -2
  36. data/samples/hello/hello_canvas.rb +4 -4
  37. data/samples/hello/hello_canvas_animation.rb +2 -2
  38. data/samples/hello/hello_canvas_data_binding.rb +2 -2
  39. data/samples/hello/hello_checkbox.rb +2 -2
  40. data/samples/hello/hello_checkbox_group.rb +2 -2
  41. data/samples/hello/hello_code_text.rb +2 -2
  42. data/samples/hello/hello_color_dialog.rb +2 -2
  43. data/samples/hello/hello_combo.rb +2 -2
  44. data/samples/hello/hello_computed.rb +14 -22
  45. data/samples/hello/hello_cool_bar.rb +2 -2
  46. data/samples/hello/hello_cursor.rb +2 -2
  47. data/samples/hello/hello_custom_shape.rb +2 -2
  48. data/samples/hello/hello_custom_shell.rb +2 -2
  49. data/samples/hello/hello_custom_widget.rb +4 -4
  50. data/samples/hello/hello_date_time.rb +2 -2
  51. data/samples/hello/hello_directory_dialog.rb +2 -2
  52. data/samples/hello/hello_file_dialog.rb +2 -2
  53. data/samples/hello/hello_font_dialog.rb +2 -2
  54. data/samples/hello/hello_group.rb +2 -2
  55. data/samples/hello/hello_list_multi_selection.rb +2 -2
  56. data/samples/hello/hello_list_single_selection.rb +2 -2
  57. data/samples/hello/hello_progress_bar.rb +2 -2
  58. data/samples/hello/hello_radio.rb +2 -2
  59. data/samples/hello/hello_radio_group.rb +2 -2
  60. data/samples/hello/hello_scale.rb +2 -2
  61. data/samples/hello/hello_spinner.rb +2 -2
  62. data/samples/hello/hello_table.rb +2 -2
  63. data/samples/hello/hello_text.rb +2 -2
  64. data/samples/hello/hello_tool_bar.rb +2 -2
  65. data/samples/hello/hello_tray_item.rb +2 -2
  66. data/samples/hello/hello_tree.rb +4 -4
  67. metadata +5 -2
@@ -43,7 +43,7 @@ class Tetris
43
43
 
44
44
  attr_reader :game
45
45
 
46
- before_body {
46
+ before_body do
47
47
  @mutex = Mutex.new
48
48
  @game = Model::Game.new(playfield_width, playfield_height)
49
49
 
@@ -99,9 +99,9 @@ class Tetris
99
99
  exit(0)
100
100
  }
101
101
  }
102
- }
102
+ end
103
103
 
104
- after_body {
104
+ after_body do
105
105
  observe(@game, :game_over) do |game_over|
106
106
  if game_over
107
107
  show_high_score_dialog
@@ -117,7 +117,7 @@ class Tetris
117
117
  end
118
118
  end
119
119
  @game.start!
120
- }
120
+ end
121
121
 
122
122
  body {
123
123
  shell(:no_resize) {
@@ -29,9 +29,9 @@ class Tetris
29
29
  option :x, default: 0
30
30
  option :y, default: 0
31
31
 
32
- before_body {
32
+ before_body do
33
33
  self.bevel_pixel_size = 0.16*size.to_f if bevel_pixel_size.nil?
34
- }
34
+ end
35
35
 
36
36
  body {
37
37
  rectangle(x, y, size, size) {
@@ -29,10 +29,10 @@ class Tetris
29
29
 
30
30
  options :block_size, :game
31
31
 
32
- before_body {
32
+ before_body do
33
33
  @font_name = FONT_NAME
34
34
  @font_height = FONT_TITLE_HEIGHT
35
- }
35
+ end
36
36
 
37
37
  body {
38
38
  composite {
@@ -26,16 +26,16 @@ require_relative "tic_tac_toe/board"
26
26
  class TicTacToe
27
27
  include Glimmer::UI::CustomShell
28
28
 
29
- before_body {
29
+ before_body do
30
30
  @tic_tac_toe_board = Board.new
31
- }
31
+ end
32
32
 
33
- after_body {
34
- observe(@tic_tac_toe_board, :game_status) { |game_status|
33
+ after_body do
34
+ observe(@tic_tac_toe_board, :game_status) do |game_status|
35
35
  display_win_message if game_status == Board::WIN
36
36
  display_draw_message if game_status == Board::DRAW
37
- }
38
- }
37
+ end
38
+ end
39
39
 
40
40
  body {
41
41
  shell {
@@ -20,7 +20,7 @@ class Timer
20
20
  ## Use before_body block to pre-initialize variables to use in body
21
21
  #
22
22
  #
23
- before_body {
23
+ before_body do
24
24
  Display.setAppName('Glimmer Timer')
25
25
 
26
26
  @display = display {
@@ -34,11 +34,11 @@ class Timer
34
34
 
35
35
  @min = 0
36
36
  @sec = 0
37
- }
37
+ end
38
38
 
39
39
  ## Use after_body block to setup observers for widgets in body
40
40
  #
41
- after_body {
41
+ after_body do
42
42
  Thread.new {
43
43
  loop {
44
44
  sleep(1)
@@ -56,7 +56,7 @@ class Timer
56
56
  end
57
57
  }
58
58
  }
59
- }
59
+ end
60
60
 
61
61
  ## Add widget content inside custom shell body
62
62
  ## Top-most widget must be a shell or another custom shell
@@ -33,13 +33,13 @@ class Weather
33
33
 
34
34
  attr_accessor :city, :temp, :temp_min, :temp_max, :feels_like, :humidity
35
35
 
36
- before_body {
36
+ before_body do
37
37
  @weather_mutex = Mutex.new
38
38
  self.city = 'Montreal, QC, CA'
39
39
  fetch_weather!
40
- }
40
+ end
41
41
 
42
- after_body {
42
+ after_body do
43
43
  Thread.new do
44
44
  loop do
45
45
  sleep(10)
@@ -47,7 +47,7 @@ class Weather
47
47
  fetch_weather!
48
48
  end
49
49
  end
50
- }
50
+ end
51
51
 
52
52
  body {
53
53
  shell(:no_resize) {
@@ -26,9 +26,9 @@ class HelloButton
26
26
 
27
27
  attr_accessor :count
28
28
 
29
- before_body {
29
+ before_body do
30
30
  @count = 0
31
- }
31
+ end
32
32
 
33
33
  body {
34
34
  shell {
@@ -38,9 +38,9 @@ class HelloCCombo
38
38
 
39
39
  include Glimmer::UI::CustomShell
40
40
 
41
- before_body {
41
+ before_body do
42
42
  @person = Person.new
43
- }
43
+ end
44
44
 
45
45
  body {
46
46
  shell {
@@ -27,19 +27,19 @@ class HelloCanvas
27
27
  attr_accessor :selected_shape
28
28
  attr_accessor :artist
29
29
 
30
- before_body {
30
+ before_body do
31
31
  @image_object = image(File.expand_path('../../icons/scaffold_app.png', __dir__), width: 50)
32
32
  @artist = ''
33
- }
33
+ end
34
34
 
35
- after_body {
35
+ after_body do
36
36
  Thread.new {
37
37
  'Picasso'.chars.each do |character|
38
38
  sleep(1)
39
39
  self.artist += character
40
40
  end
41
41
  }
42
- }
42
+ end
43
43
 
44
44
  body {
45
45
  shell {
@@ -27,14 +27,14 @@ class HelloCanvasAnimation
27
27
 
28
28
  attr_accessor :animation_every, :animation_fps, :animation_frame_count, :animation_duration_limit, :animation_started, :animation_finished
29
29
 
30
- before_body {
30
+ before_body do
31
31
  @animation_every = 0.050 # seconds
32
32
  @animation_fps = 0
33
33
  @animation_frame_count = 100
34
34
  @animation_duration_limit = 0 # seconds
35
35
  @animation_started = true
36
36
  @animation_finished = false
37
- }
37
+ end
38
38
 
39
39
  body {
40
40
  shell {
@@ -37,7 +37,7 @@ class HelloCanvasDataBinding
37
37
  [:solid, :dash, :dot, :dashdot, :dashdotdot]
38
38
  end
39
39
 
40
- before_body {
40
+ before_body do
41
41
  self.x1_value = 0
42
42
  self.y1_value = 0
43
43
  self.x2_value = CANVAS_WIDTH
@@ -47,7 +47,7 @@ class HelloCanvasDataBinding
47
47
  self.foreground_blue = 228
48
48
  self.line_width_value = 3
49
49
  self.line_style_value = :dot
50
- }
50
+ end
51
51
 
52
52
  body {
53
53
  shell {
@@ -39,9 +39,9 @@ class HelloCheckbox
39
39
 
40
40
  include Glimmer::UI::CustomShell
41
41
 
42
- before_body {
42
+ before_body do
43
43
  @person = Person.new
44
- }
44
+ end
45
45
 
46
46
  body {
47
47
  shell {
@@ -43,9 +43,9 @@ class HelloCheckboxGroup
43
43
 
44
44
  include Glimmer::UI::CustomShell
45
45
 
46
- before_body {
46
+ before_body do
47
47
  @person = Person.new
48
- }
48
+ end
49
49
 
50
50
  body {
51
51
  shell {
@@ -26,7 +26,7 @@ class HelloCodeText
26
26
 
27
27
  attr_accessor :ruby_code, :js_code, :html_code
28
28
 
29
- before_body {
29
+ before_body do
30
30
  self.ruby_code = <<~RUBY
31
31
  greeting = 'Hello, World!'
32
32
 
@@ -73,7 +73,7 @@ class HelloCodeText
73
73
  </body>
74
74
  </html>
75
75
  HTML
76
- }
76
+ end
77
77
 
78
78
  body {
79
79
  shell {
@@ -26,9 +26,9 @@ class HelloColorDialog
26
26
 
27
27
  attr_accessor :selected_color
28
28
 
29
- before_body {
29
+ before_body do
30
30
  self.selected_color = :black
31
- }
31
+ end
32
32
 
33
33
  body {
34
34
  shell {
@@ -37,9 +37,9 @@ class HelloCombo
37
37
 
38
38
  include Glimmer::UI::CustomShell
39
39
 
40
- before_body {
40
+ before_body do
41
41
  @person = Person.new
42
- }
42
+ end
43
43
 
44
44
  body {
45
45
  shell {
@@ -44,13 +44,13 @@ class HelloComputed
44
44
 
45
45
  include Glimmer::UI::CustomShell
46
46
 
47
- before_body {
47
+ before_body do
48
48
  @contact = Contact.new(
49
49
  first_name: 'Barry',
50
50
  last_name: 'McKibbin',
51
51
  year_of_birth: 1985
52
52
  )
53
- }
53
+ end
54
54
 
55
55
  body {
56
56
  shell {
@@ -66,51 +66,43 @@ class HelloComputed
66
66
 
67
67
  label {text 'First &Name: '}
68
68
  text {
69
+ fill_horizontally_layout_data
69
70
  text <=> [@contact, :first_name]
70
- layout_data {
71
- horizontal_alignment :fill
72
- grab_excess_horizontal_space true
73
- }
74
71
  }
75
72
 
76
73
  label {text '&Last Name: '}
77
74
  text {
75
+ fill_horizontally_layout_data
78
76
  text <=> [@contact, :last_name]
79
- layout_data {
80
- horizontal_alignment :fill
81
- grab_excess_horizontal_space true
82
- }
83
77
  }
84
78
 
85
79
  label {text '&Year of Birth: '}
86
80
  text {
81
+ fill_horizontally_layout_data
87
82
  text <=> [@contact, :year_of_birth]
88
- layout_data {
89
- horizontal_alignment :fill
90
- grab_excess_horizontal_space true
91
- }
92
83
  }
93
84
 
94
85
  label {text 'Name: '}
95
86
  label {
87
+ fill_horizontally_layout_data
96
88
  text <= [@contact, :name, computed_by: [:first_name, :last_name]]
97
- layout_data {
98
- horizontal_alignment :fill
99
- grab_excess_horizontal_space true
100
- }
101
89
  }
102
90
 
103
91
  label {text 'Age: '}
104
92
  label {
93
+ fill_horizontally_layout_data
105
94
  text <= [@contact, :age, on_write: :to_i, computed_by: [:year_of_birth]]
106
- layout_data {
107
- horizontal_alignment :fill
108
- grab_excess_horizontal_space true
109
- }
110
95
  }
111
96
  }
112
97
  }
113
98
  }
99
+
100
+ def fill_horizontally_layout_data
101
+ layout_data {
102
+ horizontal_alignment :fill
103
+ grab_excess_horizontal_space true
104
+ }
105
+ end
114
106
  end
115
107
 
116
108
  HelloComputed.launch
@@ -30,9 +30,9 @@ class HelloCoolBar
30
30
  (10..30).to_a.map(&:to_s)
31
31
  end
32
32
 
33
- before_body {
33
+ before_body do
34
34
  self.font_size = '30'
35
- }
35
+ end
36
36
 
37
37
  body {
38
38
  shell {
@@ -31,11 +31,11 @@ class HelloCursor
31
31
  Glimmer::SWT::SWTProxy.cursor_options
32
32
  end
33
33
 
34
- after_body {
34
+ after_body do
35
35
  observe(self, :selected_cursor) {
36
36
  body_root.cursor = selected_cursor
37
37
  }
38
- }
38
+ end
39
39
 
40
40
  body {
41
41
  shell {
@@ -27,12 +27,12 @@ class StickFigure
27
27
 
28
28
  options :x, :y, :width, :height
29
29
 
30
- before_body {
30
+ before_body do
31
31
  @head_width = width*0.2
32
32
  @head_height = height*0.2
33
33
  @trunk_height = height*0.4
34
34
  @extremity_length = height*0.4
35
- }
35
+ end
36
36
 
37
37
  body {
38
38
  shape(x + @head_width/2.0 + @extremity_length, y) {
@@ -34,9 +34,9 @@ class EmailShell
34
34
  # single option with default value
35
35
  option :to, default: '"John Irwin" <john.irwin@example.com>'
36
36
 
37
- before_body {
37
+ before_body do
38
38
  @swt_style |= swt(:shell_trim, :modeless)
39
- }
39
+ end
40
40
 
41
41
  body {
42
42
  # pass received swt_style through to shell to customize it (e.g. :dialog_trim for a blocking shell)
@@ -34,12 +34,12 @@ class GreetingLabel
34
34
  # internal attribute (not a custom widget option)
35
35
  attr_accessor :color
36
36
 
37
- before_body {
37
+ before_body do
38
38
  @font = {height: 24, style: :bold}
39
39
  @color = :black
40
- }
40
+ end
41
41
 
42
- after_body {
42
+ after_body do
43
43
  return if colors.nil?
44
44
 
45
45
  Thread.new {
@@ -48,7 +48,7 @@ class GreetingLabel
48
48
  sleep(1)
49
49
  }
50
50
  }
51
- }
51
+ end
52
52
 
53
53
  body {
54
54
  # pass received swt_style through to label to customize (e.g. :center to center text)