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); }
GSList * pluma_style_scheme_manager_list_schemes_sorted (GtkSourceStyleSchemeManager *manager) { const gchar * const * scheme_ids; GSList *schemes = NULL; g_return_val_if_fail (GTK_IS_SOURCE_STYLE_SCHEME_MANAGER (manager), NULL); scheme_ids = gtk_source_style_scheme_manager_get_scheme_ids (manager); while (*scheme_ids != NULL) { GtkSourceStyleScheme *scheme; scheme = gtk_source_style_scheme_manager_get_scheme (manager, *scheme_ids); schemes = g_slist_prepend (schemes, scheme); ++scheme_ids; } if (schemes != NULL) schemes = g_slist_sort (schemes, (GCompareFunc)schemes_compare); return schemes; }
/** * i7_app_foreach_color_scheme: * @self: the app * @func: an #GFunc callback * @data: user data to pass to @func * * Iterates through the installed color schemes (system-wide and user-installed) * sorted alphabetically by name, and calls @func on each one. */ void i7_app_foreach_color_scheme(I7App *self, GFunc func, gpointer data) { I7_APP_USE_PRIVATE(self, priv); GSList *schemes = NULL; const char * const *scheme_ids = gtk_source_style_scheme_manager_get_scheme_ids(priv->color_scheme_manager); while (*scheme_ids != NULL) { GtkSourceStyleScheme *scheme = gtk_source_style_scheme_manager_get_scheme(priv->color_scheme_manager, *scheme_ids); schemes = g_slist_prepend(schemes, scheme); ++scheme_ids; } if(schemes != NULL) schemes = g_slist_sort(schemes, (GCompareFunc)schemes_compare); g_slist_foreach(schemes, func, data); g_slist_free(schemes); }
static void gb_vim_complete_colorscheme (const gchar *line, GPtrArray *ar) { GtkSourceStyleSchemeManager *manager; const gchar * const *scheme_ids; const gchar *tmp; g_autofree gchar *prefix = NULL; gsize i; manager = gtk_source_style_scheme_manager_get_default (); scheme_ids = gtk_source_style_scheme_manager_get_scheme_ids (manager); for (tmp = strchr (line, ' '); tmp && *tmp && g_unichar_isspace (g_utf8_get_char (tmp)); tmp = g_utf8_next_char (tmp)) { /* do nothing */ } if (!tmp) return; prefix = g_strndup (line, tmp - line); for (i = 0; scheme_ids [i]; i++) { const gchar *scheme_id = scheme_ids [i]; if (g_str_has_prefix (scheme_id, tmp)) { gchar *item; item = g_strdup_printf ("%s%s", prefix, scheme_id); IDE_TRACE_MSG ("colorscheme: %s", item); g_ptr_array_add (ar, item); } } }
static void ide_preferences_builtin_register_appearance (IdePreferences *preferences) { GtkSourceStyleSchemeManager *manager; const gchar * const *scheme_ids; gint i; ide_preferences_add_page (preferences, "appearance", _("Appearance"), 0); ide_preferences_add_list_group (preferences, "appearance", "basic", _("Themes"), 0); ide_preferences_add_switch (preferences, "appearance", "basic", "org.gnome.builder", "night-mode", NULL, NULL, _("Dark Theme"), _("Whether Builder should use a dark theme"), _("dark theme"), 0); ide_preferences_add_switch (preferences, "appearance", "basic", "org.gnome.builder.editor", "show-grid-lines", NULL, NULL, _("Grid Pattern"), _("Display a grid pattern underneath source code"), NULL, 0); ide_preferences_add_list_group (preferences, "appearance", "schemes", NULL, 100); manager = gtk_source_style_scheme_manager_get_default (); scheme_ids = gtk_source_style_scheme_manager_get_scheme_ids (manager); for (i = 0; scheme_ids [i]; i++) { g_autofree gchar *variant_str = NULL; GtkSourceStyleScheme *scheme; const gchar *title; variant_str = g_strdup_printf ("\"%s\"", scheme_ids [i]); scheme = gtk_source_style_scheme_manager_get_scheme (manager, scheme_ids [i]); title = gtk_source_style_scheme_get_name (scheme); ide_preferences_add_radio (preferences, "appearance", "schemes", "org.gnome.builder.editor", "style-scheme-name", NULL, variant_str, title, NULL, title, i); } ide_preferences_add_list_group (preferences, "appearance", "font", _("Font"), 200); ide_preferences_add_font_button (preferences, "appearance", "font", "org.gnome.builder.editor", "font-name", _("Editor"), C_("Keywords", "editor font monospace"), 0); /* XXX: This belongs in terminal addin */ ide_preferences_add_font_button (preferences, "appearance", "font", "org.gnome.builder.terminal", "font-name", _("Terminal"), C_("Keywords", "terminal font monospace"), 0); }
/** * 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; }
GtkWidget* puss_create_global_options_setup_widget(gpointer tag) { gchar* filepath; GtkBuilder* builder; GtkWidget* panel; GtkWidget* w; GError* err = 0; const Option* option; // create UI builder = gtk_builder_new(); if( !builder ) return 0; gtk_builder_set_translation_domain(builder, TEXT_DOMAIN); filepath = g_build_filename(puss_app->module_path, "res", "puss_setup_widget.ui", NULL); if( !filepath ) { g_printerr("ERROR(puss) : build setup dialog filepath failed!\n"); g_object_unref(G_OBJECT(builder)); return 0; } gtk_builder_add_from_file(builder, filepath, &err); g_free(filepath); if( err ) { g_printerr("ERROR(puss): %s\n", err->message); g_error_free(err); g_object_unref(G_OBJECT(builder)); return 0; } panel = GTK_WIDGET(g_object_ref(gtk_builder_get_object(builder, "main_panel"))); #ifdef G_OS_WIN32 { gchar* path; GDir* dir; const gchar* fname; gchar* rcfile; gint i; gint index = -1; option = puss_option_manager_option_find("puss", "theme"); w = GTK_WIDGET(gtk_builder_get_object(builder, "theme_combo")); path = gtk_rc_get_theme_dir(); dir = g_dir_open(path, 0, 0); if( dir ) { i = 0; for(;;) { fname = g_dir_read_name(dir); if( !fname ) break; rcfile = g_build_filename(path, fname, "gtk-2.0", "gtkrc", NULL); if( g_file_test(rcfile, G_FILE_TEST_EXISTS) ) { #if GTK_MAJOR_VERSION==2 gtk_combo_box_append_text(GTK_COMBO_BOX(w), fname); #else gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(w), fname); #endif if( index < 0 && option->value ) { if( g_str_equal(fname, option->value) ) index = i; ++i; } } g_free(rcfile); } g_dir_close(dir); } g_free(path); if( index >= 0 ) gtk_combo_box_set_active(GTK_COMBO_BOX(w), index); g_signal_connect(w, "changed", G_CALLBACK(cb_combo_box_option_changed), (gpointer)option); } #endif { const gchar* const * ids; const gchar* const * p; gint i; gint index = -1; GtkSourceStyleSchemeManager* ssm = gtk_source_style_scheme_manager_get_default(); option = puss_option_manager_option_find("puss", "editor.style"); w = GTK_WIDGET(gtk_builder_get_object(builder, "style_combo")); if( ssm ) { gtk_source_style_scheme_manager_force_rescan(ssm); ids = gtk_source_style_scheme_manager_get_scheme_ids(ssm); i = 0; for( p=ids; *p; ++p ) { #if GTK_MAJOR_VERSION==2 gtk_combo_box_append_text(GTK_COMBO_BOX(w), *p); #else gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(w), *p); #endif if( index < 0 && option->value ) { if( g_str_equal(*p, option->value) ) index = i; ++i; } } if( index >= 0 ) gtk_combo_box_set_active(GTK_COMBO_BOX(w), index); } g_signal_connect(w, "changed", G_CALLBACK(cb_combo_box_option_changed), (gpointer)option); } { option = puss_option_manager_option_find("puss", "editor.font"); w = GTK_WIDGET(gtk_builder_get_object(builder, "font_button")); if( option->value && option->value[0] ) gtk_font_button_set_font_name(GTK_FONT_BUTTON(w), option->value); g_signal_connect(w, "font-set", G_CALLBACK(cb_font_button_changed), (gpointer)option); } { GtkEntry* entry; option = puss_option_manager_option_find("puss", "fileloader.charset_list"); entry = GTK_ENTRY(gtk_builder_get_object(builder, "charset_entry")); w = GTK_WIDGET(gtk_builder_get_object(builder, "charset_apply_button")); gtk_entry_set_text(entry, option->value); g_signal_connect(w, "clicked", G_CALLBACK(cb_apply_button_changed), (gpointer)entry); } g_object_unref(G_OBJECT(builder)); return panel; }
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); }
/** * _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; }