static GtkTreeModel* create_style_model (GSettings* settings, GtkTreeIter** current) { GtkListStore* model = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); GtkSourceStyleSchemeManager* manager = gtk_source_style_scheme_manager_get_default(); const gchar* const *styles = gtk_source_style_scheme_manager_get_scheme_ids (manager); const gchar* const *style; gchar* current_style = g_settings_get_string (settings, SOURCEVIEW_STYLE); *current = NULL; for (style = styles; *style != NULL; style++) { GtkTreeIter iter; GtkSourceStyleScheme* scheme = gtk_source_style_scheme_manager_get_scheme (manager, *style); const gchar* id = gtk_source_style_scheme_get_id (scheme); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, COLUMN_NAME, gtk_source_style_scheme_get_name (scheme), COLUMN_DESC, gtk_source_style_scheme_get_description (scheme), COLUMN_ID, id, -1); if (current_style && g_str_equal (id, current_style)) { *current = gtk_tree_iter_copy (&iter); } } g_free (current_style); return GTK_TREE_MODEL (model); }
/* Helper function: enumeration callback for each color scheme */ static void store_color_scheme(GtkSourceStyleScheme *scheme, GtkListStore *list) { const char *id = gtk_source_style_scheme_get_id(scheme); const char *name = gtk_source_style_scheme_get_name(scheme); const char *description = gtk_source_style_scheme_get_description(scheme); /* We pick up system color schemes as well. These won't have translations in the gnome-inform7 domain, so if we can't get a translation then we try it again in GtkSourceView's translation domain. */ const char *try_name = gettext(name); if (try_name == name) { /* Pointer equality, not strcmp */ char *save_domain = g_strdup(textdomain(NULL)); textdomain(DOMAIN_FOR_GTKSOURCEVIEW_COLOR_SCHEMES); bind_textdomain_codeset(DOMAIN_FOR_GTKSOURCEVIEW_COLOR_SCHEMES, "UTF-8"); name = gettext(name); description = gettext(description); textdomain(save_domain); g_free(save_domain); } else { name = try_name; description = gettext(description); } GtkTreeIter iter; gtk_list_store_append(list, &iter); gtk_list_store_set(list, &iter, ID_COLUMN, id, NAME_COLUMN, name, DESC_COLUMN, description, -1); }
void Gobby::PreferencesDialog::Appearance::on_scheme_changed( Preferences& preferences) { Gtk::TreeIter iter = m_scheme_tree->get_selection()->get_selected(); GtkSourceStyleScheme* scheme = (*iter)[m_scheme_columns.scheme]; preferences.appearance.scheme_id = gtk_source_style_scheme_get_id(scheme); }
/* Helper function: enumeration callback for each color scheme */ static void store_color_scheme(GtkSourceStyleScheme *scheme, GtkListStore *list) { const char *id = gtk_source_style_scheme_get_id(scheme); const char *name = gtk_source_style_scheme_get_name(scheme); const char *description = gtk_source_style_scheme_get_description(scheme); GtkTreeIter iter; gtk_list_store_append(list, &iter); gtk_list_store_set(list, &iter, ID_COLUMN, id, NAME_COLUMN, name, DESC_COLUMN, description, -1); }
void prefsgui_apply_style_scheme(GuPrefsGui* prefs) { const gchar* scheme = config_get_value("style_scheme"); GList* schemes = editor_list_style_scheme_sorted(); GList* schemes_iter = schemes; GList* tab = gummi->tabmanager->tabs; gint column = 0; GtkTreePath* treepath; while (schemes_iter) { if (STR_EQU(gtk_source_style_scheme_get_id(schemes_iter->data), scheme)) { gchar* path = g_strdup_printf("%d", column); treepath = gtk_tree_path_new_from_string(path); gtk_tree_view_set_cursor(prefs->styleschemes_treeview, treepath, NULL, FALSE); gtk_tree_path_free(treepath); g_free(path); break; } ++column; schemes_iter = g_list_next(schemes_iter); } g_list_free(schemes); if (schemes && !schemes_iter) { treepath = gtk_tree_path_new_from_string("0"); gtk_tree_view_set_cursor(prefs->styleschemes_treeview, treepath, NULL, FALSE); gtk_tree_path_free(treepath); while (tab) { editor_set_style_scheme_by_id(GU_TAB_CONTEXT(tab->data)->editor, "classic"); tab = g_list_next(tab); } } }
/** * i7_app_install_color_scheme: * @self: the app * @file: a #GFile reference to the color scheme to be installed * * Install a new user color scheme. * * This function copies @file into the user color scheme directory and asks the * style manager to recompute the list of available style schemes. It then * checks if a style scheme with the right file name exists. * * Return value: (allow-none): the id of the installed scheme, %NULL on error. */ const char * i7_app_install_color_scheme(I7App *self, GFile *file) { I7_APP_USE_PRIVATE(self, priv); GFile *new_file = NULL; GError *error = NULL; gboolean copied = FALSE; g_return_val_if_fail(file != NULL, NULL); GFile *styles_dir = get_user_styles_dir(); if(!g_file_has_parent(file, styles_dir)) { /* Make sure USER_STYLES_DIR exists */ if(!make_directory_unless_exists(styles_dir, NULL, &error)) { g_object_unref(styles_dir); WARN(_("Cannot create user styles directory"), error); g_error_free(error); return NULL; } char *basename = g_file_get_basename(file); new_file = g_file_get_child(styles_dir, basename); g_free(basename); /* Copy the style scheme file into USER_STYLES_DIR */ if(!g_file_copy(file, new_file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &error)) { g_object_unref(new_file); g_object_unref(styles_dir); WARN(_("Cannot install style scheme"), error); g_error_free(error); return NULL; } copied = TRUE; } else new_file = g_object_ref(file); g_object_unref(styles_dir); /* Reload the available style schemes */ gtk_source_style_scheme_manager_force_rescan(priv->color_scheme_manager); /* Check the new style scheme has been actually installed */ const char * const *ids = gtk_source_style_scheme_manager_get_scheme_ids(priv->color_scheme_manager); while(*ids != NULL) { GtkSourceStyleScheme *scheme = gtk_source_style_scheme_manager_get_scheme(priv->color_scheme_manager, *ids); const gchar *filename = gtk_source_style_scheme_get_filename(scheme); char *new_path = g_file_get_path(new_file); if(filename && (strcmp(filename, new_path) == 0)) { /* The style scheme has been correctly installed */ g_object_unref(new_file); g_free(new_path); return gtk_source_style_scheme_get_id(scheme); } ++ids; } /* The style scheme has not been correctly installed */ if(copied) g_file_delete(new_file, NULL, NULL); /* ignore error */ g_object_unref(new_file); return NULL; }
Gobby::PreferencesDialog::Appearance::Appearance(Preferences& preferences): m_group_toolbar(_("Toolbar") ), m_group_font(_("Font") ), m_group_scheme(_("Color Scheme")), m_cmb_toolbar_style(preferences.appearance.toolbar_style), m_conn_font(m_btn_font, preferences.appearance.font), m_list(Gtk::ListStore::create(m_columns)), m_tree(m_list) { const Pango::FontDescription& font = preferences.appearance.font; m_cmb_toolbar_style.add(_("Show text only"), Gtk::TOOLBAR_TEXT); m_cmb_toolbar_style.add(_("Show icons only"), Gtk::TOOLBAR_ICONS); m_cmb_toolbar_style.add(_("Show both icons and text"), Gtk::TOOLBAR_BOTH ); m_cmb_toolbar_style.add(_("Show text besides icons"), Gtk::TOOLBAR_BOTH_HORIZ ); m_cmb_toolbar_style.show(); m_conn_font.block(); m_btn_font.set_font_name(font.to_string()); m_btn_font.show(); m_conn_font.unblock(); m_group_toolbar.add(m_cmb_toolbar_style); m_group_toolbar.show(); m_group_font.add(m_btn_font); m_group_font.show(); Gtk::TreeViewColumn column_name; Gtk::CellRendererText renderer_name; column_name.pack_start(renderer_name, false); column_name.add_attribute(renderer_name.property_text(), m_columns.name); m_tree.append_column(column_name);//"Scheme Name", m_columns.name); m_tree.append_column("Scheme description", m_columns.description); Pango::AttrList list; Pango::Attribute attr(Pango::Attribute::create_attr_weight(Pango::WEIGHT_BOLD)); list.insert(attr); renderer_name.property_attributes() = list; m_tree.set_headers_visible(false); m_tree.show(); Gtk::ScrolledWindow* scroll = Gtk::manage(new Gtk::ScrolledWindow); scroll->set_shadow_type(Gtk::SHADOW_IN); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); scroll->add(m_tree); scroll->show(); m_group_scheme.add(*scroll); m_group_scheme.show(); GtkSourceStyleSchemeManager* manager = gtk_source_style_scheme_manager_get_default(); const gchar* const* ids = gtk_source_style_scheme_manager_get_scheme_ids(manager); Glib::ustring current_scheme = preferences.appearance.scheme_id; for (const gchar* const* id = ids; *id != NULL; ++id) { GtkSourceStyleScheme* scheme = gtk_source_style_scheme_manager_get_scheme(manager, *id); const gchar* name = gtk_source_style_scheme_get_name(scheme); const gchar* desc = gtk_source_style_scheme_get_description(scheme); Gtk::TreeIter iter = m_list->append(); (*iter)[m_columns.name] = name; (*iter)[m_columns.description] = desc; (*iter)[m_columns.scheme] = scheme; if (current_scheme == gtk_source_style_scheme_get_id(scheme)) m_tree.get_selection()->select(iter); } m_tree.get_selection()->signal_changed().connect( sigc::bind( sigc::mem_fun(*this, &Appearance::on_scheme_changed), sigc::ref(preferences))); #ifdef USE_GTKMM3 m_list->set_sort_column(m_columns.name, Gtk::SORT_ASCENDING); #else m_list->set_sort_column_id(m_columns.name, Gtk::SORT_ASCENDING); #endif add(m_group_toolbar, false); add(m_group_font, false); add(m_group_scheme, true); }
Gobby::PreferencesDialog::Appearance::Appearance( const Glib::RefPtr<Gtk::Builder>& builder, Preferences& preferences) : m_scheme_list(Gtk::ListStore::create(m_scheme_columns)) { builder->get_widget_derived("toolbar-style", m_cmb_toolbar_style); builder->get_widget("font", m_btn_font); builder->get_widget("color-scheme-treeview", m_scheme_tree); const Pango::FontDescription& font = preferences.appearance.font; m_cmb_toolbar_style->set_option(preferences.appearance.toolbar_style); m_cmb_toolbar_style->add(_("Show text only"), Gtk::TOOLBAR_TEXT); m_cmb_toolbar_style->add(_("Show icons only"), Gtk::TOOLBAR_ICONS); m_cmb_toolbar_style->add(_("Show both icons and text"), Gtk::TOOLBAR_BOTH ); m_cmb_toolbar_style->add(_("Show text besides icons"), Gtk::TOOLBAR_BOTH_HORIZ ); m_btn_font->set_font_name(font.to_string()); m_conn_font.reset(new FontConnection( *m_btn_font, preferences.appearance.font)); Gtk::TreeViewColumn column_name; Gtk::CellRendererText renderer_name; column_name.pack_start(renderer_name, false); column_name.add_attribute(renderer_name.property_text(), m_scheme_columns.name); Pango::AttrList list; Pango::Attribute attr(Pango::Attribute::create_attr_weight( Pango::WEIGHT_BOLD)); list.insert(attr); renderer_name.property_attributes() = list; m_scheme_tree->append_column(column_name); m_scheme_tree->append_column(_("Scheme Description"), m_scheme_columns.description); m_scheme_tree->set_model(m_scheme_list); // Populate scheme list GtkSourceStyleSchemeManager* manager = gtk_source_style_scheme_manager_get_default(); const gchar* const* ids = gtk_source_style_scheme_manager_get_scheme_ids(manager); const Glib::ustring current_scheme = preferences.appearance.scheme_id; for (const gchar* const* id = ids; *id != NULL; ++id) { GtkSourceStyleScheme* scheme = gtk_source_style_scheme_manager_get_scheme( manager, *id); const gchar* name = gtk_source_style_scheme_get_name(scheme); const gchar* desc = gtk_source_style_scheme_get_description(scheme); Gtk::TreeIter iter = m_scheme_list->append(); (*iter)[m_scheme_columns.name] = name; (*iter)[m_scheme_columns.description] = desc; (*iter)[m_scheme_columns.scheme] = scheme; if (current_scheme == gtk_source_style_scheme_get_id(scheme)) m_scheme_tree->get_selection()->select(iter); } m_scheme_tree->get_selection()->signal_changed().connect( sigc::bind( sigc::mem_fun(*this, &Appearance::on_scheme_changed), sigc::ref(preferences))); m_scheme_list->set_sort_column(m_scheme_columns.name, Gtk::SORT_ASCENDING); }
GuPrefsGui* prefsgui_init(GtkWindow* mainwindow) { GuPrefsGui* p = g_new0(GuPrefsGui, 1); GtkBuilder* builder = gtk_builder_new(); gchar* ui = g_build_filename(GUMMI_DATA, "ui", "prefs.glade", NULL); gtk_builder_add_from_file(builder, ui, NULL); gtk_builder_set_translation_domain(builder, PACKAGE); g_free(ui); p->prefwindow = GTK_WIDGET(gtk_builder_get_object(builder, "prefwindow")); p->notebook = GTK_NOTEBOOK(gtk_builder_get_object(builder, "notebook1")); p->textwrap_button = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "textwrapping")); p->wordwrap_button = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "wordwrapping")); p->line_numbers = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "line_numbers")); p->highlighting = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "highlighting")); p->tabwidth = GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "tabwidth")); p->spaces_instof_tabs = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "spaces_instof_tabs")); p->autoindentation = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "autoindentation")); p->autosaving = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "autosaving")); p->compile_status = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "compile_status")); p->autosave_timer = GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "autosave_timer")); p->combo_languages = GTK_COMBO_BOX_TEXT(gtk_builder_get_object(builder, "combo_languages")); p->styleschemes_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "styleschemes_treeview")); p->list_styleschemes = GTK_LIST_STORE(gtk_builder_get_object(builder, "list_styleschemes")); p->default_textview = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "default_textview")); p->default_buffer = gtk_text_view_get_buffer(p->default_textview); p->editor_font = GTK_FONT_BUTTON(gtk_builder_get_object(builder, "editor_font")); p->compile_scheme = GTK_COMBO_BOX(gtk_builder_get_object(builder, "combo_compilescheme")); p->compile_timer = GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "compile_timer")); p->autoexport = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "auto_export")); p->typ_pdflatex = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "typ_pdflatex")); p->typ_xelatex = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "typ_xelatex")); p->typ_rubber = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "typ_rubber")); p->typ_latexmk = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "typ_latexmk")); p->method_texpdf = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "method_texpdf")); p->method_texdvipdf = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "method_texdvipdf")); p->method_texdvipspdf = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "method_texdvipspdf")); p->opt_shellescape = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "opt_shellescape")); p->opt_synctex = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "opt_synctex")); p->combo_animated_scroll = GTK_COMBO_BOX(gtk_builder_get_object(builder, "combo_animated_scroll")); p->spin_cache_size = GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "spin_cache_size")); p->view_box = GTK_BOX(gtk_builder_get_object(builder, "view_box")); p->editor_box = GTK_BOX(gtk_builder_get_object(builder, "editor_box")); p->compile_box = GTK_BOX(gtk_builder_get_object(builder, "compile_box")); gtk_window_set_transient_for(GTK_WINDOW(p->prefwindow), mainwindow); #ifdef USE_GTKSPELL /* list available languages */ if (g_file_test( g_find_program_in_path("enchant-lsmod"), G_FILE_TEST_EXISTS)) { Tuple2 pret = utils_popen_r("enchant-lsmod -list-dicts", NULL); if (pret.second != NULL) { gchar** output = g_strsplit((gchar*)pret.second, "\n", BUFSIZ); gchar** elems = NULL; int i; for (i = 0; output[i] != NULL; i++) { elems = g_strsplit(output[i], " ", BUFSIZ); if (elems[0] != NULL) { gtk_combo_box_text_append_text(p->combo_languages, elems[0]); } } g_strfreev(output); g_strfreev(elems); } gtk_combo_box_set_active(GTK_COMBO_BOX(p->combo_languages), 0); g_free((gchar*)pret.second); } #else /* desensitise gtkspell related GUI elements if not used */ GtkWidget* box = GTK_WIDGET( gtk_builder_get_object(builder, "box_spellcheck")); gtk_widget_set_sensitive(box, FALSE); #endif GList* schemes = editor_list_style_scheme_sorted(); GList* schemes_iter = schemes; gchar* desc = NULL; GtkTreeIter iter; while (schemes_iter) { desc = g_markup_printf_escaped("<b>%s</b> - %s", gtk_source_style_scheme_get_name(schemes_iter->data), gtk_source_style_scheme_get_description(schemes_iter->data)); gtk_list_store_append(p->list_styleschemes, &iter); gtk_list_store_set(p->list_styleschemes, &iter, 0, desc, 1, gtk_source_style_scheme_get_id(schemes_iter->data), -1); schemes_iter = g_list_next(schemes_iter); g_free(desc); } g_list_free(schemes); gtk_builder_connect_signals(builder, NULL); return p; }
/** * _pluma_style_scheme_manager_install_scheme: * @manager: a #GtkSourceStyleSchemeManager * @fname: the file name of the style scheme to be installed * * Install a new user scheme. * This function copies @fname in #PLUMA_STYLES_DIR and ask the style manager to * recompute the list of available style schemes. It then checks if a style * scheme with the right file name exists. * * If the call was succesful, it returns the id of the installed scheme * otherwise %NULL. * * Return value: the id of the installed scheme, %NULL otherwise. */ const gchar * _pluma_style_scheme_manager_install_scheme (GtkSourceStyleSchemeManager *manager, const gchar *fname) { gchar *new_file_name = NULL; gchar *dirname; gchar *styles_dir; GError *error = NULL; gboolean copied = FALSE; const gchar* const *ids; g_return_val_if_fail (GTK_IS_SOURCE_STYLE_SCHEME_MANAGER (manager), NULL); g_return_val_if_fail (fname != NULL, NULL); dirname = g_path_get_dirname (fname); styles_dir = get_pluma_styles_path(); if (strcmp (dirname, styles_dir) != 0) { gchar *basename; basename = g_path_get_basename (fname); new_file_name = g_build_filename (styles_dir, basename, NULL); g_free (basename); /* Copy the style scheme file into PLUMA_STYLES_DIR */ if (!file_copy (fname, new_file_name, &error)) { g_free (new_file_name); g_message ("Cannot install style scheme:\n%s", error->message); return NULL; } copied = TRUE; } else { new_file_name = g_strdup (fname); } g_free (dirname); g_free (styles_dir); /* Reload the available style schemes */ gtk_source_style_scheme_manager_force_rescan (manager); /* Check the new style scheme has been actually installed */ ids = gtk_source_style_scheme_manager_get_scheme_ids (manager); while (*ids != NULL) { GtkSourceStyleScheme *scheme; const gchar *filename; scheme = gtk_source_style_scheme_manager_get_scheme ( pluma_get_style_scheme_manager (), *ids); filename = gtk_source_style_scheme_get_filename (scheme); if (filename && (strcmp (filename, new_file_name) == 0)) { /* The style scheme has been correctly installed */ g_free (new_file_name); return gtk_source_style_scheme_get_id (scheme); } ++ids; } /* The style scheme has not been correctly installed */ if (copied) g_unlink (new_file_name); g_free (new_file_name); return NULL; }