libui_paradise 0.2.49 → 0.4.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +405 -259
  3. data/bin/libui_message +7 -0
  4. data/doc/README.gen +356 -131
  5. data/doc/todo/todo.md +14 -5
  6. data/lib/libui_paradise/autoinclude.rb +2 -1
  7. data/lib/libui_paradise/base/base.rb +51 -62
  8. data/lib/libui_paradise/base_module/base_module.rb +1514 -0
  9. data/lib/libui_paradise/colours/colours.rb +14 -2
  10. data/lib/libui_paradise/domain_specific_language/README.md +6 -0
  11. data/lib/libui_paradise/examples/complex/002_tabs_example.rb +1 -2
  12. data/lib/libui_paradise/examples/complex/003_open_file_button_example.rb +3 -5
  13. data/lib/libui_paradise/examples/complex/006_coloured_boxes_example.rb +2 -2
  14. data/lib/libui_paradise/examples/complex/007_slider_example.rb +10 -4
  15. data/lib/libui_paradise/examples/complex/008_radio_button_example.rb +2 -2
  16. data/lib/libui_paradise/examples/complex/009_separator_example.rb +2 -2
  17. data/lib/libui_paradise/examples/complex/010_table_example.rb +139 -49
  18. data/lib/libui_paradise/examples/complex/011_two_buttons_showing_how_to_enable_and_disable_them.rb +2 -1
  19. data/lib/libui_paradise/examples/complex/012_password_entry_example.rb +1 -1
  20. data/lib/libui_paradise/examples/complex/013_form_example.rb +1 -1
  21. data/lib/libui_paradise/examples/complex/014_text_example.rb +1 -1
  22. data/lib/libui_paradise/examples/complex/015_text_view_example.rb +4 -4
  23. data/lib/libui_paradise/examples/complex/016_grid_example.rb +20 -11
  24. data/lib/libui_paradise/examples/complex/017_unicode_text_example.rb +2 -2
  25. data/lib/libui_paradise/examples/complex/018_spinbutton_example.rb +1 -1
  26. data/lib/libui_paradise/examples/complex/019_combo_box_example.rb +1 -1
  27. data/lib/libui_paradise/examples/complex/020_checkbox_example.rb +5 -5
  28. data/lib/libui_paradise/examples/complex/021_font_example.rb +4 -3
  29. data/lib/libui_paradise/examples/complex/022_simple_notepad_example.rb +3 -3
  30. data/lib/libui_paradise/examples/complex/023_msg_box_error.rb +5 -5
  31. data/lib/libui_paradise/examples/complex/024_parse_config_file_example.rb +2 -2
  32. data/lib/libui_paradise/examples/complex/025_colour_button.rb +1 -1
  33. data/lib/libui_paradise/examples/complex/026_basic_table_image.rb +5 -8
  34. data/lib/libui_paradise/examples/complex/027_basic_button_example.rb +3 -3
  35. data/lib/libui_paradise/examples/complex/028_try_for_automatic_button_press_event_after_a_delay.rb +4 -5
  36. data/lib/libui_paradise/examples/complex/029_progressbar_example.rb +4 -5
  37. data/lib/libui_paradise/examples/complex/030_entry_responds_to_comment_as_synonymous_to_the_enter_key_pressed_example.rb +5 -6
  38. data/lib/libui_paradise/examples/complex/031_notification_functionality_example.rb +3 -2
  39. data/lib/libui_paradise/examples/complex/032_simple_window_example.rb +2 -1
  40. data/lib/libui_paradise/examples/complex/033_daemonize_and_exit_after_delay_example.rb +3 -2
  41. data/lib/libui_paradise/examples/complex/034_bold_text_example.rb +115 -0
  42. data/lib/libui_paradise/examples/complex/035_parse_into_table_example.rb +109 -0
  43. data/lib/libui_paradise/examples/simple/001_open_file_example.rb +1 -1
  44. data/lib/libui_paradise/examples/simple/002_histogram_example.rb +6 -6
  45. data/lib/libui_paradise/examples/simple/003_fancy_text_example.rb +80 -43
  46. data/lib/libui_paradise/examples/simple/005_text_drawing_example.rb +11 -11
  47. data/lib/libui_paradise/examples/simple/007_control_gallery.rb +21 -14
  48. data/lib/libui_paradise/examples/simple/009_spectrum.rb +7 -1
  49. data/lib/libui_paradise/examples/simple/010_font_button.rb +31 -0
  50. data/lib/libui_paradise/examples/simple/011_simple_notepad.rb +24 -0
  51. data/lib/libui_paradise/examples/simple/012_table_example.rb +71 -0
  52. data/lib/libui_paradise/examples/simple/013_scrolling_pane_example.rb +28 -0
  53. data/lib/libui_paradise/examples/simple/014_simple_entry_example.rb +30 -0
  54. data/lib/libui_paradise/examples/simple/015_slider_example.rb +32 -0
  55. data/lib/libui_paradise/fiddle/{pointer.rb → fiddle.rb} +768 -615
  56. data/lib/libui_paradise/generic_window/generic_window.rb +1 -1
  57. data/lib/libui_paradise/images/README.md +5 -2
  58. data/lib/libui_paradise/libui_classes/button.rb +31 -0
  59. data/lib/libui_paradise/libui_classes/entry.rb +35 -0
  60. data/lib/libui_paradise/libui_classes/grid.rb +14 -23
  61. data/lib/libui_paradise/libui_classes/hbox.rb +39 -0
  62. data/lib/libui_paradise/libui_classes/libui_classes.rb +9 -1595
  63. data/lib/libui_paradise/libui_classes/msg_box.rb +121 -0
  64. data/lib/libui_paradise/libui_classes/msg_box_error.rb +41 -0
  65. data/lib/libui_paradise/libui_classes/slider.rb +28 -0
  66. data/lib/libui_paradise/libui_classes/spinbox.rb +48 -0
  67. data/lib/libui_paradise/libui_classes/vbox.rb +38 -0
  68. data/lib/libui_paradise/project/project.rb +6 -1
  69. data/lib/libui_paradise/prototype/prototype.rb +8 -10
  70. data/lib/libui_paradise/requires/require_the_libui_classes.rb +2 -2
  71. data/lib/libui_paradise/requires/require_the_libui_paradise_project.rb +5 -3
  72. data/lib/libui_paradise/toplevel_methods/add_to_the_registered_widgets.rb +70 -0
  73. data/lib/libui_paradise/toplevel_methods/hash_fiddle_pointer_widgets.rb +37 -0
  74. data/lib/libui_paradise/toplevel_methods/toplevel_counters.rb +83 -0
  75. data/lib/libui_paradise/toplevel_methods/toplevel_methods.rb +792 -0
  76. data/lib/libui_paradise/version/version.rb +2 -2
  77. data/lib/libui_paradise.rb +0 -0
  78. data/libui_paradise.gemspec +5 -4
  79. data/test/testing_generic_window.rb +2 -0
  80. metadata +35 -30
  81. data/doc/SNIPPETS.md +0 -94
  82. data/lib/libui_paradise/extensions/counters.rb +0 -58
  83. data/lib/libui_paradise/extensions/extensions.rb +0 -29
  84. data/lib/libui_paradise/extensions/hash_fiddle_pointer_widgets.rb +0 -150
  85. data/lib/libui_paradise/extensions/misc.rb +0 -754
  86. data/lib/libui_paradise/libui_classes/box.rb +0 -156
  87. data/lib/libui_paradise/toplevel_methods/misc.rb +0 -13
