MODULE sourceview ; (* m2-GTK4 example - a small source-code editor built from GtkSourceView 5: GtkApplicationWindow > GtkScrolledWindow > GtkSourceView driven by a GtkSourceBuffer with the "C" language definition and the "Adwaita" style scheme, line numbers, current-line highlight and a 4-column tab width. Build: make examples Run: ./build/examples/sourceview *) 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 GtkScrolledWindow IMPORT gtk_scrolled_window_new, gtk_scrolled_window_set_child; FROM GtkWidget IMPORT gtk_widget_set_vexpand; FROM GtkTextBuffer IMPORT gtk_text_buffer_set_text; FROM GtkUtils IMPORT Connect; FROM GtkSourceFunctions IMPORT gtk_source_init; FROM GtkSourceBuffer IMPORT gtk_source_buffer_new, gtk_source_buffer_set_language, gtk_source_buffer_set_style_scheme; FROM GtkSourceLanguageManager IMPORT gtk_source_language_manager_get_default, gtk_source_language_manager_get_language; FROM GtkSourceStyleSchemeManager IMPORT gtk_source_style_scheme_manager_get_default, gtk_source_style_scheme_manager_get_scheme; FROM GtkSourceView IMPORT gtk_source_view_new_with_buffer, gtk_source_view_set_show_line_numbers, gtk_source_view_set_highlight_current_line, gtk_source_view_set_tab_width; FROM SYSTEM IMPORT ADDRESS, ADR; FROM libc IMPORT printf; CONST AppId = "org.example.m2gtk4.SourceView"; Sample = "/* hello.c - a tiny C program */\n" + "#include \n" + "\n" + "int main (int argc, char **argv)\n" + "{\n" + " for (int i = 0; i < 3; i++)\n" + " printf ('Hello, GNU Modula-2 + GtkSourceView! (%d)\\n', i);\n" + " return 0;\n" + "}\n"; PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS); VAR window, sw, view, buffer, lang, scheme: ADDRESS; BEGIN buffer := gtk_source_buffer_new(NIL); lang := gtk_source_language_manager_get_language (gtk_source_language_manager_get_default(), "c"); IF lang # NIL THEN gtk_source_buffer_set_language(buffer, lang) END; scheme := gtk_source_style_scheme_manager_get_scheme (gtk_source_style_scheme_manager_get_default(), "Adwaita"); IF scheme # NIL THEN gtk_source_buffer_set_style_scheme(buffer, scheme) END; gtk_text_buffer_set_text(buffer, Sample, -1); view := gtk_source_view_new_with_buffer(buffer); gtk_source_view_set_show_line_numbers(view, 1); gtk_source_view_set_highlight_current_line(view, 1); gtk_source_view_set_tab_width(view, 4); sw := gtk_scrolled_window_new(); gtk_scrolled_window_set_child(sw, view); gtk_widget_set_vexpand(sw, 1); window := gtk_application_window_new(application); gtk_window_set_title(window, "m2-GTK4 - GtkSourceView"); gtk_window_set_default_size(window, 640, 480); gtk_window_set_child(window, sw); gtk_window_present(window) END OnActivate; VAR app: ADDRESS; BEGIN gtk_source_init(); 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 sourceview.