| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- MODULE test_adw_widgets2 ;
- (*
- m2-GTK4 test - the second batch of libadwaita (GNOME) widgets:
- dialogs, tabs, carousel, toggles, adaptive views, breakpoints, style
- manager, swipe tracker and animations. Requires a display.
- *)
- FROM GtkApplication IMPORT gtk_application_new;
- FROM Gio IMPORT g_application_run, g_application_quit;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child,
- gtk_window_present;
- FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
- FROM GtkLabel IMPORT gtk_label_new;
- FROM GtkEnums IMPORT GtkVertical;
- FROM GtkUtils IMPORT Connect;
- FROM AdwDialog IMPORT adw_dialog_new, adw_dialog_set_child,
- adw_dialog_set_title, adw_dialog_get_title;
- FROM AdwAlertDialog IMPORT adw_alert_dialog_new,
- adw_alert_dialog_add_response, adw_alert_dialog_has_response;
- FROM AdwAboutDialog IMPORT adw_about_dialog_new,
- adw_about_dialog_set_application_name;
- FROM AdwPreferencesDialog IMPORT adw_preferences_dialog_new,
- adw_preferences_dialog_add;
- FROM AdwPreferencesWindow IMPORT adw_preferences_window_new,
- adw_preferences_window_add;
- FROM AdwPreferencesPage IMPORT adw_preferences_page_new;
- FROM AdwTabView IMPORT adw_tab_view_new, adw_tab_view_append,
- adw_tab_view_get_n_pages, adw_tab_view_get_nth_page,
- adw_tab_view_set_shortcuts, adw_tab_view_get_shortcuts;
- FROM AdwTabBar IMPORT adw_tab_bar_new, adw_tab_bar_set_view;
- FROM AdwTabButton IMPORT adw_tab_button_new, adw_tab_button_set_view;
- FROM AdwTabOverview IMPORT adw_tab_overview_new, adw_tab_overview_set_view;
- FROM AdwCarousel IMPORT adw_carousel_new, adw_carousel_append,
- adw_carousel_get_n_pages;
- FROM AdwCarouselIndicatorDots IMPORT adw_carousel_indicator_dots_new,
- adw_carousel_indicator_dots_set_carousel;
- FROM AdwCarouselIndicatorLines IMPORT adw_carousel_indicator_lines_new,
- adw_carousel_indicator_lines_set_carousel;
- FROM AdwToggle IMPORT adw_toggle_new, adw_toggle_set_label;
- FROM AdwToggleGroup IMPORT adw_toggle_group_new, adw_toggle_group_add,
- adw_toggle_group_get_n_toggles;
- FROM AdwFlap IMPORT adw_flap_new, adw_flap_set_content, adw_flap_set_flap;
- FROM AdwLeaflet IMPORT adw_leaflet_new, adw_leaflet_append;
- FROM AdwOverlaySplitView IMPORT adw_overlay_split_view_new,
- adw_overlay_split_view_set_content, adw_overlay_split_view_set_sidebar;
- FROM AdwNavigationSplitView IMPORT adw_navigation_split_view_new,
- adw_navigation_split_view_set_content,
- adw_navigation_split_view_set_sidebar;
- FROM AdwNavigationPage IMPORT adw_navigation_page_new;
- FROM AdwBottomSheet IMPORT adw_bottom_sheet_new,
- adw_bottom_sheet_set_content, adw_bottom_sheet_set_sheet;
- FROM AdwBreakpoint IMPORT adw_breakpoint_new, adw_breakpoint_get_condition;
- FROM AdwBreakpointCondition IMPORT adw_breakpoint_condition_parse;
- FROM AdwMultiLayoutView IMPORT adw_multi_layout_view_new,
- adw_multi_layout_view_add_layout, adw_multi_layout_view_set_child;
- FROM AdwLayout IMPORT adw_layout_new, adw_layout_set_name;
- FROM AdwLayoutSlot IMPORT adw_layout_slot_new;
- FROM AdwStyleManager IMPORT adw_style_manager_get_default,
- adw_style_manager_set_color_scheme, adw_style_manager_get_color_scheme;
- FROM AdwEnums IMPORT AdwColorSchemePreferDark, AdwColorSchemePreferLight,
- AdwTabViewShortcutAll, AdwEasingEaseInOut;
- FROM AdwSwipeTracker IMPORT adw_swipe_tracker_new;
- FROM AdwSpringParams IMPORT adw_spring_params_new;
- FROM AdwTimedAnimation IMPORT adw_timed_animation_new,
- adw_timed_animation_set_easing;
- FROM AdwSpringAnimation IMPORT adw_spring_animation_new;
- FROM AdwPropertyAnimationTarget IMPORT adw_property_animation_target_new;
- FROM AdwCallbackAnimationTarget IMPORT adw_callback_animation_target_new;
- FROM AdwAnimation IMPORT adw_animation_get_widget;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.TestAdwWidgets2";
- 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;
- (* void on_anim_value(double value, gpointer user_data) *)
- PROCEDURE OnAnimValue (value: REAL; user: ADDRESS);
- BEGIN
- END OnAnimValue;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box: ADDRESS;
- dialog, alert, about, prefdlg, prefwin, page: ADDRESS;
- tabview, tabbar, tabbtn, tabover, tabpage, label: ADDRESS;
- carousel, dots, lines: ADDRESS;
- tg, toggle: ADDRESS;
- flap, leaflet, osplit, nsplit, sheet: ADDRESS;
- cond, bp, mlv, layout, slot: ADDRESS;
- sm, tracker, spring: ADDRESS;
- target, anim: ADDRESS;
- BEGIN
- failures := 0;
- window := gtk_application_window_new(application);
- (* dialogs *)
- dialog := adw_dialog_new();
- adw_dialog_set_title (dialog, "A dialog");
- adw_dialog_set_child (dialog, gtk_label_new("content"));
- Check(adw_dialog_get_title (dialog) # NIL, "AdwDialog");
- alert := adw_alert_dialog_new ("Heading", "Body");
- adw_alert_dialog_add_response (alert, "ok", "OK");
- Check(adw_alert_dialog_has_response (alert, "ok") # 0,
- "AdwAlertDialog response");
- about := adw_about_dialog_new();
- adw_about_dialog_set_application_name (about, "m2-GTK4");
- Check(about # NIL, "AdwAboutDialog");
- page := adw_preferences_page_new();
- prefdlg := adw_preferences_dialog_new();
- adw_preferences_dialog_add (prefdlg, page);
- Check(prefdlg # NIL, "AdwPreferencesDialog");
- prefwin := adw_preferences_window_new();
- adw_preferences_window_add (prefwin, adw_preferences_page_new());
- Check(prefwin # NIL, "AdwPreferencesWindow");
- (* tabs *)
- tabview := adw_tab_view_new();
- label := gtk_label_new("Page 1");
- tabpage := adw_tab_view_append (tabview, label);
- label := gtk_label_new("Page 2");
- tabpage := adw_tab_view_append (tabview, label);
- Check(adw_tab_view_get_n_pages (tabview) = 2, "AdwTabView pages");
- Check(adw_tab_view_get_nth_page (tabview, 1) # NIL, "AdwTabView nth page");
- adw_tab_view_set_shortcuts (tabview, AdwTabViewShortcutAll);
- Check(adw_tab_view_get_shortcuts (tabview) # 0, "AdwTabView shortcuts");
- tabbar := adw_tab_bar_new();
- adw_tab_bar_set_view (tabbar, tabview);
- Check(tabbar # NIL, "AdwTabBar");
- tabbtn := adw_tab_button_new();
- adw_tab_button_set_view (tabbtn, tabview);
- Check(tabbtn # NIL, "AdwTabButton");
- tabover := adw_tab_overview_new();
- adw_tab_overview_set_view (tabover, tabview);
- Check(tabover # NIL, "AdwTabOverview");
- (* carousel *)
- carousel := adw_carousel_new();
- adw_carousel_append (carousel, gtk_label_new("One"));
- adw_carousel_append (carousel, gtk_label_new("Two"));
- Check(adw_carousel_get_n_pages (carousel) = 2, "AdwCarousel pages");
- dots := adw_carousel_indicator_dots_new();
- adw_carousel_indicator_dots_set_carousel (dots, carousel);
- lines := adw_carousel_indicator_lines_new();
- adw_carousel_indicator_lines_set_carousel (lines, carousel);
- Check((dots # NIL) AND (lines # NIL), "AdwCarousel indicators");
- (* toggles *)
- tg := adw_toggle_group_new();
- toggle := adw_toggle_new();
- adw_toggle_set_label (toggle, "One");
- adw_toggle_group_add (tg, toggle);
- toggle := adw_toggle_new();
- adw_toggle_set_label (toggle, "Two");
- adw_toggle_group_add (tg, toggle);
- Check(adw_toggle_group_get_n_toggles (tg) = 2, "AdwToggleGroup toggles");
- (* adaptive views *)
- flap := adw_flap_new();
- adw_flap_set_content (flap, gtk_label_new("content"));
- adw_flap_set_flap (flap, gtk_label_new("flap"));
- Check(flap # NIL, "AdwFlap");
- leaflet := adw_leaflet_new();
- page := adw_leaflet_append (leaflet, gtk_label_new("page"));
- page := adw_leaflet_append (leaflet, gtk_label_new("page2"));
- Check(leaflet # NIL, "AdwLeaflet");
- osplit := adw_overlay_split_view_new();
- adw_overlay_split_view_set_sidebar (osplit, gtk_label_new("sidebar"));
- adw_overlay_split_view_set_content (osplit, gtk_label_new("content"));
- Check(osplit # NIL, "AdwOverlaySplitView");
- nsplit := adw_navigation_split_view_new();
- adw_navigation_split_view_set_sidebar
- (nsplit, adw_navigation_page_new (gtk_label_new("sidebar"), "Side"));
- adw_navigation_split_view_set_content
- (nsplit, adw_navigation_page_new (gtk_label_new("content"), "Main"));
- Check(nsplit # NIL, "AdwNavigationSplitView");
- sheet := adw_bottom_sheet_new();
- adw_bottom_sheet_set_content (sheet, gtk_label_new("content"));
- adw_bottom_sheet_set_sheet (sheet, gtk_label_new("sheet"));
- Check(sheet # NIL, "AdwBottomSheet");
- (* breakpoints *)
- cond := adw_breakpoint_condition_parse ("max-width: 600px");
- bp := adw_breakpoint_new (cond);
- Check(adw_breakpoint_get_condition (bp) # NIL, "AdwBreakpoint condition");
- (* multi layout view *)
- mlv := adw_multi_layout_view_new();
- layout := adw_layout_new (gtk_label_new("layout"));
- adw_layout_set_name (layout, "main");
- adw_multi_layout_view_add_layout (mlv, layout);
- slot := adw_layout_slot_new ("slot1");
- adw_multi_layout_view_set_child (mlv, "slot1", gtk_label_new("child"));
- Check((mlv # NIL) AND (slot # NIL), "AdwMultiLayoutView");
- (* style manager *)
- sm := adw_style_manager_get_default();
- adw_style_manager_set_color_scheme (sm, AdwColorSchemePreferDark);
- Check(adw_style_manager_get_color_scheme (sm) = AdwColorSchemePreferDark,
- "AdwStyleManager colour scheme");
- adw_style_manager_set_color_scheme (sm, AdwColorSchemePreferLight);
- (* swipe tracker (carousel implements AdwSwipeable) *)
- tracker := adw_swipe_tracker_new (carousel);
- Check(tracker # NIL, "AdwSwipeTracker");
- (* animations *)
- spring := adw_spring_params_new (0.9, 1.0, 100.0);
- target := adw_property_animation_target_new (label, "opacity");
- anim := adw_timed_animation_new (label, 0.0, 1.0, 200, target);
- adw_timed_animation_set_easing (anim, AdwEasingEaseInOut);
- Check(adw_animation_get_widget (anim) = label, "AdwTimedAnimation");
- anim := adw_spring_animation_new (label, 0.0, 1.0, spring, target);
- Check(anim # NIL, "AdwSpringAnimation");
- target := adw_callback_animation_target_new (ADR(OnAnimValue), NIL, NIL);
- Check(target # NIL, "AdwCallbackAnimationTarget");
- (* build a small window *)
- box := gtk_box_new (GtkVertical, 12);
- gtk_box_append (box, gtk_label_new("libadwaita widgets, batch 2"));
- gtk_box_append (box, carousel);
- gtk_box_append (box, tg);
- gtk_window_set_child (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_widgets2: 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_widgets2: PASS\n");
- HALT(0)
- ELSE
- printf("test_adw_widgets2: FAIL\n");
- HALT(1)
- END
- END test_adw_widgets2.
|