libui_paradise 0.3.9 → 0.4.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +176 -155
  3. data/bin/libui_message +1 -1
  4. data/doc/README.gen +175 -85
  5. data/doc/todo/todo.md +9 -5
  6. data/lib/libui_paradise/autoinclude.rb +2 -1
  7. data/lib/libui_paradise/base/base.rb +17 -67
  8. data/lib/libui_paradise/base_module/base_module.rb +1514 -0
  9. data/lib/libui_paradise/colours/colours.rb +4 -4
  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 +1 -1
  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 +5 -9
  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 +63 -35
  46. data/lib/libui_paradise/examples/simple/005_text_drawing_example.rb +3 -3
  47. data/lib/libui_paradise/examples/simple/007_control_gallery.rb +2 -1
  48. data/lib/libui_paradise/examples/simple/009_spectrum.rb +7 -1
  49. data/lib/libui_paradise/examples/simple/012_table_example.rb +5 -5
  50. data/lib/libui_paradise/examples/simple/013_scrolling_pane_example.rb +28 -0
  51. data/lib/libui_paradise/examples/simple/014_simple_entry_example.rb +30 -0
  52. data/lib/libui_paradise/examples/simple/015_slider_example.rb +32 -0
  53. data/lib/libui_paradise/fiddle/fiddle.rb +771 -636
  54. data/lib/libui_paradise/libui_classes/button.rb +31 -0
  55. data/lib/libui_paradise/libui_classes/entry.rb +35 -0
  56. data/lib/libui_paradise/libui_classes/grid.rb +14 -26
  57. data/lib/libui_paradise/libui_classes/hbox.rb +39 -0
  58. data/lib/libui_paradise/libui_classes/libui_classes.rb +9 -1630
  59. data/lib/libui_paradise/libui_classes/msg_box.rb +121 -0
  60. data/lib/libui_paradise/libui_classes/msg_box_error.rb +41 -0
  61. data/lib/libui_paradise/libui_classes/slider.rb +28 -0
  62. data/lib/libui_paradise/libui_classes/spinbox.rb +48 -0
  63. data/lib/libui_paradise/libui_classes/vbox.rb +38 -0
  64. data/lib/libui_paradise/project/project.rb +2 -1
  65. data/lib/libui_paradise/prototype/prototype.rb +8 -8
  66. data/lib/libui_paradise/requires/require_the_libui_classes.rb +2 -2
  67. data/lib/libui_paradise/requires/require_the_libui_paradise_project.rb +4 -2
  68. data/lib/libui_paradise/toplevel_methods/add_to_the_registered_widgets.rb +70 -0
  69. data/lib/libui_paradise/toplevel_methods/hash_fiddle_pointer_widgets.rb +37 -0
  70. data/lib/libui_paradise/{extensions → toplevel_methods}/toplevel_counters.rb +26 -1
  71. data/lib/libui_paradise/toplevel_methods/toplevel_methods.rb +792 -0
  72. data/lib/libui_paradise/version/version.rb +2 -2
  73. data/test/testing_generic_window.rb +2 -0
  74. metadata +22 -8
  75. data/doc/SNIPPETS.md +0 -65
  76. data/lib/libui_paradise/extensions/extensions.rb +0 -979
  77. data/lib/libui_paradise/libui_classes/box.rb +0 -157
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/libui_classes/msg_box.rb'
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ # ========================================================================= #
10
+ # === LibuiParadise.msg_box
11
+ #
12
+ # Official API documentation for dialogs in libui-ng can be found here:
13
+ #
14
+ # https://raw.githubusercontent.com/libui-ng/libui-ng/master/unix/stddialogs.c
15
+ #
16
+ # The API signature for msg_box() in LibUI is as follows:
17
+ #
18
+ # GtkWindow *parent
19
+ # const char *title
20
+ # const char *description
21
+ # GtkMessageType type
22
+ # GtkButtonsType buttons
23
+ #
24
+ # So the first string is the title and the second string is the
25
+ # description that will be shown to the user.
26
+ #
27
+ # The following method is a convenience-wrapper over LibUI.msg_box().
28
+ #
29
+ # A Hash can also be passed into this method, to allow for more
30
+ # flexibility. The following line of code will demonstrate how
31
+ # this can then be used, via a Hash:
32
+ #
33
+ # message_box(
34
+ # text: 'Hello world!'
35
+ # )
36
+ #
37
+ # Or more verbose:
38
+ #
39
+ # LibuiParadise.message_box(text: 'Hello world!')
40
+ #
41
+ # ========================================================================= #
42
+ def self.msg_box(
43
+ main_window = :default_window,
44
+ title_to_use = '',
45
+ description_to_use = ''
46
+ )
47
+ # ======================================================================= #
48
+ # === Handle Hashes first
49
+ # ======================================================================= #
50
+ if main_window.is_a? Hash
51
+ # ===================================================================== #
52
+ # === :text
53
+ # ===================================================================== #
54
+ if main_window.has_key? :text
55
+ description_to_use = main_window.delete(:text)
56
+ end
57
+ # ===================================================================== #
58
+ # === :title_to_use
59
+ # ===================================================================== #
60
+ if main_window.has_key? :title_to_use
61
+ title_to_use = main_window.delete(:title_to_use)
62
+ end
63
+ if main_window and main_window.empty? # Handle empty Hashes as well here.
64
+ main_window = :default_window
65
+ end
66
+ # ======================================================================= #
67
+ # === Handle Strings next
68
+ # ======================================================================= #
69
+ elsif main_window.is_a?(String) and
70
+ title_to_use.is_a?(String) and
71
+ title_to_use.empty?
72
+ title_to_use = main_window.dup
73
+ main_window = :default_window # And re-set it here.
74
+ end
75
+ case main_window
76
+ # ======================================================================= #
77
+ # === :default_window
78
+ #
79
+ # Note that LibuiParadise.main_window? may be nil.
80
+ # ======================================================================= #
81
+ when :default_window,
82
+ :default
83
+ main_window = main_window?
84
+ end
85
+ if description_to_use.is_a? Array
86
+ description_to_use = description_to_use.join(' ').strip
87
+ end
88
+ # ======================================================================= #
89
+ # Next delegate towards LibUI.msg_box():
90
+ # ======================================================================= #
91
+ _ = ::LibUI.msg_box(
92
+ main_window,
93
+ title_to_use,
94
+ description_to_use
95
+ )
96
+ add_to_the_registered_widgets(_, __method__)
97
+ return _
98
+ end; self.instance_eval { alias ui_msg_box msg_box } # === LibuiParadise.ui_msg_box
99
+ self.instance_eval { alias message_to_the_user msg_box } # === LibuiParadise.message_to_the_user
100
+ self.instance_eval { alias message_box msg_box } # === LibuiParadise.message_box
101
+ self.instance_eval { alias popup_over_this_widget msg_box } # === LibuiParadise.popup_over_this_widget
102
+ self.instance_eval { alias popup_message msg_box } # === LibuiParadise.popup_message
103
+
104
+ # ========================================================================= #
105
+ # === LibuiParadise.notification
106
+ #
107
+ # This method can be used to show a quick message box to the end
108
+ # user.
109
+ # ========================================================================= #
110
+ def self.notification(
111
+ text = 'Backup complete!',
112
+ title_to_use = ''
113
+ )
114
+ ::LibuiParadise.message_box(
115
+ window: :default_window,
116
+ text: text,
117
+ title_to_use: title_to_use
118
+ )
119
+ end
120
+
121
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/libui_classes/msg_box_error.rb'
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ # ========================================================================= #
10
+ # === LibuiParadise.msg_box_error
11
+ # ========================================================================= #
12
+ def self.msg_box_error(
13
+ main_window = LibuiParadise.main_window?,
14
+ title_to_use = '',
15
+ whatever = ''
16
+ )
17
+ case main_window
18
+ # ======================================================================= #
19
+ # === :default
20
+ # ======================================================================= #
21
+ when :default
22
+ main_window = LibuiParadise.main_window?
23
+ end
24
+ # ======================================================================= #
25
+ # Delegate towards LibUI.msg_box_error() next:
26
+ # ======================================================================= #
27
+ _ = ::LibUI.msg_box_error(
28
+ main_window,
29
+ title_to_use,
30
+ whatever
31
+ )
32
+ add_to_the_registered_widgets(_, __method__)
33
+ return _
34
+ end; self.instance_eval { alias ui_msg_box_error msg_box_error } # === LibuiParadise.ui_msg_box_error
35
+ self.instance_eval { alias ui_error_msg msg_box_error } # === LibuiParadise.ui_error_msg
36
+ self.instance_eval { alias ui_error_message msg_box_error } # === LibuiParadise.ui_error_message
37
+ self.instance_eval { alias error_message_to_the_user msg_box_error } # === LibuiParadise.error_message_to_the_user
38
+ self.instance_eval { alias error_msg msg_box_error } # === LibuiParadise.error_msg
39
+ self.instance_eval { alias message_box_error msg_box_error } # === LibuiParadise.message_box_error
40
+
41
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/libui_classes/slider.rb'
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ require 'libui_paradise/toplevel_methods/add_to_the_registered_widgets.rb'
10
+
11
+ # ========================================================================= #
12
+ # === LibuiParadise.slider
13
+ #
14
+ # This method will return a slider widget.
15
+ # ========================================================================= #
16
+ def self.slider(
17
+ start_value = 0,
18
+ end_value = 100
19
+ )
20
+ _ = ::LibUI.new_slider(start_value, end_value)
21
+ # ======================================================================= #
22
+ # Register it at once:
23
+ # ======================================================================= #
24
+ add_to_the_registered_widgets(_, __method__)
25
+ return _
26
+ end; self.instance_eval { alias ui_slider slider } # === LibuiParadise.ui_slider
27
+
28
+ end
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/libui_classes/spinbox.rb'
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ # ========================================================================= #
10
+ # === LibuiParadise.spinbox
11
+ #
12
+ # This method will return a spin-button, also called a spin-box.
13
+ #
14
+ # The first argument is the start value; the second argument is the end
15
+ # value.
16
+ #
17
+ # The source code can be found here:
18
+ #
19
+ # https://raw.githubusercontent.com/libui-ng/libui-ng/master/unix/spinbox.c
20
+ #
21
+ # ========================================================================= #
22
+ def self.spinbox(
23
+ start_point = 0,
24
+ end_point = 100,
25
+ increment = 1 # This is currently ignored.
26
+ )
27
+ if start_point.is_a? Hash
28
+ # ===================================================================== #
29
+ # === :end
30
+ # ===================================================================== #
31
+ if start_point.has_key? :end
32
+ end_point = start_point[:end]
33
+ end
34
+ # ===================================================================== #
35
+ # === :start
36
+ # ===================================================================== #
37
+ if start_point.has_key? :start
38
+ start_point = start_point[:start]
39
+ end
40
+ end
41
+ _ = ::LibUI.new_spinbox(start_point.to_i, end_point.to_i)
42
+ add_to_the_registered_widgets(_, __method__)
43
+ return _
44
+ end; self.instance_eval { alias ui_spinbox spinbox } # === LibuiParadise.ui_spinbox
45
+ self.instance_eval { alias ui_spinbutton spinbox } # === LibuiParadise.ui_spinbutton
46
+ self.instance_eval { alias spinbutton spinbox } # === LibuiParadise.spinbutton
47
+
48
+ end
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/libui_classes/vbox.rb'
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ # ========================================================================= #
10
+ # === LibuiParadise.vbox (vbox tag)
11
+ #
12
+ # This method will create a vertical box.
13
+ # ========================================================================= #
14
+ def self.vbox(*optional_widgets)
15
+ _ = ::LibUI.new_vertical_box
16
+ add_to_the_registered_widgets(_, __method__)
17
+ if optional_widgets and !optional_widgets.empty?
18
+ optional_widgets.flatten.each {|this_widget| _ << this_widget }
19
+ end
20
+ return _
21
+ end; self.instance_eval { alias ui_vbox vbox } # === LibuiParadise.ui_vbox
22
+ self.instance_eval { alias vertical_box vbox } # === LibuiParadise.vertical_box
23
+ self.instance_eval { alias create_vbox vbox } # === LibuiParadise.create_vbox
24
+ self.instance_eval { alias libui_vbox vbox } # === LibuiParadise.libui_vbox
25
+
26
+ # ========================================================================= #
27
+ # === LibuiParadise.ui_padded_vbox
28
+ #
29
+ # This method will call .is_padded on the vbox after it has been
30
+ # initialized.
31
+ # ========================================================================= #
32
+ def self.ui_padded_vbox(*optional_widgets)
33
+ _ = ::LibuiParadise.vbox(optional_widgets)
34
+ _.is_padded
35
+ return _
36
+ end; self.instance_eval { alias padded_vbox ui_padded_vbox } # === LibuiParadise.padded_vbox
37
+
38
+ end
@@ -28,5 +28,6 @@ module LibuiParadise
28
28
  end
