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
@@ -2,1610 +2,24 @@
2
2
  # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
- # require 'libui_paradise/libui_classes/libui_classes.rb
5
+ # require 'libui_paradise/libui_classes/libui_classes.rb'
6
6
  # =========================================================================== #
7
7
  module LibuiParadise
8
8
 
9
- module Extensions # === LibuiParadise::Extensions
10
-
11
- require 'libui_paradise/libui_classes/box.rb'
12
- require 'libui_paradise/libui_classes/grid.rb'
13
-
14
- # ========================================================================= #
15
- # === button (button tag)
16
- #
17
- # This method will create a libui-button.
18
- # ========================================================================= #
19
- def button(
20
- text = ''
21
- )
22
- text = text.to_s.dup
23
- if text.start_with? '_'
24
- text[0,1] = '' # Right now we do not support accelerators.
25
- end
26
- ::LibuiParadise::Extensions.button(text)
27
- end; alias ui_button button # === ui_button
28
-
29
- # ========================================================================= #
30
- # === LibuiParadise::Extensions.msg_box
31
- #
32
- # Official API documentation for dialogs in libui can be found here:
33
- #
34
- # https://github.com/andlabs/libui/blob/master/unix/stddialogs.c
35
- #
36
- # For libui-ng it can be found here:
37
- #
38
- # https://github.com/libui-ng/libui-ng/blob/master/unix/stddialogs.c
39
- #
40
- # The API signature for msgbox in Libui is as follows:
41
- #
42
- # GtkWindow *parent
43
- # const char *title
44
- # const char *description
45
- # GtkMessageType type
46
- # GtkButtonsType buttons
47
- #
48
- # So the first string is the title and the second string is the
49
- # description that will be shown to the user.
50
- #
51
- # The following method is a convenience-wrapper over UI.msg_box().
52
- #
53
- # A Hash can also be passed into this method, to allow for more
54
- # flexibility. The following line of code will demonstrate how
55
- # this can then be used, via a Hash:
56
- #
57
- # message_box(
58
- # text: 'Hello world!'
59
- # )
60
- #
61
- # Or more verbose:
62
- #
63
- # LibuiParadise::Extensions.message_box(text: 'Hello world!')
64
- #
65
- # ========================================================================= #
66
- def self.msg_box(
67
- main_window = :default_window,
68
- title_to_use = '',
69
- description_to_use = ''
70
- )
71
- # ======================================================================= #
72
- # === Handle Hashes first
73
- # ======================================================================= #
74
- if main_window.is_a? Hash
75
- # ===================================================================== #
76
- # === :text
77
- # ===================================================================== #
78
- if main_window.has_key? :text
79
- description_to_use = main_window.delete(:text)
80
- end
81
- # ===================================================================== #
82
- # === :title_to_use
83
- # ===================================================================== #
84
- if main_window.has_key? :title_to_use
85
- title_to_use = main_window.delete(:title_to_use)
86
- end
87
- if main_window and main_window.empty? # Handle empty Hashes as well here.
88
- main_window = :default_window
89
- end
90
- end
91
- case main_window
92
- # ======================================================================= #
93
- # === :default_window
94
- # ======================================================================= #
95
- when :default_window,
96
- :default
97
- main_window = ::LibuiParadise.main_window?
98
- end
99
- _ = ::LibUI.msg_box(
100
- main_window,
101
- title_to_use,
102
- description_to_use
103
- )
104
- add_to_the_registered_widgets(_, __method__)
105
- return _
106
- end; self.instance_eval { alias ui_msg_box msg_box } # === LibuiParadise::Extensions.ui_msg_box
107
- self.instance_eval { alias message_to_the_user msg_box } # === LibuiParadise::Extensions.message_to_the_user
108
- self.instance_eval { alias message_box msg_box } # === LibuiParadise::Extensions.message_box
109
- self.instance_eval { alias popup_over_this_widget msg_box } # === LibuiParadise::Extensions.popup_over_this_widget
110
-
111
- # ========================================================================= #
112
- # === LibuiParadise::Extensions.message_box_error
113
- # ========================================================================= #
114
- def self.message_box_error(
115
- main_window = LibuiParadise.main_window?,
116
- title_to_use = '',
117
- whatever = ''
118
- )
119
- case main_window
120
- # ======================================================================= #
121
- # === :default
122
- # ======================================================================= #
123
- when :default
124
- main_window = LibuiParadise.main_window?
125
- end
126
- _ = ::LibUI.msg_box_error(
127
- main_window,
128
- title_to_use,
129
- whatever
130
- )
131
- add_to_the_registered_widgets(_, __method__)
132
- return _
133
- end; self.instance_eval { alias ui_msg_box_error message_box_error } # === LibuiParadise::Extensions.ui_msg_box_error
134
- self.instance_eval { alias ui_error_msg message_box_error } # === LibuiParadise::Extensions.ui_error_msg
135
- self.instance_eval { alias ui_error_message message_box_error } # === LibuiParadise::Extensions.ui_error_message
136
- self.instance_eval { alias error_message_to_the_user message_box_error } # === LibuiParadise::Extensions.error_message_to_the_user
137
- self.instance_eval { alias error_msg message_box_error } # === LibuiParadise::Extensions.error_msg
138
-
139
- # ========================================================================= #
140
- # === message_box_error
141
- # ========================================================================= #
142
- def message_box_error(
143
- main_window = LibuiParadise.main_window?,
144
- title_to_use = '',
145
- whatever = ''
146
- )
147
- return ::LibuiParadise::Extensions.message_box_error(
148
- main_window,
149
- title_to_use,
150
- whatever
151
- )
152
- end; alias ui_msg_box_error message_box_error # === ui_msg_box_error
153
- alias ui_error_message message_box_error # === ui_error_message
154
- alias ui_error_msg message_box_error # === ui_error_msg
155
- alias error_message_to_the_user message_box_error # === error_message_to_the_user
156
-
157
- # ========================================================================= #
158
- # === error_msg
159
- # ========================================================================= #
160
- def error_msg(text)
161
- message_box_error(:default, text)
162
- end
163
-
164
- # ========================================================================= #
165
- # === ui_msg_box
166
- #
167
- # This method is a convenience-wrapper over UI.msg_box().
168
- # ========================================================================= #
169
- def ui_msg_box(
170
- main_window = :default_window,
171
- title_to_use = '',
172
- whatever = ''
173
- )
174
- ::LibuiParadise::Extensions.msg_box(
175
- main_window,
176
- title_to_use,
177
- whatever
178
- )
179
- end; alias message_to_the_user ui_msg_box # === message_to_the_user
180
- alias message_box ui_msg_box # === message_box
181
- alias popup_over_this_widget ui_msg_box # === popup_over_this_widget
182
- alias popup_message ui_msg_box # === popup_message
183
- # alias msg_box ui_msg_box # === msg_box
184
- # ^^^ this would lead to an error.
185
-
186
- # ========================================================================= #
187
- # === LibuiParadise::Extensions.wrapper_new_progress_bar
188
- #
189
- # The name of this method contains "wrapper_" because there already
190
- # exists a method called LibUI.new_progress_bar().
191
- #
192
- # The upstream C API for the libui-progressbar can be found here:
193
- #
194
- # https://github.com/andlabs/libui/blob/master/unix/progressbar.c
195
- #
196
- # ========================================================================= #
197
- def self.wrapper_new_progress_bar
198
- _ = ::LibUI.new_progress_bar
199
- add_to_the_registered_widgets(_, :new_progress_bar)
200
- return _
201
- end
202
-
203
- # ========================================================================= #
204
- # === wrapper_new_progress_bar
205
- # ========================================================================= #
206
- def wrapper_new_progress_bar
207
- return ::LibuiParadise::Extensions.wrapper_new_progress_bar
208
- end; alias progress_bar wrapper_new_progress_bar # === progress_bar
209
-
210
- # ========================================================================= #
211
- # === LibuiParadise::Extensions.open_file
212
- #
213
- # This method can be used to open a local file, via a button, the
214
- # "open-file" button. Furthermore a begin/rescue clause is used to
215
- # avoid "NULL pointer given" errors. At a later time we may
216
- # have to fine-tune this, but for now this shall suffice.
217
- # ========================================================================= #
218
- def self.open_file(
219
- main_window = ::LibuiParadise::Extensions.main_window?
220
- )
221
- begin
222
- _ = ::LibUI.open_file(main_window)
223
- add_to_the_registered_widgets(_, __method__)
224
- return _
225
- rescue ArgumentError => _error # Rescue #<ArgumentError: NULL pointer given> here.
226
- # pp _error
227
- return nil
228
- end
229
- end; self.instance_eval { alias ui_open_file open_file } # === LibuiParadise::Extensions.ui_open_file
230
-
231
- # ========================================================================= #
232
- # === ui_open_file
233
- # ========================================================================= #
234
- def ui_open_file(
235
- main_window = ::LibuiParadise::Extensions.main_window?
236
- )
237
- return ::LibuiParadise::Extensions.open_file(main_window)
238
- end
239
-
240
9
  # ========================================================================= #
