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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/README.md +451 -68
- data/VERSION +1 -1
- data/examples/area_based_custom_controls.rb +278 -0
- data/examples/basic_table.rb +1 -1
- data/examples/cpu_percentage.rb +1 -1
- data/examples/custom_draw_text.rb +14 -7
- data/examples/custom_draw_text2.rb +15 -8
- data/examples/method_based_custom_keyword.rb +9 -9
- data/examples/method_based_custom_keyword2.rb +9 -9
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/dsl/libui/dsl.rb +1 -0
- data/lib/glimmer/dsl/libui/observe_expression.rb +1 -1
- data/lib/glimmer/dsl/libui/operation_expression.rb +47 -0
- data/lib/glimmer/dsl/libui/property_expression.rb +2 -2
- data/lib/glimmer/libui/control_proxy/box.rb +1 -0
- data/lib/glimmer/libui/control_proxy/column/background_color_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/button_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/checkbox_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/checkbox_text_color_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/checkbox_text_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/image_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/image_text_color_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/image_text_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/progress_bar_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/text_color_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column/text_column_proxy.rb +6 -0
- data/lib/glimmer/libui/control_proxy/column.rb +7 -0
- data/lib/glimmer/libui/control_proxy/form_proxy.rb +1 -0
- data/lib/glimmer/libui/control_proxy/image_proxy.rb +1 -0
- data/lib/glimmer/libui/control_proxy/menu_item_proxy/quit_menu_item_proxy.rb +0 -1
- data/lib/glimmer/libui/control_proxy/path_proxy.rb +6 -4
- data/lib/glimmer/libui/control_proxy/table_proxy.rb +51 -28
- data/lib/glimmer/libui/control_proxy.rb +1 -0
- data/lib/glimmer/libui/data_bindable.rb +1 -1
- data/lib/glimmer/libui/shape/bezier.rb +20 -3
- data/lib/glimmer/libui/shape/line.rb +23 -3
- data/lib/glimmer-dsl-libui.rb +6 -0
- metadata +23 -6
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
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
|
data/examples/basic_table.rb
CHANGED
data/examples/cpu_percentage.rb
CHANGED
@@ -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")
|
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
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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(
|
16
|
+
def address_form(address_model)
|
17
17
|
form {
|
18
|
-
form_field(
|
19
|
-
form_field(
|
20
|
-
form_field(
|
21
|
-
form_field(
|
22
|
-
form_field(
|
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(
|
35
|
+
def address(address_model)
|
36
36
|
vertical_box {
|
37
|
-
|
38
|
-
label_pair(
|
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(
|
20
|
+
def address_form(address_model)
|
21
21
|
form {
|
22
|
-
form_field(
|
23
|
-
form_field(
|
24
|
-
form_field(
|
25
|
-
form_field(
|
26
|
-
form_field(
|
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(
|
42
|
+
def address(address_model)
|
43
43
|
vertical_box {
|
44
|
-
|
45
|
-
label_pair(
|
44
|
+
address_model.each_pair do |attribute, value|
|
45
|
+
label_pair(address_model, attribute, value)
|
46
46
|
end
|
47
47
|
}
|
48
48
|
end
|
data/glimmer-dsl-libui.gemspec
CHANGED
Binary file
|
@@ -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
|
@@ -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 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
|