glimmer-dsl-libui 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db236ce703f8fbdab45930d36dca47f2303faf3405fd3bd037bbcab261b79245
4
- data.tar.gz: ac097ae80240402e741d38b08f8b1c5e6941582c9e2b17fadf29d5c76971419d
3
+ metadata.gz: 5098a4f3a6ab5f314440a317cc77cc4d1c7fc65f2f190261d83710ffa9554dea
4
+ data.tar.gz: 7387058961fb36e05c598d8ef5c5e6ef109ce06eebac3626bed0628bc37511af
5
5
  SHA512:
6
- metadata.gz: d32551f5df4bd763f1c6cee6a52c706972658ee3507e5d619152672679a1b9f499653da26b2581d7d35cd92aa40439f956900681d5c9b8e1b233db71a32cb8bd
7
- data.tar.gz: def3355ba0e07c7f72d1deede04233932cbb175e4142fe77d1e243b95eb960849e123e729f14be5d27a94a16bc4c4060d65c75df22c2c7f44cc2e87e2350db48
6
+ metadata.gz: 40f5597274951ddcf6b96d26923d2012b2a5d59cacbb53e384b14e2bf619609b11f3d9c035768dcf9a4e38fe2608106eee15e91e0b5f72f282d7e009f05ebacd
7
+ data.tar.gz: b8bfe79a0acb9def38d25682c04f17c8fcfebc44af81c12e20368654381e81ac902e29329470d2888d69fca0d1ebdd9ee505898164ef7dcc168281c349a06724
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.8
4
+
5
+ - Add `?` suffixed aliases to all boolean property methods
6
+ - Make C bool properties return boolean in Ruby (not `1` or `0`)
7
+ - Support passing boolean values to C bool properties in addition to `1` or `0`
8
+ - Support passing boolean values to C bool constructor args in addition to `1` or `0`
9
+ - Update all examples to utilize booleans
10
+ - Make `window` properties `title`=`'Glimmer'`, `content_size`=`150`,`150` & `has_menubar`=`1` if not specified as args in constructor
11
+ - Have string properties (e.g. `text` and `title`) return `String` not fiddle pointer
12
+
3
13
  ## 0.0.7
4
14
 
5
15
  - Make `padded 1` the default in `horizontal_box` and `vertical_box` to achieve nicer looking GUI by default
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.7
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.8
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)
@@ -26,7 +26,7 @@ require 'glimmer-dsl-libui'
26
26
 
27
27
  include Glimmer
28
28
 
29
- window('hello world', 300, 200, 1).show
29
+ window('hello world').show
30
30
  ```
31
31
 
32
32
  ![glimmer-dsl-libui-mac-basic-window.png](images/glimmer-dsl-libui-mac-basic-window.png)
@@ -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.7](#-glimmer-dsl-for-libui-007)
46
+ - [Glimmer DSL for LibUI 0.0.8](#-glimmer-dsl-for-libui-008)
47
47
  - [Glimmer GUI DSL Concepts](#glimmer-gui-dsl-concepts)
48
48
  - [Usage](#usage)
49
49
  - [API](#api)
@@ -82,8 +82,8 @@ The Glimmer GUI DSL provides object-oriented declarative hierarchical syntax for
82
82
  - Requires the minimum amount of syntax needed to describe an app's GUI
83
83
 
84
84
  The Glimmer GUI DSL follows these simple concepts in mapping from [LibUI](https://github.com/kojix2/LibUI) syntax:
85
- - **Control**: [LibUI](https://github.com/kojix2/LibUI) controls may be declared by lower-case underscored name (aka keyword) (e.g. `window` or `button`). Behind the scenes, they are represented by keyword methods that map to corresponding `LibUI.new_keyword` methods receiving args (e.g. `window('hello world', 300, 200, 1)`).
86
- - **Content/Properties/Listeners Block**: Any keyword may be optionally followed by a Ruby curly-brace multi-line-block containing nested controls (content) and/or properties (attributes) (e.g. `window('hello world', 300, 200, 1) {button('greet')}`). It optionally recives one arg representing the control (e.g. `button('greet') {|b| on_clicked { puts b.text}}`)
85
+ - **Control**: [LibUI](https://github.com/kojix2/LibUI) controls may be declared by lower-case underscored name (aka keyword) (e.g. `window` or `button`). Behind the scenes, they are represented by keyword methods that map to corresponding `LibUI.new_keyword` methods receiving args (e.g. `window('hello world', 300, 200, true)`).
86
+ - **Content/Properties/Listeners Block**: Any keyword may be optionally followed by a Ruby curly-brace multi-line-block containing nested controls (content) and/or properties (attributes) (e.g. `window('hello world', 300, 200, true) {button('greet')}`). It optionally receives one arg representing the control (e.g. `button('greet') {|b| on_clicked { puts b.text}}`)
87
87
  - **Property**: Control properties may be declared inside keyword blocks with lower-case underscored name followed by property value args (e.g. `title "hello world"` inside `group`). Behind the scenes, properties correspond to `control_set_property` methods.
88
88
  - **Listener**: Control listeners may be declared inside keyword blocks with listener lower-case underscored name beginning with `on_` and receiving required block handler (e.g. `on_clicked {puts 'clicked'}` inside `button`). Behind the scenes, listeners correspond to `control_on_event` methods.
89
89
 
@@ -125,7 +125,7 @@ require 'glimmer-dsl-libui'
125
125
 
126
126
  include Glimmer
127
127
 
128
- window('hello world', 300, 200, 1) { |w|
128
+ window('hello world', 300, 200) { |w|
129
129
  button('Button') {
130
130
  on_clicked do
131
131
  msg_box(w, 'Information', 'You clicked the button')
@@ -149,7 +149,7 @@ gem install glimmer-dsl-libui
149
149
  Or install via Bundler `Gemfile`:
150
150
 
151
151
  ```ruby
