Пример #1
0
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;
}
Пример #3
0
/**
 * 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);
}
Пример #4
0
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);
}
Пример #6
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;
}
Пример #7
0
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;
}
Пример #8
0
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);
}
Пример #9
0
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;
}