| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 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.
|