152
- gem 'glimmer-dsl-libui', '~> 0.0.7'
152
+ gem 'glimmer-dsl-libui', '~> 0.0.8'
153
153
  ```
154
154
 
155
155
  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.
@@ -163,7 +163,7 @@ class Application
163
163
  include Glimmer
164
164
 
165
165
  def launch
166
- window('hello world', 300, 200, 1) {
166
+ window('hello world', 300, 200) {
167
167
  button('Button') {
168
168
  on_clicked do
169
169
  puts 'Button Clicked'
@@ -206,44 +206,44 @@ Control(Args) | Properties | Listeners
206
206
  ------------- | ---------- | ---------
207
207
  `about_menu_item` | None | `on_clicked`
208
208
  `button(text as String)` | `text` (`String`) | `on_clicked`
209
- `checkbox(text as String)` | `checked` (`1` or `0`), `text` (`String`) | `on_toggled`
210
- `combobox` | `items` (`Array` of `String`), `selected` (`1` or `0`) | `on_selected`
211
- `color_button` | `color` (r `Numeric`, g `Numeric`, b `Numeric`, a `Numeric`), `selected` (`1` or `0`) | `on_selected`
212
- `date_picker` | None | None
209
+ `checkbox(text as String)` | `checked` (Boolean), `text` (`String`) | `on_toggled`
210
+ `combobox` | `items` (`Array` of `String`), `selected` (`Integer`) | `on_selected`
211
+ `color_button` | `color` (r `Numeric`, g `Numeric`, b `Numeric`, a `Numeric`) | `on_changed`
212
+ `date_picker` | `time` (`LibUI::FFI::TM`) | `on_changed`
213
213
  `date_time_picker` | `time` (`LibUI::FFI::TM`) | `on_changed`
214
214
  `editable_combobox` | `items` (`Array` of `String`), `text` (`String`) | `on_changed`
215
- `entry` | `read_only` (`1` or `0`), `text` (`String`) | `on_changed`
215
+ `entry` | `read_only` (Boolean), `text` (`String`) | `on_changed`
216
216
  `font_button` | `font` (`LibUI::FFI::FontDescriptor`) | `on_changed`
217
- `group(text as String)` | `margined` (`1` or `0`), `title` (`String`) | None
218
- `horizontal_box` | `padded` (`1` or `0`) | None
217
+ `group(text as String)` | `margined` (Boolean), `title` (`String`) | None
218
+ `horizontal_box` | `padded` (Boolean) | None
219
219
  `horizontal_separator` | None | None
220
220
  `label(text as String)` | `text` (`String`) | None
221
221
  `menu(text as String)` | None | None
222
- `menu_item(text as String)` | `checked` (`1` or `0`) | `on_clicked`
223
- `multiline_entry` | `read_only` (`1` or `0`), `text` (`String`) | `on_changed`
222
+ `menu_item(text as String)` | `checked` (Boolean) | `on_clicked`
223
+ `multiline_entry` | `read_only` (Boolean), `text` (`String`) | `on_changed`
224
224
  `msg_box(window as Glimmer::LibUI::WindowProxy, title as String, description as String)` | None | None
225
225
  `msg_box_error(window as Glimmer::LibUI::WindowProxy, title as String, description as String)` | None | None
226
- `non_wrapping_multiline_entry` | `read_only` (`1` or `0`), `text` (`String`) | `on_changed`
226
+ `non_wrapping_multiline_entry` | `read_only` (Boolean), `text` (`String`) | `on_changed`
227
227
  `preferences_menu_item` | None | `on_clicked`
228
228
  `progress_bar` | `value` (`Numeric`) | None
229
229
  `quit_menu_item` | None | `on_clicked`
230
- `radio_buttons` | `selected` (`1` or `0`) | `on_selected`
230
+ `radio_buttons` | `selected` (`Integer`) | `on_selected`
231
231
  `slider(min as Numeric, max as Numeric)` | `value` (`Numeric`) | `on_changed`
232
232
  `spinbox(min as Numeric, max as Numeric)` | `value` (`Numeric`) | `on_changed`
233
- `tab` | `margined` (`1` or `0`), `num_pages` (`Integer`) | None
234
- `tab_item(name as String)` | `index` [read-only] (`Integer`), `margined` (`1` or `0`), `name` [read-only] (`String`) | None
235
- `time_picker` | None | None
236
- `vertical_box` | `padded` (`1` or `0`) | None
237
- `window(title as String, width as Integer, height as Integer, has_menubar as 1 or 0)` | `borderless` (`1` or `0`), `content_size` (width `Numeric`, height `Numeric`), `fullscreen` (`1` or `0`), `margined` (`1` or `0`), `title` (`String`) | `on_closing`, `on_content_size_changed`
233
+ `tab` | `margined` (Boolean), `num_pages` (`Integer`) | None
234
+ `tab_item(name as String)` | `index` [read-only] (`Integer`), `margined` (Boolean), `name` [read-only] (`String`) | None
235
+ `time_picker` | `time` (`LibUI::FFI::TM`) | `on_changed`
236
+ `vertical_box` | `padded` (Boolean) | None
237
+ `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`
238
238
 
239
239
  ### Common Control Properties
240
- - `enabled` (`1` or `0`)
240
+ - `enabled` (Boolean)
241
241
  - `libui` (`Fiddle::Pointer`): returns wrapped [LibUI](https://github.com/kojix2/LibUI) object
242
242
  - `parent_proxy` (`Glimmer::LibUI::ControlProxy` or subclass)
243
243
  - `parent` (`Fiddle::Pointer`)
244
- - `toplevel` [read-only] (`1` or `0`)
245
- - `visible` (`1` or `0`)
246
- - `stretchy` [dsl-only] (`1` or `0`): available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `horizontal_box` or `vertical_box`
244
+ - `toplevel` [read-only] (Boolean)
245
+ - `visible` (Boolean)
246
+ - `stretchy` [dsl-only] (Boolean): available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `horizontal_box` or `vertical_box`
247
247
 
248
248
  ### Common Control Operations
249
249
  - `destroy`
@@ -268,10 +268,14 @@ Control(Args) | Properties | Listeners
268
268
  - `horizontal_box` and `vertical_box` controls have `padded` as `1` upon instantiation to ensure more user-friendly GUI by default
269
269
  - `group` controls have `margined` as `1` upon instantiation to ensure more user-friendly GUI by default
270
270
  - All controls nested under a `horizontal_box` or `vertical_box` have `stretchy` property (passed to `box_append` method) as `1` by default (filling maximum space)
271
+ - `window` constructor args can be left off and have the following defaults when unspecified: `title` as `'Glimmer'`, `width` as `150`, `height` as `150`, and `has_menubar` as `true`)
271
272
  - `window` has an `on_closing` listener by default that quits application upon hitting the close button (can be overridden with a manual `on_closing` implementation that returns integer `0` for success)
272
273
  - `quit_menu_item` has an `on_clicked` listener by default that quits application upon selecting the quit menu item (can be overridden with a manual `on_clicked` implementation that returns integer `0` for success)
273
274
  - If an `on_closing` listener was defined on `window` and it does not return an integer, default exit behavior is assumed (`window.destroy` is called followed by `LibUI.quit`, returning `0`).
274
275
  - If an `on_clicked` listener was defined on `quit_menu_item` and it does not return an integer, default exit behavior is assumed (`main_window.destroy` is called followed by `LibUI.quit`, returning `0`).
276
+ - All boolean property readers return `true` or `false` in Ruby instead of the [libui](https://github.com/andlabs/libui) original `0` or `1` in C.
277
+ - All boolean property writers accept `true`/`false` in addition to `1`/`0` in Ruby
278
+ - All string property readers return a `String` object in Ruby instead of the [libui](https://github.com/andlabs/libui) Fiddle pointer object.
275
279
 
276
280
  ### Original API
277
281
 
@@ -349,7 +353,7 @@ require 'glimmer-dsl-libui'
349
353
 
350
354
  include Glimmer
351
355
 
352
- window('hello world', 300, 200, 1) {
356
+ window('hello world', 300, 200, true) {
353
357
  on_closing do
354
358
  puts 'Bye Bye'
355
359
  end
@@ -420,7 +424,7 @@ require 'glimmer-dsl-libui'
420
424
 
421
425
  include Glimmer
422
426
 
423
- window('hello world', 300, 200, 1) { |w|
427
+ window('hello world', 300, 200) { |w|
424
428
  button('Button') {
425
429
  on_clicked do
426
430
  msg_box(w, 'Information', 'You clicked the button')
@@ -433,6 +437,23 @@ window('hello world', 300, 200, 1) { |w|
433
437
  }.show
434
438
  ```