@@ -21,13 +21,31 @@ USE_THIS_FONT = 'Hack' # Or 'Courier New'.
21
21
 
22
22
  # =========================================================================== #
23
23
  # === append_with_attribute
24
+ #
25
+ # The first argument is the String that is to be appended.
26
+ #
27
+ # To append a bigger font, use something like this:
28
+ #
29
+ # bigger_font = UI.new_size_attribute(62)
30
+ # append_with_attribute(attr_str, 'font size', bigger_font, nil)
31
+ #
32
+ # To append bold text, use:
33
+ #
34
+ # attr1 = LibUI.new_weight_attribute(LibUI::TextWeightBold)
35
+ # append_with_attribute(attr_str, 'font weight', attr1)
36
+ #
24
37
  # =========================================================================== #
25
- def append_with_attribute(attr_str, what, attr1, attr2)
26
- start_pos = LibUI.attributed_string_len(attr_str)
27
- end_pos = start_pos + what.length
28
- LibUI.attributed_string_append_unattributed(attr_str, what)
29
- LibUI.attributed_string_set_attribute(attr_str, attr1, start_pos, end_pos)
30
- LibUI.attributed_string_set_attribute(attr_str, attr2, start_pos, end_pos) if attr2
38
+ def append_with_attribute(
39
+ widget,
40
+ use_this_text,
41
+ attr1,
42
+ attr2 # This is rarely needed.
43
+ )
44
+ start_pos = LibUI.attributed_string_len(widget)
45
+ end_pos = start_pos + what.length
46
+ LibUI.attributed_string_append_unattributed(widget, use_this_text)
47
+ LibUI.attributed_string_set_attribute(widget, attr1, start_pos, end_pos)
48
+ LibUI.attributed_string_set_attribute(widget, attr2, start_pos, end_pos) if attr2
31
49
  end
