glimmer-dsl-libui 0.4.16 → 0.4.20

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +451 -68
  4. data/VERSION +1 -1
  5. data/examples/area_based_custom_controls.rb +278 -0
  6. data/examples/basic_table.rb +1 -1
  7. data/examples/cpu_percentage.rb +1 -1
  8. data/examples/custom_draw_text.rb +14 -7
  9. data/examples/custom_draw_text2.rb +15 -8
  10. data/examples/method_based_custom_keyword.rb +9 -9
  11. data/examples/method_based_custom_keyword2.rb +9 -9
  12. data/glimmer-dsl-libui.gemspec +0 -0
  13. data/lib/glimmer/dsl/libui/dsl.rb +1 -0
  14. data/lib/glimmer/dsl/libui/observe_expression.rb +1 -1
  15. data/lib/glimmer/dsl/libui/operation_expression.rb +47 -0
  16. data/lib/glimmer/dsl/libui/property_expression.rb +2 -2
  17. data/lib/glimmer/libui/control_proxy/box.rb +1 -0
  18. data/lib/glimmer/libui/control_proxy/column/background_color_column_proxy.rb +6 -0
  19. data/lib/glimmer/libui/control_proxy/column/button_column_proxy.rb +6 -0
  20. data/lib/glimmer/libui/control_proxy/column/checkbox_column_proxy.rb +6 -0
  21. data/lib/glimmer/libui/control_proxy/column/checkbox_text_color_column_proxy.rb +6 -0
  22. data/lib/glimmer/libui/control_proxy/column/checkbox_text_column_proxy.rb +6 -0
  23. data/lib/glimmer/libui/control_proxy/column/image_column_proxy.rb +6 -0
  24. data/lib/glimmer/libui/control_proxy/column/image_text_color_column_proxy.rb +6 -0
  25. data/lib/glimmer/libui/control_proxy/column/image_text_column_proxy.rb +6 -0
  26. data/lib/glimmer/libui/control_proxy/column/progress_bar_column_proxy.rb +6 -0
  27. data/lib/glimmer/libui/control_proxy/column/text_color_column_proxy.rb +6 -0
  28. data/lib/glimmer/libui/control_proxy/column/text_column_proxy.rb +6 -0
  29. data/lib/glimmer/libui/control_proxy/column.rb +7 -0
  30. data/lib/glimmer/libui/control_proxy/form_proxy.rb +1 -0
  31. data/lib/glimmer/libui/control_proxy/image_proxy.rb +1 -0
  32. data/lib/glimmer/libui/control_proxy/menu_item_proxy/quit_menu_item_proxy.rb +0 -1
  33. data/lib/glimmer/libui/control_proxy/path_proxy.rb +6 -4
  34. data/lib/glimmer/libui/control_proxy/table_proxy.rb +51 -28
  35. data/lib/glimmer/libui/control_proxy.rb +1 -0
  36. data/lib/glimmer/libui/data_bindable.rb +1 -1
  37. data/lib/glimmer/libui/shape/bezier.rb +20 -3
  38. data/lib/glimmer/libui/shape/line.rb +23 -3
  39. data/lib/glimmer-dsl-libui.rb +6 -0
  40. metadata +23 -6
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.16
1
+ 0.4.20
@@ -0,0 +1,278 @@
1
+ require 'glimmer-dsl-libui'
2
+
3
+ class AreaBasedCustomControls
4
+ include Glimmer
5
+
6
+ attr_accessor :label_width, :label_height, :label_font_descriptor,
7
+ :label_text_color, :label_background_fill, :label_border_stroke,
8
+ :label_text_x, :label_text_y,
9
+ :button_width, :button_height, :button_font_descriptor,
10
+ :button_text_color, :button_background_fill, :button_border_stroke,
11
+ :button_text_x, :button_text_y
12
+
13
+ def initialize
14
+ self.label_width = 335
15
+ self.label_height = 50
16
+ self.label_font_descriptor = {family: OS.linux? ? 'Monospace Bold Italic' : 'Courier New', size: 16, weight: :bold, italic: :italic}
17
+ self.label_text_color = :red
18
+ self.label_background_fill = :yellow
19
+ self.label_border_stroke = :limegreen
20
+
21
+ self.button_width = 150
22
+ self.button_height = 50
23
+ self.button_font_descriptor = {family: OS.linux? ? 'Monospace Bold Italic' : 'Courier New', size: 36, weight: OS.linux? ? :normal : :bold, italic: :italic}
24
+ self.button_text_color = :green
25
+ self.button_background_fill = :yellow
26
+ self.button_border_stroke = :limegreen
27
+ end
28
+
29
+ def rebuild_text_label
30
+ @text_label.destroy
31
+ @text_label_vertical_box.content { # re-open vertical box content and shove in a new button
32
+ @text_label = text_label('This is a text label.',
33
+ width: label_width, height: label_height, font_descriptor: label_font_descriptor,
34
+ background_fill: label_background_fill, text_color: label_text_color, border_stroke: label_border_stroke,
35
+ text_x: label_text_x, text_y: label_text_y)
36
+ }
37
+ end
38
+
39
+ def rebuild_push_button
40
+ @push_button.destroy
41
+ @push_button_vertical_box.content { # re-open vertical box content and shove in a new button
42
+ @push_button = push_button('Push',
43
+ width: button_width, height: button_height, font_descriptor: button_font_descriptor,
44
+ background_fill: button_background_fill, text_color: button_text_color, border_stroke: button_border_stroke,
45
+ text_x: button_text_x, text_y: button_text_y) {
46
+ on_mouse_up do
47
+ message_box('Button Pushed', 'Thank you for pushing the button!')
48
+ end
49
+ }
50
+ }
51
+ end
52
+
53
+ def launch
54
+ window('Area-Based Custom Controls', 385, 385) { |w|
55
+ margined true
56
+
57
+ tab {
58
+ tab_item('Text Label') {
59
+ @text_label_vertical_box = vertical_box {
60
+ vertical_box {
61
+ text_label('Text Label Form:', width: 385, height: 30, background_fill: OS.windows? ? :white : {a: 0}, border_stroke: OS.windows? ? :white : {a: 0}, font_descriptor: {size: 16, weight: :bold}, text_x: 0, text_y: OS.windows? ? 0 : 5)
62
+
63
+ horizontal_box {
64
+ label('Width')
65
+ spinbox(1, 1000) {
66
+ value <=> [self, :label_width, after_write: method(:rebuild_text_label)]
67
+ }
68
+ }
69
+
70
+ horizontal_box {
71
+ label('Height')
72
+ spinbox(1, 1000) {
73
+ value <=> [self, :label_height, after_write: method(:rebuild_text_label)]
74
+ }
75
+ }
76
+
77
+ horizontal_box {
78
+ label('Font')
79
+ font_button {
80
+ font <=> [self, :label_font_descriptor, after_write: method(:rebuild_text_label)]
81
+ }
82
+ }
83
+
84
+ horizontal_box {
85
+ label('Text Color')
86
+ color_button {
87
+ color <=> [self, :label_text_color, after_write: method(:rebuild_text_label)]
88
+ }
89
+ }
90
+
91
+ horizontal_box {
92
+ label('Background Color')
93
+ color_button {
94
+ color <=> [self, :label_background_fill, after_write: method(:rebuild_text_label)]
95
+ }
96
+ }
97
+
98
+ horizontal_box {
99
+ label('Border Color')
100
+ color_button {
101
+ color <=> [self, :label_border_stroke, after_write: method(:rebuild_text_label)]
102
+ }
103
+ }
104
+
105
+ horizontal_box {
106
+ label('Text X (0=centered)')
107
+ spinbox(0, 1000) {
108
+ value <=> [self, :label_text_x, on_read: ->(x) {x.nil? ? 0 : x}, on_write: ->(x) {x == 0 ? nil : x}, after_write: method(:rebuild_text_label)]
109
+ }
110
+ }
111
+
112
+ horizontal_box {
113
+ label('Text Y (0=centered)')
114
+ spinbox(0, 1000) {
115
+ value <=> [self, :label_text_y, on_read: ->(y) {y.nil? ? 0 : y}, on_write: ->(y) {y == 0 ? nil : y}, after_write: method(:rebuild_text_label)]
116
+ }
117
+ }
118
+ }
119
+
120
+ @text_label = text_label('This is a text label.',
121
+ width: label_width, height: label_height, font_descriptor: label_font_descriptor,
122
+ background_fill: label_background_fill, text_color: label_text_color, border_stroke: label_border_stroke,
123
+ text_x: label_text_x, text_y: label_text_y)
124
+ }
125
+ }
126
+
127
+ tab_item('Push Button') {
128
+ @push_button_vertical_box = vertical_box {
129
+ vertical_box {
130
+ text_label('Push Button Form:', width: 385, height: 30, background_fill: OS.windows? ? :white : {a: 0}, border_stroke: OS.windows? ? :white : {a: 0}, font_descriptor: {size: 16, weight: :bold}, text_x: 0, text_y: OS.windows? ? 0 : 5)
131
+
132
+ horizontal_box {
133
+ label('Width')
134
+ spinbox(1, 1000) {
135
+ value <=> [self, :button_width, after_write: method(:rebuild_push_button)]
136
+ }
137
+ }
138
+
139
+ horizontal_box {
140
+ label('Height')
141
+ spinbox(1, 1000) {
142
+ value <=> [self, :button_height, after_write: method(:rebuild_push_button)]
143
+ }
144
+ }
145
+
146
+ horizontal_box {
147
+ label('Font')
148
+ font_button {
149
+ font <=> [self, :button_font_descriptor, after_write: method(:rebuild_push_button)]
150
+ }
151
+ }
152
+
153
+ horizontal_box {
154
+ label('Text Color')
155
+ color_button {
156
+ color <=> [self, :button_text_color, after_write: method(:rebuild_push_button)]
157
+ }
158
+ }
159
+
160
+ horizontal_box {
161
+ label('Background Color')
162
+ color_button {
163
+ color <=> [self, :button_background_fill, after_write: method(:rebuild_push_button)]
164
+ }
165
+ }
166
+
167
+ horizontal_box {
168
+ label('Border Color')
169
+ color_button {
170
+ color <=> [self, :button_border_stroke, after_write: method(:rebuild_push_button)]
171
+ }
172
+ }
173
+
174
+ horizontal_box {
175
+ label('Text X (0=centered)')
176
+ spinbox(0, 1000) {
177
+ value <=> [self, :button_text_x, on_read: ->(x) {x.nil? ? 0 : x}, on_write: ->(x) {x == 0 ? nil : x}, after_write: method(:rebuild_push_button)]
178
+ }
179
+ }
180
+
181
+ horizontal_box {
182
+ label('Text Y (0=centered)')
183
+ spinbox(0, 1000) {
184
+ value <=> [self, :button_text_y, on_read: ->(y) {y.nil? ? 0 : y}, on_write: ->(y) {y == 0 ? nil : y}, after_write: method(:rebuild_push_button)]
185
+ }
186
+ }
187
+ }
188
+
189
+ @push_button = push_button('Push',
190
+ width: button_width, height: button_height, font_descriptor: button_font_descriptor,
191
+ background_fill: button_background_fill, text_color: button_text_color, border_stroke: button_border_stroke,
192
+ text_x: button_text_x, text_y: button_text_y) {
193
+ on_mouse_up do
194
+ message_box('Button Pushed', 'Thank you for pushing the button!')
195
+ end
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }.show
201
+ end
202
+
203
+ # text label (area-based custom control) built with vector graphics on top of area.
204
+ #
205
+ # background_fill is transparent by default.
206
+ # background_fill can accept a single color or gradient stops just as per `fill` property in README.
207
+ # border_stroke is transparent by default.
208
+ # border_stroke can accept thickness and dashes in addition to color just as per `stroke` property in README.
209
+ def text_label(label_text,
210
+ width: 80, height: 30, font_descriptor: {},
211
+ background_fill: {a: 0}, text_color: :black, border_stroke: {a: 0},
212
+ text_x: nil, text_y: nil,
213
+ &content)
214
+ area { |the_area|
215
+ rectangle(1, 1, width, height) {
216
+ fill background_fill
217
+ }
218
+ rectangle(1, 1, width, height) {
219
+ stroke border_stroke
220
+ }
221
+
222
+ text_height = (font_descriptor[:size] || 12) * (OS.mac? ? 0.75 : 1.35)
223
+ text_width = (text_height * label_text.size) * (OS.mac? ? 0.75 : 0.60)
224
+ text_x ||= (width - text_width) / 2.0
225
+ text_y ||= (height - 4 - text_height) / 2.0
226
+ text(text_x, text_y, width) {
227
+ string(label_text) {
228
+ color text_color
229
+ font font_descriptor
230
+ }
231
+ }
232
+
233
+ content&.call(the_area)
234
+ }
235
+ end
236
+
237
+ # push button (area-based custom control) built with vector graphics on top of area.
238
+ #
239
+ # background_fill is white by default.
240
+ # background_fill can accept a single color or gradient stops just as per `fill` property in README.
241
+ # border_stroke is black by default.
242
+ # border_stroke can accept thickness and dashes in addition to color just as per `stroke` property in README.
243
+ # text_x and text_y are the offset of the button text in releation to its top-left corner
244
+ # When text_x, text_y are left nil, the text is automatically centered in the button area.
245
+ # Sometimes, the centering calculation is not perfect due to using a custom font, so
246
+ # in that case, pass in text_x, and text_y manually
247
+ #
248
+ # reuses the text_label custom control
249
+ def push_button(button_text,
250
+ width: 80, height: 30, font_descriptor: {},
251
+ background_fill: :white, text_color: :black, border_stroke: {r: 201, g: 201, b: 201},
252
+ text_x: nil, text_y: nil,
253
+ &content)
254
+ text_label(button_text,
255
+ width: width, height: height, font_descriptor: font_descriptor,
256
+ background_fill: background_fill, text_color: text_color, border_stroke: border_stroke,
257
+ text_x: text_x, text_y: text_y) { |the_area|
258
+
259
+ # dig into the_area content and grab elements to modify in mouse listeners below
260
+ background_rectangle = the_area.children[0]
261
+ button_string = the_area.children[2].children[0]
262
+
263
+ on_mouse_down do
264
+ background_rectangle.fill = {x0: 0, y0: 0, x1: 0, y1: height, stops: [{pos: 0, r: 72, g: 146, b: 247}, {pos: 1, r: 12, g: 85, b: 214}]}
265
+ button_string.color = :white
266
+ end
267
+
268
+ on_mouse_up do
269
+ background_rectangle.fill = background_fill
270
+ button_string.color = text_color
271
+ end
272
+
273
+ content&.call(the_area)
274
+ }
275
+ end
276
+ end
277
+
278
+ AreaBasedCustomControls.new.launch
@@ -17,7 +17,7 @@ window('Animal sounds', 300, 200) {
17
17
  table {
18
18
  text_column('Animal')
19
19
  text_column('Description')
20
-
20
+
21
21
  cell_rows data
22
22
  }
23
23
  }
@@ -11,7 +11,7 @@ Glimmer::LibUI.timer(1) do
11
11
  cpu_percentage_value = nil
12
12
  if OS.windows?
13
13
  cpu_percentage_raw_value = `wmic cpu get loadpercentage`
14
- cpu_percentage_value = cpu_percentage_raw_value.split("\n")[2].to_i
14
+ cpu_percentage_value = cpu_percentage_raw_value.split("\n").map(&:strip).find {|l| l.match(/^\d+$/)}.to_i
15
15
  elsif OS.mac?
16
16
  cpu_percentage_value = `ps -A -o %cpu | awk '{s+=$1} END {print s}'`.to_i
17
17
  elsif OS.linux?
@@ -21,6 +21,7 @@ class CustomDrawText
21
21
  @string.font = fb.font
22
22
  end
23
23
  }
24
+
24
25
  color_button { |cb|
25
26
  label 'Color'
26
27
 
@@ -28,13 +29,17 @@ class CustomDrawText
28
29
  @string.color = cb.color
29
30
  end
30
31
  }
31
- color_button { |cb|
32
- label 'Background'
33
-
34
- on_changed do
35
- @string.background = cb.color
36
- end
37
- }
32
+
33
+ unless OS.windows?
34
+ color_button { |cb|
35
+ label 'Background'
36
+
37
+ on_changed do
38
+ @string.background = cb.color
39
+ end
40
+ }
41
+ end
42
+
38
43
  combobox { |c|
39
44
  label 'Underline'
40
45
  items Glimmer::LibUI.enum_symbols(:underline).map(&:to_s).map {|word| word.split('_').map(&:capitalize).join(' ')}
@@ -44,6 +49,7 @@ class CustomDrawText
44
49
  @string.underline = c.selected_item.underscore
45
50
  end
46
51
  }
52
+
47
53
  combobox { |c|
48
54
  label 'Underline Built-In Color'
49
55
  items Glimmer::LibUI.enum_symbols(:underline_color).map(&:to_s).map(&:capitalize)
@@ -59,6 +65,7 @@ class CustomDrawText
59
65
  end
60
66
  end
61
67
  }
68
+
62
69
  @underline_custom_color_button = color_button {
63
70
  label 'Underline Custom Color'
64
71
 
@@ -22,6 +22,7 @@ class CustomDrawText
22
22
  @area.queue_redraw_all
23
23
  end
24
24
  }
25
+
25
26
  color_button { |cb|
26
27
  label 'Color'
27
28
 
@@ -30,14 +31,18 @@ class CustomDrawText
30
31
  @area.queue_redraw_all
31
32
  end
32
33
  }
33
- color_button { |cb|
34
- label 'Background'
35
-
36
- on_changed do
37
- @background = cb.color
38
- @area.queue_redraw_all
39
- end
40
- }
34
+
35
+ unless OS.windows?
36
+ color_button { |cb|
37
+ label 'Background'
38
+
39
+ on_changed do
40
+ @background = cb.color
41
+ @area.queue_redraw_all
42
+ end
43
+ }
44
+ end
45
+
41
46
  combobox { |c|
42
47
  label 'Underline'
43
48
  items Glimmer::LibUI.enum_symbols(:underline).map(&:to_s).map {|word| word.split('_').map(&:capitalize).join(' ')}
@@ -48,6 +53,7 @@ class CustomDrawText
48
53
  @area.queue_redraw_all
49
54
  end
50
55
  }
56
+
51
57
  combobox { |c|
52
58
  label 'Underline Built-In Color'
53
59
  items Glimmer::LibUI.enum_symbols(:underline_color).map(&:to_s).map(&:capitalize)
@@ -64,6 +70,7 @@ class CustomDrawText
64
70
  @area.queue_redraw_all
65
71
  end
66
72
  }
73
+
67
74
  @underline_custom_color_button = color_button {
68
75
  label 'Underline Custom Color'
69
76
 
@@ -13,13 +13,13 @@ def form_field(model, attribute)
13
13
  }
14
14
  end
15
15
 
16
- def address_form(address)
16
+ def address_form(address_model)
17
17
  form {
18
- form_field(address, :street)
19
- form_field(address, :p_o_box)
20
- form_field(address, :city)
21
- form_field(address, :state)
22
- form_field(address, :zip_code)
18
+ form_field(address_model, :street)
19
+ form_field(address_model, :p_o_box)
20
+ form_field(address_model, :city)
21
+ form_field(address_model, :state)
22
+ form_field(address_model, :zip_code)
23
23
  }
24
24
  end
25
25
 
@@ -32,10 +32,10 @@ def label_pair(model, attribute, value)
32
32
  }
33
33
  end
34
34
 
35
- def address(address)
35
+ def address(address_model)
36
36
  vertical_box {
37
- address.each_pair do |attribute, value|
38
- label_pair(address, attribute, value)
37
+ address_model.each_pair do |attribute, value|
38
+ label_pair(address_model, attribute, value)
39
39
  end
40
40
  }
41
41
  end
@@ -17,13 +17,13 @@ def form_field(model, property)
17
17
  }
18
18
  end
19
19
 
20
- def address_form(address)
20
+ def address_form(address_model)
21
21
  form {
22
- form_field(address, :street)
23
- form_field(address, :p_o_box)
24
- form_field(address, :city)
25
- form_field(address, :state)
26
- form_field(address, :zip_code)
22
+ form_field(address_model, :street)
23
+ form_field(address_model, :p_o_box)
24
+ form_field(address_model, :city)
25
+ form_field(address_model, :state)
26
+ form_field(address_model, :zip_code)
27
27
  }
28
28
  end
29
29
 
@@ -39,10 +39,10 @@ def label_pair(model, attribute, value)
39
39
  end
40
40
  end
41
41
 
42
- def address(address)
42
+ def address(address_model)
43
43
  vertical_box {
44
- address.each_pair do |attribute, value|
45
- label_pair(address, attribute, value)
44
+ address_model.each_pair do |attribute, value|
45
+ label_pair(address_model, attribute, value)
46
46
  end
47
47
  }
48
48
  end
Binary file
@@ -41,6 +41,7 @@ module Glimmer
41
41
  shine_data_binding
42
42
  property
43
43
  string
44
+ operation
44
45
  control
45
46
  shape
46
47
  ]
