| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- MODULE test_adw_widgets ;
- (*
- m2-GTK4 test - the newly bound libadwaita (GNOME) widgets: view
- stack/switchers, navigation view, adaptive containers, rows, avatar
- and friends. Requires a display.
- *)
- FROM GtkApplication IMPORT gtk_application_new;
- FROM Gio IMPORT g_application_run, g_application_quit;
- FROM GtkWindow IMPORT gtk_window_set_title, gtk_window_set_default_size,
- gtk_window_present;
- FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
- FROM GtkEnums IMPORT GtkVertical;
- FROM GtkLabel IMPORT gtk_label_new;
- FROM GtkUtils IMPORT Connect;
- FROM AdwWindow IMPORT adw_window_new, adw_window_set_content;
- FROM AdwViewStack IMPORT adw_view_stack_new, adw_view_stack_add_titled,
- adw_view_stack_add_titled_with_icon, adw_view_stack_set_visible_child_name,
- adw_view_stack_get_visible_child_name;
- FROM AdwViewSwitcher IMPORT adw_view_switcher_new,
- adw_view_switcher_set_stack, adw_view_switcher_get_policy;
- FROM AdwViewSwitcherBar IMPORT adw_view_switcher_bar_new,
- adw_view_switcher_bar_set_stack, adw_view_switcher_bar_set_reveal;
- FROM AdwViewSwitcherTitle IMPORT adw_view_switcher_title_new,
- adw_view_switcher_title_set_title, adw_view_switcher_title_set_subtitle,
- adw_view_switcher_title_set_stack;
- FROM AdwInlineViewSwitcher IMPORT adw_inline_view_switcher_new,
- adw_inline_view_switcher_set_stack,
- adw_inline_view_switcher_set_display_mode;
- FROM AdwEnums IMPORT AdwInlineViewSwitcherLabels;
- FROM AdwNavigationView IMPORT adw_navigation_view_new,
- adw_navigation_view_push, adw_navigation_view_get_visible_page,
- adw_navigation_view_pop;
- FROM AdwNavigationPage IMPORT adw_navigation_page_new;
- FROM AdwWindowTitle IMPORT adw_window_title_new;
- FROM AdwBin IMPORT adw_bin_new, adw_bin_set_child;
- FROM AdwSpinner IMPORT adw_spinner_new;
- FROM AdwSpinnerPaintable IMPORT adw_spinner_paintable_new;
- FROM AdwAvatar IMPORT adw_avatar_new;
- FROM AdwButtonContent IMPORT adw_button_content_new,
- adw_button_content_set_label, adw_button_content_set_icon_name;
- FROM AdwSplitButton IMPORT adw_split_button_new, adw_split_button_set_label;
- FROM AdwButtonRow IMPORT adw_button_row_new,
- adw_button_row_set_start_icon_name, adw_button_row_set_end_icon_name;
- FROM AdwSpinRow IMPORT adw_spin_row_new_with_range;
- FROM AdwPasswordEntryRow IMPORT adw_password_entry_row_new;
- FROM AdwClampScrollable IMPORT adw_clamp_scrollable_new,
- adw_clamp_scrollable_set_maximum_size;
- FROM AdwClampLayout IMPORT adw_clamp_layout_new;
- FROM AdwSqueezer IMPORT adw_squeezer_new, adw_squeezer_add;
- FROM AdwWrapBox IMPORT adw_wrap_box_new, adw_wrap_box_append;
- FROM AdwWrapLayout IMPORT adw_wrap_layout_new;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.TestAdwWidgets";
- VAR
- app: ADDRESS;
- passed: BOOLEAN;
- failures: INTEGER;
- PROCEDURE Check (cond: BOOLEAN; what: ARRAY OF CHAR);
- BEGIN
- IF cond THEN
- printf(" ok - %s\n", what)
- ELSE
- printf(" NOT OK - %s\n", what);
- INC(failures)
- END
- END Check;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box, stack, p1, p2, switcher, bar, title, inl, nav, np1, np2: ADDRESS;
- clamp, cliplayout, wrap, wraplayout, squeeze, avatar: ADDRESS;
- content, split, brow, spin, pw, bin, spinner, sp, wt: ADDRESS;
- visible: ADDRESS;
- BEGIN
- failures := 0;
- (* AdwViewStack + pages + switchers *)
- stack := adw_view_stack_new();
- p1 := adw_view_stack_add_titled (stack, gtk_label_new("One"),
- "one", "Page One");
- p2 := adw_view_stack_add_titled_with_icon (stack, gtk_label_new("Two"),
- "two", "Page Two",
- "go-home-symbolic");
- Check((stack # NIL) AND (p1 # NIL) AND (p2 # NIL), "AdwViewStack pages");
- adw_view_stack_set_visible_child_name (stack, "two");
- visible := adw_view_stack_get_visible_child_name (stack);
- Check(visible # NIL, "AdwViewStack visible page name");
- switcher := adw_view_switcher_new();
- adw_view_switcher_set_stack (switcher, stack);
- Check(adw_view_switcher_get_policy (switcher) = 0, "AdwViewSwitcher policy");
- bar := adw_view_switcher_bar_new();
- adw_view_switcher_bar_set_stack (bar, stack);
- adw_view_switcher_bar_set_reveal (bar, 1);
- Check(bar # NIL, "AdwViewSwitcherBar");
- title := adw_view_switcher_title_new();
- adw_view_switcher_title_set_title (title, "Demo");
- adw_view_switcher_title_set_subtitle (title, "GNOME widgets");
- adw_view_switcher_title_set_stack (title, stack);
- Check(title # NIL, "AdwViewSwitcherTitle");
- inl := adw_inline_view_switcher_new();
- adw_inline_view_switcher_set_stack (inl, stack);
- adw_inline_view_switcher_set_display_mode (inl, AdwInlineViewSwitcherLabels);
- Check(inl # NIL, "AdwInlineViewSwitcher");
- (* AdwNavigationView *)
- nav := adw_navigation_view_new();
- np1 := adw_navigation_page_new (gtk_label_new("Root"), "Root");
- adw_navigation_view_push (nav, np1);
- np2 := adw_navigation_page_new (gtk_label_new("Child"), "Child");
- adw_navigation_view_push (nav, np2);
- Check(adw_navigation_view_get_visible_page (nav) = np2,
- "AdwNavigationView push");
- Check(adw_navigation_view_pop (nav) # 0, "AdwNavigationView pop");
- Check(adw_navigation_view_get_visible_page (nav) = np1,
- "AdwNavigationView visible after pop");
- (* adaptive containers *)
- clamp := adw_clamp_scrollable_new();
- adw_clamp_scrollable_set_maximum_size (clamp, 400);
- Check(clamp # NIL, "AdwClampScrollable");
- cliplayout := adw_clamp_layout_new();
- Check(cliplayout # NIL, "AdwClampLayout");
- wrap := adw_wrap_box_new();
- adw_wrap_box_append (wrap, gtk_label_new("a"));
- adw_wrap_box_append (wrap, gtk_label_new("b"));
- Check(wrap # NIL, "AdwWrapBox");
- wraplayout := adw_wrap_layout_new();
- Check(wraplayout # NIL, "AdwWrapLayout");
- squeeze := adw_squeezer_new();
- visible := adw_squeezer_add (squeeze, gtk_label_new("wide"));
- visible := adw_squeezer_add (squeeze, gtk_label_new("narrow"));
- Check(squeeze # NIL, "AdwSqueezer");
- (* rows and misc *)
- avatar := adw_avatar_new (32, "Eric", 1);
- Check(avatar # NIL, "AdwAvatar");
- content := adw_button_content_new();
- adw_button_content_set_icon_name (content, "go-home-symbolic");
- adw_button_content_set_label (content, "Home");
- Check(content # NIL, "AdwButtonContent");
- split := adw_split_button_new();
- adw_split_button_set_label (split, "Split");
- Check(split # NIL, "AdwSplitButton");
- brow := adw_button_row_new();
- adw_button_row_set_start_icon_name (brow, "go-home-symbolic");
- adw_button_row_set_end_icon_name (brow, "go-next-symbolic");
- Check(brow # NIL, "AdwButtonRow");
- spin := adw_spin_row_new_with_range (0.0, 10.0, 1.0);
- Check(spin # NIL, "AdwSpinRow");
- pw := adw_password_entry_row_new();
- Check(pw # NIL, "AdwPasswordEntryRow");
- bin := adw_bin_new();
- adw_bin_set_child (bin, gtk_label_new("bin"));
- Check(bin # NIL, "AdwBin");
- spinner := adw_spinner_new();
- sp := adw_spinner_paintable_new (spinner);
- Check((spinner # NIL) AND (sp # NIL), "AdwSpinner / AdwSpinnerPaintable");
- wt := adw_window_title_new ("Title", "Subtitle");
- Check(wt # NIL, "AdwWindowTitle");
- (* put a few of them in the window *)
- box := gtk_box_new (GtkVertical, 12);
- gtk_box_append (box, gtk_label_new("libadwaita widgets"));
- gtk_box_append (box, avatar);
- gtk_box_append (box, split);
- gtk_box_append (box, spinner);
- window := adw_window_new();
- gtk_window_set_title (window, "Adw widgets");
- gtk_window_set_default_size (window, 360, 300);
- adw_window_set_content (window, box);
- gtk_window_present (window);
- passed := (failures = 0);
- g_application_quit (application)
- END OnActivate;
- VAR
- rc: INTEGER;
- BEGIN
- passed := FALSE;
- failures := 0;
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("test_adw_widgets: FAIL (no app)\n");
- HALT(1)
- END;
- Connect(app, "activate", ADR(OnActivate), NIL);
- rc := g_application_run(app, 0, NIL);
- IF passed THEN
- printf("test_adw_widgets: PASS\n");
- HALT(0)
- ELSE
- printf("test_adw_widgets: FAIL\n");
- HALT(1)
- END
- END test_adw_widgets.
|