241
- # === open_file
242
- #
243
- # This here creates a problem, because ::Libui.open_file is already
244
- # defined. We'd have to use an alias to make this work.
245
- # ========================================================================= #
246
- # def open_file(
247
- # main_window = LibuiParadise::Extensions.main_window?
248
- # )
249
- # return ::LibuiParadise::Extensions.open_file(main_window)
250
- # end; alias ui_open_file open_file # === ui_open_file
251
-
252
- # ========================================================================= #
253
- # === @main_window
254
- #
255
- # This variable can be used to keep track of the main window in use.
256
- # ========================================================================= #
257
- @main_window = nil
258
-
259
- # ========================================================================= #
260
- # === LibuiParadise::Extensions.main_window?
261
- # ========================================================================= #
262
- def self.main_window?
263
- @main_window
264
- end
265
-
266
- # ========================================================================= #
267
- # === main_window?
268
- # ========================================================================= #
269
- def main_window?
270
- ::LibuiParadise::Extensions.main_window?
271
- end
272
-
273
- # ========================================================================= #
274
- # === LibuiParadise::Extensions.set_main_window
275
- # ========================================================================= #
276
- def self.set_main_window(i)
277
- @main_window = i
278
- end
279
-
280
- # ========================================================================= #
281
- # === LibuiParadise::Extensions.window (window tag)
282
- #
283
- # This method will create a new main-window.
284
- #
285
- # It will also call UI.simple_exit(). This is done mostly so that we
286
- # can omit that line whenever we use e. g. ui_main_window().
287
- # ========================================================================= #
288
- def self.window(
289
- the_title = '', # Pick a title for the window here.
290
- width = 500, # width in n pixels.
291
- height = 300, # height in n pixels.
292
- has_menubar = 1, # hasMenubar or has not.
293
- &block
294
- )
295
- case the_title
296
- # ======================================================================= #
297
- # === :filename
298
- # ======================================================================= #
299
- when :filename,
300
- :file_name
301
- # ===================================================================== #
302
- # __FILE__ contains the desired name. We only need the raw name, though.
303
- # Well, in 2022 it was realized that the real filename is stored in
304
- # $PROGRAM_NAME, so ...
305
- # ===================================================================== #
306
- the_title = File.basename($PROGRAM_NAME) # (__FILE__)
307
- end
308
- raw_has_menubar = 0
309
- if has_menubar.is_a? Numeric
310
- raw_has_menubar = has_menubar
311
- end
312
- # ======================================================================= #
313
- # Instantiate a new main-window next:
314
- # ======================================================================= #
315
- main_window = LibUI.new_window(
316
- the_title,
317
- width,
318
- height,
319
- raw_has_menubar
320
- )
321
- set_main_window(main_window) # Keep a reference stored here.
322
- # ======================================================================= #
323
- # Since as of 30.08.2021 we will also register the main-window.
324
- #
325
- # In the long run we may obsolete and deprecate @main_window, since
326
- # it is no longer needed - but for now we will retain that variable.
327
- # ======================================================================= #
328
- add_to_the_registered_widgets(main_window, __method__)
329
- if has_menubar and has_menubar.is_a?(Hash)
330
- if has_menubar.has_key? :margin
331
- if has_menubar[:margin] == true
332
- main_window.has_margin
333
- end
334
- end
335
- end
336
- ::LibUI.simple_exit(main_window)
337
- if block_given?
338
- yield
339
- end
340
- return main_window # Always return it here.
341
- end; self.instance_eval { alias main_window window } # === LibuiParadise::Extensions.main_window
342
- self.instance_eval { alias ui_main_window window } # === LibuiParadise::Extensions.ui_main_window
343
- self.instance_eval { alias margined_window window } # === LibuiParadise::Extensions.margined_window
344
- self.instance_eval { alias ui_window window } # === LibuiParadise::Extensions.ui_window
345
- self.instance_eval { alias window_or_vbox window } # === LibuiParadise::Extensions.window_or_vbox
346
-
347
- # ========================================================================= #
348
- # === window
349
- # ========================================================================= #
350
- def window(
351
- the_title = '', # Pick a title for the window here.
352
- width = 500, # width in n pixels.
353
- height = 300, # height in n pixels.
354
- has_menubar = 1 # hasMenubar or has not.
355
- )
356
- LibuiParadise::Extensions.window(
357
- the_title, width, height, has_menubar
358
- )
359
- end; alias main_window window # === main_window
360
-
361
- # ========================================================================= #
362
- # === ui_margined_main_window
363
- #
364
- # This variant is like ui_main_window() but it will automatically
365
- # put a margin on the window, via .is_margined().
366
- #
367
- # Note that the variant name "ui_padded_main_window" is a misnomer,
368
- # since it is a margin rather than padding - but I found that it
369
- # is easier to not care about this, so for the time being (September
370
- # 2021) this is how it is. It may be subject to change in the future,
371
- # though.
372
- # ========================================================================= #
373
- def ui_margined_main_window(
374
- the_title = '', # Pick a title for the window here.
375
- width = 500, # width in n pixels.
376
- height = 300, # height in n pixels.
377
- has_menubar = 1 # hasMenubar or has not.
378
- )
379
- _ = LibuiParadise.window(the_title, width, height, has_menubar)
380
- _.is_margined
381
- return _
382
- end; alias ui_margined_window ui_margined_main_window # === ui_margined_window
383
- alias ui_padded_main_window ui_margined_main_window # === ui_padded_main_window
384
- alias margined_window ui_margined_main_window # === margined_window
385
- alias padded_window ui_margined_main_window # === padded_window
386
- alias ui_padded_window ui_margined_main_window # === ui_padded_window
387
- alias padded_main_window ui_margined_main_window # === padded_main_window
388
- alias ui_main_window ui_margined_main_window # === ui_main_window
389
- alias ui_window ui_margined_main_window # === ui_window
390
- alias window_or_vbox ui_margined_main_window # === window_or_vbox
391
-
392
- # ========================================================================= #
393
- # === LibuiParadise::Extensions.slider
394
- # ========================================================================= #
395
- def self.slider(
396
- start_value = 0,
397
- end_value = 100
398
- )
399
- _ = ::LibUI.new_slider(start_value, end_value)
400
- # ======================================================================= #
401
- # Register it at once:
402
- # ======================================================================= #
403
- add_to_the_registered_widgets(_, __method__)
404
- return _
405
- end; self.instance_eval { alias ui_slider slider } # === LibuiParadise::Extensions.ui_slider
406
-
407
- # ========================================================================= #
408
- # === slider
409
- # ========================================================================= #
410
- def slider(
411
- start_value = 0,
412
- end_value = 100
413
- )
414
- return ::LibuiParadise::Extensions.slider(start_value, end_value)
415
- end; alias ui_slider slider # === ui_slider
416
-
417
- # ========================================================================= #
418
- # === LibuiParadise::Extensions.horizontal_separator
10
+ # === LibuiParadise.horizontal_separator
419
11
  #
420
12
  # This method will add a new horizontal separator. The name "hsep"
421
13
  # is a shorter alias to this.
422
14
  # ========================================================================= #
423
15
  def self.horizontal_separator
424
16
  ::LibUI.new_horizontal_separator
