libui_paradise 0.2.48

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of libui_paradise might be problematic. Click here for more details.

Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +2064 -0
  3. data/doc/README.gen +1923 -0
  4. data/doc/SNIPPETS.md +94 -0
  5. data/doc/todo/todo.md +16 -0
  6. data/lib/libui_paradise/autoinclude.rb +9 -0
  7. data/lib/libui_paradise/base/base.rb +154 -0
  8. data/lib/libui_paradise/colours/colours.rb +14 -0
  9. data/lib/libui_paradise/domain_specific_language/README.md +5 -0
  10. data/lib/libui_paradise/domain_specific_language/button.yml +7 -0
  11. data/lib/libui_paradise/examples/complex/001_hbox_example.rb +17 -0
  12. data/lib/libui_paradise/examples/complex/002_tabs_example.rb +25 -0
  13. data/lib/libui_paradise/examples/complex/003_open_file_button_example.rb +38 -0
  14. data/lib/libui_paradise/examples/complex/004_font_button.rb +41 -0
  15. data/lib/libui_paradise/examples/complex/005_search_entry_example.rb +18 -0
  16. data/lib/libui_paradise/examples/complex/006_coloured_boxes_example.rb +22 -0
  17. data/lib/libui_paradise/examples/complex/007_slider_example.rb +31 -0
  18. data/lib/libui_paradise/examples/complex/008_radio_button_example.rb +23 -0
  19. data/lib/libui_paradise/examples/complex/009_separator_example.rb +25 -0
  20. data/lib/libui_paradise/examples/complex/010_table_example.rb +55 -0
  21. data/lib/libui_paradise/examples/complex/011_two_buttons_showing_how_to_enable_and_disable_them.rb +32 -0
  22. data/lib/libui_paradise/examples/complex/012_password_entry_example.rb +29 -0
  23. data/lib/libui_paradise/examples/complex/013_form_example.rb +38 -0
  24. data/lib/libui_paradise/examples/complex/014_text_example.rb +18 -0
  25. data/lib/libui_paradise/examples/complex/015_text_view_example.rb +16 -0
  26. data/lib/libui_paradise/examples/complex/016_grid_example.rb +31 -0
  27. data/lib/libui_paradise/examples/complex/017_unicode_text_example.rb +30 -0
  28. data/lib/libui_paradise/examples/complex/018_spinbutton_example.rb +33 -0
  29. data/lib/libui_paradise/examples/complex/019_combo_box_example.rb +50 -0
  30. data/lib/libui_paradise/examples/complex/020_checkbox_example.rb +81 -0
  31. data/lib/libui_paradise/examples/complex/021_font_example.rb +115 -0
  32. data/lib/libui_paradise/examples/complex/022_simple_notepad_example.rb +25 -0
  33. data/lib/libui_paradise/examples/complex/023_msg_box_error.rb +27 -0
  34. data/lib/libui_paradise/examples/complex/024_parse_config_file_example.config +6 -0
  35. data/lib/libui_paradise/examples/complex/024_parse_config_file_example.rb +15 -0
  36. data/lib/libui_paradise/examples/complex/025_colour_button.rb +53 -0
  37. data/lib/libui_paradise/examples/complex/026_basic_table_image.rb +96 -0
  38. data/lib/libui_paradise/examples/complex/027_basic_button_example.rb +19 -0
  39. data/lib/libui_paradise/examples/complex/028_try_for_automatic_button_press_event_after_a_delay.rb +47 -0
  40. data/lib/libui_paradise/examples/complex/029_progressbar_example.rb +116 -0
  41. data/lib/libui_paradise/examples/complex/030_entry_responds_to_comment_as_synonymous_to_the_enter_key_pressed_example.rb +140 -0
  42. data/lib/libui_paradise/examples/complex/031_notification_functionality_example.rb +96 -0
  43. data/lib/libui_paradise/examples/complex/032_simple_window_example.rb +69 -0
  44. data/lib/libui_paradise/examples/complex/033_daemonize_and_exit_after_delay_example.rb +91 -0
  45. data/lib/libui_paradise/examples/simple/001_open_file_example.rb +35 -0
  46. data/lib/libui_paradise/examples/simple/002_histogram_example.rb +207 -0
  47. data/lib/libui_paradise/examples/simple/003_fancy_text_example.rb +220 -0
  48. data/lib/libui_paradise/examples/simple/004_date_time_picker.rb +52 -0
  49. data/lib/libui_paradise/examples/simple/005_text_drawing_example.rb +185 -0
  50. data/lib/libui_paradise/examples/simple/006_midi_player.rb +96 -0
  51. data/lib/libui_paradise/examples/simple/007_control_gallery.rb +191 -0
  52. data/lib/libui_paradise/examples/simple/008_basic_area_example.rb +56 -0
  53. data/lib/libui_paradise/examples/simple/009_spectrum.rb +107 -0
  54. data/lib/libui_paradise/examples/simple/README.md +7 -0
  55. data/lib/libui_paradise/experimental/dsl.rb +17 -0
  56. data/lib/libui_paradise/extensions/counters.rb +58 -0
  57. data/lib/libui_paradise/extensions/extensions.rb +29 -0
  58. data/lib/libui_paradise/extensions/hash_fiddle_pointer_widgets.rb +150 -0
  59. data/lib/libui_paradise/extensions/misc.rb +754 -0
  60. data/lib/libui_paradise/fiddle/pointer.rb +1157 -0
  61. data/lib/libui_paradise/generic_window/README.md +9 -0
  62. data/lib/libui_paradise/generic_window/generic_window.rb +79 -0
  63. data/lib/libui_paradise/images/LIBUI_PARADISE_LOGO.png +0 -0
  64. data/lib/libui_paradise/images/README.md +2 -0
  65. data/lib/libui_paradise/images/form_example.png +0 -0
  66. data/lib/libui_paradise/libui_classes/box.rb +156 -0
  67. data/lib/libui_paradise/libui_classes/grid.rb +55 -0
  68. data/lib/libui_paradise/libui_classes/libui_classes.rb +1610 -0
  69. data/lib/libui_paradise/project/project.rb +28 -0
  70. data/lib/libui_paradise/prototype/README.md +3 -0
  71. data/lib/libui_paradise/prototype/prototype.rb +107 -0
  72. data/lib/libui_paradise/requires/require_the_libui_classes.rb +29 -0
  73. data/lib/libui_paradise/requires/require_the_libui_paradise_project.rb +12 -0
  74. data/lib/libui_paradise/toplevel_methods/misc.rb +13 -0
  75. data/lib/libui_paradise/version/version.rb +17 -0
  76. data/lib/libui_paradise.rb +1 -0
  77. data/libui_paradise.gemspec +49 -0
  78. data/test/testing_generic_window.rb +19 -0
  79. metadata +156 -0
