glimmer-dsl-libui 0.0.21 → 0.0.25

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a7491ce7cea65fb7025868e9fb2db5c4e6187ba269a177879e4276e50fa3d9f
4
- data.tar.gz: 9b47cab46d79af36dd06b6914570f30662540b7b8c1e634dc326ed9af32ad041
3
+ metadata.gz: ef6b80413ffc1933a0e36dd536f06d67538002ef7777aa682ef19f7ef01f7b28
4
+ data.tar.gz: fb188b7bb041bdaf0a95aee368f339268459d41de7aa76947fa1504b56d465d2
5
5
  SHA512:
6
- metadata.gz: 692870dd49de81f7d2840579f0de3b7bd414bda277db56a4c28597febd012446c6b8b098bf56e5afe8c9b17f68547bb24bceaba45e15c3e4fd3ca041e5c37d2a
7
- data.tar.gz: 289ede334bc53171a6a028dca1d03e794d0e81329621f2278365bfdcb2079fd200da21161d4aed6cf8486f382c4e0b04afadf3883ba0e07790878dbfd8fad334
6
+ metadata.gz: 1530e1e986263701efebab10a2eff549bcadb7bc23c8e67cdde4c622822b9c6a54d74d9b2ccffb700f48021d1f34b6b10b683d85d0062202055b4d7b20acfb2f
7
+ data.tar.gz: 89df7b4eab9bdd449ead5ac40a92fa1f7e5b56a72191dc649bc53df96994a733d048eb99f1710149a1e26a87123e45413f2d4d973704ca0e16406a43764ce0c2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.25
4
+
5
+ - New examples/basic_table_checkbox_text.rb
6
+ - Support table `checkbox_text_column`
7
+
8
+ ## 0.0.24
9
+
10
+ - New examples/basic_table_checkbox.rb
11
+ - Support table `checkbox_column`
12
+ - Improve support for table row deletion upon actual `cell_rows` deletion by handling multiple-row deletion not just single-row deletion
13
+
14
+ ## 0.0.23
15
+
16
+ - Have `image` not require `width` and `height` if it only has one `image_part` (defaults to `image_part` `width` and `height`)
17
+ - Upgrade to LibUI version 0.0.10
18
+
19
+ ## 0.0.22
20
+
21
+ - New examples/basic_table_button.rb
22
+ - Support table `button_column`
23
+ - Support table `button_column` `enabled` property
24
+ - Support `on_clicked` listener for `button_column`
25
+ - Support automatic table cell value reading management (table row deletion upon actual `cell_rows` deletion due to implicit data-binding)
26
+
3
27
  ## 0.0.21
4
28
 
