glimmer-dsl-libui 0.1.4 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +55 -0
  3. data/README.md +939 -255
  4. data/VERSION +1 -1
  5. data/examples/area_gallery.rb +72 -38
  6. data/examples/area_gallery2.rb +126 -92
  7. data/examples/area_gallery3.rb +74 -40
  8. data/examples/area_gallery4.rb +132 -98
  9. data/examples/basic_area2.rb +1 -1
  10. data/examples/basic_button.rb +2 -2
  11. data/examples/basic_entry.rb +2 -2
  12. data/examples/basic_transform.rb +27 -0
  13. data/examples/control_gallery.rb +3 -3
  14. data/examples/dynamic_area.rb +1 -1
  15. data/examples/form.rb +2 -2
  16. data/examples/histogram.rb +118 -0
  17. data/examples/meta_example.rb +71 -20
  18. data/examples/midi_player.rb +8 -10
  19. data/glimmer-dsl-libui.gemspec +0 -0
  20. data/lib/glimmer/dsl/libui/control_expression.rb +0 -2
  21. data/lib/glimmer/dsl/libui/file_expression.rb +5 -1
  22. data/lib/glimmer/dsl/libui/shape_expression.rb +2 -4
  23. data/lib/glimmer/dsl/libui/tab_item_expression.rb +2 -2
  24. data/lib/glimmer/libui/control_proxy/area_proxy.rb +166 -0
  25. data/lib/glimmer/libui/{menu_item_proxy.rb → control_proxy/box/horizontal_box_proxy.rb} +9 -12
  26. data/lib/glimmer/libui/{horizontal_box_proxy.rb → control_proxy/box/vertical_box_proxy.rb} +10 -6
  27. data/lib/glimmer/libui/{box.rb → control_proxy/box.rb} +31 -27
  28. data/lib/glimmer/libui/{button_proxy.rb → control_proxy/button_proxy.rb} +14 -12
  29. data/lib/glimmer/libui/{checkbox_proxy.rb → control_proxy/checkbox_proxy.rb} +14 -12
  30. data/lib/glimmer/libui/control_proxy/color_button_proxy.rb +118 -0
  31. data/lib/glimmer/libui/control_proxy/column/button_column_proxy.rb +76 -0
  32. data/lib/glimmer/libui/control_proxy/column/checkbox_column_proxy.rb +46 -0
  33. data/lib/glimmer/libui/control_proxy/column/checkbox_text_column_proxy.rb +80 -0
  34. data/lib/glimmer/libui/{radio_buttons_proxy.rb → control_proxy/column/image_column_proxy.rb} +14 -13
  35. data/lib/glimmer/libui/control_proxy/column/image_text_column_proxy.rb +48 -0
  36. data/lib/glimmer/libui/control_proxy/column/progress_bar_column_proxy.rb +44 -0
  37. data/lib/glimmer/libui/{checkbox_column_proxy.rb → control_proxy/column/text_column_proxy.rb} +17 -13
  38. data/lib/glimmer/libui/control_proxy/column.rb +55 -0
  39. data/lib/glimmer/libui/control_proxy/combobox_proxy.rb +45 -0
  40. data/lib/glimmer/libui/control_proxy/date_time_picker_proxy/date_picker_proxy.rb +43 -0
  41. data/lib/glimmer/libui/control_proxy/date_time_picker_proxy/time_picker_proxy.rb +43 -0
  42. data/lib/glimmer/libui/control_proxy/date_time_picker_proxy.rb +72 -0
  43. data/lib/glimmer/libui/control_proxy/dual_column.rb +40 -0
  44. data/lib/glimmer/libui/control_proxy/editable_column.rb +46 -0
  45. data/lib/glimmer/libui/control_proxy/editable_combobox_proxy.rb +45 -0
  46. data/lib/glimmer/libui/{dual_column.rb → control_proxy/enableable_column.rb} +18 -10
  47. data/lib/glimmer/libui/control_proxy/font_button_proxy.rb +70 -0
  48. data/lib/glimmer/libui/{form_proxy.rb → control_proxy/form_proxy.rb} +26 -24
  49. data/lib/glimmer/libui/{grid_proxy.rb → control_proxy/grid_proxy.rb} +29 -27
  50. data/lib/glimmer/libui/{group_proxy.rb → control_proxy/group_proxy.rb} +24 -22
  51. data/lib/glimmer/libui/{image_part_proxy.rb → control_proxy/image_part_proxy.rb} +20 -18
  52. data/lib/glimmer/libui/{image_proxy.rb → control_proxy/image_proxy.rb} +32 -30
  53. data/lib/glimmer/libui/{combobox_proxy.rb → control_proxy/label_proxy.rb} +13 -13
  54. data/lib/glimmer/libui/control_proxy/matrix_proxy.rb +147 -0
  55. data/lib/glimmer/libui/{editable_column.rb → control_proxy/menu_item_proxy/about_menu_item_proxy.rb} +13 -16
  56. data/lib/glimmer/libui/control_proxy/menu_item_proxy/check_menu_item_proxy.rb +41 -0
  57. data/lib/glimmer/libui/{date_picker_proxy.rb → control_proxy/menu_item_proxy/preferences_menu_item_proxy.rb} +10 -10
  58. data/lib/glimmer/libui/{quit_menu_item_proxy.rb → control_proxy/menu_item_proxy/quit_menu_item_proxy.rb} +33 -29
  59. data/lib/glimmer/libui/control_proxy/menu_item_proxy/separator_menu_item_proxy.rb +41 -0
  60. data/lib/glimmer/libui/control_proxy/menu_item_proxy.rb +45 -0
  61. data/lib/glimmer/libui/{editable_combobox_proxy.rb → control_proxy/menu_proxy.rb} +13 -13
  62. data/lib/glimmer/libui/{vertical_box_proxy.rb → control_proxy/message_box/msg_box_error_proxy.rb} +9 -6
  63. data/lib/glimmer/libui/{multiline_entry_proxy.rb → control_proxy/message_box/msg_box_proxy.rb} +8 -6
  64. data/lib/glimmer/libui/{time_picker_proxy.rb → control_proxy/message_box.rb} +9 -10
  65. data/lib/glimmer/libui/{rectangle.rb → control_proxy/multiline_entry_proxy/non_wrapping_multiline_entry_proxy.rb} +6 -8
  66. data/lib/glimmer/libui/{progress_bar_column_proxy.rb → control_proxy/multiline_entry_proxy.rb} +10 -11
  67. data/lib/glimmer/libui/control_proxy/path_proxy.rb +190 -0
  68. data/lib/glimmer/libui/control_proxy/radio_buttons_proxy.rb +45 -0
  69. data/lib/glimmer/libui/{button_column_proxy.rb → control_proxy/tab_item_proxy.rb} +37 -40
  70. data/lib/glimmer/libui/control_proxy/table_proxy.rb +182 -0
  71. data/lib/glimmer/libui/control_proxy/transformable.rb +74 -0
  72. data/lib/glimmer/libui/control_proxy/window_proxy.rb +128 -0
  73. data/lib/glimmer/libui/control_proxy.rb +72 -21
  74. data/lib/glimmer/libui/{enableable_column.rb → parent.rb} +7 -15
  75. data/lib/glimmer/libui/{arc.rb → shape/arc.rb} +13 -11
  76. data/lib/glimmer/libui/shape/bezier.rb +38 -0
  77. data/lib/glimmer/libui/{figure.rb → shape/figure.rb} +23 -21
  78. data/lib/glimmer/libui/{line.rb → shape/line.rb} +9 -7
  79. data/lib/glimmer/libui/{bezier.rb → shape/rectangle.rb} +9 -7
  80. data/lib/glimmer/libui/{square.rb → shape/square.rb} +9 -7
  81. data/lib/glimmer/libui/shape.rb +16 -15
  82. data/lib/glimmer/libui.rb +92 -0
  83. data/lib/glimmer-dsl-libui.rb +3 -0
  84. metadata +76 -53
  85. data/lib/glimmer/libui/about_menu_item_proxy.rb +0 -37
  86. data/lib/glimmer/libui/area_proxy.rb +0 -105
  87. data/lib/glimmer/libui/check_menu_item_proxy.rb +0 -37
  88. data/lib/glimmer/libui/checkbox_text_column_proxy.rb +0 -76
  89. data/lib/glimmer/libui/color_button_proxy.rb +0 -64
  90. data/lib/glimmer/libui/column.rb +0 -51
  91. data/lib/glimmer/libui/date_time_picker_proxy.rb +0 -68
  92. data/lib/glimmer/libui/font_button_proxy.rb +0 -68
  93. data/lib/glimmer/libui/image_column_proxy.rb +0 -40
  94. data/lib/glimmer/libui/image_text_column_proxy.rb +0 -44
  95. data/lib/glimmer/libui/label_proxy.rb +0 -41
  96. data/lib/glimmer/libui/menu_proxy.rb +0 -41
  97. data/lib/glimmer/libui/non_wrapping_multiline_entry_proxy.rb +0 -32
  98. data/lib/glimmer/libui/path_proxy.rb +0 -169
  99. data/lib/glimmer/libui/preferences_menu_item_proxy.rb +0 -37
  100. data/lib/glimmer/libui/separator_menu_item_proxy.rb +0 -37
  101. data/lib/glimmer/libui/tab_item_proxy.rb +0 -67
  102. data/lib/glimmer/libui/table_proxy.rb +0 -180
  103. data/lib/glimmer/libui/text_column_proxy.rb +0 -42
  104. data/lib/glimmer/libui/window_proxy.rb +0 -119
