| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- MODULE counter ;
- (*
- m2-GTK4 example - a button that updates a label.
- Demonstrates the widget/layout set (GtkWindow > GtkBox > label &
- button) and a "clicked" signal handler that mutates Modula-2 state.
- Build: make examples
- Run: ./build/examples/counter
- *)
- FROM Gio IMPORT g_application_run;
- FROM GtkApplication IMPORT gtk_application_new;
- FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
- gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
- FROM GtkBox IMPORT gtk_box_new, gtk_box_append, gtk_box_set_spacing;
- FROM GtkEnums IMPORT GtkVertical;
- FROM GtkLabel IMPORT gtk_label_new, gtk_label_set_text;
- FROM GtkButton IMPORT gtk_button_new_with_label;
- FROM GtkUtils IMPORT IntToStr, Connect;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.Counter";
- VAR
- label: ADDRESS;
- count: INTEGER;
- (* void clicked(GtkButton *button, gpointer user_data) *)
- PROCEDURE OnClicked (button: ADDRESS; data: ADDRESS);
- VAR
- text: ARRAY [0..31] OF CHAR;
- BEGIN
- INC(count);
- IntToStr(count, text);
- gtk_label_set_text(label, text)
- END OnClicked;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box, button: ADDRESS;
- text: ARRAY [0..31] OF CHAR;
- BEGIN
- window := gtk_application_window_new(application);
- gtk_window_set_title(window, "m2-GTK4 Counter");
- gtk_window_set_default_size(window, 320, 180);
- box := gtk_box_new(GtkVertical, 12);
- gtk_box_set_spacing(box, 12);
- count := 0;
- IntToStr(count, text);
- label := gtk_label_new(text);
- gtk_box_append(box, label);
- button := gtk_button_new_with_label("Click me");
- Connect(button, "clicked", ADR(OnClicked), NIL);
- gtk_box_append(box, button);
- gtk_window_set_child(window, box);
- gtk_window_present(window)
- END OnActivate;
- VAR
- app: ADDRESS;
- BEGIN
- app := gtk_application_new(AppId, 0);
- IF app = NIL THEN
- printf("gtk_application_new failed\n");
- HALT(1)
- END;
- Connect(app, "activate", ADR(OnActivate), NIL);
- g_application_run(app, 0, NIL)
- END counter.
|