| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- MODULE feedback ;
- (*
- m2-GTK4 example - progress, spinner, separator and image.
- A progress bar fills from 0 to 1 on a timer while a spinner runs;
- when it completes the spinner stops and the bar reads "Done".
- Build: make examples
- Run: ./build/examples/feedback
- *)
- 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, GtkHorizontal;
- FROM GtkWidget IMPORT gtk_widget_set_margin_top,
- gtk_widget_set_margin_bottom, gtk_widget_set_margin_start,
- gtk_widget_set_margin_end;
- FROM GtkProgressBar IMPORT gtk_progress_bar_new, gtk_progress_bar_set_fraction,
- gtk_progress_bar_set_show_text, gtk_progress_bar_set_text;
- FROM GtkSpinner IMPORT gtk_spinner_new, gtk_spinner_start, gtk_spinner_stop;
- FROM GtkSeparator IMPORT gtk_separator_new;
- FROM GtkImage IMPORT gtk_image_new_from_icon_name;
- FROM GLib IMPORT g_timeout_add, GSourceRemove, GSourceContinue;
- FROM GtkClosures IMPORT Connect2;
- FROM SYSTEM IMPORT ADDRESS;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.Feedback";
- VAR
- progress, spinner: ADDRESS;
- fraction: REAL;
- PROCEDURE OnTick (data: ADDRESS) : INTEGER;
- BEGIN
- fraction := fraction + 0.05;
- IF fraction >= 1.0 THEN
- gtk_progress_bar_set_fraction(progress, 1.0);
- gtk_progress_bar_set_text(progress, "Done");
- gtk_spinner_stop(spinner);
- RETURN GSourceRemove
- ELSE
- gtk_progress_bar_set_fraction(progress, fraction);
- RETURN GSourceContinue
- END
- END OnTick;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box: ADDRESS;
- BEGIN
- fraction := 0.0;
- progress := gtk_progress_bar_new();
- gtk_progress_bar_set_show_text(progress, 1);
- gtk_progress_bar_set_fraction(progress, 0.0);
- spinner := gtk_spinner_new();
- gtk_spinner_start(spinner);
- box := gtk_box_new(GtkVertical, 12);
- gtk_box_set_spacing(box, 12);
- gtk_widget_set_margin_top(box, 14);
- gtk_widget_set_margin_bottom(box, 14);
- gtk_widget_set_margin_start(box, 14);
- gtk_widget_set_margin_end(box, 14);
- gtk_box_append(box, gtk_image_new_from_icon_name("application-x-executable"));
- gtk_box_append(box, progress);
- gtk_box_append(box, gtk_separator_new(GtkHorizontal));
- gtk_box_append(box, spinner);
- window := gtk_application_window_new(application);
- gtk_window_set_title(window, "m2-GTK4 Feedback");
- gtk_window_set_default_size(window, 360, 200);
- gtk_window_set_child(window, box);
- gtk_window_present(window);
- g_timeout_add(100, OnTick, NIL)
- 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;
- Connect2(app, "activate", OnActivate, NIL);
- g_application_run(app, 0, NIL)
- END feedback.
|