test_dialogs.mod 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. MODULE test_dialogs ;
  2. (*
  3. m2-GTK4 test - modern dialogs: GtkAlertDialog and GtkColorDialog
  4. property round-trips (dialogues are not shown). Requires a display.
  5. *)
  6. FROM Gio IMPORT g_application_run, g_application_quit;
  7. FROM GtkApplication IMPORT gtk_application_new;
  8. FROM GtkAlertDialog IMPORT gtk_alert_dialog_new,
  9. gtk_alert_dialog_set_message, gtk_alert_dialog_get_message,
  10. gtk_alert_dialog_set_detail, gtk_alert_dialog_get_detail,
  11. gtk_alert_dialog_set_buttons, gtk_alert_dialog_get_buttons,
  12. gtk_alert_dialog_set_cancel_button, gtk_alert_dialog_get_cancel_button,
  13. gtk_alert_dialog_set_default_button, gtk_alert_dialog_get_default_button,
  14. gtk_alert_dialog_set_modal, gtk_alert_dialog_get_modal;
  15. FROM GtkColorDialog IMPORT gtk_color_dialog_new,
  16. gtk_color_dialog_set_title, gtk_color_dialog_get_title,
  17. gtk_color_dialog_set_modal, gtk_color_dialog_set_with_alpha;
  18. FROM GtkUtils IMPORT Connect, CStrToM2, Unref;
  19. FROM SYSTEM IMPORT ADDRESS, ADR;
  20. FROM libc IMPORT printf;
  21. CONST
  22. AppId = "org.example.m2gtk4.TestDialogs";
  23. VAR
  24. app: ADDRESS;
  25. passed: BOOLEAN;
  26. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  27. VAR
  28. alert, color: ADDRESS;
  29. buf: ARRAY [0..63] OF CHAR;
  30. s0, s1: ARRAY [0..7] OF CHAR;
  31. buttons: ARRAY [0..2] OF ADDRESS;
  32. ok: BOOLEAN;
  33. BEGIN
  34. ok := TRUE;
  35. (* --- GtkAlertDialog --- *)
  36. alert := gtk_alert_dialog_new("Heads up");
  37. CStrToM2(gtk_alert_dialog_get_message(alert), buf);
  38. IF (buf[0] # 'H') OR (buf[8] # 0C) THEN
  39. printf("alert message wrong: [%s]\n", buf); ok := FALSE
  40. END;
  41. gtk_alert_dialog_set_message(alert, "Changed");
  42. CStrToM2(gtk_alert_dialog_get_message(alert), buf);
  43. IF (buf[0] # 'C') OR (buf[7] # 0C) THEN ok := FALSE END;
  44. gtk_alert_dialog_set_detail(alert, "More info");
  45. CStrToM2(gtk_alert_dialog_get_detail(alert), buf);
  46. IF (buf[0] # 'M') OR (buf[9] # 0C) THEN ok := FALSE END;
  47. s0 := "OK";
  48. s1 := "Cancel";
  49. buttons[0] := ADR(s0);
  50. buttons[1] := ADR(s1);
  51. buttons[2] := NIL;
  52. gtk_alert_dialog_set_buttons(alert, ADR(buttons));
  53. IF gtk_alert_dialog_get_buttons(alert) = NIL THEN
  54. printf("alert buttons not set\n"); ok := FALSE
  55. END;
  56. gtk_alert_dialog_set_default_button(alert, 0);
  57. IF gtk_alert_dialog_get_default_button(alert) # 0 THEN ok := FALSE END;
  58. gtk_alert_dialog_set_cancel_button(alert, 1);
  59. IF gtk_alert_dialog_get_cancel_button(alert) # 1 THEN ok := FALSE END;
  60. gtk_alert_dialog_set_modal(alert, 1);
  61. IF gtk_alert_dialog_get_modal(alert) # 1 THEN ok := FALSE END;
  62. (* --- GtkColorDialog --- *)
  63. color := gtk_color_dialog_new();
  64. gtk_color_dialog_set_title(color, "Pick a colour");
  65. CStrToM2(gtk_color_dialog_get_title(color), buf);
  66. IF (buf[0] # 'P') OR (buf[13] # 0C) THEN
  67. printf("color title wrong: [%s]\n", buf); ok := FALSE
  68. END;
  69. gtk_color_dialog_set_modal(color, 1);
  70. gtk_color_dialog_set_with_alpha(color, 1);
  71. Unref(alert);
  72. Unref(color);
  73. passed := ok;
  74. g_application_quit(application)
  75. END OnActivate;
  76. VAR
  77. rc: INTEGER;
  78. BEGIN
  79. passed := FALSE;
  80. app := gtk_application_new(AppId, 0);
  81. IF app = NIL THEN
  82. printf("test_dialogs: FAIL (no app)\n");
  83. HALT(1)
  84. END;
  85. Connect(app, "activate", ADR(OnActivate), NIL);
  86. rc := g_application_run(app, 0, NIL);
  87. IF passed THEN
  88. printf("test_dialogs: PASS\n");
  89. HALT(0)
  90. ELSE
  91. printf("test_dialogs: FAIL\n");
  92. HALT(1)
  93. END
  94. END test_dialogs.