containers.mod 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. MODULE containers ;
  2. (*
  3. m2-GTK4 example - the layout containers together.
  4. A GtkNotebook with three pages:
  5. 1. "Grid" - a GtkGrid of buttons
  6. 2. "Stack" - a GtkStackSwitcher driving a GtkStack
  7. 3. "Scroll" - a GtkScrolledWindow around a tall box
  8. Build: make examples
  9. Run: ./build/examples/containers
  10. *)
  11. FROM Gio IMPORT g_application_run;
  12. FROM GtkApplication IMPORT gtk_application_new;
  13. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
  14. gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
  15. FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
  16. FROM GtkEnums IMPORT GtkVertical, GtkPosTop;
  17. FROM GtkLabel IMPORT gtk_label_new;
  18. FROM GtkButton IMPORT gtk_button_new_with_label;
  19. FROM GtkGrid IMPORT gtk_grid_new, gtk_grid_attach,
  20. gtk_grid_set_row_spacing, gtk_grid_set_column_spacing;
  21. FROM GtkStack IMPORT gtk_stack_new, gtk_stack_add_titled,
  22. gtk_stack_set_transition_type, GtkStackTransitionSlideLeft;
  23. FROM GtkStackSwitcher IMPORT gtk_stack_switcher_new,
  24. gtk_stack_switcher_set_stack;
  25. FROM GtkNotebook IMPORT gtk_notebook_new, gtk_notebook_append_page,
  26. gtk_notebook_set_tab_pos;
  27. FROM GtkScrolledWindow IMPORT gtk_scrolled_window_new,
  28. gtk_scrolled_window_set_child, gtk_scrolled_window_set_policy,
  29. gtk_scrolled_window_set_min_content_height,
  30. GtkPolicyNever, GtkPolicyAutomatic;
  31. FROM GtkUtils IMPORT Connect, IntToStr;
  32. FROM SYSTEM IMPORT ADDRESS, ADR;
  33. FROM libc IMPORT printf;
  34. CONST
  35. AppId = "org.example.m2gtk4.Containers";
  36. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  37. VAR
  38. window, notebook, grid, stack, switcher, sw, box: ADDRESS;
  39. text: ARRAY [0..15] OF CHAR;
  40. i: INTEGER;
  41. BEGIN
  42. notebook := gtk_notebook_new();
  43. gtk_notebook_set_tab_pos(notebook, GtkPosTop);
  44. (* page 1: a 3x2 grid of buttons *)
  45. grid := gtk_grid_new();
  46. gtk_grid_set_row_spacing(grid, 6);
  47. gtk_grid_set_column_spacing(grid, 6);
  48. FOR i := 0 TO 5 DO
  49. IntToStr(i + 1, text);
  50. gtk_grid_attach(grid, gtk_button_new_with_label(text),
  51. i MOD 3, i DIV 3, 1, 1)
  52. END;
  53. gtk_notebook_append_page(notebook, grid, gtk_label_new("Grid"));
  54. (* page 2: a stack with a switcher *)
  55. stack := gtk_stack_new();
  56. gtk_stack_set_transition_type(stack, GtkStackTransitionSlideLeft);
  57. gtk_stack_add_titled(stack, gtk_label_new("First page"), "first", "First");
  58. gtk_stack_add_titled(stack, gtk_label_new("Second page"), "second", "Second");
  59. gtk_stack_add_titled(stack, gtk_label_new("Third page"), "third", "Third");
  60. switcher := gtk_stack_switcher_new();
  61. gtk_stack_switcher_set_stack(switcher, stack);
  62. box := gtk_box_new(GtkVertical, 8);
  63. gtk_box_append(box, switcher);
  64. gtk_box_append(box, stack);
  65. gtk_notebook_append_page(notebook, box, gtk_label_new("Stack"));
  66. (* page 3: a scrolled window around a tall box *)
  67. box := gtk_box_new(GtkVertical, 2);
  68. FOR i := 1 TO 40 DO
  69. IntToStr(i, text);
  70. gtk_box_append(box, gtk_label_new(text))
  71. END;
  72. sw := gtk_scrolled_window_new();
  73. gtk_scrolled_window_set_policy(sw, GtkPolicyNever, GtkPolicyAutomatic);
  74. gtk_scrolled_window_set_min_content_height(sw, 160);
  75. gtk_scrolled_window_set_child(sw, box);
  76. gtk_notebook_append_page(notebook, sw, gtk_label_new("Scroll"));
  77. window := gtk_application_window_new(application);
  78. gtk_window_set_title(window, "m2-GTK4 Containers");
  79. gtk_window_set_default_size(window, 480, 320);
  80. gtk_window_set_child(window, notebook);
  81. gtk_window_present(window)
  82. END OnActivate;
  83. VAR
  84. app: ADDRESS;
  85. BEGIN
  86. app := gtk_application_new(AppId, 0);
  87. IF app = NIL THEN
  88. printf("gtk_application_new failed\n");
  89. HALT(1)
  90. END;
  91. Connect(app, "activate", ADR(OnActivate), NIL);
  92. g_application_run(app, 0, NIL)
  93. END containers.