@@ -25,7 +25,7 @@ require 'glimmer/dsl/observe_expression'
25
25
 
26
26
  module Glimmer
27
27
  module DSL
28
- module SWT
28
+ module Libui
29
29
  class ObserveExpression < StaticExpression
30
30
  include TopLevelExpression
31
31
  include Glimmer::DSL::ObserveExpression
@@ -0,0 +1,47 @@
1
+ # Copyright (c) 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
+
22
+ require 'glimmer/dsl/expression'
23
+ require 'glimmer/libui/control_proxy'
24
+ require 'glimmer/libui/shape'
25
+ require 'glimmer/libui/attributed_string'
26
+
27
+ module Glimmer
28
+ module DSL
29
+ module Libui
30
+ class OperationExpression < Expression
31
+ def can_interpret?(parent, keyword, *args, &block)
32
+ (
33
+ parent.is_a?(Glimmer::LibUI::ControlProxy) or
34
+ parent.is_a?(Glimmer::LibUI::Shape) or
35
+ parent.is_a?(Glimmer::LibUI::AttributedString)
36
+ ) and
37
+ block.nil? and
38
+ parent.respond_to?(keyword, *args)
39
+ end
40
+
41
+ def interpret(parent, keyword, *args, &block)
42
+ parent.send(keyword, *args)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -35,11 +35,11 @@ module Glimmer
35
35
  parent.is_a?(Glimmer::LibUI::AttributedString)