425
- end; self.instance_eval { alias ui_hseparator horizontal_separator } # === LibuiParadise::Extensions.ui_hseparator
426
- self.instance_eval { alias ui_hsep horizontal_separator } # === LibuiParadise::Extensions.ui_hsep
427
- self.instance_eval { alias hspacer horizontal_separator } # === LibuiParadise::Extensions.hspacer
428
- self.instance_eval { alias horizontal_spacer horizontal_separator } # === LibuiParadise::Extensions.horizontal_spacer
429
- self.instance_eval { alias hsep horizontal_separator } # === LibuiParadise::Extensions.hsept
430
-
431
- # ========================================================================= #
432
- # === horizontal_separator
433
- # ========================================================================= #
434
- def horizontal_separator
435
- ::LibuiParadise::Extensions.horizontal_separator
436
- end; alias ui_hseparator horizontal_separator # === ui_hseparator
437
- alias ui_hsep horizontal_separator # === ui_hsep
438
- alias hspacer horizontal_separator # === hspacer
439
- alias horizontal_spacer horizontal_separator # === horizontal_spacer
440
- alias hsep horizontal_separator # === hsep
441
- alias libui_hsep horizontal_separator # === libui_hsep
442
-
443
- # ========================================================================= #
444
- # === LibuiParadise::Extensions.search_entry
445
- # ========================================================================= #
446
- def self.search_entry
447
- _ = ::LibUI.new_search_entry
448
- add_to_the_registered_widgets(_, __method__)
449
- return _
450
- end; self.instance_eval { alias ui_search_entry search_entry } # === LibuiParadise::Extensions.ui_search_entry
451
-
452
- # ========================================================================= #
453
- # === search_entry
454
- # ========================================================================= #
455
- def search_entry
456
- ::LibuiParadise::Extensions.search_entry
457
- end; alias ui_search_entry search_entry # === ui_search_entry
458
-
459
- # ========================================================================= #
460
- # === LibuiParadise::Extensions.entry (entry tag)
461
- #
462
- # The upstream C API for libui-entry can be found here:
463
- #
464
- # https://github.com/andlabs/libui/blob/master/unix/entry.c
465
- #
466
- # This method is tapping into LibUI.new_entry.
467
- #
468
- # Usage example:
469
- #
470
- # entry1 = LibUI.entry('ATG')
471
- #
472
- # ========================================================================= #
473
- def self.entry(
474
- optional_text = ''
475
- )
476
- optional_text = optional_text.to_s
477
- entry = ::LibUI.new_entry
478
- unless optional_text.empty?
479
- ::LibUI.entry_set_text(entry, optional_text)
480
- end
481
- add_to_the_registered_widgets(entry, __method__)
482
- return entry
483
- end; self.instance_eval { alias ui_entry entry } # === LibuiParadise::Extensions.ui_entry
484
-
485
- # ========================================================================= #
486
- # === entry (entry tag)
487
- #
488
- # This method is tapping into LibUI.new_entry.
489
- #
490
- # An alias exists to this method, called hcentered_entry. This currently
491
- # does not work for libui, and is thus only added for compatibility
492
- # reasons.
493
- #
494
- # Usage example:
495
- #
496
- # entry1 = ui_entry('ATG')
497
- #
498
- # ========================================================================= #
499
- def entry(
500
- optional_text = ''
501
- )
502
- ::LibuiParadise::Extensions.entry(optional_text)
503
- end; alias ui_entry entry # === ui_entry
504
- alias hcentered_entry entry # === hcentered_entry
505
- alias create_entry entry # === create_entry
506
-
507
- # ========================================================================= #
508
- # === text?
509
- #
510
- # This method will guarantee a String to be returned.
511
- #
512
- # This is a bit weird, though. We may have to remove this method one
513
- # day. I forgot why I added it to entry.rb specifically. After all
514
- # other widgets also should respond to .text?.
515
- # ========================================================================= #
516
- def text?(from_this_pointer)
517
- _ = ::LibUI.entry_text(from_this_pointer).to_s
518
- add_to_the_registered_widgets(_, __method__)
519
- return _
520
- end
521
-
522
- # ========================================================================= #
523
- # === LibuiParadise::Extensions.non_wrapping_multiline_entry
524
- #
525
- # The upstream C API for the non-wrapping multiline edit can be found here:
526
- #
527
- # https://raw.githubusercontent.com/andlabs/libui/master/unix/multilineentry.c
528
- #
529
- # ========================================================================= #
530
- def self.non_wrapping_multiline_entry
531
- _ = ::LibUI.new_non_wrapping_multiline_entry
532
- add_to_the_registered_widgets(_, __method__)
533
- return _
534
- end
535
-
536
- # ========================================================================= #
537
- # === LibuiParadise::Extensions.font (font tag, fonts tag)
538
- # ========================================================================= #
539
- def self.font(&block)
540
- use_this_font = ::LibUI::FFI::FontDescriptor.malloc
541
- if block_given?
542
- yielded = yield
543
- if yielded.is_a? Hash
544
- # =================================================================== #
545
- # === :font_size
546
- # =================================================================== #
547
- if yielded.has_key? :font_size
548
- use_this_font.Size = yielded.delete(:font_size)
549
- end
550
- # =================================================================== #
551
- # === :font_family
552
- # =================================================================== #
553
- if yielded.has_key? :font_family
554
- use_this_font.Family = yielded.delete(:font_family)
555
- end
556
- # =================================================================== #
557
- # === :stretch
558
- # =================================================================== #
559
- if yielded.has_key? :stretch
560
- use_this_font.Stretch = yielded.delete(:stretch)
561
- end
562
- # =================================================================== #
563
- # === :weight
564
- # =================================================================== #
565
- if yielded.has_key? :weight
566
- use_this_font.Weight = yielded.delete(:weight)
567
- end
568
- # =================================================================== #
569
- # === :italic
570
- # =================================================================== #
571
- if yielded.has_key? :italic
572
- _ = yielded.delete(:italic_family)
573
- if _ == true
574
- _ = 1
575
- elsif _ == false
576
- _ = 0
577
- end
578
- use_this_font.Italic = _
579
- end
580
- end
581
- end
582
- return use_this_font
583
- end; self.instance_eval { alias ui_font font } # === LibuiParadise::Extensions.ui_font
584
- self.instance_eval { alias font_descriptor font } # === LibuiParadise::Extensions.font_descriptor
585
-
586
- # ========================================================================= #
587
- # === font
588
- # ========================================================================= #
589
- def font(&block)
590
- LibuiParadise::Extensions.font(&block)
591
- end; alias ui_font font # === ui_font
592
- alias font_descriptor font # === font_descriptor
593
-
594
- # ========================================================================= #
595
- # === LibuiParadise::Extensions.non_wrapping_multiline_entry
596
- # ========================================================================= #
597
- def non_wrapping_multiline_entry
598
- return ::LibuiParadise::Extensions.non_wrapping_multiline_entry
599
- end
600
-
601
- # ========================================================================= #
602
- # === LibuiParadise::Extensions.menu (menu tag)
603
- # ========================================================================= #
604
- def self.menu(title = '')
605
- _ = ::LibUI.new_menu(title)
606
- add_to_the_registered_widgets(_, __method__)
607
- return _
608
- end; self.instance_eval { alias ui_menu menu } # === ui_menu
609
-
610
- # ========================================================================= #
611
- # === menu (menu tag)
612
- # ========================================================================= #
613
- def menu(
614
- title = ''
615
- )
616
- return ::LibuiParadise::Extensions.menu(title)
617
- end; alias ui_menu menu # === ui_menu
618
-
619
- # ========================================================================= #
620
- # === LibuiParadise::Extensions.vertical_separator
621
- #
622
- # This method will add a new vertical separator.
623
- # ========================================================================= #
624
- def self.vertical_separator
625
- ::LibUI.new_vertical_separator
626
- end; self.instance_eval { alias ui_vseparator vertical_separator } # === LibuiParadise::Extensions.ui_verticalseparator
627
- self.instance_eval { alias ui_vsep vertical_separator } # === LibuiParadise::Extensions.ui_vsep
628
- self.instance_eval { alias vspacer vertical_separator } # === LibuiParadise::Extensions.vspacer
629
- self.instance_eval { alias vertical_spacer vertical_separator } # === LibuiParadise::Extensions.vertical_spacer
630
- self.instance_eval { alias vsep vertical_separator } # === LibuiParadise::Extensions.vsept
631
-
632
- # ========================================================================= #
633
- # === vertical_separator
634
- # ========================================================================= #
635
- def vertical_separator
636
- ::LibuiParadise::Extensions.vertical_separator
637
- end; alias ui_vseparator vertical_separator # === ui_vseparator
638
- alias ui_vsep vertical_separator # === ui_vsep
639
- alias vertical_spacer vertical_separator # === vertical_spacer
640
- alias vspacer vertical_separator # === vspacer
641
- alias vsep vertical_separator # === vsep
642
-
643
- # ========================================================================= #
644
- # === LibuiParadise::Extensions.spinbox
645
- #
646
- # This method will return a spin-button, also called a spin-box.
647
- #
648
- # The first argument is the start value; the second argument is the end
649
- # value.
650
- # ========================================================================= #
651
- def self.spinbox(
652
- start_point = 0,
653
- end_point = 100
654
- )
655
- if start_point.is_a? Hash
656
- # ===================================================================== #
657
- # === :end
658
- # ===================================================================== #
659
- if start_point.has_key? :end
660
- end_point = start_point[:end]
661
- end
662
- # ===================================================================== #
663
- # === :start
664
- # ===================================================================== #
665
- if start_point.has_key? :start
666
- start_point = start_point[:start]
667
- end
668
- end
669
- _ = ::LibUI.new_spinbox(start_point.to_i, end_point.to_i)
670
- add_to_the_registered_widgets(_, __method__)
671
- return _
672
- end; self.instance_eval { alias ui_spinbox spinbox } # === LibuiParadise::Extensions.ui_spinbox
673
- self.instance_eval { alias ui_spinbutton spinbox } # === LibuiParadise::Extensions.ui_spinbutton
674
- self.instance_eval { alias spinbutton spinbox } # === LibuiParadise::Extensions.spinbutton
675
-
676
- # ========================================================================= #
677
- # === LibuiParadise::Extensions.password_entry
678
- #
679
- # This method will create and returns a new password entry widget. This
680
- # means that input will be "disguised" via the '*' character.
681
- #
682
- # Usage example:
683
- #
684
- # entry = LibuiParadise::Extensions.password_entry
685
- #
686
- # ========================================================================= #
687
- def self.password_entry
688
- entry = ::LibUI.new_password_entry
689
- add_to_the_registered_widgets(entry, __method__)
690
- return entry
691
- end; self.instance_eval { alias ui_password_entry password_entry } # === LibuiParadise::Extensions.ui_password_entry
692
-
693
- # ========================================================================= #
694
- # === password_entry
695
- #
696
- # Usage example:
697
- #
698
- # entry = ui_password_entry
699
- #
700
- # ========================================================================= #
701
- def password_entry
702
- ::LibuiParadise::Extensions.password_entry
703
- end; alias ui_password_entry password_entry # === ui_password_entry
704
-
705
- # ========================================================================= #
706
- # === LibuiParadise::Extensions.text_layout
707
- # ========================================================================= #
708
- def self.text_layout(
709
- i = ''
710
- )
711
- _ = ::LibUI.draw_new_text_layout(i.to_s)
712
- add_to_the_registered_widgets(_, __method__)
713
- return _
714
- end
715
-
716
- # ========================================================================= #
717
- # === text_layout
718
- # ========================================================================= #
719
- def text_layout(
720
- i = ''
721
- )
722
- ::LibuiParadise::Extensions.text_layout(i)
723
- end
724
-
725
- # ========================================================================= #
726
- # === spinbox
727
- #
728
- # This method will return a spin-button, also called a spin-box.
729
- # ========================================================================= #
730
- def spinbox(
731
- start_point = 0,
732
- end_point = 100
733
- )
734
- ::LibuiParadise::Extensions.spinbox(start_point, end_point)
735
- end; alias ui_spinbox spinbox # === ui_spinbox
736
- alias ui_spinbutton spinbox # === ui_spinbutton
737
- alias up_and_down_counter spinbox # === up_and_down_counter
738
- alias spinbutton spinbox # === spinbutton
739
- alias centered_spin_button spinbox # === centered_spin_button
740
-
741
- # ========================================================================= #
742
- # === LibuiParadise::Extensions.table
743
- #
744
- # The argument should be of type table_params.
745
- #
746
- # Example for this:
747
- #
748
- # table_params = LibUI::FFI::TableParams.malloc
749
- # table_params.Model = model
750
- # table_params.RowBackgroundColorModelColumn = -1
751
- #
752
- # ========================================================================= #
753
- def self.table(i)
754
- _ = ::LibUI.new_table(i)
755
- LibuiParadise::Extensions.register_this_fiddle_pointer_widget(_, __method__)
756
- return _
757
- end; self.instance_eval { alias ui_table table } # === LibuiParadise::Extensions.ui_table
758
-
759
- # ========================================================================= #
760
- # === LibuiParadise::Extensions.checkbox (checkbox tag)
761
- # ========================================================================= #
762
- def self.checkbox(i = '')
763
- _ = ::LibUI.new_checkbox(i)
764
- add_to_the_registered_widgets(_, __method__)
765
- return _
766
- end
767
-
768
- # ========================================================================= #
769
- # === checkbox
770
- # ========================================================================= #
771
- def checkbox(i = '')
772
- ::LibuiParadise::Extensions.checkbox(i)
773
- end; alias ui_checkbox checkbox # === ui_checkbox
774
- alias ui_check_button checkbox # === ui_check_button
775
-
776
- # ========================================================================= #
777
- # === checked_checkbox
778
- # ========================================================================= #
779
- def checked_checkbox(i = '')
780
- _ = checkbox(i)
781
- _.is_active
782
- return _
783
- end
784
-
785
- # ========================================================================= #
786
- # === LibuiParadise::Extensions.button (button tag)
787
- #
788
- # The upstream API for buttons, in C, can be found here:
789
- #
790
- # https://raw.githubusercontent.com/andlabs/libui/master/unix/button.c
791
- #
792
- # ========================================================================= #
793
- def self.button(text)
794
- _ = ::LibUI.new_button(text)
795
- ::LibuiParadise::Extensions.register_this_fiddle_pointer_widget(_, __method__)
796
- return _
797
- end; self.instance_eval { alias ui_button button } # === LibuiParadise::Extensions.ui_button
798
-
799
- # ========================================================================= #
800
- # === LibuiParadise::Extensions.multiline_entry (multiline_entry tag)
801
- #
802
- # The upstream code for the linux-variant for a multiline-entry can
803
- # be found here:
804
- #
805
- # https://raw.githubusercontent.com/andlabs/libui/master/unix/multilineentry.c
806
- #
807
- # A multiline-entry, also known more traditionally as a "textview",
808
- # is a widget that allows the user to input text and modify that
809
- # text as well.
810
- # ========================================================================= #
811
- def self.multiline_entry(optional_content = nil)
812
- _ = ::LibUI.new_multiline_entry
813
- add_to_the_registered_widgets(_, __method__)
814
- if optional_content and optional_content.is_a?(String) and !optional_content.empty?
815
- _.set_text(optional_content)
816
- end
817
- return _
818
- end; self.instance_eval { alias ui_multiline_entry multiline_entry } # === LibuiParadise::Extensions.ui_multiline_entry
819
- self.instance_eval { alias textview multiline_entry } # === LibuiParadise::Extensions.textview
820
- self.instance_eval { alias text_view multiline_entry } # === LibuiParadise::Extensions.text_view
821
- self.instance_eval { alias ui_text_view multiline_entry } # === LibuiParadise::Extensions.ui_text_view
822
- self.instance_eval { alias ui_textview multiline_entry } # === LibuiParadise::Extensions.ui_textview
823
- self.instance_eval { alias ui_text_buffer multiline_entry } # === LibuiParadise::Extensions.ui_text_buffer
824
- self.instance_eval { alias input_field multiline_entry } # === LibuiParadise::Extensions.input_field
825
- self.instance_eval { alias input multiline_entry } # === LibuiParadise::Extensions.input
826
-
827
- # ========================================================================= #
828
- # === Libuiparadise::Extensions.image
829
- #
830
- # This is currently limited to .png files only, due to ChunkyPng.
831
- #
832
- # At some later point in the future this limitation may be lifted. For
833
- # now it has to remain in place.
834
- # ========================================================================= #
835
- def self.image(
836
- this_file,
837
- width = :try_to_infer_automatically,
838
- height = :infer_automatically
839
- )
840
- if (width == :infer_automatically) or
841
- (height == :infer_automatically)
842
- unless Object.const_defined? :ChunkyPNG
843
- begin
844
- require 'chunky_png'
845
- rescue LoadError; end
846
- end
847
- canvas = ChunkyPNG::Canvas.from_file(this_file)
848
- data = canvas.to_rgba_stream
849
- width = canvas.width
850
- height = canvas.height
851
- _ = ::LibUI.new_image(width, height) # Create the image here.
852
- add_to_the_registered_widgets(_, __method__)
853
- ::LibUI.image_append(
854
- _,
855
- data,
856
- width,
857
- height,
858
- width
859
- )
860
- return _
861
- end
862
- nil
863
- end; self.instance_eval { alias ui_image image } # === LibuiParadise::Extensions.ui_image
864
-
865
- # ========================================================================= #
866
- # === LibuiParadise::Extensions.font_button
867
- #
868
- # Create a new font button via this method.
869
- # ========================================================================= #
870
- def self.font_button
871
- _ = ::LibUI.new_font_button
872
- add_to_the_registered_widgets(_, __method__)
873
- return _
874
- end; self.instance_eval { alias ui_font_button font_button } # === Libuiparadise::Extensions.ui_font_button
875
-
876
- # ========================================================================= #
877
- # === font_button
878
- #
879
- # Create a new font button via this method.
880
- # ========================================================================= #
881
- def font_button
882
- return ::LibuiParadise::Extensions.font_button
883
- end; alias ui_font_button font_button # === ui_font_button
884
-
885
- # ========================================================================= #
886
- # === image
887
- #
888
- # This is currently limited to .png files only, due to ChunkyPng.
889
- #
890
- # At some later point in the future this limitation may be lifted. For
891
- # now it has to remain in place.
892
- # ========================================================================= #
893
- def image(
894
- this_file,
895
- width = :try_to_infer_automatically,
896
- height = :infer_automatically
897
- )
898
- Libuiparadise::Extensions.image(
899
- this_file, width, height
900
- )
901
- end; alias ui_image image # === ui_image
902
-
903
- # ========================================================================= #
904
- # === multiline_entry
905
- # ========================================================================= #
906
- def multiline_entry(optional_content = nil)
907
- ::LibuiParadise::Extensions.multiline_entry(optional_content)
908
- end; alias ui_multiline_entry multiline_entry # === ui_multiline_entry
909
- alias textview multiline_entry # === textview
910
- alias text_view multiline_entry # === text_view
911
- alias ui_text_view multiline_entry # === ui_text_view
912
- alias ui_textview multiline_entry # === ui_textview
913
- alias ui_text_buffer multiline_entry # === ui_text_buffer
914
- alias input_field multiline_entry # === input_field
915
- alias input multiline_entry # === input
916
-
917
- # ========================================================================= #
918
- # === LibuiParadise::Extensions.radio_buttons
919
- #
920
- # This method will create some radio buttons.
921
- #
922
- # You can pass an Array into this method, which should be an Array of
923
- # Strings. This is optional. If such an Array is given, though, then
924
- # these entries will become radio-buttons, with the associated label
925
- # (the text they display) becoming the label right next to the radio
926
- # button element (that round circle that the user can select via
927
- # the mouse cursor).
928
- # ========================================================================= #
929
- def self.radio_buttons(
930
- optional_array = []
931
- )
932
- _ = ::LibUI.new_radio_buttons
933
- if optional_array and optional_array.is_a?(Array) and !optional_array.empty?
934
- optional_array.each {|this_element|
935
- ::LibUI.radio_buttons_append(_, this_element)
936
- }
937
- end
938
- add_to_the_registered_widgets(_, __method__)
939
- return _
940
- end; self.instance_eval { alias ui_radio_buttons radio_buttons } # === LibuiParadise::Extensionsui_radio_buttons
941
-
942
- # ========================================================================= #
943
- # === radio_buttons
944
- # ========================================================================= #
945
- def radio_buttons(optional_array = [])
946
- return ::LibuiParadise::Extensions.radio_buttons(optional_array)
947
- end; alias ui_radio_buttons radio_buttons # === ui_radio_buttons
948
-
949
- # ========================================================================= #
950
- # === LibuiParadise::Extensions.new_colour_button
951
- #
952
- # The upstream API for a colour-button (in C) can be found here:
953
- #
954
- # https://github.com/andlabs/libui/blob/master/unix/colorbutton.c
955
- #
956
- # ========================================================================= #
957
- def self.colour_button
958
- _ = ::LibUI.new_color_button
959
- ::LibuiParadise::Extensions.register_this_fiddle_pointer_widget(_, __method__)
960
- return _
961
- end; self.instance_eval { alias new_colour_button colour_button } # === LibuiParadise::Extensions.new_colour_button
962
- self.instance_eval { alias new_color_button colour_button } # === LibuiParadise::Extensions.new_color_button
963
- self.instance_eval { alias ui_colour_button colour_button } # === LibuiParadise::Extensions.ui_colour_button
964
-
965
- # ========================================================================= #
966
- # === colour_button
967
- # ========================================================================= #
968
- def colour_button
969
- ::LibuiParadise::Extensions.new_colour_button
970
- end; alias color_button colour_button # === color_button
971
- alias ui_colour_button colour_button # === ui_color_button
972
-
973
- # ========================================================================= #
974
- # === LibuiParadise::Extensions.scrolling_area
975
- #
976
- # It seems as if scrolling is not yet easily available in libui.
977
- #
978
- # The upstream API is like this:
979
- #
980
- # uiArea *area = uiNewScrollingArea(&handler, 400, 400);
981
- #
982
- # The two numbers are width and height, as integers, respectively.
983
- # In total three arguments are required. The first argument is
984
- # a so-called "AreaHandler".
985
- #
986
- # The code may be found here:
987
- #
988
- # https://github.com/andlabs/libui/blob/master/windows/areascroll.cpp
989
- #
990
- # ========================================================================= #
991
- def self.scrolling_area(
992
- widget,
993
- width = 400,
994
- height = 400
995
- )
996
- case width
997
- when :default, nil
998
- width = 400
999
- end
1000
- case height
1001
- when :default, nil
1002
- height = 400
1003
- end
1004
- _ = ::LibUI.new_scrolling_area(widget, width, height)
1005
- # ======================================================================= #
1006
- # The next part does not yet work - is it even possible to add widgets
1007
- # to a scrolling area in libui?
1008
- # if optional_widget
1009
- # _.add(optional_widget)
1010
- # end
1011
- # ======================================================================= #
1012
- add_to_the_registered_widgets(_, __method__)
1013
- return _
1014
- end; self.instance_eval { alias ui_scrolling_area scrolling_area } # === LibuiParadise::Extensions.ui_scrolling_area
1015
- self.instance_eval { alias ui_scrolled_window scrolling_area } # === LibuiParadise::Extensions.ui_scrolling_window
1016
-
1017
- # ========================================================================= #
1018
- # === scrolling_area
1019
- #
1020
- # It seems as if scrolling is not yet easily available in libui.
1021
- #
1022
- # The upstream API is like this:
1023
- #
1024
- # uiArea *area = uiNewScrollingArea(&handler, 400, 400);
1025
- #
1026
- # ========================================================================= #
1027
- def scrolling_area(
1028
- optional_widget = nil
1029
- )
1030
- LibuiParadise::Extensions.scrolling_area(optional_widget)
1031
- end; alias ui_scrolling_area scrolling_area # === ui_scrolling_area
1032
- alias ui_scrolled_window scrolling_area # === ui_scrolling_window
1033
-
1034
- # ========================================================================= #
1035
- # === bold_button
1036
- #
1037
- # This currently does not work. We have to wait until upstream libui
1038
- # supports bold font text.
1039
- # ========================================================================= #
1040
- def bold_button(i)
1041
- button(i)
1042
- end
1043
-
1044
- # ========================================================================= #
1045
- # === quit_button (quit tag)
1046
- #
1047
- # This method can be used to, by default, implement a quit button
1048
- # that, upon a click-event, will cause the application to exit
1049
- # and close/quit.
1050
- # ========================================================================= #
1051
- def quit_button(
1052
- optional_arguments = {}
1053
- )
1054
- use_this_text = 'Quit'
1055
- if optional_arguments and optional_arguments.is_a?(Hash)
1056
- # ===================================================================== #
1057
- # === :text
1058
- # ===================================================================== #
1059
- if optional_arguments.has_key? :text
1060
- use_this_text = optional_arguments.delete(:text)
1061
- end
1062
- end
1063
- if block_given?
1064
- yielded = yield
1065
- case yielded
1066
- # ===================================================================== #
1067
- # === :with_emoji
1068
- # ===================================================================== #
1069
- when :with_emoji,
1070
- :with_icon
1071
- use_this_text = use_this_text.to_s.dup
1072
- use_this_text << ' 🛑'
1073
- end
1074
- end
1075
- quit_button = button(use_this_text)
1076
- quit_button.on_clicked {
1077
- ::LibUI.quit
1078
- 0
1079
- }
1080
- return quit_button
1081
- end; alias ui_quit_button quit_button # === ui_quit_button
1082
-
1083
- # ========================================================================= #
1084
- # === table
1085
- # ========================================================================= #
1086
- def table(i)
1087
- ::LibuiParadise::Extensions.table(i)
1088
- end; alias ui_table table # === ui_table
1089
-
1090
- # ========================================================================= #
1091
- # === LibuiParadise::Extensions.editable_combobox
1092
- #
1093
- # This is a combo-box that the user can modify.
1094
- # ========================================================================= #
1095
- def self.editable_combobox(
1096
- optional_array = nil, &block
1097
- )
1098
- _ = ::LibUI.new_editable_combobox
1099
- if block_given?
1100
- optional_array = yield
1101
- end
1102
- if optional_array and optional_array.is_a?(Array)
1103
- append_this_array_to_that_combobox(optional_array, _)
1104
- end
1105
- add_to_the_registered_widgets(_, __method__)
1106
- return _
1107
- end; self.instance_eval { alias editable_combo_box editable_combobox } # === LibuiParadise::Extensions.editable_combo_box
1108
- self.instance_eval { alias ui_editable_combo_box editable_combobox } # === LibuiParadise::Extensions.ui_editable_combo_box
1109
-
1110
- # ========================================================================= #
1111
- # === LibuiParadise::Extensions.combobox
1112
- # ========================================================================= #
1113
- def self.combobox(
1114
- optional_array = nil, &block
1115
- )
1116
- combobox = ::LibUI.new_combobox
1117
- # ======================================================================= #
1118
- # Register it at once:
1119
- # ======================================================================= #
1120
- add_to_the_registered_widgets(combobox, __method__)
1121
- if block_given?
1122
- optional_array = yield
1123
- end
1124
- if optional_array and optional_array.is_a?(Array)
1125
- # append_this_array_to_that_combobox(optional_array, combobox)
1126
- combobox.append_this_array(optional_array)
1127
- end
1128
- return combobox
1129
- end; self.instance_eval { alias combo_box combobox } # === LibuiParadise::Extensions.combo_box
1130
- self.instance_eval { alias ui_combo_box combobox } # === LibuiParadise::Extensions.ui_combo_box
1131
- self.instance_eval { alias ui_combobox combobox } # === LibuiParadise::Extensions.ui_combobox
1132
-
1133
- # ========================================================================= #
1134
- # === selected?
1135
- #
1136
- # Unsure whether this works. It appears to work, but I am not even
1137
- # certain as to why.
1138
- # ========================================================================= #
1139
- def selected?(pointer)
1140
- ::LibUI.combobox_selected(pointer).to_s
1141
- end
1142
-
1143
- # ========================================================================= #
1144
- # === combobox
1145
- #
1146
- # The first argument can be an Array.
1147
- # ========================================================================= #
1148
- def combobox(
1149
- optional_array = nil, &block
1150
- )
1151
- return ::LibuiParadise::Extensions.combobox(optional_array, &block)
1152
- end; alias combo_box combobox # === combo_box
1153
- alias ui_combo_box combobox # === ui_combo_box
1154
- alias ui_combobox combobox # === ui_combobox
1155
- alias combo_box_entry combobox # === combo_box_entry
1156
- alias libui_combo_box combobox # === libui_combo_box
1157
-
1158
- # ========================================================================= #
1159
- # === editable_combobox
1160
- # ========================================================================= #
1161
- def editable_combobox(
1162
- optional_array = nil, &block
1163
- )
1164
- return ::LibuiParadise::Extensions(optional_array, &block)
1165
- end; alias editable_combo_box editable_combobox # === editable_combo_box
1166
- alias ui_editable_combo_box editable_combobox # === ui_editable_combo_box
1167
-
1168
- # ========================================================================= #
1169
- # === LibuiParadise::Extensions.label (text tag, label tag)
1170
- #
1171
- # Add text to the widget at hand. This is actually called a "label".
1172
- # ========================================================================= #
1173
- def self.label(
1174
- i = ''
1175
- )
1176
- if i.include? '</'
1177
- # ===================================================================== #
1178
- # For now we must remove "HTML tags" from the given input. Perhaps
1179
- # at some later point in time we can retain them.
1180
- # ===================================================================== #
1181
- i = i.dup if i.frozen?
1182
- i.gsub!(%r{<[^>]+>}, '')
1183
- end
1184
- _ = ::LibUI.new_label(i.to_s)
1185
- add_to_the_registered_widgets(_, __method__)
1186
- return _
1187
- end; self.instance_eval { alias text label } # === LibuiParadise::Extensions.text
1188
- self.instance_eval { alias ui_text label } # === LibuiParadise::Extensions.ui_text
1189
- self.instance_eval { alias ui_label label } # === LibuiParadise::Extensions.ui_label
1190
-
1191
- # ========================================================================= #
1192
- # === label
1193
- #
1194
- # The last two aliases, left_aligned_label, should be different, but
1195
- # right now I don't know how to do this in libui.
1196
- # ========================================================================= #
1197
- def label(
1198
- i = ''
1199
- )
1200
- ::LibuiParadise::Extensions.label(i)
1201
- end; alias text label # === text
1202
- alias ui_text label # === ui_text
1203
- alias ui_label label # === ui_label
1204
- alias left_aligned_label label # === left_aligned_label
1205
- alias left_aligned_text label # === left_aligned_text
1206
-
1207
- # ========================================================================= #
1208
- # === bold_label
1209
- #
1210
- # This currently does not work properly. We may have to re-examine this
1211
- # eventually at a later point.
1212
- # ========================================================================= #
1213
- def bold_label(i = '')
1214
- return label(i)
1215
- end
1216
-
1217
- # ========================================================================= #
1218
- # === bold_text
1219
- #
1220
- # This currently does NOT make the text bold - the method exists solely
1221
- # as a placeholder, until upstream libui supports bold text as such.
1222
- # ========================================================================= #
1223
- def bold_text(i = '')
1224
- return label(i)
1225
- end
1226
-
1227
- # ========================================================================= #
1228
- # === bold_text_left_aligned
1229
- # ========================================================================= #
1230
- def bold_text_left_aligned(i = '')
1231
- return label(i)
1232
- end; alias left_aligned_bold_label bold_text_left_aligned # === left_aligned_bold_label
1233
-
1234
- # ========================================================================= #
1235
- # === fancy_text
1236
- #
1237
- # This text variant can be styled.
1238
- # ========================================================================= #
1239
- def fancy_text(i = '')
1240
- _ = LibUI.new_attributed_string(i.to_s)
1241
- add_to_the_registered_widgets(_, __method__)
1242
- return _
1243
- end; alias attributed_string fancy_text # === attributed_string
1244
-
1245
- # ========================================================================= #
1246
- # === LibuiParadise::Extensions.tab
1247
- #
1248
- # This could be also called "notebook_tab".
1249
- # ========================================================================= #
1250
- def self.tab
1251
- _ = ::LibUI.new_tab
1252
- add_to_the_registered_widgets(_, __method__)
1253
- return _
1254
- end; self.instance_eval { alias ui_tab tab } # === LibuiParadise::Extensions.ui_tab
1255
- self.instance_eval { alias ui_tabs tab } # === LibuiParadise::Extensions.ui_tabs
1256
- self.instance_eval { alias notebook tab } # === LibuiParadise::Extensions.notebook
1257
- self.instance_eval { alias ui_notebook tab } # === LibuiParadise::Extensions.ui_notebook
1258
- self.instance_eval { alias notebook_tab tab } # === LibuiParadise::Extensions.notebook_tab
1259
-
1260
- # ========================================================================= #
1261
- # === tab
1262
- #
1263
- # This could be also called "notebook_tab".
1264
- # ========================================================================= #
1265
- def tab
1266
- ::LibuiParadise::Extensions.tab
1267
- end; alias ui_tab tab # === ui_tab
1268
- alias ui_tabs tab # === ui_tabs
1269
- alias notebook tab # === notebook
1270
- alias ui_notebook tab # === ui_notebook
1271
- alias notebook_tab tab # === notebook_tab
1272
-
1273
- # ========================================================================= #
1274
- # === LibuiParadise::Extensions.area
1275
- #
1276
- # AreaHandler defines the functionality needed for handling events from
1277
- # an Area.
1278
- #
1279
- # Upstream documentation, at the least for Go, can be found here:
1280
- #
1281
- # https://github.com/andlabs/ui/blob/master/areahandler.go
1282
- #
1283
- # ========================================================================= #
1284
- def self.area(
1285
- i = :use_new_area_handler
1286
- )
1287
- case i
1288
- # ======================================================================= #
1289
- # === :use_new_area_handler
1290
- # ======================================================================= #
1291
- when :use_new_area_handler,
1292
- :default
1293
- # ===================================================================== #
1294
- # malloc a new area-handled next:
1295
- # ===================================================================== #
1296
- i = ::LibUI::FFI::AreaHandler.malloc
1297
- i.to_ptr.free = Fiddle::RUBY_FREE # This one is done in upstream LibUI as well.
1298
- end
1299
- _ = ::LibUI.new_area(i) # Our new area, with the given handler.
1300
- add_to_the_registered_widgets(_, __method__)
1301
- return _
1302
- end; self.instance_eval { alias area_handler area } # === LibuiParadise::Extensions.area_handler
1303
-
1304
- # ========================================================================= #
1305
- # === area
1306
- #
1307
- # AreaHandler defines the functionality needed for handling events
1308
- # from an Area.
1309
- #
1310
- # Upstream documentation, at the least for Go, can be found here:
1311
- #
1312
- # https://github.com/andlabs/ui/blob/master/areahandler.go
1313
- #
1314
- # ========================================================================= #
1315
- def area(
1316
- i = :use_new_area_handler
1317
- )
1318
- return ::LibuiParadise::Extensions.area(i)
1319
- end; alias area_handler area # === area_handler
1320
-
1321
- # ========================================================================= #
1322
- # === is_on_windows?
1323
- # ========================================================================= #
1324
- def is_on_windows?
1325
- Gem.win_platform?
1326
- end
1327
-
1328
- end
1329
-
1330
- # =========================================================================== #
1331
- # === LibuiParadise.window
1332
- # =========================================================================== #
1333
- def self.window(
1334
- the_title = '', # Pick a title for the window here.
1335
- width = 500, # width in n pixels.
1336
- height = 300, # height in n pixels.
1337
- has_menubar = 1 # hasMenubar or has not.
1338
- )
1339
- ::LibuiParadise::Extensions.window(
1340
- the_title,
1341
- width,
1342
- height,
1343
- has_menubar
1344
- )
1345
- end; self.instance_eval { alias main_window window } # === LibuiParadise.main_window
1346
- self.instance_eval { alias margined_window window } # === LibuiParadise.margined_window
1347
- self.instance_eval { alias ui_window window } # === LibuiParadise.ui_window
1348
- self.instance_eval { alias ui_main_window window } # === LibuiParadise.ui_main_window
1349
- self.instance_eval { alias ui_padded_main_window window } # === LibuiParadise.margined_window
1350
- self.instance_eval { alias padded_window window } # === LibuiParadise.padded_window
1351
- self.instance_eval { alias padded_main_window window } # === LibuiParadise.padded_main_window
1352
- self.instance_eval { alias window_or_vbox window } # === LibuiParadise.window_or_vbox
1353
-
1354
- # =========================================================================== #
1355
- # === LibuiParadise.main_window?
1356
- # =========================================================================== #
1357
- def self.main_window?
1358
- LibuiParadise::Extensions.main_window?
1359
- end
1360
-
1361
- # =========================================================================== #
1362
- # === LibuiParadise::Extensions.editable_combobox
1363
- # =========================================================================== #
1364
- def self.editable_combobox(
1365
- optional_array = nil, &block
1366
- )
1367
- return ::LibuiParadise::Extensions.editable_combobox(optional_array, &block)
1368
- end; self.instance_eval { alias editable_combo_box editable_combobox } # === LibuiParadise.editable_combo_box
1369
- self.instance_eval { alias ui_editable_combo_box editable_combobox } # === LibuiParadise.ui_editable_combo_box
1370
-
1371
- # ========================================================================= #
1372
- # === LibuiParadise.label
1373
- #
1374
- # Toplevel method to create a new label, aka new text.
1375
- # ========================================================================= #
1376
- def self.label(
1377
- i = ''
1378
- )
1379
- ::LibuiParadise::Extensions.label(i)
1380
- end; self.instance_eval { alias text label } # === LibuiParadise.text
1381
- self.instance_eval { alias ui_text label } # === LibuiParadise.ui_text
1382
- self.instance_eval { alias ui_label label } # === LibuiParadise.ui_label
1383
-
1384
- # ========================================================================= #
1385
- # === LibuiParadise.string
1386
- # ========================================================================= #
1387
- def self.string(i = '')
1388
- return ::LibUI.new_attributed_string(i)
1389
- end; self.instance_eval { alias fancy_text string } # === LibuiParadise.fancy_text
1390
-
1391
- # =========================================================================== #
1392
- # === LibuiParadise.table
1393
- # =========================================================================== #
1394
- def self.table(i)
1395
- ::LibuiParadise::Extensions.table(i)
1396
- end; self.instance_eval { alias ui_table table } # === LibuiParadise.ui_table
1397
-
1398
- # =========================================================================== #
1399
- # === LibuiParadise.spinbox
1400
- # =========================================================================== #
1401
- def self.spinbox(
1402
- start_point = 0,
1403
- end_point = 100
1404
- )
1405
- ::LibuiParadise::Extensions.spinbox(start_point, end_point)
1406
- end; self.instance_eval { alias ui_spinbox spinbox } # === LibuiParadise.ui_spinbox
1407
- self.instance_eval { alias ui_spinbutton spinbox } # === LibuiParadise.ui_spinbutton
1408
- self.instance_eval { alias spinbutton spinbox } # === LibuiParadise.spinbutton
1409
-
1410
- # =========================================================================== #
1411
- # === LibuiParadise.slider
1412
- # =========================================================================== #
1413
- def self.slider(
1414
- start_value = 0,
1415
- end_value = 100
1416
- )
1417
- ::LibuiParadise::Extensions.slider(start_value, end_value)
1418
- end; self.instance_eval { alias ui_slider slider } # === LibuiParadise.ui_slider
1419
-
1420
- # =========================================================================== #
1421
- # === LibuiParadise.button
1422
- # =========================================================================== #
1423
- def self.button(text)
1424
- ::LibuiParadise::Extensions.button(text)
1425
- end
1426
-
1427
- # =========================================================================== #
1428
- # === LibuiParadise.checkbox
1429
- # =========================================================================== #
1430
- def self.checkbox(i = '')
1431
- ::LibuiParadise::Extensions.checkbox(i)
1432
- end
1433
-
1434
- # =========================================================================== #
1435
- # === LibuiParadise.msg_box
1436
- # =========================================================================== #
1437
- def self.msg_box(
1438
- main_window = :default_window,
1439
- title_to_use = '',
1440
- whatever = ''
1441
- )
1442
- if main_window.is_a?(String) and title_to_use.is_a?(String) and
1443
- title_to_use.empty?
1444
- title_to_use = main_window.dup
1445
- main_window = :default_window
1446
- end
1447
- ::LibuiParadise::Extensions.msg_box(
1448
- main_window,
1449
- title_to_use,
1450
- whatever
1451
- )
1452
- end; self.instance_eval { alias ui_msg_box msg_box } # === LibuiParadise.ui_msg_box
1453
- self.instance_eval { alias message_to_the_user msg_box } # === LibuiParadise.message_to_the_user
1454
- self.instance_eval { alias message_box msg_box } # === LibuiParadise.message_box
1455
- self.instance_eval { alias popup_over_this_widget msg_box } # === LibuiParadise.popup_over_this_widget
1456
- self.instance_eval { alias popup_message msg_box } # === LibuiParadise.popup_message
1457
-
1458
- # =========================================================================== #
1459
- # === LibuiParadise.new_progress_bar
1460
- # =========================================================================== #
1461
- def self.new_progress_bar
1462
- return ::LibuiParadise::Extensions.new_progress_bar
1463
- end
1464
-
1465
- # ========================================================================= #
1466
- # === LibuiParadise.vertical_separator
1467
- # ========================================================================= #
1468
- def self.vertical_separator
1469
- ::LibuiParadise::Extensions.vertical_separator
1470
- end; self.instance_eval { alias ui_vseparator vertical_separator } # === LibuiParadise.ui_vseparator
1471
- self.instance_eval { alias ui_vsep vertical_separator } # === LibuiParadise.ui_vsep
1472
- self.instance_eval { alias vsep vertical_separator } # === LibuiParadise.vsep
1473
-
1474
- # =========================================================================== #
1475
- # === LibuiParadise.text_layout
1476
- # =========================================================================== #
1477
- def self.text_layout(
1478
- i = ''
1479
- )
1480
- ::LibuiParadise::Extensions.text_layout(i)
1481
- end
1482
-
1483
- # =========================================================================== #
1484
- # === LibuiParadise.search_entry
1485
- # =========================================================================== #
1486
- def self.search_entry
1487
- ::LibuiParadise::Extensions.search_entry
1488
- end; self.instance_eval { alias ui_search_entry search_entry } # === LibuiParadise.ui_search_entry
1489
-
1490
- # =========================================================================== #
1491
- # === LibuiParadise.scrolling_area
1492
- # =========================================================================== #
1493
- def self.scrolling_area(
1494
- widget,
1495
- width = :default,
1496
- height = :default
1497
- )
1498
- ::LibuiParadise::Extensions.scrolling_area(widget, width, height)
1499
- end
1500
-
1501
- # =========================================================================== #
1502
- # === LibuiParadise.radio_buttons
1503
- # =========================================================================== #
1504
- def self.radio_buttons(optional_array = [])
1505
- return ::LibuiParadise::Extensions.radio_buttons(optional_array)
1506
- end
1507
-
1508
- # =========================================================================== #
1509
- # === LibuiParadise.password_entry
1510
- # =========================================================================== #
1511
- def self.password_entry
1512
- ::LibuiParadise::Extensions.password_entry
1513
- end; self.instance_eval { alias ui_password_entry password_entry } # === LibuiParadise.ui_password_entry
1514
-
1515
- # =========================================================================== #
1516
- # === LibuiParadise.non_wrapping_multiline_entry
1517
- # =========================================================================== #
1518
- def self.non_wrapping_multiline_entry
1519
- return ::LibuiParadise::Extensions.non_wrapping_multiline_entry
1520
- end
1521
-
1522
- # =========================================================================== #
1523
- # === LibuiParadise.multiline_entry
1524
- # =========================================================================== #
1525
- def self.multiline_entry(optional_content = nil)
1526
- ::LibuiParadise::Extensions.multiline_entry(optional_content)
1527
- end; self.instance_eval { alias textview multiline_entry } # === LibuiParadise.textview
1528
- self.instance_eval { alias text_view multiline_entry } # === LibuiParadise.text_view
1529
- self.instance_eval { alias ui_text_view multiline_entry } # === LibuiParadise.ui_text_view
1530
- self.instance_eval { alias ui_textview multiline_entry } # === LibuiParadise.ui_textview
1531
- self.instance_eval { alias ui_text_buffer multiline_entry } # === LibuiParadise.ui_text_buffer
1532
- self.instance_eval { alias input_field multiline_entry } # === LibuiParadise.input_field
1533
-
1534
- # =========================================================================== #
1535
- # === LibuiParadise.menu
1536
- # =========================================================================== #
1537
- def self.menu(title = '')
1538
- return LibuiParadise::Extensions.menu(title)
1539
- end; self.instance_eval { alias ui_menu menu } # === LibuiParadise.ui_menu
1540
-
1541
- # ========================================================================= #
1542
- # === Libuiparadise.image
1543
- # ========================================================================= #
1544
- def self.image(
1545
- this_file,
1546
- width = :try_to_infer_automatically,
1547
- height = :infer_automatically
1548
- )
1549
- ::LibuiParadise::Extensions.image(
1550
- this_file, width, height
1551
- )
1552
- end; self.instance_eval { alias ui_image image } # === LibuiParadise.ui_image
1553
-
1554
- # =========================================================================== #
1555
- # === LibuiParadise.colour_button
1556
- # =========================================================================== #
1557
- def self.colour_button
1558
- ::LibuiParadise::Extensions.new_colour_button
1559
- end; self.instance_eval { alias color_button colour_button } # === LibuiParadise.color_button
1560
-
1561
- # =========================================================================== #
1562
- # === LibuiParadise.font_button
1563
- # =========================================================================== #
1564
- def self.font_button
1565
- return ::LibuiParadise::Extensions.font_button
1566
- end
1567
-
1568
- # ========================================================================= #
1569
- # === LibuiParadise.horizontal_separator
1570
- # ========================================================================= #
1571
- def self.horizontal_separator
1572
- ::LibuiParadise::Extensions.horizontal_separator
1573
- end; self.instance_eval { alias ui_hseparator horizontal_separator } # === LibuiParadise.ui_hseparator
1574
- self.instance_eval { alias ui_hsep horizontal_separator } # === LibuiParadise.ui_hsep
1575
- self.instance_eval { alias hsep horizontal_separator } # === LibuiParadise.hsep
1576
-
1577
- # =========================================================================== #
1578
- # === LibuiParadise.font
1579
- # =========================================================================== #
1580
- def self.font(&block)
1581
- ::LibuiParadise::Extensions.font(&block)
1582
- end
1583
-
1584
- # =========================================================================== #
1585
- # === LibuiParadise.entry
1586
- # =========================================================================== #
1587
- def self.entry(
1588
- optional_text = ''
1589
- )
1590
- ::LibuiParadise::Extensions.entry(optional_text)
1591
- end; self.instance_eval { alias ui_entry entry } # === LibuiParadise.ui_entry
1592
-
1593
- # =========================================================================== #
1594
- # === LibuiParadise.open_file
1595
- #
1596
- # Simple delegator towards LibuiParadise::Extensions.open_file().
1597
- # =========================================================================== #
1598
- def self.open_file(
1599
- main_window = LibuiParadise::Extensions.main_window?
1600
- )
1601
- return ::LibuiParadise::Extensions.open_file(main_window)
1602
- end; self.instance_eval { alias ui_open_file open_file } # === LibuiParadise.ui_open_file
1603
-
1604
- # =========================================================================== #
1605
- # === LibuiParadise.set_main_window
1606
- # =========================================================================== #
1607
- def self.set_main_window(i)
1608
- ::LibuiParadise::Extensions.set_main_window(i)
1609
- end
17
+ end; self.instance_eval { alias ui_hseparator horizontal_separator } # === LibuiParadise.ui_hseparator
18
+ self.instance_eval { alias ui_hsep horizontal_separator } # === LibuiParadise.ui_hsep
19
+ self.instance_eval { alias hspacer horizontal_separator } # === LibuiParadise.hspacer
20
+ self.instance_eval { alias horizontal_spacer horizontal_separator } # === LibuiParadise.horizontal_spacer
21
+ self.instance_eval { alias hsep horizontal_separator } # === LibuiParadise.hsep
22
+ self.instance_eval { alias libui_hsep horizontal_separator } # === LibuiParadise.libui_hsep
23
+ self.instance_eval { alias new_horizontal_separator horizontal_separator } # === LibuiParadise.new_horizontal_separator
1610
24
 
1611
25
  end