5
29
  - New examples/editable_column_table_image_text.rb
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.0.21
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.0.25
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
  [![Maintainability](https://api.codeclimate.com/v1/badges/ce2853efdbecf6ebdc73/maintainability)](https://codeclimate.com/github/AndyObtiva/glimmer-dsl-libui/maintainability)
@@ -43,7 +43,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
43
43
 
44
44
  ## Table of Contents
45
45
 
46
- - [Glimmer DSL for LibUI 0.0.21](#-glimmer-dsl-for-libui-0021)
46
+ - [Glimmer DSL for LibUI 0.0.25](#-glimmer-dsl-for-libui-0025)
47
47
  - [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
48
48
  - [Usage](#usage)
49
49
  - [API](#api)
@@ -74,6 +74,9 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
74
74
  - [Editable Column Table](#editable-column-table)
75
75
  - [Basic Table Image](#basic-table-image)
76
76
  - [Basic Table Image Text](#basic-table-image-text)
77
+ - [Basic Table Button](#basic-table-button)
78
+ - [Basic Table Checkbox](#basic-table-checkbox)
79
+ - [Basic Table Checkbox Text](#basic-table-checkbox-text)
77
80
  - [Contributing to glimmer-dsl-libui](#contributing-to-glimmer-dsl-libui)
78
81
  - [Help](#help)
79
82
  - [Issues](#issues)
@@ -161,7 +164,7 @@ gem install glimmer-dsl-libui
161
164
  Or install via Bundler `Gemfile`:
162
165
 
163
166
  ```ruby
164
- gem 'glimmer-dsl-libui', '~> 0.0.21'
167
+ gem 'glimmer-dsl-libui', '~> 0.0.25'
165
168
  ```
166
169
 
167
170
  Add `require 'glimmer-dsl-libui'` at the top, and then `include Glimmer` into the top-level main object for testing or into an actual class for serious usage.
@@ -218,7 +221,10 @@ Control(Args) | Properties | Listeners
218
221
  ------------- | ---------- | ---------
219
222
  `about_menu_item` | None | `on_clicked`
220
223
  `button(text as String)` | `text` (`String`) | `on_clicked`
224
+ `button_column(name as String)` | `enabled` (Boolean) | None
221
225
  `checkbox(text as String)` | `checked` (Boolean), `text` (`String`) | `on_toggled`
226
+ `checkbox_column(name as String)` | None | None
227
+ `checkbox_text_column(name as String)` | `editable` (Boolean) | None
222
228
  `combobox` | `items` (`Array` of `String`), `selected` (`Integer`) | `on_selected`
223
229
  `color_button` | `color` (Array of `red` as `Float`, `green` as `Float`, `blue` as `Float`, `alpha` as `Float`), `red` as `Float`, `green` as `Float`, `blue` as `Float`, `alpha` as `Float` | `on_changed`
224
230
  `date_picker` | `time` (`Hash` of keys: `sec` as `Integer`, `min` as `Integer`, `hour` as `Integer`, `mday` as `Integer`, `mon` as `Integer`, `year` as `Integer`, `wday` as `Integer`, `yday` as `Integer`, `dst` as Boolean) | `on_changed`
@@ -251,7 +257,7 @@ Control(Args) | Properties | Listeners
251
257
  `tab` | `margined` (Boolean), `num_pages` (`Integer`) | None
252
258
  `tab_item(name as String)` | `index` [read-only] (`Integer`), `margined` (Boolean), `name` [read-only] (`String`) | None
253
259
  `table` | `cell_rows` (`Array` (rows) of `Arrays` (row columns) of cell values (e.g. `String` values for `text_column` cells or `Array` of `image`/`String` for `image_text_column`)), `editable` as Boolean | None
254
- `text_column(name as String)` | `editable` as Boolean | None
260
+ `text_column(name as String)` | `editable` (Boolean) | None
255
261
  `time_picker` | `time` (`Hash` of keys: `sec` as `Integer`, `min` as `Integer`, `hour` as `Integer`, `mday` as `Integer`, `mon` as `Integer`, `year` as `Integer`, `wday` as `Integer`, `yday` as `Integer`, `dst` as Boolean) | `on_changed`
256
262
  `vertical_box` | `padded` (Boolean) | None
257
263
  `window(title as String, width as Integer, height as Integer, has_menubar as Boolean)` | `borderless` (Boolean), `content_size` (width `Numeric`, height `Numeric`), `fullscreen` (Boolean), `margined` (Boolean), `title` (`String`) | `on_closing`, `on_content_size_changed`, `on_destroy`
@@ -318,7 +324,9 @@ Control(Args) | Properties | Listeners
318
324
  - Smart defaults for `grid` child attributes are `left` (`0`), `top` (`0`), `xspan` (`1`), `yspan` (`1`), `hexpand` (`false`), `halign` (`0`), `vexpand` (`false`), and `valign` (`0`)
319
325
  - The `table` control automatically constructs required `TableModelHandler`, `TableModel`, and `TableParams`, calculating all their arguments from `cell_rows` and `editable` properties (e.g. `NumRows`) as well as nested columns (e.g. `text_column`)
320
326
  - Table model instances are automatically freed from memory after `window` is destroyed.
327
+ - Table `cell_rows` data has implicit data-binding to table cell values. When deleting data from `cell_rows` array, then actual rows from the `table` are automatically deleted.
321
328
  - `image` instances are automatically freed from memory after `window` is destroyed.
329
+ - `image` `width` and `height` can be left off if it has one `image_part` only as they default to the same `width` and `height` of the `image_part`
322
330
 
323
331
  ### API Gotchas
324
332
 
@@ -1807,7 +1815,7 @@ data = [
1807
1815
  %w[cat meow],
1808
1816
  %w[dog woof],
1809
1817
  %w[checken cock-a-doodle-doo],
1810
- %w[hourse neigh],
1818
+ %w[horse neigh],
1811
1819
  %w[cow moo]
1812
1820
  ]
1813
1821
 
@@ -1865,7 +1873,7 @@ data = [
1865
1873
  %w[cat meow],
1866
1874
  %w[dog woof],
1867
1875
  %w[chicken cock-a-doodle-doo],
1868
- %w[hourse neigh],
1876
+ %w[horse neigh],
1869
1877
  %w[cow moo]
1870
1878
  ]
1871
1879
 
@@ -1924,7 +1932,7 @@ data = [
1924
1932
  %w[cat meow],
1925
1933
  %w[dog woof],
1926
1934
  %w[chicken cock-a-doodle-doo],
1927
- %w[hourse neigh],
1935
+ %w[horse neigh],
1928
1936
  %w[cow moo]
1929
1937
  ]
1930
1938
 
@@ -1982,7 +1990,7 @@ data = [
1982
1990
  %w[cat calm meow],
1983
1991
  %w[dog loyal woof],
1984
1992
  %w[chicken bird cock-a-doodle-doo],
1985
- %w[hourse fast neigh],
1993
+ %w[horse fast neigh],
1986
1994
  %w[cow slow moo]
1987
1995
  ]
1988
1996
 
@@ -2140,7 +2148,7 @@ IMAGE_ROWS = []
2140
2148
  data = canvas.to_rgba_stream
2141
2149
  width = canvas.width
2142
2150
  height = canvas.height
2143
- img = image(width, height) {
2151
+ img = image {
2144
2152
  image_part(data, width, height, width * 4)
2145
2153
  }
2146
2154
  IMAGE_ROWS << [img] # array of one column cell
@@ -2218,23 +2226,19 @@ IMAGE_ROWS = []
2218
2226
  data = canvas.to_rgba_stream
2219
2227
  width = canvas.width
2220
2228
  height = canvas.height
2221
- img = image(width, height) {
2229
+ img = image {
2222
2230
  image_part(data, width, height, width * 4)
2223
2231
  }
2224
2232
  text = url.sub('https://www.ghibli.jp/gallery/thumb-redturtle', '').sub('.png', '')
2225
- IMAGE_ROWS << [[img, text], text, text, [img, text]]
2233
+ IMAGE_ROWS << [[img, text], [img, text]] # cell values are dual-element arrays
2226
2234
  rescue StandardError => e
2227
2235
  warn url, e.message
2228
2236
  end
2229
2237
 
2230
- window('The Red Turtle', 900, 350) {
2238
+ window('The Red Turtle', 670, 350) {
2231
2239
  horizontal_box {
2232
2240
  table {
2233
2241
  image_text_column('image/number')
2234
- text_column('number')
2235
- text_column('number (editable)') {
2236
- editable true
2237
- }
2238
2242
  image_text_column('image/number (editable)') {
2239
2243
  editable true
2240
2244
  }
@@ -2245,6 +2249,168 @@ window('The Red Turtle', 900, 350) {
2245
2249
  }.show
2246
2250
  ```
2247
2251
 
2252
+ ### Basic Table Button
2253
+
2254
+ [examples/basic_table_button.rb](examples/basic_table_button.rb)
2255
+
2256
+ Run with this command from the root of the project if you cloned the project:
2257
+
2258
+ ```
2259
+ ruby -r './lib/glimmer-dsl-libui' examples/basic_table_button.rb
2260
+ ```
2261
+
2262
+ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui):
2263
+
2264
+ ```
2265
+ ruby -r glimmer-dsl-libui -e "require 'examples/basic_table_button'"
2266
+ ```
2267
+
2268
+ Mac
2269
+
2270
+ ![glimmer-dsl-libui-mac-basic-table-button.png](images/glimmer-dsl-libui-mac-basic-table-button.png)
2271
+ ![glimmer-dsl-libui-mac-basic-table-button-deleted.png](images/glimmer-dsl-libui-mac-basic-table-button-deleted.png)
2272
+
2273
+ Linux
2274
+
2275
+ ![glimmer-dsl-libui-linux-basic-table-button.png](images/glimmer-dsl-libui-linux-basic-table-button.png)
2276
+ ![glimmer-dsl-libui-linux-basic-table-button-deleted.png](images/glimmer-dsl-libui-linux-basic-table-button-deleted.png)
2277
+
2278
+ New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
2279
+
2280
+ ```ruby
2281
+ require 'glimmer-dsl-libui'
2282
+
2283
+ include Glimmer
2284
+
2285
+ data = [
2286
+ %w[cat meow delete],
2287
+ %w[dog woof delete],
2288
+ %w[chicken cock-a-doodle-doo delete],
2289
+ %w[horse neigh delete],
2290
+ %w[cow moo delete]
2291
+ ]
2292
+
2293
+ window('Animal sounds', 300, 200) {
2294
+ horizontal_box {
2295
+ table {
2296
+ text_column('Animal')
2297
+ text_column('Description')
2298
+ button_column('Action') {
2299
+ on_clicked do |row|
2300
+ data.delete_at(row) # automatically deletes actual table row due to implicit data-binding
2301
+ end
2302
+ }
2303
+
2304
+ cell_rows data # implicit data-binding
2305
+ }
2306
+ }
2307
+ }.show
2308
+ ```
2309
+
2310
+ ### Basic Table Checkbox
2311
+
2312
+ [examples/basic_table_checkbox.rb](examples/basic_table_checkbox.rb)
2313
+
2314
+ Run with this command from the root of the project if you cloned the project:
2315
+
2316
+ ```
2317
+ ruby -r './lib/glimmer-dsl-libui' examples/basic_table_checkbox.rb
2318
+ ```
2319
+
2320
+ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui):
2321
+
2322
+ ```
2323
+ ruby -r glimmer-dsl-libui -e "require 'examples/basic_table_checkbox'"
2324
+ ```
2325
+
2326
+ Mac
2327
+
2328
+ ![glimmer-dsl-libui-mac-basic-table-checkbox.png](images/glimmer-dsl-libui-mac-basic-table-checkbox.png)
2329
+
2330
+ Linux
2331
+
2332
+ ![glimmer-dsl-libui-linux-basic-table-checkbox.png](images/glimmer-dsl-libui-linux-basic-table-checkbox.png)
2333
+
2334
+ New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
2335
+
2336
+ ```ruby
2337
+ require 'glimmer-dsl-libui'
2338
+
2339
+ include Glimmer
2340
+
2341
+ data = [
2342
+ ['cat', 'meow', true],
2343
+ ['dog', 'woof', true],
2344
+ ['chicken', 'cock-a-doodle-doo', false],
2345
+ ['horse', 'neigh', true],
2346
+ ['cow', 'moo', true]
2347
+ ]
2348
+
2349
+ window('Animal sounds', 300, 200) {
2350
+ horizontal_box {
2351
+ table {
2352
+ text_column('Animal')
2353
+ text_column('Description')
2354
+ checkbox_column('Mammal')
2355
+
2356
+ cell_rows data
2357
+ }
2358
+ }
2359
+ }.show
2360
+ ```
2361
+
2362
+ ### Basic Table Checkbox Text
2363
+
2364
+ [examples/basic_table_checkbox_text.rb](examples/basic_table_checkbox_text.rb)
2365
+
2366
+ Run with this command from the root of the project if you cloned the project:
2367
+
2368
+ ```
2369
+ ruby -r './lib/glimmer-dsl-libui' examples/basic_table_checkbox_text.rb
2370
+ ```
2371
+
2372
+ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui):
2373
+
2374
+ ```
2375
+ ruby -r glimmer-dsl-libui -e "require 'examples/basic_table_checkbox_text'"
2376
+ ```
2377
+
2378
+ Mac
2379
+
2380
+ ![glimmer-dsl-libui-mac-basic-table-checkbox-text.png](images/glimmer-dsl-libui-mac-basic-table-checkbox-text.png)
2381
+
2382
+ Linux
2383
+
2384
+ ![glimmer-dsl-libui-linux-basic-table-checkbox-text.png](images/glimmer-dsl-libui-linux-basic-table-checkbox-text.png)
2385
+
2386
+ New [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
2387
+
2388
+ ```ruby
2389
+ require 'glimmer-dsl-libui'
2390
+
2391
+ include Glimmer
2392
+
2393
+ data = [
2394
+ ['cat', 'meow', [true, 'mammal']],
2395
+ ['dog', 'woof', [true, 'mammal']],
2396
+ ['chicken', 'cock-a-doodle-doo', [false, 'mammal']],
2397
+ ['horse', 'neigh', [true, 'mammal']],
2398
+ ['cow', 'moo', [true, 'mammal']]
2399
+ ]
2400
+
2401
+ window('Animal sounds', 400, 200) {
2402
+ horizontal_box {
2403
+ table {
2404
+ text_column('Animal')
2405
+ text_column('Sound')
2406
+ checkbox_text_column('Description')
2407
+
2408
+ cell_rows data
2409
+ }
2410
+ }
2411
+ }.show
2412
+ ```
2413
+
2248
2414
  ## Contributing to glimmer-dsl-libui
2249
2415
 
2250
2416
  - Check out the latest master to make sure the feature hasn't been
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.21
1
+ 0.0.25
@@ -8,7 +8,7 @@ data = [
8
8
  %w[cat meow],
9
9
  %w[dog woof],
10
10
  %w[chicken cock-a-doodle-doo],
11
- %w[hourse neigh],
11
+ %w[horse neigh],
12
12
  %w[cow moo]
13
13
  ]
14
14
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ data = [
8
+ %w[cat meow delete],
9
+ %w[dog woof delete],
10
+ %w[chicken cock-a-doodle-doo delete],
11
+ %w[horse neigh delete],
12
+ %w[cow moo delete]
13
+ ]
14
+
15
+ window('Animal sounds', 300, 200) {
16
+ horizontal_box {
17
+ table {
18
+ text_column('Animal')
19
+ text_column('Description')
20
+ button_column('Action') {
21
+ on_clicked do |row|
22
+ data.delete_at(row) # automatically deletes actual table row due to implicit data-binding
23
+ end
24
+ }
25
+
26
+ cell_rows data # implicit data-binding
27
+ }
28
+ }
29
+ }.show
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ data = [
8
+ ['cat', 'meow', true],
9
+ ['dog', 'woof', true],
10
+ ['chicken', 'cock-a-doodle-doo', false],
11
+ ['horse', 'neigh', true],
12
+ ['cow', 'moo', true]
13
+ ]
14
+
15
+ window('Animal sounds', 300, 200) {
16
+ horizontal_box {
17
+ table {
18
+ text_column('Animal')
19
+ text_column('Description')
20
+ checkbox_column('Mammal')
21
+
22
+ cell_rows data
23
+ }
24
+ }
25
+ }.show
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ data = [
8
+ ['cat', 'meow', [true, 'mammal']],
9
+ ['dog', 'woof', [true, 'mammal']],
10
+ ['chicken', 'cock-a-doodle-doo', [false, 'mammal']],
11
+ ['horse', 'neigh', [true, 'mammal']],
12
+ ['cow', 'moo', [true, 'mammal']]
13
+ ]
14
+
15
+ window('Animal sounds', 400, 200) {
16
+ horizontal_box {
17
+ table {
18
+ text_column('Animal')
19
+ text_column('Sound')
20
+ checkbox_text_column('Description')
21
+
22
+ cell_rows data
23
+ }
24
+ }
25
+ }.show
@@ -20,7 +20,7 @@ IMAGE_ROWS = []
20
20
  data = canvas.to_rgba_stream
21
21
  width = canvas.width
22
22
  height = canvas.height
23
- img = image(width, height) {
23
+ img = image {
24
24
  image_part(data, width, height, width * 4)
25
25
  }
26
26
  IMAGE_ROWS << [img] # array of one column cell
@@ -20,23 +20,19 @@ IMAGE_ROWS = []
20
20
  data = canvas.to_rgba_stream
21
21
  width = canvas.width
22
22
  height = canvas.height
23
- img = image(width, height) {
23
+ img = image {
24
24
  image_part(data, width, height, width * 4)
25
25
  }
26
26
  text = url.sub('https://www.ghibli.jp/gallery/thumb-redturtle', '').sub('.png', '')
27
- IMAGE_ROWS << [[img, text], text, text, [img, text]]
27
+ IMAGE_ROWS << [[img, text], [img, text]] # cell values are dual-element arrays
28
28
  rescue StandardError => e
29
29
  warn url, e.message
30
30
  end
31
31
 
32
- window('The Red Turtle', 900, 350) {
32
+ window('The Red Turtle', 670, 350) {
33
33
  horizontal_box {
34
34
  table {
35
35
  image_text_column('image/number')
36
- text_column('number')
37
- text_column('number (editable)') {
38
- editable true
39
- }
40
36
  image_text_column('image/number (editable)') {
41
37
  editable true
42
38
  }
@@ -8,7 +8,7 @@ data = [
8
8
  %w[cat calm meow],
9
9
  %w[dog loyal woof],
10
10
  %w[chicken bird cock-a-doodle-doo],
11
- %w[hourse fast neigh],
11
+ %w[horse fast neigh],
12
12
  %w[cow slow moo]
13
13
  ]
14
14
 
@@ -8,7 +8,7 @@ data = [
8
8
  %w[cat meow],
9
9
  %w[dog woof],
10
10
  %w[chicken cock-a-doodle-doo],
11
- %w[hourse neigh],
11
+ %w[horse neigh],
12
12
  %w[cow moo]
13
13
  ]
14
14
 
Binary file
@@ -35,10 +35,6 @@ module Glimmer
35
35
  module Libui
36
36
  Engine.add_dynamic_expressions(
37
37
  Libui,
38
- # list_selection_data_binding
39
- # data_binding
40
- # block_attribute
41
- # attribute
42
38
  %w[
43
39
  listener
44
40
  property
@@ -0,0 +1,67 @@
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/libui/control_proxy'
23
+ require 'glimmer/libui/column'
24
+ require 'glimmer/libui/enableable_column'
25
+
26
+ module Glimmer
27
+ module LibUI
28
+ # Proxy for LibUI button column objects
29
+ #
30
+ # Follows the Proxy Design Pattern
31
+ class ButtonColumnProxy < ControlProxy
32
+ include Column
33
+ include EnableableColumn
34
+
35
+ def on_clicked(&block)
36
+ # TODO consider generalizing into custom listeners and moving to ControlProxy
37
+ @on_clicked_procs ||= []
38
+ @on_clicked_procs << block
39
+ end
40
+
41
+ def can_handle_listener?(listener_name)
42
+ listener_name == 'on_clicked' || super
43
+ end
44
+
45
+ def handle_listener(listener_name, &listener)
46
+ case listener_name
47
+ when 'on_clicked'
48
+ on_clicked(&listener)
49
+ else
50
+ super
51
+ end
52
+ end
53
+
54
+ def notify_listeners(listener_name, *args)
55
+ @on_clicked_procs&.each do |on_clicked_proc|
56
+ on_clicked_proc.call(*args)
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def build_control
63
+ @parent_proxy.append_button_column(name, column_index, enabled_value)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,42 @@
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/libui/control_proxy'
23
+ require 'glimmer/libui/column'
24
+ require 'glimmer/libui/editable_column'
25
+
26
+ module Glimmer
27
+ module LibUI
28
+ # Proxy for LibUI checkbox column objects
29
+ #
30
+ # Follows the Proxy Design Pattern
31
+ class CheckboxColumnProxy < ControlProxy
32
+ include Column
33
+ # include EditableColumn # TODO enable this once checkbox column becomes editable on macosx in C libui (currently has a bug)
34
+
35
+ private
36
+
37
+ def build_control
38
+ @parent_proxy.append_checkbox_column(name, column_index, -1)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,44 @@
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/libui/control_proxy'
23
+ require 'glimmer/libui/column'
24
+ require 'glimmer/libui/dual_column'
25
+ require 'glimmer/libui/editable_column'
26
+
27
+ module Glimmer
28
+ module LibUI
29
+ # Proxy for LibUI checkbox text column objects
30
+ #
31
+ # Follows the Proxy Design Pattern
32
+ class CheckboxTextColumnProxy < ControlProxy
33
+ include Column
34
+ include DualColumn
35
+ include EditableColumn # TODO split into editable_checkbox and editable_text properties in the future given that checkbox and text can be edited separately
36
+
37
+ private
38
+
39
+ def build_control
40
+ @parent_proxy.append_checkbox_text_column(name, column_index, -1, second_column_index, editable_value)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -19,8 +19,6 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
- require 'glimmer/libui/control_proxy'
23
-
24
22
  module Glimmer
25
23
  module LibUI
26
24
  # Common logic for all column proxy objects
@@ -19,8 +19,6 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
- require 'glimmer/libui/control_proxy'
23
-
24
22
  module Glimmer
25
23
  module LibUI
26
24
  # A dual column is one that represents two values (e.g. image and text or checkbox and text)
@@ -19,13 +19,12 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
- require 'glimmer/libui/control_proxy'
23
-
24
22
  module Glimmer
25
23
  module LibUI
26
24
  module EditableColumn
27
25
  def editable(value = nil)
28
26
  if value.nil?
27
+ @editable = false if @editable.nil?
29
28
  @editable
30
29
  else
31
30
  @editable = !!value
@@ -0,0 +1,44 @@
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
+ module Glimmer
23
+ module LibUI
24
+ module EnableableColumn
25
+ def enabled(value = nil)
26
+ if value.nil?
27
+ @enabled = true if @enabled.nil?
28
+ @enabled
29
+ else
30
+ @enabled = !!value
31
+ end
32
+ end
33
+ alias enabled= enabled
34
+ alias set_enabled enabled
35
+ alias enabled? enabled
36
+
37
+ private
38
+
39
+ def enabled_value
40
+ enabled? ? -2 : -1
41
+ end
42
+ end
43
+ end
44
+ end
@@ -27,6 +27,16 @@ module Glimmer
27
27
  #
28
28
  # Follows the Proxy Design Pattern
29
29
  class ImagePartProxy < ControlProxy
30
+ def initialize(keyword, parent, args, &block)
31
+ @keyword = keyword
32
+ @parent_proxy = parent
33
+ @args = args
34
+ @block = block
35
+ @enabled = true
36
+ @children = []
37
+ post_add_content if @block.nil?
38
+ end
39
+
30
40
  private
31
41
 
32
42
  def build_control
@@ -0,0 +1,63 @@
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/libui/control_proxy'
23
+ require 'glimmer/data_binding/observer'
24
+
25
+ using ArrayIncludeMethods
26
+
27
+ module Glimmer
28
+ module LibUI
29
+ # Proxy for LibUI image objects
30
+ #
31
+ # Follows the Proxy Design Pattern
32
+ class ImageProxy < ControlProxy
33
+ def initialize(keyword, parent, args, &block)
34
+ @keyword = keyword
35
+ @parent_proxy = parent
36
+ @args = args
37
+ @block = block
38
+ @enabled = true
39
+ @children = []
40
+ post_add_content if @block.nil?
41
+ end
42
+
43
+ def post_add_content
44
+ build_control
45
+ super
46
+ end
47
+
48
+ def post_initialize_child(child)
49
+ @children << child
50
+ end
51
+
52
+ private
53
+
54
+ def build_control
55
+ @args = [@children.first.args[1], @children.first.args[2]] if @children.size == 1 && (@args[0].nil? || @args[1].nil?)
56
+ super
57
+ @libui.tap do
58
+ @children.each {|child| child&.send(:build_control) }
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -21,6 +21,8 @@
21
21
 
22
22
  require 'glimmer/libui/control_proxy'
23
23
  require 'glimmer/libui/column'
24
+ require 'glimmer/libui/dual_column'
25
+ require 'glimmer/libui/editable_column'
24
26
 
25
27
  module Glimmer
26
28
  module LibUI
@@ -20,6 +20,9 @@
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
22
  require 'glimmer/libui/control_proxy'
23
+ require 'glimmer/data_binding/observer'
24
+
25
+ using ArrayIncludeMethods
23
26
 
24
27
  module Glimmer
25
28
  module LibUI
@@ -63,18 +66,18 @@ module Glimmer
63
66
  if rows.nil?
64
67
  @cell_rows
65
68
  else
66
- rows = rows.map do |row|
67
- row.map do |cell|
68
- if cell.respond_to?(:libui)
69
- cell.libui
70
- elsif cell.is_a?(Array)
71
- cell.map { |inner_cell| inner_cell.respond_to?(:libui) ? inner_cell.libui : inner_cell }
72
- else
73
- cell
69
+ @cell_rows = rows
70
+ @cell_rows.tap do
71
+ @last_cell_rows = @cell_rows.clone
72
+ Glimmer::DataBinding::Observer.proc do
73
+ if @cell_rows.size < @last_cell_rows.size && @last_cell_rows.include_all?(*@cell_rows)
74
+ @last_cell_rows.array_diff_indexes(@cell_rows).reverse.each do |index|
75
+ ::LibUI.table_model_row_deleted(model, index)
76
+ end
74
77
  end
75
- end
78
+ @last_cell_rows = @cell_rows.clone
79
+ end.observe(self, :cell_rows)
76
80
  end
77
- @cell_rows = rows
78
81
  end
79
82
  end
80
83
  alias cell_rows= cell_rows
@@ -104,28 +107,26 @@ module Glimmer
104
107
  @model_handler.NumColumns = rbcallback(4) { @columns.map {|c| c.is_a?(DualColumn) ? 2 : 1}.sum }
105
108
  @model_handler.ColumnType = rbcallback(4, [1, 1, 4]) do |_, _, column|
106
109
  case @columns[column]
107
- when TextColumnProxy, NilClass
110
+ when TextColumnProxy, ButtonColumnProxy, NilClass
108
111
  0
109
112
  when ImageColumnProxy, ImageTextColumnProxy
110
113
  1
111
- # when CheckboxColumnProxy
112
- # 2
113
- # when CheckboxTextColumnProxy
114
- # 2
114
+ when CheckboxColumnProxy, CheckboxTextColumnProxy
115
+ 2
115
116
  # when ProgressBarColumnProxy
116
117
  # 2
117
- # when ButtonColumnProxy
118
- # 0
119
118
  end
120
119
  end
121
120
  @model_handler.NumRows = rbcallback(4) { cell_rows.count }
122
121
  @model_handler.CellValue = rbcallback(1, [1, 1, 4, 4]) do |_, _, row, column|
123
122
  the_cell_rows = expanded_cell_rows
124
123
  case @columns[column]
125
- when TextColumnProxy, NilClass
124
+ when TextColumnProxy, ButtonColumnProxy, NilClass
126
125
  ::LibUI.new_table_value_string((expanded_cell_rows[row] && expanded_cell_rows[row][column]).to_s)
127
126
  when ImageColumnProxy, ImageTextColumnProxy
128
- ::LibUI.new_table_value_image((expanded_cell_rows[row] && expanded_cell_rows[row][column]))
127
+ ::LibUI.new_table_value_image((expanded_cell_rows[row] && (expanded_cell_rows[row][column].respond_to?(:libui) ? expanded_cell_rows[row][column].libui : expanded_cell_rows[row][column])))
128
+ when CheckboxColumnProxy, CheckboxTextColumnProxy
129
+ ::LibUI.new_table_value_int((expanded_cell_rows[row] && (expanded_cell_rows[row][column] == 1 || expanded_cell_rows[row][column].to_s.strip.downcase == 'true' ? 1 : 0)))
129
130
  end
130
131
  end
131
132
  @model_handler.SetCellValue = rbcallback(0, [1, 1, 4, 4, 1]) do |_, _, row, column, val|
@@ -135,9 +136,14 @@ module Glimmer
135
136
  @cell_rows[row] ||= []
136
137
  @cell_rows[row][column] = ::LibUI.table_value_string(val).to_s
137
138
  when NilClass
138
- # TODO ensure this works for editable table
139
139
  column = @columns[column - 1].index
140
140
  @cell_rows[row][column][1] = ::LibUI.table_value_string(val).to_s
141
+ when ButtonColumnProxy
142
+ @columns[column].notify_listeners(:on_clicked, row)
143
+ when CheckboxColumnProxy, CheckboxTextColumnProxy
144
+ column = @columns[column].index
145
+ @cell_rows[row] ||= []
146
+ @cell_rows[row][column] = ::LibUI.table_value_int(val).to_i == 1
141
147
  end
142
148
  end
143
149
 
@@ -21,6 +21,7 @@
21
21
 
22
22
  require 'glimmer/libui/control_proxy'
23
23
  require 'glimmer/libui/column'
24
+ require 'glimmer/libui/editable_column'
24
25
 
25
26
  module Glimmer
26
27
  module LibUI
@@ -61,20 +61,29 @@ module Glimmer
61
61
  end
62
62
  end
63
63
 
64
+ def can_handle_listener?(listener_name)
65
+ listener_name == 'on_destroy' || super
66
+ end
67
+
64
68
  def handle_listener(listener_name, &listener)
65
- if listener_name == 'on_closing'
66
- default_behavior_listener = Proc.new do
67
- return_value = listener.call(self)
68
- if return_value.is_a?(Numeric)
69
- return_value
70
- else
71
- destroy
72
- ::LibUI.quit
73
- 0
69
+ case listener_name
70
+ when 'on_destroy'
71
+ on_destroy(&listener)
72
+ else
73
+ if listener_name == 'on_closing'
74
+ default_behavior_listener = Proc.new do
75
+ return_value = listener.call(self)
76
+ if return_value.is_a?(Numeric)
77
+ return_value
78
+ else
79
+ destroy
80
+ ::LibUI.quit
81
+ 0
82
+ end
74
83
  end
75
84
  end
85
+ super(listener_name, &default_behavior_listener)
76
86
  end
77
- super(listener_name, &default_behavior_listener)
78
87
  end
79
88
 
80
89
  private
@@ -27,6 +27,7 @@ require 'glimmer'
27
27
  # require 'puts_debuggerer' if ENV['pd'].to_s.downcase == 'true'
28
28
  # require 'super_module'
29
29
  require 'os'
30
+ require 'array_include_methods'
30
31
  require 'libui'
31
32
 
32
33
  # Internal requires
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.0.21
4
+ version: 0.0.25
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-09-25 00:00:00.000000000 Z
11
+ date: 2021-09-27 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.1.2
19
+ version: 2.1.5
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.1.2
26
+ version: 2.1.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: os
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 0.0.9
53
+ version: 0.0.10
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.0.9
60
+ version: 0.0.10
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: juwelier
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -197,6 +197,9 @@ files:
197
197
  - examples/basic_button.rb
198
198
  - examples/basic_entry.rb
199
199
  - examples/basic_table.rb
200
+ - examples/basic_table_button.rb
201
+ - examples/basic_table_checkbox.rb
202
+ - examples/basic_table_checkbox_text.rb
200
203
  - examples/basic_table_image.rb
201
204
  - examples/basic_table_image_text.rb
202
205
  - examples/basic_window.rb
@@ -224,9 +227,12 @@ files:
224
227
  - lib/glimmer/dsl/libui/tab_item_expression.rb
225
228
  - lib/glimmer/libui/about_menu_item_proxy.rb
226
229
  - lib/glimmer/libui/box.rb
230
+ - lib/glimmer/libui/button_column_proxy.rb
227
231
  - lib/glimmer/libui/button_proxy.rb
228
232
  - lib/glimmer/libui/check_menu_item_proxy.rb
233
+ - lib/glimmer/libui/checkbox_column_proxy.rb
229
234
  - lib/glimmer/libui/checkbox_proxy.rb
235
+ - lib/glimmer/libui/checkbox_text_column_proxy.rb
230
236
  - lib/glimmer/libui/color_button_proxy.rb
231
237
  - lib/glimmer/libui/column.rb
232
238
  - lib/glimmer/libui/combobox_proxy.rb
@@ -236,6 +242,7 @@ files:
236
242
  - lib/glimmer/libui/dual_column.rb
237
243
  - lib/glimmer/libui/editable_column.rb
238
244
  - lib/glimmer/libui/editable_combobox_proxy.rb
245
+ - lib/glimmer/libui/enableable_column.rb
239
246
  - lib/glimmer/libui/font_button_proxy.rb
240
247
  - lib/glimmer/libui/form_proxy.rb
241
248
  - lib/glimmer/libui/grid_proxy.rb
@@ -243,6 +250,7 @@ files:
243
250
  - lib/glimmer/libui/horizontal_box_proxy.rb
244
251
  - lib/glimmer/libui/image_column_proxy.rb
245
252
  - lib/glimmer/libui/image_part_proxy.rb
253
+ - lib/glimmer/libui/image_proxy.rb
246
254
  - lib/glimmer/libui/image_text_column_proxy.rb
247
255
  - lib/glimmer/libui/label_proxy.rb
248
256
  - lib/glimmer/libui/menu_item_proxy.rb