36
36
  ) and
37
37
  block.nil? and
38
- parent.respond_to?(keyword, *args)
38
+ parent.respond_to?("#{keyword}=", *args)
39
39
  end
40
40
 
41
41
  def interpret(parent, keyword, *args, &block)
42
- parent.send(keyword, *args)
42
+ parent.send("#{keyword}=", *args)
43
43
  end
44
44
  end
45
45
  end
@@ -45,6 +45,7 @@ module Glimmer
45
45
  child.deregister_all_custom_listeners
46
46
  ::LibUI.send("box_delete", @libui, children.index(child))
47
47
  ControlProxy.control_proxies.delete(child)
48
+ children.delete(child)
48
49
  end
49
50
 
50
51
  private
@@ -30,6 +30,12 @@ module Glimmer
30
30
  #
31
31
  # Follows the Proxy Design Pattern
32
32
  class BackgroundColorColumnProxy < ControlProxy
33
+ class << self
34
+ def default_value
35
+ :white
36
+ end
37
+ end
38
+
33
39
  include Column
34
40
 
35
41
  def name
@@ -31,6 +31,12 @@ module Glimmer
31
31
  #
32
32
  # Follows the Proxy Design Pattern
33
33
  class ButtonColumnProxy < ControlProxy
34
+ class << self
35
+ def default_value
36
+ ''
37
+ end
38
+ end
39
+
34
40
  include Column