29
29
 
30
30
  if __FILE__ == $PROGRAM_NAME
31
- puts LibuiParadise.project_base_dir?
31
+ alias e puts
32
+ e LibuiParadise.project_base_dir?
32
33
  end
@@ -4,16 +4,15 @@
4
4
  # =========================================================================== #
5
5
  # === LibuiParadise::GUI::LibUI::Prototype
6
6
  # =========================================================================== #
7
+ require 'libui_paradise/base/base.rb'
8
+
7
9
  module LibuiParadise
8
10
 
9
11
  module GUI
10
12
 
11
13
  module LibUI
12
14
 
13
- class Prototype # === LibuiParadise::GUI::LibUI::Prototype
14
-
15
- require 'libui_paradise/extensions/extensions.rb'
16
- include LibuiParadise::Extensions
15
+ class Prototype < LibuiParadise::Base # === LibuiParadise::GUI::LibUI::Prototype
17
16
 
18
17
  # require 'bioroebe/gui/shared_code/levensthein_distance/levensthein_distance_module.rb'
19
18
  # include Bioroebe::GUI::LevenstheinDistanceModule
@@ -21,7 +20,7 @@ class Prototype # === LibuiParadise::GUI::LibUI::Prototype
21
20
  # ========================================================================= #
22
21
  # === TITLE