32
50
 
33
51
  # =========================================================================== #
@@ -48,23 +66,27 @@ def make_attribute_string
48
66
 
49
67
  # ========================================================================= #
50
68
  # === Use a bigger font next
69
+ #
70
+ # The bigger font will be use for the String "font size".
51
71
  # ========================================================================= #
52
- bigger_font = UI.new_size_attribute(45)
72
+ bigger_font = UI.new_size_attribute(62)
53
73
  append_with_attribute(attr_str, 'font size', bigger_font, nil)
54
- UI.attributed_string_append_unattributed(attr_str, ', ')
74
+
75
+ LibUI.attributed_string_append_unattributed(attr_str, ', ') # Then append ','.
55
76
 
56
77
  # ========================================================================= #
57
78
  # === Make bold text next (bold tag)
58
79
  # ========================================================================= #
59
80
  attr1 = LibUI.new_weight_attribute(LibUI::TextWeightBold)
60
81
  append_with_attribute(attr_str, 'font weight', attr1, nil)
82
+
61
83
  LibUI.attributed_string_append_unattributed(attr_str, ', ')
62
84
 
63
- attr1 = LibUI.new_italic_attribute(UI::TextItalicItalic)
85
+ attr1 = LibUI.new_italic_attribute(LibUI::TextItalicItalic)
64
86
  append_with_attribute(attr_str, 'font italicness', attr1, nil)
65
87
  UI.attributed_string_append_unattributed(attr_str, ', ')
66
88
 
67
- attr1 = LibUI.new_stretch_attribute(UI::TextStretchCondensed)
89
+ attr1 = LibUI.new_stretch_attribute(LibUI::TextStretchCondensed)
68
90
  append_with_attribute(attr_str, 'font stretch', attr1, nil)
69
91
  UI.attributed_string_append_unattributed(attr_str, ', ')
70
92
 
@@ -79,31 +101,31 @@ def make_attribute_string
79
101
  append_with_attribute(attr_str, 'text background color', attr1, nil)
80
102
  UI.attributed_string_append_unattributed(attr_str, ', ')
81
103
 
82
- attr1 = UI.new_underline_attribute(UI::UnderlineSingle)
104
+ attr1 = UI.new_underline_attribute(LibUI::UnderlineSingle)
83
105
  append_with_attribute(attr_str, 'underline style', attr1, nil)
84
106
  UI.attributed_string_append_unattributed(attr_str, ', ')
85
107
 
86
108
  UI.attributed_string_append_unattributed(attr_str, 'and ')
87
- attr1 = LibUI.new_underline_attribute(UI::UnderlineDouble)
88
- attr2 = LibUI.new_underline_color_attribute(UI::UnderlineColorCustom, 1.0, 0.0, 0.5, 1.0)
109
+ attr1 = LibUI.new_underline_attribute(LibUI::UnderlineDouble)
110
+ attr2 = LibUI.new_underline_color_attribute(LibUI::UnderlineColorCustom, 1.0, 0.0, 0.5, 1.0)
89
111
  append_with_attribute(attr_str, 'underline color', attr1, attr2)
90
112
  UI.attributed_string_append_unattributed(attr_str, '. ')
91
113
 
92
114
  UI.attributed_string_append_unattributed(attr_str, 'Furthermore, there are attributes allowing for ')
93
- attr1 = LibUI.new_underline_attribute(UI::UnderlineSuggestion)
94
- attr2 = LibUI.new_underline_color_attribute(UI::UnderlineColorSpelling, 0, 0, 0, 0)
115
+ attr1 = LibUI.new_underline_attribute(LibUI::UnderlineSuggestion)
116
+ attr2 = LibUI.new_underline_color_attribute(LibUI::UnderlineColorSpelling, 0, 0, 0, 0)
95
117
  append_with_attribute(attr_str, 'special underlines for indicating spelling errors', attr1, attr2)
96
- UI.attributed_string_append_unattributed(attr_str, ' (and other types of errors) ')
118
+ LibUI.attributed_string_append_unattributed(attr_str, ' (and other types of errors) ')
97
119
 
