| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- MODULE test_widgets ;
- (*
- m2-GTK4 test - widget graph + signal + state round-trip.
- Builds label/button inside a box, wires "clicked" to a handler that
- updates the label, then emits "clicked" three times with
- g_signal_emit_by_name() and reads the label text back through
- CStrToM2(). This exercises GtkBox, GtkLabel, GtkButton, the signal
- helper and the C-string helper together. Requires a display.
- *)
- FROM Gio IMPORT g_application_run, g_application_quit;
- FROM GtkApplication IMPORT gtk_application_new;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child;
- FROM GtkBox IMPORT gtk_box_new, gtk_box_append;
- FROM GtkEnums IMPORT GtkVertical;
- FROM GtkLabel IMPORT gtk_label_new, gtk_label_set_text, gtk_label_get_text;
- FROM GtkButton IMPORT gtk_button_new_with_label;
- FROM GObject IMPORT g_signal_emit_by_name;
- FROM GtkUtils IMPORT IntToStr, Connect, CStrToM2;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.TestWidgets";
- VAR
- app, label, button: ADDRESS;
- clicks: INTEGER;
- passed: BOOLEAN;
- (* void clicked(GtkButton *button, gpointer user_data) *)
- PROCEDURE OnClicked (b: ADDRESS; data: ADDRESS);
- VAR
- text: ARRAY [0..31] OF CHAR;
- BEGIN
- INC(clicks);
- IntToStr(clicks, text);
- gtk_label_set_text(label, text)
- END OnClicked;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box: ADDRESS;
- got: ARRAY [0..31] OF CHAR;
- i: INTEGER;
- BEGIN
- clicks := 0;
- passed := TRUE;
- label := gtk_label_new("0");
- button := gtk_button_new_with_label("+1");
- Connect(button, "clicked", ADR(OnClicked), NIL);
- box := gtk_box_new(GtkVertical, 6);
- gtk_box_append(box, label);
- gtk_box_append(box, button);
- window := gtk_application_window_new(application);
- gtk_window_set_child(window, box);
- FOR i := 1 TO 3 DO
- g_signal_emit_by_name(button, "clicked")
- END;
- CStrToM2(gtk_label_get_text(label), got);
- IF (clicks # 3) OR (got[0] # '3') OR (got[1] # 0C) THEN
- printf("clicks=%d label=[%s]\n", clicks, got);
- passed := FALSE
- END;
- g_application_quit(application)
- END OnActivate;
- VAR
- rc: INTEGER;
- BEGIN
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("test_widgets: FAIL (no app)\n");
- HALT(1)
- END;
- Connect(app, "activate", ADR(OnActivate), NIL);
- rc := g_application_run(app, 0, NIL);
- IF passed THEN
- printf("test_widgets: PASS\n");
- HALT(0)
- ELSE
- printf("test_widgets: FAIL\n");
- HALT(1)
- END
- END test_widgets.
|