glimmer-dsl-libui 0.0.4 → 0.0.5

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: 98ea45093e4fa24ad49e896ca02a090c6900f1ddf80e8e592726914746b8c4e0
4
- data.tar.gz: 8106d3f232fea6048c38b9ee0c3f93dda9cdaf3cffc7f3c68ac9a1dcf82e9f24
3
+ metadata.gz: c3d949c7e8a83eaa3d09b07e3117158885f1c34d13737420d3a1cf7499d2250c
4
+ data.tar.gz: db7447e66369398e9c1b48ab194f27c710cab11e60998bc8eaae1bb2c64145b7
5
5
  SHA512:
6
- metadata.gz: 637a28709c22c93d817b7b59375844d9540253957ae3a236ab802b404d02c939f1fdf01606fd0bc86cb224b8cd424ba9483da87daf30a83daa58d374ea02956c
7
- data.tar.gz: b35754ad0c266f931fcf77dca37026a7bd309083835f662f9c5549b43b2d21bbb08d57af3c676bd82b6d1490071c1d86d7f0c8ba3f1416b861919738a67cea6d
6
+ metadata.gz: 8f9c8af1645a02379f6a1693bffc20bc6c1c70a349603810a7f292b886c1652f60426459063641a676ee50e5f6b035a25effe21b4f39acca5bb43c394ef89e58
7
+ data.tar.gz: f41584f6026750c4c30e18475ceabac1a8382b11cfccd62f536fafbed0225a4a21cd651ec477baae93b596090154f7a1692ac3a3ae6fca8a7625fe774a618fcd
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.5
4
+
5
+ - Support examples/control_gallery.rb
6
+ - Support `open_file` and `save_file`
7
+ - Support `quit_menu_item` with `on_clicked` listener
8
+ - Support `preferences_menu_item` and `about_menu_item`
9
+ - Support `check_menu_item` and `separator_menu_item`
10
+ - Support `enabled=` & `set_enabled` on all controls (making `enabled` property read/write by relying on `enable`/`disable` operations)
11
+ - Support `visible=` & `set_visible` on all controls (making `visible` property read/write by relying on `show`/`hide` operations)
12
+ - Support `horizontal_box` and `vertical_box` propeties (`padded`) & operations (`append`, `delete`) via `LibUI.box_*` methods
13
+ - Support `editable_combobox`, `radio_buttons`, and `group`
14
+ - Support `tab` and `tab_item`
15
+ - Fix issue with always setting menu item text to 'Version' (correctly set to passed argument instead)
16
+
3
17
  ## 0.0.4
4
18
 
5
19
  - Support examples/midi_player.rb
