static GtkWidget * create_text (GtkWidget **view, gboolean is_source) { GtkWidget *scrolled_window; GtkWidget *text_view; scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_NONE); *view = text_view = gtk_text_view_new (); g_object_set (text_view, "left-margin", 20, "right-margin", 20, "top-margin", 20, "bottom-margin", 20, NULL); gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE); gtk_container_add (GTK_CONTAINER (scrolled_window), text_view); if (is_source) { gtk_text_view_set_monospace (GTK_TEXT_VIEW (text_view), TRUE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_NONE); } else { /* Make it a bit nicer for text. */ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_WORD); gtk_text_view_set_pixels_above_lines (GTK_TEXT_VIEW (text_view), 2); gtk_text_view_set_pixels_below_lines (GTK_TEXT_VIEW (text_view), 2); } return scrolled_window; }
static void create_window (void) { GtkWidget *window; GtkWidget *hgrid; GtkWidget *panel_grid; GtkWidget *scrolled_window; GtkWidget *gsv_checkbutton; GtkWidget *tag_set_checkbutton; GtkWidget *tag_checkbutton; GtkSourceView *view; GtkSourceBuffer *buffer; GtkTextTag *tag; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 800, 600); g_signal_connect (window, "destroy", gtk_main_quit, NULL); hgrid = gtk_grid_new (); gtk_orientable_set_orientation (GTK_ORIENTABLE (hgrid), GTK_ORIENTATION_HORIZONTAL); view = GTK_SOURCE_VIEW (gtk_source_view_new ()); g_object_set (view, "expand", TRUE, NULL); gtk_text_view_set_monospace (GTK_TEXT_VIEW (view), TRUE); buffer = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view))); tag = gtk_source_buffer_create_source_tag (buffer, NULL, "draw-spaces", FALSE, NULL); fill_buffer (GTK_TEXT_BUFFER (buffer), tag); gtk_source_view_set_draw_spaces (view, GTK_SOURCE_DRAW_SPACES_ALL); panel_grid = gtk_grid_new (); gtk_orientable_set_orientation (GTK_ORIENTABLE (panel_grid), GTK_ORIENTATION_VERTICAL); gtk_container_add (GTK_CONTAINER (hgrid), panel_grid); gtk_grid_set_row_spacing (GTK_GRID (panel_grid), 6); g_object_set (panel_grid, "margin", 6, NULL); gsv_checkbutton = gtk_check_button_new_with_label ("GtkSourceView draw-spaces"); gtk_container_add (GTK_CONTAINER (panel_grid), gsv_checkbutton); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gsv_checkbutton), TRUE); g_signal_connect (gsv_checkbutton, "toggled", G_CALLBACK (gsv_checkbutton_toggled_cb), view); tag_set_checkbutton = gtk_check_button_new_with_label ("GtkSourceTag draw-spaces-set"); gtk_container_add (GTK_CONTAINER (panel_grid), tag_set_checkbutton); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tag_set_checkbutton), TRUE); g_object_bind_property (tag_set_checkbutton, "active", tag, "draw-spaces-set", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); tag_checkbutton = gtk_check_button_new_with_label ("GtkSourceTag draw-spaces"); gtk_container_add (GTK_CONTAINER (panel_grid), tag_checkbutton); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tag_checkbutton), FALSE); g_object_bind_property (tag_checkbutton, "active", tag, "draw-spaces", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (view)); gtk_container_add (GTK_CONTAINER (hgrid), scrolled_window); gtk_container_add (GTK_CONTAINER (window), hgrid); gtk_widget_show_all (window); }
/** \brief Create textview with scrollbars * * \return GtkScrolledWindow */ static GtkWidget *create_content_widget(void) { GtkWidget *view; GtkWidget *scrolled; GtkTextBuffer *buffer; GtkTextIter iter; GtkTextTag *name_tag; GtkTextTag *inv_tag; GtkTextTag *desc_tag; int num_options = cmdline_get_num_options(); int i; view = gtk_text_view_new(); gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), FALSE); gtk_text_view_set_monospace(GTK_TEXT_VIEW(view), TRUE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR); gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view),16); gtk_text_view_set_right_margin(GTK_TEXT_VIEW(view),16); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); /* name: bold (for -option) */ name_tag = gtk_text_buffer_create_tag(buffer, "name_tag", "weight", PANGO_WEIGHT_BOLD, NULL); /* name: bold and red (for +option) */ inv_tag = gtk_text_buffer_create_tag(buffer, "inv_tag", "weight", PANGO_WEIGHT_BOLD, "foreground", "red", NULL); /* description: indented and sans-serif */ desc_tag = gtk_text_buffer_create_tag(buffer, "desc_tag", "left-margin", 48, "family", "sans-serif", NULL); scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_size_request(scrolled, 800, 600); gtk_container_add(GTK_CONTAINER(scrolled), view); gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0); for (i = 0; i < num_options; i++) { char *name; char *param; char *desc; name = cmdline_options_get_name(i); param = cmdline_options_get_param(i); desc = cmdline_options_get_description(i); if (name[0] == '-') { gtk_text_buffer_insert_with_tags(buffer, &iter, name, -1, name_tag, NULL); } else { gtk_text_buffer_insert_with_tags(buffer, &iter, name, -1, inv_tag, NULL); } if (param != NULL) { gtk_text_buffer_insert(buffer, &iter, " ", -1); gtk_text_buffer_insert(buffer, &iter, param, -1); } gtk_text_buffer_insert(buffer, &iter, "\n", -1); if (desc == NULL) { fprintf(stderr, "no desc for '%s'\n", name); desc = "[DESCRIPTION MISSING]"; } gtk_text_buffer_insert_with_tags(buffer, &iter, desc, -1, desc_tag, NULL); gtk_text_buffer_insert(buffer, &iter, "\n\n", -1); } gtk_widget_show_all(scrolled); return scrolled; }