98
- UI.attributed_string_append_unattributed(attr_str,
120
+ LibUI.attributed_string_append_unattributed(attr_str,
99
121
  'and control over OpenType features such as ligatures (for instance, ')
100
- otf = UI.new_open_type_features
122
+ otf = LibUI.new_open_type_features
101
123
  UI.open_type_features_add(otf, 'l', 'i', 'g', 'a', 0)
102
- attr1 = UI.new_features_attribute(otf)
124
+ attr1 = LibUI.new_features_attribute(otf)
103
125
  append_with_attribute(attr_str, 'afford', attr1, nil)
104
126
  UI.attributed_string_append_unattributed(attr_str, ' vs. ')
105
127
  UI.open_type_features_add(otf, 'l', 'i', 'g', 'a', 1)
106
- attr1 = UI.new_features_attribute(otf)
128
+ attr1 = LibUI.new_features_attribute(otf)
107
129
  append_with_attribute(attr_str, 'afford', attr1, nil)
108
130
  UI.free_open_type_features(otf)
109
131
  UI.attributed_string_append_unattributed(attr_str, ").\n")
@@ -112,30 +134,32 @@ def make_attribute_string
112
134
  'Use the controls '\
113
135
  'opposite to the text '\
114
136
  'to control properties of the text.')
115
- attr_str
137
+ attr_str # And return the String here.
116
138
  end
117
139
 
118
140
  # =========================================================================== #
119
141
  # === on_font_changed
120
142
  # =========================================================================== #
121
- def on_font_changed(area)
122
- UI.area_queue_redraw_all(area)
143
+ def on_font_changed(i)
144
+ UI.area_queue_redraw_all(i)
123
145
  end
124
146
 
125
147
  # =========================================================================== #
126
148
  # === on_combobox_selected
127
149
  # =========================================================================== #
128
- def on_combobox_selected(area)
129
- UI.area_queue_redraw_all(area)
150
+ def on_combobox_selected(i)
151
+ UI.area_queue_redraw_all(i)
130
152
  end
131
153
 
154
+ # =========================================================================== #
132
155
  # === draw_event
156
+ # =========================================================================== #
133
157
  def draw_event(adp, attr_str, font_button, alignment)
134
158
  area_draw_params = UI::FFI::AreaDrawParams.new(adp)
159
+
135
160
  default_font = UI::FFI::FontDescriptor.malloc
136
161
  default_font.to_ptr.free = Fiddle::RUBY_FREE
137
- default_font = UI::FFI::FontDescriptor.malloc
138
- default_font.to_ptr.free = Fiddle::RUBY_FREE
162
+
139
163
  params = UI::FFI::DrawTextLayoutParams.malloc
140
164
  params.to_ptr.free = Fiddle::RUBY_FREE
141
165
 
@@ -145,17 +169,17 @@ def draw_event(adp, attr_str, font_button, alignment)
145
169
  params.Width = area_draw_params.AreaWidth
146
170
  params.Align = UI.combobox_selected(alignment)
147
171
  text_layout = UI.draw_new_text_layout(params)
148
- UI.draw_text(area_draw_params.Context, text_layout, 0, 0)
149
- UI.draw_free_text_layout(text_layout)
150
- UI.free_font_button_font(default_font)
172
+ LibUI.draw_text(area_draw_params.Context, text_layout, 0, 0)
173
+ LibUI.draw_free_text_layout(text_layout)
174
+ LibUI.free_font_button_font(default_font)
151
175
  end
152
176
 
153
- UI.init
177
+ LibUI.init
154
178
 
155
179
  handler = UI::FFI::AreaHandler.malloc
156
180
  handler.to_ptr.free = Fiddle::RUBY_FREE
157
181
  handler_draw_event = Fiddle::Closure::BlockCaller.new(0, [1, 1, 1]) do |_, _area, adp|
158
- draw_event(adp, @attr_str, @font_button, @alignment)
182
+ draw_event(adp, @attr_str, @font_button, @combobox)
159
183
  end
160
184
 
161
185
  handler.Draw = handler_draw_event
