glimmer-dsl-libui 0.1.5 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -0
  3. data/README.md +352 -67
  4. data/VERSION +1 -1
  5. data/examples/area_gallery.rb +50 -2
  6. data/examples/area_gallery2.rb +50 -2
  7. data/examples/area_gallery3.rb +50 -2
  8. data/examples/area_gallery4.rb +50 -2
  9. data/examples/basic_button.rb +2 -2
  10. data/examples/basic_entry.rb +2 -2
  11. data/examples/basic_transform.rb +1 -1
  12. data/examples/control_gallery.rb +3 -3
  13. data/examples/form.rb +2 -2
  14. data/examples/histogram.rb +18 -19
  15. data/examples/meta_example.rb +71 -20
  16. data/examples/midi_player.rb +8 -10
  17. data/glimmer-dsl-libui.gemspec +0 -0
  18. data/lib/glimmer/dsl/libui/control_expression.rb +0 -2
  19. data/lib/glimmer/dsl/libui/file_expression.rb +5 -1
  20. data/lib/glimmer/dsl/libui/shape_expression.rb +2 -4
  21. data/lib/glimmer/dsl/libui/tab_item_expression.rb +2 -2
  22. data/lib/glimmer/libui/control_proxy/area_proxy.rb +197 -0
  23. data/lib/glimmer/libui/{menu_item_proxy.rb → control_proxy/box/horizontal_box_proxy.rb} +9 -12
  24. data/lib/glimmer/libui/{horizontal_box_proxy.rb → control_proxy/box/vertical_box_proxy.rb} +10 -6
  25. data/lib/glimmer/libui/{box.rb → control_proxy/box.rb} +31 -27
  26. data/lib/glimmer/libui/{button_proxy.rb → control_proxy/button_proxy.rb} +14 -12
  27. data/lib/glimmer/libui/{checkbox_proxy.rb → control_proxy/checkbox_proxy.rb} +14 -12
  28. data/lib/glimmer/libui/control_proxy/color_button_proxy.rb +118 -0
  29. data/lib/glimmer/libui/control_proxy/column/button_column_proxy.rb +76 -0
  30. data/lib/glimmer/libui/control_proxy/column/checkbox_column_proxy.rb +46 -0
  31. data/lib/glimmer/libui/control_proxy/column/checkbox_text_column_proxy.rb +80 -0
  32. data/lib/glimmer/libui/{radio_buttons_proxy.rb → control_proxy/column/image_column_proxy.rb} +14 -13
  33. data/lib/glimmer/libui/control_proxy/column/image_text_column_proxy.rb +48 -0
  34. data/lib/glimmer/libui/control_proxy/column/progress_bar_column_proxy.rb +44 -0
  35. data/lib/glimmer/libui/{checkbox_column_proxy.rb → control_proxy/column/text_column_proxy.rb} +17 -13
  36. data/lib/glimmer/libui/control_proxy/column.rb +55 -0
  37. data/lib/glimmer/libui/control_proxy/combobox_proxy.rb +45 -0
  38. data/lib/glimmer/libui/control_proxy/date_time_picker_proxy/date_picker_proxy.rb +43 -0
  39. data/lib/glimmer/libui/control_proxy/date_time_picker_proxy/time_picker_proxy.rb +43 -0
  40. data/lib/glimmer/libui/control_proxy/date_time_picker_proxy.rb +72 -0
  41. data/lib/glimmer/libui/control_proxy/dual_column.rb +40 -0
  42. data/lib/glimmer/libui/control_proxy/editable_column.rb +46 -0
  43. data/lib/glimmer/libui/control_proxy/editable_combobox_proxy.rb +45 -0
  44. data/lib/glimmer/libui/{dual_column.rb → control_proxy/enableable_column.rb} +18 -10
  45. data/lib/glimmer/libui/control_proxy/font_button_proxy.rb +70 -0
  46. data/lib/glimmer/libui/{form_proxy.rb → control_proxy/form_proxy.rb} +26 -24
  47. data/lib/glimmer/libui/{grid_proxy.rb → control_proxy/grid_proxy.rb} +29 -27
  48. data/lib/glimmer/libui/{group_proxy.rb → control_proxy/group_proxy.rb} +24 -22
  49. data/lib/glimmer/libui/{image_part_proxy.rb → control_proxy/image_part_proxy.rb} +20 -18
  50. data/lib/glimmer/libui/{image_proxy.rb → control_proxy/image_proxy.rb} +32 -30
  51. data/lib/glimmer/libui/{combobox_proxy.rb → control_proxy/label_proxy.rb} +13 -13
  52. data/lib/glimmer/libui/control_proxy/matrix_proxy.rb +147 -0
  53. data/lib/glimmer/libui/{editable_column.rb → control_proxy/menu_item_proxy/about_menu_item_proxy.rb} +13 -16
  54. data/lib/glimmer/libui/{enableable_column.rb → control_proxy/menu_item_proxy/check_menu_item_proxy.rb} +13 -16
  55. data/lib/glimmer/libui/{date_picker_proxy.rb → control_proxy/menu_item_proxy/preferences_menu_item_proxy.rb} +10 -10
  56. data/lib/glimmer/libui/{quit_menu_item_proxy.rb → control_proxy/menu_item_proxy/quit_menu_item_proxy.rb} +33 -29
  57. data/lib/glimmer/libui/control_proxy/menu_item_proxy/separator_menu_item_proxy.rb +41 -0
  58. data/lib/glimmer/libui/control_proxy/menu_item_proxy.rb +45 -0
  59. data/lib/glimmer/libui/{editable_combobox_proxy.rb → control_proxy/menu_proxy.rb} +13 -13
  60. data/lib/glimmer/libui/{vertical_box_proxy.rb → control_proxy/message_box/msg_box_error_proxy.rb} +9 -6
  61. data/lib/glimmer/libui/{multiline_entry_proxy.rb → control_proxy/message_box/msg_box_proxy.rb} +8 -6
  62. data/lib/glimmer/libui/{time_picker_proxy.rb → control_proxy/message_box.rb} +9 -10
  63. data/lib/glimmer/libui/{rectangle.rb → control_proxy/multiline_entry_proxy/non_wrapping_multiline_entry_proxy.rb} +6 -8
  64. data/lib/glimmer/libui/{progress_bar_column_proxy.rb → control_proxy/multiline_entry_proxy.rb} +10 -11
  65. data/lib/glimmer/libui/control_proxy/path_proxy.rb +190 -0
  66. data/lib/glimmer/libui/control_proxy/radio_buttons_proxy.rb +45 -0
  67. data/lib/glimmer/libui/{button_column_proxy.rb → control_proxy/tab_item_proxy.rb} +37 -40
  68. data/lib/glimmer/libui/control_proxy/table_proxy.rb +182 -0
  69. data/lib/glimmer/libui/{transformable.rb → control_proxy/transformable.rb} +3 -1
  70. data/lib/glimmer/libui/control_proxy/window_proxy.rb +128 -0
  71. data/lib/glimmer/libui/control_proxy.rb +68 -9
  72. data/lib/glimmer/libui/{arc.rb → shape/arc.rb} +13 -11
  73. data/lib/glimmer/libui/shape/bezier.rb +38 -0
  74. data/lib/glimmer/libui/{figure.rb → shape/figure.rb} +23 -21
  75. data/lib/glimmer/libui/{line.rb → shape/line.rb} +9 -7
  76. data/lib/glimmer/libui/{bezier.rb → shape/rectangle.rb} +9 -7
  77. data/lib/glimmer/libui/{square.rb → shape/square.rb} +9 -7
  78. data/lib/glimmer/libui/shape.rb +8 -6
  79. data/lib/glimmer/libui.rb +43 -1
  80. data/lib/glimmer-dsl-libui.rb +2 -0
  81. metadata +74 -57
  82. data/lib/glimmer/libui/about_menu_item_proxy.rb +0 -37
  83. data/lib/glimmer/libui/area_proxy.rb +0 -115
  84. data/lib/glimmer/libui/check_menu_item_proxy.rb +0 -37
  85. data/lib/glimmer/libui/checkbox_text_column_proxy.rb +0 -76
  86. data/lib/glimmer/libui/color_button_proxy.rb +0 -116
  87. data/lib/glimmer/libui/column.rb +0 -51
  88. data/lib/glimmer/libui/date_time_picker_proxy.rb +0 -68
  89. data/lib/glimmer/libui/font_button_proxy.rb +0 -68
  90. data/lib/glimmer/libui/image_column_proxy.rb +0 -40
  91. data/lib/glimmer/libui/image_text_column_proxy.rb +0 -44
  92. data/lib/glimmer/libui/label_proxy.rb +0 -41
  93. data/lib/glimmer/libui/matrix_proxy.rb +0 -145
  94. data/lib/glimmer/libui/menu_proxy.rb +0 -41
  95. data/lib/glimmer/libui/non_wrapping_multiline_entry_proxy.rb +0 -32
  96. data/lib/glimmer/libui/path_proxy.rb +0 -166
  97. data/lib/glimmer/libui/preferences_menu_item_proxy.rb +0 -37
  98. data/lib/glimmer/libui/separator_menu_item_proxy.rb +0 -37
  99. data/lib/glimmer/libui/tab_item_proxy.rb +0 -67
  100. data/lib/glimmer/libui/table_proxy.rb +0 -180
  101. data/lib/glimmer/libui/text_column_proxy.rb +0 -42
  102. data/lib/glimmer/libui/window_proxy.rb +0 -126
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.9
@@ -38,13 +38,61 @@ window('Area Gallery', 400, 400) {
38
38
  }
