Example #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);
}
Example #2
0
/* 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);
}
Example #3
0
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);
}
Example #4
0
/* 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);
}
Example #5
0
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;
}
Example #7
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);
}
Example #8
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);
}
Example #9
0
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;
}