test_widgets3.mod 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. MODULE test_widgets3 ;
  2. (*
  3. m2-GTK4 test - common widgets: GtkFlowBox, GtkFixed, GtkPicture,
  4. GtkToggleButton, GtkLinkButton, GtkCalendar, GtkLevelBar and
  5. GtkScrollbar. 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 GtkLabel IMPORT gtk_label_new;
  12. FROM GtkEnums IMPORT GtkVertical, GtkHorizontal, GtkSelectionSingle;
  13. FROM GtkFlowBox IMPORT gtk_flow_box_new, gtk_flow_box_append,
  14. gtk_flow_box_set_max_children_per_line, gtk_flow_box_set_selection_mode,
  15. gtk_flow_box_child_new, gtk_flow_box_child_set_child;
  16. FROM GtkFixed IMPORT gtk_fixed_new, gtk_fixed_put;
  17. FROM GtkPicture IMPORT gtk_picture_new, gtk_picture_set_can_shrink,
  18. gtk_picture_set_content_fit, GtkContentFitContain;
  19. FROM GtkToggleButton IMPORT gtk_toggle_button_new_with_label,
  20. gtk_toggle_button_set_active, gtk_toggle_button_get_active;
  21. FROM GtkLinkButton IMPORT gtk_link_button_new, gtk_link_button_get_uri;
  22. FROM GtkCalendar IMPORT gtk_calendar_new;
  23. FROM GtkLevelBar IMPORT gtk_level_bar_new, gtk_level_bar_set_value,
  24. gtk_level_bar_get_value;
  25. FROM GtkScrollbar IMPORT gtk_scrollbar_new;
  26. FROM GtkUtils IMPORT Connect, CStrToM2;
  27. FROM SYSTEM IMPORT ADDRESS, ADR;
  28. FROM libc IMPORT printf;
  29. CONST
  30. AppId = "org.example.m2gtk4.TestWidgets3";
  31. VAR
  32. app: ADDRESS;
  33. passed: BOOLEAN;
  34. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  35. VAR
  36. window, box, flow, child, fixed, picture, toggle, link, calendar,
  37. level, scrollbar: ADDRESS;
  38. buf: ARRAY [0..63] OF CHAR;
  39. ok: BOOLEAN;
  40. BEGIN
  41. ok := TRUE;
  42. flow := gtk_flow_box_new();
  43. gtk_flow_box_append(flow, gtk_label_new("a"));
  44. gtk_flow_box_append(flow, gtk_label_new("b"));
  45. child := gtk_flow_box_child_new();
  46. gtk_flow_box_child_set_child(child, gtk_label_new("c"));
  47. gtk_flow_box_append(flow, child);
  48. gtk_flow_box_set_max_children_per_line(flow, 3);
  49. gtk_flow_box_set_selection_mode(flow, GtkSelectionSingle);
  50. fixed := gtk_fixed_new();
  51. gtk_fixed_put(fixed, gtk_label_new("at 10,20"), 10.0, 20.0);
  52. picture := gtk_picture_new();
  53. gtk_picture_set_can_shrink(picture, 1);
  54. gtk_picture_set_content_fit(picture, GtkContentFitContain);
  55. toggle := gtk_toggle_button_new_with_label("Toggle");
  56. gtk_toggle_button_set_active(toggle, 1);
  57. IF gtk_toggle_button_get_active(toggle) # 1 THEN
  58. printf("toggle active wrong\n"); ok := FALSE
  59. END;
  60. link := gtk_link_button_new("https://example.org");
  61. CStrToM2(gtk_link_button_get_uri(link), buf);
  62. IF (buf[0] # 'h') OR (buf[4] # 's') OR (buf[19] # 0C) THEN
  63. printf("link uri wrong: [%s]\n", buf); ok := FALSE
  64. END;
  65. calendar := gtk_calendar_new();
  66. IF calendar = NIL THEN printf("calendar NIL\n"); ok := FALSE END;
  67. level := gtk_level_bar_new();
  68. gtk_level_bar_set_value(level, 0.5);
  69. IF ABS(gtk_level_bar_get_value(level) - 0.5) > 0.001 THEN
  70. printf("level value wrong\n"); ok := FALSE
  71. END;
  72. scrollbar := gtk_scrollbar_new(GtkHorizontal, NIL);
  73. IF scrollbar = NIL THEN printf("scrollbar NIL\n"); ok := FALSE END;
  74. box := gtk_box_new(GtkVertical, 6);
  75. gtk_box_append(box, flow);
  76. gtk_box_append(box, fixed);
  77. gtk_box_append(box, picture);
  78. gtk_box_append(box, toggle);
  79. gtk_box_append(box, link);
  80. gtk_box_append(box, calendar);
  81. gtk_box_append(box, level);
  82. gtk_box_append(box, scrollbar);
  83. window := gtk_application_window_new(application);
  84. gtk_window_set_child(window, box);
  85. passed := ok;
  86. g_application_quit(application)
  87. END OnActivate;
  88. VAR
  89. rc: INTEGER;
  90. BEGIN
  91. passed := FALSE;
  92. app := gtk_application_new(AppId, 0);
  93. IF app = NIL THEN
  94. printf("test_widgets3: FAIL (no app)\n");
  95. HALT(1)
  96. END;
  97. Connect(app, "activate", ADR(OnActivate), NIL);
  98. rc := g_application_run(app, 0, NIL);
  99. IF passed THEN
  100. printf("test_widgets3: PASS\n");
  101. HALT(0)
  102. ELSE
  103. printf("test_widgets3: FAIL\n");
  104. HALT(1)
  105. END
  106. END test_widgets3.