libui_paradise 0.3.9 → 0.4.13

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.
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
data/doc/README.gen CHANGED
@@ -9,12 +9,12 @@ by me via **gimp** and ImageMagick - the rounded borders were
9
9
  done via ImageMagick. You can re-use this image if you would like to,
10
10
  including the colour-pattern, via a **CC BY 3.0** licence. See the following
11
11
  link for that licence: https://creativecommons.org/licenses/by/3.0/. For
12
- **cfdg** itself, have a look at: https://www.contextfreeart.org/gallery/)
12
+ <b>cfdg</b> itself, have a look at: https://www.contextfreeart.org/gallery/)
13
13
 
14
- The **libui_paradise project** aims to enhance the official (upstream)
14
+ The <b>libui_paradise project</b> aims to enhance the official (upstream)
15
15
  ruby-libui bindings a little bit.
16
16
 
17
- You can find the upstream ruby-libui bindings, maintained by **kojix2**,
17
+ You can find the upstream ruby-libui bindings, maintained by <b>kojix2</b>,
18
18
  here:
19
19
 
20
20
  https://rubygems.org/gems/libui
@@ -150,7 +150,7 @@ around one day, that idea should be retained for other GUIs
150
150
  in the future.
151
151
 
152
152
  It's quite difficult to get GTK and ruby-gtk to work on
153
- **windows** - I tried to compile it some weeks ago but I
153
+ <b>windows</b> - I tried to compile it some weeks ago but I
154
154
  ended up having "missing symbols" error messages afterwards.
155
155
  I managed to get the hello-world.c example working, but the
156
156
  more complicated examples did not work for me.
@@ -168,7 +168,7 @@ no binary bundles for ruby-gtk on windows anymore either. I
168
168
  assume it is possible if you know msys2, and the windows
169
169
  platform, but I am no expert on either, so ...)
170
170
 
171
- **libui** is so much simpler to use on windows than GTK,
171
+ <b>libui</b> is so much simpler to use on windows than GTK,
172
172
  though - just do **gem install libui** and it'll work,
173
173
  as-is. Literally. That's it. I tried it on my windows
174
174
  laptop and it **does** indeed work. That convinced me
@@ -282,7 +282,8 @@ sense in this regard.
282
282
 
283
283
  ## How to add a margin in LibUI
284
284
 
285
- Use something like:
285
+ Use the following API if you wish to have your main window
286
+ use a margin:
286
287
 
287
288
  LibUI.window_set_margined(MAIN_WINDOW, 1)
288
289
 
@@ -428,14 +429,19 @@ Or just:
428
429
 
429
430
  Since as of 2022 I prefer the longer variant, e. g. **LibUI**init. The
430
431
  old UI constant ("alias") will be retained, but new code added to the
431
- libui_paradise gem will not use **UI** - instead the slightly longer
432
- **LibUI** is used.
433
-
432
+ libui_paradise gem will not use <b>UI</b> - instead the slightly longer
433
+ <b>LibUI</b> is used.
434
+
435
+ Note that since as of <b>December 2023</b>, whenever the libui_paradise
436
+ gem is required, <b>LibuiParadise.init</b> is automatically called,
437
+ which in turn invokes LibUI.init. The reason as to why this is
438
+ the new default is so that we can omit one line of code.
439
+
434
440
  ## Subclassing
435
441
 
436
442
  Currently subclassing from LibUI elements does not work - I simply
437
- have no idea how to "subclass" from a **Fiddle::Pointer**. Perhaps we
438
- have to build up a data structure that behaves like **Fiddle::Pointer**
443
+ have no idea how to "subclass" from a <b>Fiddle::Pointer</b>. Perhaps we
444
+ have to build up a data structure that behaves like <b>Fiddle::Pointer</b>
439
445
  but also has methods that allow for a more direct 'OOP behaviour'. Has
440
446
  anyone tried this yet? I am scared to try considering I already got
441
447
  segfaults everywhere ...
@@ -452,8 +458,8 @@ The following API can be used to create a new scrolling area:
452
458
 
453
459
  LibUI.new_scrolling_area
454
460
 
455
- Scrolling areas have horziontal and vertical scrollbars. The
456
- amount that can be scrolled is determined by the area's
461
+ <b>Scrolling areas</b> may contain horizontal and vertical scrollbars.
462
+ The amount that can be scrolled is determined by the area's
457
463
  size, which is decided by the programmer (both when creating
458
464
  the Area and by a call to SetSize). Only a portion of the