@@ -176,6 +200,9 @@ LibUI.on_should_quit {
176
200
  # =========================================================================== #
177
201
  @attr_str = make_attribute_string
178
202
 
203
+ # =========================================================================== #
204
+ # Create the main window next:
205
+ # =========================================================================== #
179
206
  main_window = LibUI.new_window('Text-Drawing Example', WIDTH, 480, 1)
180
207
  LibUI.window_set_margined(main_window, 1)
181
208
  LibUI.window_on_closing(main_window) {
@@ -184,6 +211,9 @@ LibUI.window_on_closing(main_window) {
184
211
  0
185
212
  }
186
213
 
214
+ # =========================================================================== #
215
+ # Add a hbox:
216
+ # =========================================================================== #
187
217
  hbox = LibUI.new_horizontal_box
188
218
  LibUI.box_set_padded(hbox, 1)
189
219
  LibUI.window_set_child(main_window, hbox)
@@ -193,28 +223,35 @@ LibUI.box_set_padded(vbox, 1)
193
223
  LibUI.box_append(hbox, vbox, 0)
194
224
 
195
225
  @font_button = LibUI.new_font_button
196
- LibUI.font_button_on_changed(@font_button) { on_font_changed(@area) }
226
+ LibUI.font_button_on_changed(@font_button) {
227
+ # Invoke a method here:
228
+ on_font_changed(@area)
229
+ }
197
230
  LibUI.box_append(vbox, @font_button, 0)
198
231
 
199
232
  form = LibUI.new_form
200
233
  LibUI.form_set_padded(form, 1)
201
234
  LibUI.box_append(vbox, form, 0)
202
235
 
236
+ # =========================================================================== #
203
237
  # Add a combobox entry next.
204
- # @alignment = ui_combobox(%w( Left Center Right ))
205
- @alignment = LibUI.new_combobox
206
- LibUI.combobox_append(@alignment, 'Left')
207
- LibUI.combobox_append(@alignment, 'Center')
208
- LibUI.combobox_append(@alignment, 'Right')
209
- LibUI.combobox_set_selected(@alignment, 0)
210
- LibUI.combobox_on_selected(@alignment) { on_combobox_selected(@area) }
211
- LibUI.form_append(form, 'Alignment', @alignment, 0)
238
+ # @combobox = ui_combobox(%w( Left Center Right ))
239
+ # =========================================================================== #
240
+ @combobox = LibUI.new_combobox
241
+ LibUI.combobox_append(@combobox, 'Left')
242
+ LibUI.combobox_append(@combobox, 'Center')
243
+ LibUI.combobox_append(@combobox, 'Right')
244
+ LibUI.combobox_set_selected(@combobox, 0)
245
+ LibUI.combobox_on_selected(@combobox) { on_combobox_selected(@area) }
246
+ LibUI.form_append(form, 'Alignment', @combobox, 0)
212
247
 
248
+ # =========================================================================== #
249
+ # Add a new area next:
250
+ # =========================================================================== #
213
251
  @area = LibUI.new_area(handler)
214
252
  LibUI.box_append(hbox, @area, 1)
215
253
 
216
254
  LibUI.control_show(main_window)
217
255
  LibUI.main
218
-
219
256
  LibUI.free_attributed_string(@attr_str)
220
- LibUI.uninit
257
+ LibUI.uninit
@@ -30,15 +30,15 @@ def make_attribute_string
30
30
 
31
31
  attr1 = LibUI.new_family_attribute('Courier New')
32
32
  append_with_attribute(attr_str, 'font family', attr1, nil)
33
- UI.attributed_string_append_unattributed(attr_str, ', ')
33
+ LibUI.attributed_string_append_unattributed(attr_str, ', ')
34
34
 
35
35
  attr1 = LibUI.new_size_attribute(18)
36
36
  append_with_attribute(attr_str, 'font size', attr1, nil)
37
- UI.attributed_string_append_unattributed(attr_str, ', ')
37
+ LibUI.attributed_string_append_unattributed(attr_str, ', ')
38
38
 
39
- attr1 = UI.new_weight_attribute(UI::TextWeightBold)
39
+ attr1 = LibUI.new_weight_attribute(UI::TextWeightBold)
40
40
  append_with_attribute(attr_str, 'font weight', attr1, nil)
41
- UI.attributed_string_append_unattributed(attr_str, ', ')
41
+ LibUI.attributed_string_append_unattributed(attr_str, ', ')
42
42
 
43
43
  attr1 = UI.new_italic_attribute(UI::TextItalicItalic)
44
44
  append_with_attribute(attr_str, 'font italicness', attr1, nil)
@@ -66,11 +66,11 @@ def make_attribute_string
66
66
  append_with_attribute(attr_str, 'underline color', attr1, attr2)
67
67
  UI.attributed_string_append_unattributed(attr_str, '. ')
68
68
 
69
- UI.attributed_string_append_unattributed(attr_str, 'Furthermore, there are attributes allowing for ')
69
+ LibUI.attributed_string_append_unattributed(attr_str, 'Furthermore, there are attributes allowing for ')
70
70
  attr1 = UI.new_underline_attribute(UI::UnderlineSuggestion)
71
71
  attr2 = UI.new_underline_color_attribute(UI::UnderlineColorSpelling, 0, 0, 0, 0)
72
72
  append_with_attribute(attr_str, 'special underlines for indicating spelling errors', attr1, attr2)
73
- UI.attributed_string_append_unattributed(attr_str, ' (and other types of errors) ')
73
+ LibUI.attributed_string_append_unattributed(attr_str, ' (and other types of errors) ')
74
74
 
75
75
  UI.attributed_string_append_unattributed(attr_str,
76
76
  'and control over OpenType features such as ligatures (for instance, ')
@@ -137,19 +137,19 @@ handler.MouseCrossed = do_nothing
137
137
  handler.DragBroken = do_nothing
138
138
  handler.KeyEvent = key_event
139
139
 
140
- UI.on_should_quit do
140
+ UI.on_should_quit {
141
141
  UI.control_destroy(main_window)
142
- end
142
+ }
143
143
 
144
144
  @attr_str = make_attribute_string
145
145
 
146
146
  main_window = UI.new_window('Text-Drawing Example', 640, 480, 1)
147
147
  UI.window_set_margined(main_window, 1)
148
- UI.window_on_closing(main_window) do
148
+ UI.window_on_closing(main_window) {
149
149
  UI.control_destroy(main_window)
150
150
  UI.quit
151
151
  0
152
- end
152
+ }
153
153
 
154
154
  hbox = UI.new_horizontal_box
155
155
  UI.box_set_padded(hbox, 1)
@@ -173,7 +173,7 @@ UI.combobox_append(@alignment, 'Center')
173
173
  UI.combobox_append(@alignment, 'Right')
174
174
  UI.combobox_set_selected(@alignment, 0)
175
175
  UI.combobox_on_selected(@alignment) { on_combobox_selected(@area) }
176
- UI.form_append(form, 'Alignment', @alignment, 0)
176
+ LibUI.form_append(form, 'Alignment', @alignment, 0)
177
177
 
178
178
  @area = LibUI.new_area(handler)
179
179
  LibUI.box_append(hbox, @area, 1)
@@ -80,7 +80,8 @@ end
80
80
  UI.box_append(inner, checkbox, 0)
81
81
 
82
82
  # Label
83
- UI.box_append(inner, UI.new_label('Label'), 0)
83
+ label = UI.new_label('Label')
84
+ UI.box_append(inner, label, 0)
84
85
 
85
86
  # Separator
86
87
  UI.box_append(inner, UI.new_horizontal_separator, 0)
@@ -150,40 +151,46 @@ UI.combobox_append(cbox, 'combobox Item 1')
150
151
  UI.combobox_append(cbox, 'combobox Item 2')
151
152
  UI.combobox_append(cbox, 'combobox Item 3')
152
153
  UI.box_append(inner, cbox, 0)
153
- UI.combobox_on_selected(cbox) do |ptr|
154
+ UI.combobox_on_selected(cbox) { |ptr|
154
155
  puts "New combobox selection: #{UI.combobox_selected(ptr)}"
155
- end
156
+ }
156
157
 
158
+ # =========================================================================== #
157
159
  # Editable Combobox
160
+ # =========================================================================== #
158
161
  ebox = UI.new_editable_combobox
159
162
  UI.editable_combobox_append(ebox, 'Editable Item 1')
160
163
  UI.editable_combobox_append(ebox, 'Editable Item 2')
161
164
  UI.editable_combobox_append(ebox, 'Editable Item 3')
162
165
  UI.box_append(inner, ebox, 0)
163
166
 
167
+ # =========================================================================== #
164
168
  # Radio Buttons
169
+ # =========================================================================== #
165
170
  rb = UI.new_radio_buttons
166
171
  UI.radio_buttons_append(rb, 'Radio Button 1')
167
172
  UI.radio_buttons_append(rb, 'Radio Button 2')
168
173
  UI.radio_buttons_append(rb, 'Radio Button 3')
169
174
  UI.box_append(inner, rb, 1)
170
175
 
176
+ # =========================================================================== #
171
177
  # Tab
172
- tab = UI.new_tab
173
- hbox1 = UI.new_horizontal_box
174
- hbox2 = UI.new_horizontal_box
175
- UI.tab_append(tab, 'Page 1', hbox1)
176
- UI.tab_append(tab, 'Page 2', hbox2)
177
- UI.tab_append(tab, 'Page 3', UI.new_horizontal_box)
178
- UI.box_append(inner2, tab, 1)
178
+ # =========================================================================== #
179
+ tab = LibUI.new_tab
180
+ hbox1 = LibUI.new_horizontal_box
181
+ hbox2 = LibUI.new_horizontal_box
182
+ LibUI.tab_append(tab, 'Page 1', hbox1)
183
+ LibUI.tab_append(tab, 'Page 2', hbox2)
184
+ LibUI.tab_append(tab, 'Page 3', UI.new_horizontal_box)
185
+ LibUI.box_append(inner2, tab, 1)
179
186
 
180
187
  # Text Entry
181
188
  text_entry = UI.new_entry
182
- UI.entry_set_text text_entry, 'Please enter your feelings'
183
- UI.entry_on_changed(text_entry) do |ptr|
189
+ LibUI.entry_set_text text_entry, 'Please enter your feelings'
190
+ LibUI.entry_on_changed(text_entry) { |ptr|
184
191
  puts "Current textbox data: '#{UI.entry_text(ptr)}'"
185
- end
186
- UI.box_append(hbox1, text_entry, 1)
192
+ }
193
+ LibUI.box_append(hbox1, text_entry, 1)
187
194
 
188
195
  UI.control_show(MAIN_WINDOW)
189
196
 
@@ -1,7 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
2
  # =========================================================================== #
3
3
  require 'libui'
4
- require 'ffi-portaudio' # https://github.com/nanki/ffi-portaudio
4
+
5
+ begin
6
+ require 'ffi-portaudio' # https://github.com/nanki/ffi-portaudio
7
+ rescue LoadError
8
+ puts 'Install this: https://github.com/nanki/ffi-portaudio'
9
+ end
10
+
5
11
  require 'numo/pocketfft' # https://github.com/yoshoku/numo-pocketfft
6
12
 
7
13
  # =========================================================================== #
@@ -0,0 +1,31 @@
1
+ require 'libui'
2
+
3
+ UI = LibUI
4
+
5
+ UI.init
6
+
7
+ main_window = UI.new_window('Font example', 300, 200, 1)
8
+
9
+ font_button = UI.new_font_button
10
+ font_descriptor = UI::FFI::FontDescriptor.malloc
11
+ font_descriptor.to_ptr.free = Fiddle::RUBY_FREE
12
+ UI.font_button_on_changed(font_button) {
13
+ UI.font_button_font(font_button, font_descriptor) # Add the font_description here.
14
+ p family: font_descriptor.Family.to_s,
15
+ size: font_descriptor.Size,
16
+ weight: font_descriptor.Weight,
17
+ italic: font_descriptor.Italic,
18
+ stretch: font_descriptor.Stretch
19
+ }
20
+
21
+ UI.window_on_closing(main_window) do
22
+ puts 'Bye Bye'
23
+ UI.quit
24
+ 1
25
+ end
26
+
27
+ UI.window_set_child(main_window, font_button)
28
+ UI.control_show(main_window)
29
+
30
+ UI.main
31
+ UI.uninit
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'libui'
4
+
5
+ UI = LibUI
6
+
7
+ UI.init
8
+
9
+ main_window = UI.new_window('Notepad', 500, 300, 1)
10
+ UI.window_on_closing(main_window) do
11
+ puts 'Bye Bye'
12
+ UI.quit
13
+ 1
14
+ end
15
+
16
+ vbox = UI.new_vertical_box
17
+ UI.window_set_child(main_window, vbox)
18
+
19
+ entry = UI.new_non_wrapping_multiline_entry
20
+ UI.box_append(vbox, entry, 1)
21
+
22
+ UI.control_show(main_window)
23
+ UI.main
24
+ UI.uninit
@@ -0,0 +1,71 @@
1
+ # =========================================================================== #
2
+ # === 012_table_example.rb
3
+ # =========================================================================== #
4
+
5
+ # =========================================================================== #
6
+ # Taken from kojix2' upstream code.
7
+ # =========================================================================== #
8
+ require 'libui'
9
+
10
+ alias e puts
11
+
12
+ UI = LibUI
13
+
14
+ LibUI.init
15
+
16
+ main_window = LibUI.new_window('Animal sounds', 300, 200, 1)
17
+
18
+ hbox = LibUI.new_horizontal_box
19
+ LibUI.window_set_child(main_window, hbox)
20
+
21
+ data = [
22
+ %w( cat meow ),
23
+ %w( dog woof ),
24
+ %w( chicken cock-a-doodle-doo ),
25
+ %w( horse neigh ),
26
+ %w( cow moo )
27
+ ]
28
+
29
+ # Protects BlockCaller objects from garbage collection.
30
+ @block_callers = []
31
+ def rbcallback(*args, &block)
32
+ args << [0] if args.size == 1 # Argument types are omitted
33
+ block_caller = Fiddle::Closure::BlockCaller.new(*args, &block)
34
+ @block_callers << block_caller
35
+ block_caller
36
+ end
37
+
38
+ model_handler = UI::FFI::TableModelHandler.malloc
39
+ model_handler.to_ptr.free = Fiddle::RUBY_FREE
40
+ model_handler.NumColumns = rbcallback(4) { 2 }
41
+ model_handler.ColumnType = rbcallback(4) { 0 }
42
+ model_handler.NumRows = rbcallback(4) { 5 }
43
+ model_handler.CellValue = rbcallback(1, [1, 1, 4, 4]) do |_, _, row, column|
44
+ UI.new_table_value_string(data[row][column])
45
+ end
46
+ model_handler.SetCellValue = rbcallback(0, [0]) {}
47
+
48
+ # Create the table model:
49
+ model = UI.new_table_model(model_handler)
50
+
51
+ table_params = UI::FFI::TableParams.malloc
52
+ table_params.to_ptr.free = Fiddle::RUBY_FREE
53
+ table_params.Model = model
54
+ table_params.RowBackgroundColorModelColumn = -1
55
+
56
+ table = UI.new_table(table_params)
57
+ LibUI.table_append_text_column(table, 'Animal', 0, -1)
58
+ LibUI.table_append_text_column(table, 'Description', 1, -1)
59
+
60
+ LibUI.box_append(hbox, table, 1)
61
+ LibUI.control_show(main_window)
62
+
63
+ LibUI.window_on_closing(main_window) {
64
+ # e 'Bye Bye'
65
+ LibUI.quit
66
+ 1
67
+ }
68
+
69
+ LibUI.main
70
+ LibUI.free_table_model(model)
71
+ LibUI.uninit
@@ -0,0 +1,28 @@
1
+ # =========================================================================== #
2
+ # === 013_scrolling_pane_example.rb
3
+ # =========================================================================== #
4
+ # This currently does not work. libui-ng first has to add support for
5
+ # that.
6
+ # =========================================================================== #
7
+ require 'libui'
8
+
9
+ alias e puts
10
+
11
+ LibUI.init
12
+
13
+ main_window = LibUI.new_window('Scrolling pane example', 300, 200, 1)
14
+
15
+ scroll_area = LibUI.new_scrolling_area
16
+ pp scroll_area.class
17
+ hbox = LibUI.new_horizontal_box
18
+ LibUI.window_set_child(main_window, hbox)
19
+
20
+ LibUI.control_show(main_window)
21
+
22
+ LibUI.window_on_closing(main_window) {
23
+ LibUI.quit
24
+ 1
25
+ }
26
+
27
+ LibUI.main
28
+ LibUI.uninit
@@ -0,0 +1,30 @@
1
+ # =========================================================================== #
2
+ # === 014_simple_entry_example.rb
3
+ # =========================================================================== #
4
+ require 'libui'
5
+
6
+ alias e puts
7
+
8
+ LibUI.init
9
+
10
+ main_window = LibUI.new_window('Two entries example - right one is read-only', 300, 200, 1)
11
+
12
+ hbox = LibUI.new_horizontal_box
13
+ LibUI.box_set_padded(hbox, 1)
14
+ entry1 = LibUI.new_entry
15
+ entry2 = LibUI.new_entry
16
+ LibUI.entry_set_read_only(entry2, 1)
17
+
18
+ LibUI.box_append(hbox, entry1, 1)
19
+ LibUI.box_append(hbox, entry2, 1)
20
+
21
+ LibUI.window_set_child(main_window, hbox)
22
+ LibUI.control_show(main_window)
23
+
24
+ LibUI.window_on_closing(main_window) {
25
+ LibUI.quit
26
+ 1
27
+ }
28
+
29
+ LibUI.main
30
+ LibUI.uninit
@@ -0,0 +1,32 @@
1
+ # =========================================================================== #
2
+ # === 015_slider_example.rb
3
+ # =========================================================================== #
4
+ require 'libui'
5
+
6
+ alias e puts
7
+
8
+ LibUI.init
9
+
10
+ main_window = LibUI.new_window('Slider example', 800, 240, 1)
11
+
12
+ hbox = LibUI.new_horizontal_box
13
+ LibUI.box_set_padded(hbox, 1)
14
+ slider1 = LibUI.new_slider(0, 10)
15
+ LibUI.slider_set_has_tool_tip(slider1, 1) # Testing this.
16
+
17
+ LibUI.slider_on_changed(slider1) {
18
+ e 'My value was changed to: '+LibUI.slider_value(slider1).to_s
19
+ }
20
+
21
+ LibUI.box_append(hbox, slider1, 1)
22
+
23
+ LibUI.window_set_child(main_window, hbox)
24
+ LibUI.control_show(main_window)
25
+
26
+ LibUI.window_on_closing(main_window) {
27
+ LibUI.quit
28
+ 1
29
+ }
30
+
31
+ LibUI.main
32
+ LibUI.uninit