23
22
  # ========================================================================= #
24
- TITLE = 'A prototype for LibUI'
23
+ TITLE = 'A prototype GUI for LibUI'
25
24
 
26
25
  # ========================================================================= #
27
26
  # === WIDTH
@@ -47,6 +46,7 @@ class Prototype # === LibuiParadise::GUI::LibUI::Prototype
47
46
  # === reset (reset tag)
48
47
  # ========================================================================= #
49
48
  def reset
49
+ reset_the_internal_hash
50
50
  title_width_height(TITLE, WIDTH, HEIGHT)
51
51
  end
52
52
 
@@ -57,11 +57,11 @@ class Prototype # === LibuiParadise::GUI::LibUI::Prototype
57
57
  # ======================================================================= #
58
58
  # === @window
59
59
  # ======================================================================= #
60
- @window = ui_padded_main_window(title?, width?, height?, 0)
60
+ @window = padded_main_window(title?, width?, height?, 0)
61
61
  end
62
62
 
63
63
  # ========================================================================= #
64
- # === run
64
+ # === run (run tag)
65
65
  # ========================================================================= #
66
66
  def run
67
67
  create_skeleton_then_connect_skeleton
@@ -70,7 +70,7 @@ class Prototype # === LibuiParadise::GUI::LibUI::Prototype
70
70
  # First add the two buttons on top:
71
71
  # ======================================================================= #
72
72
  hbox_on_top = padded_hbox
73
- button_refresh = ui_button('Refresh')
73
+ button_refresh = create_button('Refresh')
74
74
  button_refresh.on_clicked {
75
75
  e 'TODO: Refresh this ... or add any other functionality.'
76
76
  }
@@ -11,8 +11,8 @@ module LibuiParadise
11
11
  # ========================================================================= #
12
12
  # === LibuiParadise.do_require_the_libui_classes
13
13
  #
14
- # This method will batch-require all libui-paradise classes under
15
- # the libui_classes/ subdirectory.
14
+ # This method will batch-require all libui-paradise classes residing
15
+ # under the libui_classes/ subdirectory.
16
16
  # ========================================================================= #
17
17
  def self.do_require_the_libui_classes
18
18
  target = LibuiParadise.project_base_dir?+'libui_classes/*.rb'
@@ -4,9 +4,11 @@
4
4
  # =========================================================================== #
5
5
  # require 'libui_paradise/requires/require_the_libui_paradise_project.rb'
6
6
  # =========================================================================== #
7
- require 'libui_paradise/extensions/extensions.rb' # This also pulls in another file, called pointer.rb.
7
+ require 'libui_paradise/base_module/base_module.rb' # This also pulls in another file, called pointer.rb.
8
8
  require 'libui_paradise/project/project.rb'
