MODULE containers ; (* m2-GTK4 example - the layout containers together. A GtkNotebook with three pages: 1. "Grid" - a GtkGrid of buttons 2. "Stack" - a GtkStackSwitcher driving a GtkStack 3. "Scroll" - a GtkScrolledWindow around a tall box Build: make examples Run: ./build/examples/containers *) FROM Gio IMPORT g_application_run; FROM GtkApplication IMPORT gtk_application_new; FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title, gtk_window_set_default_size, gtk_window_set_child, gtk_window_present; FROM GtkBox IMPORT gtk_box_new, gtk_box_append; FROM GtkEnums IMPORT GtkVertical, GtkPosTop; FROM GtkLabel IMPORT gtk_label_new; FROM GtkButton IMPORT gtk_button_new_with_label; FROM GtkGrid IMPORT gtk_grid_new, gtk_grid_attach, gtk_grid_set_row_spacing, gtk_grid_set_column_spacing; FROM GtkStack IMPORT gtk_stack_new, gtk_stack_add_titled, gtk_stack_set_transition_type, GtkStackTransitionSlideLeft; FROM GtkStackSwitcher IMPORT gtk_stack_switcher_new, gtk_stack_switcher_set_stack; FROM GtkNotebook IMPORT gtk_notebook_new, gtk_notebook_append_page, gtk_notebook_set_tab_pos; FROM GtkScrolledWindow IMPORT gtk_scrolled_window_new, gtk_scrolled_window_set_child, gtk_scrolled_window_set_policy, gtk_scrolled_window_set_min_content_height, GtkPolicyNever, GtkPolicyAutomatic; FROM GtkUtils IMPORT Connect, IntToStr; FROM SYSTEM IMPORT ADDRESS, ADR; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.Containers"; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR window, notebook, grid, stack, switcher, sw, box: ADDRESS; text: ARRAY [0..15] OF CHAR; i: INTEGER; BEGIN notebook := gtk_notebook_new(); gtk_notebook_set_tab_pos(notebook, GtkPosTop); (* page 1: a 3x2 grid of buttons *) grid := gtk_grid_new(); gtk_grid_set_row_spacing(grid, 6); gtk_grid_set_column_spacing(grid, 6); FOR i := 0 TO 5 DO IntToStr(i + 1, text); gtk_grid_attach(grid, gtk_button_new_with_label(text), i MOD 3, i DIV 3, 1, 1) END; gtk_notebook_append_page(notebook, grid, gtk_label_new("Grid")); (* page 2: a stack with a switcher *) stack := gtk_stack_new(); gtk_stack_set_transition_type(stack, GtkStackTransitionSlideLeft); gtk_stack_add_titled(stack, gtk_label_new("First page"), "first", "First"); gtk_stack_add_titled(stack, gtk_label_new("Second page"), "second", "Second"); gtk_stack_add_titled(stack, gtk_label_new("Third page"), "third", "Third"); switcher := gtk_stack_switcher_new(); gtk_stack_switcher_set_stack(switcher, stack); box := gtk_box_new(GtkVertical, 8); gtk_box_append(box, switcher); gtk_box_append(box, stack); gtk_notebook_append_page(notebook, box, gtk_label_new("Stack")); (* page 3: a scrolled window around a tall box *) box := gtk_box_new(GtkVertical, 2); FOR i := 1 TO 40 DO IntToStr(i, text); gtk_box_append(box, gtk_label_new(text)) END; sw := gtk_scrolled_window_new(); gtk_scrolled_window_set_policy(sw, GtkPolicyNever, GtkPolicyAutomatic); gtk_scrolled_window_set_min_content_height(sw, 160); gtk_scrolled_window_set_child(sw, box); gtk_notebook_append_page(notebook, sw, gtk_label_new("Scroll")); window := gtk_application_window_new(application); gtk_window_set_title(window, "m2-GTK4 Containers"); gtk_window_set_default_size(window, 480, 320); gtk_window_set_child(window, notebook); gtk_window_present(window) END OnActivate; VAR app: ADDRESS; BEGIN app := gtk_application_new(AppId, 0); IF app = NIL THEN printf("gtk_application_new failed\n"); HALT(1) END; Connect(app, "activate", ADR(OnActivate), NIL); g_application_run(app, 0, NIL) END containers.