@@ -3,113 +3,147 @@ require 'glimmer-dsl-libui'
3
3
  include Glimmer
4
4
 
5
5
  window('Area Gallery', 400, 400) {
6
- vertical_box {
7
- area {
8
- on_draw do |area_draw_params|
9
- path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
10
- square {
11
- x 0
12
- y 0
13
- length 100
14
- }
15
- square {
6
+ area {
7
+ on_draw do |area_draw_params|
8
+ path { # a dynamic path is added semi-declaratively inside on_draw block
9
+ square {
10
+ x 0
11
+ y 0
12
+ length 100
13
+ }
14
+ square {
15
+ x 100
16
+ y 100
17
+ length 400
18
+ }
19
+
20
+ fill r: 102, g: 102, b: 204
21
+ }
22
+ path { # a dynamic path is added semi-declaratively inside on_draw block
23
+ rectangle {
24
+ x 0
25
+ y 100
26
+ width 100
27
+ height 400
28
+ }
29
+ rectangle {
30
+ x 100
31
+ y 0
32
+ width 400
33
+ height 100
34
+ }
35
+
36
+ fill r: 204, g: 102, b: 204
37
+ }
38
+ path { # a dynamic path is added semi-declaratively inside on_draw block
39
+ figure {
40
+ x 100
41
+ y 100
42
+
43
+ line {
16
44
  x 100
17
- y 100
18
- length 400
45
+ y 400
19
46
  }
20
-
21
- fill r: 102, g: 102, b: 204
22
- }
23
- path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
24
- rectangle {
25
- x 0
47
+ line {
48
+ x 400
26
49
  y 100
27
- width 100
28
- height 400
29
50
  }
30
- rectangle {
31
- x 100
32
- y 0
33
- width 400
34
- height 100
51
+ line {
52
+ x 400
53
+ y 400
35
54
  }
36
-
37
- fill r: 204, g: 102, b: 204
55
+
56
+ closed true
38
57
  }
39
- path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
40
- figure {
41
- x 100
42
- y 100
43
-
44
- line {
45
- x 100
46
- y 400
47
- }
48
- line {
49
- x 400
50
- y 100
51
- }
52
- line {
53
- x 400
54
- y 400
55
- }
56
-
57
- closed true
58
+
59
+ fill r: 202, g: 102, b: 104, a: 0.5
60
+ stroke r: 0, g: 0, b: 0
61
+ }
62
+ path { # a dynamic path is added semi-declaratively inside on_draw block
63
+ figure {
64
+ x 0
65
+ y 0
66
+
67
+ bezier {
68
+ c1_x 200
69
+ c1_y 100
70
+ c2_x 100
71
+ c2_y 200
72
+ end_x 400
73
+ end_y 100
58
74
  }
59
-
60
- fill r: 202, g: 102, b: 104, a: 0.5
61
- stroke r: 0, g: 0, b: 0
62
- }
63
- path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
64
- figure {
65
- x 0
66
- y 0
67
-
68
- bezier {
69
- c1_x 200
70
- c1_y 100
71
- c2_x 100
72
- c2_y 200
73
- end_x 400
74
- end_y 100
75
- }
76
- bezier {
77
- c1_x 300
78
- c1_y 100
79
- c2_x 100
80
- c2_y 300
81
- end_x 100
82
- end_y 400
83
- }
84
- bezier {
85
- c1_x 100
86
- c1_y 300
87
- c2_x 300
88
- c2_y 100
89
- end_x 400
90
- end_y 400
91
- }
92
-
93
- closed true
75
+ bezier {
76
+ c1_x 300
77
+ c1_y 100
78
+ c2_x 100
79
+ c2_y 300
80
+ end_x 100
81
+ end_y 400
94
82
  }
95
-
96
- fill r: 202, g: 102, b: 204, a: 0.5
97
- stroke thickness: 2, r: 0, g: 0, b: 0
98
- }
99
- path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
100
- arc {
101
- x_center 200
102
- y_center 200
103
- radius 90
104
- start_angle 0
105
- sweep 360
106
- is_negative false
83
+ bezier {
84
+ c1_x 100
85
+ c1_y 300
86
+ c2_x 300
87
+ c2_y 100
88
+ end_x 400
89
+ end_y 400
107
90
  }
108
-
109
- fill r: 202, g: 102, b: 204, a: 0.5
110
- stroke thickness: 2, r: 0, g: 0, b: 0
91
+
92
+ closed true
111
93
  }
112
- end
113
- }
94
+
95
+ fill r: 202, g: 102, b: 204, a: 0.5
96
+ stroke r: 0, g: 0, b: 0, thickness: 2, dashes: [50, 10, 10, 10], dash_phase: -50.0
97
+ }
98
+ path { # a dynamic path is added semi-declaratively inside on_draw block
99
+ arc {
100
+ x_center 200
101
+ y_center 200
102
+ radius 90
103
+ start_angle 0
104
+ sweep 360
105
+ is_negative false
106
+ }
107
+
108
+ fill r: 202, g: 102, b: 204, a: 0.5
109
+ stroke r: 0, g: 0, b: 0, thickness: 2
110
+ }
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
114
148
  }
115
149
  }.show
@@ -8,7 +8,7 @@ window('Basic Area', 400, 400) {
8
8
  vertical_box {
9
9
  area {
10
10
  on_draw do |area_draw_params|
11
- path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
11
+ path { # a dynamic path is added semi-declaratively inside on_draw block
12
12
  rectangle(0, 0, 400, 400)
13
13
 
14
14
  fill r: 102, g: 102, b: 204, a: 1.0
@@ -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
  }
@@ -0,0 +1,27 @@
1
+ require 'glimmer-dsl-libui'
2
+
3
+ include Glimmer
4
+
5
+ window('Basic Transform', 350, 350) {
6
+ area {
7
+ path {
8
+ square(0, 0, 350)
9
+
10
+ fill r: 255, g: 255, b: 0
11
+ }
12
+ 40.times do |n|
13
+ path {
14
+ square(0, 0, 100)
15
+
16
+ fill r: [255 - n*5, 0].max, g: [n*5, 255].min, b: 0, a: 0.5
17
+ stroke :black, thickness: 2
18
+ transform {
19
+ skew 0.15, 0.15
20
+ translate 50, 50
21
+ rotate 100, 100, -9 * n
22
+ scale 1.1, 1.1
23
+ }
24
+ }
25
+ end
26
+ }
27
+ }.show
@@ -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
 
@@ -88,7 +88,7 @@ window('Dynamic Area', 240, 600) {
88
88
 
89
89
  @area = area {
90
90
  on_draw do |area_draw_params|
91
- path(area_draw_params) { # a dynamic path is added semi-declaratively inside on_draw block
91
+ path { # a dynamic path is added semi-declaratively inside on_draw block
92
92
  rectangle(@x_spinbox.value, @y_spinbox.value, @width_spinbox.value, @height_spinbox.value)
93
93
 
94
94
  fill r: @red_spinbox.value, g: @green_spinbox.value, b: @blue_spinbox.value, a: @alpha_spinbox.value / 100.0
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
  }
@@ -0,0 +1,118 @@
1
+ # https://github.com/jamescook/libui-ruby/blob/master/example/histogram.rb
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ X_OFF_LEFT = 20
8
+ Y_OFF_TOP = 20
9
+ X_OFF_RIGHT = 20
10
+ Y_OFF_BOTTOM = 20
11
+ POINT_RADIUS = 5
12
+ COLOR_BLUE = 0x1E90FF
13
+
14
+ @datapoints = 10.times.map {Random.new.rand(90)}
15
+
16
+ def graph_size(area_width, area_height)
17
+ graph_width = area_width - X_OFF_LEFT - X_OFF_RIGHT
18
+ graph_height = area_height - Y_OFF_TOP - Y_OFF_BOTTOM
19
+ [graph_width, graph_height]
20
+ end
21
+
22
+ def point_locations(width, height)
23
+ xincr = width / 9.0 # 10 - 1 to make the last point be at the end
24
+ yincr = height / 100.0
25
+
26
+ @datapoints.each_with_index.map do |value, i|
27
+ val = 100 - value
28
+ [xincr * i, yincr * val]
29
+ end
30
+ end
31
+
32
+ # method-based custom control representing a graph path
33
+ def graph_path(width, height, should_extend, &block)
34
+ locations = point_locations(width, height)
35
+ path {
36
+ first_location = locations[0] # x and y
37
+ figure(first_location[0], first_location[1]) {
38
+ locations.each do |loc|
39
+ line(loc[0], loc[1])
40
+ end
41
+ if should_extend
42
+ line(width, height)
43
+ line(0, height)
44
+
45
+ closed true
46
+ end
47
+ }
48
+
49
+ # apply a transform to the coordinate space for this path so (0, 0) is the top-left corner of the graph
50
+ transform {
51
+ translate X_OFF_LEFT, Y_OFF_TOP
52
+ }
53
+
54
+ block.call
55
+ }
56
+ end
57
+
58
+ window('histogram example', 640, 480) {
59
+ margined true
60
+
61
+ horizontal_box {
62
+ vertical_box {
63
+ stretchy false
64
+
65
+ 10.times do |i|
66
+ spinbox(0, 100) { |sb|
67
+ stretchy false
68
+ value @datapoints[i]
69
+
70
+ on_changed do
71
+ @datapoints[i] = sb.value
72
+ @area.queue_redraw_all
73
+ end
74
+ }
75
+ end
76
+
77
+ @color_button = color_button {
78
+ stretchy false
79
+ color COLOR_BLUE
80
+
81
+ on_changed do
82
+ @area.queue_redraw_all
83
+ end
84
+ }
85
+ }
86
+
87
+ @area = area {
88
+ on_draw do |area_draw_params|
89
+ path {
90
+ rectangle(0, 0, area_draw_params[:area_width], area_draw_params[:area_height])
91
+
92
+ fill 0xFFFFFF
93
+ }
94
+
95
+ graph_width, graph_height = *graph_size(area_draw_params[:area_width], area_draw_params[:area_height])
96
+
97
+ path {
98
+ figure(X_OFF_LEFT, Y_OFF_TOP) {
99
+ line(X_OFF_LEFT, Y_OFF_TOP + graph_height)
100
+ line(X_OFF_LEFT + graph_width, Y_OFF_TOP + graph_height)
101
+ }
102
+
103
+ stroke 0x000000, thickness: 2, miter_limit: 10
104
+ }
105
+
106
+ # now create the fill for the graph below the graph line
107
+ graph_path(graph_width, graph_height, true) {
108
+ fill @color_button.color.merge(a: 0.5)
109
+ }
110
+
111
+ # now draw the histogram line
112
+ graph_path(graph_width, graph_height, false) {
113
+ stroke @color_button.color.merge(thickness: 2, miter_limit: 10)
114
+ }
115
+ end
116
+ }
117
+ }
118
+ }.show
@@ -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