| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- MODULE test_inputs2 ;
- (*
- m2-GTK4 test - second batch of input widgets: GtkSpinButton,
- GtkSearchEntry, GtkDropDown (+ GtkStringList/GListModel) and
- GtkTextView + GtkTextBuffer, including the opaque GtkTextIter that is
- marshalled by address. 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, GtkWrapWordChar;
- FROM GtkSpinButton IMPORT gtk_spin_button_new_with_range,
- gtk_spin_button_set_value, gtk_spin_button_get_value,
- gtk_spin_button_get_value_as_int, gtk_spin_button_set_wrap,
- gtk_spin_button_get_wrap, gtk_spin_button_set_numeric,
- gtk_spin_button_get_numeric, gtk_spin_button_spin, GtkSpinUserDefined;
- FROM GtkSearchEntry IMPORT gtk_search_entry_new,
- gtk_search_entry_set_placeholder_text,
- gtk_search_entry_get_placeholder_text;
- FROM GtkStringList IMPORT gtk_string_list_new, gtk_string_list_append,
- gtk_string_list_get_string;
- FROM GtkDropDown IMPORT gtk_drop_down_new, gtk_drop_down_set_selected,
- gtk_drop_down_get_selected, gtk_drop_down_get_model,
- gtk_drop_down_set_enable_search, gtk_drop_down_get_enable_search;
- FROM GListModel IMPORT g_list_model_get_n_items;
- FROM GtkTextBuffer IMPORT gtk_text_buffer_new, gtk_text_buffer_set_text,
- gtk_text_buffer_get_text, gtk_text_buffer_get_bounds,
- gtk_text_buffer_get_char_count, gtk_text_buffer_get_line_count,
- gtk_text_buffer_get_modified, gtk_text_buffer_set_modified;
- FROM GtkTextIter IMPORT GtkTextIter;
- FROM GtkTextView IMPORT gtk_text_view_new_with_buffer,
- gtk_text_view_get_buffer, gtk_text_view_set_wrap_mode,
- gtk_text_view_get_wrap_mode, gtk_text_view_set_monospace,
- gtk_text_view_get_monospace, gtk_text_view_set_editable,
- gtk_text_view_get_editable;
- FROM GLib IMPORT g_free;
- FROM GtkUtils IMPORT Connect, CStrToM2;
- FROM SYSTEM IMPORT ADDRESS, ADR;
- FROM libc IMPORT printf;
- CONST
- AppId = "org.example.m2gtk4.TestInputs2";
- VAR
- app: ADDRESS;
- passed: BOOLEAN;
- temp: ADDRESS;
- PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
- VAR
- window, box, spin, search, dd, list, view, buffer: ADDRESS;
- start, stop: GtkTextIter;
- buf: ARRAY [0..63] OF CHAR;
- ok: BOOLEAN;
- BEGIN
- ok := TRUE;
- (* --- GtkSpinButton --- *)
- spin := gtk_spin_button_new_with_range(0.0, 100.0, 1.0);
- gtk_spin_button_set_value(spin, 42.0);
- IF ABS(gtk_spin_button_get_value(spin) - 42.0) > 0.001 THEN
- printf("spin value wrong\n");
- ok := FALSE
- END;
- IF gtk_spin_button_get_value_as_int(spin) # 42 THEN
- printf("spin int wrong\n");
- ok := FALSE
- END;
- gtk_spin_button_set_wrap(spin, 1);
- IF gtk_spin_button_get_wrap(spin) # 1 THEN ok := FALSE END;
- gtk_spin_button_set_numeric(spin, 1);
- IF gtk_spin_button_get_numeric(spin) # 1 THEN ok := FALSE END;
- gtk_spin_button_spin(spin, GtkSpinUserDefined, 5.0);
- IF ABS(gtk_spin_button_get_value(spin) - 47.0) > 0.001 THEN
- printf("spin step wrong\n");
- ok := FALSE
- END;
- (* --- GtkSearchEntry --- *)
- search := gtk_search_entry_new();
- gtk_search_entry_set_placeholder_text(search, "look for it");
- CStrToM2(gtk_search_entry_get_placeholder_text(search), buf);
- IF (buf[0] # 'l') OR (buf[11] # 0C) THEN
- printf("search placeholder wrong: [%s]\n", buf);
- ok := FALSE
- END;
- (* --- GtkDropDown + GtkStringList + GListModel --- *)
- list := gtk_string_list_new(NIL);
- gtk_string_list_append(list, "alpha");
- gtk_string_list_append(list, "beta");
- gtk_string_list_append(list, "gamma");
- IF g_list_model_get_n_items(list) # 3 THEN
- printf("string list size wrong\n");
- ok := FALSE
- END;
- CStrToM2(gtk_string_list_get_string(list, 1), buf);
- IF (buf[0] # 'b') OR (buf[4] # 0C) THEN
- printf("string list item wrong: [%s]\n", buf);
- ok := FALSE
- END;
- dd := gtk_drop_down_new(list, NIL);
- IF gtk_drop_down_get_model(dd) # list THEN ok := FALSE END;
- IF gtk_drop_down_get_selected(dd) # 0 THEN ok := FALSE END;
- gtk_drop_down_set_selected(dd, 2);
- IF gtk_drop_down_get_selected(dd) # 2 THEN
- printf("dropdown selection wrong\n");
- ok := FALSE
- END;
- gtk_drop_down_set_enable_search(dd, 1);
- IF gtk_drop_down_get_enable_search(dd) # 1 THEN ok := FALSE END;
- (* --- GtkTextBuffer + GtkTextView + GtkTextIter --- *)
- buffer := gtk_text_buffer_new(NIL);
- gtk_text_buffer_set_text(buffer, "hello", -1);
- IF gtk_text_buffer_get_char_count(buffer) # 5 THEN
- printf("buffer char count wrong\n");
- ok := FALSE
- END;
- IF gtk_text_buffer_get_line_count(buffer) # 1 THEN ok := FALSE END;
- gtk_text_buffer_get_bounds(buffer, start, stop);
- temp := gtk_text_buffer_get_text(buffer, start, stop, 0);
- CStrToM2(temp, buf);
- g_free(temp);
- IF (buf[0] # 'h') OR (buf[4] # 'o') OR (buf[5] # 0C) THEN
- printf("buffer text wrong: [%s]\n", buf);
- ok := FALSE
- END;
- gtk_text_buffer_set_modified(buffer, 0);
- IF gtk_text_buffer_get_modified(buffer) # 0 THEN ok := FALSE END;
- view := gtk_text_view_new_with_buffer(buffer);
- IF gtk_text_view_get_buffer(view) # buffer THEN
- printf("view buffer wrong\n");
- ok := FALSE
- END;
- gtk_text_view_set_wrap_mode(view, GtkWrapWordChar);
- IF gtk_text_view_get_wrap_mode(view) # GtkWrapWordChar THEN
- printf("wrap mode wrong\n");
- ok := FALSE
- END;
- gtk_text_view_set_monospace(view, 1);
- IF gtk_text_view_get_monospace(view) # 1 THEN ok := FALSE END;
- gtk_text_view_set_editable(view, 0);
- IF gtk_text_view_get_editable(view) # 0 THEN ok := FALSE END;
- box := gtk_box_new(GtkVertical, 4);
- gtk_box_append(box, spin);
- gtk_box_append(box, search);
- gtk_box_append(box, dd);
- gtk_box_append(box, view);
- 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_inputs2: 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_inputs2: PASS\n");
- HALT(0)
- ELSE
- printf("test_inputs2: FAIL\n");
- HALT(1)
- END
- END test_inputs2.
|