459
465
  Area is visible at any time; drawing and mouse events are
@@ -461,9 +467,9 @@ automatically adjusted to match what portion is visible,
461
467
  so you do not have to worry about scrolling in your
462
468
  event handlers.
463
469
 
464
- The method LibUI.new_scrolling_area() accepts three arguments.
470
+ The method <b>LibUI.new_scrolling_area()</b> accepts <b>three arguments</b>.
465
471
  The second and third are width and height, respectively
466
- (as **integers**).
472
+ (as <b>integers</b>).
467
473
 
468
474
  The first argument is the area handle. It has the following
469
475
  pointer types (struct):
@@ -493,6 +499,12 @@ The <b>handlerDraw() function</b> in C looks like this:
493
499
  uiFreeFontButtonFont(&defaultFont);
494
500
  }
495
501
 
502
+ This means that you will have to pass three arguments to
503
+ this method - all are mandatory. Failure to do so may yield an
504
+ error message, such as:
505
+
506
+ gems/libui-0.1.2.pre/lib/libui/ffi.rb:20:in `call': wrong number of arguments (given 0, expected 3) (ArgumentError)
507
+
496
508
  The scrollable area may look like this:
497
509
 
498
510
  <img src="https://raw.githubusercontent.com/msink/kotlin-libui/master/samples/hello/hello-windows.png">
@@ -517,6 +529,7 @@ label / ui_text widget.
517
529
  To create a combo-box in vanilla libui, do this in plain ruby-libui:
518
530
 
519
531
  alignment = LibUI.new_combobox # Here we actually create the combobox.
532
+ # Next, we show how to append to a combobox:
520
533
  LibUI.combobox_append(alignment, 'Left')
521
534
  LibUI.combobox_append(alignment, 'Center')
522
535
  LibUI.combobox_append(alignment, 'Right')
@@ -548,11 +561,11 @@ For instance:
548
561
 
549
562
  LibUI.combobox_set_selected(combobox, 0) # The first one will be active too.
550
563
 
551
- To **query the currently selected value**, use:
564
+ To <b>query the currently selected value</b>, use:
552
565
 
553
566
  LibUI.combobox_selected(pointer)
554
567
 
555
- This is usually done via a **proc {}** object. See kojix2' examples.
568
+ This is usually done via a <b>proc {}</b> object. See kojix2' examples.
556
569
 
557
570
  In LibuiParadise a few custom methods were added, such as
558
571
  **.ui_sync_connect()**. This method was added to connect a
@@ -578,11 +591,28 @@ To add content to an editable combobox youc an use:
578
591
 
579
592
  LibUI.append() # .append() adds the named item to the end of the EditableCombobox.
580
593
 
581
- The **source code** to the combo-box in libui, at the least
594
+ A more concise example for populating a combobox may be
595
+ this one here:
596
+
597
+ combo_box = LibUI.combobox {
598
+ ['combobox Item 1', 'combobox Item 2', 'combobox Item 3']
599
+ }
600
+
601
+ The <b>source code</b> to the combo-box in libui, at the least
582
602
  for UNIX/Linux, can be seen here:
583
603
 
584
604
  https://github.com/andlabs/libui/blob/master/unix/combobox.c
585
605
 
606
+ ## How to add a libui-widget to the main window - how to designate a child widget:
607
+
608
+ LibUI.window_set_child(main_window, button) # Both these widgets have to be created first, of course.
609
+
610
+ ## LibUI.control_show
611
+
612
+ No clue what this does so far.
613
+
614
+ LibUI.control_show(main_window)
615
+
586
616
  ## Error messages and ui_error_message
587
617
 
588
618
  In LibUI respectively ruby-libui you can display error messages
@@ -608,7 +638,7 @@ just a stub though - we may have to research this with better examples.
608
638
 
609
639
  ## Checkboxes in Libui-ng
610
640
 
611
- A simple checkbox example in **plain** ruby-libui follows:
641
+ A simple checkbox example in <b>plain</b> ruby-libui follows:
612
642
 
613
643
  checkbox = LibUI.checkbox('Checkbox')
614
644
  checkbox_toggle_callback = proc { |pointer|
@@ -625,8 +655,8 @@ This may look like so on Linux:
625
655
 
626
656
  <img src="https://i.imgur.com/d7qWalZ.png" style="margin-left: 2em; padding: 4px; border: 1px solid black;">
627
657
 
628
- To set such a checkbox to the checked-state (that is, as if the
629
- user clicked on it), use the following method, if you use the
658
+ To set such a checkbox to the <b>checked-state</b> (that is, as if
659
+ the user clicked on it), use the following method, if you use the
630
660
  libui_paradise gem:
631
661
 
632
662
  checkbox.set_checked(1)
@@ -635,8 +665,8 @@ To query its state use:
635
665
 
636
666
  checked = LibUI.checkbox_checked(pointer) == 1
637
667
 
638
- To <b>query</b> whether a checkbox is **active**, use code such as the
639
- following:
668
+ To <b>query</b> whether a checkbox is <b>active</b>, use code such as
669
+ the following:
640
670
 
641
671
  checkbox.is_active?
642
672
  checkbox.active?
@@ -645,7 +675,7 @@ This depends on the modifications to Fiddler::Pointer, so
645
675
  be wary when you use this - there be dragons (perhaps). Most
646
676
  of these modifications are based on **.object_id**, which is
647
677
  registered in a main, toplevel Hash in the
648
- **libui_paradise project**. Not very elegant, but simple, and
678
+ <b>libui_paradise project</b>. Not very elegant, but simple, and
649
679
  it works (for the most part).
650
680
 
651
681
  The toggle-event for a checkbox can be triggered via:
@@ -657,23 +687,23 @@ The toggle-event for a checkbox can be triggered via:
657
687
  0
658
688
  }
659
689
 
660
- To respond to on-toggled events, do:
690
+ To respond to <b>on-toggled events</b>, do use:
661
691
 
662
692
  LibUI.checkbox_on_toggled(checkbox, checkbox_toggle_callback, nil)
663
693
 
664
694
  ## Adding a widget into another widget
665
695
 
666
- I chose the following **API** for this:
696
+ I chose the following <b>API</b> for this:
667
697
 
668
698
  box1.add(box2, 1)
669
699
 
670
- Note that this is "cheating" a bit because the method **.add()** is defined
671
- on **Fiddle::Pointer**. That's scary! Segfaults coming your way. But it
672
- also seems to work to some extent. Which is amazing ... :-)
700
+ Note that this is "cheating" a bit because the method <b>.add()</b> is
701
+ defined on <b>Fiddle::Pointer</b>. That's scary! Segfaults coming your
702
+ way. But it also seems to work to some extent. Which is amazing ... :-)
673
703
 
674
704
  In ruby-gtk it is quite common to use **.add()**. While **.pack_start()**
675
705
  and **.pack_end()** are available in ruby-gtk as well, I think .add() is
676
- the simpler name. We just **add a widget to another widget** - job done.
706
+ the simpler name. We just <b>add a widget to another widget</b> - job done.
677
707
 
678
708
  (I may also use << as alias to .add() and while << is great, remember
679
709
  that it can not easily be used all the time, e. g. box1 << box2 <<
@@ -741,8 +771,8 @@ If you use the libui_paradise gem, you can use this:
741
771
 
742
772
  ## Adding a horizontal separator or a vertical separator
743
773
 
744
- The method **UI.new_horizontal_separator** can be used to add (or rather
745
- first create) a horizontal separator.
774
+ The method <b>LibUI.new_horizontal_separator</b> can be used to add (or
775
+ rather first create) <b>a horizontal separator</b>.
746
776
 
747
777
  You can then add it via .add() or << if you use the libui_paradise
748
778
  project. Alternatively you can use the toplevel method provided by
@@ -791,6 +821,10 @@ not necessarily recommending this be done, but **if** you ever have
791
821
  such a use case then you can use it - which is another reason why
792
822
  I added this screenshot, so that I don't forget. :)
793
823
 
824
+ The toplevel method <b>LibuiParadise.horizontal_separator()</b>
825
+ has also been added; it is simply a wrapper towards
826
+ <b>LibUI.new_horizontal_separator()</b>.
827
+
794
828
  ## Padding elements in LibUI
795
829
 
796
830
  The general API for setting padding to a container in LibUI
@@ -874,24 +908,38 @@ hand. Only the raw filename will be used, so if you
874
908
  have a file at **/tmp/foo/bar.rb** then the title
875
909
  of the window will be **bar.rb**.
876
910
 
877
- ## Entry in libui
911
+ ## Entries in libui (libui-entry)
878
912
 
879
- An entry in libui may look like this:
913
+ Let's first show how an <b>entry</b> in libui may look like:
880
914
 
881
915
  <img src="https://raw.githubusercontent.com/parro-it/libui-node/master/docs/media/UiEntry.png" style="margin-left:1em">
882
916
 
883
- Such an entry can be set to be **read only** (readOnly: Boolean, aka true or false).
917
+ Such an entry can be set to be <b>read only</b> (readOnly: Boolean, aka true or false).
918
+ This means that it can not be changed by the user; it is then only used to
919
+ display some content.
884
920
 
885
- The upstream C code for libui-entry, for **unix/**, can be seen here:
921
+ The upstream C code for libui-entry, for <b>unix/</b>, can be seen here:
886
922
 
887
923
  https://github.com/andlabs/libui/blob/master/unix/entry.c
888
924
 
925
+ To create a new libui-entry, in raw libui-code, use this method:
926
+
927
+ LibUI.new_entry
928
+ entry = LibUI.new_entry # or better, this variant
929
+
889
930
  In ruby, for the LibUI namespace, you can set text on an entry
890
931
  by calling <b>LibUI.entry_set_text()</b>, such as shown in
891
932
  the following example:
892
933
 
893
934
  LibUI.entry_set_text(entry, 'Please enter your feelings')
894
935
 
936
+ If you use the libui_paradise gem, a modification in Fiddle
937
+ is to allow the method calls called .is_read_only and its
938
+ alias name, .readonly. This can be called on the entry,
939
+ such as:
940
+
941
+ entry.readonly
942
+
895
943
  ## Borderless windows and fullscreen windows
896
944
 
897
945
  A window that is **borderless: true** will not show any title or
@@ -901,6 +949,14 @@ To set the main window to full screen (occupy the whole monitor) do:
901
949
 
902
950
  LibUI.window_set_fullscreen(main_window, 1)
903
951
 
952
+ ## How to add a new main window:
953
+ # width, height, hasMenubar
954
+ main_window = LibUI.new_window('hello world', 300, 200, 1)
955
+
956
+ The source code for this method can be seen here:
957
+
958
+ https://raw.githubusercontent.com/libui-ng/libui-ng/master/unix/window.c
959
+
904
960
  ## Spinbutton / Spinbox
905
961
 
906
962
  You can use the following API for a spinbox:
@@ -955,29 +1011,30 @@ In libui the general API for this is:
955
1011
 
956
1012
  ## Control Gallery
957
1013
 
958
- Here is an image, from kotlin-libui, how this may look on windows:
1014
+ Here is an image, from <b>kotlin-libui</b>, how this may look on windows:
959
1015
 
960
1016
  <img src="https://raw.githubusercontent.com/msink/kotlin-libui/master/samples/controlgallery/controlgallery-windows7.png" style="margin-left: 2em">
961
1017
 
962
1018
  ## LibUI.new_button() - how to work with buttons in LibUI in general
963
1019
 
964
- <b>LibUI.new_button</b> allows us to create a new button via
965
- LibUI.
1020
+ <b>LibUI.new_button</b> allows us to create a new button, via
1021
+ the LibUI gem maintained by kojix2.
966
1022
 
967
- Examples for this:
1023
+ Examples for this, syntax-wise, follow:
968
1024
 
969
1025
  button1 = LibUI.new_button('Text')
970
1026
  button2 = LibUI.new_button('▶')
971
1027
  button3 = LibUI.new_button('■') # You can use Unicode / Emojis here just fine.
1028
+ button3 = LibUI.new_button('♥') # This also gives you a way to do simple GUI elements, thanks to Unicode / Emoji.
972
1029
 
973
- Now, we need to "tell" this button what to do when it is clicked.
974
- This is done via Libui.button_on_clicked().
1030
+ Now, we need to "<i>tell</i>" this button what to do when it is clicked
1031
+ by the user. This is done via the method <b>LibUI.button_on_clicked()</b>.
975
1032
 
976
- Example:
1033
+ Usage example:
977
1034
 
978
- LibUI.button_on_clicked(button) do
979
- LibUI.msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
980
- end
1035
+ LibUI.button_on_clicked(button) {
1036
+ LibUI.msg_box(MAIN_WINDOW, 'Information', 'You clicked the button') # Show a message-box upon clicking this button.
1037
+ }
981
1038
 
982
1039
  ## Enabling / Disabling buttons in libui
983
1040
 
@@ -1123,17 +1180,6 @@ to be simpler for the time being. I may plan to change a lot more one day,
1123
1180
  if I ever manage to find out how to simulate proper subclasses via
1124
1181
  Fiddle::Pointer ... :)
1125
1182
 
1126
- --------------------------------------------------------------------------------
1127
- ## SNIPPETS.md
1128
-
1129
- Next, the content of the file called **SNIPPETS.md** will be shown. Note
1130
- that this file will eventually be integreated into this file, and then
1131
- subsequently removed one day.
1132
-
1133
- EMBED_THIS_FILE /home/x/programming/ruby/src/libui_paradise/doc/SNIPPETS.md
1134
-
1135
- --------------------------------------------------------------------------------
1136
-
1137
1183
  ## Advantages and Disadvantages of the libui project
1138
1184
 
1139
1185
  It would be unfair to only selectively name advantages but not talk about
@@ -1141,29 +1187,31 @@ disadvantages, so this subsection will show some limitations, trade-offs,
1141
1187
  constraints and opportunities. This is not complete, but it may become
1142
1188
  somewhat more complete over time. Stay tuned.
1143
1189
 
1144
- (a) Advantages:
1190
+ (a) Advantages of LibUI:
1145
1191
 
1146
- - Works on windows out-of-the-box after you installed the libui-gem.
1192
+ - Works on the windows platform, out-of-the-box, after the libui-gem has been installed.
1147
1193
  - Is super-simple to use compared to other toolkits, including ruby-gtk.
1148
- - Super-simple to build up a prototype for a GUI, buttons that work,
1149
- spin-boxes, text-views and so forth. Faster than any other toolkit
1150
- IMO.
1194
+ - Super-simple to build up a prototype for a GUI, buttons that work, spin-boxes, text-views
1195
+ and so forth. Faster than any other toolkit, IMO.
1151
1196
  - Works cross-platform.
1152
1197
 
1153
- (b) Disadvantage:
1198
+ (b) Disadvantage of LibUI:
1154
1199
 
1155
1200
  - Limited ability to control the layout and size of widgets.
1156
- - May look like utter crap ... :-)
1157
- - Some functionality is missing, such as a scrolled-window for every widget.
1201
+ - May look like utter crap on some platforms ... :-)
1202
+ - Some functionality is flat-out missing, such as a scrolled-window for every widget
1203
+ or tooltips for every widget.
1158
1204
  - No way to use different fonts in the same application and choosing a font
1159
1205
  is needlessly complicated. (This may not be completely correct, though -
1160
- the glimmer-dsl-libui has example that seem to work. But if you ask me
1206
+ the glimmer-dsl-libui has examples that seem to work. But if you ask me
1161
1207
  right now in 2021 how this works via a standalone example then I can
1162
1208
  happily tell you I have absolutely no idea. Which brings me to the
1163
- next problem...)
1164
- - Lack of documentation. This part is REALLY annoying ...
1209
+ next problem ...)
1210
+ - Lack of documentation overall. This part is REALLY annoying, because there
1211
+ are only few users, so asking others about documentation when there is nobody
1212
+ else using it, plan sucks ...
1165
1213
 
1166
- Some more disadvantages relate to Fiddle::Pointer. You kind of need to
1214
+ Some more disadvantages relate to <b>Fiddle::Pointer</b>. You kind of need to
1167
1215
  know C fairly well as well as the GC in ruby, in order to understand
1168
1216
  what is going on. Since I don't, I hit a dead end, kind of.
1169
1217
 
@@ -1171,6 +1219,10 @@ This is so far in September 2021. Let's see what the future brings.
1171
1219
  Perhaps other toolkits will learn from libui and implement the good
1172
1220
  parts for **their own** widget set.
1173
1221
 
1222
+ Update in December 2023: things improved a bit, so the above is not
1223
+ 100% correct anymore. In particular libui-ng may receive some more
1224
+ usability-centric updates in the next months.
1225
+
1174
1226
  ## LibuiParadise.parse_this_config_file()
1175
1227
 
1176
1228
  This method can be used to parse a .config file. This file should
@@ -1220,17 +1272,21 @@ You can also use something like '95%' as input. In that case the
1220
1272
  desired value will be calculated depending on the max-resolution
1221
1273
  of the current display. This presently only works on **linux**; if
1222
1274
  someone knows how to make this work on windows and Mac OSX let
1223
- me know. (On these systems it will instead default to a hardcoded
1224
- value of 1024 for width and 800 for height).
1275
+ me know. (On these two systems the method will instead default
1276
+ to a hardcoded value of 1024 for width and 800 for height; these
1277
+ values, I think, are probably fairly safe, to also support older
1278
+ laptops. Evidently for smartphone devices this won't work, so
1279
+ if anyone has an idea how to handle this differently let me
1280
+ know).
1225
1281
 
1226
1282
  The following example shows how to use a percentage value:
1227
1283
 
1228
- set_height('80%')
1284
+ set_height('80%') # 80% of the max-height.
1229
1285
 
1230
1286
  ## Coloured Text
1231
1287
 
1232
1288
  At this point I only show how this may look on Win7, re-using
1233
- the picture the **kotlin-libui developers** made available:
1289
+ the picture the <b>kotlin-libui developers</b> made available:
1234
1290
 
1235
1291
  <img src="https://raw.githubusercontent.com/msink/kotlin-libui/master/samples/drawtext/drawtext-windows7.png" style="margin-left: 2em">
1236
1292
 
@@ -1537,8 +1593,8 @@ Available "**new**"-widgets in LibUI:
1537
1593
  LibUI.new_weight_attribute
1538
1594
  LibUI.new_form # this is a form
1539
1595
  LibUI.new_size_attribute
1540
- LibUI.new_window
1541
- LibUI.new_slider # this is a slider
1596
+ LibUI.new_window # this will create a new window, such as a gtk-window on linux
1597
+ LibUI.new_slider # this is a slider, allowing the user to set a value via a small GUI-handle
1542
1598
 
1543
1599
  ## A search entry in LibUI
1544
1600
 
@@ -1567,9 +1623,18 @@ Example for this:
1567
1623
 
1568
1624
  ## How to to build a menu-interface (menu tag):
1569
1625
 
1626
+ Building a menu in libui is possible by using the method
1627
+ <b>LibUI.new_menu()</b>.
1628
+
1629
+ A more complete example follows:
1630
+
1570
1631
  help_menu = LibUI.new_menu('Help')
1571
1632
  version_item = LibUI.menu_append_item(help_menu, 'Version')
1572
1633
 
1634
+ On IceWM this may look like this:
1635
+
1636
+ <img src="https://i.imgur.com/1rWYcZM.png" style="margin: 1em">
1637
+
1573
1638
  ## Creating a new drawing area in LibUI
1574
1639
 
1575
1640
  The following code should suffice:
@@ -1611,6 +1676,19 @@ This may look like so on Linux:
1611
1676
 
1612
1677
  <img src="https://i.imgur.com/GVKPMS7.png" style="margin-left: 3em">
1613
1678
 
1679
+ In raw-libui you instantiate a new slider in this way:
1680
+
1681
+ slider = LibUI.new_slider(0, 10)
1682
+
1683
+ The two values here, 0 and 10, specify start and end position.
1684
+
1685
+ Note that you can also use the block-form rather than use
1686
+ a proc-callback. Example for this:
1687
+
1688
+ LibUI.slider_on_changed(slider1) {|widget|
1689
+ puts 'The value of the slider was changed.'
1690
+ }
1691
+
1614
1692
  ## Create a new tabbed notebook:
1615
1693
 
1616
1694
  ui_tabs
@@ -1805,6 +1883,7 @@ may be helpful.
1805
1883
  The API for creating a new grid in libui is quite complex and
1806
1884
  hard to remember:
1807
1885
 
1886
+ # gtk-widget, left, top, xspan, yspan, hexpand, halign, vexpand, valign
1808
1887
  LibUI.grid_append(grid, entry1, 0, 0, 2, 1, 0, 0, 1, 0)
1809
1888
  LibUI.grid_append(grid, text('Yo2'), 1, 0, 1, 1, 0, 0, 1, 0) # text() can be used if you use the libui_paradise gem
1810
1889
 
@@ -1835,10 +1914,12 @@ The documentation for Go has this signature:
1835
1914
 
1836
1915
  Append adds the given control to the Grid, at the given coordinate.
1837
1916
 
1838
- I assume that **uiControl c** refers to the widget that is to be embedded
1839
- into the grid, so the numbers that follow afterwards are the ones
1840
- that are important. Let's have a look at them, based on the above API
1841
- call, and only list these again, without the **()**:
1917
+ The element called <b>uiControl c</b> refers to the widget that is to be embedded
1918
+ into the grid-widget, so the numbers that follow afterwards are the ones
1919
+ that are important.
1920
+
1921
+ Let's have a look at these numbers, based on the above API call, and only
1922
+ list these again, without the <b>()</b> this time, to simplify reading:
1842
1923
 
1843
1924
  # left, top, xspan, yspan, hexpand, halign, vexpand, valign
1844
1925
  # 0, 0, 2, 1, 0, 0, 1, 0
@@ -1907,12 +1988,13 @@ Usage example for the new API:
1907
1988
  { left: 2, top: 3, xspan: 3, yspan: 3, hexpand: 0, halign: 0, vexpand: 0, valign: 0 }
1908
1989
  )
1909
1990
 
1910
- In the closing days of <b>August 2022</b> I went on
1911
- to improve the above. Three new methods were "added"
1912
- to grid (actually Fiddle::Pointer, but hopefully one
1913
- day I can find out how to work on a grid directly
1914
- in libui; right now I seem to only have to work with
1915
- raw pointers, which confuses me).
1991
+ This again requires more argument, but on the plus side it allows you complete
1992
+ control over each positional argument.
1993
+
1994
+ In the closing days of <b>August 2022</b> I went on to improve the above. Three
1995
+ new methods were "added" to grid (actually Fiddle::Pointer, but hopefully one
1996
+ day I can find out how to work on a grid directly in libui; right now I seem
1997
+ to only have to work with raw pointers, which confuses me).
1916
1998
 
1917
1999
  These three methods are:
1918
2000
 
@@ -2045,6 +2127,14 @@ following simplified method call instead:
2045
2127
  "https://github.com/kojix2/libui\n Version #{VERSION}"
2046
2128
  )
2047
2129
 
2130
+ ## LibUI.attributed_string_len()
2131
+
2132
+ The method LibUI.attributed_string_len() will return an Integer value.
2133
+
2134
+ A usage example follows:
2135
+
2136
+ start_position = LibUI.attributed_string_len(self)
2137
+
2048
2138
  ## How to create an .exe file on Windows via libui
2049
2139
 
2050
2140
  First check: https://github.com/larsch/ocra/
data/doc/todo/todo.md CHANGED
@@ -1,3 +1,12 @@
1
+ ------------------------------------------------------------------------------------
2
+ - Make sure that each component has a screenshot. It's ok to
3
+ re-use existing screenshots from other projects.
4
+ Perhaps also look at the examples again to show how this
5
+ can be used.
6
+
7
+ What is missing still?
8
+
9
+
1
10
  ------------------------------------------------------------------------------------
2
11
  - Rewrite the project from the get-go. Also integrate
3
12
  @main_window into the main hash, rather than have it
@@ -6,11 +15,6 @@
6
15
  now we'll keep it as-is.
7
16
  As we rewrite it, improve the documentation.
8
17
  ------------------------------------------------------------------------------------
9
- - Make sure that each component has a screenshot. It's ok to
10
- re-use existing screenshots from other projects.
11
- Perhaps also look at the examples again to show how this
12
- can be used.
13
- ------------------------------------------------------------------------------------
14
18
  - Make sure the project is API compatible to glimmer-libui.
15
19
  ------------------------------------------------------------------------------------
16
20
  - Re-organize the examples, perhaps starting with another
@@ -6,4 +6,5 @@
6
6
  # =========================================================================== #
7
7
  require 'libui_paradise/requires/require_the_libui_paradise_project.rb'
8
8
 
9
- include LibuiParadise::Extensions
9
+ include LibuiParadise::BaseModule
10
+ ::LibUI.init