39
39
 
40
40
  fill r: 202, g: 102, b: 204, a: 0.5
41
- stroke thickness: 2, r: 0, g: 0, b: 0
41
+ stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
42
42
  }
43
43
  path { # declarative stable path
44
44
  arc(200, 200, 90, 0, 360, false)
45
45
 
46
46
  fill r: 202, g: 102, b: 204, a: 0.5
47
- stroke thickness: 2, r: 0, g: 0, b: 0
47
+ stroke r: 0, g: 0, b: 0, thickness: 2
48
48
  }
49
+
50
+ on_mouse_event do |area_mouse_event|
51
+ p area_mouse_event
52
+ end
53
+
54
+ on_mouse_moved do |area_mouse_event|
55
+ puts 'moved'
56
+ end
57
+
58
+ on_mouse_down do |area_mouse_event|
59
+ puts 'mouse down'
60
+ end
61
+
62
+ on_mouse_up do |area_mouse_event|
63
+ puts 'mouse up'
64
+ end
65
+
66
+ on_mouse_drag_started do |area_mouse_event|
67
+ puts 'drag started'
68
+ end
69
+
70
+ on_mouse_dragged do |area_mouse_event|
71
+ puts 'dragged'
72
+ end
73
+
74
+ on_mouse_dropped do |area_mouse_event|
75
+ puts 'dropped'
76
+ end
77
+
78
+ on_mouse_entered do
79
+ puts 'entered'
80
+ end
81
+
82
+ on_mouse_exited do
83
+ puts 'exited'
84
+ end
85
+
86
+ on_key_event do |area_key_event|
87
+ p area_key_event
88
+ end
89
+
90
+ on_key_up do |area_key_event|
91
+ puts 'key up'
92
+ end
93
+
94
+ on_key_down do |area_key_event|
95
+ puts 'key down'
96
+ end
49
97
  }