9
9
  require 'libui_paradise/requires/require_the_libui_classes.rb'
10
10
  require 'libui_paradise/colours/colours.rb'
11
11
 
12
- LibuiParadise.do_require_the_libui_classes
12
+ LibuiParadise.do_require_the_libui_classes
13
+
14
+ LibuiParadise.init # This is the new default since as of December 2023.
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/toplevel_methods/add_to_the_registered_widgets.rb'
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ # ========================================================================= #
10
+ # === @hash_fiddle_pointer_widgets
11
+ # ========================================================================= #
12
+ @hash_fiddle_pointer_widgets = {}
13
+
14
+ # ========================================================================= #
15
+ # === LibuiParadise.register_this_fiddle_pointer_widget
16
+ #
17
+ # This method registers the particular widget in use.
18
+ #
19
+ # Every new_* method available via LibUI.new* that creates a new widget
20
+ # has to be registered via this method here, by calling it.
21
+ #
22
+ # That way we have a main Hash that contains lots of Fiddle::Pointers
23
+ # and we can, at a later time, modify these Fiddle::Pointer or call
24
+ # toplevel methods with these registered pointers. This will only
25
+ # work if we have registered these pointers, though, which is why
26
+ # each method that creates a new libui-widget has to make use of
27
+ # this method here.
28
+ #
29
+ # Since as of November 2022, the main window is also handled by
30
+ # this method here. The proper way to refer to it is now via
31
+ # LibuiParadise.main_window?.
32
+ #
33
+ # The mandatory entries given to this method must conform to the
34
+ # following format:
35
+ #
36
+ # object_id -> [:the_fiddle_pointer_widget, :the_type]
37
+ #
38
+ # In other words, a key (as an Integer), and an Array as
39
+ # its primary value.
40
+ #
41
+ # The object_id will be determined automatically, so it can
42
+ # be omitted. It is the value that is simply returned by
43
+ # calling the .object_id method, so we do not have to do
44
+ # anything else here.
45
+ #
46
+ # The very last argument of the two-member Array should be a
47
+ # symbol, such as :grid. This is automatically ensured via a
48
+ # call to __method__ which will return a Symbol. That way we
49
+ # can then call the correct method internally, once we know
50
+ # we have a :grid or any other widget.
51
+ # ========================================================================= #
52
+ def self.register_this_fiddle_pointer_widget(
53
+ the_fiddle_pointer_widget,
54
+ the_type_of_the_widget = nil # such as :grid or :entry
55
+ )
56
+ # ======================================================================= #
57
+ # Determine the object-id automatically next:
58
+ # ======================================================================= #
59
+ object_id_to_use = the_fiddle_pointer_widget.object_id
60
+ # ======================================================================= #
61
+ # Then, store it on the main Hash.
62
+ # ======================================================================= #
63
+ @hash_fiddle_pointer_widgets[object_id_to_use] =
64
+ [
65
+ the_fiddle_pointer_widget,
66
+ the_type_of_the_widget
67
+ ]
68
+ end; self.instance_eval { alias add_to_the_registered_widgets register_this_fiddle_pointer_widget } # === LibuiParadise::Extensions.add_to_the_registered_widgets
69
+
70
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'libui_paradise/toplevel_methods/hash_fiddle_pointer_widgets.rb'
6
+ # =========================================================================== #
7
+ module LibuiParadise
8
+
9
+ # ========================================================================= #
10
+ # === @hash_fiddle_pointer_widgets
11
+ #
12
+ # This hash will contain all widgets, via pointer.
13
+ # ========================================================================= #
14
+ @hash_fiddle_pointer_widgets = {}
15
+
16
+ # ========================================================================= #
17
+ # === LibuiParadise.hash_fiddle_pointer_widgets?
18
+ # ========================================================================= #
19
+ def self.hash_fiddle_pointer_widgets?
20
+ @hash_fiddle_pointer_widgets
21
+ end
22
+
23
+ # ========================================================================= #
24
+ # === LibuiParadise.current_widget_pointer?
25
+ #
26
+ # This method will always point to the last widget element that was
27
+ # added.
28
+ # ========================================================================= #
29
+ def self.current_widget_pointer?
30
+ hash_fiddle_pointer_widgets?.values.last.first
31
+ end
32
+
33
+ end
34
+
35
+ if __FILE__ == $PROGRAM_NAME
36
+ pp LibuiParadise::Extensions.hash_fiddle_pointer_widgets?
37
+ end
@@ -2,7 +2,7 @@
2
2
  # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