35
41
  include EnableableColumn
36
42
 
@@ -31,6 +31,12 @@ module Glimmer
31
31
  #
32
32
  # Follows the Proxy Design Pattern
33
33
  class CheckboxColumnProxy < ControlProxy
34
+ class << self
35
+ def default_value
36
+ false
37
+ end
38
+ end
39
+
34
40
  include Column
35
41
  include EditableColumn
36
42
 
@@ -32,6 +32,12 @@ module Glimmer
32
32
  #
33
33
  # Follows the Proxy Design Pattern
34
34
  class CheckboxTextColorColumnProxy < ControlProxy
35
+ class << self
36
+ def default_value
37
+ [false, '', :black]
38
+ end
39
+ end
40
+
35
41
  include Column
36
42
  include TripleColumn
37
43
  include EditableColumn
@@ -32,6 +32,12 @@ module Glimmer
32
32
  #
33
33
  # Follows the Proxy Design Pattern
34
34
  class CheckboxTextColumnProxy < ControlProxy
35
+ class << self
36
+ def default_value
37
+ [false, '']
38
+ end
39
+ end
40
+
35
41
  include Column
36
42
  include DualColumn
37
43
  include EditableColumn
@@ -30,6 +30,12 @@ module Glimmer
30
30
  #
31
31
  # Follows the Proxy Design Pattern
32
32
  class ImageColumnProxy < ControlProxy
33
+ class << self
34
+ def default_value
35
+ Glimmer::LibUI::ICON
36
+ end
37
+ end
38
+
33
39
  include Column
34
40
 
35
41
  private
@@ -32,6 +32,12 @@ module Glimmer
32
32
  #
33
33
  # Follows the Proxy Design Pattern
34
34
  class ImageTextColorColumnProxy < ControlProxy
35
+ class << self
36
+ def default_value
37
+ [Glimmer::LibUI::ICON, '', :black]
38
+ end
39
+ end
40
+
35
41
  include Column
36
42
  include TripleColumn
37
43
  include EditableColumn
@@ -32,6 +32,12 @@ module Glimmer
32
32
  #
33
33
  # Follows the Proxy Design Pattern
34
34
  class ImageTextColumnProxy < ControlProxy
35
+ class << self
36
+ def default_value
37
+ [Glimmer::LibUI::ICON, '']
38
+ end
39
+ end
40
+
35
41
  include Column
36
42
  include DualColumn
37
43
  include EditableColumn