435
439
 
440
+ [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version 2:
441
+
442
+ ```ruby
443
+ require 'glimmer-dsl-libui'
444
+
445
+ include Glimmer
446
+
447
+ window { # args can alternatively be set via properties with 4th arg has_menubar=true by default
448
+ title 'hello world'
449
+ content_size 300, 200
450
+
451
+ on_closing do
452
+ puts 'Bye Bye'
453
+ end
454
+ }.show
455
+ ```
456
+
436
457
  ### Basic Entry
437
458
 
438
459
  [examples/basic_entry.rb](examples/basic_entry.rb)
@@ -507,10 +528,10 @@ require 'glimmer-dsl-libui'
507
528
 
508
529
  include Glimmer
509
530
 
510
- window('Basic Entry', 300, 50, 1) { |w|
531
+ window('Basic Entry', 300, 50) { |w|
511
532
  horizontal_box {
512
533
  e = entry {
513
- # stretchy 1 # Smart default option for appending to horizontal_box
534
+ # stretchy true # Smart default option for appending to horizontal_box
514
535
 
515
536
  on_changed do
516
537
  puts e.text
@@ -519,7 +540,7 @@ window('Basic Entry', 300, 50, 1) { |w|
519
540
  }
520
541
 
521
542
  button('Button') {
522
- stretchy 0
543
+ stretchy false
523
544
 
524
545
  on_clicked do
525
546
  text = e.text
@@ -593,7 +614,7 @@ require 'glimmer-dsl-libui'
593
614
 
594
615
  include Glimmer
595
616
 
596
- window('Notepad', 500, 300, 1) {
617
+ window('Notepad', 500, 300) {
597
618
  on_closing do
598
619
  puts 'Bye Bye'
599
620
  end
@@ -794,10 +815,10 @@ class TinyMidiPlayer
794
815
  end
795
816
  }
796
817
  }
797
- @main_window = window('Tiny Midi Player', 200, 50, 1) {
818
+ @main_window = window('Tiny Midi Player', 200, 50) {
798
819
  horizontal_box {
799
820
  vertical_box {
800
- stretchy 0
821
+ stretchy false
801
822
 
802
823
  button('▶') {
803
824
  on_clicked do
@@ -1082,7 +1103,7 @@ menu('Edit') {
1082
1103
  check_menu_item('Checkable Item_')
1083
1104
  separator_menu_item
1084
1105
  menu_item('Disabled Item_') {
1085
- enabled 0
1106
+ enabled false
1086
1107
  }
1087
1108
  }
1088
1109
 
@@ -1092,8 +1113,8 @@ menu('Help') {
1092
1113
  about_menu_item # Can optionally contain an on_clicked listener
1093
1114
  }
1094
1115
 
1095
- MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1096
- margined 1
1116
+ MAIN_WINDOW = window('Control Gallery', 600, 500) {
1117
+ margined true
1097
1118
 
1098
1119
  on_closing do
1099
1120
  puts 'Bye Bye'
@@ -1104,7 +1125,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1104
1125
  group('Basic Controls') {
1105
1126
  vertical_box {
1106
1127
  button('Button') {
1107
- stretchy 0
1128
+ stretchy false
1108
1129
 
1109
1130
  on_clicked do
1110
1131
  msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
@@ -1112,7 +1133,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1112
1133
  }
1113
1134
 
1114
1135
  checkbox('Checkbox') {
1115
- stretchy 0
1136
+ stretchy false
1116
1137
 
1117
1138
  on_toggled do |c|
1118
1139
  checked = c.checked == 1
@@ -1121,29 +1142,29 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1121
1142
  end
1122
1143
  }
1123
1144
 
1124
- label('Label') { stretchy 0 }
1145
+ label('Label') { stretchy false }
1125
1146
 
1126
- horizontal_separator { stretchy 0 }
1147
+ horizontal_separator { stretchy false }
1127
1148
 
1128
- date_picker { stretchy 0 }
1149
+ date_picker { stretchy false }
1129
1150
 
1130
- time_picker { stretchy 0 }
1151
+ time_picker { stretchy false }
1131
1152
 
1132
- date_time_picker { stretchy 0 }
1153
+ date_time_picker { stretchy false }
1133
1154
 
1134
- font_button { stretchy 0 }
1155
+ font_button { stretchy false }
1135
1156
 
1136
- color_button { stretchy 0 }
1157
+ color_button { stretchy false }
1137
1158
  }
1138
1159
  }
1139
1160
 
1140
1161
  vertical_box {
1141
1162
  group('Numbers') {
1142
- stretchy 0
1163
+ stretchy false
1143
1164
 
1144
1165
  vertical_box {
1145
1166
  spinbox(0, 100) {
1146
- stretchy 0
1167
+ stretchy false
1147
1168
  value 42
1148
1169
 
1149
1170
  on_changed do |s|
@@ -1152,7 +1173,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1152
1173
  }
1153
1174
 
1154
1175
  slider(0, 100) {
1155
- stretchy 0
1176
+ stretchy false
1156
1177
 
1157
1178
  on_changed do |s|
1158
1179
  v = s.value
@@ -1161,16 +1182,16 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1161
1182
  end
1162
1183
  }
1163
1184
 
1164
- @progress_bar = progress_bar { stretchy 0 }
1185
+ @progress_bar = progress_bar { stretchy false }
1165
1186
  }
1166
1187
  }
1167
1188
 
1168
1189
  group('Lists') {
1169
- stretchy 0
1190
+ stretchy false
1170
1191
 
1171
1192
  vertical_box {
1172
1193
  combobox {
1173
- stretchy 0
1194
+ stretchy false
1174
1195
  items 'combobox Item 1', 'combobox Item 2', 'combobox Item 3' # also accepts a single array argument
1175
1196
 
1176
1197
  on_selected do |c|
@@ -1179,7 +1200,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1179
1200
  }
1180
1201
 
1181
1202
  editable_combobox {
1182
- stretchy 0
1203
+ stretchy false
1183
1204
  items 'Editable Item 1', 'Editable Item 2', 'Editable Item 3' # also accepts a single array argument
1184
1205
  }
1185
1206
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('hello world', 300, 200, 1) { |w|
7
+ window('hello world', 300, 200) { |w|
8
8
  button('Button') {
9
9
  on_clicked do
10
10
  msg_box(w, 'Information', 'You clicked the button')
@@ -4,10 +4,10 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('Basic Entry', 300, 50, 1) { |w|
7
+ window('Basic Entry', 300, 50) { |w|
8
8
  horizontal_box {
9
9
  e = entry {
10
- # stretchy 1 # Smart default option for appending to horizontal_box
10
+ # stretchy true # Smart default option for appending to horizontal_box
11
11
 
12
12
  on_changed do
13
13
  puts e.text
@@ -16,7 +16,7 @@ window('Basic Entry', 300, 50, 1) { |w|
16
16
  }
17
17
 
18
18
  button('Button') {
19
- stretchy 0
19
+ stretchy false
20
20
 
21
21
  on_clicked do
22
22
  text = e.text
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('hello world', 300, 200, 1) {
7
+ window('hello world', 300, 200, true) {
8
8
  on_closing do
9
9
  puts 'Bye Bye'
10
10
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'glimmer-dsl-libui'
4
+
5
+ include Glimmer
6
+
7
+ window { # args can alternatively be set via properties with 4th arg has_menubar=true by default
8
+ title 'hello world'
9
+ content_size 300, 200
10
+
11
+ on_closing do
12
+ puts 'Bye Bye'
13
+ end
14
+ }.show
@@ -32,7 +32,7 @@ menu('Edit') {
32
32
  check_menu_item('Checkable Item_')
33
33
  separator_menu_item
34
34
  menu_item('Disabled Item_') {
35
- enabled 0
35
+ enabled false
36
36
  }
37
37
  }
38
38
 
@@ -42,8 +42,8 @@ menu('Help') {
42
42
  about_menu_item # Can optionally contain an on_clicked listener
43
43
  }
44
44
 
45
- MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
46
- margined 1
45
+ MAIN_WINDOW = window('Control Gallery', 600, 500) {
46
+ margined true
47
47
 
48
48
  on_closing do
49
49
  puts 'Bye Bye'
@@ -54,7 +54,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
54
54
  group('Basic Controls') {
55
55
  vertical_box {
56
56
  button('Button') {
57
- stretchy 0
57
+ stretchy false
58
58
 
59
59
  on_clicked do
60
60
  msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
@@ -62,38 +62,38 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
62
62
  }
63
63
 
64
64
  checkbox('Checkbox') {
65
- stretchy 0
65
+ stretchy false
66
66
 
67
67
  on_toggled do |c|
68
- checked = c.checked == 1
68
+ checked = c.checked?
69
69
  MAIN_WINDOW.title = "Checkbox is #{checked}"
70
70
  c.text = "I am the checkbox (#{checked})"
71
71
  end
72
72
  }
73
73
 
74
- label('Label') { stretchy 0 }
74
+ label('Label') { stretchy false }
75
75
 
76
- horizontal_separator { stretchy 0 }
76
+ horizontal_separator { stretchy false }
77
77
 
78
- date_picker { stretchy 0 }
78
+ date_picker { stretchy false }
79
79
 
80
- time_picker { stretchy 0 }
80
+ time_picker { stretchy false }
81
81
 
82
- date_time_picker { stretchy 0 }
82
+ date_time_picker { stretchy false }
83
83
 
84
- font_button { stretchy 0 }
84
+ font_button { stretchy false }
85
85
 
86
- color_button { stretchy 0 }
86
+ color_button { stretchy false }
87
87
  }
88
88
  }
89
89
 
90
90
  vertical_box {
91
91
  group('Numbers') {
92
- stretchy 0
92
+ stretchy false
93
93
 
94
94
  vertical_box {
95
95
  spinbox(0, 100) {
96
- stretchy 0
96
+ stretchy false
97
97
  value 42
98
98
 
99
99
  on_changed do |s|
@@ -102,7 +102,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
102
102
  }
103
103
 
104
104
  slider(0, 100) {
105
- stretchy 0
105
+ stretchy false
106
106
 
107
107
  on_changed do |s|
108
108
  v = s.value
@@ -111,16 +111,16 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
111
111
  end
112
112
  }
113
113
 
114
- @progress_bar = progress_bar { stretchy 0 }
114
+ @progress_bar = progress_bar { stretchy false }
115
115
  }
116
116
  }
117
117
 
118
118
  group('Lists') {
119
- stretchy 0
119
+ stretchy false
120
120
 
121
121
  vertical_box {
122
122
  combobox {
123
- stretchy 0
123
+ stretchy false
124
124
  items 'combobox Item 1', 'combobox Item 2', 'combobox Item 3' # also accepts a single array argument
125
125
 
126
126
  on_selected do |c|
@@ -129,7 +129,7 @@ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
129
129
  }
130
130
 
131
131
  editable_combobox {
132
- stretchy 0
132
+ stretchy false
133
133
  items 'Editable Item 1', 'Editable Item 2', 'Editable Item 3' # also accepts a single array argument
134
134
  }
135
135
 
@@ -56,10 +56,10 @@ class TinyMidiPlayer
56
56
  end
57
57
  }
58
58
  }
59
- @main_window = window('Tiny Midi Player', 200, 50, 1) {
59
+ @main_window = window('Tiny Midi Player', 200, 50) {
60
60
  horizontal_box {
61
61
  vertical_box {
62
- stretchy 0
62
+ stretchy false
63
63
 
64
64
  button('▶') {
65
65
  on_clicked do
@@ -4,7 +4,7 @@ require 'glimmer-dsl-libui'
4
4
 
5
5
  include Glimmer
6
6
 
7
- window('Notepad', 500, 300, 1) {
7
+ window('Notepad', 500, 300) {
8
8
  on_closing do
9
9
  puts 'Bye Bye'
10
10
  end
Binary file
@@ -19,14 +19,16 @@
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
+
22
24
  module Glimmer
23
25
  module LibUI
24
26
  module Box
25
27
  APPEND_PROPERTIES = %w[stretchy]
26
28
 
27
29
  def post_initialize_child(child)
28
- child.stretchy = 1 if child.stretchy.nil?
29
- ::LibUI.box_append(@libui, child.libui, child.stretchy)
30
+ child.stretchy = true if child.stretchy.nil?
31
+ ::LibUI.box_append(@libui, child.libui, ControlProxy.boolean_to_integer(child.stretchy))
30
32
  end
31
33
 
32
34
  def libui_api_keyword
@@ -37,7 +39,7 @@ module Glimmer
37
39
 
38
40
  def build_control
39
41
  super.tap do
40
- self.padded = 1
42
+ self.padded = true
41
43
  end
42
44
  end
43
45
  end
@@ -54,8 +54,31 @@ module Glimmer
54
54
  def main_window_proxy
55
55
  all_control_proxies.find {|c| c.is_a?(WindowProxy)}
56
56
  end
57
+
58
+ def integer_to_boolean(int)
59
+ int.nil? ? nil : int == 1
60
+ end
61
+
62
+ def boolean_to_integer(bool)
63
+ bool.nil? ? nil : (bool ? 1 : 0)
64
+ end
57
65
  end
58
66
 
67
+ BOOLEAN_PROPERTIES = %w[
68
+ padded
69
+ checked
70
+ enabled toplevel visible
71
+ read_only
72
+ margined
73
+ borderless fullscreen
74
+ stretchy
75
+ ]
76
+
77
+ STRING_PROPERTIES = %w[
78
+ text
79
+ title
80
+ ]
81
+
59
82
  # libui returns the contained LibUI object
60
83
  attr_reader :parent_proxy, :libui, :args, :keyword
61
84
 
@@ -64,11 +87,8 @@ module Glimmer
64
87
  @parent_proxy = parent
65
88
  @args = args
66
89
  @block = block
67
- @enabled = 1
90
+ @enabled = true
68
91
  build_control
69
- if @parent_proxy.class.constants.include?(:APPEND_PROPERTIES)
70
- @parent_proxy.class::APPEND_PROPERTIES
71
- end
72
92
  post_add_content if @block.nil?
73
93
  end
74
94
 
@@ -106,21 +126,28 @@ module Glimmer
106
126
 
107
127
  def respond_to?(method_name, *args, &block)
108
128
  respond_to_libui?(method_name, *args, &block) ||
109
- (append_properties.include?(method_name.to_s) || append_properties.include?(method_name.to_s.sub(/=$/, ''))) ||
129
+ (
130
+ append_properties.include?(method_name.to_s) ||
131
+ (append_properties.include?(method_name.to_s.sub(/\?$/, '')) && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, ''))) ||
132
+ append_properties.include?(method_name.to_s.sub(/=$/, ''))
133
+ ) ||
110
134
  super(method_name, true)
111
135
  end
112
136
 
113
137
  def respond_to_libui?(method_name, *args, &block)
114
138
  ::LibUI.respond_to?("control_#{method_name}") ||
139
+ (::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) ||
140
+ ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}") ||
115
141
  ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") ||
116
- ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name}") ||
142
+ (::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && BOOLEAN_PROPERTIES.include?(method_name.to_s.sub(/\?$/, '')) ) ||
117
143
  ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}")
118
144
  end
119
145
 
120
146
  def method_missing(method_name, *args, &block)
121
147
  if respond_to_libui?(method_name, *args, &block)
122
148
  send_to_libui(method_name, *args, &block)
123
- elsif (append_properties.include?(method_name.to_s) || append_properties.include?(method_name.to_s.sub(/=$/, '')))
149
+ elsif append_properties.include?(method_name.to_s) ||
150
+ append_properties.include?(method_name.to_s.sub(/(=|\?)$/, ''))
124
151
  append_property(method_name, *args)
125
152
  else
126
153
  super
@@ -128,17 +155,25 @@ module Glimmer
128
155
  end
129
156
 
130
157
  def send_to_libui(method_name, *args, &block)
131
- if ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") && args.empty?
132
- ::LibUI.send("#{libui_api_keyword}_#{method_name}", @libui, *args)
133
- elsif ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name}") && !args.empty?
134
- ::LibUI.send("#{libui_api_keyword}_set_#{method_name}", @libui, *args)
158
+ if ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name.to_s.sub(/\?$/, '')}") && args.empty?
159
+ property = method_name.to_s.sub(/\?$/, '')
160
+ value = ::LibUI.send("#{libui_api_keyword}_#{property}", @libui, *args)
161
+ handle_string_property(property, handle_boolean_property(property, value))
135
162
  elsif ::LibUI.respond_to?("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}") && !args.empty?
136
- ::LibUI.send("#{libui_api_keyword}_set_#{method_name.to_s.sub(/=$/, '')}", @libui, *args)
137
- elsif ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") && method_name.start_with?('set_') && !args.empty?
138
- ::LibUI.send("#{libui_api_keyword}_#{method_name}", @libui, *args)
163
+ property = method_name.to_s.sub(/=$/, '')
164
+ args[0] = ControlProxy.boolean_to_integer(args.first) if BOOLEAN_PROPERTIES.include?(property) && (args.first.is_a?(TrueClass) || args.first.is_a?(FalseClass))
165
+ ::LibUI.send("#{libui_api_keyword}_set_#{property}", @libui, *args)
139
166
  elsif ::LibUI.respond_to?("#{libui_api_keyword}_#{method_name}") && !args.empty?
140
167
  ::LibUI.send("#{libui_api_keyword}_#{method_name}", @libui, *args)
141
- elsif ::LibUI.respond_to?("control_#{method_name}")
168
+ elsif ::LibUI.respond_to?("control_#{method_name.to_s.sub(/\?$/, '')}") && args.empty?
169
+ property = method_name.to_s.sub(/\?$/, '')
170
+ value = ::LibUI.send("control_#{method_name.to_s.sub(/\?$/, '')}", @libui, *args)
171
+ handle_string_property(property, handle_boolean_property(property, value))
172
+ elsif ::LibUI.respond_to?("control_set_#{method_name.to_s.sub(/=$/, '')}")
173
+ property = method_name.to_s.sub(/=$/, '')
174
+ args[0] = ControlProxy.boolean_to_integer(args.first) if BOOLEAN_PROPERTIES.include?(property) && (args.first.is_a?(TrueClass) || args.first.is_a?(FalseClass))
175
+ ::LibUI.send("control_set_#{method_name.to_s.sub(/=$/, '')}", @libui, *args)
176
+ elsif ::LibUI.respond_to?("control_#{method_name}") && !args.empty?
142
177
  ::LibUI.send("control_#{method_name}", @libui, *args)
143
178
  end
144
179
  end
@@ -148,11 +183,13 @@ module Glimmer
148
183
  end
149
184
 
150
185
  def append_property(property, value = nil)
151
- property = property.to_s.sub(/=$/, '')
186
+ property = property.to_s.sub(/(=|\?)$/, '')
152
187
  @append_property_hash ||= {}
153
188
  if value.nil?
154
- @append_property_hash[property]
189
+ value = @append_property_hash[property]
190
+ handle_string_property(property, handle_boolean_property(property, value))
155
191
  else
192
+ value = ControlProxy.boolean_to_integer(value) if BOOLEAN_PROPERTIES.include?(property) && (value.is_a?(TrueClass) || value.is_a?(FalseClass))
156
193
  @append_property_hash[property] = value
157
194
  end
158
195
  end
@@ -165,7 +202,7 @@ module Glimmer
165
202
  if value.nil?
166
203
  @enabled
167
204
  elsif value != @enabled
168
- if value == 1
205
+ if value == 1 || value
169
206
  send_to_libui('enable')
170
207
  else
171
208
  send_to_libui('disable')
@@ -181,7 +218,7 @@ module Glimmer
181
218
  if value.nil?
182
219
  current_value
183
220
  elsif value != current_value
184
- if value == 1
221
+ if value == 1 || value
185
222
  send_to_libui('show')
186
223
  else
187
224
  send_to_libui('hide')
@@ -196,7 +233,7 @@ module Glimmer
196
233
  send_to_libui('destroy')
197
234
  self.class.all_control_proxies.delete(self)
198
235
  end
199
-
236
+
200
237
  private
201
238
 
202
239
  def build_control
@@ -207,6 +244,14 @@ module Glimmer
207
244
  ::LibUI.send(@keyword, *@args)
208
245
  end
209
246
  end
247
+
248
+ def handle_boolean_property(property, value)
249
+ BOOLEAN_PROPERTIES.include?(property) ? ControlProxy.integer_to_boolean(value) : value
250
+ end
251
+
252
+ def handle_string_property(property, value)
253
+ STRING_PROPERTIES.include?(property) ? value.to_s : value
254
+ end
210
255
  end
211
256
  end
212
257
  end
@@ -0,0 +1,32 @@
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/date_time_picker_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ # Proxy for LibUI date picker objects
27
+ #
28
+ # Follows the Proxy Design Pattern
29
+ class DatePickerProxy < DateTimePickerProxy
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
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
+
24
+ module Glimmer
25
+ module LibUI
26
+ # Proxy for LibUI date time picker objects
27
+ #
28
+ # Follows the Proxy Design Pattern
29
+ class DateTimePickerProxy < ControlProxy
30
+ def libui_api_keyword
31
+ 'date_time_picker'
32
+ end
33
+ end
34
+ end
35
+ end
@@ -35,7 +35,7 @@ module Glimmer
35
35
 
36
36
  def build_control
37
37
  super.tap do
38
- self.margined = 1
38
+ self.margined = true
39
39
  end
40
40
  end
41
41
  end
@@ -54,6 +54,7 @@ module Glimmer
54
54
  end
55
55
  alias set_margined margined
56
56
  alias margined= margined
57
+ alias margined? margined
57
58
 
58
59
  private
59
60
 
@@ -0,0 +1,32 @@
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/date_time_picker_proxy'
23
+
24
+ module Glimmer
25
+ module LibUI
26
+ # Proxy for LibUI time picker objects
27
+ #
28
+ # Follows the Proxy Design Pattern
29
+ class TimePickerProxy < DateTimePickerProxy
30
+ end
31
+ end
32
+ end
@@ -27,6 +27,11 @@ module Glimmer
27
27
  #
28
28
  # Follows the Proxy Design Pattern
29
29
  class WindowProxy < ControlProxy
30
+ DEFAULT_TITLE = 'Glimmer'
31
+ DEFAULT_WIDTH = 150
32
+ DEFAULT_HEIGHT = 150
33
+ DEFAULT_HAS_MENUBAR = 1
34
+
30
35
  def post_initialize_child(child)
31
36
  ::LibUI.window_set_child(@libui, child.libui)
32
37
  end
@@ -59,7 +64,14 @@ module Glimmer
59
64
  private
60
65
 
61
66
  def build_control
62
- super.tap do
67
+ construction_args = @args.dup
68
+ construction_args[0] = DEFAULT_TITLE if construction_args.size == 0
69
+ construction_args[1] = DEFAULT_WIDTH if construction_args.size == 1
70
+ construction_args[2] = DEFAULT_HEIGHT if construction_args.size == 2
71
+ construction_args[3] = DEFAULT_HAS_MENUBAR if construction_args.size == 3
72
+ construction_args[3] = ControlProxy.boolean_to_integer(construction_args[3]) if construction_args.size == 4 && (construction_args[3].is_a?(TrueClass) || construction_args[3].is_a?(FalseClass))
73
+ @libui = ::LibUI.send("new_window", *construction_args)
74
+ @libui.tap do
63
75
  handle_listener('on_closing') do
64
76
  destroy
65
77
  ::LibUI.quit
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.7
4
+ version: 0.0.8
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-18 00:00:00.000000000 Z
11
+ date: 2021-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -142,9 +142,9 @@ dependencies:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
144
  version: 0.7.0
145
- description: Prerequisite-Free Ruby Desktop Development GUI Library (no need to pre-install
146
- any prerequisites. Just install the gem and have platform-independent native GUI
147
- that just works!)
145
+ description: Glimmer DSL for LibUI - Prerequisite-Free Ruby Desktop Development GUI
146
+ Library (no need to pre-install any prerequisites. Just install the gem and have
147
+ platform-independent native GUI that just works!)
148
148
  email: andy.am@gmail.com
149
149
  executables:
150
150
  - girb
@@ -163,6 +163,7 @@ files:
163
163
  - examples/basic_button.rb
164
164
  - examples/basic_entry.rb
165
165
  - examples/basic_window.rb
166
+ - examples/basic_window2.rb
166
167
  - examples/control_gallery.rb
167
168
  - examples/midi_player.rb
168
169
  - examples/simple_notepad.rb
@@ -181,6 +182,8 @@ files:
181
182
  - lib/glimmer/libui/check_menu_item_proxy.rb
182
183
  - lib/glimmer/libui/combobox_proxy.rb
183
184
  - lib/glimmer/libui/control_proxy.rb
185
+ - lib/glimmer/libui/date_picker_proxy.rb
186
+ - lib/glimmer/libui/date_time_picker_proxy.rb
184
187
  - lib/glimmer/libui/editable_combobox_proxy.rb
185
188
  - lib/glimmer/libui/group_proxy.rb
186
189
  - lib/glimmer/libui/horizontal_box_proxy.rb
@@ -192,6 +195,7 @@ files:
192
195
  - lib/glimmer/libui/radio_buttons_proxy.rb
193
196
  - lib/glimmer/libui/separator_menu_item_proxy.rb
194
197
  - lib/glimmer/libui/tab_item_proxy.rb
198
+ - lib/glimmer/libui/time_picker_proxy.rb
195
199
  - lib/glimmer/libui/vertical_box_proxy.rb
196
200
  - lib/glimmer/libui/window_proxy.rb
197
201
  homepage: http://github.com/AndyObtiva/glimmer-dsl-libui