1 | #include <gtk/gtk.h> |
2 | |
3 | #include "exampleapp.h" |
4 | #include "exampleappwin.h" |
5 | |
6 | struct _ExampleAppWindow |
7 | { |
8 | GtkApplicationWindow parent; |
9 | |
10 | GtkWidget *stack; |
11 | }; |
12 | |
13 | G_DEFINE_TYPE (ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW) |
14 | |
15 | static void |
16 | example_app_window_init (ExampleAppWindow *win) |
17 | { |
18 | gtk_widget_init_template (GTK_WIDGET (win)); |
19 | } |
20 | |
21 | static void |
22 | example_app_window_class_init (ExampleAppWindowClass *class) |
23 | { |
24 | gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class), |
25 | resource_name: "/org/gtk/exampleapp/window.ui" ); |
26 | gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (class), ExampleAppWindow, stack); |
27 | } |
28 | |
29 | ExampleAppWindow * |
30 | example_app_window_new (ExampleApp *app) |
31 | { |
32 | return g_object_new (EXAMPLE_APP_WINDOW_TYPE, first_property_name: "application" , app, NULL); |
33 | } |
34 | |
35 | void |
36 | example_app_window_open (ExampleAppWindow *win, |
37 | GFile *file) |
38 | { |
39 | char *basename; |
40 | GtkWidget *scrolled, *view; |
41 | char *contents; |
42 | gsize length; |
43 | |
44 | basename = g_file_get_basename (file); |
45 | |
46 | scrolled = gtk_scrolled_window_new (); |
47 | gtk_widget_set_hexpand (widget: scrolled, TRUE); |
48 | gtk_widget_set_vexpand (widget: scrolled, TRUE); |
49 | view = gtk_text_view_new (); |
50 | gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE); |
51 | gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE); |
52 | gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolled), child: view); |
53 | gtk_stack_add_titled (GTK_STACK (win->stack), child: scrolled, name: basename, title: basename); |
54 | |
55 | if (g_file_load_contents (file, NULL, contents: &contents, length: &length, NULL, NULL)) |
56 | { |
57 | GtkTextBuffer *buffer; |
58 | |
59 | buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); |
60 | gtk_text_buffer_set_text (buffer, text: contents, len: length); |
61 | g_free (mem: contents); |
62 | } |
63 | |
64 | g_free (mem: basename); |
65 | } |
66 | |