|
|
@@ -0,0 +1,126 @@
|
|
|
+MODULE test_utility ;
|
|
|
+
|
|
|
+(*
|
|
|
+ m2-GTK4 test - small utility/feedback widgets: GtkAdjustment,
|
|
|
+ GtkProgressBar, GtkSpinner, GtkSeparator and GtkImage.
|
|
|
+ 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, GtkHorizontal;
|
|
|
+FROM GtkAdjustment IMPORT gtk_adjustment_new, gtk_adjustment_get_value,
|
|
|
+ gtk_adjustment_set_value, gtk_adjustment_get_lower, gtk_adjustment_get_upper,
|
|
|
+ gtk_adjustment_set_upper, gtk_adjustment_get_step_increment,
|
|
|
+ gtk_adjustment_get_page_increment, gtk_adjustment_get_page_size,
|
|
|
+ gtk_adjustment_clamp_page;
|
|
|
+FROM GtkProgressBar IMPORT gtk_progress_bar_new, gtk_progress_bar_set_fraction,
|
|
|
+ gtk_progress_bar_get_fraction, gtk_progress_bar_set_show_text,
|
|
|
+ gtk_progress_bar_get_show_text, gtk_progress_bar_set_text,
|
|
|
+ gtk_progress_bar_get_text, gtk_progress_bar_pulse;
|
|
|
+FROM GtkSpinner IMPORT gtk_spinner_new, gtk_spinner_start, gtk_spinner_stop,
|
|
|
+ gtk_spinner_set_spinning, gtk_spinner_get_spinning;
|
|
|
+FROM GtkSeparator IMPORT gtk_separator_new;
|
|
|
+FROM GtkImage IMPORT gtk_image_new_from_icon_name, gtk_image_get_icon_name;
|
|
|
+FROM GtkUtils IMPORT Connect, CStrToM2;
|
|
|
+FROM SYSTEM IMPORT ADDRESS, ADR;
|
|
|
+FROM libc IMPORT printf;
|
|
|
+
|
|
|
+CONST
|
|
|
+ AppId = "org.example.m2gtk4.TestUtility";
|
|
|
+
|
|
|
+VAR
|
|
|
+ app: ADDRESS;
|
|
|
+ passed: BOOLEAN;
|
|
|
+
|
|
|
+PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
|
|
|
+VAR
|
|
|
+ window, box, adj, pbar, spinner, sep, image: ADDRESS;
|
|
|
+ buf: ARRAY [0..63] OF CHAR;
|
|
|
+ ok: BOOLEAN;
|
|
|
+BEGIN
|
|
|
+ ok := TRUE;
|
|
|
+
|
|
|
+ (* --- GtkAdjustment --- *)
|
|
|
+ adj := gtk_adjustment_new(5.0, 0.0, 100.0, 1.0, 10.0, 20.0);
|
|
|
+ IF ABS(gtk_adjustment_get_value(adj) - 5.0) > 0.001 THEN ok := FALSE END;
|
|
|
+ IF ABS(gtk_adjustment_get_lower(adj) - 0.0) > 0.001 THEN ok := FALSE END;
|
|
|
+ IF ABS(gtk_adjustment_get_upper(adj) - 100.0) > 0.001 THEN ok := FALSE END;
|
|
|
+ IF ABS(gtk_adjustment_get_step_increment(adj) - 1.0) > 0.001 THEN ok := FALSE END;
|
|
|
+ IF ABS(gtk_adjustment_get_page_increment(adj) - 10.0) > 0.001 THEN ok := FALSE END;
|
|
|
+ IF ABS(gtk_adjustment_get_page_size(adj) - 20.0) > 0.001 THEN ok := FALSE END;
|
|
|
+ gtk_adjustment_set_value(adj, 50.0);
|
|
|
+ IF ABS(gtk_adjustment_get_value(adj) - 50.0) > 0.001 THEN
|
|
|
+ printf("adjustment value wrong\n"); ok := FALSE
|
|
|
+ END;
|
|
|
+ gtk_adjustment_set_upper(adj, 200.0);
|
|
|
+ IF ABS(gtk_adjustment_get_upper(adj) - 200.0) > 0.001 THEN ok := FALSE END;
|
|
|
+ gtk_adjustment_clamp_page(adj, 0.0, 30.0);
|
|
|
+
|
|
|
+ (* --- GtkProgressBar --- *)
|
|
|
+ pbar := gtk_progress_bar_new();
|
|
|
+ gtk_progress_bar_set_fraction(pbar, 0.25);
|
|
|
+ IF ABS(gtk_progress_bar_get_fraction(pbar) - 0.25) > 0.001 THEN
|
|
|
+ printf("progress fraction wrong\n"); ok := FALSE
|
|
|
+ END;
|
|
|
+ gtk_progress_bar_set_show_text(pbar, 1);
|
|
|
+ IF gtk_progress_bar_get_show_text(pbar) # 1 THEN ok := FALSE END;
|
|
|
+ gtk_progress_bar_set_text(pbar, "25 percent");
|
|
|
+ CStrToM2(gtk_progress_bar_get_text(pbar), buf);
|
|
|
+ IF (buf[0] # '2') OR (buf[10] # 0C) THEN
|
|
|
+ printf("progress text wrong: [%s]\n", buf); ok := FALSE
|
|
|
+ END;
|
|
|
+ gtk_progress_bar_pulse(pbar);
|
|
|
+
|
|
|
+ (* --- GtkSpinner --- *)
|
|
|
+ spinner := gtk_spinner_new();
|
|
|
+ gtk_spinner_start(spinner);
|
|
|
+ IF gtk_spinner_get_spinning(spinner) # 1 THEN ok := FALSE END;
|
|
|
+ gtk_spinner_stop(spinner);
|
|
|
+ IF gtk_spinner_get_spinning(spinner) # 0 THEN ok := FALSE END;
|
|
|
+ gtk_spinner_set_spinning(spinner, 1);
|
|
|
+ IF gtk_spinner_get_spinning(spinner) # 1 THEN ok := FALSE END;
|
|
|
+
|
|
|
+ (* --- GtkSeparator / GtkImage --- *)
|
|
|
+ sep := gtk_separator_new(GtkHorizontal);
|
|
|
+ IF sep = NIL THEN printf("separator NIL\n"); ok := FALSE END;
|
|
|
+ image := gtk_image_new_from_icon_name("open-menu-symbolic");
|
|
|
+ CStrToM2(gtk_image_get_icon_name(image), buf);
|
|
|
+ IF (buf[0] # 'o') OR (buf[18] # 0C) THEN
|
|
|
+ printf("image icon name wrong: [%s]\n", buf); ok := FALSE
|
|
|
+ END;
|
|
|
+
|
|
|
+ box := gtk_box_new(GtkVertical, 6);
|
|
|
+ gtk_box_append(box, pbar);
|
|
|
+ gtk_box_append(box, spinner);
|
|
|
+ gtk_box_append(box, sep);
|
|
|
+ gtk_box_append(box, image);
|
|
|
+ window := gtk_application_window_new(application);
|
|
|
+ gtk_window_set_child(window, box);
|
|
|
+
|
|
|
+ passed := ok;
|
|
|
+ g_application_quit(application)
|
|
|
+END OnActivate;
|
|
|
+
|
|
|
+VAR
|
|
|
+ rc: INTEGER;
|
|
|
+BEGIN
|
|
|
+ passed := FALSE;
|
|
|
+ app := gtk_application_new(AppId, 0);
|
|
|
+ IF app = NIL THEN
|
|
|
+ printf("test_utility: 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_utility: PASS\n");
|
|
|
+ HALT(0)
|
|
|
+ ELSE
|
|
|
+ printf("test_utility: FAIL\n");
|
|
|
+ HALT(1)
|
|
|
+ END
|
|
|
+END test_utility.
|