50
98
  }.show
@@ -92,7 +92,7 @@ window('Area Gallery', 400, 400) {
92
92
  }
93
93
 
94
94
  fill r: 202, g: 102, b: 204, a: 0.5
95
- stroke thickness: 2, r: 0, g: 0, b: 0
95
+ stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
96
96
  }
97
97
  path { # declarative stable path
98
98
  arc {
@@ -105,7 +105,55 @@ window('Area Gallery', 400, 400) {
105
105
  }
106
106
 
107
107
  fill r: 202, g: 102, b: 204, a: 0.5
108
- stroke thickness: 2, r: 0, g: 0, b: 0
108
+ stroke r: 0, g: 0, b: 0, thickness: 2
109
109
  }
110
+
111
+ on_mouse_event do |area_mouse_event|
112
+ p area_mouse_event
113
+ end
114
+
115
+ on_mouse_moved do |area_mouse_event|
116
+ puts 'moved'
117
+ end
118
+
119
+ on_mouse_down do |area_mouse_event|
120
+ puts 'mouse down'
121
+ end
122
+
123
+ on_mouse_up do |area_mouse_event|
124
+ puts 'mouse up'
125
+ end
126
+
127
+ on_mouse_drag_started do |area_mouse_event|
128
+ puts 'drag started'
129
+ end
130
+
131
+ on_mouse_dragged do |area_mouse_event|
132
+ puts 'dragged'
133
+ end
134
+
135
+ on_mouse_dropped do |area_mouse_event|
136
+ puts 'dropped'
137
+ end
138
+
139
+ on_mouse_entered do
140
+ puts 'entered'
141
+ end
142
+
143
+ on_mouse_exited do
144
+ puts 'exited'
145
+ end
146
+
147
+ on_key_event do |area_key_event|
148
+ p area_key_event
149
+ end
150
+
151
+ on_key_up do |area_key_event|
152
+ puts 'key up'
153
+ end
154
+
155
+ on_key_down do |area_key_event|
156
+ puts 'key down'
157
+ end
110
158
  }