data/doc/SNIPPETS.md ADDED
@@ -0,0 +1,94 @@
1
+ # How to add a new main window:
2
+ # width, height, hasMenubar
3
+ main_window = UI.new_window('hello world', 300, 200, 1)
4
+
5
+ Source code:
6
+
7
+ https://raw.githubusercontent.com/andlabs/libui/master/unix/window.c
8
+
9
+ # How to add a libui-widget to the main window / Designate a child widget:
10
+
11
+ UI.window_set_child(main_window, button)
12
+
13
+ # Act on closing-event (on quit tag):
14
+
15
+ UI.window_on_closing(main_window) {
16
+ puts 'Bye Bye'
17
+ UI.control_destroy(main_window)
18
+ UI.quit
19
+ 0
20
+ }
21
+ # Or simpler:
22
+ close_properly(main_window)
23
+
24
+ # Add the window to the main UI:
25
+
26
+ UI.control_show(main_window)
27
+ main_window.show_the_controls # Or use this one here.
28
+
29
+
30
+ # Add a checkbox (checkbox tag, checkbutton)
31
+
32
+ checkbox = UI.new_checkbox('Checkbox') # or ui_checkbox
33
+ checkbox_toggle_callback = proc { |pointer|
34
+ checked = UI.checkbox_checked(pointer) == 1
35
+ UI.window_set_title(MAIN_WINDOW, "Checkbox is #{checked}")
36
+ UI.checkbox_set_text(pointer, "I am the checkbox (#{checked})")
37
+ 0
38
+ }
39
+ UI.checkbox_on_toggled(checkbox, checkbox_toggle_callback, nil)
40
+ UI.box_append(inner, checkbox, 0)
41
+
42
+ To set it checked:
43
+
44
+ checkbox.set_checked(1)
45
+
46
+ To query its state:
47
+
48
+ checked = UI.checkbox_checked(pointer) == 1
49
+
50
+ # And the control:
51
+
52
+ UI.control_show(main_window)
53
+
54
+ # Using a text-entry (ui entry tag):
55
+
56
+ text_entry = UI.new_entry
57
+ UI.entry_set_text(text_entry, 'Please enter your feelings')
58
+ UI.entry_on_changed(text_entry, text_changed_callback, nil)
59
+
60
+ # To set this on a "multiline entry", aka spanning several
61
+ # rows, do use:
62
+ UI.multiline_entry_set_text(entry1, 'Yo there')
63
+ ui_text_view # an alias used in libui_paradise
64
+
65
+ text1 = UI.entry_text(entry1) # Obtain text. You may have to call .to_s on it, to guarantee the String.
66
+ UI.multiline_entry_text # Obtain the text from a multiline entry.
67
+
68
+ # Create a combobox (combo tag, combobox tag):
69
+
70
+ combobox_selected_callback = proc { |ptr|
71
+ puts "New combobox selection: #{UI.combobox_selected(ptr)}"
72
+ }
73
+ cbox = UI.new_combobox
74
+ UI.combobox_append(cbox, 'combobox Item 1')
75
+ UI.combobox_append(cbox, 'combobox Item 2')
76
+ UI.combobox_append(cbox, 'combobox Item 3')
77
+ UI.box_append(inner, cbox, 0)
78
+ UI.combobox_on_selected(cbox, combobox_selected_callback, nil)
79
+
80
+ # Or more concise:
81
+ combo_box = UI.combobox {
82
+ ['combobox Item 1', 'combobox Item 2', 'combobox Item 3']
83
+ }
84
+
85
+
86
+ # Add content to an editable combox:
87
+
88
+ UI.append() # .append() adds the named item to the end of the EditableCombobox.
89
+
90
+ # How to build a menu-interface (menu tag):
91
+
92
+ help_menu = UI.new_menu('Help')
93
+ version_item = UI.menu_append_item(help_menu, 'Version')
94
+
data/doc/todo/todo.md ADDED
@@ -0,0 +1,16 @@
1
+ - Make sure that each component has a screenshot. It's ok to
2
+ re-use existing screenshots from other projects.
3
+
4
+ - Make sure the project is API compatible to glimmer-libui.
5
+
6
+ - Rewrite the project from the get-go. Also integrate
7
+ @main_window into the main hash, rather than have it
8
+ standalone. ^^^ this should be fixed ASAP - it is not
9
+ elegant to have a separate @main_window ... but for
10
+ now we'll keep it as-is.
11
+
12
+ - Re-organize the examples, perhaps starting with another
13
+ one.
14
+
15
+ - Check for image and font support again. Something isn't
16
+ working!
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/autoinclude.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/requires/require_the_libui_paradise_project.rb'
8
+
9
+ include LibuiParadise::Extensions
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === LibuiParadise::Base
6
+ # =========================================================================== #
7
+ # require 'libui_paradise/base/base.rb'
8
+ # < LibuiParadise::Base
9
+ # =========================================================================== #
10
+ module LibuiParadise
11
+
12
+ class Base # === LibuiParadise::Base
13
+
14
+ alias e puts
15
+
16
+ require 'libui_paradise'
17
+ include LibuiParadise::Extensions
18
+
19
+ # ========================================================================= #
20
+ # === TITLE
21
+ # ========================================================================= #
22
+ TITLE = 'Generic Title'
23
+
24
+ # ========================================================================= #
25
+ # === WIDTH
26
+ # ========================================================================= #
27
+ WIDTH = 800
28
+
29
+ # ========================================================================= #
30
+ # === HEIGHT
31
+ # ========================================================================= #
32
+ HEIGHT = 640
33
+
34
+ # ========================================================================= #
35
+ # === default_title_width_height
36
+ # ========================================================================= #
37
+ def default_title_width_height(
38
+ title = TITLE,
39
+ width = WIDTH,
40
+ height = HEIGHT
41
+ )
42
+ title_width_height(
43
+ title,
44
+ width,
45
+ height
46
+ )
47
+ end
48
+
49
+ # ========================================================================= #
50
+ # === reset (reset tag)
51
+ # ========================================================================= #
52
+ def reset
53
+ title_width_height(TITLE, WIDTH, HEIGHT)
54
+ # ======================================================================= #
55
+ # === @window
56
+ # ======================================================================= #
57
+ set_window(
58
+ return_default_window
59
+ )
60
+ end
61
+
62
+ # ======================================================================= #
63
+ # === update_the_main_window
64
+ # ======================================================================= #
65
+ def update_the_main_window
66
+ set_window(
67
+ return_default_window
68
+ )
69
+ end
70
+
71
+ # ======================================================================= #
72
+ # === return_default_window
73
+ # ======================================================================= #
74
+ def return_default_window(
75
+ title = title?,
76
+ width = width?,
77
+ height = height?
78
+ )
79
+ return ui_padded_main_window(title, width, height, 0)
80
+ end
81
+
82
+ # ======================================================================= #
83
+ # === set_window
84
+ #
85
+ # Simply assign to @window here.
86
+ # ======================================================================= #
87
+ def set_window(i = return_default_window)
88
+ @window = i
89
+ end
90
+
91
+ # ========================================================================= #
92
+ # === create_skeleton (create tag, skeleton tag)
93
+ # ========================================================================= #
94
+ def create_skeleton
95
+ end
96
+
97
+ # ========================================================================= #
98
+ # === add_these_widgets_to_the_main_window
99
+ #
100
+ # This method can be used to batch-add several widgets into the
101
+ # main window at hand. It has been created in September 2022 to
102
+ # simplify adding widgets from simple scripts. If we can easily
103
+ # add widgets then this will help write smaller GUIs quickly.
104
+ #
105
+ # For now the main container to be used is a vertical-box here.
106
+ # In theory this could be changed, but for now this is how it
107
+ # is.
108
+ # ========================================================================= #
109
+ def add_these_widgets_to_the_main_window(*i)
110
+ outer_vbox = padded_vbox
111
+ # ======================================================================= #
112
+ # First add the two buttons on top:
113
+ # ======================================================================= #
114
+ outer_vbox.add_hsep
115
+ i.flatten.each {|this_widget|
116
+ # ===================================================================== #
117
+ # Some symbols exist as special keywords:
118
+ # ===================================================================== #
119
+ case this_widget
120
+ # ===================================================================== #
121
+ # === :create_a_quit_button
122
+ # ===================================================================== #
123
+ when :create_a_quit_button
124
+ this_widget = quit_button
125
+ end
126
+ outer_vbox.minimal(this_widget)
127
+ }
128
+ @window.add(outer_vbox)
129
+ if i.size > 0
130
+ Thread.new {
131
+ sleep 5
132
+ require 'save_file'
133
+ SaveFile.write_what_into('YO','/Depot/j/ACK.md')
134
+ exit
135
+ }
136
+ end
137
+ @window.intelligent_exit
138
+ end; alias add_these_widgets add_these_widgets_to_the_main_window # === add_these_widgets
139
+
140
+ # ========================================================================= #
141
+ # === run_in_the_background
142
+ # ========================================================================= #
143
+ def run_in_the_background
144
+ Process.daemon
145
+ end
146
+
147
+ # ========================================================================= #
148
+ # === run
149
+ # ========================================================================= #
150
+ def run
151
+ create_skeleton_then_connect_skeleton
152
+ end
153
+
154
+ end; end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/colours/colours.rb
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ # ========================================================================= #
10
+ # === COLOR_BLUE
11
+ # ========================================================================= #
12
+ COLOR_BLUE = 0x1E90FF
13
+
14
+ end
@@ -0,0 +1,5 @@
1
+ The directory here is an attempt to simplify the bindings in
2
+ libui_paradise even more.
3
+
4
+ For instance, the user should be able to parse widgets that
5
+ are described in pure yaml.
@@ -0,0 +1,7 @@
1
+ button:
2
+ id: button1
3
+ text: 'This is a button.'
4
+ width: 120
5
+ height: 80
6
+ on_clicked:
7
+ do_call_this_method
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'complex/001_hbox_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ window = ui_padded_window(:filename, 500, 200)
10
+
11
+ hbox1 = ui_hbox
12
+ hbox1 << text('This is a hbox example.')
13
+ hbox1 << ui_entry
14
+ hbox1 << text('As can be seen we add elements in a horizontal (side-by-side) manner.')
15
+ window << hbox1
16
+ window.child = hbox1
17
+ window.intelligent_exit
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require '002_tabs_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+ #require 'libui_paradise/requires/require_the_libui_paradise_project.rb'
9
+
10
+ window = ui_main_window('A notebook with tabs example', 1200, 200, 15)
11
+
12
+ tab = ui_tabs
13
+ tab.add('Page 1', hbox(text('One! 😎️')))
14
+ tab.add('Page 2', hbox(text('Two! 😍️')))
15
+ tab.add('Page 3', hbox(text('Three! 😘️')))
16
+ tab.add('Page 4', hbox(text('Four! 😗️')))
17
+ tab.add('Page 5', hbox(text('Five! 😙️')))
18
+ tab.add('Page 6', hbox(text('Six! 😚️')))
19
+
20
+ box = ui_padded_vbox
21
+ box << tab
22
+
23
+ window.child = box
24
+ window.control_show
25
+ window.intelligent_exit
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # This example shows how to open a file via ruby-libui.
6
+ # =========================================================================== #
7
+ # require 'libui_paradise/complex/003_open_file_button_example.rb'
8
+ # =========================================================================== #
9
+ require 'libui_paradise/autoinclude'
10
+
11
+ window = ui_padded_main_window('An open-file button-example', 1200, 200, 15)
12
+
13
+ outer_vbox = ui_padded_vbox
14
+ button_open_file = ui_button('Open file')
15
+ button_open_file.on_clicked {
16
+ begin
17
+ #filename = ui_open_file(window).to_s
18
+ filename = ::LibUI.open_file(main_window).to_s
19
+ e "The filename was: #{filename}"
20
+ rescue ArgumentError => error # Rescue from "NULL pointer given"
21
+ pp error
22
+ end
23
+ }
24
+ outer_vbox << button_open_file
25
+
26
+ window.child = outer_vbox
27
+ window.intelligent_quit
28
+
29
+
30
+ if false
31
+ LibUI.button_on_clicked(button) {
32
+ result = ::LibUI.open_file(main_window).to_s
33
+ if File.exist?(result)
34
+ e 'The file exists. \o/'
35
+ end
36
+ }
37
+
38
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'examples/complex/004_font_button.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ alias e puts
10
+
11
+ main_window = ui_window('hello world', 300, 200, 1)
12
+
13
+ font_button = ui_font_button
14
+ # =========================================================================== #
15
+ # === font_descriptor
16
+ #
17
+ # The font_descriptor will contain all the important information about the
18
+ # font at hand. It will be updated via UI.font_button_font().
19
+ # =========================================================================== #
20
+ font_descriptor = ui_font_descriptor('Hack')
21
+ LibUI.font_button_on_changed(font_button) {
22
+ LibUI.font_button_font(font_button, font_descriptor)
23
+ # ========================================================================= #
24
+ # The following line will output something like:
25
+ #
26
+ # {:family=>"Georgia", :size=>12.0, :weight=>700, :italic=>0, :stretch=>4}
27
+ #
28
+ # ========================================================================= #
29
+ e
30
+ e 'The chosen font is:'
31
+ e
32
+ p family: font_descriptor.Family.to_s,
33
+ size: font_descriptor.Size,
34
+ weight: font_descriptor.Weight,
35
+ italic: font_descriptor.Italic,
36
+ stretch: font_descriptor.Stretch
37
+ }
38
+ main_window.close_properly
39
+ main_window.child = font_button
40
+ main_window.control_show
41
+ LibUI.main_then_quit
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require '005_search_entry_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ window = ui_main_window('A search-entry example', 1200, 200, 15)
10
+
11
+ search_entry = ui_search_entry
12
+ box = ui_padded_vbox
13
+ box << search_entry
14
+ box.is_padded
15
+
16
+ window.child = box
17
+ window.control_show
18
+ window.intelligent_exit
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/examples/complex/006_coloured_boxes_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ require 'colours' # Needs the colours gem.
10
+
11
+ window = ui_main_window('Coloured boxes example', 320, 200, 1)
12
+
13
+ outer_hbox = ui_hbox
14
+ outer_hbox.maximal LibuiParadise.draw_rectangle(:default, :default, Colours.random_html_colour)
15
+ outer_hbox.maximal LibuiParadise.draw_rectangle(:default, :default, :seagreen)
16
+ outer_hbox.maximal LibuiParadise.draw_rectangle(:default, :default, :springgreen)
17
+ outer_hbox.maximal LibuiParadise.draw_rectangle(:default, :default, :royalblue)
18
+ outer_hbox.maximal LibuiParadise.draw_rectangle(:default, :default, :lightblue)
19
+ outer_hbox.maximal LibuiParadise.draw_rectangle(:default, :default, :steelblue)
20
+
21
+ window.add(outer_hbox)
22
+ window.intelligent_quit
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/examples/033_slider_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ window = ui_main_window('Slider Example', 250, 70, 1)
10
+
11
+ slider = ui_slider(0, 100)
12
+
13
+ # =========================================================================== #
14
+ # === callback_for_the_slider
15
+ # =========================================================================== #
16
+ def callback_for_the_slider
17
+ proc { |pointer|
18
+ puts "New Slider value: #{UI.slider_value(pointer)}"
19
+ }
20
+ end
21
+ slider.on_changed { callback_for_the_slider }
22
+
23
+ # =========================================================================== #
24
+ # The original variant would go like this:
25
+ #
26
+ # LibUI.slider_on_changed(slider, slider_changed_callback)
27
+ #
28
+ # =========================================================================== #
29
+ outer_vbox = ui_padded_vbox(slider)
30
+ window.add(outer_vbox)
31
+ window.intelligent_quit
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require '032_form_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ window = margined_window(:filename, 320, 200, 0)
10
+
11
+ outer_vbox = padded_vbox
12
+ array_to_use = ['Radio Button 1', 'Radio Button 2', 'Radio Button 3']
13
+ # =========================================================================== #
14
+ # Keep the buttons padded via hsep on top and on the bottom.
15
+ # =========================================================================== #
16
+
17
+ outer_vbox.minimal(hsep, 0)
18
+ rb = ui_radio_buttons(array_to_use)
19
+ outer_vbox.minimal(rb)
20
+ outer_vbox.minimal(hsep, 0)
21
+
22
+ window.child = outer_vbox
23
+ window.intelligent_quit
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/009_separator_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ window = margined_window(:filename, 250, 150, 0)
10
+
11
+ outer_vbox = padded_vbox
12
+
13
+ button_hello_world = button('A button')
14
+ button_hello_world.on_clicked {
15
+ e 'Hello world!'
16
+ }
17
+
18
+ outer_vbox.minimal(hsep, 1)
19
+ outer_vbox.minimal(hsep, 0)
20
+ outer_vbox.minimal(button_hello_world, 1)
21
+ outer_vbox.minimal(hsep, 0)
22
+ outer_vbox.minimal(hsep, 1)
23
+
24
+ window.child = outer_vbox
25
+ window.intelligent_quit
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # Todo:
6
+ #
7
+ # - Add editable entry to the table
8
+ #
9
+ # =========================================================================== #
10
+ # require 'libui_paradise/010_table_example.rb'
11
+ # =========================================================================== #
12
+ require 'libui_paradise/autoinclude'
13
+
14
+ main_window = padded_window('30) Table example', 300, 200, 1)
15
+ hbox = padded_hbox
16
+ data = [
17
+ %w( cat calm meow ),
18
+ %w( dog loyal woof ),
19
+ %w( chicken bird cock-a-doodle-doo ),
20
+ %w( horse fast neigh ),
21
+ %w( cow slow moo )
22
+ ]
23
+
24
+ # Protect BlockCaller objects from garbage collection.
25
+ @block_callers = []
26
+ def rbcallback(*args, &block)
27
+ args << [0] if args.size == 1 # Argument types are ommited
28
+ block_caller = Fiddle::Closure::BlockCaller.new(*args, &block)
29
+ @block_callers << block_caller
30
+ block_caller
31
+ end
32
+
33
+ model_handler = LibUI::FFI::TableModelHandler.malloc
34
+ model_handler.to_ptr.free = Fiddle::RUBY_FREE
35
+
36
+ model_handler.NumColumns = rbcallback(4) { 2 }
37
+ model_handler.ColumnType = rbcallback(4) { 0 }
38
+ model_handler.NumRows = rbcallback(4) { 5 }
39
+ model_handler.CellValue = rbcallback(1, [1, 1, 4, 4]) do |_, _, row, column|
40
+ LibUI.new_table_value_string(data[row][column])
41
+ end
42
+ model_handler.SetCellValue = rbcallback(0, [0]) {}
43
+
44
+ model = LibUI.new_table_model(model_handler)
45
+
46
+ table_params = ui_table_params_malloc(model)
47
+
48
+ table = ui_table(table_params)
49
+ table.append_text_column('Animal', 0, -1)
50
+ table.append_text_column('Description', 1, -1)
51
+ table.append_text_column('Fancy Stuff', 2, -1)
52
+
53
+ hbox.add(table, 1)
54
+ main_window.child = hbox
55
+ main_window.intelligent_quit
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'examples/complex/011_two_buttons_showing_how_to_enable_and_disable_them.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ main_window = padded_main_window(
10
+ 'Two buttons showing how to enable and disable them', 300, 60, 0
11
+ )
12
+
13
+ outer_hbox = padded_hbox
14
+
15
+ button1 = button('Button #1')
16
+ button2 = button('Button #2')
17
+ button2.disable # Start-state for this button.
18
+
19
+ outer_hbox << button1
20
+ outer_hbox << button2
21
+
22
+ button1.on_clicked {|widget|
23
+ button2.enable
24
+ button1.disable
25
+ }
26
+ button2.on_clicked {|widget|
27
+ button1.enable
28
+ button2.disable
29
+ }
30
+
31
+ main_window.child = outer_hbox
32
+ main_window.intelligent_exit
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/examples/012_password_entry_example.rb'
6
+ # =========================================================================== #
7
+ require 'libui_paradise/autoinclude'
8
+
9
+ window = margined_window('Password Entry Example', 280, 80, 0)
10
+
11
+ outer_vbox = padded_vbox
12
+ entry_containing_the_password = password_entry
13
+ LibUI.entry_on_changed(entry_containing_the_password) { |entry|
14
+ e 'The text is now: '+entry_containing_the_password.text?
15
+ }
16
+
17
+ outer_vbox.minimal(text('Password: '), 0)
18
+ outer_vbox.minimal(entry_containing_the_password, 0)
19
+
20
+ button = button('Show the password')
21
+ button.on_clicked {
22
+ _ = entry_containing_the_password.text?.to_s
23
+ e _
24
+ message_box(window, _)
25
+ }
26
+ outer_vbox.minimal(button, 0)
27
+
28
+ window.child = outer_vbox
29
+ window.intelligent_quit