- # require 'libui_paradise/extensions/toplevel_counters.rb'
5
+ # require 'libui_paradise/toplevel_methods/toplevel_counters.rb'
6
6
  # =========================================================================== #
7
7
  module LibuiParadise
8
8
 
@@ -16,6 +16,16 @@ module LibuiParadise
16
16
  # ========================================================================= #
17
17
  @counter_left = 0
18
18
 
19
+ # ========================================================================= #
20
+ # === LibuiParadise.reset_the_counters
21
+ #
22
+ # This method can be used to reset the two counters defined above.
23
+ # ========================================================================= #
24
+ def self.reset_the_counters
25
+ @counter_top = 0
26
+ @counter_left = 0
27
+ end; self.instance_eval { alias reset_the_grid_counter reset_the_counters } # === LibuiParadise.reset_the_grid_counter
28
+
19
29
  # ========================================================================= #
20
30
  # === LibuiParadise.counter_left?
21
31
  # ========================================================================= #
@@ -25,6 +35,13 @@ module LibuiParadise
25
35
  self.instance_eval { alias left_counter counter_left? } # === LibuiParadise.left_counter
26
36
  self.instance_eval { alias left_counter? counter_left? } # === LibuiParadise.left_counter?
27
37
 
38
+ # ========================================================================= #
39
+ # === LibuiParadise.increment_counter_left
40
+ # ========================================================================= #
41
+ def self.increment_counter_left
42
+ @counter_left += 1
43
+ end; self.instance_eval { alias increment_the_left_counter increment_counter_left } # === LibuiParadise.increment_the_left_counter
44
+
28
45
  # ========================================================================= #
29
46
  # === LibuiParadise.counter_left=
30
47
  # ========================================================================= #
@@ -55,4 +72,12 @@ module LibuiParadise
55
72
  return [@counter_left, @counter_top]
56
73
  end
57
74
 
75
+ # ========================================================================= #
76
+ # === LibuiParadise.new_row
77
+ # ========================================================================= #
78
+ def self.new_row
79
+ ::LibuiParadise.counter_left = 0 # Reset towards 0, which means "very left".
80
+ ::LibuiParadise.counter_top += 1 # And we go down to the next row here.
81
+ end
82
+
58
83
  end