111
159
  }.show
@@ -39,14 +39,62 @@ window('Area Gallery', 400, 400) {
39
39
  }
40
40
 
41
41
  fill r: 202, g: 102, b: 204, a: 0.5
42
- stroke thickness: 2, r: 0, g: 0, b: 0
42
+ stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
43
43
  }
44
44
  path { # a dynamic path is added semi-declaratively inside on_draw block
45
45
  arc(200, 200, 90, 0, 360, false)
46
46
 
47
47
  fill r: 202, g: 102, b: 204, a: 0.5
48
- stroke thickness: 2, r: 0, g: 0, b: 0
48
+ stroke r: 0, g: 0, b: 0, thickness: 2
49
49
  }
50
50
  end
51
+
52
+ on_mouse_event do |area_mouse_event|
53
+ p area_mouse_event
54
+ end
55
+
56
+ on_mouse_moved do |area_mouse_event|
57
+ puts 'moved'
58
+ end
59
+
60
+ on_mouse_down do |area_mouse_event|
61
+ puts 'mouse down'
62
+ end
63
+
64
+ on_mouse_up do |area_mouse_event|
65
+ puts 'mouse up'
66
+ end
67
+
68
+ on_mouse_drag_started do |area_mouse_event|
69
+ puts 'drag started'
70
+ end
71
+
72
+ on_mouse_dragged do |area_mouse_event|
73
+ puts 'dragged'
74
+ end
75
+
76
+ on_mouse_dropped do |area_mouse_event|
77
+ puts 'dropped'
78
+ end
79
+
80
+ on_mouse_entered do
81
+ puts 'entered'
82
+ end
83
+
84
+ on_mouse_exited do
85
+ puts 'exited'
86
+ end
87
+
88
+ on_key_event do |area_key_event|
89
+ p area_key_event
90
+ end
91
+
92
+ on_key_up do |area_key_event|
93
+ puts 'key up'
94
+ end
95
+
96
+ on_key_down do |area_key_event|
97
+ puts 'key down'
98
+ end
51
99
  }
52
100
  }.show
@@ -93,7 +93,7 @@ window('Area Gallery', 400, 400) {
93
93
  }
94
94
 
95
95
  fill r: 202, g: 102, b: 204, a: 0.5
96
- stroke thickness: 2, r: 0, g: 0, b: 0
96
+ stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
97
97
  }
