glimmer-dsl-libui 0.4.17 → 0.4.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +91 -30
- data/VERSION +1 -1
- data/examples/basic_table.rb +1 -1
- data/examples/custom_draw_text.rb +14 -7
- data/examples/custom_draw_text2.rb +15 -8
- data/glimmer-dsl-libui.gemspec +0 -0
- data/lib/glimmer/dsl/libui/dsl.rb +1 -0
- 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/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 +47 -33
- data/lib/glimmer/libui/data_bindable.rb +1 -1
- data/lib/glimmer-dsl-libui.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d56a2500e640c9f34f29daddc718a1adee47564da205fc7aff171047f90581f
|
4
|
+
data.tar.gz: 0067be097b14cf452323ce2faf79c244f99b525b24bd400b248119d8e2b24be4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c954f84c3565d6c4dd2fe5262b5d34749ee5d5efc94f9cbb351d1924b442474089bbf731f8d418cae332f44ff215d0a21a54ceded566667b6e558109e28ea82
|
7
|
+
data.tar.gz: e0fcf189174a77fe48f80cbae8af6d0028092c4b19e1c653243845d194bd923e42fa5ae29f2a43cbe684106dfbc107eb6193af63d0e16e79fa5b40d8b383a47e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.4.18
|
4
|
+
|
5
|
+
- Support setting `table` `cell_rows` after the `table` definition completed (e.g. `@table.cell_rows = data` after `table {}` curly braces closed already)
|
6
|
+
- Support adding to `table` `cell_rows` piecemeal after the `table` definition completed (e.g. `data.each { |row| @table.cell_rows << row }` after `table {}` curly braces closed already)
|
7
|
+
- Support notifying observers of control property changes when calling the `set_attribute` version of attribute writers, not just `attribute=`
|
8
|
+
- Hide background field in examples/custom_draw_text.rb on Windows since it is not supported there
|
9
|
+
- Fix issue with `quit_menu_item` click resulting in a stack overflow on Windows
|
10
|
+
|
3
11
|
## 0.4.17
|
4
12
|
|
5
13
|
- Remove Windows workaround of always adding an extra row at the bottom of `table` as it is no longer necessary after adding a better workaround (on Windows, add & remove row just after constructing `table` to get rid of double-delete glitch)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.4.
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for LibUI 0.4.18
|
2
2
|
## Prerequisite-Free Ruby Desktop Development GUI Library
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-libui.svg)](http://badge.fury.io/rb/glimmer-dsl-libui)
|
4
4
|
[![Join the chat at https://gitter.im/AndyObtiva/glimmer](https://badges.gitter.im/AndyObtiva/glimmer.svg)](https://gitter.im/AndyObtiva/glimmer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
@@ -506,7 +506,7 @@ gem install glimmer-dsl-libui
|
|
506
506
|
Or install via Bundler `Gemfile`:
|
507
507
|
|
508
508
|
```ruby
|
509
|
-
gem 'glimmer-dsl-libui', '~> 0.4.
|
509
|
+
gem 'glimmer-dsl-libui', '~> 0.4.18'
|
510
510
|
```
|
511
511
|
|
512
512
|
Test that installation worked by running the [Meta-Example](#examples):
|
@@ -6039,7 +6039,7 @@ Glimmer::LibUI.timer(1) do
|
|
6039
6039
|
cpu_percentage_value = nil
|
6040
6040
|
if OS.windows?
|
6041
6041
|
cpu_percentage_raw_value = `wmic cpu get loadpercentage`
|
6042
|
-
cpu_percentage_value = cpu_percentage_raw_value.split("\n")
|
6042
|
+
cpu_percentage_value = cpu_percentage_raw_value.split("\n").map(&:strip).find {|l| l.match(/^\d+$/)}.to_i
|
6043
6043
|
elsif OS.mac?
|
6044
6044
|
cpu_percentage_value = `ps -A -o %cpu | awk '{s+=$1} END {print s}'`.to_i
|
6045
6045
|
elsif OS.linux?
|
@@ -6110,6 +6110,7 @@ class CustomDrawText
|
|
6110
6110
|
@string.font = fb.font
|
6111
6111
|
end
|
6112
6112
|
}
|
6113
|
+
|
6113
6114
|
color_button { |cb|
|
6114
6115
|
label 'Color'
|
6115
6116
|
|
@@ -6117,13 +6118,17 @@ class CustomDrawText
|
|
6117
6118
|
@string.color = cb.color
|
6118
6119
|
end
|
6119
6120
|
}
|
6120
|
-
|
6121
|
-
|
6122
|
-
|
6123
|
-
|
6124
|
-
|
6125
|
-
|
6126
|
-
|
6121
|
+
|
6122
|
+
unless OS.windows?
|
6123
|
+
color_button { |cb|
|
6124
|
+
label 'Background'
|
6125
|
+
|
6126
|
+
on_changed do
|
6127
|
+
@string.background = cb.color
|
6128
|
+
end
|
6129
|
+
}
|
6130
|
+
end
|
6131
|
+
|
6127
6132
|
combobox { |c|
|
6128
6133
|
label 'Underline'
|
6129
6134
|
items Glimmer::LibUI.enum_symbols(:underline).map(&:to_s).map {|word| word.split('_').map(&:capitalize).join(' ')}
|
@@ -6133,12 +6138,36 @@ class CustomDrawText
|
|
6133
6138
|
@string.underline = c.selected_item.underscore
|
6134
6139
|
end
|
6135
6140
|
}
|
6141
|
+
|
6142
|
+
combobox { |c|
|
6143
|
+
label 'Underline Built-In Color'
|
6144
|
+
items Glimmer::LibUI.enum_symbols(:underline_color).map(&:to_s).map(&:capitalize)
|
6145
|
+
selected 'Custom'
|
6146
|
+
|
6147
|
+
on_selected do
|
6148
|
+
@underline_custom_color_button.enabled = c.selected_item == 'Custom'
|
6149
|
+
if c.selected_item == 'Custom'
|
6150
|
+
@string.underline_color = @underline_custom_color_button.color
|
6151
|
+
else
|
6152
|
+
@string.underline_color = c.selected_item.underscore
|
6153
|
+
@underline_custom_color_button.color = :black
|
6154
|
+
end
|
6155
|
+
end
|
6156
|
+
}
|
6157
|
+
|
6158
|
+
@underline_custom_color_button = color_button {
|
6159
|
+
label 'Underline Custom Color'
|
6160
|
+
|
6161
|
+
on_changed do
|
6162
|
+
@string.underline_color = @underline_custom_color_button.color
|
6163
|
+
end
|
6164
|
+
}
|
6136
6165
|
}
|
6137
6166
|
|
6138
6167
|
area {
|
6139
|
-
text { # default arguments for x, y, and width are (0, 0, area_draw_params[:area_width])
|
6168
|
+
text { # default arguments for x, y, and width are (0, 0, area_draw_params[:area_width] - 2*x)
|
6140
6169
|
# align :left # default alignment
|
6141
|
-
|
6170
|
+
|
6142
6171
|
@string = string {
|
6143
6172
|
' At last Ygramul sensed that something was coming toward ' \
|
6144
6173
|
'her. With the speed of lightning, she turned about, confronting ' \
|
@@ -6183,62 +6212,94 @@ require 'glimmer-dsl-libui'
|
|
6183
6212
|
# The English version, translated by Ralph Manheim, was published in 1983.
|
6184
6213
|
class CustomDrawText
|
6185
6214
|
include Glimmer
|
6186
|
-
|
6215
|
+
|
6187
6216
|
def launch
|
6188
6217
|
window('Michael Ende (1929-1995) The Neverending Story', 600, 500) {
|
6189
6218
|
margined true
|
6190
|
-
|
6219
|
+
|
6191
6220
|
vertical_box {
|
6192
6221
|
form {
|
6193
6222
|
stretchy false
|
6194
|
-
|
6223
|
+
|
6195
6224
|
font_button { |fb|
|
6196
6225
|
label 'Font'
|
6197
|
-
|
6226
|
+
|
6198
6227
|
on_changed do
|
6199
6228
|
@font = fb.font
|
6200
6229
|
@area.queue_redraw_all
|
6201
6230
|
end
|
6202
6231
|
}
|
6232
|
+
|
6203
6233
|
color_button { |cb|
|
6204
6234
|
label 'Color'
|
6205
|
-
|
6235
|
+
|
6206
6236
|
on_changed do
|
6207
6237
|
@color = cb.color
|
6208
6238
|
@area.queue_redraw_all
|
6209
6239
|
end
|
6210
6240
|
}
|
6211
|
-
|
6212
|
-
|
6213
|
-
|
6214
|
-
|
6215
|
-
|
6216
|
-
|
6217
|
-
|
6218
|
-
|
6241
|
+
|
6242
|
+
unless OS.windows?
|
6243
|
+
color_button { |cb|
|
6244
|
+
label 'Background'
|
6245
|
+
|
6246
|
+
on_changed do
|
6247
|
+
@background = cb.color
|
6248
|
+
@area.queue_redraw_all
|
6249
|
+
end
|
6250
|
+
}
|
6251
|
+
end
|
6252
|
+
|
6219
6253
|
combobox { |c|
|
6220
6254
|
label 'Underline'
|
6221
6255
|
items Glimmer::LibUI.enum_symbols(:underline).map(&:to_s).map {|word| word.split('_').map(&:capitalize).join(' ')}
|
6222
6256
|
selected 'None'
|
6223
|
-
|
6257
|
+
|
6224
6258
|
on_selected do
|
6225
6259
|
@underline = c.selected_item.underscore
|
6226
6260
|
@area.queue_redraw_all
|
6227
6261
|
end
|
6228
6262
|
}
|
6263
|
+
|
6264
|
+
combobox { |c|
|
6265
|
+
label 'Underline Built-In Color'
|
6266
|
+
items Glimmer::LibUI.enum_symbols(:underline_color).map(&:to_s).map(&:capitalize)
|
6267
|
+
selected 'Custom'
|
6268
|
+
|
6269
|
+
on_selected do
|
6270
|
+
@underline_custom_color_button.enabled = c.selected_item == 'Custom'
|
6271
|
+
if c.selected_item == 'Custom'
|
6272
|
+
@underline_color = @underline_custom_color_button.color
|
6273
|
+
else
|
6274
|
+
@underline_color = c.selected_item.underscore
|
6275
|
+
@underline_custom_color_button.color = :black
|
6276
|
+
end
|
6277
|
+
@area.queue_redraw_all
|
6278
|
+
end
|
6279
|
+
}
|
6280
|
+
|
6281
|
+
@underline_custom_color_button = color_button {
|
6282
|
+
label 'Underline Custom Color'
|
6283
|
+
|
6284
|
+
on_changed do
|
6285
|
+
@underline_color = @underline_custom_color_button.color
|
6286
|
+
@area.queue_redraw_all
|
6287
|
+
end
|
6288
|
+
}
|
6229
6289
|
}
|
6230
|
-
|
6290
|
+
|
6231
6291
|
@area = area {
|
6232
6292
|
on_draw do |area_draw_params|
|
6233
|
-
text { # default arguments for x, y, and width are (0, 0, area_draw_params[:area_width])
|
6293
|
+
text { # default arguments for x, y, and width are (0, 0, area_draw_params[:area_width] - 2*x)
|
6234
6294
|
# align :left # default alignment
|
6235
|
-
|
6295
|
+
|
6236
6296
|
string {
|
6237
6297
|
font @font
|
6238
6298
|
color @color
|
6239
6299
|
background @background
|
6240
6300
|
underline @underline
|
6241
|
-
|
6301
|
+
underline_color @underline_color
|
6302
|
+
|
6242
6303
|
' At last Ygramul sensed that something was coming toward ' \
|
6243
6304
|
'her. With the speed of lightning, she turned about, confronting ' \
|
6244
6305
|
'Atreyu with an enormous steel-blue face. Her single eye had a ' \
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.18
|
data/examples/basic_table.rb
CHANGED
@@ -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
|
|
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
|
@@ -70,7 +70,8 @@ module Glimmer
|
|
70
70
|
else
|
71
71
|
new_color = Glimmer::LibUI.interpret_color(args)
|
72
72
|
if new_color != @fill
|
73
|
-
|
73
|
+
# TODO consider replacing unobserve with observer_registration.deregister
|
74
|
+
@fill_observer&.unobserve(@fill, attribute_writer_type: [:attribute=, :set_attribute]) if @fill
|
74
75
|
@fill = new_color
|
75
76
|
request_auto_redraw
|
76
77
|
end
|
@@ -79,7 +80,7 @@ module Glimmer
|
|
79
80
|
@fill_observer ||= Glimmer::DataBinding::Observer.proc do
|
80
81
|
request_auto_redraw
|
81
82
|
end
|
82
|
-
@fill_observer.observe(@fill)
|
83
|
+
@fill_observer.observe(@fill, attribute_writer_type: [:attribute=, :set_attribute])
|
83
84
|
end
|
84
85
|
end
|
85
86
|
alias fill= fill
|
@@ -98,7 +99,8 @@ module Glimmer
|
|
98
99
|
else
|
99
100
|
new_color = Glimmer::LibUI.interpret_color(args)
|
100
101
|
if new_color != @stroke
|
101
|
-
|
102
|
+
# TODO consider replacing unobserve with observer_registration.deregister
|
103
|
+
@stroke_observer&.unobserve(@stroke, attribute_writer_type: [:attribute=, :set_attribute]) if @stroke
|
102
104
|
@stroke = Glimmer::LibUI.interpret_color(args)
|
103
105
|
request_auto_redraw
|
104
106
|
end
|
@@ -107,7 +109,7 @@ module Glimmer
|
|
107
109
|
@stroke_observer ||= Glimmer::DataBinding::Observer.proc do
|
108
110
|
request_auto_redraw
|
109
111
|
end
|
110
|
-
@stroke_observer.observe(@stroke)
|
112
|
+
@stroke_observer.observe(@stroke, attribute_writer_type: [:attribute=, :set_attribute])
|
111
113
|
end
|
112
114
|
end
|
113
115
|
alias stroke= stroke
|
@@ -48,6 +48,8 @@ module Glimmer
|
|
48
48
|
@enabled = true
|
49
49
|
@columns = []
|
50
50
|
@cell_rows = []
|
51
|
+
@last_cell_rows = []
|
52
|
+
register_cell_rows_observer
|
51
53
|
window_proxy.on_destroy do
|
52
54
|
# the following unless condition is an exceptional condition stumbled upon that fails freeing the table model
|
53
55
|
::LibUI.free_table_model(@model) unless @destroyed && parent_proxy.is_a?(Box)
|
@@ -75,7 +77,8 @@ module Glimmer
|
|
75
77
|
|
76
78
|
def destroy
|
77
79
|
super
|
78
|
-
|
80
|
+
# TODO consider replacing unobserve with observer_registration.deregister
|
81
|
+
@cell_rows_observer&.unobserve(self, :cell_rows, recursive: true, ignore_frozen: true, attribute_writer_type: [:attribute=, :set_attribute])
|
79
82
|
@destroyed = true
|
80
83
|
end
|
81
84
|
|
@@ -86,31 +89,6 @@ module Glimmer
|
|
86
89
|
if rows != @cell_rows
|
87
90
|
@cell_rows = rows
|
88
91
|
@cell_rows = @cell_rows.to_a if @cell_rows.is_a?(Enumerator)
|
89
|
-
@last_cell_rows ||= array_deep_clone(@cell_rows)
|
90
|
-
@cell_rows_observer ||= Glimmer::DataBinding::Observer.proc do |new_cell_rows|
|
91
|
-
if @cell_rows.size < @last_cell_rows.size && @last_cell_rows.include_all?(*@cell_rows)
|
92
|
-
@last_cell_rows.array_diff_indexes(@cell_rows).reverse.each do |row|
|
93
|
-
::LibUI.table_model_row_deleted(model, row) if model && row
|
94
|
-
notify_custom_listeners('on_changed', row, :deleted, @last_cell_rows[row])
|
95
|
-
end
|
96
|
-
elsif @cell_rows.size > @last_cell_rows.size && @cell_rows.include_all?(*@last_cell_rows)
|
97
|
-
@cell_rows.array_diff_indexes(@last_cell_rows).each do |row|
|
98
|
-
::LibUI.table_model_row_inserted(model, row) if model && row
|
99
|
-
notify_custom_listeners('on_changed', row, :inserted, @cell_rows[row])
|
100
|
-
end
|
101
|
-
else
|
102
|
-
@cell_rows.each_with_index do |new_row_data, row|
|
103
|
-
if new_row_data != @last_cell_rows[row]
|
104
|
-
::LibUI.table_model_row_changed(model, row) if model && row
|
105
|
-
notify_custom_listeners('on_changed', row, :changed, @cell_rows[row])
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
@last_last_cell_rows = array_deep_clone(@last_cell_rows)
|
110
|
-
@last_cell_rows = array_deep_clone(@cell_rows)
|
111
|
-
end.tap do |cell_rows_observer|
|
112
|
-
cell_rows_observer.observe(self, :cell_rows, recursive: true, ignore_frozen: true)
|
113
|
-
end
|
114
92
|
end
|
115
93
|
@cell_rows
|
116
94
|
end
|
@@ -153,13 +131,13 @@ module Glimmer
|
|
153
131
|
new_value = new_value.to_a if new_value.is_a?(Enumerator)
|
154
132
|
if model_binding.binding_options[:column_attributes] || (!new_value.empty? && !new_value.first.is_a?(Array))
|
155
133
|
@model_attribute_array_observer_registration&.deregister
|
156
|
-
@model_attribute_array_observer_registration = model_attribute_observer.observe(new_value, @column_attributes, ignore_frozen: true)
|
134
|
+
@model_attribute_array_observer_registration = model_attribute_observer.observe(new_value, @column_attributes, ignore_frozen: true, attribute_writer_type: [:attribute=, :set_attribute])
|
157
135
|
model_attribute_observer.add_dependent(model_attribute_observer_registration => @model_attribute_array_observer_registration)
|
158
136
|
end
|
159
137
|
# TODO look if multiple notifications are happening as a result of observing array and observing model binding
|
160
138
|
send("#{property}=", new_value) unless @last_cell_rows == new_value
|
161
139
|
end
|
162
|
-
model_attribute_observer_registration = model_attribute_observer.observe(model_binding)
|
140
|
+
model_attribute_observer_registration = model_attribute_observer.observe(model_binding, attribute_writer_type: [:attribute=, :set_attribute])
|
163
141
|
model_attribute_observer.call # initial update
|
164
142
|
data_binding_model_attribute_observer_registrations << model_attribute_observer_registration
|
165
143
|
model_attribute_observer
|
@@ -313,11 +291,7 @@ module Glimmer
|
|
313
291
|
|
314
292
|
if !@applied_windows_fix && OS.windows?
|
315
293
|
@applied_windows_fix = true
|
316
|
-
|
317
|
-
if new_row
|
318
|
-
@cell_rows << new_row
|
319
|
-
@cell_rows.pop
|
320
|
-
end
|
294
|
+
apply_windows_fix
|
321
295
|
end
|
322
296
|
end
|
323
297
|
|
@@ -325,6 +299,46 @@ module Glimmer
|
|
325
299
|
@next_column_index ||= -1
|
326
300
|
@next_column_index += 1
|
327
301
|
end
|
302
|
+
|
303
|
+
def register_cell_rows_observer
|
304
|
+
@cell_rows_observer = Glimmer::DataBinding::Observer.proc do |new_cell_rows|
|
305
|
+
if @cell_rows.size < @last_cell_rows.size && @last_cell_rows.include_all?(*@cell_rows)
|
306
|
+
@last_cell_rows.array_diff_indexes(@cell_rows).reverse.each do |row|
|
307
|
+
::LibUI.table_model_row_deleted(model, row) if model && row
|
308
|
+
notify_custom_listeners('on_changed', row, :deleted, @last_cell_rows[row])
|
309
|
+
end
|
310
|
+
elsif @cell_rows.size > @last_cell_rows.size && @cell_rows.include_all?(*@last_cell_rows)
|
311
|
+
@cell_rows.array_diff_indexes(@last_cell_rows).each do |row|
|
312
|
+
::LibUI.table_model_row_inserted(model, row) if model && row
|
313
|
+
notify_custom_listeners('on_changed', row, :inserted, @cell_rows[row])
|
314
|
+
end
|
315
|
+
else
|
316
|
+
@cell_rows.each_with_index do |new_row_data, row|
|
317
|
+
if new_row_data != @last_cell_rows[row]
|
318
|
+
::LibUI.table_model_row_changed(model, row) if model && row
|
319
|
+
notify_custom_listeners('on_changed', row, :changed, @cell_rows[row])
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
@last_last_cell_rows = array_deep_clone(@last_cell_rows)
|
324
|
+
@last_cell_rows = array_deep_clone(@cell_rows)
|
325
|
+
if !@applied_windows_fix_on_first_cell_rows_update && OS.windows?
|
326
|
+
@applied_windows_fix_on_first_cell_rows_update = true
|
327
|
+
apply_windows_fix
|
328
|
+
end
|
329
|
+
end
|
330
|
+
@cell_rows_observer_registration = @cell_rows_observer.observe(self, :cell_rows, recursive: true, ignore_frozen: true, attribute_writer_type: [:attribute=, :set_attribute])
|
331
|
+
end
|
332
|
+
|
333
|
+
def apply_windows_fix
|
334
|
+
Glimmer::LibUI.queue_main do
|
335
|
+
new_row = @columns&.select {|column| column.is_a?(Column)}&.map {|column| column.class.default_value}
|
336
|
+
if new_row
|
337
|
+
@cell_rows << new_row
|
338
|
+
@cell_rows.pop
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
328
342
|
end
|
329
343
|
end
|
330
344
|
end
|
@@ -46,7 +46,7 @@ module Glimmer
|
|
46
46
|
new_value = model_binding.evaluate_property
|
47
47
|
send("#{property}=", new_value) unless send(property) == new_value
|
48
48
|
end
|
49
|
-
observer_registration = model_attribute_observer.observe(model_binding)
|
49
|
+
observer_registration = model_attribute_observer.observe(model_binding, attribute_writer_type: [:attribute=, :set_attribute])
|
50
50
|
model_attribute_observer.call # initial update
|
51
51
|
data_binding_model_attribute_observer_registrations << observer_registration
|
52
52
|
observer_registration
|
data/lib/glimmer-dsl-libui.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-libui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: glimmer
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.5.
|
19
|
+
version: 2.5.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.5.
|
26
|
+
version: 2.5.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: os
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -334,6 +334,7 @@ files:
|
|
334
334
|
- lib/glimmer/dsl/libui/listener_expression.rb
|
335
335
|
- lib/glimmer/dsl/libui/observe_expression.rb
|
336
336
|
- lib/glimmer/dsl/libui/open_file_expression.rb
|
337
|
+
- lib/glimmer/dsl/libui/operation_expression.rb
|
337
338
|
- lib/glimmer/dsl/libui/property_expression.rb
|
338
339
|
- lib/glimmer/dsl/libui/save_file_expression.rb
|
339
340
|
- lib/glimmer/dsl/libui/shape_expression.rb
|