glimmer-dsl-libui 0.4.16 → 0.4.20

Sign up to get free protection for your applications and to get access to all the features.
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