98
98
  path { # a dynamic path is added semi-declaratively inside on_draw block
99
99
  arc {
@@ -106,8 +106,56 @@ window('Area Gallery', 400, 400) {
106
106
  }
107
107
 
108
108
  fill r: 202, g: 102, b: 204, a: 0.5
109
- stroke thickness: 2, r: 0, g: 0, b: 0
109
+ stroke r: 0, g: 0, b: 0, thickness: 2
110
110
  }
111
111
  end
112
+
113
+ on_mouse_event do |area_mouse_event|
114
+ p area_mouse_event
115
+ end
116
+
117
+ on_mouse_moved do |area_mouse_event|
118
+ puts 'moved'
119
+ end
120
+
121
+ on_mouse_down do |area_mouse_event|
122
+ puts 'mouse down'
123
+ end
124
+
125
+ on_mouse_up do |area_mouse_event|
126
+ puts 'mouse up'
127
+ end
128
+
129
+ on_mouse_drag_started do |area_mouse_event|
130
+ puts 'drag started'
131
+ end
132
+
133
+ on_mouse_dragged do |area_mouse_event|
134
+ puts 'dragged'
135
+ end
136
+
137
+ on_mouse_dropped do |area_mouse_event|
138
+ puts 'dropped'
139
+ end
140
+
141
+ on_mouse_entered do
142
+ puts 'entered'
143
+ end
144
+
145
+ on_mouse_exited do
146
+ puts 'exited'
147
+ end
148
+
149
+ on_key_event do |area_key_event|
150
+ p area_key_event
151
+ end
152
+
153
+ on_key_up do |area_key_event|
154
+ puts 'key up'
155
+ end
156
+
157
+ on_key_down do |area_key_event|
158
+ puts 'key down'
159
+ end
112
160
  }
113
161
  }.show
