sourceview.mod 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. MODULE sourceview ;
  2. (*
  3. m2-GTK4 example - a small source-code editor built from
  4. GtkSourceView 5:
  5. GtkApplicationWindow > GtkScrolledWindow > GtkSourceView
  6. driven by a GtkSourceBuffer with the "C" language definition and
  7. the "Adwaita" style scheme, line numbers, current-line highlight
  8. and a 4-column tab width.
  9. Build: make examples
  10. Run: ./build/examples/sourceview
  11. *)
  12. FROM Gio IMPORT g_application_run;
  13. FROM GtkApplication IMPORT gtk_application_new;
  14. FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
  15. gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
  16. FROM GtkScrolledWindow IMPORT gtk_scrolled_window_new,
  17. gtk_scrolled_window_set_child;
  18. FROM GtkWidget IMPORT gtk_widget_set_vexpand;
  19. FROM GtkTextBuffer IMPORT gtk_text_buffer_set_text;
  20. FROM GtkUtils IMPORT Connect;
  21. FROM GtkSourceFunctions IMPORT gtk_source_init;
  22. FROM GtkSourceBuffer IMPORT gtk_source_buffer_new,
  23. gtk_source_buffer_set_language, gtk_source_buffer_set_style_scheme;
  24. FROM GtkSourceLanguageManager IMPORT gtk_source_language_manager_get_default,
  25. gtk_source_language_manager_get_language;
  26. FROM GtkSourceStyleSchemeManager IMPORT
  27. gtk_source_style_scheme_manager_get_default,
  28. gtk_source_style_scheme_manager_get_scheme;
  29. FROM GtkSourceView IMPORT gtk_source_view_new_with_buffer,
  30. gtk_source_view_set_show_line_numbers,
  31. gtk_source_view_set_highlight_current_line, gtk_source_view_set_tab_width;
  32. FROM SYSTEM IMPORT ADDRESS, ADR;
  33. FROM libc IMPORT printf;
  34. CONST
  35. AppId = "org.example.m2gtk4.SourceView";
  36. Sample =
  37. "/* hello.c - a tiny C program */\n" +
  38. "#include <stdio.h>\n" +
  39. "\n" +
  40. "int main (int argc, char **argv)\n" +
  41. "{\n" +
  42. " for (int i = 0; i < 3; i++)\n" +
  43. " printf ('Hello, GNU Modula-2 + GtkSourceView! (%d)\\n', i);\n" +
  44. " return 0;\n" +
  45. "}\n";
  46. PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
  47. VAR
  48. window, sw, view, buffer, lang, scheme: ADDRESS;
  49. BEGIN
  50. buffer := gtk_source_buffer_new(NIL);
  51. lang := gtk_source_language_manager_get_language
  52. (gtk_source_language_manager_get_default(), "c");
  53. IF lang # NIL THEN
  54. gtk_source_buffer_set_language(buffer, lang)
  55. END;
  56. scheme := gtk_source_style_scheme_manager_get_scheme
  57. (gtk_source_style_scheme_manager_get_default(), "Adwaita");
  58. IF scheme # NIL THEN
  59. gtk_source_buffer_set_style_scheme(buffer, scheme)
  60. END;
  61. gtk_text_buffer_set_text(buffer, Sample, -1);
  62. view := gtk_source_view_new_with_buffer(buffer);
  63. gtk_source_view_set_show_line_numbers(view, 1);
  64. gtk_source_view_set_highlight_current_line(view, 1);
  65. gtk_source_view_set_tab_width(view, 4);
  66. sw := gtk_scrolled_window_new();
  67. gtk_scrolled_window_set_child(sw, view);
  68. gtk_widget_set_vexpand(sw, 1);
  69. window := gtk_application_window_new(application);
  70. gtk_window_set_title(window, "m2-GTK4 - GtkSourceView");
  71. gtk_window_set_default_size(window, 640, 480);
  72. gtk_window_set_child(window, sw);
  73. gtk_window_present(window)
  74. END OnActivate;
  75. VAR
  76. app: ADDRESS;
  77. BEGIN
  78. gtk_source_init();
  79. app := gtk_application_new(AppId, 0);
  80. IF app = NIL THEN
  81. printf("gtk_application_new failed\n");
  82. HALT(1)
  83. END;
  84. Connect(app, "activate", ADR(OnActivate), NIL);
  85. g_application_run(app, 0, NIL)
  86. END sourceview.