data/README.md CHANGED
@@ -1,15 +1,16 @@
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.4
2
- ## Dependency-Free Ruby Desktop Development GUI Library
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.5
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)
5
5
  [![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)
6
6
 
7
- [Glimmer](https://github.com/AndyObtiva/glimmer) DSL for [LibUI](https://github.com/kojix2/LibUI) is a dependency-free Ruby desktop development GUI library. No need to pre-insta
8
- ll any pre-requisites. Just install the gem and have platform-independent GUI that just works!
7
+ [Glimmer](https://github.com/AndyObtiva/glimmer) DSL for [LibUI](https://github.com/kojix2/LibUI) is a prerequisite-free Ruby desktop development GUI library. No need to pre-install any prerequisites. Just install the gem and have platform-independent GUI that just works!
9
8
 
10
- The main trade-off against [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) and [Glimmer DSL for Tk](https://github.com/AndyObtiva/glimmer-dsl-tk) (all of which have native-looking widgets) is the fact that [SWT](https://www.eclipse.org/swt/) and [Tk](https://www.tcl.tk/) are more mature than [LibUI](https://github.com/kojix2/LibUI) as GUI toolkits. Still, if there is only a need to build a small simple application, [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) could be a good choice due to having zero external dependencies beyond what is included in the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui). Also, just like [Glimmer DSL for Tk](https://github.com/AndyObtiva/glimmer-dsl-tk) (and unlike [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt)), its apps start instantly and have a small memory footprint. [LibUI](https://github.com/kojix2/LibUI) is a promising new GUI toolkit that might prove itself quite worthy in the future.
9
+ [LibUI](https://github.com/kojix2/LibUI) is a thin [Ruby](https://www.ruby-lang.org/en/) wrapper around [libui](https://github.com/andlabs/libui), a relatively new C GUI library that renders native widgets on every platform (similar to [SWT](https://www.eclipse.org/swt/), but without the heavy weight of the [Java Virtual Machine](https://www.java.com/en/)).
11
10
 
12
- [Glimmer DSL for LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui) aims to provide a DSL similar to the [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) to enable more productive desktop development in Ruby with:
11
+ The main trade-off in using [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) as opposed to [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) or [Glimmer DSL for Tk](https://github.com/AndyObtiva/glimmer-dsl-tk) is the fact that [SWT](https://www.eclipse.org/swt/) and [Tk](https://www.tcl.tk/) are more mature than mid-alpha [libui](https://github.com/andlabs/libui) as GUI toolkits. Still, if there is only a need to build a small simple application, [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) could be a good convenient choice due to having zero prerequisites beyond the dependencies included in the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui). Also, just like [Glimmer DSL for Tk](https://github.com/AndyObtiva/glimmer-dsl-tk), its apps start instantly and have a small memory footprint. [LibUI](https://github.com/kojix2/LibUI) is a promising new GUI toolkit that might prove quite worthy in the future.
12
+
13
+ [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) aims to provide a DSL similar to the [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) to enable more productive desktop development in Ruby with:
13
14
  - Declarative DSL syntax that visually maps to the GUI widget hierarchy
14
15
  - Convention over configuration via smart defaults and automation of low-level details
15
16
  - Requiring the least amount of syntax possible to build GUI
@@ -42,7 +43,7 @@ Other [Glimmer](https://rubygems.org/gems/glimmer) DSL gems you might be interes
42
43
 
43
44
  ## Glimmer GUI DSL Concepts
44
45
 
45
- The Glimmer GUI DSL provides a declarative syntax for [LibUI](https://github.com/kojix2/LibUI) that:
46
+ The Glimmer GUI DSL provides object-oriented declarative hierarchical syntax for [LibUI](https://github.com/kojix2/LibUI) that:
46
47
  - Supports smart defaults (e.g. automatic `on_closing` listener that quits `window`)
47
48
  - Automates wiring of widgets (e.g. `button` is automatically set as child of `window`)
48
49
  - Hides lower-level details (e.g. `LibUI.main` loop is started automatically when triggering `show` on `window`)
@@ -117,7 +118,7 @@ gem install glimmer-dsl-libui
117
118
  Or install via Bundler `Gemfile`:
118
119
 
119
120
  ```ruby
120
- gem 'glimmer-dsl-libui', '~> 0.0.4'
121
+ gem 'glimmer-dsl-libui', '~> 0.0.5'
121
122
  ```
122
123
 
123
124
  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.
@@ -146,7 +147,7 @@ Application.new.launch
146
147
 
147
148
  ## API
148
149
 
149
- Any control returned by a Glimmer GUI DSL keyword declaration can be introspected for its properties and updated via object-oriented attributes (standard Ruby `attr`/`attr=` or `set_attr`).
150
+ Any control returned by a [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) keyword declaration can be introspected for its properties and updated via object-oriented attributes (standard Ruby `attr`/`attr=` or `set_attr`).
150
151
 
151
152
  Example (you may copy/paste in [`girb`](#girb-glimmer-irb)):
152
153
 
@@ -170,18 +171,40 @@ w.libui # => #<Fiddle::Pointer:0x00007fde53997980 ptr=0x00007fde51352a60 size=0
170
171
 
171
172
  Supported Controls and their Properties / Listeners:
172
173
  - `button`: `text` (`String`) / `on_clicked`
174
+ - `combobox`: `items` (`Array` of `String`), `selected` (`1` or `0`) / `on_selected`
175
+ - `color_button`: `color` (r `Numeric`, g `Numeric`, b `Numeric`, a `Numeric`), `selected` (`1` or `0`) / `on_selected`
176
+ - `date_picker`: None / None
177
+ - `date_time_picker`: `time` (`UI::FFI::TM`) / `on_changed`
178
+ - `editable_combobox`: `items` (`Array` of `String`), `text` (`String`) / `on_changed`
173
179
  - `entry`: `read_only` (`1` or `0`), `text` (`String`) / `on_changed`
180
+ - `font_button`: `font` (`UI::FFI::FontDescriptor`) / `on_changed`
181
+ - `group`: `margined` (`1` or `0`), `title` (`String`) / None
182
+ - `horizontal_box`: `padded` (`1` or `0`) / None
183
+ - `horizontal_separator`: None / None
184
+ - `label`: `text` (`String`) / None
174
185
  - `menu`: None / None
175
186
  - `menu_item`: `checked` (`1` or `0`) / `on_clicked`
187
+ - `multiline_entry`: `read_only` (`1` or `0`), `text` (`String`) / None
176
188
  - `msg_box`: None / None
177
189
  - `non_wrapping_multiline_entry`: None / None
190
+ - `progress_bar`: `value` (`Numeric`) / None
191
+ - `radio_buttons`: `selected` (`1` or `0`) / `on_selected`
192
+ - `slider`: `value` (`Numeric`) / `on_changed`
193
+ - `spinbox`: `value` (`Numeric`) / `on_changed`
194
+ - `tab`: `margined` (`1` or `0`), `num_pages` (`Integer`) / None
195
+ - `tab_item`: `index` [read-only] (`Integer`), `margined` (`1` or `0`), `name` [read-only] (`String`) / None
196
+ - `time_picker`: None / None
197
+ - `vertical_box`: `padded` (`1` or `0`) / None
178
198
  - `window`: `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`
179
199
 
180
200
  Common Control Properties:
181
- - `enabled`
182
- - `parent`
183
- - `toplevel`
184
- - `visible`
201
+ - `enabled` (`1` or `0`)
202
+ - `libui` (`Fiddle::Pointer`): returns wrapped [LibUI](https://github.com/kojix2/LibUI) object
203
+ - `parent_proxy` (`Glimmer::LibUI::ControlProxy` or subclass)
204
+ - `parent` (`Fiddle::Pointer`)
205
+ - `toplevel` [read-only] (`1` or `0`)
206
+ - `visible` (`1` or `0`)
207
+ - `stretchy` [dsl-only] (`1` or `0`): available in [Glimmer GUI DSL](#glimmer-gui-dsl-concepts) when nested under `horizontal_box` or `vertical_box`
185
208
 
186
209
  Common Control Operations:
187
210
  - `destroy`
@@ -190,6 +213,8 @@ Common Control Operations:
190
213
  - `hide`
191
214
  - `show`
192
215
 
216
+ To learn more about the [LibUI](https://github.com/kojix2/LibUI) API exposed through [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui), check out the [libui C headers](https://github.com/andlabs/libui/blob/master/ui.h)
217
+
193
218
  ## Girb (Glimmer IRB)
194
219
 
195
220
  You can run the `girb` command (`bin/girb` if you cloned the project locally):
@@ -204,7 +229,7 @@ Gotcha: On the Mac, when you close a window opened in `girb`, it remains open un
204
229
 
205
230
  ## Examples
206
231
 
207
- These examples reimplement the ones in the [LibUI](https://github.com/kojix2/LibUI) project utilizing the Glimmer GUI DSL.
232
+ These examples reimplement the ones in the [LibUI](https://github.com/kojix2/LibUI) project utilizing the [Glimmer GUI DSL](#glimmer-gui-dsl-concepts).
208
233
 
209
234
  ### Basic Window
210
235
 
@@ -518,7 +543,7 @@ window('Notepad', 500, 300, 1) {
518
543
 
519
544
  ### Midi Player
520
545
 
521
- This example has pre-requisites:
546
+ This example has prerequisites:
522
547
  - Install [TiMidity](http://timidity.sourceforge.net) and ensure `timidity` command is in `PATH` (can be installed via [Homebrew](https://brew.sh) on Mac or [apt-get](https://help.ubuntu.com/community/AptGet/Howto) on Linux).
523
548
  - Add `*.mid` files to `~/Music` directory (you may copy the ones included in [sounds](sounds) directory)
524
549
 
@@ -740,6 +765,412 @@ end
740
765
  TinyMidiPlayer.new
741
766
  ```
742
767
 
768
+ ### Control Gallery
769
+
770
+ [examples/control_gallery.rb](examples/control_gallery.rb)
771
+
772
+ Run with this command from the root of the project if you cloned the project:
773
+
774
+ ```
775
+ ruby -r './lib/glimmer-dsl-libui' examples/control_gallery.rb
776
+ ```
777
+
778
+ Run with this command if you installed the [Ruby gem](https://rubygems.org/gems/glimmer-dsl-libui):
779
+
780
+ ```
781
+ ruby -r glimmer-dsl-libui -e "require 'examples/control_gallery'"
782
+ ```
783
+
784
+ Mac
785
+
786
+ ![glimmer-dsl-libui-mac-control-gallery.png](images/glimmer-dsl-libui-mac-control-gallery.png)
787
+
788
+ Linux
789
+
790
+ ![glimmer-dsl-libui-linux-control-gallery.png](images/glimmer-dsl-libui-linux-control-gallery.png)
791
+
792
+ [LibUI](https://github.com/kojix2/LibUI) Original Version:
793
+
794
+ ```ruby
795
+ require 'libui'
796
+ UI = LibUI
797
+
798
+ UI.init
799
+
800
+ should_quit = proc do
801
+ puts 'Bye Bye'
802
+ UI.control_destroy(MAIN_WINDOW)
803
+ UI.quit
804
+ 0
805
+ end
806
+
807
+ # File menu
808
+ menu = UI.new_menu('File')
809
+ open_menu_item = UI.menu_append_item(menu, 'Open')
810
+ UI.menu_item_on_clicked(open_menu_item) do
811
+ pt = UI.open_file(MAIN_WINDOW)
812
+ puts pt unless pt.null?
813
+ end
814
+ save_menu_item = UI.menu_append_item(menu, 'Save')
815
+ UI.menu_item_on_clicked(save_menu_item) do
816
+ pt = UI.save_file(MAIN_WINDOW)
817
+ puts pt unless pt.null?
818
+ end
819
+
820
+ UI.menu_append_quit_item(menu)
821
+ UI.on_should_quit(should_quit)
822
+
823
+ # Edit menu
824
+ edit_menu = UI.new_menu('Edit')
825
+ UI.menu_append_check_item(edit_menu, 'Checkable Item_')
826
+ UI.menu_append_separator(edit_menu)
827
+ disabled_item = UI.menu_append_item(edit_menu, 'Disabled Item_')
828
+ UI.menu_item_disable(disabled_item)
829
+
830
+ preferences = UI.menu_append_preferences_item(menu)
831
+
832
+ # Help menu
833
+ help_menu = UI.new_menu('Help')
834
+ UI.menu_append_item(help_menu, 'Help')
835
+ UI.menu_append_about_item(help_menu)
836
+
837
+ # Main Window
838
+ MAIN_WINDOW = UI.new_window('Control Gallery', 600, 500, 1)
839
+ UI.window_set_margined(MAIN_WINDOW, 1)
840
+ UI.window_on_closing(MAIN_WINDOW, should_quit)
841
+
842
+ vbox = UI.new_vertical_box
843
+ UI.window_set_child(MAIN_WINDOW, vbox)
844
+ hbox = UI.new_horizontal_box
845
+ UI.box_set_padded(vbox, 1)
846
+ UI.box_set_padded(hbox, 1)
847
+
848
+ UI.box_append(vbox, hbox, 1)
849
+
850
+ # Group - Basic Controls
851
+ group = UI.new_group('Basic Controls')
852
+ UI.group_set_margined(group, 1)
853
+ UI.box_append(hbox, group, 1) # OSX bug?
854
+
855
+ inner = UI.new_vertical_box
856
+ UI.box_set_padded(inner, 1)
857
+ UI.group_set_child(group, inner)
858
+
859
+ # Button
860
+ button = UI.new_button('Button')
861
+ UI.button_on_clicked(button) do
862
+ UI.msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
863
+ end
864
+ UI.box_append(inner, button, 0)
865
+
866
+ # Checkbox
867
+ checkbox = UI.new_checkbox('Checkbox')
868
+ UI.checkbox_on_toggled(checkbox) do |ptr|
869
+ checked = UI.checkbox_checked(ptr) == 1
870
+ UI.window_set_title(MAIN_WINDOW, "Checkbox is #{checked}")
871
+ UI.checkbox_set_text(ptr, "I am the checkbox (#{checked})")
872
+ end
873
+ UI.box_append(inner, checkbox, 0)
874
+
875
+ # Label
876
+ UI.box_append(inner, UI.new_label('Label'), 0)
877
+
878
+ # Separator
879
+ UI.box_append(inner, UI.new_horizontal_separator, 0)
880
+
881
+ # Date Picker
882
+ UI.box_append(inner, UI.new_date_picker, 0)
883
+
884
+ # Time Picker
885
+ UI.box_append(inner, UI.new_time_picker, 0)
886
+
887
+ # Date Time Picker
888
+ UI.box_append(inner, UI.new_date_time_picker, 0)
889
+
890
+ # Font Button
891
+ UI.box_append(inner, UI.new_font_button, 0)
892
+
893
+ # Color Button
894
+ UI.box_append(inner, UI.new_color_button, 0)
895
+
896
+ inner2 = UI.new_vertical_box
897
+ UI.box_set_padded(inner2, 1)
898
+ UI.box_append(hbox, inner2, 1)
899
+
900
+ # Group - Numbers
901
+ group = UI.new_group('Numbers')
902
+ UI.group_set_margined(group, 1)
903
+ UI.box_append(inner2, group, 0)
904
+
905
+ inner = UI.new_vertical_box
906
+ UI.box_set_padded(inner, 1)
907
+ UI.group_set_child(group, inner)
908
+
909
+ # Spinbox
910
+ spinbox = UI.new_spinbox(0, 100)
911
+ UI.spinbox_set_value(spinbox, 42)
912
+ UI.spinbox_on_changed(spinbox) do |ptr|
913
+ puts "New Spinbox value: #{UI.spinbox_value(ptr)}"
914
+ end
915
+ UI.box_append(inner, spinbox, 0)
916
+
917
+ # Slider
918
+ slider = UI.new_slider(0, 100)
919
+ UI.box_append(inner, slider, 0)
920
+
921
+ # Progressbar
922
+ progressbar = UI.new_progress_bar
923
+ UI.box_append(inner, progressbar, 0)
924
+
925
+ UI.slider_on_changed(slider) do |ptr|
926
+ v = UI.slider_value(ptr)
927
+ puts "New Slider value: #{v}"
928
+ UI.progress_bar_set_value(progressbar, v)
929
+ end
930
+
931
+ # Group - Lists
932
+ group = UI.new_group('Lists')
933
+ UI.group_set_margined(group, 1)
934
+ UI.box_append(inner2, group, 0)
935
+
936
+ inner = UI.new_vertical_box
937
+ UI.box_set_padded(inner, 1)
938
+ UI.group_set_child(group, inner)
939
+
940
+ # Combobox
941
+ cbox = UI.new_combobox
942
+ UI.combobox_append(cbox, 'combobox Item 1')
943
+ UI.combobox_append(cbox, 'combobox Item 2')
944
+ UI.combobox_append(cbox, 'combobox Item 3')
945
+ UI.box_append(inner, cbox, 0)
946
+ UI.combobox_on_selected(cbox) do |ptr|
947
+ puts "New combobox selection: #{UI.combobox_selected(ptr)}"
948
+ end
949
+
950
+ # Editable Combobox
951
+ ebox = UI.new_editable_combobox
952
+ UI.editable_combobox_append(ebox, 'Editable Item 1')
953
+ UI.editable_combobox_append(ebox, 'Editable Item 2')
954
+ UI.editable_combobox_append(ebox, 'Editable Item 3')
955
+ UI.box_append(inner, ebox, 0)
956
+
957
+ # Radio Buttons
958
+ rb = UI.new_radio_buttons
959
+ UI.radio_buttons_append(rb, 'Radio Button 1')
960
+ UI.radio_buttons_append(rb, 'Radio Button 2')
961
+ UI.radio_buttons_append(rb, 'Radio Button 3')
962
+ UI.box_append(inner, rb, 1)
963
+
964
+ # Tab
965
+ tab = UI.new_tab
966
+ hbox1 = UI.new_horizontal_box
967
+ hbox2 = UI.new_horizontal_box
968
+ UI.tab_append(tab, 'Page 1', hbox1)
969
+ UI.tab_append(tab, 'Page 2', hbox2)
970
+ UI.tab_append(tab, 'Page 3', UI.new_horizontal_box)
971
+ UI.box_append(inner2, tab, 1)
972
+
973
+ # Text Entry
974
+ text_entry = UI.new_entry
975
+ UI.entry_set_text text_entry, 'Please enter your feelings'
976
+ UI.entry_on_changed(text_entry) do |ptr|
977
+ puts "Current textbox data: '#{UI.entry_text(ptr)}'"
978
+ end
979
+ UI.box_append(hbox1, text_entry, 1)
980
+
981
+ UI.control_show(MAIN_WINDOW)
982
+
983
+ UI.main
984
+ UI.quit
985
+ ```
986
+
987
+ [Glimmer DSL for LibUI](https://rubygems.org/gems/glimmer-dsl-libui) Version:
988
+
989
+ ```ruby
990
+ require 'glimmer-dsl-libui'
991
+
992
+ include Glimmer
993
+
994
+ menu('File') {
995
+ menu_item('Open') {
996
+ on_clicked do
997
+ file = open_file(MAIN_WINDOW)
998
+ puts file unless file.nil?
999
+ end
1000
+ }
1001
+
1002
+ menu_item('Save') {
1003
+ on_clicked do
1004
+ file = save_file(MAIN_WINDOW)
1005
+ puts file unless file.nil?
1006
+ end
1007
+ }
1008
+
1009
+ quit_menu_item {
1010
+ on_clicked do
1011
+ puts 'Bye Bye'
1012
+ end
1013
+ }
1014
+
1015
+ preferences_menu_item # Can optionally contain an on_clicked listener
1016
+ }
1017
+
1018
+ menu('Edit') {
1019
+ check_menu_item('Checkable Item_')
1020
+ separator_menu_item
1021
+ menu_item('Disabled Item_') { |mi|
1022
+ enabled 0
1023
+ }
1024
+ }
1025
+
1026
+ menu('Help') {
1027
+ menu_item('Help')
1028
+
1029
+ about_menu_item # Can optionally contain an on_clicked listener
1030
+ }
1031
+
1032
+ MAIN_WINDOW = window('Control Gallery', 600, 500, 1) {
1033
+ margined 1
1034
+
1035
+ on_closing do
1036
+ puts 'Bye Bye'
1037
+ end
1038
+
1039
+ vertical_box { |vb|
1040
+ padded 1
1041
+
1042
+ horizontal_box {
1043
+ padded 1
1044
+
1045
+ group('Basic Controls') {
1046
+ margined 1
1047
+
1048
+ vertical_box {
1049
+ padded 1
1050
+
1051
+ button('Button') {
1052
+ stretchy 0
1053
+
1054
+ on_clicked do
1055
+ msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
1056
+ end
1057
+ }
1058
+
1059
+ checkbox('Checkbox') { |c|
1060
+ stretchy 0
1061
+
1062
+ on_toggled do
1063
+ checked = c.checked == 1
1064
+ MAIN_WINDOW.title = "Checkbox is #{checked}"
1065
+ c.text = "I am the checkbox (#{checked})"
1066
+ end
1067
+ }
1068
+
1069
+ label('Label') { stretchy 0 }
1070
+
1071
+ horizontal_separator { stretchy 0 }
1072
+
1073
+ date_picker { stretchy 0 }
1074
+
1075
+ time_picker { stretchy 0 }
1076
+
1077
+ date_time_picker { stretchy 0 }
1078
+
1079
+ font_button { stretchy 0 }
1080
+
1081
+ color_button { stretchy 0 }
1082
+ }
1083
+ }
1084
+
1085
+ vertical_box {
1086
+ padded 1
1087
+
1088
+ group('Numbers') {
1089
+ stretchy 0
1090
+ margined 1
1091
+
1092
+ vertical_box {
1093
+ padded 1
1094
+
1095
+ spinbox(0, 100) { |s|
1096
+ stretchy 0
1097
+ value 42
1098
+
1099
+ on_changed do
1100
+ puts "New Spinbox value: #{s.value}"
1101
+ end
1102
+ }
1103
+
1104
+ slider(0, 100) { |s|
1105
+ stretchy 0
1106
+
1107
+ on_changed do
1108
+ v = s.value
1109
+ puts "New Slider value: #{v}"
1110
+ @progress_bar.value = v
1111
+ end
1112
+ }
1113
+
1114
+ @progress_bar = progress_bar { stretchy 0 }
1115
+ }
1116
+ }
1117
+
1118
+ group('Lists') {
1119
+ stretchy 0
1120
+ margined 1
1121
+
1122
+ vertical_box {
1123
+ padded 1
1124
+
1125
+ combobox { |c|
1126
+ stretchy 0
1127
+ items ['combobox Item 1', 'combobox Item 2', 'combobox Item 3']
1128
+
1129
+ on_selected do
1130
+ puts "New combobox selection: #{c.selected}"
1131
+ end
1132
+ }
1133
+
1134
+ editable_combobox {
1135
+ stretchy 0
1136
+ items ['Editable Item 1', 'Editable Item 2', 'Editable Item 3']
1137
+ }
1138
+
1139
+ radio_buttons {
1140
+ items ['Radio Button 1', 'Radio Button 2', 'Radio Button 3']
1141
+ }
1142
+ }
1143
+ }
1144
+
1145
+ tab {
1146
+ tab_item('Page 1') {
1147
+ horizontal_box {
1148
+ entry { |e|
1149
+ text 'Please enter your feelings'
1150
+
1151
+ on_changed do
1152
+ puts "Current textbox data: '#{e.text}'"
1153
+ end
1154
+ }
1155
+ }
1156
+ }
1157
+
1158
+ tab_item('Page 2') {
1159
+ horizontal_box
1160
+ }
1161
+
1162
+ tab_item('Page 3') {
1163
+ horizontal_box
1164
+ }
1165
+ }
1166
+ }
1167
+ }
1168
+ }
1169
+ }
1170
+
1171
+ MAIN_WINDOW.show
1172
+ ```
1173
+
743
1174
  ## Contributing to glimmer-dsl-libui
744
1175
 
745
1176
  - Check out the latest master to make sure the feature hasn't been
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5