libui_paradise 0.2.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +2072 -0
- data/doc/README.gen +1931 -0
- data/doc/SNIPPETS.md +94 -0
- data/doc/todo/todo.md +16 -0
- data/lib/libui_paradise/autoinclude.rb +9 -0
- data/lib/libui_paradise/base/base.rb +154 -0
- data/lib/libui_paradise/colours/colours.rb +14 -0
- data/lib/libui_paradise/domain_specific_language/README.md +5 -0
- data/lib/libui_paradise/domain_specific_language/button.yml +7 -0
- data/lib/libui_paradise/examples/complex/001_hbox_example.rb +17 -0
- data/lib/libui_paradise/examples/complex/002_tabs_example.rb +25 -0
- data/lib/libui_paradise/examples/complex/003_open_file_button_example.rb +38 -0
- data/lib/libui_paradise/examples/complex/004_font_button.rb +41 -0
- data/lib/libui_paradise/examples/complex/005_search_entry_example.rb +18 -0
- data/lib/libui_paradise/examples/complex/006_coloured_boxes_example.rb +22 -0
- data/lib/libui_paradise/examples/complex/007_slider_example.rb +31 -0
- data/lib/libui_paradise/examples/complex/008_radio_button_example.rb +23 -0
- data/lib/libui_paradise/examples/complex/009_separator_example.rb +25 -0
- data/lib/libui_paradise/examples/complex/010_table_example.rb +55 -0
- data/lib/libui_paradise/examples/complex/011_two_buttons_showing_how_to_enable_and_disable_them.rb +32 -0
- data/lib/libui_paradise/examples/complex/012_password_entry_example.rb +29 -0
- data/lib/libui_paradise/examples/complex/013_form_example.rb +38 -0
- data/lib/libui_paradise/examples/complex/014_text_example.rb +18 -0
- data/lib/libui_paradise/examples/complex/015_text_view_example.rb +16 -0
- data/lib/libui_paradise/examples/complex/016_grid_example.rb +31 -0
- data/lib/libui_paradise/examples/complex/017_unicode_text_example.rb +30 -0
- data/lib/libui_paradise/examples/complex/018_spinbutton_example.rb +33 -0
- data/lib/libui_paradise/examples/complex/019_combo_box_example.rb +50 -0
- data/lib/libui_paradise/examples/complex/020_checkbox_example.rb +81 -0
- data/lib/libui_paradise/examples/complex/021_font_example.rb +115 -0
- data/lib/libui_paradise/examples/complex/022_simple_notepad_example.rb +25 -0
- data/lib/libui_paradise/examples/complex/023_msg_box_error.rb +27 -0
- data/lib/libui_paradise/examples/complex/024_parse_config_file_example.config +6 -0
- data/lib/libui_paradise/examples/complex/024_parse_config_file_example.rb +15 -0
- data/lib/libui_paradise/examples/complex/025_colour_button.rb +53 -0
- data/lib/libui_paradise/examples/complex/026_basic_table_image.rb +96 -0
- data/lib/libui_paradise/examples/complex/027_basic_button_example.rb +19 -0
- data/lib/libui_paradise/examples/complex/028_try_for_automatic_button_press_event_after_a_delay.rb +47 -0
- data/lib/libui_paradise/examples/complex/029_progressbar_example.rb +116 -0
- data/lib/libui_paradise/examples/complex/030_entry_responds_to_comment_as_synonymous_to_the_enter_key_pressed_example.rb +140 -0
- data/lib/libui_paradise/examples/complex/031_notification_functionality_example.rb +96 -0
- data/lib/libui_paradise/examples/complex/032_simple_window_example.rb +69 -0
- data/lib/libui_paradise/examples/complex/033_daemonize_and_exit_after_delay_example.rb +91 -0
- data/lib/libui_paradise/examples/simple/001_open_file_example.rb +35 -0
- data/lib/libui_paradise/examples/simple/002_histogram_example.rb +213 -0
- data/lib/libui_paradise/examples/simple/003_fancy_text_example.rb +220 -0
- data/lib/libui_paradise/examples/simple/004_date_time_picker.rb +52 -0
- data/lib/libui_paradise/examples/simple/005_text_drawing_example.rb +185 -0
- data/lib/libui_paradise/examples/simple/006_midi_player.rb +96 -0
- data/lib/libui_paradise/examples/simple/007_control_gallery.rb +191 -0
- data/lib/libui_paradise/examples/simple/008_basic_area_example.rb +56 -0
- data/lib/libui_paradise/examples/simple/009_spectrum.rb +107 -0
- data/lib/libui_paradise/examples/simple/README.md +7 -0
- data/lib/libui_paradise/experimental/dsl.rb +17 -0
- data/lib/libui_paradise/extensions/counters.rb +58 -0
- data/lib/libui_paradise/extensions/extensions.rb +29 -0
- data/lib/libui_paradise/extensions/hash_fiddle_pointer_widgets.rb +150 -0
- data/lib/libui_paradise/extensions/misc.rb +754 -0
- data/lib/libui_paradise/fiddle/pointer.rb +1158 -0
- data/lib/libui_paradise/generic_window/README.md +9 -0
- data/lib/libui_paradise/generic_window/generic_window.rb +79 -0
- data/lib/libui_paradise/images/LIBUI_PARADISE_LOGO.png +0 -0
- data/lib/libui_paradise/images/README.md +2 -0
- data/lib/libui_paradise/images/form_example.png +0 -0
- data/lib/libui_paradise/libui_classes/box.rb +156 -0
- data/lib/libui_paradise/libui_classes/grid.rb +55 -0
- data/lib/libui_paradise/libui_classes/libui_classes.rb +1611 -0
- data/lib/libui_paradise/project/project.rb +28 -0
- data/lib/libui_paradise/prototype/README.md +3 -0
- data/lib/libui_paradise/prototype/prototype.rb +107 -0
- data/lib/libui_paradise/requires/require_the_libui_classes.rb +29 -0
- data/lib/libui_paradise/requires/require_the_libui_paradise_project.rb +12 -0
- data/lib/libui_paradise/toplevel_methods/misc.rb +13 -0
- data/lib/libui_paradise/version/version.rb +17 -0
- data/lib/libui_paradise.rb +1 -0
- data/libui_paradise.gemspec +49 -0
- data/test/testing_generic_window.rb +20 -0
- metadata +156 -0
|
@@ -0,0 +1,1611 @@
|
|
|
1
|
+
#!/usr/bin/ruby -w
|
|
2
|
+
# Encoding: UTF-8
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
# =========================================================================== #
|
|
5
|
+
# require 'libui_paradise/libui_classes/libui_classes.rb
|
|
6
|
+
# =========================================================================== #
|
|
7
|
+
module LibuiParadise
|
|
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
|
+
# ========================================================================= #
|
|
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
|
|
419
|
+
#
|
|
420
|
+
# This method will add a new horizontal separator. The name "hsep"
|
|
421
|
+
# is a shorter alias to this.
|
|
422
|
+
# ========================================================================= #
|
|
423
|
+
def self.horizontal_separator
|
|
424
|
+
::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
|
|
1610
|
+
|
|
1611
|
+
end
|