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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cacc003686df08d02f1de8ff360f704eae2c1b4a678bb5040ffc6e193d3e0b3
4
- data.tar.gz: fd46f7096a785932ba3806ab82e31df87f902a7fa969c703542e74100710a34a
3
+ metadata.gz: fbe4ce296951afeee71f86f5247ff8b3f9b1d0606c37837748a62a6430baafec
4
+ data.tar.gz: 2edec366d003bd364608162a327473585794d7eb8836d9b35ba7547139d7877e
5
5
  SHA512:
6
- metadata.gz: b0940f2cc4cd87f2bb28d568ad2ee41b8f5fb552463daeeb8717487e7934beca29670296cc1fc768240da0ae89ef2e28ee16ba580c926815466cfc4c37f44336
7
- data.tar.gz: 108d2613bfacb5945285f31ce6827150863bc98cd887dfe4b3b2d4174e3795fe5d4dacb416dcb1eede79498d4f34d75c7fc5cbab570fb8b12cea049551ce576f
6
+ metadata.gz: ba3eeb6f909676b603d5ced9bda9561efe965a7935b8073e41a466288c13073f2bd5498831c67c90b4d5eb733325c62a7e573e018857013a8ac089de9f7a46a6
7
+ data.tar.gz: d44ea32762e050927fa36c6d6302f6ee224066ac117f6b429d89826d5e11b42df4de73aca810b9ad556b4e68aae52efc6730230ca57d0ca9b4ef03ecd1c13c2a
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  [![forthebadge](https://forthebadge.com/images/badges/made-with-ruby.svg)](https://www.ruby-lang.org/en/)
3
3
  [![Gem Version](https://badge.fury.io/rb/libui_paradise.svg)](https://badge.fury.io/rb/libui_paradise)
4
4
 
5
- This gem was <b>last updated</b> on the <span style="color: darkblue; font-weight: bold">12.12.2023</span> (dd.mm.yyyy notation), at <span style="color: steelblue; font-weight: bold">14:47:37</span> o'clock.
5
+ This gem was <b>last updated</b> on the <span style="color: darkblue; font-weight: bold">28.12.2023</span> (dd.mm.yyyy notation), at <span style="color: steelblue; font-weight: bold">22:23:45</span> o'clock.
6
6
 
7
7
  ## The libui_paradise project
8
8
 
@@ -13,12 +13,12 @@ by me via **gimp** and ImageMagick - the rounded borders were
13
13
  done via ImageMagick. You can re-use this image if you would like to,
14
14
  including the colour-pattern, via a **CC BY 3.0** licence. See the following
15
15
  link for that licence: https://creativecommons.org/licenses/by/3.0/. For
16
- **cfdg** itself, have a look at: https://www.contextfreeart.org/gallery/)
16
+ <b>cfdg</b> itself, have a look at: https://www.contextfreeart.org/gallery/)
17
17
 
18
- The **libui_paradise project** aims to enhance the official (upstream)
18
+ The <b>libui_paradise project</b> aims to enhance the official (upstream)
19
19
  ruby-libui bindings a little bit.
20
20
 
21
- You can find the upstream ruby-libui bindings, maintained by **kojix2**,
21
+ You can find the upstream ruby-libui bindings, maintained by <b>kojix2</b>,
22
22
  here:
23
23
 
24
24
  https://rubygems.org/gems/libui
@@ -154,7 +154,7 @@ around one day, that idea should be retained for other GUIs
154
154
  in the future.
155
155
 
156
156
  It's quite difficult to get GTK and ruby-gtk to work on
157
- **windows** - I tried to compile it some weeks ago but I
157
+ <b>windows</b> - I tried to compile it some weeks ago but I
158
158
  ended up having "missing symbols" error messages afterwards.
159
159
  I managed to get the hello-world.c example working, but the
160
160
  more complicated examples did not work for me.
@@ -172,7 +172,7 @@ no binary bundles for ruby-gtk on windows anymore either. I
172
172
  assume it is possible if you know msys2, and the windows
173
173
  platform, but I am no expert on either, so ...)
174
174
 
175
- **libui** is so much simpler to use on windows than GTK,
175
+ <b>libui</b> is so much simpler to use on windows than GTK,
176
176
  though - just do **gem install libui** and it'll work,
177
177
  as-is. Literally. That's it. I tried it on my windows
178
178
  laptop and it **does** indeed work. That convinced me
@@ -286,7 +286,8 @@ sense in this regard.
286
286
 
287
287
  ## How to add a margin in LibUI
288
288
 
289
- Use something like:
289
+ Use the following API if you wish to have your main window
290
+ use a margin:
290
291
 
291
292
  LibUI.window_set_margined(MAIN_WINDOW, 1)
292
293
 
@@ -432,14 +433,19 @@ Or just:
432
433
 
433
434
  Since as of 2022 I prefer the longer variant, e. g. **LibUI**init. The
434
435
  old UI constant ("alias") will be retained, but new code added to the
435
- libui_paradise gem will not use **UI** - instead the slightly longer
436
- **LibUI** is used.
437
-
436
+ libui_paradise gem will not use <b>UI</b> - instead the slightly longer
437
+ <b>LibUI</b> is used.
438
+
439
+ Note that since as of <b>December 2023</b>, whenever the libui_paradise
440
+ gem is required, <b>LibuiParadise.init</b> is automatically called,
441
+ which in turn invokes LibUI.init. The reason as to why this is
442
+ the new default is so that we can omit one line of code.
443
+
438
444
  ## Subclassing
439
445
 
440
446
  Currently subclassing from LibUI elements does not work - I simply
441
- have no idea how to "subclass" from a **Fiddle::Pointer**. Perhaps we
442
- have to build up a data structure that behaves like **Fiddle::Pointer**
447
+ have no idea how to "subclass" from a <b>Fiddle::Pointer</b>. Perhaps we
448
+ have to build up a data structure that behaves like <b>Fiddle::Pointer</b>
443
449
  but also has methods that allow for a more direct 'OOP behaviour'. Has
444
450
  anyone tried this yet? I am scared to try considering I already got
445
451
  segfaults everywhere ...
@@ -456,8 +462,8 @@ The following API can be used to create a new scrolling area:
456
462
 
457
463
  LibUI.new_scrolling_area
458
464
 
459
- Scrolling areas have horziontal and vertical scrollbars. The
460
- amount that can be scrolled is determined by the area's
465
+ <b>Scrolling areas</b> may contain horizontal and vertical scrollbars.
466
+ The amount that can be scrolled is determined by the area's
461
467
  size, which is decided by the programmer (both when creating
462
468
  the Area and by a call to SetSize). Only a portion of the
463
469
  Area is visible at any time; drawing and mouse events are
@@ -465,9 +471,9 @@ automatically adjusted to match what portion is visible,
465
471
  so you do not have to worry about scrolling in your
466
472
  event handlers.
467
473
 
468
- The method LibUI.new_scrolling_area() accepts three arguments.
474
+ The method <b>LibUI.new_scrolling_area()</b> accepts <b>three arguments</b>.
469
475
  The second and third are width and height, respectively
470
- (as **integers**).
476
+ (as <b>integers</b>).
471
477
 
472
478
  The first argument is the area handle. It has the following
473
479
  pointer types (struct):
@@ -497,6 +503,12 @@ The <b>handlerDraw() function</b> in C looks like this:
497
503
  uiFreeFontButtonFont(&defaultFont);
498
504
  }
499
505
 
506
+ This means that you will have to pass three arguments to
507
+ this method - all are mandatory. Failure to do so may yield an
508
+ error message, such as:
509
+
510
+ gems/libui-0.1.2.pre/lib/libui/ffi.rb:20:in `call': wrong number of arguments (given 0, expected 3) (ArgumentError)
511
+
500
512
  The scrollable area may look like this:
501
513
 
502
514
  <img src="https://raw.githubusercontent.com/msink/kotlin-libui/master/samples/hello/hello-windows.png">
@@ -521,6 +533,7 @@ label / ui_text widget.
521
533
  To create a combo-box in vanilla libui, do this in plain ruby-libui:
522
534
 
523
535
  alignment = LibUI.new_combobox # Here we actually create the combobox.
536
+ # Next, we show how to append to a combobox:
524
537
  LibUI.combobox_append(alignment, 'Left')
525
538
  LibUI.combobox_append(alignment, 'Center')
526
539
  LibUI.combobox_append(alignment, 'Right')
@@ -552,11 +565,11 @@ For instance:
552
565
 
553
566
  LibUI.combobox_set_selected(combobox, 0) # The first one will be active too.
554
567
 
555
- To **query the currently selected value**, use:
568
+ To <b>query the currently selected value</b>, use:
556
569
 
557
570
  LibUI.combobox_selected(pointer)
558
571
 
559
- This is usually done via a **proc {}** object. See kojix2' examples.
572
+ This is usually done via a <b>proc {}</b> object. See kojix2' examples.
560
573
 
561
574
  In LibuiParadise a few custom methods were added, such as
562
575
  **.ui_sync_connect()**. This method was added to connect a
@@ -582,11 +595,28 @@ To add content to an editable combobox youc an use:
582
595
 
583
596
  LibUI.append() # .append() adds the named item to the end of the EditableCombobox.
584
597
 
585
- The **source code** to the combo-box in libui, at the least
598
+ A more concise example for populating a combobox may be
599
+ this one here:
600
+
601
+ combo_box = LibUI.combobox {
602
+ ['combobox Item 1', 'combobox Item 2', 'combobox Item 3']
603
+ }
604
+
605
+ The <b>source code</b> to the combo-box in libui, at the least
586
606
  for UNIX/Linux, can be seen here:
587
607
 
588
608
  https://github.com/andlabs/libui/blob/master/unix/combobox.c
589
609
 
610
+ ## How to add a libui-widget to the main window - how to designate a child widget:
611
+
612
+ LibUI.window_set_child(main_window, button) # Both these widgets have to be created first, of course.
613
+
614
+ ## LibUI.control_show
615
+
616
+ No clue what this does so far.
617
+
618
+ LibUI.control_show(main_window)
619
+
590
620
  ## Error messages and ui_error_message
591
621
 
592
622
  In LibUI respectively ruby-libui you can display error messages
@@ -612,7 +642,7 @@ just a stub though - we may have to research this with better examples.
612
642
 
613
643
  ## Checkboxes in Libui-ng
614
644
 
615
- A simple checkbox example in **plain** ruby-libui follows:
645
+ A simple checkbox example in <b>plain</b> ruby-libui follows:
616
646
 
617
647
  checkbox = LibUI.checkbox('Checkbox')
618
648
  checkbox_toggle_callback = proc { |pointer|
@@ -629,8 +659,8 @@ This may look like so on Linux:
629
659
 
630
660
  <img src="https://i.imgur.com/d7qWalZ.png" style="margin-left: 2em; padding: 4px; border: 1px solid black;">
631
661
 
632
- To set such a checkbox to the checked-state (that is, as if the
633
- user clicked on it), use the following method, if you use the
662
+ To set such a checkbox to the <b>checked-state</b> (that is, as if
663
+ the user clicked on it), use the following method, if you use the
634
664
  libui_paradise gem:
635
665
 
636
666
  checkbox.set_checked(1)
@@ -639,8 +669,8 @@ To query its state use:
639
669
 
640
670
  checked = LibUI.checkbox_checked(pointer) == 1
641
671
 
642
- To <b>query</b> whether a checkbox is **active**, use code such as the
643
- following:
672
+ To <b>query</b> whether a checkbox is <b>active</b>, use code such as
673
+ the following:
644
674
 
645
675
  checkbox.is_active?
646
676
  checkbox.active?
@@ -649,7 +679,7 @@ This depends on the modifications to Fiddler::Pointer, so
649
679
  be wary when you use this - there be dragons (perhaps). Most
650
680
  of these modifications are based on **.object_id**, which is
651
681
  registered in a main, toplevel Hash in the
652
- **libui_paradise project**. Not very elegant, but simple, and
682
+ <b>libui_paradise project</b>. Not very elegant, but simple, and
653
683
  it works (for the most part).
654
684
 
655
685
  The toggle-event for a checkbox can be triggered via:
@@ -661,23 +691,23 @@ The toggle-event for a checkbox can be triggered via:
661
691
  0
662
692
  }
663
693
 
664
- To respond to on-toggled events, do:
694
+ To respond to <b>on-toggled events</b>, do use:
665
695
 
666
696
  LibUI.checkbox_on_toggled(checkbox, checkbox_toggle_callback, nil)
667
697
 
668
698
  ## Adding a widget into another widget
669
699
 
670
- I chose the following **API** for this:
700
+ I chose the following <b>API</b> for this:
671
701
 
672
702
  box1.add(box2, 1)
673
703
 
674
- Note that this is "cheating" a bit because the method **.add()** is defined
675
- on **Fiddle::Pointer**. That's scary! Segfaults coming your way. But it
676
- also seems to work to some extent. Which is amazing ... :-)
704
+ Note that this is "cheating" a bit because the method <b>.add()</b> is
705
+ defined on <b>Fiddle::Pointer</b>. That's scary! Segfaults coming your
706
+ way. But it also seems to work to some extent. Which is amazing ... :-)
677
707
 
678
708
  In ruby-gtk it is quite common to use **.add()**. While **.pack_start()**
679
709
  and **.pack_end()** are available in ruby-gtk as well, I think .add() is
680
- the simpler name. We just **add a widget to another widget** - job done.
710
+ the simpler name. We just <b>add a widget to another widget</b> - job done.
681
711
 
682
712
  (I may also use << as alias to .add() and while << is great, remember
683
713
  that it can not easily be used all the time, e. g. box1 << box2 <<
@@ -745,8 +775,8 @@ If you use the libui_paradise gem, you can use this:
745
775
 
746
776
  ## Adding a horizontal separator or a vertical separator
747
777
 
748
- The method **UI.new_horizontal_separator** can be used to add (or rather
749
- first create) a horizontal separator.
778
+ The method <b>LibUI.new_horizontal_separator</b> can be used to add (or
779
+ rather first create) <b>a horizontal separator</b>.
750
780
 
751
781
  You can then add it via .add() or << if you use the libui_paradise
752
782
  project. Alternatively you can use the toplevel method provided by
@@ -795,6 +825,10 @@ not necessarily recommending this be done, but **if** you ever have
795
825
  such a use case then you can use it - which is another reason why
796
826
  I added this screenshot, so that I don't forget. :)
797
827
 
828
+ The toplevel method <b>LibuiParadise.horizontal_separator()</b>
829
+ has also been added; it is simply a wrapper towards
830
+ <b>LibUI.new_horizontal_separator()</b>.
831
+
798
832
  ## Padding elements in LibUI
799
833
 
800
834
  The general API for setting padding to a container in LibUI
@@ -878,24 +912,38 @@ hand. Only the raw filename will be used, so if you
878
912
  have a file at **/tmp/foo/bar.rb** then the title
879
913
  of the window will be **bar.rb**.
880
914
 
881
- ## Entry in libui
915
+ ## Entries in libui (libui-entry)
882
916
 
883
- An entry in libui may look like this:
917
+ Let's first show how an <b>entry</b> in libui may look like:
884
918
 
885
919
  <img src="https://raw.githubusercontent.com/parro-it/libui-node/master/docs/media/UiEntry.png" style="margin-left:1em">
886
920
 
887
- Such an entry can be set to be **read only** (readOnly: Boolean, aka true or false).
921
+ Such an entry can be set to be <b>read only</b> (readOnly: Boolean, aka true or false).
922
+ This means that it can not be changed by the user; it is then only used to
923
+ display some content.
888
924
 
889
- The upstream C code for libui-entry, for **unix/**, can be seen here:
925
+ The upstream C code for libui-entry, for <b>unix/</b>, can be seen here:
890
926
 
891
927
  https://github.com/andlabs/libui/blob/master/unix/entry.c
892
928
 
929
+ To create a new libui-entry, in raw libui-code, use this method:
930
+
931
+ LibUI.new_entry
932
+ entry = LibUI.new_entry # or better, this variant
933
+
893
934
  In ruby, for the LibUI namespace, you can set text on an entry
894
935
  by calling <b>LibUI.entry_set_text()</b>, such as shown in
895
936
  the following example:
896
937
 
897
938
  LibUI.entry_set_text(entry, 'Please enter your feelings')
898
939
 
940
+ If you use the libui_paradise gem, a modification in Fiddle
941
+ is to allow the method calls called .is_read_only and its
942
+ alias name, .readonly. This can be called on the entry,
943
+ such as:
944
+
945
+ entry.readonly
946
+
899
947
  ## Borderless windows and fullscreen windows
900
948
 
901
949
  A window that is **borderless: true** will not show any title or
@@ -905,6 +953,14 @@ To set the main window to full screen (occupy the whole monitor) do:
905
953
 
906
954
  LibUI.window_set_fullscreen(main_window, 1)
907
955
 
956
+ ## How to add a new main window:
957
+ # width, height, hasMenubar
958
+ main_window = LibUI.new_window('hello world', 300, 200, 1)
959
+
960
+ The source code for this method can be seen here:
961
+
962
+ https://raw.githubusercontent.com/libui-ng/libui-ng/master/unix/window.c
963
+
908
964
  ## Spinbutton / Spinbox
909
965
 
910
966
  You can use the following API for a spinbox:
@@ -959,29 +1015,30 @@ In libui the general API for this is:
959
1015
 
960
1016
  ## Control Gallery
961
1017
 
962
- Here is an image, from kotlin-libui, how this may look on windows:
1018
+ Here is an image, from <b>kotlin-libui</b>, how this may look on windows:
963
1019
 
964
1020
  <img src="https://raw.githubusercontent.com/msink/kotlin-libui/master/samples/controlgallery/controlgallery-windows7.png" style="margin-left: 2em">
965
1021
 
966
1022
  ## LibUI.new_button() - how to work with buttons in LibUI in general
967
1023
 
968
- <b>LibUI.new_button</b> allows us to create a new button via
969
- LibUI.
1024
+ <b>LibUI.new_button</b> allows us to create a new button, via
1025
+ the LibUI gem maintained by kojix2.
970
1026
 
971
- Examples for this:
1027
+ Examples for this, syntax-wise, follow:
972
1028
 
973
1029
  button1 = LibUI.new_button('Text')
974
1030
  button2 = LibUI.new_button('▶')
975
1031
  button3 = LibUI.new_button('■') # You can use Unicode / Emojis here just fine.
1032
+ button3 = LibUI.new_button('♥') # This also gives you a way to do simple GUI elements, thanks to Unicode / Emoji.
976
1033
 
977
- Now, we need to "tell" this button what to do when it is clicked.
978
- This is done via Libui.button_on_clicked().
1034
+ Now, we need to "<i>tell</i>" this button what to do when it is clicked
1035
+ by the user. This is done via the method <b>LibUI.button_on_clicked()</b>.
979
1036
 
980
- Example:
1037
+ Usage example:
981
1038
 
982
- LibUI.button_on_clicked(button) do
983
- LibUI.msg_box(MAIN_WINDOW, 'Information', 'You clicked the button')
984
- end
1039
+ LibUI.button_on_clicked(button) {
1040
+ LibUI.msg_box(MAIN_WINDOW, 'Information', 'You clicked the button') # Show a message-box upon clicking this button.
1041
+ }
985
1042
 
986
1043
  ## Enabling / Disabling buttons in libui
987
1044
 
@@ -1127,86 +1184,6 @@ to be simpler for the time being. I may plan to change a lot more one day,
1127
1184
  if I ever manage to find out how to simulate proper subclasses via
1128
1185
  Fiddle::Pointer ... :)
1129
1186
 
1130
- --------------------------------------------------------------------------------
1131
- ## SNIPPETS.md
1132
-
1133
- Next, the content of the file called **SNIPPETS.md** will be shown. Note
1134
- that this file will eventually be integreated into this file, and then
1135
- subsequently removed one day.
1136
-
1137
-
1138
- <pre>
1139
- # How to add a new main window:
1140
- # width, height, hasMenubar
1141
- main_window = UI.new_window('hello world', 300, 200, 1)
1142
-
1143
- Source code:
1144
-
1145
- https://raw.githubusercontent.com/andlabs/libui/master/unix/window.c
1146
-
1147
- # How to add a libui-widget to the main window / Designate a child widget:
1148
-
1149
- UI.window_set_child(main_window, button)
1150
-
1151
- # Act on closing-event (on quit tag):
1152
-
1153
- UI.window_on_closing(main_window) {
1154
- puts 'Bye Bye'
1155
- UI.control_destroy(main_window)
1156
- UI.quit
1157
- 0
1158
- }
1159
- # Or simpler:
1160
- close_properly(main_window)
1161
-
1162
- # Add the window to the main UI:
1163
-
1164
- UI.control_show(main_window)
1165
- main_window.show_the_controls # Or use this one here.
1166
-
1167
- # And the control:
1168
-
1169
- UI.control_show(main_window)
1170
-
1171
- # Using a text-entry (ui entry tag):
1172
-
1173
- text_entry = UI.new_entry
1174
- UI.entry_set_text(text_entry, 'Please enter your feelings')
1175
- UI.entry_on_changed(text_entry, text_changed_callback, nil)
1176
-
1177
- # To set this on a "multiline entry", aka spanning several
1178
- # rows, do use:
1179
- UI.multiline_entry_set_text(entry1, 'Yo there')
1180
- ui_text_view # an alias used in libui_paradise
1181
-
1182
- text1 = UI.entry_text(entry1) # Obtain text. You may have to call .to_s on it, to guarantee the String.
1183
- UI.multiline_entry_text # Obtain the text from a multiline entry.
1184
-
1185
- # Create a combobox (combo tag, combobox tag):
1186
-
1187
- combobox_selected_callback = proc { |ptr|
1188
- puts "New combobox selection: #{UI.combobox_selected(ptr)}"
1189
- }
1190
- cbox = UI.new_combobox
1191
- UI.combobox_append(cbox, 'combobox Item 1')
1192
- UI.combobox_append(cbox, 'combobox Item 2')
1193
- UI.combobox_append(cbox, 'combobox Item 3')
1194
- UI.box_append(inner, cbox, 0)
1195
- UI.combobox_on_selected(cbox, combobox_selected_callback, nil)
1196
-
1197
- # Or more concise:
1198
- combo_box = LibUI.combobox {
1199
- ['combobox Item 1', 'combobox Item 2', 'combobox Item 3']
1200
- }
1201
-
1202
-
1203
-
1204
-
1205
- </pre>
1206
-
1207
-
1208
- --------------------------------------------------------------------------------
1209
-
1210
1187
  ## Advantages and Disadvantages of the libui project
1211
1188
 
1212
1189
  It would be unfair to only selectively name advantages but not talk about
@@ -1214,29 +1191,31 @@ disadvantages, so this subsection will show some limitations, trade-offs,
1214
1191
  constraints and opportunities. This is not complete, but it may become
1215
1192
  somewhat more complete over time. Stay tuned.
1216
1193
 
1217
- (a) Advantages:
1194
+ (a) Advantages of LibUI:
1218
1195
 
1219
- - Works on windows out-of-the-box after you installed the libui-gem.
1196
+ - Works on the windows platform, out-of-the-box, after the libui-gem has been installed.
1220
1197
  - Is super-simple to use compared to other toolkits, including ruby-gtk.
1221
- - Super-simple to build up a prototype for a GUI, buttons that work,
1222
- spin-boxes, text-views and so forth. Faster than any other toolkit
1223
- IMO.
1198
+ - Super-simple to build up a prototype for a GUI, buttons that work, spin-boxes, text-views
1199
+ and so forth. Faster than any other toolkit, IMO.
1224
1200
  - Works cross-platform.
1225
1201
 
1226
- (b) Disadvantage:
1202
+ (b) Disadvantage of LibUI:
1227
1203
 
1228
1204
  - Limited ability to control the layout and size of widgets.
1229
- - May look like utter crap ... :-)
1230
- - Some functionality is missing, such as a scrolled-window for every widget.
1205
+ - May look like utter crap on some platforms ... :-)
1206
+ - Some functionality is flat-out missing, such as a scrolled-window for every widget
1207
+ or tooltips for every widget.
1231
1208
  - No way to use different fonts in the same application and choosing a font
1232
1209
  is needlessly complicated. (This may not be completely correct, though -
1233
- the glimmer-dsl-libui has example that seem to work. But if you ask me
1210
+ the glimmer-dsl-libui has examples that seem to work. But if you ask me
1234
1211
  right now in 2021 how this works via a standalone example then I can
1235
1212
  happily tell you I have absolutely no idea. Which brings me to the
1236
- next problem...)
1237
- - Lack of documentation. This part is REALLY annoying ...
1213
+ next problem ...)
1214
+ - Lack of documentation overall. This part is REALLY annoying, because there
1215
+ are only few users, so asking others about documentation when there is nobody
1216
+ else using it, plan sucks ...
1238
1217
 
1239
- Some more disadvantages relate to Fiddle::Pointer. You kind of need to
1218
+ Some more disadvantages relate to <b>Fiddle::Pointer</b>. You kind of need to
1240
1219
  know C fairly well as well as the GC in ruby, in order to understand
1241
1220
  what is going on. Since I don't, I hit a dead end, kind of.
1242
1221
 
@@ -1244,6 +1223,10 @@ This is so far in September 2021. Let's see what the future brings.
1244
1223
  Perhaps other toolkits will learn from libui and implement the good
1245
1224
  parts for **their own** widget set.
1246
1225
 
1226
+ Update in December 2023: things improved a bit, so the above is not
1227
+ 100% correct anymore. In particular libui-ng may receive some more
1228
+ usability-centric updates in the next months.
1229
+
1247
1230
  ## LibuiParadise.parse_this_config_file()
1248
1231
 
1249
1232
  This method can be used to parse a .config file. This file should
@@ -1293,17 +1276,21 @@ You can also use something like '95%' as input. In that case the
1293
1276
  desired value will be calculated depending on the max-resolution
1294
1277
  of the current display. This presently only works on **linux**; if
1295
1278
  someone knows how to make this work on windows and Mac OSX let
1296
- me know. (On these systems it will instead default to a hardcoded
1297
- value of 1024 for width and 800 for height).
1279
+ me know. (On these two systems the method will instead default
1280
+ to a hardcoded value of 1024 for width and 800 for height; these
1281
+ values, I think, are probably fairly safe, to also support older
1282
+ laptops. Evidently for smartphone devices this won't work, so
1283
+ if anyone has an idea how to handle this differently let me
1284
+ know).
1298
1285
 
1299
1286
  The following example shows how to use a percentage value:
1300
1287
 
1301
- set_height('80%')
1288
+ set_height('80%') # 80% of the max-height.
1302
1289
 
1303
1290
  ## Coloured Text
1304
1291
 
1305
1292
  At this point I only show how this may look on Win7, re-using
1306
- the picture the **kotlin-libui developers** made available:
1293
+ the picture the <b>kotlin-libui developers</b> made available:
1307
1294
 
1308
1295
  <img src="https://raw.githubusercontent.com/msink/kotlin-libui/master/samples/drawtext/drawtext-windows7.png" style="margin-left: 2em">
1309
1296
 
@@ -1610,8 +1597,8 @@ Available "**new**"-widgets in LibUI:
1610
1597
  LibUI.new_weight_attribute
1611
1598
  LibUI.new_form # this is a form
1612
1599
  LibUI.new_size_attribute
1613
- LibUI.new_window
1614
- LibUI.new_slider # this is a slider
1600
+ LibUI.new_window # this will create a new window, such as a gtk-window on linux
1601
+ LibUI.new_slider # this is a slider, allowing the user to set a value via a small GUI-handle
1615
1602
 
1616
1603
  ## A search entry in LibUI
1617
1604
 
@@ -1640,9 +1627,18 @@ Example for this:
1640
1627
 
1641
1628
  ## How to to build a menu-interface (menu tag):
1642
1629
 
1630
+ Building a menu in libui is possible by using the method
1631
+ <b>LibUI.new_menu()</b>.
1632
+
1633
+ A more complete example follows:
1634
+
1643
1635
  help_menu = LibUI.new_menu('Help')
1644
1636
  version_item = LibUI.menu_append_item(help_menu, 'Version')
1645
1637
 
1638
+ On IceWM this may look like this:
1639
+
1640
+ <img src="https://i.imgur.com/1rWYcZM.png" style="margin: 1em">
1641
+
1646
1642
  ## Creating a new drawing area in LibUI
1647
1643
 
1648
1644
  The following code should suffice:
@@ -1684,6 +1680,19 @@ This may look like so on Linux:
1684
1680
 
1685
1681
  <img src="https://i.imgur.com/GVKPMS7.png" style="margin-left: 3em">
1686
1682
 
1683
+ In raw-libui you instantiate a new slider in this way:
1684
+
1685
+ slider = LibUI.new_slider(0, 10)
1686
+
1687
+ The two values here, 0 and 10, specify start and end position.
1688
+
1689
+ Note that you can also use the block-form rather than use
1690
+ a proc-callback. Example for this:
1691
+
1692
+ LibUI.slider_on_changed(slider1) {|widget|
1693
+ puts 'The value of the slider was changed.'
1694
+ }
1695
+
1687
1696
  ## Create a new tabbed notebook:
1688
1697
 
1689
1698
  ui_tabs
@@ -1878,6 +1887,7 @@ may be helpful.
1878
1887
  The API for creating a new grid in libui is quite complex and
1879
1888
  hard to remember:
1880
1889
 
1890
+ # gtk-widget, left, top, xspan, yspan, hexpand, halign, vexpand, valign
1881
1891
  LibUI.grid_append(grid, entry1, 0, 0, 2, 1, 0, 0, 1, 0)
1882
1892
  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
1883
1893
 
@@ -1908,10 +1918,12 @@ The documentation for Go has this signature:
1908
1918
 
1909
1919
  Append adds the given control to the Grid, at the given coordinate.
1910
1920
 
1911
- I assume that **uiControl c** refers to the widget that is to be embedded
1912
- into the grid, so the numbers that follow afterwards are the ones
1913
- that are important. Let's have a look at them, based on the above API
1914
- call, and only list these again, without the **()**:
1921
+ The element called <b>uiControl c</b> refers to the widget that is to be embedded
1922
+ into the grid-widget, so the numbers that follow afterwards are the ones
1923
+ that are important.
1924
+
1925
+ Let's have a look at these numbers, based on the above API call, and only
1926
+ list these again, without the <b>()</b> this time, to simplify reading:
1915
1927
 
1916
1928
  # left, top, xspan, yspan, hexpand, halign, vexpand, valign
1917
1929
  # 0, 0, 2, 1, 0, 0, 1, 0
@@ -1980,12 +1992,13 @@ Usage example for the new API:
1980
1992
  { left: 2, top: 3, xspan: 3, yspan: 3, hexpand: 0, halign: 0, vexpand: 0, valign: 0 }
1981
1993
  )
1982
1994
 
1983
- In the closing days of <b>August 2022</b> I went on
1984
- to improve the above. Three new methods were "added"
1985
- to grid (actually Fiddle::Pointer, but hopefully one
1986
- day I can find out how to work on a grid directly
1987
- in libui; right now I seem to only have to work with
1988
- raw pointers, which confuses me).
1995
+ This again requires more argument, but on the plus side it allows you complete
1996
+ control over each positional argument.
1997
+
1998
+ In the closing days of <b>August 2022</b> I went on to improve the above. Three
1999
+ new methods were "added" to grid (actually Fiddle::Pointer, but hopefully one
2000
+ day I can find out how to work on a grid directly in libui; right now I seem
2001
+ to only have to work with raw pointers, which confuses me).
1989
2002
 
1990
2003
  These three methods are:
1991
2004
 
@@ -2118,6 +2131,14 @@ following simplified method call instead:
2118
2131
  "https://github.com/kojix2/libui\n Version #{VERSION}"
2119
2132
  )
2120
2133
 
2134
+ ## LibUI.attributed_string_len()
2135
+
2136
+ The method LibUI.attributed_string_len() will return an Integer value.
2137
+
2138
+ A usage example follows:
2139
+
2140
+ start_position = LibUI.attributed_string_len(self)
2141
+
2121
2142
  ## How to create an .exe file on Windows via libui
2122
2143
 
2123
2144
  First check: https://github.com/larsch/ocra/
data/bin/libui_message CHANGED
@@ -4,4 +4,4 @@
4
4
  # =========================================================================== #
5
5
  require 'libui_paradise'
6
6
 
7
- LibuiParadise::Extensions.message_box(text: ARGV)
7
+ LibuiParadise.message_box(text: ARGV)