@@ -4,10 +4,10 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('hello world', 300, 200) { |w|
7
+ window('hello world', 300, 200) {
8
8
  button('Button') {
9
9
  on_clicked do
10
- msg_box(w, 'Information', 'You clicked the button')
10
+ msg_box('Information', 'You clicked the button')
11
11
  end
12
12
  }
13
13
 
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('Basic Entry', 300, 50) { |w|
7
+ window('Basic Entry', 300, 50) {
8
8
  horizontal_box {
9
9
  e = entry {
10
10
  # stretchy true # Smart default option for appending to horizontal_box
@@ -20,7 +20,7 @@ window('Basic Entry', 300, 50) { |w|
20
20
 
21
21
  on_clicked do
22
22
  text = e.text
23
- msg_box(w, 'You entered', text)
23
+ msg_box('You entered', text)
24
24
  end
25
25
  }
26
26
  }
@@ -14,7 +14,7 @@ window('Basic Transform', 350, 350) {
14
14
  square(0, 0, 100)
15
15
 
16
16
  fill r: [255 - n*5, 0].max, g: [n*5, 255].min, b: 0, a: 0.5
17
- stroke color: 0, thickness: 2
17
+ stroke :black, thickness: 2
18
18
  transform {
19
19
  skew 0.15, 0.15
20
20
  translate 50, 50
@@ -7,14 +7,14 @@ include Glimmer
7
7
  menu('File') {
8
8
  menu_item('Open') {
9
9
  on_clicked do
10
- file = open_file(MAIN_WINDOW)
10
+ file = open_file
11
11
  puts file unless file.nil?
12
12
  end
13
13
  }
14
14
 
15
15
  menu_item('Save') {
16
16
  on_clicked do
17
- file = save_file(MAIN_WINDOW)
17
+ file = save_file
18
18
  puts file unless file.nil?
19
19
  end
20
20
  }
@@ -57,7 +57,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500) {
57
57
  stretchy false
58
58
 
59
59
  on_clicked do
60
- msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
60
+ msg_box('Information', 'You clicked the button')
61
61
  end
62
62
  }
63
63
 
data/examples/form.rb CHANGED
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('Form') { |w|
7
+ window('Form') {
8
8
  margined true
9
9
 
10
10
  vertical_box {
@@ -20,7 +20,7 @@ window('Form') { |w|
20
20
 
21
21
  button('Display Name') {
22
22
  on_clicked do
23
- msg_box(w, 'Name', "#{@first_name_entry.text} #{@last_name_entry.text}")
23
+ msg_box('Name', "#{@first_name_entry.text} #{@last_name_entry.text}")
24
24
  end
25
25
  }
26
26
  }
@@ -9,31 +9,29 @@ Y_OFF_TOP = 20
9
9
  X_OFF_RIGHT = 20
10
10
  Y_OFF_BOTTOM = 20
11
11
  POINT_RADIUS = 5
12
-
13
12
  COLOR_BLUE = 0x1E90FF
14
13
 
14
+ @datapoints = 10.times.map {Random.new.rand(90)}
15
+
15
16
  def graph_size(area_width, area_height)
16
17
  graph_width = area_width - X_OFF_LEFT - X_OFF_RIGHT
17
18
  graph_height = area_height - Y_OFF_TOP - Y_OFF_BOTTOM
18
19
  [graph_width, graph_height]
19
20
  end
20
21
 
21
- def point_locations(datapoints, width, height)
22
+ def point_locations(width, height)
22
23
  xincr = width / 9.0 # 10 - 1 to make the last point be at the end
23
24
  yincr = height / 100.0
24
25
 
25
- data = []
26
- datapoints.each_with_index do |dp, i|
27
- val = 100 - dp.value
28
- data << [xincr * i, yincr * val]
29
- i += 1
26
+ @datapoints.each_with_index.map do |value, i|
27
+ val = 100 - value
28
+ [xincr * i, yincr * val]
30
29
  end
31
-
32
- data
33
30
  end
34
31
 
35
- def graph_path(datapoints, width, height, should_extend, &block)
36
- locations = point_locations(datapoints, width, height)
32
+ # method-based custom control representing a graph path
33
+ def graph_path(width, height, should_extend, &block)
34
+ locations = point_locations(width, height)
37
35
  path {
38
36
  first_location = locations[0] # x and y
39
37
  figure(first_location[0], first_location[1]) {
@@ -48,7 +46,7 @@ def graph_path(datapoints, width, height, should_extend, &block)
48
46
  end
49
47
  }
50
48
 
51
- # now transform the coordinate space so (0, 0) is the top-left corner of the graph
49
+ # apply a transform to the coordinate space for this path so (0, 0) is the top-left corner of the graph
52
50
  transform {
53
51
  translate X_OFF_LEFT, Y_OFF_TOP
54
52
  }
@@ -64,12 +62,13 @@ window('histogram example', 640, 480) {
64
62
  vertical_box {
65
63
  stretchy false
66
64
 
67
- @datapoints = 10.times.map do
68
- spinbox(0, 100) { |datapoint|
65
+ 10.times do |i|
66
+ spinbox(0, 100) { |sb|
69
67
  stretchy false
70
- value Random.new.rand(90)
68
+ value @datapoints[i]
71
69
 
72
70
  on_changed do
71
+ @datapoints[i] = sb.value
73
72
  @area.queue_redraw_all
74
73
  end
75
74
  }
@@ -90,7 +89,7 @@ window('histogram example', 640, 480) {
90
89
  path {
91
90
  rectangle(0, 0, area_draw_params[:area_width], area_draw_params[:area_height])
92
91
 
93
- fill color: 0xFFFFFF
92
+ fill 0xFFFFFF
94
93
  }
95
94
 
96
95
  graph_width, graph_height = *graph_size(area_draw_params[:area_width], area_draw_params[:area_height])
@@ -101,16 +100,16 @@ window('histogram example', 640, 480) {
101
100
  line(X_OFF_LEFT + graph_width, Y_OFF_TOP + graph_height)
102
101
  }
103
102
 
104
- stroke color: 0x000000, thickness: 2, miter_limit: 10
103
+ stroke 0x000000, thickness: 2, miter_limit: 10
105
104
  }
106
105
 
107
106
  # now create the fill for the graph below the graph line
108
- graph_path(@datapoints, graph_width, graph_height, true) {
107
+ graph_path(graph_width, graph_height, true) {
109
108
  fill @color_button.color.merge(a: 0.5)
110
109
  }
111
110
 
112
111
  # now draw the histogram line
113
- graph_path(@datapoints, graph_width, graph_height, false) {
112
+ graph_path(graph_width, graph_height, false) {
114
113
  stroke @color_button.color.merge(thickness: 2, miter_limit: 10)
115
114
  }
116
115
  end
@@ -6,59 +6,110 @@ require 'facets'
6
6
  class MetaExample
7
7
  include Glimmer
8
8
 
9
+ def initialize
10
+ @selected_example_index = 0
11
+ end
12
+
9
13
  def examples
10
14
  if @examples.nil?
11
15
  example_files = Dir.glob(File.join(File.expand_path('.', __dir__), '**', '*.rb'))
12
16
  example_file_names = example_files.map { |f| File.basename(f, '.rb') }
13
- example_file_names = example_file_names.reject { |f| f == 'meta_example' }
17
+ example_file_names = example_file_names.reject { |f| f == 'meta_example' || f.match(/\d$/) }
14
18
  @examples = example_file_names.map { |f| f.underscore.titlecase }
15
19
  end
16
20
  @examples
17
21
  end
18
22
 
23
+ def examples_with_versions
24
+ examples.map do |example|
25
+ version_count_for(example) > 1 ? "#{example} (#{version_count_for(example)} versions)" : example
26
+ end
27
+ end
28
+
19
29
  def file_path_for(example)
20
30
  File.join(File.expand_path('.', __dir__), "#{example.underscore}.rb")
21
31
  end
22
32
 
33
+ def version_count_for(example)
34
+ Dir.glob(File.join(File.expand_path('.', __dir__), "#{example.underscore}*.rb")).select {|file| file.match(/\d\.rb$/)}.count + 1
35
+ end
36
+
23
37
  def glimmer_dsl_libui_file
24
38
  File.expand_path('../lib/glimmer-dsl-libui', __dir__)
25
39
  end
26
40
 
41
+ def selected_example
42
+ examples[@selected_example_index]
43
+ end
44
+
27
45
  def launch
28
- window('Meta-Example', 700, 500) { |w|
46
+ window('Meta-Example', 700, 500) {
29
47
  margined true
30
48
 
31
49
  horizontal_box {
32
50
  vertical_box {
51
+ stretchy false
52
+
33
53
  @rbs = radio_buttons {
34
54
  stretchy false
35
- items examples
36
- selected 0
55
+ items examples_with_versions
56
+ selected @selected_example_index
37
57
 
38
58
  on_selected do
39
- @nwme.text = File.read(file_path_for(@examples[@rbs.selected]))
59
+ @selected_example_index = @rbs.selected
60
+ example = selected_example
61
+ @nwme.text = File.read(file_path_for(example))
62
+ @sb.value = 1
40
63
  end
41
64
  }
42
- button('Launch') {
65
+
66
+ horizontal_box {
67
+ label('Version') {
68
+ stretchy false
69
+ }
70
+
71
+ @sb = spinbox(1, 100) {
72
+ value 1
73
+
74
+ on_changed do
75
+ example = selected_example
76
+ if @sb.value > version_count_for(example)
77
+ @sb.value -= 1
78
+ else
79
+ version_number = @sb.value == 1 ? '' : @sb.value
80
+ example = "#{selected_example}#{version_number}"
81
+ @nwme.text = File.read(file_path_for(example))
82
+ end
83
+ end
84
+ }
85
+ }
86
+
87
+ horizontal_box {
43
88
  stretchy false
44
89
 
45
- on_clicked do
46
- begin
47
- meta_example_file = File.join(Dir.home, '.meta_example.rb')
48
- File.write(meta_example_file, @nwme.text)
49
- result = `ruby -r #{glimmer_dsl_libui_file} #{meta_example_file} 2>&1`
50
- msg_box(w, 'Error Running Example', result) if result.include?('error')
51
- rescue => e
52
- puts 'Unable to write code changes! Running original example...'
53
- system "ruby -r #{glimmer_dsl_libui_file} #{file_path_for(@examples[@rbs.selected])}"
90
+ button('Launch') {
91
+ on_clicked do
92
+ begin
93
+ meta_example_file = File.join(Dir.home, '.meta_example.rb')
94
+ File.write(meta_example_file, @nwme.text)
95
+ result = `ruby -r #{glimmer_dsl_libui_file} #{meta_example_file} 2>&1`
96
+ msg_box('Error Running Example', result) if result.include?('error')
97
+ rescue => e
98
+ puts 'Unable to write code changes! Running original example...'
99
+ system "ruby -r #{glimmer_dsl_libui_file} #{file_path_for(selected_example)}"
100
+ end
54
101
  end
55
- end
102
+ }
103
+ button('Reset') {
104
+ on_clicked do
105
+ @nwme.text = File.read(file_path_for(selected_example))
106
+ end
107
+ }
56
108
  }
57
109
  }
58
- vertical_box {
59
- @nwme = non_wrapping_multiline_entry {
60
- text File.read(file_path_for(@examples[@rbs.selected]))
61
- }
110
+
111
+ @nwme = non_wrapping_multiline_entry {
112
+ text File.read(file_path_for(selected_example))
62
113
  }
63
114
  }
64
115
  }.show
@@ -40,23 +40,22 @@ class TinyMidiPlayer
40
40
  end
41
41
  end
42
42
 
43
- def show_version(main_window)
44
- msg_box(main_window,
45
- 'Tiny Midi Player',
46
- "Written in Ruby\n" \
47
- "https://github.com/kojix2/libui\n" \
48
- "Version #{VERSION}")
43
+ def show_version
44
+ msg_box('Tiny Midi Player',
45
+ "Written in Ruby\n" \
46
+ "https://github.com/kojix2/libui\n" \
47
+ "Version #{VERSION}")
49
48
  end
50
49
 
51
50
  def create_gui
52
51
  menu('Help') { |m|
53
52
  menu_item('Version') {
54
53
  on_clicked do
55
- show_version(@main_window)
54
+ show_version
56
55
  end
57
56
  }
58
57
  }
59
- @main_window = window('Tiny Midi Player', 200, 50) {
58
+ window('Tiny Midi Player', 200, 50) {
60
59
  horizontal_box {
61
60
  vertical_box {
62
61
  stretchy false
@@ -82,8 +81,7 @@ class TinyMidiPlayer
82
81
  end
83
82
  }
84
83
  }
85
- }
86
- @main_window.show
84
+ }.show
87
85
  end
88
86
  end
89
87
 
Binary file
@@ -46,6 +46,4 @@ module Glimmer
46
46
  end
47
47
  end
48
48
 
49
- # TODO Consider moving all controls underneath Control namespace
50
49
  require 'glimmer/libui/control_proxy'
51
- Dir[File.expand_path('../../libui/*.rb', __dir__)].each {|f| require f}
@@ -19,12 +19,16 @@
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
+ require 'glimmer/libui/control_proxy'
23
+
22
24
  module Glimmer
23
25
  module DSL
24
26
  module Libui
25
27
  module FileExpression
26
28
  def interpret(parent, keyword, *args, &block)
27
- file_pointer = ::LibUI.send(self.class.name.underscore.split('::').last.sub(/_expression$/, ''), args.first.libui)
29
+ window = args.empty? ? Glimmer::LibUI::ControlProxy.main_window_proxy : args.first
30
+ window = window.libui if window.respond_to?(:libui)
31
+ file_pointer = ::LibUI.send(self.class.name.underscore.split('::').last.sub(/_expression$/, ''), window)
28
32
  file_pointer.to_s unless file_pointer.null?
29
33
  end
30
34
  end
@@ -31,7 +31,7 @@ module Glimmer
31
31
  def can_interpret?(parent, keyword, *args, &block)
32
32
  Glimmer::LibUI::Shape.exists?(keyword) and
33
33
  (
34
- parent.is_a?(Glimmer::LibUI::PathProxy) or
34
+ parent.is_a?(Glimmer::LibUI::ControlProxy::PathProxy) or
35
35
  parent.is_a?(Glimmer::LibUI::Shape)
36
36
  )
37
37
  end
@@ -50,7 +50,5 @@ module Glimmer
50
50
  end
51
51
  end
52
52
 
53
- # TODO Consider moving all shapes underneath Shape namespace
54
- require 'glimmer/libui/path_proxy'
53
+ require 'glimmer/libui/control_proxy/path_proxy'
55
54
  require 'glimmer/libui/shape'
56
- Dir[File.expand_path('../../libui/*.rb', __dir__)].each {|f| require f}