test_containers2.mod 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. MODULE test_containers2 ;
  2. (*
  3. m2-GTK4 test - the second batch of containers: GtkFrame,
  4. GtkExpander, GtkPaned, GtkOverlay and GtkListBox/GtkListBoxRow.
  5. Requires a display.
  6. *)
  7. FROM Gio IMPORT g_application_run, g_application_quit;
  8. FROM GtkApplication IMPORT gtk_application_new;
  9. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child;
  10. FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
  11. FROM GtkEnums IMPORT GtkVertical, GtkHorizontal, GtkSelectionSingle;
  12. FROM GtkLabel IMPORT gtk_label_new;
  13. FROM GtkFrame IMPORT gtk_frame_new, gtk_frame_get_label,
  14. gtk_frame_set_child, gtk_frame_get_child,
  15. gtk_frame_set_label_align, gtk_frame_get_label_align,
  16. gtk_frame_set_label_widget, gtk_frame_get_label_widget;
  17. FROM GtkExpander IMPORT gtk_expander_new, gtk_expander_get_label,
  18. gtk_expander_set_expanded, gtk_expander_get_expanded,
  19. gtk_expander_set_resize_toplevel, gtk_expander_get_resize_toplevel,
  20. gtk_expander_set_child, gtk_expander_get_child;
  21. FROM GtkPaned IMPORT gtk_paned_new, gtk_paned_set_start_child,
  22. gtk_paned_get_start_child, gtk_paned_set_end_child,
  23. gtk_paned_get_end_child, gtk_paned_set_position, gtk_paned_get_position;
  24. FROM GtkOverlay IMPORT gtk_overlay_new, gtk_overlay_set_child,
  25. gtk_overlay_get_child, gtk_overlay_add_overlay,
  26. gtk_overlay_remove_overlay, gtk_overlay_set_measure_overlay,
  27. gtk_overlay_get_measure_overlay, gtk_overlay_set_clip_overlay,
  28. gtk_overlay_get_clip_overlay;
  29. FROM GtkListBox IMPORT gtk_list_box_new, gtk_list_box_append,
  30. gtk_list_box_get_row_at_index, gtk_list_box_select_row,
  31. gtk_list_box_get_selected_row, gtk_list_box_set_selection_mode,
  32. gtk_list_box_get_selection_mode, gtk_list_box_set_show_separators,
  33. gtk_list_box_get_show_separators, gtk_list_box_row_new,
  34. gtk_list_box_row_set_child, gtk_list_box_row_get_child,
  35. gtk_list_box_row_get_index, gtk_list_box_row_set_activatable,
  36. gtk_list_box_row_get_activatable, gtk_list_box_row_set_selectable,
  37. gtk_list_box_row_get_selectable;
  38. FROM GtkUtils IMPORT Connect, CStrToM2;
  39. FROM SYSTEM IMPORT ADDRESS, ADR;
  40. FROM libc IMPORT printf;
  41. CONST
  42. AppId = "org.example.m2gtk4.TestContainers2";
  43. VAR
  44. app: ADDRESS;
  45. passed: BOOLEAN;
  46. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  47. VAR
  48. window, box, frame, expander, paned, overlay, listbox: ADDRESS;
  49. label, startLabel, stopLabel, over, row, r0, r1, r2: ADDRESS;
  50. buf: ARRAY [0..63] OF CHAR;
  51. xalign: SHORTREAL;
  52. ok: BOOLEAN;
  53. BEGIN
  54. ok := TRUE;
  55. (* --- GtkFrame --- *)
  56. label := gtk_label_new("child");
  57. frame := gtk_frame_new("Title");
  58. gtk_frame_set_child(frame, label);
  59. IF gtk_frame_get_child(frame) # label THEN
  60. printf("frame child wrong\n"); ok := FALSE
  61. END;
  62. CStrToM2(gtk_frame_get_label(frame), buf);
  63. IF (buf[0] # 'T') OR (buf[5] # 0C) THEN
  64. printf("frame label wrong: [%s]\n", buf); ok := FALSE
  65. END;
  66. gtk_frame_set_label_align(frame, 0.5);
  67. xalign := gtk_frame_get_label_align(frame);
  68. IF ABS(xalign - 0.5) > 0.01 THEN
  69. printf("frame label align wrong\n"); ok := FALSE
  70. END;
  71. gtk_frame_set_label_widget(frame, gtk_label_new("header"));
  72. IF gtk_frame_get_label_widget(frame) = NIL THEN ok := FALSE END;
  73. (* --- GtkExpander --- *)
  74. expander := gtk_expander_new("Section");
  75. gtk_expander_set_child(expander, gtk_label_new("body"));
  76. IF gtk_expander_get_child(expander) = NIL THEN ok := FALSE END;
  77. CStrToM2(gtk_expander_get_label(expander), buf);
  78. IF (buf[0] # 'S') OR (buf[7] # 0C) THEN
  79. printf("expander label wrong: [%s]\n", buf); ok := FALSE
  80. END;
  81. gtk_expander_set_expanded(expander, 1);
  82. IF gtk_expander_get_expanded(expander) # 1 THEN ok := FALSE END;
  83. gtk_expander_set_resize_toplevel(expander, 1);
  84. IF gtk_expander_get_resize_toplevel(expander) # 1 THEN ok := FALSE END;
  85. (* --- GtkPaned --- *)
  86. startLabel := gtk_label_new("start");
  87. stopLabel := gtk_label_new("end");
  88. paned := gtk_paned_new(GtkHorizontal);
  89. gtk_paned_set_start_child(paned, startLabel);
  90. gtk_paned_set_end_child(paned, stopLabel);
  91. IF gtk_paned_get_start_child(paned) # startLabel THEN ok := FALSE END;
  92. IF gtk_paned_get_end_child(paned) # stopLabel THEN ok := FALSE END;
  93. gtk_paned_set_position(paned, 120);
  94. IF gtk_paned_get_position(paned) # 120 THEN
  95. printf("paned position wrong: %d\n", gtk_paned_get_position(paned));
  96. ok := FALSE
  97. END;
  98. (* --- GtkOverlay --- *)
  99. over := gtk_label_new("overlay");
  100. overlay := gtk_overlay_new();
  101. gtk_overlay_set_child(overlay, gtk_label_new("main"));
  102. IF gtk_overlay_get_child(overlay) = NIL THEN ok := FALSE END;
  103. gtk_overlay_add_overlay(overlay, over);
  104. gtk_overlay_set_measure_overlay(overlay, over, 1);
  105. IF gtk_overlay_get_measure_overlay(overlay, over) # 1 THEN
  106. printf("overlay measure wrong\n"); ok := FALSE
  107. END;
  108. gtk_overlay_set_clip_overlay(overlay, over, 1);
  109. IF gtk_overlay_get_clip_overlay(overlay, over) # 1 THEN
  110. printf("overlay clip wrong\n"); ok := FALSE
  111. END;
  112. gtk_overlay_remove_overlay(overlay, over);
  113. (* --- GtkListBox + GtkListBoxRow --- *)
  114. listbox := gtk_list_box_new();
  115. gtk_list_box_set_selection_mode(listbox, GtkSelectionSingle);
  116. IF gtk_list_box_get_selection_mode(listbox) # GtkSelectionSingle THEN
  117. ok := FALSE
  118. END;
  119. r0 := gtk_list_box_row_new();
  120. gtk_list_box_row_set_child(r0, gtk_label_new("row 0"));
  121. r1 := gtk_list_box_row_new();
  122. gtk_list_box_row_set_child(r1, gtk_label_new("row 1"));
  123. r2 := gtk_list_box_row_new();
  124. gtk_list_box_row_set_child(r2, gtk_label_new("row 2"));
  125. gtk_list_box_append(listbox, r0);
  126. gtk_list_box_append(listbox, r1);
  127. gtk_list_box_append(listbox, r2);
  128. row := gtk_list_box_get_row_at_index(listbox, 1);
  129. IF row # r1 THEN
  130. printf("listbox row-at-index wrong\n"); ok := FALSE
  131. END;
  132. IF gtk_list_box_row_get_index(r1) # 1 THEN
  133. printf("listbox row index wrong\n"); ok := FALSE
  134. END;
  135. gtk_list_box_row_set_selectable(r1, 1);
  136. IF gtk_list_box_row_get_selectable(r1) # 1 THEN ok := FALSE END;
  137. gtk_list_box_row_set_activatable(r1, 0);
  138. IF gtk_list_box_row_get_activatable(r1) # 0 THEN ok := FALSE END;
  139. gtk_list_box_select_row(listbox, r1);
  140. IF gtk_list_box_get_selected_row(listbox) # r1 THEN
  141. printf("listbox selected row wrong\n"); ok := FALSE
  142. END;
  143. gtk_list_box_set_show_separators(listbox, 1);
  144. IF gtk_list_box_get_show_separators(listbox) # 1 THEN ok := FALSE END;
  145. (* assemble into a window *)
  146. box := gtk_box_new(GtkVertical, 4);
  147. gtk_box_append(box, frame);
  148. gtk_box_append(box, expander);
  149. gtk_box_append(box, paned);
  150. gtk_box_append(box, listbox);
  151. window := gtk_application_window_new(application);
  152. gtk_window_set_child(window, box);
  153. passed := ok;
  154. g_application_quit(application)
  155. END OnActivate;
  156. VAR
  157. rc: INTEGER;
  158. BEGIN
  159. passed := FALSE;
  160. app := gtk_application_new(AppId, 0);
  161. IF app = NIL THEN
  162. printf("test_containers2: FAIL (no app)\n");
  163. HALT(1)
  164. END;
  165. Connect(app, "activate", ADR(OnActivate), NIL);
  166. rc := g_application_run(app, 0, NIL);
  167. IF passed THEN
  168. printf("test_containers2: PASS\n");
  169. HALT(0)
  170. ELSE
  171. printf("test_containers2: FAIL\n");
  172. HALT(1)
  173. END
  174. END test_containers2.